00001 <?php
00002
00015
00016
00017
00018 import('classes.plugins.GenericPlugin');
00019
00020 class AnnouncementFeedPlugin extends GenericPlugin {
00021 function register($category, $path) {
00022 if (parent::register($category, $path)) {
00023 if ($this->getEnabled()) {
00024 HookRegistry::register('TemplateManager::display',array(&$this, 'callbackAddLinks'));
00025 HookRegistry::register('PluginRegistry::loadCategory', array(&$this, 'callbackLoadCategory'));
00026 }
00027 $this->addLocaleData();
00028 return true;
00029 }
00030 return false;
00031 }
00032
00037 function getName() {
00038 return 'AnnouncementFeedPlugin';
00039 }
00040
00045 function getDisplayName() {
00046 return Locale::translate('plugins.generic.announcementfeed.displayName');
00047 }
00048
00053 function getDescription() {
00054 return Locale::translate('plugins.generic.announcementfeed.description');
00055 }
00056
00061 function getEnabled() {
00062 $journal =& Request::getJournal();
00063 $journalId = $journal?$journal->getJournalId():0;
00064 return $this->getSetting($journalId, 'enabled');
00065 }
00066
00073 function callbackLoadCategory($hookName, $args) {
00074 $category =& $args[0];
00075 $plugins =& $args[1];
00076 switch ($category) {
00077 case 'blocks':
00078 $this->import('AnnouncementFeedBlockPlugin');
00079 $blockPlugin =& new AnnouncementFeedBlockPlugin();
00080 $plugins[$blockPlugin->getSeq()][$blockPlugin->getPluginPath()] =& $blockPlugin;
00081 break;
00082 case 'gateways':
00083 $this->import('AnnouncementFeedGatewayPlugin');
00084 $gatewayPlugin =& new AnnouncementFeedGatewayPlugin();
00085 $plugins[$gatewayPlugin->getSeq()][$gatewayPlugin->getPluginPath()] =& $gatewayPlugin;
00086 break;
00087 }
00088 return false;
00089 }
00090
00091 function callbackAddLinks($hookName, $args) {
00092 if ($this->getEnabled()) {
00093 $templateManager =& $args[0];
00094 $currentJournal =& $templateManager->get_template_vars('currentJournal');
00095 $announcementsEnabled = $currentJournal ? $currentJournal->getSetting('enableAnnouncements') : false;
00096 $displayPage = $currentJournal ? $this->getSetting($currentJournal->getJournalId(), 'displayPage') : null;
00097 $requestedPage = Request::getRequestedPage();
00098
00099 if ( $announcementsEnabled && (($displayPage == 'all') || ($displayPage == 'homepage' && (empty($requestedPage) || $requestedPage == 'index' || $requestedPage == 'announcement')) || ($displayPage == $requestedPage)) ) {
00100
00101
00102 $additionalHeadData = $templateManager->get_template_vars('additionalHeadData');
00103
00104 $feedUrl1 = '<link rel="alternate" type="application/atom+xml" href="'.$currentJournal->getUrl().'/gateway/plugin/AnnouncementFeedGatewayPlugin/atom" />';
00105 $feedUrl2 = '<link rel="alternate" type="application/rdf+xml" href="'.$currentJournal->getUrl().'/gateway/plugin/AnnouncementFeedGatewayPlugin/rss" />';
00106 $feedUrl3 = '<link rel="alternate" type="application/rss+xml" href="'.$currentJournal->getUrl().'/gateway/plugin/AnnouncementFeedGatewayPlugin/rss2" />';
00107
00108 $templateManager->assign('additionalHeadData', $additionalHeadData."\n\t".$feedUrl1."\n\t".$feedUrl2."\n\t".$feedUrl3);
00109 }
00110 }
00111
00112 return false;
00113 }
00114
00118 function getManagementVerbs() {
00119 $verbs = array();
00120 if ($this->getEnabled()) {
00121 $verbs[] = array(
00122 'disable',
00123 Locale::translate('manager.plugins.disable')
00124 );
00125 $verbs[] = array(
00126 'settings',
00127 Locale::translate('plugins.generic.announcementfeed.settings')
00128 );
00129 } else {
00130 $verbs[] = array(
00131 'enable',
00132 Locale::translate('manager.plugins.enable')
00133 );
00134 }
00135 return $verbs;
00136 }
00137
00141 function manage($verb, $args) {
00142 $returner = true;
00143 $journal =& Request::getJournal();
00144
00145 switch ($verb) {
00146 case 'settings':
00147 $templateMgr = &TemplateManager::getManager();
00148 $templateMgr->register_function('plugin_url', array(&$this, 'smartyPluginUrl'));
00149
00150 $this->import('SettingsForm');
00151 $form =& new SettingsForm($this, $journal->getJournalId());
00152
00153 if (Request::getUserVar('save')) {
00154 $form->readInputData();
00155 if ($form->validate()) {
00156 $form->execute();
00157 Request::redirect(null, null, 'plugins');
00158 } else {
00159 $form->display();
00160 }
00161 } else {
00162 $form->initData();
00163 $form->display();
00164 }
00165 break;
00166 case 'enable':
00167 $this->updateSetting($journal->getJournalId(), 'enabled', true);
00168 $returner = false;
00169 break;
00170 case 'disable':
00171 $this->updateSetting($journal->getJournalId(), 'enabled', false);
00172 $returner = false;
00173 break;
00174 }
00175
00176 return $returner;
00177 }
00178 }
00179
00180 ?>