Loading counter.services.yml 0 → 100644 +6 −0 Original line number Diff line number Diff line services: counter_event_subscriber: class: '\Drupal\counter\EventSubscriber\CounterEventsSubscriber' arguments: ['@database', '@config.factory', '@current_user'] tags: - { name: 'event_subscriber' } src/EventSubscriber/CounterEventsSubscriber.php 0 → 100644 +157 −0 Original line number Diff line number Diff line <?php namespace Drupal\counter\EventSubscriber; use Drupal\Component\Utility\Html; use Drupal\Core\Config\ConfigFactoryInterface; use Drupal\Core\Database\Connection; use Drupal\Core\Session\AccountInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpKernel\Event\RequestEvent; use Symfony\Component\HttpKernel\KernelEvents; /** * Class CounterEventSubscriber. * * @package Drupal\counter\EventSubscriber */ class CounterEventsSubscriber implements EventSubscriberInterface { /** * The database connection. * * @var Drupal\Core\Database\Connection */ protected $database; /** * The config factory. * * @var \Drupal\Core\Config\ConfigFactoryInterface */ protected $configFactory; /** * The account interface for accessing current user. * * @var Drupal\Core\Session\AccountInterface */ protected $account; /** * Constructs an event subscriber. * * @param \Drupal\Core\Database\Connection $database * The database connection variable for executing queries. * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory * The config factory for the form. * @param \Drupal\Core\Session\AccountInterface $account * The account interface for accessing current user. */ public function __construct(Connection $database, ConfigFactoryInterface $config_factory, AccountInterface $account) { $this->database = $database; $this->configFactory = $config_factory; $this->account = $account; } /** * {@inheritdoc} * * @return array * The event names to listen for, and the methods that should be executed. */ public static function getSubscribedEvents() { return [ KernelEvents::REQUEST => 'counterInsert', ]; } /** * React to a HTTP event. * * @param \Symfony\Component\HttpKernel\Event\RequestEvent $event * Request event. */ public function counterInsert(RequestEvent $event) { $request = $event->getRequest(); $ip = $request->getClientIp(); $created = \time(); $url = Html::escape($request->getRequestUri()); $config = $this->configFactory->get('counter.settings'); $counter_insert_delay = $config->get('counter_insert_delay'); $counter_skip_admin = $config->get('counter_skip_admin'); // Fetch last created value from database. $db_types = $this->database->driver(); switch ($db_types) { case 'mssql': $sql = " SELECT TOP 1 created FROM {counter} WHERE created<>0 ORDER BY created DESC"; break; case 'oracle': $sql = " SELECT created FROM {counter} WHERE ROWNUM=1 AND created<>0 ORDER BY created DESC"; break; default: $sql = " SELECT created FROM {counter} WHERE created<>0 ORDER BY created DESC LIMIT 1"; } $counter_lastdate = $this->database->query($sql)->fetchField(); // Check if permitted to insert data. $interval = \time() - $counter_lastdate; $data_insert = ($interval >= $counter_insert_delay ? 1 : 0); // Uid, nid, type, browser name, browser version, platform. $node = $request->attributes->get('node'); $nid = 0; $type = ''; $account = $this->account; $path_args = \explode('/', $request->getRequestUri()); if ($path_args[0] == 'node' && is_numeric($path_args[1])) { $nid = $node->nid; $type = $node->type; } $browser = counter_get_browser(); $browser_name = $browser['browser_name']; $browser_version = $browser['browser_version']; $platform = $browser['platform']; $sql = " INSERT INTO {counter} (ip,created,url, uid, nid, type, browser_name, browser_version, platform)" . " VALUES (:ip, :created, :url, :uid, :nid, :type, :browser_name, :browser_version, :platform)"; $counter_exec = FALSE; if ($data_insert && ($account->id() <> 1)) { $counter_exec = TRUE; } else { if ($data_insert && ($account->id() == 1) && !$counter_skip_admin) { $counter_exec = TRUE; } } if ($counter_exec) { $this->database->query($sql, [ ':ip' => $ip, ':created' => $created, ':url' => $url, ':uid' => $account->id(), ':nid' => $nid, ':type' => $type, ':browser_name' => $browser_name, ':browser_version' => $browser_version, ':platform' => $platform, ]); } // Update counter data table. $sql_site_counter = "SELECT counter_value FROM {counter_data} WHERE counter_name='site_counter'"; $site_counter = $this->database->query($sql_site_counter)->fetchField(); $new_site_counter = $site_counter + 1; $sql = " UPDATE {counter_data} SET counter_value = :counter_value WHERE counter_name='site_counter'"; $this->database->query($sql, [':counter_value' => $new_site_counter]); } } src/Plugin/Block/CounterBlock.php +0 −61 Original line number Diff line number Diff line Loading @@ -2,7 +2,6 @@ namespace Drupal\counter\Plugin\Block; use Drupal\Component\Utility\Html; use Drupal\Core\Block\BlockBase; use Drupal\Core\Config\ConfigFactoryInterface; use Drupal\Core\Database\Connection; Loading Loading @@ -105,7 +104,6 @@ class CounterBlock extends BlockBase implements ContainerFactoryPluginInterface * {@inheritdoc} */ public function build() { $config = $this->configFactory->get('counter.settings'); $counter_show_site_counter = $config->get('counter_show_site_counter'); $counter_show_unique_visitor = $config->get('counter_show_unique_visitor'); Loading @@ -117,9 +115,7 @@ class CounterBlock extends BlockBase implements ContainerFactoryPluginInterface $counter_show_server_ip = $config->get('counter_show_server_ip'); $counter_show_ip = $config->get('counter_show_ip'); $counter_show_counter_since = $config->get('counter_show_counter_since'); $counter_skip_admin = $config->get('counter_skip_admin'); $counter_refresh_delay = $config->get('counter_refresh_delay'); $counter_insert_delay = $config->get('counter_insert_delay'); $counter_initial_counter = $config->get('counter_initial_counter'); $counter_initial_unique_visitor = $config->get('counter_initial_unique_visitor'); $counter_initial_since = $config->get('counter_initial_since'); Loading @@ -129,8 +125,6 @@ class CounterBlock extends BlockBase implements ContainerFactoryPluginInterface $counter_statistic_year = $config->get('counter_statistic_year'); $ip = $this->requestStack->getCurrentRequest()->getClientIp(); $counter_svr_ip = $this->requestStack->getCurrentRequest()->server->get('SERVER_ADDR'); $created = \time(); $url = Html::escape($this->requestStack->getCurrentRequest()->getRequestUri()); // Counter_insert_delay. $db_types = $this->database->driver(); Loading @@ -151,63 +145,8 @@ class CounterBlock extends BlockBase implements ContainerFactoryPluginInterface // Check if permitted to insert data. $interval = \time() - $counter_lastdate; $data_insert = ($interval >= $counter_insert_delay ? 1 : 0); $data_update = ($interval >= $counter_refresh_delay ? 1 : 0); // Uid, nid, type, browser name, browser version, platform. $node = $this->requestStack->getCurrentRequest()->attributes->get('node'); $nid = 0; $type = ''; $account = $this->account; $path_args = \explode('/', $this->requestStack->getCurrentRequest()->getRequestUri()); if ($path_args[0] == 'node' && is_numeric($path_args[1])) { $nid = $node->nid; $type = $node->type; } $browser = counter_get_browser(); $browser_name = $browser['browser_name']; $browser_version = $browser['browser_version']; $platform = $browser['platform']; $sql = " INSERT INTO {counter} (ip,created,url, uid, nid, type, browser_name, browser_version, platform)" . " VALUES (:ip, :created, :url, :uid, :nid, :type, :browser_name, :browser_version, :platform)"; $counter_exec = FALSE; if ($data_insert && ($account->id() <> 1)) { $counter_exec = TRUE; } else { if ($data_insert && ($account->id() == 1) && !$counter_skip_admin) { $counter_exec = TRUE; } } if ($counter_exec) { $results = $this->database->query($sql, [ ':ip' => $ip, ':created' => $created, ':url' => $url, ':uid' => $account->id(), ':nid' => $nid, ':type' => $type, ':browser_name' => $browser_name, ':browser_version' => $browser_version, ':platform' => $platform, ]); } else { return; } $sql_site_counter = "SELECT counter_value FROM {counter_data} WHERE counter_name='site_counter'"; $site_counter = $this->database->query($sql_site_counter)->fetchField(); $new_site_counter = $site_counter + 1; $sql = " UPDATE {counter_data} SET counter_value = :counter_value WHERE counter_name='site_counter'"; $results = $this->database->query($sql, [':counter_value' => $new_site_counter]); // Read counter_data. $sql = " SELECT * FROM {counter_data} ORDER BY counter_name"; $results = $this->database->query($sql); Loading Loading
counter.services.yml 0 → 100644 +6 −0 Original line number Diff line number Diff line services: counter_event_subscriber: class: '\Drupal\counter\EventSubscriber\CounterEventsSubscriber' arguments: ['@database', '@config.factory', '@current_user'] tags: - { name: 'event_subscriber' }
src/EventSubscriber/CounterEventsSubscriber.php 0 → 100644 +157 −0 Original line number Diff line number Diff line <?php namespace Drupal\counter\EventSubscriber; use Drupal\Component\Utility\Html; use Drupal\Core\Config\ConfigFactoryInterface; use Drupal\Core\Database\Connection; use Drupal\Core\Session\AccountInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpKernel\Event\RequestEvent; use Symfony\Component\HttpKernel\KernelEvents; /** * Class CounterEventSubscriber. * * @package Drupal\counter\EventSubscriber */ class CounterEventsSubscriber implements EventSubscriberInterface { /** * The database connection. * * @var Drupal\Core\Database\Connection */ protected $database; /** * The config factory. * * @var \Drupal\Core\Config\ConfigFactoryInterface */ protected $configFactory; /** * The account interface for accessing current user. * * @var Drupal\Core\Session\AccountInterface */ protected $account; /** * Constructs an event subscriber. * * @param \Drupal\Core\Database\Connection $database * The database connection variable for executing queries. * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory * The config factory for the form. * @param \Drupal\Core\Session\AccountInterface $account * The account interface for accessing current user. */ public function __construct(Connection $database, ConfigFactoryInterface $config_factory, AccountInterface $account) { $this->database = $database; $this->configFactory = $config_factory; $this->account = $account; } /** * {@inheritdoc} * * @return array * The event names to listen for, and the methods that should be executed. */ public static function getSubscribedEvents() { return [ KernelEvents::REQUEST => 'counterInsert', ]; } /** * React to a HTTP event. * * @param \Symfony\Component\HttpKernel\Event\RequestEvent $event * Request event. */ public function counterInsert(RequestEvent $event) { $request = $event->getRequest(); $ip = $request->getClientIp(); $created = \time(); $url = Html::escape($request->getRequestUri()); $config = $this->configFactory->get('counter.settings'); $counter_insert_delay = $config->get('counter_insert_delay'); $counter_skip_admin = $config->get('counter_skip_admin'); // Fetch last created value from database. $db_types = $this->database->driver(); switch ($db_types) { case 'mssql': $sql = " SELECT TOP 1 created FROM {counter} WHERE created<>0 ORDER BY created DESC"; break; case 'oracle': $sql = " SELECT created FROM {counter} WHERE ROWNUM=1 AND created<>0 ORDER BY created DESC"; break; default: $sql = " SELECT created FROM {counter} WHERE created<>0 ORDER BY created DESC LIMIT 1"; } $counter_lastdate = $this->database->query($sql)->fetchField(); // Check if permitted to insert data. $interval = \time() - $counter_lastdate; $data_insert = ($interval >= $counter_insert_delay ? 1 : 0); // Uid, nid, type, browser name, browser version, platform. $node = $request->attributes->get('node'); $nid = 0; $type = ''; $account = $this->account; $path_args = \explode('/', $request->getRequestUri()); if ($path_args[0] == 'node' && is_numeric($path_args[1])) { $nid = $node->nid; $type = $node->type; } $browser = counter_get_browser(); $browser_name = $browser['browser_name']; $browser_version = $browser['browser_version']; $platform = $browser['platform']; $sql = " INSERT INTO {counter} (ip,created,url, uid, nid, type, browser_name, browser_version, platform)" . " VALUES (:ip, :created, :url, :uid, :nid, :type, :browser_name, :browser_version, :platform)"; $counter_exec = FALSE; if ($data_insert && ($account->id() <> 1)) { $counter_exec = TRUE; } else { if ($data_insert && ($account->id() == 1) && !$counter_skip_admin) { $counter_exec = TRUE; } } if ($counter_exec) { $this->database->query($sql, [ ':ip' => $ip, ':created' => $created, ':url' => $url, ':uid' => $account->id(), ':nid' => $nid, ':type' => $type, ':browser_name' => $browser_name, ':browser_version' => $browser_version, ':platform' => $platform, ]); } // Update counter data table. $sql_site_counter = "SELECT counter_value FROM {counter_data} WHERE counter_name='site_counter'"; $site_counter = $this->database->query($sql_site_counter)->fetchField(); $new_site_counter = $site_counter + 1; $sql = " UPDATE {counter_data} SET counter_value = :counter_value WHERE counter_name='site_counter'"; $this->database->query($sql, [':counter_value' => $new_site_counter]); } }
src/Plugin/Block/CounterBlock.php +0 −61 Original line number Diff line number Diff line Loading @@ -2,7 +2,6 @@ namespace Drupal\counter\Plugin\Block; use Drupal\Component\Utility\Html; use Drupal\Core\Block\BlockBase; use Drupal\Core\Config\ConfigFactoryInterface; use Drupal\Core\Database\Connection; Loading Loading @@ -105,7 +104,6 @@ class CounterBlock extends BlockBase implements ContainerFactoryPluginInterface * {@inheritdoc} */ public function build() { $config = $this->configFactory->get('counter.settings'); $counter_show_site_counter = $config->get('counter_show_site_counter'); $counter_show_unique_visitor = $config->get('counter_show_unique_visitor'); Loading @@ -117,9 +115,7 @@ class CounterBlock extends BlockBase implements ContainerFactoryPluginInterface $counter_show_server_ip = $config->get('counter_show_server_ip'); $counter_show_ip = $config->get('counter_show_ip'); $counter_show_counter_since = $config->get('counter_show_counter_since'); $counter_skip_admin = $config->get('counter_skip_admin'); $counter_refresh_delay = $config->get('counter_refresh_delay'); $counter_insert_delay = $config->get('counter_insert_delay'); $counter_initial_counter = $config->get('counter_initial_counter'); $counter_initial_unique_visitor = $config->get('counter_initial_unique_visitor'); $counter_initial_since = $config->get('counter_initial_since'); Loading @@ -129,8 +125,6 @@ class CounterBlock extends BlockBase implements ContainerFactoryPluginInterface $counter_statistic_year = $config->get('counter_statistic_year'); $ip = $this->requestStack->getCurrentRequest()->getClientIp(); $counter_svr_ip = $this->requestStack->getCurrentRequest()->server->get('SERVER_ADDR'); $created = \time(); $url = Html::escape($this->requestStack->getCurrentRequest()->getRequestUri()); // Counter_insert_delay. $db_types = $this->database->driver(); Loading @@ -151,63 +145,8 @@ class CounterBlock extends BlockBase implements ContainerFactoryPluginInterface // Check if permitted to insert data. $interval = \time() - $counter_lastdate; $data_insert = ($interval >= $counter_insert_delay ? 1 : 0); $data_update = ($interval >= $counter_refresh_delay ? 1 : 0); // Uid, nid, type, browser name, browser version, platform. $node = $this->requestStack->getCurrentRequest()->attributes->get('node'); $nid = 0; $type = ''; $account = $this->account; $path_args = \explode('/', $this->requestStack->getCurrentRequest()->getRequestUri()); if ($path_args[0] == 'node' && is_numeric($path_args[1])) { $nid = $node->nid; $type = $node->type; } $browser = counter_get_browser(); $browser_name = $browser['browser_name']; $browser_version = $browser['browser_version']; $platform = $browser['platform']; $sql = " INSERT INTO {counter} (ip,created,url, uid, nid, type, browser_name, browser_version, platform)" . " VALUES (:ip, :created, :url, :uid, :nid, :type, :browser_name, :browser_version, :platform)"; $counter_exec = FALSE; if ($data_insert && ($account->id() <> 1)) { $counter_exec = TRUE; } else { if ($data_insert && ($account->id() == 1) && !$counter_skip_admin) { $counter_exec = TRUE; } } if ($counter_exec) { $results = $this->database->query($sql, [ ':ip' => $ip, ':created' => $created, ':url' => $url, ':uid' => $account->id(), ':nid' => $nid, ':type' => $type, ':browser_name' => $browser_name, ':browser_version' => $browser_version, ':platform' => $platform, ]); } else { return; } $sql_site_counter = "SELECT counter_value FROM {counter_data} WHERE counter_name='site_counter'"; $site_counter = $this->database->query($sql_site_counter)->fetchField(); $new_site_counter = $site_counter + 1; $sql = " UPDATE {counter_data} SET counter_value = :counter_value WHERE counter_name='site_counter'"; $results = $this->database->query($sql, [':counter_value' => $new_site_counter]); // Read counter_data. $sql = " SELECT * FROM {counter_data} ORDER BY counter_name"; $results = $this->database->query($sql); Loading