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

Statistics viewing is working.

parent eb811a5b
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