*/
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('
' . $this->getLang('instructions') . '
');
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.";
}
}
}