Exemple #1
0
 /**
  * Returns active A/B-test
  *
  * @return array|null
  */
 public static function getActiveTest()
 {
     static $abtest;
     static $defined;
     if (!defined('SITE_ID') || !SITE_ID) {
         return null;
     }
     if (empty($defined)) {
         $cache = new \CPHPCache();
         if ($cache->initCache(30 * 24 * 3600, 'abtest_active_' . SITE_ID, '/abtest')) {
             $abtest = $cache->getVars();
         } else {
             $abtest = ABTestTable::getList(array('order' => array('SORT' => 'ASC'), 'filter' => array('SITE_ID' => SITE_ID, 'ACTIVE' => 'Y', '<=START_DATE' => new Type\DateTime())))->fetch() ?: null;
             $cache->startDataCache();
             $cache->endDataCache($abtest);
         }
         $defined = true;
         if (!empty($abtest)) {
             if (!$abtest['MIN_AMOUNT']) {
                 $capacity = AdminHelper::getSiteCapacity($abtest['SITE_ID']);
                 if ($capacity['min'] > 0) {
                     $result = ABTestTable::update($abtest['ID'], array('MIN_AMOUNT' => $capacity['min']));
                     if ($result->isSuccess()) {
                         $cache->clean('abtest_active_' . SITE_ID, '/abtest');
                         $abtest['MIN_AMOUNT'] = $capacity['min'];
                     }
                 }
             }
             if (intval($abtest['DURATION']) == -1) {
                 if (intval($abtest['MIN_AMOUNT']) > 0) {
                     $capacity = AdminHelper::getTestCapacity($abtest['ID']);
                     if ($capacity['A'] >= $abtest['MIN_AMOUNT'] && $capacity['B'] >= $abtest['MIN_AMOUNT']) {
                         Helper::stopTest($abtest['ID'], true);
                         $abtest = null;
                     }
                 }
             } else {
                 if (intval($abtest['DURATION']) > 0) {
                     $end = clone $abtest['START_DATE'];
                     $end->add(intval($abtest['DURATION']) . ' days');
                     if (time() > $end->format('U')) {
                         Helper::stopTest($abtest['ID'], true);
                         $abtest = null;
                     }
                 }
             }
         }
     }
     return $abtest;
 }