public static function generate_html_content()
 {
     require_once NELIOAB_MODELS_DIR . '/experiments-manager.php';
     $view = new NelioABCssEditPage();
     $exp_id = 0;
     $css_id = 0;
     if (isset($_REQUEST['exp_id'])) {
         $exp_id = $_REQUEST['exp_id'];
     }
     if (isset($_REQUEST['css_id'])) {
         $css_id = $_REQUEST['css_id'];
     }
     try {
         $exp = NelioABExperimentsManager::get_experiment_by_id($exp_id, NelioABExperiment::CSS_ALT_EXP);
         $view->experiment = $exp;
     } catch (Exception $e) {
         require_once NELIOAB_ADMIN_DIR . '/error-controller.php';
         NelioABErrorController::build($e);
     }
     if (isset($_REQUEST['css_save_alt']) && isset($_REQUEST['css_alt_name']) && isset($_REQUEST['css_alt_value'])) {
         require_once NELIOAB_MODELS_DIR . '/alternatives/css-alternative-experiment.php';
         $exp->update_css_alternative($css_id, $_REQUEST['css_alt_name'], urldecode($_REQUEST['css_alt_value']));
     }
     foreach ($view->experiment->get_alternatives() as $alt) {
         if ($alt->get_id() == $css_id) {
             $view->css_alt = $alt;
         }
     }
     $view->do_render();
     die;
 }
 public static function generate_html_content()
 {
     global $nelioab_admin_controller;
     if (isset($nelioab_admin_controller->data)) {
         $exp = $nelioab_admin_controller->data;
         $exp_id = $exp->get_id();
     } else {
         $exp_id = -time();
         if (isset($_REQUEST['exp_id'])) {
             $exp_id = $_REQUEST['exp_id'];
         }
         $exp = null;
         try {
             $exp = NelioABExperimentsManager::get_experiment_by_id($exp_id, NelioABExperiment::THEME_ALT_EXP);
         } catch (Exception $e) {
             require_once NELIOAB_ADMIN_DIR . '/error-controller.php';
             NelioABErrorController::build($e);
         }
     }
     $title = __('Results of the Experiment', 'nelioab');
     $view = new NelioABThemeAltExpProgressPage($title);
     $view->set_experiment($exp);
     $goals = $exp->get_goals();
     $view->set_goals($goals);
     $goal_id = -1;
     if (isset($_REQUEST['goal'])) {
         $goal_id = $_REQUEST['goal'];
     }
     $view->set_current_selected_goal($goal_id);
     $view->render_content();
     die;
 }
 public static function generate_html_content()
 {
     require_once NELIOAB_MODELS_DIR . '/experiments-manager.php';
     try {
         $summary = NelioABExperimentsManager::get_dashboard_summary();
     } catch (Exception $e) {
         require_once NELIOAB_ADMIN_DIR . '/error-controller.php';
         NelioABErrorController::build($e);
     }
     $title = __('Dashboard', 'nelioab');
     $view = new NelioABDashboardPage($title);
     $view->set_summary($summary);
     $view->render_content();
     die;
 }
 public static function generate_html_content()
 {
     global $nelioab_admin_controller;
     if (isset($nelioab_admin_controller->data)) {
         $exp = $nelioab_admin_controller->data;
         $exp_id = $exp->get_id();
     } else {
         $exp_id = -time();
         if (isset($_REQUEST['exp_id'])) {
             $exp_id = $_REQUEST['exp_id'];
         }
         $exp_type = -1;
         if (isset($_POST['exp_type'])) {
             $exp_type = $_POST['exp_type'];
         }
         $exp = null;
         try {
             $exp = NelioABExperimentsManager::get_experiment_by_id($exp_id, $exp_type);
         } catch (Exception $e) {
             require_once NELIOAB_ADMIN_DIR . '/error-controller.php';
             NelioABErrorController::build($e);
         }
     }
     $title = __('Results of the Experiment', 'nelioab');
     $view = new NelioABWidgetAltExpProgressPage($title);
     $view->set_experiment($exp);
     require_once NELIOAB_EXP_CONTROLLERS_DIR . '/widget-experiment-controller.php';
     $widgets_in_experiments = NelioABWidgetExpAdminController::get_widgets_in_experiments();
     $are_there_alternatives_to_apply = false;
     foreach ($widgets_in_experiments as $info) {
         if ($info['exp'] == $exp->get_id()) {
             $are_there_alternatives_to_apply = true;
         }
     }
     $view->set_there_are_alternatives_to_apply($are_there_alternatives_to_apply);
     $goals = $exp->get_goals();
     $view->set_goals($goals);
     $goal_id = -1;
     if (isset($_REQUEST['goal'])) {
         $goal_id = $_REQUEST['goal'];
     }
     $view->set_current_selected_goal($goal_id);
     $view->render_content();
     die;
 }
 public static function get_controller($type)
 {
     // Determine the proper controller and give it the control...
     switch ($type) {
         case NelioABExperiment::HEADLINE_ALT_EXP:
             require_once NELIOAB_ADMIN_DIR . '/alternatives/headline-alt-exp-creation-page-controller.php';
             return 'NelioABHeadlineAltExpCreationPageController';
         case NelioABExperiment::POST_ALT_EXP:
         case NelioABExperiment::PAGE_ALT_EXP:
             require_once NELIOAB_ADMIN_DIR . '/alternatives/post-alt-exp-creation-page-controller.php';
             return 'NelioABPostAltExpCreationPageController';
         case NelioABExperiment::THEME_ALT_EXP:
             require_once NELIOAB_ADMIN_DIR . '/alternatives/theme-alt-exp-creation-page-controller.php';
             return 'NelioABThemeAltExpCreationPageController';
         case NelioABExperiment::CSS_ALT_EXP:
             require_once NELIOAB_ADMIN_DIR . '/alternatives/css-alt-exp-creation-page-controller.php';
             return 'NelioABCssAltExpCreationPageController';
         case NelioABExperiment::WIDGET_ALT_EXP:
             require_once NELIOAB_ADMIN_DIR . '/alternatives/widget-alt-exp-creation-page-controller.php';
             return 'NelioABWidgetAltExpCreationPageController';
         case NelioABExperiment::MENU_ALT_EXP:
             require_once NELIOAB_ADMIN_DIR . '/alternatives/menu-alt-exp-creation-page-controller.php';
             return 'NelioABMenuAltExpCreationPageController';
         case NelioABExperiment::HEATMAP_EXP:
             require_once NELIOAB_ADMIN_DIR . '/others/heatmap-exp-creation-page-controller.php';
             return 'NelioABHeatmapExpCreationPageController';
         case NelioABExperiment::CPT_ALT_EXP:
             require_once NELIOAB_ADMIN_DIR . '/alternatives/cpt-alt-exp-creation-page-controller.php';
             return 'NelioABCptAltExpCreationPageController';
         case NelioABExperiment::WC_PRODUCT_SUMMARY_ALT_EXP:
             require_once NELIOAB_ADMIN_DIR . '/woocommerce/product-summary-alt-exp-creation-page-controller.php';
             return 'NelioABProductSummaryAltExpCreationPageController';
         default:
             require_once NELIOAB_UTILS_DIR . '/backend.php';
             require_once NELIOAB_ADMIN_DIR . '/error-controller.php';
             $err = NelioABErrCodes::UNKNOWN_ERROR;
             $e = new Exception(NelioABErrCodes::to_string($err), $err);
             NelioABErrorController::build($e);
     }
 }
 public static function get_controller($type)
 {
     // Determine the proper controller and give it the control...
     switch ($type) {
         case NelioABExperiment::HEADLINE_ALT_EXP:
             require_once NELIOAB_ADMIN_DIR . '/progress/headline-alt-exp-progress-page-controller.php';
             return 'NelioABHeadlineAltExpProgressPageController';
         case NelioABExperiment::POST_ALT_EXP:
         case NelioABExperiment::PAGE_ALT_EXP:
         case NelioABExperiment::CPT_ALT_EXP:
             require_once NELIOAB_ADMIN_DIR . '/progress/post-alt-exp-progress-page-controller.php';
             return 'NelioABPostAltExpProgressPageController';
         case NelioABExperiment::THEME_ALT_EXP:
             require_once NELIOAB_ADMIN_DIR . '/progress/theme-alt-exp-progress-page-controller.php';
             return 'NelioABThemeAltExpProgressPageController';
         case NelioABExperiment::CSS_ALT_EXP:
             require_once NELIOAB_ADMIN_DIR . '/progress/css-alt-exp-progress-page-controller.php';
             return 'NelioABCssAltExpProgressPageController';
         case NelioABExperiment::WIDGET_ALT_EXP:
             require_once NELIOAB_ADMIN_DIR . '/progress/widget-alt-exp-progress-page-controller.php';
             return 'NelioABWidgetAltExpProgressPageController';
         case NelioABExperiment::MENU_ALT_EXP:
             require_once NELIOAB_ADMIN_DIR . '/progress/menu-alt-exp-progress-page-controller.php';
             return 'NelioABMenuAltExpProgressPageController';
         case NelioABExperiment::WC_PRODUCT_SUMMARY_ALT_EXP:
             require_once NELIOAB_ADMIN_DIR . '/progress/headline-alt-exp-progress-page-controller.php';
             return 'NelioABHeadlineAltExpProgressPageController';
         case NelioABExperiment::HEATMAP_EXP:
             // Nothing to be done in here...
         // Nothing to be done in here...
         default:
             require_once NELIOAB_UTILS_DIR . '/backend.php';
             require_once NELIOAB_ADMIN_DIR . '/error-controller.php';
             $err = NelioABErrCodes::UNKNOWN_ERROR;
             $e = new Exception(NelioABErrCodes::to_string($err), $err);
             NelioABErrorController::build($e);
     }
 }
 public function on_valid_submit()
 {
     // 1. Save the data properly
     global $nelioab_admin_controller;
     $experiment = $nelioab_admin_controller->data;
     try {
         $experiment->save();
     } catch (Exception $e) {
         require_once NELIOAB_ADMIN_DIR . '/error-controller.php';
         NelioABErrorController::build($e);
     }
     // 2. Redirect to the appropiate page
     echo '[SUCCESS]' . admin_url('admin.php?page=nelioab-experiments&action=list');
     die;
 }
 public static function duplicate_experiment($new_name, $exp_id, $exp_type)
 {
     $exp = NULL;
     try {
         $action = 'duplicate-' . $exp_id;
         if (!isset($_REQUEST['_nonce']) || !nelioab_verify_onetime_nonce($_REQUEST['_nonce'], $action)) {
             require_once NELIOAB_UTILS_DIR . '/backend.php';
             $err = NelioABErrCodes::INVALID_NONCE;
             throw new Exception(NelioABErrCodes::to_string($err), $err);
         }
         $exp = NelioABExperimentsManager::get_experiment_by_id($exp_id, $exp_type);
     } catch (Exception $e) {
         require_once NELIOAB_ADMIN_DIR . '/error-controller.php';
         NelioABErrorController::build($e);
     }
     try {
         if ($exp == NULL) {
             $err = NelioABErrCodes::INVALID_EXPERIMENT;
             throw new Exception(NelioABErrCodes::to_string($err), $err);
         }
         $exp->duplicate($new_name);
     } catch (Exception $e) {
         global $nelioab_admin_controller;
         switch ($e->getCode()) {
             case NelioABErrCodes::EXPERIMENT_CANNOT_BE_DUPLICATED:
                 $nelioab_admin_controller->error_message = $e->getMessage();
                 return;
             default:
                 require_once NELIOAB_ADMIN_DIR . '/error-controller.php';
                 NelioABErrorController::build($e);
         }
     }
 }
 public function edit_alternative_content()
 {
     // 1. Save any local changes
     global $nelioab_admin_controller;
     $experiment = $nelioab_admin_controller->data;
     try {
         $experiment->save();
     } catch (Exception $e) {
         require_once NELIOAB_ADMIN_DIR . '/error-controller.php';
         NelioABErrorController::build($e);
     }
     // 2. Redirect to the edit page
     $exp_id = $experiment->get_id();
     $widget_alt_id = 0;
     if (isset($_POST['content_to_edit'])) {
         $widget_alt_id = $_POST['content_to_edit'];
         $widget_alt_id = $experiment->get_real_id_for_alt($widget_alt_id);
     }
     echo '[SUCCESS]' . admin_url('widgets.php?nelioab_exp=' . $exp_id . '&nelioab_alt=' . $widget_alt_id . '&nelioab_check=' . md5($exp_id . $widget_alt_id) . '&back_to_edit=1');
     die;
 }
 public static function manage_site_registration()
 {
     global $nelioab_admin_controller;
     if (isset($_POST['nelioab_registration_action'])) {
         $action = $_POST['nelioab_registration_action'];
         try {
             switch ($action) {
                 case 'register':
                     $type = 'unknown';
                     if (isset($_POST['nelioab_registration_type'])) {
                         $type = $_POST['nelioab_registration_type'];
                     }
                     $sector = 'unknown';
                     if (isset($_POST['nelioab_registration_sector'])) {
                         $sector = $_POST['nelioab_registration_sector'];
                     }
                     NelioABAccountSettings::register_this_site($type, $sector);
                     $nelioab_admin_controller->message = __('This site has been successfully activated in your account.', 'nelioab');
                     break;
                 case 'deregister':
                     NelioABAccountSettings::deregister_this_site();
                     $nelioab_admin_controller->message = __('This site is no longer active in your account.', 'nelioab');
                 case 'unlink':
                     NelioABAccountSettings::unlink_this_site();
                     $nelioab_admin_controller->message = __('The site is no longer linked to any of your other active sites. If you have free slots, you may now activate it as a completely different and new site.', 'nelioab');
             }
         } catch (Exception $e) {
             require_once NELIOAB_ADMIN_DIR . '/error-controller.php';
             NelioABErrorController::build($e);
         }
     }
 }
 public function edit_alternative_content()
 {
     // 1. Save any local changes
     global $nelioab_admin_controller;
     $experiment = $nelioab_admin_controller->data;
     // Before saving the experiment, we have to get the alternative we
     // want to edit (after saving it, its IDs and/or its values may have
     // change).
     $post_id = '' . $_POST['content_to_edit'];
     if (strpos($post_id, ':')) {
         $aux = explode(':', $post_id);
         $post_id = $aux[1];
     }
     $alt_to_edit = false;
     foreach ($experiment->get_alternatives() as $alt) {
         if ($alt->get_value() == $post_id) {
             $alt_to_edit = $alt;
         }
     }
     try {
         $experiment->save();
     } catch (Exception $e) {
         require_once NELIOAB_ADMIN_DIR . '/error-controller.php';
         NelioABErrorController::build($e);
     }
     // 2. Redirect to the edit page
     update_post_meta($alt_to_edit->get_value(), '_nelioab_original_id', $experiment->get_originals_id());
     echo '[SUCCESS]' . admin_url('post.php?action=edit&post=' . $alt_to_edit->get_value());
     die;
 }
 public function set_current_selected_goal($id)
 {
     $this->goal = false;
     foreach ($this->goals as $goal) {
         if ($goal->get_id() == $id) {
             $this->goal = $goal;
         }
     }
     if (!$this->goal) {
         foreach ($this->goals as $goal) {
             if ($goal->is_main_goal()) {
                 $this->goal = $goal;
             }
         }
     }
     // If there's only one goal, but it's not set as the main goal (weird),
     // I use it by default. It should not happen, but sometimes it does. This
     // fragment resolves the issue.
     if (!$this->goal) {
         if (count($this->goals) == 1) {
             $this->goal = $this->goals[0];
         }
     }
     if (!$this->goal) {
         return;
     }
     try {
         $this->results = $this->goal->get_results();
     } catch (Exception $e) {
         require_once NELIOAB_UTILS_DIR . '/backend.php';
         if ($e->getCode() == NelioABErrCodes::RESULTS_NOT_AVAILABLE_YET) {
             $this->results = null;
         } else {
             require_once NELIOAB_ADMIN_DIR . '/error-controller.php';
             NelioABErrorController::build($e);
         }
     }
 }