diff --git a/module/VuFind/src/VuFind/Controller/AdminController.php b/module/VuFind/src/VuFind/Controller/AdminController.php index e4ce8810d1517fb2b4ae84420969c1ed3545db1d..7f1e79dd2006c3780b5ac02b120c1eeba08ab0c2 100644 --- a/module/VuFind/src/VuFind/Controller/AdminController.php +++ b/module/VuFind/src/VuFind/Controller/AdminController.php @@ -28,7 +28,8 @@ namespace VuFind\Controller; use VuFind\Config\Reader as ConfigReader, VuFind\Db\Table\Search as SearchTable, VuFind\Exception\Forbidden as ForbiddenException, - VuFind\Http\Client as HttpClient, Zend\Mvc\MvcEvent; + VuFind\Http\Client as HttpClient, Zend\Mvc\MvcEvent, + VuFind\Statistics\AbstractBase as Statistics; /** * Class controls VuFind administration. @@ -147,46 +148,47 @@ class AdminController extends AbstractBase */ public function statisticsAction() { - /* TODO + $view = $this->createViewModel(); + //todo $config = ConfigReader::getConfig(); $statsFilled = array( 'search' => false, 'record' => false ); // Search statistics - $search = new VF_Statistics_Search(); - $this->view->searchesBySource + $search = new \VuFind\Statistics\Search(); + $view->searchesBySource = $config->Statistics->searchesBySource ?: false; $searchSummary = $search->getStatsSummary( $config, 7, $config->Statistics->searchesBySource ); - $this->view->topSearches = isset($searchSummary['top']) + $view->topSearches = isset($searchSummary['top']) ? $searchSummary['top'] : null; - $this->view->emptySearches = isset($searchSummary['empty']) + $view->emptySearches = isset($searchSummary['empty']) ? $searchSummary['empty'] : null; - $this->view->totalSearches = isset($searchSummary['total']) + $view->totalSearches = isset($searchSummary['total']) ? $searchSummary['total'] : null; // Record statistics - $records = new VF_Statistics_Record(); - $this->view->recordsBySource = $config->Statistics->recordsBySource ?: false; + $records = new \VuFind\Statistics\Record(); + $view->recordsBySource = $config->Statistics->recordsBySource ?: false; $recordSummary = $records->getStatsSummary( $config, 5, $config->Statistics->recordsBySource ); - $this->view->topRecords = isset($recordSummary['top']) + $view->topRecords = isset($recordSummary['top']) ? $recordSummary['top'] : null; - $this->view->totalRecordViews = isset($recordSummary['total']) + $view->totalRecordViews = isset($recordSummary['total']) ? $recordSummary['total'] : null; // Browser statistics - $this->view->currentBrowser = VF_Statistics::getBrowser( + $view->currentBrowser = Statistics::getBrowser( $this->getRequest()->getServer('HTTP_USER_AGENT') ); // Look for universal statistics recorder $matchFound = false; - foreach (VF_Statistics::getDriversForSource(null) as $currentDriver) { + foreach (Statistics::getDriversForSource(null) as $currentDriver) { $browserStats = $currentDriver->getBrowserStats(false, 5); if (!empty($browserStats)) { $matchFound = true; @@ -196,7 +198,7 @@ class AdminController extends AbstractBase // If no full coverage mode found, take the first valid source if (!$matchFound) { - $drivers = VF_Statistics::getDriversForSource(null, true); + $drivers = Statistics::getDriversForSource(null, true); foreach ($drivers as $currentDriver) { $browserStats = $currentDriver->getBrowserStats(false, 5); if (!empty($browserStats)) { @@ -208,12 +210,13 @@ class AdminController extends AbstractBase // Initialize browser/version data in view based on what we found above: if ($matchFound) { - $this->view->browserStats = $browserStats; - $this->view->topVersions = $currentDriver->getBrowserStats(true, 5); + $view->browserStats = $browserStats->toArray(); + $view->topVersions = $currentDriver->getBrowserStats(true, 5); } else { - $this->view->browserStats = $this->view->topVersions = null; + $view->browserStats = $view->topVersions = null; } - */ + + return $view; } /** diff --git a/module/VuFind/src/VuFind/Db/Table/UserStats.php b/module/VuFind/src/VuFind/Db/Table/UserStats.php index 136b047ec217e7d176d19920b888665f4ddf6081..e53ac0699c1eb81694e57cc8d8f3e58ecb493e18 100644 --- a/module/VuFind/src/VuFind/Db/Table/UserStats.php +++ b/module/VuFind/src/VuFind/Db/Table/UserStats.php @@ -27,6 +27,8 @@ */ namespace VuFind\Db\Table; +use Zend\Db\Sql\Expression; + /** * Table Definition for user statistics * @@ -57,32 +59,43 @@ class UserStats extends Gateway */ public function getBrowserStats($withVersions = false, $limit = 5) { - /* TODO - $select = $this->select(); - if ($withVersions) { - $select->from( - array($this->_name), - array( - 'browserName' => 'CONCAT_WS(" ",browser,browserVersion)', - 'count' => 'COUNT(DISTINCT session)' - ) - ); - $select->group('browserName'); - } else { - $select->from( - array($this->_name), - array( - 'browserName' => 'browser', - 'count' => 'COUNT(DISTINCT session)' - ) - ); - $select->group('browser'); - } - $select->limit($limit); - $select->order('count DESC'); - $stmt = $select->query(); - $result = $stmt->fetchAll(); - return $result; - */ + $callback = function($select) use ($withVersions, $limit) { + if ($withVersions) { + $select->columns( + array( + 'browserName' => new Expression( + 'CONCAT_WS(" ",?,?)', + array('browser', 'browserVersion'), + array( + Expression::TYPE_IDENTIFIER, + Expression::TYPE_IDENTIFIER + ) + ), + 'count' => new Expression( + 'COUNT(DISTINCT (?))', + array('session'), + array(Expression::TYPE_IDENTIFIER) + ) + ) + ); + $select->group('browserName'); + } else { + $select->columns( + array( + 'browserName' => 'browser', + 'count' => new Expression( + 'COUNT(DISTINCT (?))', + array('session'), + array(Expression::TYPE_IDENTIFIER) + ) + ) + ); + $select->group('browser'); + } + $select->limit($limit); + $select->order('count DESC'); + }; + + return $this->select($callback); } } \ No newline at end of file diff --git a/module/VuFind/src/VuFind/Db/Table/UserStatsFields.php b/module/VuFind/src/VuFind/Db/Table/UserStatsFields.php index 84e1806959a3d03653db1b013273b6097393ec23..ade5407dc2d9d763794528d82d193c0e2183f192 100644 --- a/module/VuFind/src/VuFind/Db/Table/UserStatsFields.php +++ b/module/VuFind/src/VuFind/Db/Table/UserStatsFields.php @@ -27,6 +27,8 @@ */ namespace VuFind\Db\Table; +use Zend\Db\Sql\Expression; + /** * Table Definition for statistics * @@ -85,35 +87,31 @@ class UserStatsFields extends Gateway */ public function getFields($fields, $values = array()) { - /* TODO if (empty($fields)) { return null; } if (!is_array($fields)) { $fields = array($fields); } - // Build select - $select = $this->select() - ->setIntegrityCheck(false); - $select->from( - $this->_name, - array($fields[0] => 'value') - ); - $select->where($this->_name.'.field = ?', $fields[0]); - for ($i=1;$i<count($fields);$i++) { - $select->where('field'.$i.'.field = ?', $fields[$i]); - $select->join( - array('field'.$i => $this->_name), - $this->_name.'.id=field'.$i.'.id', - array($fields[$i] => 'field'.$i.'.value') + $callback = function($select) use ($fields, $values) { + $select->columns( + array($fields[0] => 'value') ); - } - foreach ($values as $key=>$value) { - $select->where($this->_name.'.'.$key.' = ?', $value); - } - $stmt = $select->query(); - return $stmt->fetchAll(); - */ + $select->where->equalTo('field', $fields[0]); + for ($i=1;$i<count($fields);$i++) { + $select->where->equalTo('field'.$i.'.field', $fields[$i]); + $select->join( + array('field'.$i => 'user_stats_fields'), + 'user_stats_fields.id=field'.$i.'.id', + array($fields[$i] => 'field'.$i.'.value') + ); + } + foreach ($values as $key=>$value) { + $select->where->equalTo($key, $value); + } + }; + + return $this->select($callback); } /** @@ -126,22 +124,24 @@ class UserStatsFields extends Gateway */ public function getCount($field, $value = null) { - /* TODO - $select = $this->select(); - $select->from( - array($this->_name), - array( - 'count' => 'COUNT(value)' - ) - ); - $select->where('field = ?', $field); - if ($value != null) { - $select->where('value = ?', $value); - } - $stmt = $select->query(); - $result = $stmt->fetch(); - return $result['count']; - */ + // TODO + $callback = function($select) use ($field, $value) { + $select->columns( + array( + 'count' => new Expression( + 'COUNT(?)', + array('value'), + array(Expression::TYPE_IDENTIFIER) + ) + ) + ); + $select->where->equalTo('field', $field); + if ($value != null) { + $select->where->equalTo('value', $value); + } + }; + + return $this->select($callback)->current()->count; } /** @@ -154,21 +154,24 @@ class UserStatsFields extends Gateway */ public function getTop($field, $number) { - /* TODO - $select = $this->select(); - $select->from( - array($this->_name), - array( - 'value', - 'count' => 'COUNT(value)' - ) - ); - $select->limit($number); - $select->group('value'); - $select->order('count DESC'); - $select->where('field = ?', $field); - $stmt = $select->query(); - $result = $stmt->fetchAll(); + // TODO + $callback = function($select) use ($field, $number) { + $select->columns( + array( + 'value', + 'count' => new Expression( + 'COUNT(?)', + array('value'), + array(Expression::TYPE_IDENTIFIER) + ) + ) + ); + $select->limit($number); + $select->group('value'); + $select->order('count DESC'); + $select->where->equalTo('field', $field); + }; + $result = $this->select($callback); $top = array(); $emptyIndex = -1; foreach ($result as $row) { @@ -187,6 +190,5 @@ class UserStatsFields extends Gateway ); } return $top; - */ } } \ No newline at end of file diff --git a/module/VuFind/src/VuFind/Statistics/Record.php b/module/VuFind/src/VuFind/Statistics/Record.php index a5aaa54fa43f0bdc6488814fda1d9ea8f22d6fff..461cc447510280db6c8fb4908b54955f36b51329 100644 --- a/module/VuFind/src/VuFind/Statistics/Record.php +++ b/module/VuFind/src/VuFind/Statistics/Record.php @@ -72,7 +72,8 @@ class Record extends AbstractBase foreach ($this->drivers as $driver) { $summary = $driver->getFullList('recordId'); if (!empty($summary)) { - $sources = $driver->getFullList('recordSource'); + $summary = $summary->toArray(); + $sources = $driver->getFullList('recordSource')->toArray(); $hashes = array(); // Generate hashes (faster than grouping by looping) for ($i=0;$i<count($summary);$i++) { diff --git a/module/VuFind/src/VuFind/Statistics/Search.php b/module/VuFind/src/VuFind/Statistics/Search.php index d6eefca84d8c1c6e280952b6b4fafa387a81afe8..54ff03abf76b6df049ea66e92775c6d2e0bc2f85 100644 --- a/module/VuFind/src/VuFind/Statistics/Search.php +++ b/module/VuFind/src/VuFind/Statistics/Search.php @@ -74,7 +74,8 @@ class Search extends AbstractBase foreach ($this->drivers as $driver) { $summary = $driver->getFullList('phrase'); if (!empty($summary)) { - $sources = $driver->getFullList('searchSource'); + $summary = $summary->toArray(); + $sources = $driver->getFullList('searchSource')->toArray(); $hashes = array(); // Generate hashes (faster than grouping by looping) for ($i=0;$i<count($summary);$i++) {