Open Journal Systems  3.3.0
AnnouncementFeedPlugin.inc.php
1 <?php
2 
16 import('lib.pkp.classes.plugins.GenericPlugin');
17 
22  public function register($category, $path, $mainContextId = null) {
23  if (!parent::register($category, $path, $mainContextId)) return false;
24  if ($this->getEnabled($mainContextId)) {
25  HookRegistry::register('TemplateManager::display',array($this, 'callbackAddLinks'));
26  $this->import('AnnouncementFeedBlockPlugin');
28 
29  $this->import('AnnouncementFeedGatewayPlugin');
31  }
32  return true;
33  }
34 
39  public function getDisplayName() {
40  return __('plugins.generic.announcementfeed.displayName');
41  }
42 
47  public function getDescription() {
48  return __('plugins.generic.announcementfeed.description');
49  }
50 
57  public function callbackAddLinks($hookName, $args) {
58  $request = Application::get()->getRequest();
59  if ($this->getEnabled() && is_a($request->getRouter(), 'PKPPageRouter')) {
60  $templateManager = $args[0];
61  $currentJournal = $templateManager->getTemplateVars('currentJournal');
62  $announcementsEnabled = $currentJournal ? $currentJournal->getData('enableAnnouncements') : false;
63 
64  if (!$announcementsEnabled) {
65  return false;
66  }
67 
68  $displayPage = $currentJournal ? $this->getSetting($currentJournal->getId(), 'displayPage') : null;
69 
70  // Define when the <link> elements should appear
71  $contexts = 'frontend';
72  if ($displayPage == 'homepage') {
73  $contexts = array('frontend-index', 'frontend-announcement');
74  } elseif ($displayPage == 'announcement') {
75  $contexts = 'frontend-' . $displayPage;
76  }
77 
78  $templateManager->addHeader(
79  'announcementsAtom+xml',
80  '<link rel="alternate" type="application/atom+xml" href="' . $request->url(null, 'gateway', 'plugin', array('AnnouncementFeedGatewayPlugin', 'atom')) . '">',
81  array(
82  'contexts' => $contexts,
83  )
84  );
85  $templateManager->addHeader(
86  'announcementsRdf+xml',
87  '<link rel="alternate" type="application/rdf+xml" href="'. $request->url(null, 'gateway', 'plugin', array('AnnouncementFeedGatewayPlugin', 'rss')) . '">',
88  array(
89  'contexts' => $contexts,
90  )
91  );
92  $templateManager->addHeader(
93  'announcementsRss+xml',
94  '<link rel="alternate" type="application/rss+xml" href="'. $request->url(null, 'gateway', 'plugin', array('AnnouncementFeedGatewayPlugin', 'rss2')) . '">',
95  array(
96  'contexts' => $contexts,
97  )
98  );
99  }
100 
101  return false;
102  }
103 
107  public function getActions($request, $verb) {
108  $router = $request->getRouter();
109  import('lib.pkp.classes.linkAction.request.AjaxModal');
110  return array_merge(
111  $this->getEnabled()?array(
112  new LinkAction(
113  'settings',
114  new AjaxModal(
115  $router->url($request, null, null, 'manage', null, array('verb' => 'settings', 'plugin' => $this->getName(), 'category' => 'generic')),
116  $this->getDisplayName()
117  ),
118  __('manager.plugins.settings'),
119  null
120  ),
121  ):array(),
122  parent::getActions($request, $verb)
123  );
124  }
125 
129  public function manage($args, $request) {
130  switch ($request->getUserVar('verb')) {
131  case 'settings':
132  $context = $request->getContext();
133 
134  AppLocale::requireComponents(LOCALE_COMPONENT_APP_COMMON, LOCALE_COMPONENT_PKP_MANAGER);
135  $templateMgr = TemplateManager::getManager($request);
136  $templateMgr->registerPlugin('function', 'plugin_url', array($this, 'smartyPluginUrl'));
137 
138  $this->import('AnnouncementFeedSettingsForm');
139  $form = new AnnouncementFeedSettingsForm($this, $context->getId());
140 
141  if ($request->getUserVar('save')) {
142  $form->readInputData();
143  if ($form->validate()) {
144  $form->execute();
145  return new JSONMessage(true);
146  }
147  } else {
148  $form->initData();
149  }
150  return new JSONMessage(true, $form->fetch($request));
151  }
152  return parent::manage($args, $request);
153  }
154 }
AppLocale\requireComponents
static requireComponents()
Definition: env1/MockAppLocale.inc.php:56
AnnouncementFeedSettingsForm
Form for journal managers to modify announcement feed plugin settings.
Definition: AnnouncementFeedSettingsForm.inc.php:18
AnnouncementFeedPlugin
Annoucement Feed plugin class.
Definition: AnnouncementFeedPlugin.inc.php:18
AnnouncementFeedBlockPlugin
Class for block component of announcement feed plugin.
Definition: AnnouncementFeedBlockPlugin.inc.php:18
AnnouncementFeedPlugin\manage
manage($args, $request)
Definition: AnnouncementFeedPlugin.inc.php:129
AnnouncementFeedGatewayPlugin
Gateway component of announcement feed plugin.
Definition: AnnouncementFeedGatewayPlugin.inc.php:19
AnnouncementFeedPlugin\getActions
getActions($request, $verb)
Definition: AnnouncementFeedPlugin.inc.php:107
AnnouncementFeedPlugin\getDescription
getDescription()
Definition: AnnouncementFeedPlugin.inc.php:47
Plugin\getEnabled
getEnabled()
Definition: Plugin.inc.php:868
JSONMessage
Class to represent a JSON (Javascript Object Notation) message.
Definition: JSONMessage.inc.php:18
Plugin\getSetting
getSetting($contextId, $name)
Definition: Plugin.inc.php:473
AjaxModal
A modal that retrieves its content from via AJAX.
Definition: AjaxModal.inc.php:18
LinkAction
Base class defining an action that can be performed by the user in the user interface.
Definition: LinkAction.inc.php:22
LazyLoadPlugin\getName
getName()
Definition: LazyLoadPlugin.inc.php:40
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
AnnouncementFeedPlugin\getDisplayName
getDisplayName()
Definition: AnnouncementFeedPlugin.inc.php:39
Plugin\getPluginPath
getPluginPath()
Definition: Plugin.inc.php:330
Plugin\$request
$request
Definition: Plugin.inc.php:68
HookRegistry\register
static register($hookName, $callback, $hookSequence=HOOK_SEQUENCE_NORMAL)
Definition: HookRegistry.inc.php:70
PKPApplication\get
static get()
Definition: PKPApplication.inc.php:235
PluginRegistry\register
static register($category, $plugin, $path, $mainContextId=null)
Definition: PluginRegistry.inc.php:64
AnnouncementFeedPlugin\callbackAddLinks
callbackAddLinks($hookName, $args)
Definition: AnnouncementFeedPlugin.inc.php:57
GenericPlugin
Abstract class for generic plugins.
Definition: GenericPlugin.inc.php:18