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