diff --git a/Controller/AccessCountersController.php b/Controller/AccessCountersController.php index 70251f0..f1d2b3c 100644 --- a/Controller/AccessCountersController.php +++ b/Controller/AccessCountersController.php @@ -4,6 +4,7 @@ * * @author Noriko Arai * @author Shohei Nakajima + * @author Kazunori Sakamoto * @link http://www.netcommons.org NetCommons Project * @license http://www.netcommons.org/license.txt NetCommons License * @copyright Copyright 2014, NetCommons Project @@ -15,6 +16,7 @@ * AccessCounters Controller * * @author Shohei Nakajima + * @author Kazunori Sakamoto * @package NetCommons\AccessCounters\Controller */ class AccessCountersController extends AccessCountersAppController { @@ -65,33 +67,56 @@ class AccessCountersController extends AccessCountersAppController { */ public function view() { if (! Current::read('Block.id')) { - $this->autoRender = false; - return; + if (! $this->request->is('ajax')) { + $this->autoRender = false; + return; + } + + // AccessCounterデータ取得 + $accessCounter = $this->AccessCounter->getAccessCounter(false); + } else { + // AccessCounterデータ取得 + $accessCounter = $this->AccessCounter->getAccessCounter(true); + + // カウントアップ処理 + $isAccessed = 'block_key_' . Current::read('Block.key'); + if (! $this->Session->read($isAccessed) && ! $this->__isUptimeRobot()) { + try { + $this->AccessCounter->updateCountUp($accessCounter); + $accessCounter['AccessCounter']['count']++; + // アクセス情報を記録 + $this->Session->write($isAccessed, CakeSession::read('Config.userAgent')); + + } catch (Exception $ex) { + CakeLog::error($ex); + throw $ex; + } + } + } + + if ($this->request->is('ajax')) { + $this->set('_serialize', ['counterText']); } - $isAccessed = 'block_key_' . Current::read('Block.key'); - //AccessCounterFrameSettingデータ取得 + // AccessCounterFrameSettingデータ取得 $counterFrameSetting = $this->AccessCounterFrameSetting->getAccessCounterFrameSetting(true); $this->set('accessCounterFrameSetting', $counterFrameSetting['AccessCounterFrameSetting']); - //AccessCounterデータ取得 - $accessCounter = $this->AccessCounter->getAccessCounter(true); + $type = $counterFrameSetting['AccessCounterFrameSetting']['display_type']; + $this->set('displayType', AccessCounterFrameSetting::$displayTypes[$type]); - // カウントアップ処理 - if (! $this->Session->read($isAccessed)) { - try { - $this->AccessCounter->updateCountUp($accessCounter); - $accessCounter['AccessCounter']['count']++; - // アクセス情報を記録 - $this->Session->write($isAccessed, CakeSession::read('Config.userAgent')); - - } catch (Exception $ex) { - CakeLog::error($ex); - throw $ex; - } - } + $format = '%0' . (int)$counterFrameSetting['AccessCounterFrameSetting']['display_digit'] . 'd'; + $this->set('counterText', sprintf($format, $accessCounter['AccessCounter']['count'])); + } - $this->set('accessCounter', $accessCounter['AccessCounter']); +/** + * UptimeRobotのアクセスか否か + * + * @return bool + */ + private function __isUptimeRobot() { + $userAgent = env('HTTP_USER_AGENT'); + return (bool)strpos((string)$userAgent, 'UptimeRobot/2.0'); } /** diff --git a/Model/AccessCounter.php b/Model/AccessCounter.php index 4554bb0..59d194a 100644 --- a/Model/AccessCounter.php +++ b/Model/AccessCounter.php @@ -4,6 +4,7 @@ * * @author Noriko Arai * @author Shohei Nakajima + * @author Kazunori Sakamoto * @link http://www.netcommons.org NetCommons Project * @license http://www.netcommons.org/license.txt NetCommons License * @copyright Copyright 2014, NetCommons Project @@ -15,6 +16,7 @@ * AccessCounter Model * * @author Shohei Nakajima + * @author Kazunori Sakamoto * @package NetCommons\AccessCounters\Model */ class AccessCounter extends AccessCountersAppModel { @@ -273,7 +275,9 @@ public function updateCountUp($data) { }; //トランザクションCommit + $this->invalidateCDN = false; $this->commit(); + $this->invalidateCDN = true; $this->setSlaveDataSource(); $this->getDataSource(); diff --git a/View/AccessCounters/view.ctp b/View/AccessCounters/view.ctp index d5278f2..2eb30db 100644 --- a/View/AccessCounters/view.ctp +++ b/View/AccessCounters/view.ctp @@ -4,21 +4,17 @@ * * @author Noriko Arai * @author Shohei Nakajima + * @author Kazunori Sakamoto * @link http://www.netcommons.org NetCommons Project * @license http://www.netcommons.org/license.txt NetCommons License * @copyright Copyright 2014, NetCommons Project */ + +echo $this->NetCommonsHtml->script('/access_counters/js/access_counters.js'); ?> -
- - - - - - +
+ + {{counterChar}} +
diff --git a/webroot/js/access_counters.js b/webroot/js/access_counters.js index b76d715..2fe993f 100644 --- a/webroot/js/access_counters.js +++ b/webroot/js/access_counters.js @@ -1,9 +1,36 @@ /** * @fileoverview AccessCounters Javascript * @author nakajimashouhei@gmail.com (Shohei Nakajima) + * @author exkazuu@gmail.com (Kazunori Sakamoto) */ +/** + * AccessCounters Controller Javascript + * + * @param {string} Controller name + * @param {function($scope, $http, NC3_URL)} Controller + */ +NetCommonsApp.controller('AccessCounters', + ['$scope', '$http', 'NC3_URL', function($scope, $http, NC3_URL) { + + /** + * initialize + * + * @return {void} + */ + $scope.initialize = function(frameId, counterText) { + $scope.counterText = counterText; + $http.get(NC3_URL + '/access_counters/access_counters/view.json?frame_id=' + frameId) + .then(function(response) { + $scope.counterText = response.data.counterText; + }, + function() { + }); + }; + }]); + + /** * AccessCounterFrameSettings Javascript *