*/ if(!defined('DOKU_INC')) die(); require_once DOKU_INC . "lib/plugins/news/scripts/rss.php"; /** * All DokuWiki plugins to extend the admin function * need to inherit from this class */ class admin_plugin_news extends DokuWiki_Admin_Plugin { var $output = ''; var $helper; var $pagedata; var $prev_deleted = ""; var $is_prev_deleted = array(); var $subfeed_selected = 0; var $subfeed_name = ""; function admin_plugin_news() { $this->helper =& plugin_load('helper', 'news'); if($_REQUEST['subfeeds'] != 'NotSet') { $this->helper->setSubFeed($_REQUEST['subfeeds']); } $this->pagedata = $this->helper->_readFile($this->helper->getMetaFN('pagedata','.ser'),true); } /** * handle user request */ function handle() { if (!isset($_REQUEST['cmd'])) return; // first time - nothing to do $this->output = ''; if (!checkSecurityToken()) return; if (!is_array($_REQUEST['cmd'])) return; // verify valid values switch (key($_REQUEST['cmd'])) { case 'prune' : $this->prune(); break; case 'confirm' : $this->confirm(); break; case 'restore' : $this->is_prev_deleted =array(); $this->prev_deleted = ""; if(isset($_REQUEST[subfeed_dir])) { $this->helper->setSubFeed($_REQUEST['subfeed_dir']); $this->pagedata = $this->helper->_readFile($this->helper->getMetaFN('pagedata','.ser'),true); } // $this->output=$_REQUEST; return; case 'generate': $this->output=$this->generate($_REQUEST['subfeeds']); return; case 'subfeed': $this->subfeed_selected = $_REQUEST['subfeed_inx']; if($this->subfeed_selected > 0) { $this->subfeed_name= $_REQUEST['subfeeds']; } break; } $deleted = array(); if(isset($_REQUEST['delete']) && $_REQUEST['delete']) { $deletes = $_REQUEST['delete']; $deleted = array_keys($deletes); } if($_REQUEST['prev_del']) { $prev_deleted = $_REQUEST['prev_del']; $prev_deleted = explode(',',$prev_deleted); $prev_deleted = array_merge($prev_deleted, $deleted); $prev_deleted = array_unique($prev_deleted); $this->prev_deleted = implode(",", $prev_deleted); $this->is_prev_deleted = $prev_deleted; } // $this->output=$_REQUEST; } /** * output appropriate html */ function html() { ptln(''); ptln('
'); ptln(' '); ptln(' '); ptln(' '); ptln(' '); ptln(' '); formSecurityToken(); ptln(' '); ptln(' '); ptln(' '); ptln(' '); ptln(' '); ptln(' '); ptln(' '); ptln('

'); $this->table_header(); foreach($this->pagedata as $md5=>$pageinfo) { $this->pagedata_row($md5,$pageinfo); } $this->table_footer(); ptln('
'); ptln('
'); if($this->output) { ptln('

');	  
		  echo print_r($this->output,true);
          echo  $this->subfeed_name;
		  ptln('

'); } } function table_header() { ptln(''); $theader = $this->theader("Delete") . $this->theader("Page") . $this->theader("GM Time") . $this->theader("Local Time"); ptln("$theader"); } function table_footer() { ptln('
'); } function pagedata_row($md5,$info) { static $inx = 0; if(in_array($md5,$this->is_prev_deleted)) return; $type = 'delete'; $cb_id =$type . '_' . $inx; ptln(''); $row = '' . "" .''; $row .= $this->cell($info['id'] ) . $this->cell($info['gmtime']) . $this->cell(date('r',$info['time'])); ptln($row); ptln(''); $index++; } function cell($data="") { return "$data"; } function theader($name="") { return "$name"; } function subfeed_options() { $dir = DOKU_INC . 'data/meta/newsfeed/'; if($this->subfeed_selected == 0 && isset($_REQUEST['subfeed_dir'])) { $sbname_check = $_REQUEST['subfeed_dir']; } else $sbname_check = 'NotSet'; $index = 1; if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { if($file == '.' || $file == '..') continue; if(is_dir($dir . $file)) { if($this->subfeed_selected == $index || $file == $sbname_check) { ptln(""); } else { ptln(""); } $index++; } } } closedir($dh); } function prune() { $deletes = $_REQUEST['delete']; $deleted = array_keys($deletes); foreach($deleted as $d) { unset($this->pagedata[$d]); } } function confirm() { $deleted = explode(',',$_REQUEST['prev_del']); if(isset($_REQUEST['subfeed_dir']) && $_REQUEST['subfeed_dir'] != 'NotSet') { $this->helper->setSubFeed($_REQUEST['subfeed_dir']); $meta_dir =$this->helper->getMetaDirectory(); } else $meta_dir = "newsfeed:"; foreach($deleted as $d) { unset($this->pagedata[$d]); } $pfile =$this->helper->getMetaFN('pagedata', '.ser'); $this->helper->_writeFile($pfile,$this->pagedata,true); foreach($deleted as $d) { $file = metaFN($meta_dir . $d, '.gz'); if(file_exists($file)) { @unlink($file); } } } function generate($subfeed) { global $newsChannelTitle; global $newsChannelDescription; global $newsChannelTtl; $newsfeed_ini = DOKU_INC . 'lib/plugins/news/scripts/newsfeed.ini'; if(file_exists($newsfeed_ini)) { $ini_array = parse_ini_file($newsfeed_ini, true); $which = isset($ini_array[$subfeed]) ? $subfeed : 'default'; $newsChannelTitle = $ini_array[$which]['title']; $newsChannelDescription = $ini_array[$which]['description'] ; $newsChannelTtl = isset($ini_array[$which]['ttl']) ? $ini_array[$which]['ttl'] : $this->getConf('ttl'); } else { $subfeed = ""; $newsChannelDescription = $this->getConf('desc'); $newsChannelTitle=$this->getConf('title'); $newsChannelTtl = $this->getConf('ttl'); } $create_time = 0; $ttl = $this->getConf('ttl'); if($subfeed && $subfeed !='NotSet') { $xml_file = DOKU_INC . $subfeed . '_news.xml'; } else $xml_file = DOKU_INC . 'news_feed.xml'; $current_time = time(); new externalNewsFeed($xml_file,$ttl,$subfeed); if(@file_exists($xml_file)) { $create_time= filectime($xml_file); } if($create_time >= $current_time) { return 'Feed generated: ' . date('r',$create_time) ; } else { return "A new feed may not have been generated. Check $xml_file."; } } }