/** * 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; }
/** * 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; }