Skip to content
Snippets Groups Projects
Commit 7a4a83e6 authored by Chris Hallberg's avatar Chris Hallberg
Browse files

Statistics viewing is working.

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