/** * Batch has been successfully imported. * * @param Batch $batch */ public function imported(Batch $batch) { $links = array(); $output = ''; $types = array('page', 'post'); // Only keep published posts of type $types. $posts = array_filter($batch->get_posts(), function (Post $post) use($types) { return $post->get_post_status() == 'publish' && in_array($post->get_type(), $types); }); // Create links for each of the posts. foreach ($posts as $post) { $post_id = $this->post_dao->get_id_by_guid($post->get_guid()); $links[] = array('link' => get_permalink($post_id), 'title' => $post->get_title()); } $links = apply_filters('sme_imported_post_links', $links); foreach ($links as $link) { $output .= '<li><a href="' . $link['link'] . '" target="_blank">' . $link['title'] . '</a></li>'; } if ($output !== '') { $output = '<ul>' . $output . '</ul>'; $message = '<h3>Posts deployed to ' . get_bloginfo('name') . ':</h3>' . $output; $this->api->add_deploy_message($batch->get_id(), $message, 'info', 102); } $this->api->add_deploy_message($batch->get_id(), 'Batch has been successfully imported!', 'success', 101); }
/** * Remove posts that has been deleted on content stage. * * Runs on production server after batch has been sent from content stage * and received by the production server. * * @param array $posts * @param Batch $batch */ public function import($posts, Batch $batch) { // No posts provided. if (empty($posts)) { return; } // String of deleted post IDs. $stage_post_ids = array(); foreach ($posts as $post) { if (!isset($post['guid'])) { continue; } $post_id = $this->api->get_post_id_by_guid($post['guid']); wp_delete_post($post_id, true); if (isset($post['id'])) { array_push($stage_post_ids, $post['id']); } } // String of deleted content staging IDs. $str = implode(',', $stage_post_ids); // Current blog ID. $blog_id = get_current_blog_id(); $message = sprintf('Posts deleted on Content Stage has been removed from Production. <span class="hidden" data-blog-id="%d">%s</span>', $blog_id, $str); $this->api->add_deploy_message($batch->get_id(), $message, 'info', 104); }
/** * Helper method to trigger a background import. */ public function run_background_import() { // Make sure a background import has been requested. if (!isset($_GET['sme_background_import']) || !$_GET['sme_background_import']) { return; } // Make sure a batch ID has been provided. if (!isset($_GET['sme_batch_id']) || !$_GET['sme_batch_id']) { return; } // Make sure a background import key has been provided. if (!isset($_GET['sme_import_key']) || !$_GET['sme_import_key']) { return; } $batch_id = intval($_GET['sme_batch_id']); $import_key = $_GET['sme_import_key']; $batch_dao = $this->dao_factory->create('Batch'); // Get batch from database. $batch = $batch_dao->find($batch_id); // No batch to import found, error. if (!$batch) { error_log(sprintf('Batch with ID %d could not be imported.', $batch_id)); wp_die(__('Something went wrong', 'sme-content-staging')); } // Validate key. if ($import_key !== $this->api->get_import_key($batch->get_id())) { error_log('Unauthorized batch import attempt terminated.'); $this->api->add_deploy_message($batch->get_id(), __('Something went wrong', 'sme-content-staging'), 'error'); $this->api->set_deploy_status($batch->get_id(), 2); wp_die(__('Something went wrong', 'sme-content-staging')); } // Background import is running. Make the old import key useless. $this->api->generate_import_key($batch); // Create the importer. $importer = new Batch_Background_Importer($batch); // Trigger import. $importer->import(); }
/** * Publish a post sent to production. * * New posts that are sent to production will have a post status of * 'publish'. Since we don't want the post to go public until all data * has been synced from content stage, post status has been changed to * 'draft'. Post status is now changed back to 'publish'. * * @param Post $post */ public function publish_post(Post $post) { $prod_id = $this->post_dao->get_id_by_guid($post->get_guid()); if (!$prod_id) { $msg = sprintf('No post with GUID %s found on production.', $post->get_guid()); $this->api->add_deploy_message($this->batch->get_id(), $msg, 'error'); return; } /* * Trigger an action before changing the post status to give other plug-ins * a chance to act before the post goes public (e.g. cache warm-up). */ do_action('sme_pre_publish_post', $prod_id, get_current_blog_id()); /* * Publish the new post if post status from staging environment is set to * "publish". */ if ($post->get_post_status() == 'publish') { $this->post_dao->update_post_status($prod_id, 'publish'); } }