| | |
| | | <?php |
| | | namespace JVBase\managers\queue\executors; |
| | | |
| | | use JVBase\managers\queue\{Executor, Operation, Progress, Result, Storage}; |
| | | use DateTime; |
| | | use JVBase\managers\queue\{Executor, Operation, Progress, Result}; |
| | | use JVBase\inc\managers\ErrorHelper; |
| | | use JVBase\managers\Errors; |
| | | use JVBase\managers\Roles; |
| | | use JVBase\meta\Meta; |
| | | use JVBase\registrar\Registrar; |
| | | use Exception; |
| | | use WP_Post; |
| | | |
| | | if (!defined('ABSPATH')) { |
| | | exit; |
| | |
| | | */ |
| | | final class ContentExecutor implements Executor |
| | | { |
| | | use ErrorHelper; |
| | | private const HANDLED_TYPES = [ |
| | | 'content_update', |
| | | // 'batch_creation', |
| | | ]; |
| | | |
| | | private int $userId; |
| | | private string $postType; |
| | | private array $fields = []; |
| | | |
| | | public function execute(Operation $operation, Progress $progress): Result |
| | | { |
| | |
| | | }; |
| | | |
| | | } catch (Exception $e) { |
| | | JVB()->error()->log( |
| | | '[ContentExecutor]:execute', |
| | | $e->getMessage(), |
| | | [ |
| | | 'operation_id' => $operation->id, |
| | | 'operation_type' => $operation->type, |
| | | 'user_id' => $operation->userId, |
| | | ] |
| | | ); |
| | | $this->logError($e->getMessage(), 'execute', [ |
| | | 'operation_id' => $operation->id, |
| | | 'operation_type' => $operation->type, |
| | | 'user_id' => $operation->userId, |
| | | ]); |
| | | |
| | | return new Result( |
| | | outcome: 'failed', |
| | |
| | | |
| | | // Send notification |
| | | // if (jvbSiteHasNotifications()) { |
| | | // JVB()->notification()->addNotification( |
| | | // NotificationManager::getInstance()->addNotification( |
| | | // $this->userId, |
| | | // 'content_update_complete', |
| | | // null, |
| | |
| | | // } |
| | | |
| | | $outcome = 'success'; |
| | | if (!empty($errors)) { |
| | | $outcome = count($errors) === count($posts) ? 'failed' : 'partial'; |
| | | if (!empty($results['errors'])) { |
| | | $outcome = count($results['success']) === count($posts) ? 'failed' : 'partial'; |
| | | } |
| | | |
| | | return new Result( |
| | |
| | | return []; |
| | | } |
| | | |
| | | $children = get_children([ |
| | | 'post_parent' => $parentID, |
| | | 'posts_per_page' => -1, |
| | | 'post_status' => ['publish', 'draft'], |
| | | ]); |
| | | |
| | | $children = jvbTimelinePoints($parentID, $parent->post_type, ['publish', 'draft']); |
| | | |
| | | if (count($children) === 0) { |
| | | return []; |
| | |
| | | } |
| | | } |
| | | |
| | | private function calculateTimeline(\WP_POST $previous, \WP_POST $current): ?string |
| | | /** |
| | | * @throws \DateMalformedStringException |
| | | */ |
| | | private function calculateTimeline(WP_POST $previous, WP_POST $current): ?string |
| | | { |
| | | $previousDate = strtotime($previous->post_date); |
| | | $currentDate = strtotime($current->post_date); |
| | |
| | | return $weeks === 1 ? '1 Week' : $weeks . ' Weeks'; |
| | | } |
| | | |
| | | $previousDateTime = new \DateTime($previous->post_date); |
| | | $currentDateTime = new \DateTime($current->post_date); |
| | | $previousDateTime = new DateTime($previous->post_date); |
| | | $currentDateTime = new DateTime($current->post_date); |
| | | |
| | | $interval = $previousDateTime->diff($currentDateTime); |
| | | $months = ($interval->y * 12) + $interval->m; |
| | |
| | | return ($months === 1) ? '1 Month' : $months . ' Months'; |
| | | } |
| | | |
| | | private function swapTimelineParent(\WP_Post $oldParent, \WP_Post $newParent, array $allPosts): void |
| | | private function swapTimelineParent(WP_Post $oldParent, WP_Post $newParent, array $allPosts): void |
| | | { |
| | | // Swap titles and content |
| | | $originalTitle = $oldParent->post_title; |
| | |
| | | ]); |
| | | |
| | | // Clear timeline taxonomy from new parent |
| | | wp_set_object_terms($newParent->ID, [], BASE . 'timeline', false); |
| | | wp_set_object_terms($newParent->ID, [], BASE . 'timeline'); |
| | | |
| | | // Update all other posts to new parent |
| | | foreach ($allPosts as $index => $post) { |
| | |
| | | $meta = Meta::forPost($parentID); |
| | | $values = $meta->getAll($shared); |
| | | |
| | | $children = get_children([ |
| | | 'post_parent' => $parentID, |
| | | 'posts_per_page' => -1, |
| | | 'fields' => 'ids', |
| | | ]); |
| | | $children = jvbTimelinePoints($parentID, get_post_type($parentID), ['any']); |
| | | |
| | | if (empty($children)) { |
| | | continue; |
| | |
| | | }); |
| | | |
| | | foreach ($updates as $parentID => $status) { |
| | | $children = get_children([ |
| | | 'post_parent' => $parentID, |
| | | 'posts_per_page' => -1, |
| | | 'fields' => 'ids' |
| | | ]); |
| | | $children = jvbTimelinePoints($parentID, get_post_type($parentID), ['any']); |
| | | |
| | | if (!empty($children)) { |
| | | foreach($children as $child) { |
| | | if ($status === 'trash') { |
| | |
| | | { |
| | | error_log('Handling term '.$ID.' with data: '.print_r($data, true)); |
| | | //Existing term update |
| | | if ($registrar->hasFeature('is_ownable') && (!JVB()->roles()->isOwner($this->userId, $ID) && !JVB()->roles()->isManager($this->userId, $ID))) { |
| | | if ($registrar->hasFeature('is_ownable') && (!Roles::getInstance()()->isOwner($this->userId, $ID) && !Roles::getInstance()()->isManager($this->userId, $ID))) { |
| | | error_log('Term is ownable. User does not own this term.'); |
| | | $progress->failItem($ID, 'No permission to modify this term'); |
| | | $results['errors'][$ID] = 'No permission'; |