[ Mini Kiebo ]
Server: Windows NT DESKTOP-5B8S0D4 6.2 build 9200 (Windows 8 Professional Edition) i586
Path:
D:
/
Backup
/
05122024
/
htdocs
/
jurnal-kesmas
/
plugins
/
generic
/
webFeed
/
[
Home
]
File: WebFeedPlugin.php
<?php /** * @file WebFeedPlugin.php * * Copyright (c) 2014-2023 Simon Fraser University * Copyright (c) 2003-2023 John Willinsky * Distributed under the GNU GPL v3. For full terms see the file docs/COPYING. * * @class WebFeedPlugin * * @brief Web Feeds plugin class */ namespace APP\plugins\generic\webFeed; use APP\core\Application; use APP\notification\NotificationManager; use APP\template\TemplateManager; use PKP\core\JSONMessage; use PKP\core\PKPPageRouter; use PKP\linkAction\LinkAction; use PKP\linkAction\request\AjaxModal; use PKP\plugins\GenericPlugin; use PKP\plugins\Hook; use PKP\plugins\PluginRegistry; class WebFeedPlugin extends GenericPlugin { /** * @copydoc Plugin::register() * * @param null|mixed $mainContextId */ public function register($category, $path, $mainContextId = null): bool { if (!parent::register($category, $path, $mainContextId)) { return false; } if ($this->getEnabled($mainContextId)) { $this->setupTemplateLinks(); // Register the block plugin to display feed links at the application sidebar PluginRegistry::register('blocks', new WebFeedBlockPlugin($this), $this->getPluginPath()); // Register the gateway plugin, which will handle the feed request PluginRegistry::register('gateways', new WebFeedGatewayPlugin($this), $this->getPluginPath()); } return true; } /** * Add feed links to page <head> on select/all pages. */ public function setupTemplateLinks(): void { Hook::add('TemplateManager::display', function (string $hookName, array $args): int { // Only page requests will be handled $request = Application::get()->getRequest(); if (!($request->getRouter() instanceof PKPPageRouter)) { return Hook::CONTINUE; } /** @var TemplateManager */ $templateManager = $args[0]; $context = $request->getContext(); if (is_null($context)) { return Hook::CONTINUE; } $displayPage = $this->getSetting($context->getId(), 'displayPage'); // Define when the <link> elements should appear $contexts = match ($displayPage) { 'homepage' => ['frontend-index', 'frontend-issue'], // Issue settings are only available for OJS 'issue' => 'frontend-issue', default => 'frontend' }; $className = explode('/', WebFeedGatewayPlugin::class); $className = end($className); foreach (WebFeedGatewayPlugin::FEED_MIME_TYPE as $feedType => $mimeType) { $url = $request->url(null, 'gateway', 'plugin', [$className, $feedType]); $templateManager->addHeader("webFeedPlugin{$feedType}", "<link rel=\"alternate\" type=\"{$mimeType}\" href=\"{$url}\">", ['contexts' => $contexts]); } return Hook::CONTINUE; }); } /** * Retrieves whether the installation supports issues */ public static function hasIssues(): bool { return str_contains(Application::getName(), 'ojs'); } /** * @copydoc Plugin::getContextSpecificPluginSettingsFile() */ public function getContextSpecificPluginSettingsFile(): string { return $this->getPluginPath() . '/settings.xml'; } /** * @copydoc Plugin::getActions() */ public function getActions($request, $verb): array { $actions = parent::getActions($request, $verb); if (!$this->getEnabled()) { return $actions; } $router = $request->getRouter(); $url = $router->url($request, null, null, 'manage', null, ['verb' => 'settings', 'plugin' => $this->getName(), 'category' => 'generic']); array_unshift($actions, new LinkAction('settings', new AjaxModal($url, $this->getDisplayName()), __('manager.plugins.settings'))); return $actions; } /** * @copydoc Plugin::manage() */ public function manage($args, $request): JSONMessage { if ($request->getUserVar('verb') !== 'settings') { return parent::manage($args, $request); } $form = new SettingsForm($this, $request->getContext()->getId()); if (!$request->getUserVar('save')) { $form->initData(); return new JSONMessage(true, $form->fetch($request)); } $form->readInputData(); if (!$form->validate()) { return new JSONMessage(true, $form->fetch($request)); } $form->execute(); $notificationManager = new NotificationManager(); $notificationManager->createTrivialNotification($request->getUser()->getId()); return new JSONMessage(true); } /** * @copydoc Plugin::getDisplayName() */ public function getDisplayName(): string { return __('plugins.generic.webfeed.displayName'); } /** * @copydoc Plugin::getDisplayName() */ public function getDescription(): string { return __('plugins.generic.webfeed.description'); } } if (!PKP_STRICT_MODE) { class_alias('\APP\plugins\generic\webFeed\WebFeedPlugin', '\WebFeedPlugin'); }