/** * Verify that a post is ready for deploy. * * @param Post $post * @param Batch $batch */ public function verify_post(Post $post, Batch $batch) { /* * If more then one post is found when searching posts with a specific * GUID, then add an error message. Two or more posts should never share * the same GUID. */ try { $revision = $this->post_dao->get_by_guid($post->get_guid()); } catch (Exception $e) { $this->api->set_preflight_status($batch->get_id(), 2); $this->api->add_preflight_message($batch->get_id(), $e->getMessage(), 'error'); return; } // Check if parent post exist on production or in batch. if (!$this->parent_post_exists($post, $batch->get_posts())) { // Fail pre-flight. $this->api->set_preflight_status($batch->get_id(), 2); // Admin URL of content stage. $admin_url = $batch->get_custom_data('sme_content_stage_admin_url'); $message = sprintf('Post <a href="%s" target="_blank">%s</a> has a parent post that does not exist on production and is not part of this batch. Include post <a href="%s" target="_blank">%s</a> in this batch to resolve this issue.', $admin_url . 'post.php?post=' . $post->get_id() . '&action=edit', $post->get_title(), $admin_url . 'post.php?post=' . $post->get_parent()->get_id() . '&action=edit', $post->get_parent()->get_title()); $this->api->add_preflight_message($batch->get_id(), $message, 'error'); return; } }
/** * Provide a Post object you want to add to the current batch. * * @param Batch $batch * @param Post $post */ private function add_post(Batch $batch, Post $post) { // Make sure the post is not already in the batch. foreach ($batch->get_posts() as $post_in_batch) { if ($post->get_id() === $post_in_batch->get_id()) { return; } } if ($post->get_type() === 'attachment') { $this->add_attachment($batch, $post->get_id()); } // Catch issue with term ID not being set properly. try { $this->post_taxonomy_dao->get_post_taxonomy_relationships($post); } catch (Exception $e) { $this->api->add_preflight_message($batch->get_id(), $e->getMessage(), 'warning'); } $post->set_meta($this->postmeta_dao->get_postmetas_by_post_id($post->get_id())); /* * Make it possible for third-party developers to modify post before it * is added to batch. */ do_action('sme_prepare_post', $post, $batch); $batch->add_post($post); $post_meta = $post->get_meta(); $record_count = count($post_meta); for ($i = 0; $i < $record_count; $i++) { $post_meta[$i] = $this->add_related_posts($batch, $post_meta[$i]); } $post->set_meta($post_meta); }