2008-06-17 05:39:46 +00:00
< ? php
/*
+ ----------------------------------------------------------------------------+
| e107 website system
|
2009-09-10 12:49:47 +00:00
| <EFBFBD> Steve Dunstan 2001 - 2002
2008-06-17 05:39:46 +00:00
| 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-24 10:15:05 +00:00
| $Revision : 1.8 $
| $Date : 2009 - 10 - 24 10 : 15 : 05 $
2009-09-10 12:49:47 +00:00
| $Author : e107coders $
2008-06-17 05:39:46 +00:00
+----------------------------------------------------------------------------+
*/
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 );
2008-06-17 05:39:46 +00:00
$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 ;
2008-06-17 05:39:46 +00:00
2009-07-08 12:01:06 +00:00
require_once ( e_ADMIN . " footer.php " );
exit ;
class cron
2008-06-17 05:39:46 +00:00
{
2009-07-08 12:01:06 +00:00
var $coreCrons = array ();
var $cronAction ;
function cron ()
2008-06-17 05:39:46 +00:00
{
2009-10-23 14:16:08 +00:00
global $pref ;
2009-10-24 10:07:30 +00:00
$mes = $mes = e107 :: getMessage ();
2009-07-08 12:01:06 +00:00
$this -> cronAction = e_QUERY ;
2009-10-24 10:07:30 +00:00
2009-10-24 10:15:05 +00:00
if ( ! vartrue ( $pref [ 'e_cron_pwd' ]))
{
$pwd = $this -> setCronPwd ();
}
2009-10-24 10:07:30 +00:00
$this -> lastRefresh ();
2009-07-08 12:01:06 +00:00
if ( isset ( $_POST [ 'submit' ]))
2008-06-17 05:39:46 +00:00
{
2009-07-08 12:01:06 +00:00
$this -> cronSave ();
2008-06-17 05:39:46 +00:00
}
2009-07-08 12:01:06 +00:00
if ( isset ( $_POST [ 'save_prefs' ]))
{
$this -> cronSavePrefs ();
}
2009-09-10 12:49:47 +00:00
if ( isset ( $_POST [ 'execute' ]))
{
2009-10-23 14:16:08 +00:00
$class_func = key ( $_POST [ 'execute' ]);
$this -> cronExecute ( $class_func );
2009-09-10 12:49:47 +00:00
}
2008-06-17 05:39:46 +00:00
2009-07-08 12:01:06 +00:00
// Set Core Cron Options.
2009-10-23 09:08:15 +00:00
2009-10-23 14:16:08 +00:00
$this -> coreCrons [ '_system' ] = array (
0 => array ( 'name' => " Test Email " , 'function' => " sendEmail " , 'description' => " Send a test email to " . $pref [ 'siteadminemail' ] . " <br />Recommended to test the scheduling system. " ),
// 1 => array('name'=>'User Purge', 'function' => 'userPurge', 'description'=>'Purge Unactivated Users'),
// 2 => array('name'=>'User UnActivated', 'function' => 'userUnactivated', 'description'=>'Resend activation email to unactivated users.'),
// 3 => array('name'=>'News Sticky', 'function' => 'newsPurge', 'description'=>'Remove Sticky News Items')
);
2009-10-23 09:08:15 +00:00
2008-06-17 05:39:46 +00:00
2009-07-08 12:01:06 +00:00
// These core functions need to be put into e_BASE/cron.php ie. news_purge()
2008-06-17 05:39:46 +00:00
2009-07-08 12:01:06 +00:00
if ( $this -> cronAction == " " || $this -> cronAction == " main " )
{
$this -> cronRenderPage ();
}
2009-10-23 14:16:08 +00:00
2008-06-17 05:39:46 +00:00
2009-07-08 12:01:06 +00:00
if ( $this -> cronAction == " pref " )
{
$this -> cronRenderPrefs ();
}
}
2009-10-24 10:07:30 +00:00
function lastRefresh ()
{
e107 :: getCache () -> CachePageMD5 = '_' ;
$lastload = e107 :: getCache () -> retrieve ( 'cronLastLoad' , FALSE , TRUE , TRUE );
$mes = e107 :: getMessage ();
$ago = ( time () - $lastload );
$active = ( $ago < 125 ) ? TRUE : FALSE ;
$status = ( $active ) ? " Enabled " : " Offline " ;
$mes -> add ( " Status: <b> " . $status . " </b> " , E_MESSAGE_INFO );
if ( $pref [ 'e_cron_pref' ]) // grab cron
{
foreach ( $pref [ 'e_cron_pref' ] as $func => $cron )
{
if ( $cron [ 'active' ] == 1 )
{
$list [ $func ] = $cron ;
}
}
}
$mes -> add ( " Active Crons: <b> " . count ( $list ) . " </b> " , E_MESSAGE_INFO );
$mes -> add ( " Last cron refresh was " . $ago . ' seconds ago.' , E_MESSAGE_INFO );
if ( ! $active )
{
2009-10-24 10:15:05 +00:00
2009-10-24 10:07:30 +00:00
$setpwd_message = " Use the following Cron Command:<br /><b style='color:black'> " . $_SERVER [ 'DOCUMENT_ROOT' ] . e_HTTP . " cron.php " . $pref [ 'e_cron_pwd' ] . " </b><br />
This cron command is unique and will not be displayed again . Please copy and paste it into your webserver cron area to be run every minute of every day . " ;
$mes -> add ( $setpwd_message , E_MESSAGE_INFO );
}
}
2009-09-10 12:49:47 +00:00
2009-10-23 14:16:08 +00:00
function cronExecute ( $class_func )
2009-09-10 12:49:47 +00:00
{
//TODO LANs
2009-10-24 10:07:30 +00:00
$mes = e107 :: getMessage ();
2009-09-10 12:49:47 +00:00
if ( ! function_exists ( $func ) || ! call_user_func ( $func ))
2009-10-23 09:08:15 +00:00
{
$mes -> add ( " Error running " . $func . " () " , E_MESSAGE_ERROR );
2009-09-10 12:49:47 +00:00
}
else
{
2009-10-23 09:08:15 +00:00
$mes -> add ( " Success running " . $func . " () " , E_MESSAGE_SUCCESS );
2009-09-10 12:49:47 +00:00
}
}
2008-06-17 05:39:46 +00:00
2009-07-08 12:01:06 +00:00
function cronSavePref ()
2008-06-17 05:39:46 +00:00
{
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-10-23 14:16:08 +00:00
$activeCount = 0 ;
2009-10-23 09:08:15 +00:00
2009-07-08 12:01:06 +00:00
foreach ( $_POST [ 'cron' ] as $key => $val )
2008-06-17 05:39:46 +00:00
{
2009-07-08 12:01:06 +00:00
if ( ! $val [ 'active' ])
{
$val [ 'active' ] = 0 ;
}
2009-10-23 14:16:08 +00:00
else
{
$activeCount ++ ;
}
2009-07-08 12:01:06 +00:00
$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-10-23 14:16:08 +00:00
$val [ 'path' ] = $class ;
2009-10-23 09:08:15 +00:00
2009-07-08 12:01:06 +00:00
$cron [ $key ] = $val ;
2008-06-17 05:39:46 +00:00
}
2009-07-08 12:01:06 +00:00
$pref [ 'e_cron_pref' ] = $cron ;
2009-10-23 09:08:15 +00:00
2009-10-23 14:16:08 +00:00
if ( ! vartrue ( $pref [ 'e_cron_pwd' ]) || varset ( $_POST [ 'generate_pwd' ]))
{
2009-10-24 10:15:05 +00:00
$pwd = $this -> setCronPwd ();
2009-10-23 14:16:08 +00:00
2009-10-24 10:15:05 +00:00
$setpwd_message = " Use the following Cron Command:<br /><b style='color:black'> " . $_SERVER [ 'DOCUMENT_ROOT' ] . e_HTTP . " cron.php " . $pwd . " </b><br />
2009-10-23 14:16:08 +00:00
This cron command is unique and will not be displayed again . Please copy and paste it into your webserver cron area to be run every minute of every day . " ;
$mes -> add ( $setpwd_message , E_MESSAGE_WARNING );
}
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-10-23 14:16:08 +00:00
$mes -> add ( $activeCount . " Cron(s) Active " , 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
}
2008-06-17 05:39:46 +00:00
}
2009-10-24 10:15:05 +00:00
function setCronPwd ()
{
global $pref ;
require_once ( e_HANDLER . 'user_handler.php' );
$userMethods = new UserHandler ;
$newpwd = $userMethods -> generateRandomString ( '*^*#.**^*' );
$newpwd = sha1 ( $newpwd . time ());
$pref [ 'e_cron_pwd' ] = $newpwd ;
return save_prefs ();
}
2009-07-08 12:01:06 +00:00
// --------------------------------------------------------------------------
function cronRenderPrefs ()
{
global $frm , $ns ;
2008-06-17 05:39:46 +00:00
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 >
2008-06-17 05:39:46 +00:00
2009-10-23 14:16:08 +00:00
2008-06-17 05:39:46 +00:00
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' );
2009-10-23 14:16:08 +00:00
2009-07-08 12:01:06 +00:00
$text .= " </td>
</ tr >
</ table >
</ form >
</ div > " ;
2008-06-17 05:39:46 +00:00
2009-07-08 12:01:06 +00:00
$ns -> tablerender ( LAN_PREFS , $text );
}
2008-06-17 05:39:46 +00:00
2009-07-08 12:01:06 +00:00
// ----------- Grab All e_cron parameters -----------------------------------
function cronRenderPage ()
2008-06-17 05:39:46 +00:00
{
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 ();
2008-06-17 05:39:46 +00:00
2009-10-23 09:08:15 +00:00
$core_cron = $this -> coreCrons ;
2009-10-23 14:16:08 +00:00
$new_cron = array ();
2009-07-08 12:01:06 +00:00
foreach ( $pref [ 'e_cron_list' ] as $key => $val )
2008-06-17 05:39:46 +00:00
{
2009-07-08 12:01:06 +00:00
$eplug_cron = array ();
if ( is_readable ( e_PLUGIN . $key . " /e_cron.php " ))
2008-06-17 05:39:46 +00:00
{
2009-10-23 14:16:08 +00:00
include_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
2008-06-17 05:39:46 +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-10-23 14:16:08 +00:00
// print_a($e_cron);
2009-10-23 09:08:15 +00:00
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 >
2009-09-10 12:49:47 +00:00
< 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 )
2008-06-17 05:39:46 +00:00
{
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 )
2008-06-17 05:39:46 +00:00
{
2009-07-08 12:01:06 +00:00
if ( $value == " " )
{
$sep [ $key ] = " * " ;
}
2008-06-17 05:39:46 +00:00
}
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' " ;
2009-10-23 14:16:08 +00:00
$minute = array ();
2009-07-08 12:01:06 +00:00
}
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' " ;
2009-10-23 14:16:08 +00:00
$hour = array ();
2009-07-08 12:01:06 +00:00
}
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 >
2009-09-10 12:49:47 +00:00
< 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 >
2009-09-10 12:49:47 +00:00
< 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' );
2009-10-23 14:16:08 +00:00
$text .= $frm -> checkbox_switch ( 'generate_pwd' , 1 , '' , 'Generate new cron command' );
2009-07-08 12:01:06 +00:00
$text .= " </div></td>
</ tr >
</ tbody >
</ table >
</ form >
</ div > " ;
2009-10-23 09:08:15 +00:00
$ns -> tablerender ( PAGE_NAME , $mes -> render () . $text );
2009-07-08 12:01:06 +00:00
}
2008-06-17 05:39:46 +00:00
2009-07-08 12:01:06 +00:00
function cronOptions ()
{
$e107 = & e107 :: getInstance ();
2008-06-17 05:39:46 +00:00
2009-07-08 12:01:06 +00:00
$var [ 'main' ][ 'text' ] = PAGE_NAME ;
$var [ 'main' ][ 'link' ] = e_SELF ;
2009-10-23 14:16:08 +00:00
/*
2009-07-08 12:01:06 +00:00
$var [ 'pref' ][ 'text' ] = LAN_PREFS ;
$var [ 'pref' ][ 'link' ] = e_SELF . " ?pref " ;
$var [ 'pref' ][ 'perm' ] = " N " ;
2009-10-23 14:16:08 +00:00
*/ $action = ( $this -> cronAction ) ? $this -> cronAction : " main " ;
2009-07-08 12:01:06 +00:00
e_admin_menu ( PAGE_NAME , $action , $var );
}
}
function cron_adminmenu ()
{
global $cron ;
$cron -> cronOptions ();
}
2008-06-17 05:39:46 +00:00
?>