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 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);
         }
     }
 }
        $counter = 0;
        if (isset($result->data)) {
            foreach ($result->data as $heatmap) {
                if (isset($heatmap->value)) {
                    $value = json_decode($heatmap->value);
                    $counter += $value->max;
                }
            }
        }
        if ($counter == 0) {
            if ($exp->get_status() == NelioABExperiment::STATUS_RUNNING) {
                $err = NelioABErrCodes::NO_HEATMAPS_AVAILABLE;
                throw new Exception(NelioABErrCodes::to_string($err), $err);
            } else {
                $err = NelioABErrCodes::NO_HEATMAPS_AVAILABLE_FOR_NON_RUNNING_EXPERIMENT;
                throw new Exception(NelioABErrCodes::to_string($err), $err);
            }
        }
    } catch (Exception $e) {
        echo sprintf('<img src="%s" alt="%s" style="margin-top:50px;"/>', nelioab_asset_link('/admin/images/white-error-icon.png'), __('Funny image to graphically notify of an error.', 'nelioab'));
        ?>
			<p id="ajax-loader-label1"
				style="margin-top:10px;color:white;font-size:20px;"><?php 
        echo $e->getMessage();
        ?>
</p><?php 
        die;
    }
    // Prepare the content
    $page_on_front = nelioab_get_page_on_front();
    if (!$page_on_front && !$post_id) {
 /**
  * Loads the experiment from AppEngine.
  *
  * @param int $id   the ID of the experiment we want to retrieve.
  * @param int $type the type of the experiment we want to retrieve.
  *
  * @return NelioABExperiment the experiment whose ID is `$id` and whose type is `$type`.
  *                           Note that the result will be an instance of
  *                           a concrete subclass of `NelioABExperiment`.
  *
  * @throws Exception `EXPERIMENT_ID_NOT_FOUND`
  *                   This exception is thrown if the experiment was not
  *                   found in AppEngine.
  *
  * @see NelioABExperiment::load
  *
  * @since 3.4.0
  */
 private static function load_experiment_by_id($id, $type)
 {
     require_once NELIOAB_MODELS_DIR . '/goals/goals-manager.php';
     /** @var NelioABExperiment $exp */
     switch ($type) {
         case NelioABExperiment::POST_ALT_EXP:
         case NelioABExperiment::PAGE_ALT_EXP:
         case NelioABExperiment::PAGE_OR_POST_ALT_EXP:
         case NelioABExperiment::CPT_ALT_EXP:
             $exp = NelioABPostAlternativeExperiment::load($id);
             break;
         case NelioABExperiment::HEADLINE_ALT_EXP:
             $exp = NelioABHeadlineAlternativeExperiment::load($id);
             break;
         case NelioABExperiment::WC_PRODUCT_SUMMARY_ALT_EXP:
             $exp = NelioABProductSummaryAlternativeExperiment::load($id);
             break;
         case NelioABExperiment::THEME_ALT_EXP:
             $exp = NelioABThemeAlternativeExperiment::load($id);
             break;
         case NelioABExperiment::CSS_ALT_EXP:
             $exp = NelioABCssAlternativeExperiment::load($id);
             break;
         case NelioABExperiment::WIDGET_ALT_EXP:
             $exp = NelioABWidgetAlternativeExperiment::load($id);
             break;
         case NelioABExperiment::MENU_ALT_EXP:
             $exp = NelioABMenuAlternativeExperiment::load($id);
             break;
         case NelioABExperiment::HEATMAP_EXP:
             $exp = NelioABHeatmapExperiment::load($id);
             break;
         default:
             $err = NelioABErrCodes::EXPERIMENT_ID_NOT_FOUND;
             throw new Exception(NelioABErrCodes::to_string($err), $err);
     }
     $exp->mark_as_fully_loaded();
     return $exp;
 }
 /**
  * Returns true if everything is OK. If it isn't, an exception is thrown.
  *
  * @return boolean true if everything is OK. Otherwise, an exception is thrown.
  *
  * @throws Exception `INVALID_MAIL`
  * @throws Exception `INVALID_PRODUCT_REG_NUM`
  * @throws Exception `NON_ACCEPTED_TAC`
  * @throws Exception `BACKEND_NO_SITE_CONFIGURED`
  * @throws Exception `DEACTIVATED_USER`
  *
  * @since 2.1.0
  */
 public static function check_user_settings()
 {
     if (!NelioABAccountSettings::is_email_valid()) {
         $err = NelioABErrCodes::INVALID_MAIL;
         throw new Exception(NelioABErrCodes::to_string($err), $err);
     }
     if (!NelioABAccountSettings::is_reg_num_valid()) {
         $err = NelioABErrCodes::INVALID_PRODUCT_REG_NUM;
         throw new Exception(NelioABErrCodes::to_string($err), $err);
     }
     if (!NelioABAccountSettings::are_terms_and_conditions_accepted()) {
         $err = NelioABErrCodes::NON_ACCEPTED_TAC;
         throw new Exception(NelioABErrCodes::to_string($err), $err);
     }
     if (!NelioABAccountSettings::has_a_configured_site()) {
         $err = NelioABErrCodes::BACKEND_NO_SITE_CONFIGURED;
         throw new Exception(NelioABErrCodes::to_string($err), $err);
     }
     NelioABAccountSettings::check_account_status();
     if (!NelioABAccountSettings::is_account_active()) {
         $err = NelioABErrCodes::DEACTIVATED_USER;
         throw new Exception(NelioABErrCodes::to_string($err), $err);
     }
     return true;
 }
 /**
  * PHPDOC
  *
  * @param WP_Error|array $result The response to a call to Nelio's servers.
  *
  * @return void
  *
  * @throws Exception with the appropriate error code.
  *
  * @see NelioABErrCodes
  *
  * @since PHPDOC
  */
 private static function throw_exceptions_if_any($result)
 {
     if (is_wp_error($result)) {
         $err = NelioABErrCodes::BACKEND_NOT_AVAILABLE;
         throw new Exception(NelioABErrCodes::to_string($err), $err);
     }
     if ($result['response']['code'] == 404) {
         $err = NelioABErrCodes::ERROR_404;
         throw new Exception(NelioABErrCodes::to_string($err), $err);
     }
     if ($result['response']['code'] == 204) {
         $err = NelioABErrCodes::STATUS_204;
         throw new Exception(NelioABErrCodes::to_string($err), $err);
     }
     $aux = json_decode($result['body']);
     if (isset($aux->beErrCode) && $aux->beErrCode) {
         $err = intval($aux->beErrCode);
         throw new Exception(NelioABErrCodes::to_string($err), $err);
     }
 }