File Manager

Current Directory: /home/astoriaah/www/old15/plugins/system/admintools/feature
Viewing File: /home/astoriaah/www/old15/plugins/system/admintools/feature/sessionoptimiser.php
<?php /** * @package AdminTools * @copyright Copyright (c)2010-2015 Nicholas K. Dionysopoulos * @license GNU General Public License version 3, or later */ defined('_JEXEC') or die; class AtsystemFeatureSessionoptimiser extends AtsystemFeatureAbstract { protected $loadOrder = 600; /** * Is this feature enabled? * * @return bool */ public function isEnabled() { return ($this->params->get('sesoptimizer', 0) == 1); } public function onAfterInitialise() { $minutes = (int)$this->params->get('sesopt_freq', 0); if ($minutes <= 0) { return; } $lastJob = $this->getTimestamp('session_optimize'); $nextJob = $lastJob + $minutes * 60; JLoader::import('joomla.utilities.date'); $now = new JDate(); if ($now->toUnix() >= $nextJob) { $this->setTimestamp('session_optimize'); $this->sessionOptimize(); } } /** * Optimizes the session table. The idea is that as users log in and out, * vast amounts of records are created and deleted, slowly fragmenting the * underlying database file and slowing down user session operations. At * some point, your site might even crash. By doing a periodic optimization * of the sessions table this is prevented. An optimization per hour should * be adequate, even for huge sites. * * Note: this is not necessary if you're not using the database to save * session data. Using disk files, memcache, APC or other alternative caches * has no impact on your database performance. In this case you should not * enable this option, as you have nothing to gain. */ private function sessionOptimize() { $db = $this->db; // First, make sure this is MySQL! $dbClass = get_class($db); if (substr($dbClass, 0, 15) == 'JDatabaseDriver') { $dbClass = substr($dbClass, 15); } else { $dbClass = str_replace('JDatabase', '', $dbClass); } if (!in_array(strtolower($dbClass), array('mysql', 'mysqli'))) { return; } $db->setQuery('CHECK TABLE ' . $db->quoteName('#__session')); $result = $db->loadObjectList(); $isOK = false; if (!empty($result)) { foreach ($result as $row) { if (($row->Msg_type == 'status') && ( ($row->Msg_text == 'OK') || ($row->Msg_text == 'Table is already up to date') ) ) { $isOK = true; } } } // Run a repair only if it is required if (!$isOK) { // The table needs repair $db->setQuery('REPAIR TABLE ' . $db->quoteName('#__session')); $db->execute(); } // Finally, optimize $db->setQuery('OPTIMIZE TABLE ' . $db->quoteName('#__session')); $db->execute(); } }