isBot()) // Do not track bots return; $this->tryUpdateStats(); $connection=Yii::app()->db; $date_fmt = (new DateTime())->format('Y-m-d'); $ipaddr = $_SERVER['REMOTE_ADDR']; $unique = $connection->createCommand("SELECT COUNT(*) FROM $this->table_today WHERE ipaddress = '$ipaddr'")->queryScalar() == 0; if ($unique) { $connection->createCommand("INSERT INTO $this->table_today (date, ipaddress) VALUES ('$date_fmt', '$ipaddr');")->execute(); } return $unique; } public function getTotalCount() { $count = Yii::app()->db->createCommand("SELECT SUM(count) FROM $this->table_stats")->queryScalar(); $count = (($count) ? $count : 0) + $this->getTodayCount(); return $count; } public function getTodayCount() { $this->tryUpdateStats(); return Yii::app()->db->createCommand("SELECT COUNT(*) FROM $this->table_today")->queryScalar(); } /** * @param DateTime $day * * @return int */ public function getCountForDay($day) { if ((new DateTime())->format('Y-m-d') == $day->format('Y-m-d')) return $this->getTodayCount(); $fmt = $day->format('Y-m-d'); $count = Yii::app()->db->createCommand("SELECT count FROM ms4_hc_stats WHERE date = '$fmt'")->queryScalar(); return ($count) ? $count : 0; } //############################################################# /** * @return bool */ private function isBot() { return (isset($_SERVER['HTTP_USER_AGENT']) && preg_match('/bot|crawl|slurp|spider/i', $_SERVER['HTTP_USER_AGENT'])); } private function tryUpdateStats() { if ($this->updated) return; // Only update once per instance $this->updated = true; $connection=Yii::app()->db; $row = $connection->createCommand("SELECT * FROM $this->table_today")->queryRow(); if (! $row) return false; // nothing to update $last_date = new DateTime($row['date']); if ($last_date->format('Y-m-d') != (new DateTime())->format('Y-m-d')) { // Get last count $lastday_count = $connection->createCommand("SELECT COUNT(*) FROM $this->table_today")->queryScalar(); // Insert into stats $last_date_fmt = $last_date->format('Y-m-d'); $connection->createCommand("INSERT INTO $this->table_stats (date, count) VALUES ('$last_date_fmt', $lastday_count)")->execute(); // Delete today table $connection->createCommand("DELETE FROM $this->table_today")->execute(); return true; } else { return false; } } }