Open Journal Systems  3.3.0
AnnouncementFeedGatewayPlugin.inc.php
1 <?php
2 
17 import('lib.pkp.classes.plugins.GatewayPlugin');
18 
20  protected $_parentPlugin;
21 
26  function __construct($parentPlugin) {
27  $this->_parentPlugin = $parentPlugin;
28  parent::__construct();
29  }
30 
36  public function getName() {
37  return 'AnnouncementFeedGatewayPlugin';
38  }
39 
43  public function getHideManagement() {
44  return true;
45  }
46 
50  public function getDisplayName() {
51  return __('plugins.generic.announcementfeed.displayName');
52  }
53 
57  public function getDescription() {
58  return __('plugins.generic.announcementfeed.description');
59  }
60 
64  public function getPluginPath() {
65  return $this->_parentPlugin->getPluginPath();
66  }
67 
73  public function getEnabled() {
74  return $this->_parentPlugin->getEnabled();
75  }
76 
82  public function fetch($args, $request) {
83  // Make sure we're within a Journal context
84  $journal = $request->getJournal();
85  if (!$journal) return false;
86 
87  // Make sure announcements and plugin are enabled
88  $announcementsEnabled = $journal->getData('enableAnnouncements');
89  if (!$announcementsEnabled || !$this->_parentPlugin->getEnabled()) return false;
90 
91  // Make sure the feed type is specified and valid
92  $type = array_shift($args);
93  $typeMap = array(
94  'rss' => 'rss.tpl',
95  'rss2' => 'rss2.tpl',
96  'atom' => 'atom.tpl'
97  );
98  $mimeTypeMap = array(
99  'rss' => 'application/rdf+xml',
100  'rss2' => 'application/rss+xml',
101  'atom' => 'application/atom+xml'
102  );
103  if (!isset($typeMap[$type])) return false;
104 
105  // Get limit setting, if any
106  $recentItems = (int) $this->_parentPlugin->getSetting($journal->getId(), 'recentItems');
107 
108  $announcementDao = DAORegistry::getDAO('AnnouncementDAO'); /* @var $announcementDao AnnouncementDAO */
109  $journalId = $journal->getId();
110  if ($recentItems > 0) {
111  import('lib.pkp.classes.db.DBResultRange');
112  $rangeInfo = new DBResultRange($recentItems, 1);
113  $announcements = $announcementDao->getAnnouncementsNotExpiredByAssocId(ASSOC_TYPE_JOURNAL, $journalId, $rangeInfo);
114  } else {
115  $announcements = $announcementDao->getAnnouncementsNotExpiredByAssocId(ASSOC_TYPE_JOURNAL, $journalId);
116  }
117 
118  // Get date of most recent announcement
119  $lastDateUpdated = $this->_parentPlugin->getSetting($journal->getId(), 'dateUpdated');
120  if ($announcements->wasEmpty()) {
121  if (empty($lastDateUpdated)) {
122  $dateUpdated = Core::getCurrentDate();
123  $this->_parentPlugin->updateSetting($journal->getId(), 'dateUpdated', $dateUpdated, 'string');
124  } else {
125  $dateUpdated = $lastDateUpdated;
126  }
127  } else {
128  $mostRecentAnnouncement = $announcementDao->getMostRecentAnnouncementByAssocId(ASSOC_TYPE_JOURNAL, $journalId);
129  $dateUpdated = $mostRecentAnnouncement->getDatetimePosted();
130  if (empty($lastDateUpdated) || (strtotime($dateUpdated) > strtotime($lastDateUpdated))) {
131  $this->_parentPlugin->updateSetting($journal->getId(), 'dateUpdated', $dateUpdated, 'string');
132  }
133  }
134 
135  $versionDao = DAORegistry::getDAO('VersionDAO'); /* @var $versionDao VersionDAO */
136  $version = $versionDao->getCurrentVersion();
137 
138  $templateMgr = TemplateManager::getManager($request);
139  $templateMgr->assign(array(
140  'ojsVersion' => $version->getVersionString(),
141  'selfUrl' => $request->getCompleteUrl(),
142  'dateUpdated' => $dateUpdated,
143  'announcements' => $announcements->toArray(),
144  'journal' => $journal,
145  ));
146 
147  $templateMgr->display($this->_parentPlugin->getTemplateResource($typeMap[$type]), $mimeTypeMap[$type]);
148 
149  return true;
150  }
151 }
DBResultRange
Container class for range information when retrieving a result set.
Definition: DBResultRange.inc.php:17
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
AnnouncementFeedGatewayPlugin
Gateway component of announcement feed plugin.
Definition: AnnouncementFeedGatewayPlugin.inc.php:19
AnnouncementFeedGatewayPlugin\getEnabled
getEnabled()
Definition: AnnouncementFeedGatewayPlugin.inc.php:73
AnnouncementFeedGatewayPlugin\fetch
fetch($args, $request)
Definition: AnnouncementFeedGatewayPlugin.inc.php:82
AnnouncementFeedGatewayPlugin\__construct
__construct($parentPlugin)
Definition: AnnouncementFeedGatewayPlugin.inc.php:26
AnnouncementFeedGatewayPlugin\getDisplayName
getDisplayName()
Definition: AnnouncementFeedGatewayPlugin.inc.php:50
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
Plugin\$request
$request
Definition: Plugin.inc.php:68
Core\getCurrentDate
static getCurrentDate($ts=null)
Definition: Core.inc.php:63
AnnouncementFeedGatewayPlugin\getName
getName()
Definition: AnnouncementFeedGatewayPlugin.inc.php:36
AnnouncementFeedGatewayPlugin\$_parentPlugin
$_parentPlugin
Definition: AnnouncementFeedGatewayPlugin.inc.php:20
AnnouncementFeedGatewayPlugin\getHideManagement
getHideManagement()
Definition: AnnouncementFeedGatewayPlugin.inc.php:43
AnnouncementFeedGatewayPlugin\getPluginPath
getPluginPath()
Definition: AnnouncementFeedGatewayPlugin.inc.php:64
GatewayPlugin
Abstract class for gateway plugins.
Definition: GatewayPlugin.inc.php:18
AnnouncementFeedGatewayPlugin\getDescription
getDescription()
Definition: AnnouncementFeedGatewayPlugin.inc.php:57