Open Journal Systems  3.3.0
UsageEventPlugin.inc.php
1 <?php
2 
16 import('lib.pkp.plugins.generic.usageEvent.PKPUsageEventPlugin');
17 
19 
20 
21  //
22  // Implement methods from PKPUsageEventPlugin.
23  //
27  function getEventHooks() {
28  return array_merge(parent::getEventHooks(), array(
29  'ArticleHandler::download',
30  'IssueHandler::download',
31  'HtmlArticleGalleyPlugin::articleDownload',
32  'HtmlArticleGalleyPlugin::articleDownloadFinished'
33  ));
34  }
35 
39  protected function getDownloadFinishedEventHooks() {
40  return array_merge(parent::getDownloadFinishedEventHooks(), array(
41  'HtmlArticleGalleyPlugin::articleDownloadFinished'
42  ));
43  }
44 
48  protected function getUsageEventData($hookName, $hookArgs, $request, $router, $templateMgr, $context) {
49  list($pubObject, $downloadSuccess, $assocType, $idParams, $canonicalUrlPage, $canonicalUrlOp, $canonicalUrlParams) =
50  parent::getUsageEventData($hookName, $hookArgs, $request, $router, $templateMgr, $context);
51 
52  if (!$pubObject) {
53  switch ($hookName) {
54  // Press index page, issue content page and article abstract.
55  case 'TemplateManager::display':
56  $page = $router->getRequestedPage($request);
57  $op = $router->getRequestedOp($request);
58  $args = $router->getRequestedArgs($request);
59 
60  $wantedPages = array('issue', 'article');
61  $wantedOps = array('index', 'view');
62 
63  if (!in_array($page, $wantedPages) || !in_array($op, $wantedOps)) break;
64 
65  // View requests with 1 argument might relate to journal
66  // or article. With more than 1 is related with other objects
67  // that we are not interested in or that are counted using a
68  // different hook.
69  if ($op == 'view' && count($args) > 1) break;
70 
71  $journal = $templateMgr->getTemplateVars('currentContext');
72  $issue = $templateMgr->getTemplateVars('issue');
73  $submission = $templateMgr->getTemplateVars('article');
74 
75  // No published objects, no usage event.
76  if (!$journal && !$issue && !$submission) break;
77 
78  if ($journal) {
79  $pubObject = $journal;
80  $assocType = ASSOC_TYPE_JOURNAL;
81  $canonicalUrlOp = '';
82  }
83 
84  if ($issue) {
85  $pubObject = $issue;
86  $assocType = ASSOC_TYPE_ISSUE;
87  $canonicalUrlParams = array($issue->getId());
88  $idParams = array('s' . $issue->getId());
89  }
90 
91  if ($submission) {
92  $pubObject = $submission;
93  $assocType = ASSOC_TYPE_SUBMISSION;
94  $canonicalUrlParams = array($pubObject->getId());
95  $idParams = array('m' . $pubObject->getId());
96  }
97 
98  $downloadSuccess = true;
99  $canonicalUrlOp = $op;
100  break;
101 
102  // Issue galley.
103  case 'IssueHandler::download':
104  $assocType = ASSOC_TYPE_ISSUE_GALLEY;
105  $issue = $hookArgs[0];
106  $galley = $hookArgs[1];
107  $canonicalUrlOp = 'download';
108  $canonicalUrlParams = array($issue->getId(), $galley->getId());
109  $idParams = array('i' . $issue->getId(), 'f' . $galley->getId());
110  $downloadSuccess = false;
111  $pubObject = $galley;
112  break;
113 
114  // Article file.
115  case 'ArticleHandler::download':
116  case 'HtmlArticleGalleyPlugin::articleDownload':
117  $assocType = ASSOC_TYPE_SUBMISSION_FILE;
118  $article = $hookArgs[0];
119  $galley = $hookArgs[1];
120  $fileId = $hookArgs[2];
121  // if file is not a gallay file (e.g. CSS or images), there is no usage event.
122  if ($galley->getFileId() != $fileId) return false;
123  $canonicalUrlOp = 'download';
124  $canonicalUrlParams = array($article->getId(), $galley->getId(), $fileId);
125  $idParams = array('a' . $article->getId(), 'g' . $galley->getId(), 'f' . $fileId);
126  $downloadSuccess = false;
127  $submissionFileDao = DAORegistry::getDAO('SubmissionFileDAO'); /* @var $submissionFileDao SubmissionFileDAO */
128  $pubObject = $submissionFileDao->getLatestRevision($fileId);
129  break;
130  default:
131  // Why are we called from an unknown hook?
132  assert(false);
133  }
134  }
135 
136  return array($pubObject, $downloadSuccess, $assocType, $idParams, $canonicalUrlPage, $canonicalUrlOp, $canonicalUrlParams);
137  }
138 
142  protected function getHtmlPageAssocTypes() {
143  return array(
144  ASSOC_TYPE_JOURNAL,
145  ASSOC_TYPE_ISSUE,
146  ASSOC_TYPE_SUBMISSION,
147  );
148  }
149 
153  protected function isPubIdObjectType($pubObject) {
154  return is_a($pubObject, 'Submission');
155  }
156 
157 }
158 
159 
$op
$op
Definition: lib/pkp/pages/help/index.php:18
PKPUsageEventPlugin
Base class for usage event plugin. Provide usage events to other statistics plugins.
Definition: PKPUsageEventPlugin.inc.php:24
UsageEventPlugin
Implement application specifics for generating usage events.
Definition: UsageEventPlugin.inc.php:18
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
UsageEventPlugin\isPubIdObjectType
isPubIdObjectType($pubObject)
Definition: UsageEventPlugin.inc.php:153
UsageEventPlugin\getDownloadFinishedEventHooks
getDownloadFinishedEventHooks()
Definition: UsageEventPlugin.inc.php:39
UsageEventPlugin\getEventHooks
getEventHooks()
Definition: UsageEventPlugin.inc.php:27
UsageEventPlugin\getUsageEventData
getUsageEventData($hookName, $hookArgs, $request, $router, $templateMgr, $context)
Definition: UsageEventPlugin.inc.php:48
Plugin\$request
$request
Definition: Plugin.inc.php:68
UsageEventPlugin\getHtmlPageAssocTypes
getHtmlPageAssocTypes()
Definition: UsageEventPlugin.inc.php:142