/**
  * Returns the list of running experiments for which the current user has one alternative assigned.
  *
  * @return array the list of running experiments for which the current user has one alternative assigned.
  *
  * @see NelioABVisitor::get_experiment_ids_in_request
  *
  * @since 4.0.0
  */
 public static function get_relevant_running_experiments_from_cache()
 {
     if (self::$relevant_running_experiments) {
         return self::$relevant_running_experiments;
     }
     $env_ids = NelioABVisitor::get_experiment_ids_in_request();
     $running_experiments = self::get_running_experiments_from_cache();
     $relevant_running_experiments = array();
     foreach ($running_experiments as $exp) {
         /** @var NelioABExperiment $exp */
         $is_relevant = false;
         for ($i = 0; $i < count($env_ids) && !$is_relevant; ++$i) {
             if ($exp->get_id() == $env_ids[$i]) {
                 $is_relevant = true;
             }
         }
         if ($is_relevant) {
             $already_in_array = false;
             foreach ($relevant_running_experiments as $relevant_exp) {
                 /** @var NelioABExperiment $relevant_exp */
                 if ($relevant_exp->get_id() == $exp->get_id()) {
                     $already_in_array = true;
                 }
             }
             if (!$already_in_array) {
                 array_push($relevant_running_experiments, $exp);
             }
         }
     }
     if (NelioABVisitor::is_fully_loaded()) {
         self::$relevant_running_experiments = $relevant_running_experiments;
     } else {
         self::$relevant_running_experiments = false;
     }
     return $relevant_running_experiments;
 }
Ejemplo n.º 2
0
 /**
  * Callback for the `the_posts` action, which loads the remaining experiment (if the currently requested page is under test) from the environment.
  *
  * @param array $posts The array of retrieved posts.
  *
  * @return array The array of retrieved posts.
  *
  * @since 4.0.0
  */
 public static function do_late_load($posts)
 {
     /** @var NelioABController $nelioab_controller */
     global $nelioab_controller;
     $current_id = $nelioab_controller->get_queried_post_id();
     // If I don't know which is the queried post, I can't complete the
     // environment yet.
     if (!$current_id) {
         return $posts;
     }
     if (!is_admin() && isset($_GET['nab'])) {
         /** @var int $val */
         $val = $_GET['nab'];
         /** @var NelioABPostAlternativeExperiment $exp */
         $exp = NULL;
         require_once NELIOAB_MODELS_DIR . '/experiments-manager.php';
         $running_exps = NelioABExperimentsManager::get_running_experiments_from_cache();
         for ($i = 0; $i < count($running_exps) && !$exp; ++$i) {
             $aux = $running_exps[$i];
             if ($aux instanceof NelioABAlternativeExperiment && $aux->get_originals_id() == $current_id) {
                 $exp = $aux;
             }
         }
         if ($exp) {
             NelioABVisitor::completeEnvironment($exp, $val);
         }
     }
     self::$is_fully_loaded = true;
     remove_action('the_posts', array('NelioABVisitor', 'do_late_load'));
     return $posts;
 }