public function run()
 {
     $fileName = Yii::app()->getRuntimePath() . '/banner_stat.dat';
     if (!file_exists($fileName)) {
         // статистики нет
         return self::RESULT_OK;
     }
     $tmpFile = $fileName . ".tmp";
     if (file_exists($tmpFile)) {
         Yii::log('Обнаружен файл "' . $tmpFile . '", возможно, его обработка еще не завершена.', CLogger::LEVEL_ERROR, __CLASS__);
         return 1;
     }
     rename($fileName, $tmpFile);
     $resultArr = array();
     $fp = fopen($tmpFile, "r");
     if ($fp) {
         Yii::beginProfile('aggregate views stat', __CLASS__);
         while ($data = fgets($fp)) {
             $data = trim($data);
             if ($data == "") {
                 continue;
             }
             $arr = explode(",", $data);
             $d = trim($arr[0]);
             $id = trim($arr[1]);
             if (array_key_exists($id, $resultArr)) {
                 $resultArr[$id][] = $d;
             } else {
                 $resultArr[$id] = array($d);
             }
         }
         Yii::beginProfile('aggregate views stat', __CLASS__);
     }
     StatView::newViewPacket(Banner::ID_OBJECT, $resultArr, BannerPlace::VIEWING_TYPE_DAY, 'd.m.Y', false);
     StatView::newViewPacket(Banner::ID_OBJECT, $resultArr, BannerPlace::VIEWING_TYPE_MONTH, 'm.Y', false);
     StatView::newViewPacket(Banner::ID_OBJECT, $resultArr, BannerPlace::VIEWING_TYPE_ALL, '', false);
     @unlink($tmpFile);
     if (file_exists($tmpFile)) {
         Yii::log("Не удалось удалить временный файл " . $tmpFile, CLogger::LEVEL_WARNING, __CLASS__);
     }
     return self::RESULT_OK;
 }
示例#2
0
 public function actionClick($unicName)
 {
     $idObject = Banner::ID_OBJECT;
     /**
      * @var Banner $banner
      */
     $banner = Banner::model()->byUnicName($unicName)->find();
     if ($banner != null) {
         // Статистика за день
         StatView::newView($idObject, $banner->id_banner, BannerPlace::CLICK_DAY, 'd.m.Y', false);
         // Статистика за месяц
         StatView::newView($idObject, $banner->id_banner, BannerPlace::CLICK_MONTH, 'm.Y', false);
         // Статистика всего
         StatView::newView($idObject, $banner->id_banner, BannerPlace::CLICK_ALL, "", false);
         //Вынимаем ссылку
         $link = $banner->link;
         if (mb_strpos($link, "http://") === false && mb_substr($link, 0, 1) != "/") {
             $link = "http://" . $link;
         }
         $this->redirect($link);
         // TODO: сделать пуни-код
     }
 }
示例#3
0
 public static function newView($idObject, $idInstance, $type = 1, $maskDate = "", $saveHistory = true, $where = "", $date = null)
 {
     $result = StatView::newViewPacket($idObject, array($idInstance => array(time())), $type, $maskDate, $saveHistory, $where, $date);
     if (array_key_exists($idInstance, $result)) {
         return $result[$idInstance];
     }
     return 0;
     /*
           // прошлая версия:
           $result = 0; // в результат вернём текущее кол-во просмотров (с учётом этого)
           $sql = "";
           if ($date == null) $date = time();
           if (!$saveHistory) {
             $q = new QuerySql();
             $q->setQuery("SELECT view_count, last_date_process AS date FROM da_stat_view 
                           WHERE id_object = $idObject AND id_instance = $idInstance 
                           AND view_type = $type".($where != "" ? " AND ($where)" : "")." ORDER BY last_date_process DESC LIMIT 1");
             
             $q->exec();
             if ($row = $q->next()) {
               $result = $row->view_count;
               $dateQuery = $row->date;
               // LOW_PRIORITY
               //Если дата истекла (зануляем статистику)
               if ($maskDate != "" && date($maskDate, $date) != date($maskDate, $dateQuery)) {
                 $sql = "UPDATE da_stat_view SET view_count = 1, last_date_process = ".$date." 
                           WHERE id_object = ".$idObject." AND id_instance = ".$idInstance." 
                           AND view_type = ".$type." AND last_date_process=".$dateQuery;
                 $result = 1;
               } else {
                 // Либо маска не задана (статистика за всё время без разреза дат), либо временной период продолжается
                 $sql = "UPDATE da_stat_view SET view_count = (view_count + 1), last_date_process = ".$date." 
                         WHERE id_object = ".$idObject." AND id_instance = ".$idInstance." 
                         AND view_type = ".$type." AND last_date_process=".$dateQuery;
                 $result ++;
               }
             }
             $q->free();
           }
           if ($result == 0) {
             //Вставили новый экземпляр
             $sql = "INSERT IGNORE INTO da_stat_view(id_object, id_instance, view_type, view_count, last_date_process)
                     VALUES(".$idObject.", ".$idInstance.", ".$type.", 1, ".$date.")";
             $result = 1;
           }
           QuerySql::execsql($sql);
           return $result;*/
 }