00001 <?php
00002
00015
00016
00017
00018 import('classes.plugins.GenericPlugin');
00019
00020 class WebFeedPlugin extends GenericPlugin {
00025 function getName() {
00026 return 'WebFeedPlugin';
00027 }
00028
00033 function getDisplayName() {
00034 return Locale::translate('plugins.generic.webfeed.displayName');
00035 }
00036
00041 function getDescription() {
00042 return Locale::translate('plugins.generic.webfeed.description');
00043 }
00044
00045 function register($category, $path) {
00046 if (parent::register($category, $path)) {
00047 if ($this->getEnabled()) {
00048 HookRegistry::register('TemplateManager::display',array(&$this, 'callbackAddLinks'));
00049 HookRegistry::register('PluginRegistry::loadCategory', array(&$this, 'callbackLoadCategory'));
00050 HookRegistry::register('LoadHandler', array(&$this, 'callbackHandleShortURL') );
00051 }
00052 $this->addLocaleData();
00053 return true;
00054 }
00055 return false;
00056 }
00057
00062 function getEnabled() {
00063 $journal =& Request::getJournal();
00064 $journalId = $journal?$journal->getJournalId():0;
00065 return $this->getSetting($journalId, 'enabled');
00066 }
00067
00075 function callbackLoadCategory($hookName, $args) {
00076 $category =& $args[0];
00077 $plugins =& $args[1];
00078 switch ($category) {
00079 case 'blocks':
00080 $this->import('WebFeedBlockPlugin');
00081 $blockPlugin =& new WebFeedBlockPlugin();
00082 $plugins[$blockPlugin->getSeq()][$blockPlugin->getPluginPath()] =& $blockPlugin;
00083 break;
00084 case 'gateways':
00085 $this->import('WebFeedGatewayPlugin');
00086 $gatewayPlugin =& new WebFeedGatewayPlugin();
00087 $plugins[$gatewayPlugin->getSeq()][$gatewayPlugin->getPluginPath()] =& $gatewayPlugin;
00088 break;
00089 }
00090 return false;
00091 }
00092
00096 function callbackAddLinks($hookName, $args) {
00097 if ($this->getEnabled()) {
00098 $templateManager =& $args[0];
00099
00100 $currentJournal =& $templateManager->get_template_vars('currentJournal');
00101 $requestedPage = Request::getRequestedPage();
00102 if ($currentJournal) {
00103 $issueDao = &DAORegistry::getDAO('IssueDAO');
00104 $currentIssue =& $issueDao->getCurrentIssue($currentJournal->getJournalId());
00105 $displayPage = $this->getSetting($currentJournal->getJournalId(), 'displayPage');
00106 }
00107
00108 if ( ($currentIssue) && (($displayPage == 'all') || ($displayPage == 'homepage' && (empty($requestedPage) || $requestedPage == 'index' || $requestedPage == 'issue')) || ($displayPage == 'issue' && $displayPage == $requestedPage)) ) {
00109 $additionalHeadData = $templateManager->get_template_vars('additionalHeadData');
00110
00111 $feedUrl1 = '<link rel="alternate" type="application/atom+xml" href="'.$currentJournal->getUrl().'/gateway/plugin/WebFeedGatewayPlugin/atom" />';
00112 $feedUrl2 = '<link rel="alternate" type="application/rdf+xml" href="'.$currentJournal->getUrl().'/gateway/plugin/WebFeedGatewayPlugin/rss" />';
00113 $feedUrl3 = '<link rel="alternate" type="application/rss+xml" href="'.$currentJournal->getUrl().'/gateway/plugin/WebFeedGatewayPlugin/rss2" />';
00114
00115 $templateManager->assign('additionalHeadData', $additionalHeadData."\n\t".$feedUrl1."\n\t".$feedUrl2."\n\t".$feedUrl3);
00116 }
00117 }
00118
00119 return false;
00120 }
00121
00126 function callbackHandleShortURL($hookName, $args) {
00127 if ($this->getEnabled()) {
00128 $page =& $args[0];
00129 $op =& $args[1];
00130
00131 if ($page == 'feed') {
00132 switch ($op) {
00133 case 'atom':
00134 Request::redirect(null, 'gateway', 'plugin', array('WebFeedGatewayPlugin', 'atom'));
00135 break;
00136 case 'rss':
00137 Request::redirect(null, 'gateway', 'plugin', array('WebFeedGatewayPlugin', 'rss'));
00138 break;
00139 case 'rss2':
00140 Request::redirect(null, 'gateway', 'plugin', array('WebFeedGatewayPlugin', 'rss2'));
00141 break;
00142 default:
00143 Request::redirect(null, 'index');
00144 }
00145 }
00146 }
00147 return false;
00148 }
00149
00153 function getManagementVerbs() {
00154 $verbs = array();
00155 if ($this->getEnabled()) {
00156 $verbs[] = array(
00157 'disable',
00158 Locale::translate('manager.plugins.disable')
00159 );
00160 $verbs[] = array(
00161 'settings',
00162 Locale::translate('plugins.generic.webfeed.settings')
00163 );
00164 } else {
00165 $verbs[] = array(
00166 'enable',
00167 Locale::translate('manager.plugins.enable')
00168 );
00169 }
00170 return $verbs;
00171 }
00172
00176 function manage($verb, $args) {
00177 $returner = true;
00178 $journal =& Request::getJournal();
00179
00180 switch ($verb) {
00181 case 'settings':
00182 $templateMgr = &TemplateManager::getManager();
00183 $templateMgr->register_function('plugin_url', array(&$this, 'smartyPluginUrl'));
00184
00185 $this->import('SettingsForm');
00186 $form =& new SettingsForm($this, $journal->getJournalId());
00187
00188 if (Request::getUserVar('save')) {
00189 $form->readInputData();
00190 if ($form->validate()) {
00191 $form->execute();
00192 Request::redirect(null, null, 'plugins');
00193 } else {
00194 $form->display();
00195 }
00196 } else {
00197 $form->initData();
00198 $form->display();
00199 }
00200 break;
00201 case 'enable':
00202 $this->updateSetting($journal->getJournalId(), 'enabled', true);
00203 $returner = false;
00204 break;
00205 case 'disable':
00206 $this->updateSetting($journal->getJournalId(), 'enabled', false);
00207 $returner = false;
00208 break;
00209 }
00210
00211 return $returner;
00212 }
00213 }
00214
00215 ?>