protected function do_build() { $title = __('Edit Experiment', 'nelioab'); // Check settings require_once NELIOAB_ADMIN_DIR . '/error-controller.php'; $error = NelioABErrorController::build_error_page_on_invalid_settings(); if ($error) { return; } // We recover the experiment (if any) // ---------------------------------------------- global $nelioab_admin_controller; $experiment = NULL; $other_names = array(); if (!empty($nelioab_admin_controller->data)) { $experiment = $nelioab_admin_controller->data; } else { $experiment = new NelioABCssAlternativeExperiment(-time()); $experiment->clear(); } // ...and we also recover other experiment names (if any) if (isset($_POST['other_names'])) { $other_names = json_decode(urldecode($_POST['other_names'])); } else { foreach (NelioABExperimentsManager::get_experiments() as $aux) { if ($aux->get_id() != $experiment->get_id()) { array_push($other_names, $aux->get_name()); } } } // If everything is OK, we keep going! // --------------------------------------------------- // Creating the view $view = $this->create_view(); // Experiment information $view->set_basic_info($experiment->get_id(), $experiment->get_name(), $experiment->get_description(), $experiment->get_finalization_mode(), $experiment->get_finalization_value()); // Experiment alternatives $alts = $experiment->get_json4js_alternatives(); for ($i = 0; $i < count($alts); ++$i) { $alts[$i]['value'] = urlencode($alts[$i]['value']); } $view->set_alternatives($alts); // Goals $goals = $experiment->get_goals(); foreach ($goals as $goal) { $view->add_goal($goal->json4js()); } if (count($goals) == 0) { $new_goal = new NelioABAltExpGoal($experiment); $new_goal->set_name(__('Default', 'nelioab')); $view->add_goal($new_goal->json4js()); } return $view; }
public function validate() { global $nelioab_admin_controller; $exp = $nelioab_admin_controller->data; $errors = array(); try { if (trim($exp->get_name()) == '') { array_push($errors, array('exp_name', __('Naming an experiment is mandatory. Please, choose a name for the experiment.', 'nelioab'))); } else { $duplicated_name_found = false; foreach (NelioABExperimentsManager::get_experiments() as $aux) { if (!$duplicated_name_found && $exp->get_name() == $aux->get_name() && $exp->get_id() != $aux->get_id()) { array_push($errors, array('exp_name', __('There is another experiment with the same name. Please, choose a new one.', 'nelioab'))); $duplicated_name_found = true; } } } } catch (Exception $e) { $errors = array(array('none', $e->getMessage())); } $nelioab_admin_controller->validation_errors = $errors; return count($nelioab_admin_controller->validation_errors) == 0; }
protected function do_build() { // Check settings require_once NELIOAB_ADMIN_DIR . '/error-controller.php'; $error = NelioABErrorController::build_error_page_on_invalid_settings(); if ($error) { return; } // We recover the experiment (if any) // ---------------------------------------------- global $nelioab_admin_controller; $experiment = NULL; $other_names = array(); if (!empty($nelioab_admin_controller->data)) { $experiment = $nelioab_admin_controller->data; } else { $experiment = new NelioABThemeAlternativeExperiment(-time()); $experiment->clear(); } // ...and we also recover other experiment names (if any) if (isset($_POST['other_names'])) { $other_names = json_decode(urldecode($_POST['other_names'])); } else { foreach (NelioABExperimentsManager::get_experiments() as $aux) { if ($aux->get_id() != $experiment->get_id()) { array_push($other_names, $aux->get_name()); } } } // Checking whether there is more than one theme // available // --------------------------------------------------- $themes = wp_get_themes(); usort($themes, array($this, 'sort_themes_alphabetically')); if (count($themes) < 2) { require_once NELIOAB_ADMIN_DIR . '/views/errors/message-page.php'; $view = new NelioABMessagePage(__('There is only one theme available', 'nelioab'), __('Please, install one or more themes to create an experiment of this type.', 'nelioab')); return $view; } // If everything is OK, we keep going! // --------------------------------------------------- $current_theme = wp_get_theme(); $current_theme_id = $current_theme['Stylesheet']; $current_theme_name = $current_theme->offsetGet('Title'); // We select the alternatives $experiment->add_selected_theme($current_theme_id, $current_theme_name); if (isset($_POST['nelioab_selected_themes'])) { $selected_themes = json_decode(urldecode($_POST['nelioab_selected_themes'])); if (is_array($selected_themes)) { foreach ($selected_themes as $theme) { if (isset($theme->isSelected) && $theme->isSelected) { $experiment->add_selected_theme($theme->value, $theme->name); } } } } else { $ori = $experiment->get_original(); if ($ori) { $experiment->add_selected_theme($ori->get_value(), $ori->get_name()); } foreach ($experiment->get_alternatives() as $alt) { $experiment->add_selected_theme($alt->get_value(), $alt->get_name()); } } if (isset($_POST['nelioab_appspot_ids'])) { $experiment->set_appspot_ids(json_decode(urldecode($_POST['nelioab_appspot_ids']))); } else { $experiment->set_appspot_ids($experiment->get_appspot_ids()); } // Creating the view $view = $this->create_view(); // Experiment information $view->set_basic_info($experiment->get_id(), $experiment->get_name(), $experiment->get_description(), $experiment->get_finalization_mode(), $experiment->get_finalization_value()); // Experiment alternatives $view->set_selected_themes($experiment->get_selected_themes()); $view->set_appspot_ids($experiment->get_appspot_ids()); $view->set_current_theme($current_theme_id, $current_theme_name, $current_theme->get_screenshot(), $current_theme->offsetGet('Author')); foreach ($themes as $theme) { $id = $theme['Stylesheet']; if ($id == $current_theme_id) { continue; } $view->add_theme($id, $theme->offsetGet('Title'), $theme->get_screenshot(), $theme->offsetGet('Author'), $experiment->is_theme_selected($id)); } // Goals $goals = $experiment->get_goals(); foreach ($goals as $goal) { $view->add_goal($goal->json4js()); } if (count($goals) == 0) { $new_goal = new NelioABAltExpGoal($experiment); $new_goal->set_name(__('Default', 'nelioab')); $view->add_goal($new_goal->json4js()); } return $view; }
public static function generate_html_content() { // Before rendering content we check whether an action was required if (isset($_REQUEST['GET_action']) && isset($_REQUEST['exp_id']) && isset($_REQUEST['exp_type'])) { switch ($_REQUEST['GET_action']) { case 'schedule': NelioABExperimentsPageController::schedule_experiment($_REQUEST['exp_id'], $_REQUEST['exp_type'], $_REQUEST['schedule_date']); break; case 'cancel-schedule': NelioABExperimentsPageController::cancel_scheduling_of_experiment($_REQUEST['exp_id'], $_REQUEST['exp_type']); break; case 'start': NelioABExperimentsPageController::start_experiment($_REQUEST['exp_id'], $_REQUEST['exp_type']); break; case 'duplicate': $new_name = 'New Experiment'; if (isset($_REQUEST['name']) && !empty($_REQUEST['name'])) { $new_name = $_REQUEST['name']; } NelioABExperimentsPageController::duplicate_experiment($new_name, $_REQUEST['exp_id'], $_REQUEST['exp_type']); break; case 'stop': NelioABExperimentsPageController::stop_experiment($_REQUEST['exp_id'], $_REQUEST['exp_type']); break; case 'trash': NelioABExperimentsPageController::trash_experiment($_REQUEST['exp_id'], $_REQUEST['exp_type']); break; case 'restore': NelioABExperimentsPageController::untrash_experiment($_REQUEST['exp_id'], $_REQUEST['exp_type']); break; case 'delete': NelioABExperimentsPageController::remove_experiment($_REQUEST['exp_id'], $_REQUEST['exp_type']); break; default: // Nothing to be done by default // REMEMBER: if something has to be done "by default", YOU must pay // attention to the IF checking of ISSET variables... } } // Obtain DATA from APPSPOT $experiments = array(); try { $experiments = NelioABExperimentsManager::get_experiments(); } catch (Exception $e) { require_once NELIOAB_ADMIN_DIR . '/error-controller.php'; NelioABErrorController::build($e); } // Clean inconsistent data self::clean_inconsistent_data($experiments); // Render content $title = __('Experiments', 'nelioab'); $view = new NelioABExperimentsPage($title); $view->set_experiments($experiments); if (isset($_REQUEST['status'])) { $view->filter_by_status($_REQUEST['status']); } $view->render_content(); // Update cache NelioABExperimentsManager::update_running_experiments_cache(); die; }
protected function do_build() { // Check settings require_once NELIOAB_ADMIN_DIR . '/error-controller.php'; $error = NelioABErrorController::build_error_page_on_invalid_settings(); if ($error) { return; } // Preparing labels for CUSTOM POST alternatives // ---------------------------------------------- $alt_type = NelioABExperiment::CPT_ALT_EXP; $title = __('Edit Custom Post Type Experiment', 'nelioab'); // We recover the experiment (if any) // ---------------------------------------------- global $nelioab_admin_controller; $experiment = NULL; $other_names = array(); if (!empty($nelioab_admin_controller->data)) { $experiment = $nelioab_admin_controller->data; $alt_type = $experiment->get_type(); } else { $experiment = new NelioABPostAlternativeExperiment(-time()); $experiment->clear(); } // ...and we also recover other experiment names (if any) if (isset($_POST['other_names'])) { $other_names = json_decode(urldecode($_POST['other_names'])); } else { foreach (NelioABExperimentsManager::get_experiments() as $aux) { if ($aux->get_id() != $experiment->get_id()) { array_push($other_names, $aux->get_name()); } } } // Get id of Original custom post type // ---------------------------------------------- if (isset($_GET['post-id']) && $_GET['experiment-type'] == NelioABExperiment::CPT_ALT_EXP) { $experiment->set_original($_GET['post-id']); } // Checking whether there are custom post types available // --------------------------------------------------- require_once NELIOAB_UTILS_DIR . '/wp-helper.php'; $post_types = NelioABWpHelper::get_custom_post_types(); if ($alt_type == NelioABExperiment::CPT_ALT_EXP && count($post_types) == 0) { require_once NELIOAB_ADMIN_DIR . '/views/errors/message-page.php'; $view = new NelioABMessagePage(__('There are no custom post types available.', 'nelioab'), __('You have to create a public custom post type and publish some custom posts first to use this type of experiment.', 'nelioab')); return $view; } $found = false; foreach ($post_types as $post_type) { $options_for_posts = array('posts_per_page' => 1, 'post_type' => $post_type->name, 'post_status' => 'publish'); $list_of_posts = get_posts($options_for_posts); require_once NELIOAB_UTILS_DIR . '/data-manager.php'; NelioABArrays::sort_posts($list_of_posts); if (count($list_of_posts) > 0) { $found = true; break; } } if ($alt_type == NelioABExperiment::CPT_ALT_EXP && !$found) { require_once NELIOAB_ADMIN_DIR . '/views/errors/message-page.php'; $view = new NelioABMessagePage(__('There are no custom posts available.', 'nelioab'), __('Please, create one custom post and try again.', 'nelioab')); return $view; } // If everything is OK, we keep going! // --------------------------------------------------- // Creating the view $view = $this->create_view($alt_type); foreach ($other_names as $name) { $view->add_another_experiment_name($name); } // Experiment information $view->set_basic_info($experiment->get_id(), $experiment->get_name(), $experiment->get_description(), $experiment->get_finalization_mode(), $experiment->get_finalization_value()); // Experiment specific variables and alternatives $view->set_custom_post_type($experiment->get_post_type()); $view->set_original_id($experiment->get_originals_id()); $view->set_alternatives($experiment->get_json4js_alternatives()); // Goals $goals = $experiment->get_goals(); foreach ($goals as $goal) { $view->add_goal($goal->json4js()); } return $view; }
protected function do_build() { $title = __('Edit Product Summary Experiment', 'nelioab'); // Check settings require_once NELIOAB_ADMIN_DIR . '/error-controller.php'; $error = NelioABErrorController::build_error_page_on_invalid_settings(); if ($error) { return; } // We recover the experiment (if any) // ---------------------------------------------- global $nelioab_admin_controller; $experiment = NULL; $other_names = array(); if (!empty($nelioab_admin_controller->data)) { $experiment = $nelioab_admin_controller->data; } else { $experiment = new NelioABProductSummaryAlternativeExperiment(-time()); $experiment->clear(); } // ...and we also recover other experiment names (if any) if (isset($_POST['other_names'])) { $other_names = json_decode(urldecode($_POST['other_names'])); } else { foreach (NelioABExperimentsManager::get_experiments() as $aux) { if ($aux->get_id() != $experiment->get_id()) { array_push($other_names, $aux->get_name()); } } } // Get id of Original page or post // ---------------------------------------------- if (isset($_GET['post-id']) && $_GET['experiment-type'] == NelioABExperiment::WC_PRODUCT_SUMMARY_ALT_EXP) { $experiment->set_original($_GET['post-id']); } // Checking whether there are pages or posts available // --------------------------------------------------- // ...pages... $options_for_posts = array('posts_per_page' => 1, 'post_type' => 'product'); $list_of_posts = get_posts($options_for_posts); require_once NELIOAB_UTILS_DIR . '/data-manager.php'; NelioABArrays::sort_posts($list_of_posts); if (count($list_of_posts) == 0) { require_once NELIOAB_ADMIN_DIR . '/views/errors/message-page.php'; $view = new NelioABMessagePage(__('There are no products available.', 'nelioab'), __('Please, create one and try again.', 'nelioab')); return $view; } // If everything is OK, we keep going! // --------------------------------------------------- // Creating the view $view = $this->create_view(); foreach ($other_names as $name) { $view->add_another_experiment_name($name); } // Experiment information $view->set_basic_info($experiment->get_id(), $experiment->get_name(), $experiment->get_description(), $experiment->get_finalization_mode(), $experiment->get_finalization_value()); // Experiment specific variables and alternatives $view->set_original_id($experiment->get_originals_id()); $view->set_alternatives($experiment->get_json4js_alternatives()); return $view; }
protected function do_build() { // Check settings require_once NELIOAB_ADMIN_DIR . '/error-controller.php'; $error = NelioABErrorController::build_error_page_on_invalid_settings(); if ($error) { return; } // Preparing labels for PAGE vs POST alternatives // ---------------------------------------------- $alt_type = NelioABExperiment::PAGE_ALT_EXP; $title = __('Edit Page Experiment', 'nelioab'); if (isset($_GET['experiment-type']) && $_GET['experiment-type'] == NelioABExperiment::POST_ALT_EXP) { $alt_type = NelioABExperiment::POST_ALT_EXP; $title = __('Edit Post Experiment', 'nelioab'); } // We recover the experiment (if any) // ---------------------------------------------- global $nelioab_admin_controller; $experiment = NULL; $other_names = array(); if (!empty($nelioab_admin_controller->data)) { $experiment = $nelioab_admin_controller->data; $alt_type = $experiment->get_type(); } else { $experiment = new NelioABPostAlternativeExperiment(-time()); $experiment->clear(); } // ...and we also recover other experiment names (if any) if (isset($_POST['other_names'])) { $other_names = json_decode(urldecode($_POST['other_names'])); } else { foreach (NelioABExperimentsManager::get_experiments() as $aux) { if ($aux->get_id() != $experiment->get_id()) { array_push($other_names, $aux->get_name()); } } } // Get id of Original page or post // ---------------------------------------------- if (isset($_GET['post-id']) && $_GET['experiment-type'] == NelioABExperiment::POST_ALT_EXP) { $experiment->set_original($_GET['post-id']); } if (isset($_GET['page-id']) && $_GET['experiment-type'] == NelioABExperiment::PAGE_ALT_EXP) { $experiment->set_original($_GET['page-id']); } // Checking whether there are pages or posts available // --------------------------------------------------- // ...pages... $list_of_pages = get_pages(); if ($alt_type == NelioABExperiment::PAGE_ALT_EXP && count($list_of_pages) == 0) { require_once NELIOAB_ADMIN_DIR . '/views/errors/message-page.php'; $view = new NelioABMessagePage(sprintf(__('There are no pages available.<br/><br/><a class="button button-primary" href="%s">Create one now.</a>', 'nelioab'), admin_url('/post-new.php?post_type=page'))); return $view; } // ...posts... $options_for_posts = array('posts_per_page' => 1); $list_of_posts = get_posts($options_for_posts); require_once NELIOAB_UTILS_DIR . '/data-manager.php'; NelioABArrays::sort_posts($list_of_posts); if ($alt_type == NelioABExperiment::POST_ALT_EXP && count($list_of_posts) == 0) { require_once NELIOAB_ADMIN_DIR . '/views/errors/message-page.php'; $view = new NelioABMessagePage(sprintf(__('There are no posts available.<br/><br/><a class="button button-primary" href="%s">Create one now</a>', 'nelioab'), admin_url('/post-new.php'))); return $view; } // If everything is OK, we keep going! // --------------------------------------------------- // Creating the view $view = $this->create_view($alt_type); foreach ($other_names as $name) { $view->add_another_experiment_name($name); } // Experiment information $view->set_basic_info($experiment->get_id(), $experiment->get_name(), $experiment->get_description(), $experiment->get_finalization_mode(), $experiment->get_finalization_value()); // Experiment specific variables and alternatives $view->set_original_id($experiment->get_originals_id()); $view->set_alternatives($experiment->get_json4js_alternatives()); // Goals $goals = $experiment->get_goals(); foreach ($goals as $goal) { $view->add_goal($goal->json4js()); } return $view; }