public static function render($ajax = false) { if (!current_user_can('manage_options')) { wp_die(esc_html('You do not have sufficient permissions to access this page.')); } // Read options (they are used on the templates) $current_state = Instant_Articles_Wizard_State::get_current_state(); $fb_page_settings = Instant_Articles_Option_FB_Page::get_option_decoded(); $fb_app_settings = Instant_Articles_Option_FB_App::get_option_decoded(); $fb_helper = new Instant_Articles_Wizard_FB_Helper(); $settings_url = self::get_url(); // Handle redirection from Login flow // ---------------------------------- // Only during STATE_APP_SETUP if ($current_state === Instant_Articles_Wizard_State::STATE_APP_SETUP) { $user_access_token = $fb_helper->get_fb_access_token(); $permissions = $fb_helper->get_fb_permissions($user_access_token); // Trigger transition if all needed permissions are granted if ($user_access_token && isset($permissions['pages_manage_instant_articles']) && isset($permissions['pages_show_list'])) { Instant_Articles_Wizard_State::do_transition(Instant_Articles_Wizard_State::STATE_PAGE_SELECTION, array('app_id' => $fb_app_settings['app_id'], 'app_secret' => $fb_app_settings['app_secret'], 'user_access_token' => $user_access_token->getValue())); // Override step $current_state = Instant_Articles_Wizard_State::get_current_state(); } } // ---------------------------------- // Grabs the current configured style // ---------------------------------- // Only during STATE_STYLE_SELECTION if ($current_state === Instant_Articles_Wizard_State::STATE_STYLE_SELECTION) { $settings_style = Instant_Articles_Option_Styles::get_option_decoded(); if (isset($settings_style['article_style']) && !empty($settings_style['article_style'])) { $article_style = $settings_style['article_style']; } else { $article_style = 'default'; } } // ---------------------------------- // Check submission status // ---------------------------------- // Only during STATE_REVIEW_SUBMISSION if ($current_state === Instant_Articles_Wizard_State::STATE_REVIEW_SUBMISSION) { $review_submission_status = Instant_Articles_Wizard_Review_Submission::getReviewSubmissionStatus(); if ($review_submission_status === Instant_Articles_Wizard_Review_Submission::STATUS_NOT_SUBMITTED) { $articles_for_review = Instant_Articles_Wizard_Review_Submission::getArticlesForReview(); } } // ---------------------------------- include dirname(__FILE__) . '/templates/wizard-template.php'; }
/** * Retrieves the current state of the wizard * * @return string The state constant for the current state */ public static function get_current_state() { $option = get_option('instant-articles-current-state', null); if (in_array($option, array_keys(self::$transition_vectors))) { return $option; } // Legacy compatibility - calculate state from existing setup step $fb_page_settings = Instant_Articles_Option_FB_Page::get_option_decoded(); $fb_app_settings = Instant_Articles_Option_FB_App::get_option_decoded(); $app_set_up = !empty($fb_app_settings['app_id']) && !empty($fb_app_settings['app_secret']); $user_logged_in = !empty($fb_app_settings['user_access_token']); $page_selected = !empty($fb_page_settings['page_id']) && !empty($fb_page_settings['page_name']); $review_submitted = Instant_Articles_Wizard_Review_Submission::getReviewSubmissionStatus() === Instant_Articles_Wizard_Review_Submission::STATUS_NOT_SUBMITTED; if (!$app_set_up) { return self::STATE_OVERVIEW; } elseif (!$user_logged_in && !$page_selected) { return self::STATE_APP_SETUP; } elseif (!$page_selected) { return self::STATE_PAGE_SELECTION; } elseif (!$review_submitted) { return self::STATE_REVIEW_SUBMISSION; } else { return self::STATE_STYLE_SELECTION; } }
public static function render($ajax = false) { if (!current_user_can('manage_options')) { wp_die(esc_html('You do not have sufficient permissions to access this page.')); } try { // Read options (they are used on the templates) $current_state = Instant_Articles_Wizard_State::get_current_state(); $fb_page_settings = Instant_Articles_Option_FB_Page::get_option_decoded(); $fb_app_settings = Instant_Articles_Option_FB_App::get_option_decoded(); $fb_helper = new Instant_Articles_Wizard_FB_Helper(); $settings_url = self::get_url(); // Handle redirection from Login flow // ---------------------------------- // Only during STATE_APP_SETUP if ($current_state === Instant_Articles_Wizard_State::STATE_APP_SETUP) { $user_access_token = $fb_helper->get_fb_access_token(); $permissions = $fb_helper->get_fb_permissions($user_access_token); // Trigger transition if all needed permissions are granted if ($user_access_token && isset($permissions['pages_manage_instant_articles']) && isset($permissions['pages_show_list'])) { Instant_Articles_Wizard_State::do_transition(Instant_Articles_Wizard_State::STATE_PAGE_SELECTION, array('app_id' => $fb_app_settings['app_id'], 'app_secret' => $fb_app_settings['app_secret'], 'user_access_token' => $user_access_token->getValue())); // Override step $current_state = Instant_Articles_Wizard_State::get_current_state(); } } // ---------------------------------- // Handle redirection from Login flow // ---------------------------------- // Only during STATE_PAGE_SELECTION if ($current_state === Instant_Articles_Wizard_State::STATE_PAGE_SELECTION) { $fb_helper = new Instant_Articles_Wizard_FB_Helper(); try { $pages = $fb_helper->get_pages(); } catch (Exception $e) { // If we couldn't fetch the pages, revert to the App setup Instant_Articles_Wizard_State::do_transition(Instant_Articles_Wizard_State::STATE_APP_SETUP); } } // Grabs the current configured style // ---------------------------------- // Only during STATE_STYLE_SELECTION if ($current_state === Instant_Articles_Wizard_State::STATE_STYLE_SELECTION) { $settings_style = Instant_Articles_Option_Styles::get_option_decoded(); if (isset($settings_style['article_style']) && !empty($settings_style['article_style'])) { $article_style = $settings_style['article_style']; } else { $article_style = 'default'; } } // ---------------------------------- // Check submission status // ---------------------------------- // Only during STATE_REVIEW_SUBMISSION if ($current_state === Instant_Articles_Wizard_State::STATE_REVIEW_SUBMISSION) { $review_submission_status = Instant_Articles_Wizard_Review_Submission::getReviewSubmissionStatus(); if ($review_submission_status === Instant_Articles_Wizard_Review_Submission::STATUS_NOT_SUBMITTED) { $articles_for_review = Instant_Articles_Wizard_Review_Submission::getArticlesForReview(); // Map to Instant_Articles_Post instances $instant_articles_for_review = array_map(function ($article) { $instant_articles_post = new Instant_Articles_Post($article); // Call transformation to load warnings $instant_articles_post->to_instant_article(); return $instant_articles_post; }, $articles_for_review); // Filter articles with warnings and not forced $instant_articles_with_warnings = array_filter($instant_articles_for_review, function ($article) { $has_warnings = count($article->transformer->getWarnings()) > 0; $force_submit = get_post_meta($article->get_the_id(), Instant_Articles_Publisher::FORCE_SUBMIT_KEY, true); return $has_warnings && !$force_submit; }); } } // ---------------------------------- include dirname(__FILE__) . '/templates/wizard-template.php'; } catch (Exception $e) { if (Instant_Articles_Wizard_State::get_current_state() !== Instant_Articles_Wizard_State::STATE_APP_SETUP) { // Restarts the wizard Instant_Articles_Wizard_State::do_transition(Instant_Articles_Wizard_State::STATE_APP_SETUP); echo '<div class="error settings-error notice is-dismissible"><p><strong>' . esc_html('Error processing your request. Check server log for more details. Setup and login again to renew Application credentials. Error message: ' . $e->getMessage()) . '</strong></p></div>'; Instant_Articles_Wizard::render($ajax, true); } } }