/** * Returns A/B-test related attribute types * * @return array */ public static function onGetAttributeTypes() { $sections = array('A' => array('NAME' => Localization\Loc::getMessage('ABTEST_CONV_TEST_SECTION_A_NAME')), 'B' => array('NAME' => Localization\Loc::getMessage('ABTEST_CONV_TEST_SECTION_B_NAME'))); return array('abtest' => array('MODULE' => 'abtest', 'NAME' => Localization\Loc::getMessage('ABTEST_CONVATTR_TEST_NAME'), 'SORT' => 5000, 'GET_VALUES' => function (array $ids) { $result = ABTestTable::getList(array('select' => array('ID', 'NAME'), 'filter' => array('ID' => $ids), 'order' => array('SORT' => 'ASC'))); $values = array(); while ($abtest = $result->fetch()) { if (empty($abtest['NAME'])) { $abtest['NAME'] = str_replace('#ID#', $abtest['ID'], Localization\Loc::getMessage('ABTEST_CONV_TEST_TITLE')); } $values[$abtest['ID']] = array('NAME' => $abtest['NAME']); } return $values; }), 'abtest_section' => array('MODULE' => 'abtest', 'NAME' => Localization\Loc::getMessage('ABTEST_CONVATTR_TEST_SECTION_NAME'), 'SORT' => 5100, 'GET_VALUES' => function (array $ids) use($sections) { $values = array(); foreach ($ids as $id) { if (!empty($sections[$id])) { $values[$id] = $sections[$id]; } } return $values; })); }
/** * Returns A/B-test traffic amounts * * @param int $id A/B-test ID. * @return array */ public static function getTestCapacity($id) { $cache = new \CPHPCache(); if ($cache->initCache(time() - strtotime('today'), 'abtest_capacity_' . intval($id), '/abtest')) { $capacity = $cache->getVars(); } else { if (Loader::includeModule('conversion')) { if ($conversionRates = Conversion\RateManager::getTypes(array('ACTIVE' => true))) { if ($abtest = ABTestTable::getById($id)->fetch()) { $lid = $abtest['SITE_ID']; $baseRate = array_slice($conversionRates, 0, 1, true); $reportContext = new Conversion\ReportContext(); $reportContext->setAttribute('conversion_site', $lid); $reportContext->setAttribute('abtest', $id); $reportContext->setAttribute('abtest_section', 'A'); $groupAData = reset($reportContext->getRatesDeprecated($baseRate, array(), null)); $reportContext->unsetAttribute('abtest_section', 'A'); $reportContext->setAttribute('abtest_section', 'B'); $groupBData = reset($reportContext->getRatesDeprecated($baseRate, array(), null)); $capacity = array('A' => $groupAData['DENOMINATOR'], 'B' => $groupBData['DENOMINATOR']); $cache->startDataCache(strtotime('tomorrow') - time()); $cache->endDataCache($capacity); } } } } return !empty($capacity) ? $capacity : array('A' => 0, 'B' => 0); }
/** * Deletes an A/B-test * * @param int $id A/B-test ID. * @return bool */ public static function deleteTest($id) { if ($abtest = ABTestTable::getById($id)->fetch()) { $result = ABTestTable::delete(intval($id)); if ($result->isSuccess()) { if ($abtest['ACTIVE'] == 'Y') { Helper::clearCache($abtest['SITE_ID']); } return true; } } return false; }