public static function load($id)
 {
     $json_data = NelioABBackend::remote_get(NELIOAB_BACKEND_URL . '/exp/post/' . $id);
     $json_data = json_decode($json_data['body']);
     $exp = new NelioABPostAlternativeExperiment($json_data->key->id);
     $exp->set_name($json_data->name);
     if (isset($json_data->description)) {
         $exp->set_description($json_data->description);
     }
     $exp->set_type_using_text($json_data->kind);
     $exp->set_original($json_data->originalPost);
     if (isset($json_data->postType)) {
         $exp->set_post_type($json_data->postType);
     }
     $exp->set_status($json_data->status);
     $exp->set_finalization_mode($json_data->finalizationMode);
     if (isset($json_data->finalizationModeValue)) {
         $exp->set_finalization_value($json_data->finalizationModeValue);
     }
     $exp->track_heatmaps(false);
     if (isset($json_data->showHeatmap) && $json_data->showHeatmap) {
         $exp->track_heatmaps($json_data->showHeatmap);
     }
     if (isset($json_data->start)) {
         $exp->set_start_date($json_data->start);
     }
     if (isset($json_data->finalization)) {
         $exp->set_end_date($json_data->finalization);
     }
     if (isset($json_data->goals)) {
         NelioABExperiment::load_goals_from_json($exp, $json_data->goals);
     }
     $alternatives = array();
     if (isset($json_data->alternatives)) {
         foreach ($json_data->alternatives as $json_alt) {
             $alt = new NelioABAlternative($json_alt->key->id);
             $alt->set_name($json_alt->name);
             $alt->set_value($json_alt->value);
             array_push($alternatives, $alt);
         }
     }
     $exp->set_appspot_alternatives($alternatives);
     return $exp;
 }
Пример #2
0
 /**
  * Adds a non-global, non-headline Alternative Experiment in self::$exps.
  *
  * @param NelioABPostAlternativeExperiment $exp The Alternative Experiment to be added.
  * @param int $alt_index The index of the alternative that this visitor is supposed to see.
  *            If 0, the original version is added; if 1, the first
  *            alternative; if 2, the second; and so on.
  *
  * @since 4.0.0
  */
 private static function add_regular_exp($exp, $alt_index)
 {
     $alt = $exp->get_originals_id();
     if ($alt_index > 0) {
         --$alt_index;
         $alts = $exp->get_alternatives();
         if ($alt_index < count($alts)) {
             /** @var NelioABAlternative $aux */
             $aux = $alts[$alt_index];
             $alt = $aux->get_value();
         }
     }
     if ($alt) {
         self::$exps[$exp->get_originals_id()] = $alt;
     }
 }
 /**
  * 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;
 }
 public function build_experiment_from_post_data()
 {
     $exp = new NelioABPostAlternativeExperiment($_POST['exp_id']);
     $exp->set_original($_POST['exp_original']);
     $exp = $this->compose_basic_alt_exp_using_post_data($exp);
     if (isset($_POST['custom_post_types'])) {
         $exp->set_post_type($_POST['custom_post_types']);
     }
     foreach ($exp->get_appspot_alternatives() as $alt) {
         $id = '' . $alt->get_id();
         $aux = explode(':', $id);
         $alt->set_id($aux[0]);
         $alt->set_value($aux[1]);
     }
     foreach ($exp->get_local_alternatives() as $alt) {
         $alt->set_value($alt->get_id());
     }
     global $nelioab_admin_controller;
     $nelioab_admin_controller->data = $exp;
 }