00001 <?php
00002
00016 import('classes.plugins.GenericPlugin');
00017
00018 class CmsRssPlugin extends GenericPlugin {
00023 function getName() {
00024 return 'CmsRssPlugin';
00025 }
00026
00031 function getDisplayName() {
00032 return Locale::translate('plugins.generic.cmsrss.displayName');
00033 }
00034
00039 function getDescription() {
00040 $description = Locale::translate('plugins.generic.cmsrss.description');
00041 if ( !$this->isCmsInstalled() )
00042 $description .= "<br />".Locale::translate('plugins.generic.cmsrss.requirement.cms');
00043 return $description;
00044 }
00045
00050 function &getCmsPlugin() {
00051 $plugin =& PluginRegistry::getPlugin('generic', 'CmsPlugin');
00052 return $plugin;
00053 }
00054
00058 function isCmsInstalled() {
00059 $plugin =& $this->getCmsPlugin();
00060 return ($plugin && $plugin->getEnabled());
00061 }
00062
00063 function register($category, $path) {
00064 if (!Config::getVar('general', 'installed')) return false;
00065 if (parent::register($category, $path)) {
00066 $this->addLocaleData();
00067 HookRegistry::register('Plugins::CmsHandler', array(&$this, 'callbackAddRssFeeds'));
00068 return true;
00069 }
00070 return false;
00071 }
00072
00073
00074
00075
00076 function callbackAddRssFeeds($hookName, $args) {
00077 if ( $this->getEnabled() ) {
00078 $current = $args[0];
00079 $output =& $args[1];
00080
00081 $journal =& Request::getJournal();
00082 $journalId = $journal->getJournalId();
00083
00084 $templateMgr =& TemplateManager::getManager();
00085
00086 $this->import('SimplePie');
00087
00088 $urls = $this->getSetting($journalId, 'urls');
00089
00090
00091 $months = $this->getSetting($journalId, 'months');
00092 $aggregate = $this->getSetting($journalId, 'aggregate');
00093
00094 $feeds = array();
00095 foreach ( $urls as $feedInfo ) {
00096 $webSafe = array();
00097 foreach ( explode(":", $feedInfo['pageName']) as $pageName ) {
00098 $webSafe[] = ContentManager::websafe($pageName) ;
00099 }
00100 $webSafe = implode(":", $webSafe);
00101
00102
00103 if ( strcmp($webSafe, $current) != 0)
00104 continue;
00105
00106 $feed = new SimplePie();
00107 $feed->feed_url($feedInfo['url']);
00108 $feed->cache_location(Core::getBaseDir() . DIRECTORY_SEPARATOR . 'cache');
00109 $feed->replace_headers(true);
00110 $feed->init();
00111
00112 if ( $feed->data ) {
00113 $max = $feed->get_item_quantity(0);
00114 $templateMgr->assign('feed', $feed);
00115 for ($x = 0; $x < $max; $x++) {
00116 $item = $feed->get_item($x);
00117
00118 $templateMgr->assign('item', $item);
00119
00120 $items[$item->get_date('U')] = trim($templateMgr->fetch($this->getTemplatePath().'rss.tpl'));
00121 }
00122 }
00123 }
00124
00125 if ( is_array($items) && count($items) > 0 ) {
00126 if ( $aggregate )
00127 krsort($items);
00128
00129
00130 foreach ( $items as $time => $post) {
00131 if ( $months > 0 ) {
00132 if ( $time > strtotime("-".$months." month") ) {
00133 $output .= $post;
00134 }
00135 } else {
00136 $output .= $post;
00137 }
00138 }
00139 }
00140
00141 }
00142
00143
00144 return false;
00145 }
00146
00150 function getEnabled() {
00151 $journal = &Request::getJournal();
00152 if (!$journal) return false;
00153 return $this->getSetting($journal->getJournalId(), 'enabled');
00154 }
00155
00159 function setEnabled($enabled) {
00160 $journal = &Request::getJournal();
00161 if ($journal) {
00162 $this->updateSetting($journal->getJournalId(), 'enabled', $enabled ? true : false);
00163
00164 return true;
00165 }
00166 return false;
00167 }
00168
00172 function getManagementVerbs() {
00173 if ( !$this->isCmsInstalled() )
00174 return array();
00175
00176 $verbs = array();
00177 if ($this->getEnabled()) {
00178 $verbs[] = array(
00179 'disable',
00180 Locale::translate('manager.plugins.disable')
00181 );
00182 $verbs[] = array(
00183 'settings',
00184 Locale::translate('manager.plugins.cmsrss.edit')
00185 );
00186 } else {
00187 $verbs[] = array(
00188 'enable',
00189 Locale::translate('manager.plugins.enable')
00190 );
00191 }
00192 return $verbs;
00193 }
00194
00200 function setBreadcrumbs() {
00201 $templateMgr = &TemplateManager::getManager();
00202 $pageCrumbs = array(
00203 array(
00204 Request::url(null, 'user'),
00205 'navigation.user'
00206 ),
00207 array(
00208 Request::url(null, 'manager'),
00209 'user.role.manager'
00210 ),
00211 array(
00212 Request::url(null, 'manager', 'plugins'),
00213 'manager.plugins'
00214 )
00215 );
00216
00217 $templateMgr->assign('pageHierarchy', $pageCrumbs);
00218 }
00219
00223 function manage($verb, $args) {
00224 $returner = true;
00225
00226 $templateMgr = &TemplateManager::getManager();
00227 $templateMgr->register_function('plugin_url', array(&$this, 'smartyPluginUrl'));
00228
00229
00230 switch ($verb) {
00231 case 'settings':
00232 $journal =& Request::getJournal();
00233
00234 $this->import('CmsRssSettingsForm');
00235 $form =& new CmsRssSettingsForm($this, $journal->getJournalId());
00236
00237 $this->setBreadcrumbs();
00238 $form->readInputData();
00239
00240 if (Request::getUserVar('addUrl')) {
00241
00242 $editData = true;
00243 $urls = $form->getData('urls');
00244 array_push($urls, array());
00245 $form->_data['urls'] = $urls;
00246
00247 } else if (($delUrl = Request::getUserVar('delUrl')) && count($delUrl) == 1) {
00248
00249 $editData = true;
00250 list($delUrl) = array_keys($delUrl);
00251 $delUrl = (int) $delUrl;
00252 $urls = $form->getData('urls');
00253 if (isset($urls[$delUrl]['urlId']) && !empty($urls[$delUrl]['urlId'])) {
00254 $deletedUrls = explode(':', $form->getData('deletedUrls'));
00255 array_push($deletedUrls, $urls[$delUrl]['urlId']);
00256 $form->setData('deletedUrls', join(':', $deletedUrls));
00257 }
00258 array_splice($urls, $delUrl, 1);
00259 $form->_data['urls'] = $urls;
00260
00261 } else if ( Request::getUserVar('save') ) {
00262 $editData = true;
00263 $form->execute();
00264 } else {
00265 $form->initData();
00266 }
00267
00268 if ( !isset($editData) && $form->validate()) {
00269 $form->execute();
00270 $form->display();
00271 } else {
00272 $form->display();
00273 }
00274 $returner = true;
00275 break;
00276 case 'enable':
00277 $this->setEnabled(true);
00278 $returner = false;
00279 break;
00280 case 'disable':
00281 $this->setEnabled(false);
00282 $returner = false;
00283 break;
00284 }
00285
00286 return $returner;
00287 }
00288 }
00289
00290 ?>