/** * Sets the default identity provider to be used when no identity is provided. * * @static * @param Scenario_Identity_Provider $provider New provider to set. */ public static function setProvider(Scenario_Identity_Provider $provider = null) { if ($provider !== null) { self::$_idProvider = $provider; } else { require_once 'Scenario/Identity/Provider/Session.php'; self::$_idProvider = new Scenario_Identity_Provider_Session(); } }
/** * Creates a new Scenario_Identity object using session_id as the identifier key. * * @static * @deprecated * @return Scenario_Identity */ public static function sessionIdent() { require_once 'Scenario/Identity.php'; require_once 'Scenario/Identity/Provider/Session.php'; $provider = Scenario_Identity::getProvider(); if (!$provider instanceof Scenario_Identity_Provider_Session) { $provider = new Scenario_Identity_Provider_Session(); } return $provider->getIdentity(); }
/** * Finish an experiment for a given identity * * Mark a given experiment (be it multivar or not) as complete for a given identity. * If a matching treatment does not exist, the call should be ignored, rather than * creating a new treatment. * * @param string|Scenario_Experiment $experiment * @param Scenario_Identity $id */ public function FinishExperiment($experiment, Scenario_Identity $id) { if (is_string($experiment)) { $experiment = $this->GetExperimentByName($experiment); } if ($experiment->isMultiVar()) { $children = array(); foreach ($experiment->getChildren() as $child) { $children[] = $child->getRowId(); } $children = implode(',', $children); $result = $this->getDbAdapter()->update($this->usersTreatmentsTable, array('completed' => 1), array($this->quote('identity = ?', $id->getDbIdent()), sprintf('experiment_id IN (%s)', $children))); } else { $result = $this->getDbAdapter()->update($this->usersTreatmentsTable, array('completed' => 1), array($this->quote('identity = ?', $id->getDbIdent()), $this->quote('experiment_id = ?', $experiment->getRowId()))); } return $result > 0; }
/** * Set configuration options. * * Merges the given options array into the configuration data. * * Usage example for Zend adapter: * <code> * Scenario_Core::getInstance()->config( array( * "adapter" => new Scenario_Data_Adapter_Zend(), * "db" => array( * "uri" => "mysqli://*****:*****@hostname/schema", * "tables" => array( * "experiments" => "scenario_experiments", * "treatments" => "scenario_treatments", * "users_treatments" => "scenario_users_treatments" * ) * ) * ) ); * </code> * * Usage example for Pdo adapter: * <code> * // define the PDO DSN * $dsn = 'mysql:host=localhost;dbname=scenario'; * * // create the adapter * require_once 'Scenario/Data/Adapter/Pdo.php'; * $adapter = new Scenario_Data_Adapter_Pdo($dsn, 'username', 'pass'); * * // configure the core * Scenario_Core::getInstance()->config( array( "adapter" => $adapter ) ); * // Note: if [db][tables] is omitted, adapter will use default table names. * </code> * * @param array $options * @return Scenario_Core */ public function config(array $options = array()) { if (is_array($this->_config)) { $this->_config = array_merge($this->_config, $options); } else { $this->_config = $options; } if (array_key_exists('adapter', $options)) { $adapter = $options['adapter']; if ($adapter instanceof Scenario_Data_Adapter) { $this->setAdapter($adapter); } } if (array_key_exists('identityProvider', $options)) { if ($options['identityProvider'] instanceof Scenario_Identity_Provider) { /** * @see Scenario_Identity */ require_once 'Scenario/Identity.php'; Scenario_Identity::setProvider($options['identityProvider']); } } return $this; }
/** * Finish an experiment for a given identity * * Mark a given experiment (be it multivar or not) as complete for a given identity. * If a matching treatment does not exist, the call should be ignored, rather than * creating a new treatment. * * @param string|Scenario_Experiment $experiment * @param Scenario_Identity $id */ public function FinishExperiment($experiment, Scenario_Identity $id) { if (is_string($experiment)) { $experiment = $this->GetExperimentByName($experiment); } if ($experiment->isMultiVar()) { $children = array(); foreach ($experiment->getChildren() as $child) { $children[] = $child->getRowId(); } $children = implode(',', $children); $sql = "UPDATE {$this->usersTreatmentsTable} SET completed = ? \n WHERE identity = ? AND experiment_id IN ({$children})"; $result = $this->prepare($sql, array(1, $id->getDbIdent())); } else { $sql = "UPDATE {$this->usersTreatmentsTable} SET completed = ?\n WHERE identity = ? AND experiment_id = ?"; $result = $this->prepare($sql, array(1, $id->getDbIdent(), $experiment->getRowId())); } return $result->rowCount() > 0; }