first commit

This commit is contained in:
CHIEFSOFT\ameye
2024-06-08 17:09:23 -04:00
commit df3a033196
17887 changed files with 8637778 additions and 0 deletions
@@ -0,0 +1,469 @@
<?php
/**
* @file plugins/generic/usageEvent/PKPUsageEventPlugin.php
*
* Copyright (c) 2013-2021 Simon Fraser University
* Copyright (c) 2003-2021 John Willinsky
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
*
* @class PKPUsageEventPlugin
*
* @ingroup plugins_generic_usageEvent
*
* @brief Base class for usage event plugin. Provide usage events to
* other statistics plugins.
*/
namespace PKP\plugins\generic\usageEvent;
use APP\core\Application;
use APP\core\PageRouter;
use APP\template\TemplateManager;
use PKP\config\Config;
use PKP\context\Context;
use PKP\core\Core;
use PKP\core\DataObject;
use PKP\core\PKPRequest;
use PKP\db\DAORegistry;
use PKP\plugins\GenericPlugin;
use PKP\plugins\Hook;
use PKP\plugins\PluginRegistry;
use PKP\security\Role;
use PKP\security\RoleDAO;
use PKP\template\PKPTemplateManager;
// User classification types.
define('USAGE_EVENT_PLUGIN_CLASSIFICATION_BOT', 'bot');
define('USAGE_EVENT_PLUGIN_CLASSIFICATION_ADMIN', 'administrative');
abstract class PKPUsageEventPlugin extends GenericPlugin
{
//
// Implement methods from PKPPlugin.
//
/**
* @copydoc Plugin::register()
*
* @param null|mixed $mainContextId
*/
public function register($category, $path, $mainContextId = null)
{
$success = parent::register($category, $path, $mainContextId);
if ($success) {
$eventHooks = $this->getEventHooks();
foreach ($eventHooks as $hook) {
Hook::add($hook, [$this, 'getUsageEvent']);
}
}
return $success;
}
/**
* @copydoc LazyLoadPlugin::getName()
*/
public function getName()
{
return 'usageeventplugin';
}
/**
* @copydoc Plugin::getInstallSitePluginSettingsFile()
*/
public function getInstallSitePluginSettingsFile()
{
return PKP_LIB_PATH . "/{$this->getPluginPath()}/settings.xml";
}
/**
* @copydoc Plugin::getDisplayName()
*/
public function getDisplayName()
{
return __('plugins.generic.usageEvent.displayName');
}
/**
* @copydoc Plugin::getDescription()
*/
public function getDescription()
{
return __('plugins.generic.usageEvent.description');
}
/**
* @copydoc LazyLoadPlugin::getEnabled()
*
* @param null|mixed $contextId
*/
public function getEnabled($contextId = null)
{
return true;
}
/**
* @copydoc Plugin::isSitePlugin()
*/
public function isSitePlugin()
{
return true;
}
/**
* @copydoc Plugin::getCanEnable()
*/
public function getCanEnable()
{
return false;
}
/**
* @copydoc Plugin::getCanDisable()
*/
public function getCanDisable()
{
return false;
}
//
// Public methods.
//
/**
* Get the unique site id.
*
* @return mixed string or null
*/
public function getUniqueSiteId()
{
return Application::get()->getUUID();
}
//
// Hook implementations.
//
/**
* Get usage event and pass it to the registered plugins, if any.
*/
public function getUsageEvent($hookName, $args)
{
// Check if we have a registration to receive the usage event.
if (Hook::getHooks('UsageEventPlugin::getUsageEvent')) {
$usageEvent = $this->buildUsageEvent($hookName, $args);
Hook::call('UsageEventPlugin::getUsageEvent', array_merge([$hookName, $usageEvent], $args));
}
return false;
}
//
// Protected methods.
//
/**
* Get all hooks that must be used to
* generate usage events.
*
* @return array
*/
protected function getEventHooks()
{
return [
'TemplateManager::display',
'FileManager::downloadFileFinished'
];
}
/**
* Get all hooks that define the
* finished file download.
*
* @return array
*/
protected function getDownloadFinishedEventHooks()
{
return [
'FileManager::downloadFileFinished'
];
}
/**
* Build an usage event.
*
* @param string $hookName
* @param array $args
*
* @return false|?array
*/
protected function buildUsageEvent($hookName, $args)
{
// Finished downloading a file?
if (in_array($hookName, $this->getDownloadFinishedEventHooks())) {
// The usage event for this request is already build and
// passed to any other registered hook.
return null;
}
$application = Application::get();
$request = $application->getRequest();
$router = $request->getRouter(); /** @var PageRouter $router */
$templateMgr = $args[0]; /** @var TemplateManager $templateMgr */
// We are just interested in page requests.
if (!($router instanceof PageRouter)) {
return false;
}
// Check whether we are in journal context.
$context = $router->getContext($request);
if (!$context) {
return false;
}
// Prepare request information.
[$pubObject, $downloadSuccess, $assocType, $idParams, $canonicalUrlPage, $canonicalUrlOp, $canonicalUrlParams] =
$this->getUsageEventData($hookName, $args, $request, $router, $templateMgr, $context);
if (!$pubObject) {
return false;
}
// Timestamp.
$time = Core::getCurrentDate();
// Actual document size, MIME type.
$htmlPageAssocTypes = $this->getHtmlPageAssocTypes();
if (in_array($assocType, $htmlPageAssocTypes)) {
// HTML pages with no file downloads.
$mimeType = 'text/html';
} elseif ($pubObject instanceof \APP\issue\IssueGalley) {
$mimeType = $pubObject->getFileType();
} else {
// Files.
$path = $pubObject->getData('path');
$mimeType = $pubObject->getData('mimetype');
}
$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);
}
}
// Public identifiers.
// 1) A unique system internal ID that will help us to easily attribute
// statistics to a specific publication object.
array_unshift($idParams, 'c' . $context->getId());
$siteId = $this->getUniqueSiteId();
array_unshift($idParams, $siteId);
$applicationName = $application->getName();
$applicationId = $applicationName . ':' . implode('-', $idParams);
$idKey = 'other::' . $applicationName;
$identifiers = [$idKey => $applicationId];
// 2) Standardized public identifiers, e.g. DOI, URN, etc.
if ($this->isPubIdObjectType($pubObject)) {
$pubIdPlugins = PluginRegistry::loadCategory('pubIds', true, $context->getId());
if (!empty($pubIdPlugins)) {
foreach ($pubIdPlugins as $pubIdPlugin) {
if (!$pubIdPlugin->getEnabled()) {
continue;
}
$pubId = $pubObject->getStoredPubId($pubIdPlugin->getPubIdType());
if ($pubId) {
$identifiers[$pubIdPlugin->getPubIdType()] = $pubId;
}
}
}
// Handle DOIs separately
if ($context->areDoisEnabled()) {
$pubId = $pubObject->getStoredPubId('doi');
if ($pubId) {
$identifiers['doi'] = $pubId;
}
}
}
// Service URI.
$serviceUri = $router->url($request, $context->getPath());
// IP and Host.
$ip = $request->getRemoteAddr();
$host = null;
if (isset($_SERVER['REMOTE_HOST'])) {
// We do NOT actively look up the remote host to
// avoid the performance penalty. We only set the remote
// host if we get it "for free".
$host = $_SERVER['REMOTE_HOST'];
}
// HTTP user agent.
$userAgent = $request->getUserAgent();
// HTTP referrer.
$referrer = ($_SERVER['HTTP_REFERER'] ?? null);
// User and roles.
$user = $request->getUser();
$roles = [];
if ($user) {
$roleDao = DAORegistry::getDAO('RoleDAO'); /** @var RoleDAO $roleDao */
$rolesByContext = $roleDao->getByUserIdGroupedByContext($user->getId());
foreach ([\PKP\core\PKPApplication::CONTEXT_SITE, $context->getId()] as $workingContext) {
if (isset($rolesByContext[$workingContext])) {
foreach ($rolesByContext[$workingContext] as $roleId => $role) {
$roles[] = $roleId;
}
}
}
}
// Try a simple classification of the request.
$classification = null;
if (!empty($roles)) {
// Access by editors, authors, etc.
$internalRoles = array_diff($roles, [Role::ROLE_ID_READER]);
if (!empty($internalRoles)) {
$classification = USAGE_EVENT_PLUGIN_CLASSIFICATION_ADMIN;
}
}
if ($request->isBot()) {
// The bot classification overwrites other classifications.
$classification = USAGE_EVENT_PLUGIN_CLASSIFICATION_BOT;
}
// TODO: Classify LOCKSS or similar as 'internal' access.
/*
* Comparison of our event log format with Apache log parameters...
*
* 1) default parameters:
* %h: remote hostname or IP => $ip, $host
* %l: remote logname (identd) => not supported, see $user, $roles instead
* %u: remote user => not supported, see $user, $roles instead
* %t: request time => $time
* %r: query => derived objects: $pubObject, $assocType, $canonicalUrl, $identifiers, $serviceUri, $classification
* %s: status => not supported (always 200 in our case)
*
* 2) other common parameters
* %O: bytes sent => not supported (cannot be reliably determined from within PHP)
* %X: connection status => $downloadSuccess (not reliable!)
* %{ContentType}o: => $mimeType
* %{User-agent}i: => $userAgent
* %{Referer}i: => $referrer
*
* Several items, e.g. time etc., may differ from what Apache
* would actually log. But the differences do not matter for our use
* cases.
*/
// Collect all information into an array.
$usageEvent = compact(
'time',
'pubObject',
'assocType',
'canonicalUrl',
'mimeType',
'identifiers',
'downloadSuccess',
'serviceUri',
'ip',
'host',
'user',
'roles',
'userAgent',
'referrer',
'classification'
);
return $usageEvent;
}
/**
* Get usage event details based on the passed hook.
* Subclasses should extend to implement application specifics.
*
* @param string $hookName
* @param array $hookArgs
* @param PKPRequest $request
* @param PageRouter $router
* @param PKPTemplateManager $templateMgr
* @param Context $context
*
* @return array With the following data:
* DataObject the published object, boolean download success, integer used published object assoc type,
* string used published object id foreign keys lookup (all parent associated objects id,
* preceded with a single letter to identify the object), string canonical url page,
* string canonical url operation, array with canonical url parameters.
*
* @see PKPUsageEventPlugin::buildUsageEvent()
*/
protected function getUsageEventData($hookName, $hookArgs, $request, $router, $templateMgr, $context)
{
$nullVar = null;
$pubObject = $nullVar;
$downloadSuccess = false;
$canonicalUrlPage = $canonicalUrlOp = $assocType = null;
$canonicalUrlParams = $idParams = [];
if ($hookName == 'TemplateManager::display') {
$page = $router->getRequestedPage($request);
$op = $router->getRequestedOp($request);
// First check for a context index page view.
if (($page == 'index' || empty($page)) && $op == 'index') {
$pubObject = $templateMgr->getTemplateVars('currentContext');
if ($pubObject instanceof Context) {
$assocType = Application::getContextAssocType();
$canonicalUrlOp = '';
$canonicalUrlPage = 'index';
$downloadSuccess = true;
}
}
}
return [$pubObject, $downloadSuccess, $assocType, $idParams, $canonicalUrlPage, $canonicalUrlOp, $canonicalUrlParams];
}
//
// Abstract protected methods.
//
/**
* Get all assoc types that have their usage event
* produced by html page access.
*
* @return array
*/
abstract protected function getHtmlPageAssocTypes();
/**
* Whether or not the passed object is of a type that can have
* different public identifiers, like DOI, URN, etc.
*
* @param DataObject $pubObject
*
* @return bool
*/
abstract protected function isPubIdObjectType($pubObject);
}
@@ -0,0 +1,18 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-11-19T11:06:23+00:00\n"
"PO-Revision-Date: 2019-11-19T11:06:23+00:00\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "حدث الاستعمال"
msgid "plugins.generic.usageEvent.description"
msgstr "ينشئ متلقياً يوفر حدث الاستعمال بصيغة معينة."
@@ -0,0 +1,21 @@
# Osman Durmaz <osmandurmaz@hotmail.de>, 2023.
msgid ""
msgstr ""
"PO-Revision-Date: 2023-06-02 19:20+0000\n"
"Last-Translator: Osman Durmaz <osmandurmaz@hotmail.de>\n"
"Language-Team: Azerbaijani <http://translate.pkp.sfu.ca/projects/pkp-lib/"
"generic-usageEvent/az/>\n"
"Language: az\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.13.1\n"
msgid "plugins.generic.usageEvent.description"
msgstr ""
"Müəyyən edilmiş bir formatda istifadə fəaliyyəti təqdim edən bir link "
"yaradar."
msgid "plugins.generic.usageEvent.displayName"
msgstr "İstifadə fəaliyyəti"
@@ -0,0 +1,21 @@
# Cyril Kamburov <cc@intermedia.bg>, 2021.
msgid ""
msgstr ""
"PO-Revision-Date: 2021-10-13 20:55+0000\n"
"Last-Translator: Cyril Kamburov <cc@intermedia.bg>\n"
"Language-Team: Bulgarian <http://translate.pkp.sfu.ca/projects/pkp-lib/"
"generic-usageEvent/bg_BG/>\n"
"Language: bg_BG\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.9.1\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Модул (плъгин) за събития при употреба"
msgid "plugins.generic.usageEvent.description"
msgstr ""
"Създава кука (точка на обработка), която предоставя събитие за използване в "
"определен формат."
@@ -0,0 +1,19 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2021-01-21 12:53+0000\n"
"Last-Translator: Kazimir Hrastek <kazimir3385@gmail.com>\n"
"Language-Team: Bosnian <http://translate.pkp.sfu.ca/projects/pkp-lib/generic-"
"usageEvent/bs_BA/>\n"
"Language: bs_BA\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 3.9.1\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Događaj upotrebe"
msgid "plugins.generic.usageEvent.description"
msgstr "Stvara kuku koja pruža događaj korištenja u definisanom formatu."
@@ -0,0 +1,19 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-11-19T11:06:24+00:00\n"
"PO-Revision-Date: 2019-11-19T11:06:24+00:00\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Esdeveniment d’ús"
msgid "plugins.generic.usageEvent.description"
msgstr ""
"Crea un enllaç que proporciona un esdeveniment d’ús en un format definit."
@@ -0,0 +1,18 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2020-04-21 15:38+0000\n"
"Last-Translator: Hewa Salam Khalid <hewa.salam@koyauniversity.org>\n"
"Language-Team: Kurdish <http://translate.pkp.sfu.ca/projects/pkp-lib/generic-"
"usageEvent/ku_IQ/>\n"
"Language: ku_IQ\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.9.1\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "ڕوداوی بەکارهێنان"
msgid "plugins.generic.usageEvent.description"
msgstr ".قولاپێک دروست بکە کە هاوکاری ڕێکخستنی ڕوداو بە شێوازی پێناسەکراو بکات"
@@ -0,0 +1,18 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-11-19T11:06:23+00:00\n"
"PO-Revision-Date: 2019-11-19T11:06:23+00:00\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Událost využívání"
msgid "plugins.generic.usageEvent.description"
msgstr "Vytvoří hook, který poskytuje událost využití v definovaném formátu."
@@ -0,0 +1,20 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-11-19T11:06:24+00:00\n"
"PO-Revision-Date: 2019-11-19T11:06:24+00:00\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Brugshændelse"
msgid "plugins.generic.usageEvent.description"
msgstr ""
"Opretter en 'hook' (overstyringsfunktion), der leverer brugshændelse i et "
"defineret format."
@@ -0,0 +1,20 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-09-30T07:05:58-07:00\n"
"PO-Revision-Date: 2019-09-30T07:05:58-07:00\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Nutzungsereignis"
msgid "plugins.generic.usageEvent.description"
msgstr ""
"Legt einen Hook an, der ein Nutzungsereignis in einem definierten Format "
"liefert."
@@ -0,0 +1,8 @@
# Weblate Admin <alec@smecher.bc.ca>, 2023.
msgid ""
msgstr ""
"Language: dsb\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Weblate\n"
@@ -0,0 +1,18 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-11-19T11:06:24+00:00\n"
"PO-Revision-Date: 2019-11-19T11:06:24+00:00\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Συμβάν Χρήσης"
msgid "plugins.generic.usageEvent.description"
msgstr "Αυτό το Πρόσθετο παρέχει συμβάντα χρήσης σε προκαθορισμένη μορφή."
@@ -0,0 +1,18 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-09-30T07:05:58-07:00\n"
"PO-Revision-Date: 2019-09-30T07:05:58-07:00\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Usage event"
msgid "plugins.generic.usageEvent.description"
msgstr "Creates a hook that provides usage event in a defined format."
@@ -0,0 +1,19 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-11-19T11:06:24+00:00\n"
"PO-Revision-Date: 2019-11-19T11:06:24+00:00\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Caso de uso"
msgid "plugins.generic.usageEvent.description"
msgstr ""
"Crea un \"hook\" que proporciona el uso de eventos en un formato definido."
@@ -0,0 +1,20 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-11-19T11:06:24+00:00\n"
"PO-Revision-Date: 2019-11-19T11:06:24+00:00\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "رخداد کارکرد"
msgid "plugins.generic.usageEvent.description"
msgstr ""
"این افزونه این امکان را فراهم می سازد تا رخداد کارکرد را در فرمت تعریف شده "
"تولید کرد."
@@ -0,0 +1,18 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-11-19T11:06:24+00:00\n"
"PO-Revision-Date: 2019-11-19T11:06:24+00:00\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Käyttötapahtuma"
msgid "plugins.generic.usageEvent.description"
msgstr "Luo koukun, joka tarjoaa käyttötapahtuman annetussa muodossa."
@@ -0,0 +1,18 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-09-30T07:05:58-07:00\n"
"PO-Revision-Date: 2019-09-30T07:05:58-07:00\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Journal d'événement"
msgid "plugins.generic.usageEvent.description"
msgstr "Créer un lien vers le journal d'événement dans un format particulier."
@@ -0,0 +1,20 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2020-08-27 15:48+0000\n"
"Last-Translator: Paul Heckler <paul.d.heckler@gmail.com>\n"
"Language-Team: French <http://translate.pkp.sfu.ca/projects/pkp-lib/generic-"
"usageEvent/fr/>\n"
"Language: fr_FR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 3.9.1\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Évènement d'utilisation"
msgid "plugins.generic.usageEvent.description"
msgstr ""
"Créé un connecteur qui fournit les évènements d'utilisation dans un format "
"défini."
@@ -0,0 +1,19 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2021-02-05 14:53+0000\n"
"Last-Translator: Real Academia Galega <reacagal@gmail.com>\n"
"Language-Team: Galician <http://translate.pkp.sfu.ca/projects/pkp-lib/"
"generic-usageEvent/gl_ES/>\n"
"Language: gl_ES\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.9.1\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Caso de uso"
msgid "plugins.generic.usageEvent.description"
msgstr ""
"Crea un \"hook\" que proporciona o uso de eventos nun formato definido."
@@ -0,0 +1,20 @@
# Maja Jurić <maja-juric@windowslive.com>, 2023.
msgid ""
msgstr ""
"PO-Revision-Date: 2023-02-08 15:40+0000\n"
"Last-Translator: Maja Jurić <maja-juric@windowslive.com>\n"
"Language-Team: Croatian <http://translate.pkp.sfu.ca/projects/pkp-lib/"
"generic-usageEvent/hr/>\n"
"Language: hr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.13.1\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Događaj korištenja"
msgid "plugins.generic.usageEvent.description"
msgstr "Stvara kuku koja vraća događaj korištenja u definiranom formatu."
@@ -0,0 +1,8 @@
# Weblate Admin <alec@smecher.bc.ca>, 2023.
msgid ""
msgstr ""
"Language: hsb\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Weblate\n"
@@ -0,0 +1,20 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-02-13T21:07:39+00:00\n"
"PO-Revision-Date: 2020-02-13T21:07:39+00:00\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Használati esemény"
msgid "plugins.generic.usageEvent.description"
msgstr ""
"Olyan kampót (hook) hoz létre, amely meghatározott formátumban biztosít "
"használati eseményt."
@@ -0,0 +1,21 @@
# Hovhannes Harutyunyan <hharutyunyan@gmail.com>, 2022.
msgid ""
msgstr ""
"PO-Revision-Date: 2022-01-13 14:25+0000\n"
"Last-Translator: Hovhannes Harutyunyan <hharutyunyan@gmail.com>\n"
"Language-Team: Armenian <http://translate.pkp.sfu.ca/projects/pkp-lib/"
"generic-usageEvent/hy_AM/>\n"
"Language: hy_AM\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 3.9.1\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Օգտագործման իրադարձություն"
msgid "plugins.generic.usageEvent.description"
msgstr ""
"Ստեղծում է կեռիկ, որն ապահովում է օգտագործման իրադարձությունը սահմանված "
"ձևաչափով:"
@@ -0,0 +1,19 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2020-02-12 08:50+0000\n"
"Last-Translator: Ramli Baharuddin <ramli.baharuddin@relawanjurnal.id>\n"
"Language-Team: Indonesian <http://translate.pkp.sfu.ca/projects/pkp-lib/"
"generic-usageEvent/id_ID/>\n"
"Language: id_ID\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 3.9.1\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Aktivitas pemakaian"
msgid "plugins.generic.usageEvent.description"
msgstr ""
"Buat hook yang menyajikan aktivitas pemakaian sesuai format yang ditentukan."
@@ -0,0 +1,14 @@
# Kolbrun Reynisdottir <kolla@probus.is>, 2022.
msgid ""
msgstr ""
"Language: is_IS\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Weblate\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr ""
msgid "plugins.generic.usageEvent.description"
msgstr ""
@@ -0,0 +1,18 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2021-03-08 12:54+0000\n"
"Last-Translator: Bjorn-Ole Kamm <pkp_trans@b-ok.de>\n"
"Language-Team: Japanese <http://translate.pkp.sfu.ca/projects/pkp-lib/"
"generic-usageEvent/ja_JP/>\n"
"Language: ja_JP\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 3.9.1\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "使用状況イベント"
msgid "plugins.generic.usageEvent.description"
msgstr "定義された形式で使用状況イベントを提供するフックを作成します。"
@@ -0,0 +1,20 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2021-04-07 15:28+0000\n"
"Last-Translator: Dimitri Gogelia <dimitri.gogelia@iliauni.edu.ge>\n"
"Language-Team: Georgian <http://translate.pkp.sfu.ca/projects/pkp-lib/"
"generic-usageEvent/ka_GE/>\n"
"Language: ka_GE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.9.1\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "პლაგინი „გამოყენების მოვლენა“"
msgid "plugins.generic.usageEvent.description"
msgstr ""
"ქმნის დამმუშავებელს, რომელიც უზრუნველყოფს გამოყენების მოვლენას განსაზღვრულ "
"ფორმატში."
@@ -0,0 +1,3 @@
# Mahmut VURAL <mahmut.vural@outlook.com>, 2024.
msgid ""
msgstr "X-Generator: Weblate\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit"
@@ -0,0 +1,20 @@
# Ieva Tiltina <pastala@gmail.com>, 2023.
msgid ""
msgstr ""
"PO-Revision-Date: 2023-09-22 13:06+0000\n"
"Last-Translator: Ieva Tiltina <pastala@gmail.com>\n"
"Language-Team: Latvian <http://translate.pkp.sfu.ca/projects/pkp-lib/"
"generic-usageEvent/lv/>\n"
"Language: lv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100 <= "
"19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n"
"X-Generator: Weblate 4.13.1\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Lietošanas notikums"
msgid "plugins.generic.usageEvent.description"
msgstr "Izveido aizķeri, kas nodrošina lietošanas notikumu noteiktā formātā."
@@ -0,0 +1,18 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2020-07-29 18:46+0000\n"
"Last-Translator: Jovan Jonovski <jonovski@hotmail.com>\n"
"Language-Team: Macedonian <http://translate.pkp.sfu.ca/projects/pkp-lib/"
"generic-usageEvent/mk/>\n"
"Language: mk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n==1 || n%10==1 ? 0 : 1;\n"
"X-Generator: Weblate 3.9.1\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Искористеност"
msgid "plugins.generic.usageEvent.description"
msgstr "Создава јадица што обезбедува настан за употреба во дефиниран формат."
@@ -0,0 +1,21 @@
# Studiorimau <studiorimau@gmail.com>, 2021.
msgid ""
msgstr ""
"PO-Revision-Date: 2021-10-29 07:29+0000\n"
"Last-Translator: Studiorimau <studiorimau@gmail.com>\n"
"Language-Team: Malay <http://translate.pkp.sfu.ca/projects/pkp-lib/generic-"
"usageEvent/ms/>\n"
"Language: ms\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 3.9.1\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Aktiviti penggunaan"
msgid "plugins.generic.usageEvent.description"
msgstr ""
"Mencipta hook yang menyediakan aktiviti penggunaan dalam format yang "
"ditentukan."
@@ -0,0 +1,22 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-03-20T15:57:55+00:00\n"
"PO-Revision-Date: 2021-01-26 10:17+0000\n"
"Last-Translator: FRITT, University of Oslo Library <fritt-"
"info@journals.uio.no>\n"
"Language-Team: Norwegian Bokmål <http://translate.pkp.sfu.ca/projects/"
"pkp-lib/generic-usageEvent/nb_NO/>\n"
"Language: nb_NO\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.9.1\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Brukshendelse"
msgid "plugins.generic.usageEvent.description"
msgstr "Lager en hake som leverer brukshendelse i et definert format."
@@ -0,0 +1,20 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-11-19T11:06:24+00:00\n"
"PO-Revision-Date: 2019-11-19T11:06:24+00:00\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Gebruiksgebeurtenis"
msgid "plugins.generic.usageEvent.description"
msgstr ""
"Maakt een hook die een gebruiksgebeurtenis rapporteert in een gedefinieerd "
"formaat."
@@ -0,0 +1,20 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-11-19T11:06:24+00:00\n"
"PO-Revision-Date: 2019-11-19T11:06:24+00:00\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Zdarzenie użycia"
msgid "plugins.generic.usageEvent.description"
msgstr ""
"Utwórz zaczepienie, które dostarczy zdarzenie użycia w zdefiniowanym "
"formacie."
@@ -0,0 +1,21 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-09-30T11:54:39-07:00\n"
"PO-Revision-Date: 2020-06-06 02:37+0000\n"
"Last-Translator: Diego José Macêdo <diegojmacedo@gmail.com>\n"
"Language-Team: Portuguese (Brazil) <http://translate.pkp.sfu.ca/projects/"
"pkp-lib/generic-usageEvent/pt_BR/>\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 3.9.1\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Evento de uso"
msgid "plugins.generic.usageEvent.description"
msgstr "Cria um conector que oferece eventos de uso em um formato definido."
@@ -0,0 +1,19 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-11-19T11:06:25+00:00\n"
"PO-Revision-Date: 2019-11-19T11:06:25+00:00\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Eventos de Uso"
msgid "plugins.generic.usageEvent.description"
msgstr ""
"Cria um mecanismo que providencia eventos de utilização num formado definido."
@@ -0,0 +1,20 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-11-19T11:06:25+00:00\n"
"PO-Revision-Date: 2019-11-19T11:06:25+00:00\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Модуль «Событие использования»"
msgid "plugins.generic.usageEvent.description"
msgstr ""
"Создает обработчик, который выдает событие использования сайта в "
"определенном формате."
@@ -0,0 +1,18 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-11-19T11:06:25+00:00\n"
"PO-Revision-Date: 2019-11-19T11:06:25+00:00\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Dogodek uporabe"
msgid "plugins.generic.usageEvent.description"
msgstr "Ustvari proženje dogodka uporabe v definirani obliki."
@@ -0,0 +1,19 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2020-05-27 12:39+0000\n"
"Last-Translator: Viveka Svensson <viveka.svensson@lnu.se>\n"
"Language-Team: Swedish <http://translate.pkp.sfu.ca/projects/pkp-lib/"
"generic-usageEvent/sv/>\n"
"Language: sv_SE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.9.1\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Användningshändelse"
msgid "plugins.generic.usageEvent.description"
msgstr ""
"Skapar en hook som matar ut användningshändelser i ett definerat format."
@@ -0,0 +1,19 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-11-19T11:06:25+00:00\n"
"PO-Revision-Date: 2019-11-19T11:06:25+00:00\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Kullanım Etkinliği"
msgid "plugins.generic.usageEvent.description"
msgstr ""
"Tanımlanmış bir biçimde kullanım etkinliği sağlayan bir bağlantı oluşturur."
@@ -0,0 +1,22 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-11-19T11:06:25+00:00\n"
"PO-Revision-Date: 2020-04-18 18:17+0000\n"
"Last-Translator: Fylypovych Georgii <red.ukr@gmail.com>\n"
"Language-Team: Ukrainian <http://translate.pkp.sfu.ca/projects/pkp-lib/"
"generic-usageEvent/uk/>\n"
"Language: uk_UA\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<="
"4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 3.9.1\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Плагін \"Подія використання\""
msgid "plugins.generic.usageEvent.description"
msgstr "Створює обробник, який видає подію використання сайту у визначеному форматі."
@@ -0,0 +1,19 @@
msgid ""
msgstr ""
"PO-Revision-Date: 2020-08-14 13:48+0000\n"
"Last-Translator: Tran Ngoc Trung <khuchatthienduong@gmail.com>\n"
"Language-Team: Vietnamese <http://translate.pkp.sfu.ca/projects/pkp-lib/"
"generic-usageEvent/vi_VN/>\n"
"Language: vi_VN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 3.9.1\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr "Sự kiện sử dụng"
msgid "plugins.generic.usageEvent.description"
msgstr ""
"Tạo một cái móc mà cung cấp sự kiện sử dụng trong một định dạng xác định."
@@ -0,0 +1,14 @@
# Emma U <emmaupkp@gmail.com>, 2023.
msgid ""
msgstr ""
"Language: zh_TW\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Weblate\n"
msgid "plugins.generic.usageEvent.displayName"
msgstr ""
msgid "plugins.generic.usageEvent.description"
msgstr ""
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plugin_settings SYSTEM "../../../dtd/pluginSettings.dtd">
<!--
* plugins/generic/usageEvent/settings.xml
*
* Copyright (c) 2013-2021 Simon Fraser University
* Copyright (c) 2003-2021 John Willinsky
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
*
* Default plugin settings.
*
-->
<plugin_settings>
<setting type="bool">
<name>enabled</name>
<value>true</value>
</setting>
</plugin_settings>
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE version SYSTEM "../../../dtd/pluginVersion.dtd">
<!--
* plugins/generic/usageEvent/version.xml
*
* Copyright (c) 2013-2021 Simon Fraser University
* Copyright (c) 2003-2021 John Willinsky
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
*
* Plugin version information.
-->
<version>
<application>usageEvent</application>
<type>plugins.generic</type>
<release>1.0.0.0</release>
<date>2013-04-15</date>
<sitewide>1</sitewide>
<class>UsageEventPlugin</class>
</version>