[ Mini Kiebo ]
Server: Windows NT DESKTOP-5B8S0D4 6.2 build 9200 (Windows 8 Professional Edition) i586
Path:
D:
/
Backup
/
05122024
/
htdocs
/
jurnal-kesmas
/
v1
/
lib
/
pkp
/
classes
/
observers
/
events
/
[
Home
]
File: UsageEvent.php
<?php /** * @file classes/observers/events/UsageEvent.php * * Copyright (c) 2022 Simon Fraser University * Copyright (c) 2022 John Willinsky * Distributed under the GNU GPL v3. For full terms see the file docs/COPYING. * * @class UsageEvent * * @ingroup observers_events * * @brief Base class for the usage event used to record usage logs. */ namespace PKP\observers\events; use APP\core\Application; use APP\core\PageRouter; use APP\core\Request; use APP\submission\Submission; use Exception; use Illuminate\Foundation\Events\Dispatchable; use PKP\config\Config; use PKP\context\Context; use PKP\core\Core; use PKP\core\Registry; use PKP\submission\Representation; use PKP\submissionFile\SubmissionFile; abstract class UsageEvent { use Dispatchable; /** Current time */ public string $time; /** Viewed/downloaded object, one of the Application::ASSOC_TYPE_... constants */ public int $assocType; /** Canonical URL for the pub object */ public string $canonicalUrl; public Request $request; public Context $context; public ?Submission $submission; /** Representation (galley or publication format) */ public ?Representation $representation; public ?SubmissionFile $submissionFile; /** Application's complete version string */ public string $version; /** * Create a new usage event instance. */ public function __construct( int $assocType, Context $context, Submission $submission = null, Representation $representation = null, SubmissionFile $submissionFile = null ) { $this->time = Core::getCurrentDate(); $this->assocType = $assocType; $this->context = $context; $this->submission = $submission; $this->representation = $representation; $this->submissionFile = $submissionFile; $this->version = Registry::get('appVersion'); $this->request = Application::get()->getRequest(); $this->canonicalUrl = $this->getCanonicalUrl(); } /** * Get the canonical URL for the usage object * * @throws Exception */ protected function getCanonicalUrl(): string { $canonicalUrlPage = $canonicalUrlOp = null; $canonicalUrlParams = []; switch ($this->assocType) { case Application::ASSOC_TYPE_SUBMISSION_FILE_COUNTER_OTHER: case Application::ASSOC_TYPE_SUBMISSION_FILE: $canonicalUrlOp = 'download'; $canonicalUrlParams = [$this->submission->getId()]; $router = $this->request->getRouter(); /** @var PageRouter $router */ $op = $router->getRequestedOp($this->request); $args = $router->getRequestedArgs($this->request); if ($op == 'download' && count($args) > 1) { if ($args[1] == 'version' && count($args) == 5) { $publicationId = (int) $args[2]; $canonicalUrlParams[] = 'version'; $canonicalUrlParams[] = $publicationId; } } $canonicalUrlParams[] = $this->representation->getId(); $canonicalUrlParams[] = $this->submissionFile->getId(); break; case Application::ASSOC_TYPE_SUBMISSION: $canonicalUrlOp = 'view'; if (Application::get()->getName() == 'omp') { $canonicalUrlOp = 'book'; } $canonicalUrlParams = [$this->submission->getId()]; $router = $this->request->getRouter(); /** @var PageRouter $router */ $op = $router->getRequestedOp($this->request); $args = $router->getRequestedArgs($this->request); if ($op == $canonicalUrlOp && count($args) > 1) { if ($args[1] == 'version' && count($args) == 3) { $publicationId = (int) $args[2]; $canonicalUrlParams[] = 'version'; $canonicalUrlParams[] = $publicationId; } } break; case Application::getContextAssocType(): $canonicalUrlOp = ''; $canonicalUrlPage = 'index'; break; default: throw new Exception('Not recognized assoc type that we can create the canonical URL for.'); } $canonicalUrl = $this->getRouterCanonicalUrl($this->request, $canonicalUrlPage, $canonicalUrlOp, $canonicalUrlParams); return $canonicalUrl; } /** * Construct the URL from page, op, and params */ protected function getRouterCanonicalUrl(Request $request, string $canonicalUrlPage = null, string $canonicalUrlOp = null, array $canonicalUrlParams = null): string { $router = $request->getRouter(); /** @var PageRouter $router */ $context = $router->getContext($request); if (!isset($canonicalUrlPage)) { $canonicalUrlPage = $router->getRequestedPage($request); } if (!isset($canonicalUrlOp)) { $canonicalUrlOp = $router->getRequestedOp($request); } if (!isset($canonicalUrlParams)) { $canonicalUrlParams = $router->getRequestedArgs($request); } $canonicalUrl = $router->url( $request, null, $canonicalUrlPage, $canonicalUrlOp, $canonicalUrlParams ); // Make sure we log the server name and not aliases. $configBaseUrl = Config::getVar('general', 'base_url'); $requestBaseUrl = $request->getBaseUrl(); if ($requestBaseUrl !== $configBaseUrl) { // Make sure it's not an url override (no alias on that case). if (!in_array($requestBaseUrl, Config::getContextBaseUrls()) && $requestBaseUrl !== Config::getVar('general', 'base_url[index]')) { // Alias found, replace it by base_url from config file. // Make sure we use the correct base url override value for the context, if any. $baseUrlReplacement = Config::getVar('general', 'base_url[' . $context->getPath() . ']'); if (!$baseUrlReplacement) { $baseUrlReplacement = $configBaseUrl; } $canonicalUrl = str_replace($requestBaseUrl, $baseUrlReplacement, $canonicalUrl); } } return $canonicalUrl; } }