1
0
mirror of https://github.com/e107inc/e107.git synced 2025-02-06 23:39:11 +01:00
php-e107/e107_admin/cron.php

455 lines
11 KiB
PHP
Raw Normal View History

<?php
/*
+ ----------------------------------------------------------------------------+
| e107 website system
|
| <EFBFBD>Steve Dunstan 2001-2002
| http://e107.org
| jalist@e107.org
|
| Released under the terms and conditions of the
| GNU General Public License (http://gnu.org).
|
| $Source: /cvs_backup/e107_0.8/e107_admin/cron.php,v $
2009-10-23 09:08:15 +00:00
| $Revision: 1.5 $
| $Date: 2009-10-23 09:08:15 $
| $Author: e107coders $
+----------------------------------------------------------------------------+
*/
require_once('../class2.php');
if (!getperms('U'))
{
header('location:'.e_BASE.'index.php');
exit;
}
2009-08-28 16:11:02 +00:00
include_lan(e_LANGUAGEDIR.e_LANGUAGE.'/admin/lan_'.e_PAGE);
$e_sub_cat = 'cron';
require_once('auth.php');
2009-07-08 12:01:06 +00:00
require_once (e_HANDLER.'message_handler.php');
require_once(e_HANDLER."form_handler.php");
$frm = new e_form(true);
$cron = new cron;
2009-07-08 12:01:06 +00:00
require_once(e_ADMIN."footer.php");
exit;
class cron
{
2009-07-08 12:01:06 +00:00
var $coreCrons = array();
var $cronAction;
function cron()
{
2009-07-08 12:01:06 +00:00
$this->cronAction = e_QUERY;
if(isset($_POST['submit']))
{
2009-07-08 12:01:06 +00:00
$this -> cronSave();
}
2009-07-08 12:01:06 +00:00
if(isset($_POST['save_prefs']))
{
$this -> cronSavePrefs();
}
if(isset($_POST['execute']))
{
$func = key($_POST['execute']);
$this -> cronExecute($func);
}
2009-07-08 12:01:06 +00:00
// Set Core Cron Options.
2009-10-23 09:08:15 +00:00
$this->coreCrons['user'] = array(
0 => array('name'=>'User Purge','function' => 'user_purge', 'description'=>'Purge Unactivated Users'),
1 => array('name'=>'User UnActivated','function' => 'user_unactivated', 'description'=>'Resend activation email to unactivated users.')
);
$this->coreCrons['news'] = array(
0 => array('name'=>'News Sticky','function' => 'news_purge', 'description'=>'Remove Sticky News Items')
);
2009-07-08 12:01:06 +00:00
// These core functions need to be put into e_BASE/cron.php ie. news_purge()
2009-07-08 12:01:06 +00:00
if($this->cronAction == "" || $this->cronAction == "main")
{
$this -> cronRenderPage();
}
2009-07-08 12:01:06 +00:00
if($this->cronAction == "pref")
{
$this -> cronRenderPrefs();
}
}
function cronExecute($func)
{
//TODO LANs
2009-10-23 09:08:15 +00:00
$mes = eMessage::getInstance();
if(!function_exists($func) || !call_user_func($func))
2009-10-23 09:08:15 +00:00
{
$mes->add("Error running ".$func."()", E_MESSAGE_ERROR);
}
else
{
2009-10-23 09:08:15 +00:00
$mes->add("Success running ".$func."()", E_MESSAGE_SUCCESS);
}
}
2009-07-08 12:01:06 +00:00
function cronSavePref()
{
2009-07-08 12:01:06 +00:00
// Store the USERID with the password.
// This way only the one password is needed, and the user login can be looked up in e_base/cron.php
}
function cronSave()
{
global $pref;
2009-10-23 09:08:15 +00:00
$mes = e107::getMessage();
2009-07-08 12:01:06 +00:00
foreach($_POST['cron'] as $key=>$val)
{
2009-07-08 12:01:06 +00:00
if(!$val['active'])
{
$val['active'] = 0;
}
$t['minute'] = implode(",",$_POST['tab'][$key]['minute']);
$t['hour'] = implode(",",$_POST['tab'][$key]['hour']);
$t['day'] = implode(",",$_POST['tab'][$key]['day']);
$t['month'] = implode(",",$_POST['tab'][$key]['month']);
$t['weekday'] = implode(",",$_POST['tab'][$key]['weekday']);
$val['tab'] = implode(" ",$t);
$tabs .= $val['tab']."<br />";
2009-10-23 09:08:15 +00:00
list($class,$func) = explode("__",$key);
$val['function'] = $func;
$val['class'] = $class;
2009-07-08 12:01:06 +00:00
$cron[$key] = $val;
}
2009-07-08 12:01:06 +00:00
$pref['e_cron_pref'] = $cron;
2009-10-23 09:08:15 +00:00
// print_a($pref['e_cron_pref']);
2009-07-08 12:01:06 +00:00
if(save_prefs())
{
2009-10-23 09:08:15 +00:00
$mes->add(LAN_SETSAVED, E_MESSAGE_SUCCESS);
2009-07-08 12:01:06 +00:00
}
else
{
2009-10-23 09:08:15 +00:00
$mes->add("There was a problem saving your settings.", E_MESSAGE_ERROR);
2009-07-08 12:01:06 +00:00
}
}
2009-07-08 12:01:06 +00:00
// --------------------------------------------------------------------------
function cronRenderPrefs()
{
global $frm,$ns;
2009-07-08 12:01:06 +00:00
$text = "<div style='text-align:center'>
<form method='post' action='".e_SELF."' id='linkform'>
<table class='adminlist'>
<tr>
<td style='width:30%'>Cron Password</td>
<td style='width:70%'>
".$frm->password('cron_password',100)."
</td>
</tr>
2009-07-08 12:01:06 +00:00
<tr>
<td style='width:30%'>bcc: </td>
<td style='width:70%'>
<input type='text' name='name2' class='tbox' style='width:80%' value='' />
</td>
</tr>
2009-07-08 12:01:06 +00:00
<tr style='vertical-align:top'>
<td colspan='2' class='center buttons-bar'>";
$text .= $frm->admin_button('save_prefs',LAN_SAVE, 'update');
$text .= "</td>
</tr>
</table>
</form>
</div>";
2009-07-08 12:01:06 +00:00
$ns -> tablerender(LAN_PREFS, $text);
}
2009-07-08 12:01:06 +00:00
// ----------- Grab All e_cron parameters -----------------------------------
function cronRenderPage()
{
2009-10-23 09:08:15 +00:00
global $pref;
2009-07-08 12:01:06 +00:00
$cronpref = $pref['e_cron_pref'];
2009-10-23 09:08:15 +00:00
$ns = e107::getRender();
$frm = e107::getForm();
$mes = e107::getMessage();
2009-10-23 09:08:15 +00:00
$core_cron = $this->coreCrons;
2009-07-08 12:01:06 +00:00
foreach($pref['e_cron_list'] as $key=>$val)
{
2009-07-08 12:01:06 +00:00
$eplug_cron = array();
if(is_readable(e_PLUGIN.$key."/e_cron.php"))
{
2009-07-08 12:01:06 +00:00
require_once(e_PLUGIN.$key."/e_cron.php");
2009-10-23 09:08:15 +00:00
$class_name = $key."_cron";
$method_name = 'config';
if(class_exists($class_name))
2009-07-08 12:01:06 +00:00
{
2009-10-23 09:08:15 +00:00
$obj = new $class_name;
if(method_exists($obj,$method_name))
{
$mes->add("Executing config function <b>".$key." : ".$method_name."()</b>", E_MESSAGE_DEBUG);
$new_cron[$key] = call_user_func(array($obj,$method_name));
}
else
{
$mes->add("Config function <b>".$method_name."()</b> NOT found.", E_MESSAGE_DEBUG);
}
2009-07-08 12:01:06 +00:00
}
2009-10-23 09:08:15 +00:00
}
2009-07-08 12:01:06 +00:00
}
2009-10-23 09:08:15 +00:00
$e_cron = array_merge($core_cron,$new_cron);
2009-07-08 12:01:06 +00:00
// ---------------------- List All Functions -----------------------------
$text = "<div style='text-align:center'>
<form method='post' action='".e_SELF."' id='cronform'>
<table class='adminlist'>
<colgroup span='8'>
<col></col>
<col></col>
<col></col>
<col></col>
<col></col>
<col></col>
<col></col>
<col></col>
</colgroup>
<thead>
<tr>
<th>".LAN_CRON_1."</th>
<th>".LAN_CRON_2."</th>
<th>".LAN_CRON_3."</th>
<th>".LAN_CRON_4."</th>
<th>".LAN_CRON_5."</th>
<th>".LAN_CRON_6."</th>
<th>".LAN_CRON_7."</th>
<th>".LAN_CRON_8."</th>
<th>Run Now</th>
2009-07-08 12:01:06 +00:00
</tr>
</thead>
<tbody>";
2009-10-23 09:08:15 +00:00
foreach($e_cron as $plug=>$cfg)
{
foreach($cfg as $class=>$cron)
{
2009-10-23 09:08:15 +00:00
$c = $plug.'__'. $cron['function']; // class and function.
2009-07-08 12:01:06 +00:00
$sep = array();
list($sep['minute'],$sep['hour'],$sep['day'],$sep['month'],$sep['weekday']) = explode(" ",$cronpref[$c]['tab']);
foreach($sep as $key=>$value)
{
2009-07-08 12:01:06 +00:00
if($value=="")
{
$sep[$key] = "*";
}
}
2009-07-08 12:01:06 +00:00
$minute = explode(",",$sep['minute']);
$hour = explode(",",$sep['hour']);
$day = explode(",",$sep['day']);
$month = explode(",",$sep['month']);
$weekday = explode(",",$sep['weekday']);
$min_options = array(
"*" => LAN_CRON_11,
"0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58" => LAN_CRON_12,
"0,5,10,15,20,25,30,35,40,45,50,55" => LAN_CRON_13,
"0,10,20,30,40,50" => LAN_CRON_14,
"0,15,30,45" => LAN_CRON_15
);
$hour_options = array(
"*" => LAN_CRON_16,
"0,2,4,6,8,10,12,14,16,18,20,22" => LAN_CRON_17,
"0,3,6,9,12,15,18,21" => LAN_CRON_18,
"0,6,12,18" => LAN_CRON_19
);
$text .= "<tr>
<td>".$cron['name']."</td>
<td>".$cron['description']."</td>
<td>
<input type='hidden' name='cron[$c][path]' value='".$cron['path']."' />
<select class='tbox' style='height:70px' multiple='multiple' name='tab[$c][minute][]'>\n";
foreach($min_options as $key=>$val)
{
if($sep['minute'] == $key)
{
$sel = "selected='selected'";
$minute = "";
}
else
{
$sel = "";
}
$text .= "<option value='$key' $sel>".$val."</option>\n";
}
for ($i=0; $i<=59; $i++)
{
$sel = (in_array(strval($i),$minute)) ? "selected='selected'" : "";
$text .= "<option value='$i' $sel>".$i."</option>\n";
}
$text .= "</select>
</td>
<td>
<select class='tbox' style='height:70px' multiple='multiple' name='tab[$c][hour][]'>
\n";
foreach($hour_options as $key=>$val)
{
if($sep['hour'] == $key)
{
$sel = "selected='selected'";
$hour = "";
}
else
{
$sel = "";
}
$text .= "<option value='$key' $sel>".$val."</option>\n";
}
for ($i=0; $i<=23; $i++)
{
$sel = (in_array(strval($i),$hour)) ? "selected='selected'" : "";
$diz = mktime($i,00,00,1,1,2000);
$text .= "<option value='$i' $sel>".$i." - ".date("g A",$diz)."</option>\n";
}
$text .= "</select>
</td>
<td>
<select class='tbox' style='height:70px' multiple='multiple' name='tab[$c][day][]'>\n";
$sel_day = ($day[0] == "*") ? "selected='selected'" : "";
$text .= "<option value='*' {$sel_day}>".LAN_CRON_20."</option>\n"; // Every Day
for ($i=1; $i<=31; $i++)
{
$sel = (in_array($i,$day)) ? "selected='selected'" : "";
$text .= "<option value='$i' $sel>".$i."</option>\n";
}
$text .= "</select>
</td>
<td>
<select class='tbox' style='height:70px' multiple='multiple' name='tab[$c][month][]'>\n";
$sel_month = ($month[0] == "*") ? "selected='selected'" : "";
$text .= "<option value='*' $sel_month>".LAN_CRON_21."</option>\n"; // Every Month
for ($i=1; $i<=12; $i++)
{
$sel = (in_array($i,$month)) ? "selected='selected'" : "";
$diz = mktime(00,00,00,$i,1,2000);
$text .= "<option value='$i' $sel>".strftime("%B",$diz)."</option>\n";
}
$text .= "</select>
</td>
<td>
<select class='tbox' style='height:70px' multiple='multiple' name='tab[$c][weekday][]'>\n";
$sel_weekday = ($weekday[0] == "*") ? "selected='selected'" : "";
$text .= "<option value='*' $sel_weekday>".LAN_CRON_22."</option>\n"; // Every Week Day.
$days = array(LAN_SUN,LAN_MON,LAN_TUE,LAN_WED,LAN_THU,LAN_FRI,LAN_SAT);
for ($i=0; $i<=6; $i++)
{
$sel = (in_array(strval($i),$weekday)) ? "selected='selected'" : "";
$text .= "<option value='$i' $sel>".$days[$i]."</option>\n";
}
$text .= "</select>
</td>
<td class='center'>";
2009-07-08 12:01:06 +00:00
$checked = ($cronpref[$c]['active'] == 1) ? "checked='checked'" : "";
$text .= "<input type='checkbox' name='cron[$c][active]' value='1' $checked />
</td>
<td class='center'>".$frm->admin_button('execute['.$c.']', 'Run Now')."</td>
2009-07-08 12:01:06 +00:00
</tr>";
}
2009-10-23 09:08:15 +00:00
}
2009-07-08 12:01:06 +00:00
$text .= "
<tr >
2009-10-23 09:08:15 +00:00
<td colspan='9' class='center'>
2009-07-08 12:01:06 +00:00
<div class='center buttons-bar'>";
// $text .= "<input class='button' type='submit' name='submit' value='".LAN_SAVE."' />";
$text .= $frm->admin_button('submit', LAN_SAVE, $action = 'update');
$text .= "</div></td>
</tr>
</tbody>
</table>
</form>
</div>";
2009-10-23 09:08:15 +00:00
$mes = e107::getMessage();
$ns -> tablerender(PAGE_NAME, $mes->render() . $text);
2009-07-08 12:01:06 +00:00
}
2009-07-08 12:01:06 +00:00
function cronOptions()
{
$e107 = &e107::getInstance();
2009-07-08 12:01:06 +00:00
$var['main']['text'] = PAGE_NAME;
$var['main']['link'] = e_SELF;
2009-07-08 12:01:06 +00:00
$var['pref']['text'] = LAN_PREFS;
$var['pref']['link'] = e_SELF."?pref";
$var['pref']['perm'] = "N";
$action = ($this->cronAction) ? $this->cronAction : "main";
e_admin_menu(PAGE_NAME, $action, $var);
}
}
function cron_adminmenu()
{
global $cron;
$cron->cronOptions();
}
?>