getRequestedPage($request); $op = $router->getRequestedOp($request); $args = $router->getRequestedArgs($request); $wantedPages = ['issue', 'article']; $wantedOps = ['index', 'view']; if (!in_array($page, $wantedPages) || !in_array($op, $wantedOps)) { break; } // View requests with 1 argument might relate to journal // or article. With more than 1 is related either with a // version of the submission abstract page or // with other objects that we are not interested in or // that are counted using a different hook. // If the operation is 'view' and the arguments count > 1 // the arguments must be: $submissionId/version/$publicationId. if ($op == 'view' && count($args) > 1) { if ($args[1] !== 'version') { break; } elseif (count($args) != 3) { break; } $publicationId = (int) $args[2]; } $journal = $templateMgr->getTemplateVars('currentContext'); $issue = $templateMgr->getTemplateVars('issue'); $submission = $templateMgr->getTemplateVars('article'); // No published objects, no usage event. if (!$journal && !$issue && !$submission) { break; } if ($journal) { $pubObject = $journal; $assocType = Application::ASSOC_TYPE_JOURNAL; $canonicalUrlOp = ''; } if ($issue) { $pubObject = $issue; $assocType = Application::ASSOC_TYPE_ISSUE; $canonicalUrlParams = [$issue->getId()]; $idParams = ['s' . $issue->getId()]; } if ($submission) { $pubObject = $submission; $assocType = Application::ASSOC_TYPE_SUBMISSION; $canonicalUrlParams = [$pubObject->getId()]; $idParams = ['m' . $pubObject->getId()]; if (isset($publicationId)) { // no need to check if the publication exists (for the submission), // 404 would be returned and the usage event would not be there $canonicalUrlParams = [$pubObject->getId(), 'version', $publicationId]; } } $downloadSuccess = true; $canonicalUrlOp = $op; break; // Issue galley. case 'IssueHandler::download': $assocType = Application::ASSOC_TYPE_ISSUE_GALLEY; $issue = $hookArgs[0]; $galley = $hookArgs[1]; $canonicalUrlOp = 'download'; $canonicalUrlParams = [$issue->getId(), $galley->getId()]; $idParams = ['i' . $issue->getId(), 'f' . $galley->getId()]; $downloadSuccess = false; $pubObject = $galley; break; // Article file. case 'ArticleHandler::download': case 'HtmlArticleGalleyPlugin::articleDownload': case 'LensGalleyPlugin::articleDownloadFinished': $assocType = Application::ASSOC_TYPE_SUBMISSION_FILE; $article = $hookArgs[0]; $galley = $hookArgs[1]; $submissionFileId = $hookArgs[2]; // if file is not a galley file (e.g. CSS or images), there is no usage event. if ($galley->getData('submissionFileId') != $submissionFileId) { return false; } $canonicalUrlOp = 'download'; $canonicalUrlParams = [$article->getId(), $galley->getId(), $submissionFileId]; $idParams = ['a' . $article->getId(), 'g' . $galley->getId(), 'f' . $submissionFileId]; $downloadSuccess = false; $pubObject = Repo::submissionFile()->get($submissionFileId); break; default: // Why are we called from an unknown hook? assert(false); } } return [$pubObject, $downloadSuccess, $assocType, $idParams, $canonicalUrlPage, $canonicalUrlOp, $canonicalUrlParams]; } /** * @see PKPUsageEventPlugin::getHtmlPageAssocTypes() */ protected function getHtmlPageAssocTypes() { return [ Application::ASSOC_TYPE_JOURNAL, Application::ASSOC_TYPE_ISSUE, Application::ASSOC_TYPE_SUBMISSION, ]; } /** * @see PKPUsageEventPlugin::isPubIdObjectType() */ protected function isPubIdObjectType($pubObject) { return $pubObject instanceof Submission; } }