Open Journal Systems  3.3.0
MetricsDAO.inc.php
1 <?php
2 
16 import('lib.pkp.classes.statistics.PKPMetricsDAO');
17 
18 class MetricsDAO extends PKPMetricsDAO {
19 
23  function &getMetrics($metricType, $columns = array(), $filters = array(), $orderBy = array(), $range = null, $nonAdditive = true) {
24  // Translate the issue dimension to a generic one used in pkp library.
25  // Do not move this into foreach: https://github.com/pkp/pkp-lib/issues/1615
26  $worker = array(&$columns, &$filters, &$orderBy);
27  foreach ($worker as &$parameter) { // Reference needed.
28  if ($parameter === $filters && array_key_exists(STATISTICS_DIMENSION_ISSUE_ID, $parameter)) {
29  $parameter[STATISTICS_DIMENSION_ASSOC_OBJECT_TYPE] = ASSOC_TYPE_ISSUE;
30  }
31 
32  $key = array_search(STATISTICS_DIMENSION_ISSUE_ID, $parameter);
33  if ($key !== false) {
34  $parameter[] = STATISTICS_DIMENSION_ASSOC_OBJECT_TYPE;
35  }
36  unset($parameter);
37  }
38 
39  return parent::getMetrics($metricType, $columns, $filters, $orderBy, $range, $nonAdditive);
40  }
41 
45  protected function foreignKeyLookup($assocType, $assocId) {
46  list($contextId, $sectionId, $assocObjType,
47  $assocObjId, $submissionId, $representationId) = parent::foreignKeyLookup($assocType, $assocId);
48 
49  $isFile = false;
50 
51  if (!$contextId) {
52  switch ($assocType) {
53  case ASSOC_TYPE_ISSUE_GALLEY:
54  $issueGalleyDao = DAORegistry::getDAO('IssueGalleyDAO'); /* @var $issueGalleyDao IssueGalleyDAO */
55  $issueGalley = $issueGalleyDao->getById($assocId);
56  if (!$issueGalley) {
57  throw new Exception('Cannot load record: invalid issue galley id.');
58  }
59 
60  $assocObjType = ASSOC_TYPE_ISSUE;
61  $assocObjId = $issueGalley->getIssueId();
62  $isFile = true;
63  // Don't break but go on to retrieve the issue.
64  case ASSOC_TYPE_ISSUE:
65  if (!$isFile) {
66  $assocObjType = $assocObjId = null;
67  $issueId = $assocId;
68  } else {
69  $issueId = $assocObjId;
70  }
71 
72  $issueDao = DAORegistry::getDAO('IssueDAO'); /* @var $issueDao IssueDAO */
73  $issue = $issueDao->getById($issueId);
74 
75  if (!$issue) {
76  throw new Exception('Cannot load record: invalid issue id.');
77  }
78 
79  $contextId = $issue->getJournalId();
80  break;
81  }
82  }
83 
84  return array($contextId, $sectionId, $assocObjType, $assocObjId, $submissionId, $representationId);
85  }
86 
90  protected function getAssocObjectInfo($submissionId, $contextId) {
91  $returnArray = parent::getAssocObjectInfo($submissionId, $contextId);
92 
93  // Submissions in OJS are associated with an Issue.
94  $submission = Services::get('submission')->get($submissionId);
95  if ($submission->getCurrentPublication()->getData('issueId')) {
96  $returnArray = array(ASSOC_TYPE_ISSUE, $submission->getCurrentPublication()->getData('issueId'));
97  }
98  return $returnArray;
99  }
100 }
101 
MetricsDAO\foreignKeyLookup
foreignKeyLookup($assocType, $assocId)
Definition: MetricsDAO.inc.php:45
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
MetricsDAO
Operations for retrieving and adding statistics data.
Definition: MetricsDAO.inc.php:18
MetricsDAO\getAssocObjectInfo
getAssocObjectInfo($submissionId, $contextId)
Definition: MetricsDAO.inc.php:90
PKPMetricsDAO
Class with basic operations for retrieving and adding statistics data.
Definition: PKPMetricsDAO.inc.php:21
PKPServices\get
static get($service)
Definition: PKPServices.inc.php:49
MetricsDAO\getMetrics
& getMetrics($metricType, $columns=array(), $filters=array(), $orderBy=array(), $range=null, $nonAdditive=true)
Definition: MetricsDAO.inc.php:23