2019-03-29 19:13:32 -05:00
< ? php
/*
* e107 website system
*
* Copyright ( C ) 2008 - 2013 e107 Inc ( e107 . org )
* Released under the terms and conditions of the
* GNU General Public License ( http :// www . gnu . org / licenses / gpl . txt )
*
* Administration Area - Admin Log
*
*/
/*
* Preferences :
* 'sys_log_perpage' - number of events per page
*
* 'user_audit_opts' - which user - related events to log
* 'user_audit_class' - user class whose actions can be logged
*
* 'roll_log_days' ( default 7 ) - number of days for which entries retained in rolling log
* 'roll_log_active' - set to '1' to enable
*
*/
2021-01-16 13:32:35 -08:00
require_once ( __DIR__ . '/../class2.php' );
2019-03-29 19:13:32 -05:00
if ( ! getperms ( 'S' ))
{
e107 :: redirect ( 'admin' );
exit ();
}
e107 :: coreLan ( 'admin_log' , true );
e107 :: coreLan ( 'log_messages' , true );
2020-12-05 14:13:18 -08:00
$logList = e107 :: pref ( 'core' , 'lan_log_list' );
if ( is_array ( $logList )) //... and for any plugins which support it
2019-03-29 19:13:32 -05:00
{
2020-12-05 14:13:18 -08:00
foreach ( $logList as $path => $file )
2019-03-29 19:13:32 -05:00
{
2020-03-03 13:11:48 -08:00
// $file = str_replace('--LAN--', e_LANGUAGE, $file);
2019-03-29 19:13:32 -05:00
//e107::lan($path,'log',true);
2020-03-03 13:11:48 -08:00
// e107::includeLan(e_PLUGIN.$path.'/languages/'.$file);
e107 :: includeLan ( e_PLUGIN . $path . '/languages/' . e_LANGUAGE . " _log.php " );
e107 :: includeLan ( e_PLUGIN . $path . '/languages/' . e_LANGUAGE . " / " . e_LANGUAGE . " _log.php " );
2019-03-29 19:13:32 -05:00
}
}
define ( 'AL_DATE_TIME_FORMAT' , 'y-m-d H:i:s' );
2020-12-31 09:06:20 -08:00
function loadEventTypes ( $table )
{
$sql = e107 :: getDb ();
$row = $sql -> retrieve ( " SELECT dblog_eventcode,dblog_title FROM # " . $table . " WHERE dblog_eventcode !='' AND dblog_title !='' GROUP BY dblog_eventcode " , true );
$eventTypes = array ();
foreach ( $row as $val )
{
$id = $val [ 'dblog_eventcode' ];
$def = strpos ( $val [ 'dblog_title' ], " LAN " ) !== false ? $id : $val [ 'dblog_title' ];
$eventTypes [ $id ] = str_replace ( ': [x]' , '' , deftrue ( $val [ 'dblog_title' ], $def ));
}
asort ( $eventTypes );
return $eventTypes ;
}
2019-03-29 19:13:32 -05:00
2021-01-16 13:32:35 -08:00
function time_box ( $boxname , $this_time , $day_count , $inc_tomorrow = FALSE , $all_mins = FALSE )
{ // Generates boxes for date and time for today and the preceding days
// Appends 'date', 'hours', 'mins' to the specified boxname
$all_time = getdate (); // Date/time now
$sel_time = getdate ( $this_time ); // Currently selected date/time
$sel_day = mktime ( 0 , 0 , 0 , $sel_time [ 'mon' ], $sel_time [ 'mday' ], $sel_time [ 'year' ]);
$today = mktime ( 0 , 0 , 0 , $all_time [ 'mon' ], $all_time [ 'mday' ] + ( $inc_tomorrow ? 1 : 0 ), $all_time [ 'year' ]);
// Start with day
$ret = " <select name=' { $boxname } date' class='tbox'> " ;
// Stick an extra day on the end, plus tomorrow if the flag set
for ( $i = ( $inc_tomorrow ? - 2 : - 1 ); $i <= $day_count ; $i ++ )
{
$day_string = date ( " D d M " , $today );
$sel = ( $today == $sel_day ) ? " selected='selected' " : " " ;
$ret .= " <option value=' { $today } ' { $sel } > { $day_string } </option> " ;
$today -= 86400 ; // Move to previous day
}
$ret .= " </select> " ;
// Hours
$ret .= " <select name=' { $boxname } hours' class='tbox select time-offset'> " ;
for ( $i = 0 ; $i < 24 ; $i ++ )
{
$sel = ( $sel_time [ 'hours' ] == $i ) ? " selected='selected' " : " " ;
$ret .= " <option value=' { $i } ' { $sel } > { $i } </option> " ;
}
$ret .= " </select> " ;
// Minutes
$ret .= " <select name=' { $boxname } mins' class='tbox select time-offset'> " ;
for ( $i = 0 ; $i < 60 ; $i += ( $all_mins ? 1 : 5 ))
{
$sel = ( $sel_time [ 'minutes' ] == $i ) ? " selected='selected' " : " " ;
$ret .= " <option value=' { $i } ' { $sel } > { $i } </option> " ;
}
$ret .= " </select> " ;
return $ret ;
}
2019-03-29 19:13:32 -05:00
class adminlog_admin extends e_admin_dispatcher
{
protected $modes = array (
'main' => array (
'controller' => 'admin_log_ui' ,
'path' => null ,
'ui' => 'admin_log_form_ui' ,
'uipath' => null
),
'audit' => array (
'controller' => 'audit_log_ui' ,
'path' => null ,
'ui' => 'admin_log_form_ui' ,
'uipath' => null
),
'rolling' => array (
'controller' => 'dblog_ui' ,
'path' => null ,
'ui' => 'admin_log_form_ui' ,
'uipath' => null
),
);
//$page_title = array('adminlog' => RL_LAN_030, 'auditlog' => RL_LAN_062, 'rolllog' => RL_LAN_002, 'downlog' => RL_LAN_067, 'detailed' => RL_LAN_094, 'online' => RL_LAN_120);
protected $adminMenu = array (
'main/list' => array ( 'caption' => RL_LAN_030 , 'perm' => '5' ),
'audit/list' => array ( 'caption' => RL_LAN_062 , 'perm' => '5' ),
'rolling/list' => array ( 'caption' => RL_LAN_002 , 'perm' => '5' ),
'divider/01' => array ( 'divider' => true ),
'main/prefs' => array ( 'caption' => LAN_PREFS , 'perm' => '5' ),
'main/maintenance' => array ( 'caption' => LAN_OPTIONS , 'perm' => '5' )
// 'main/custom' => array('caption'=> 'Custom Page', 'perm' => 'P')
);
protected $adminMenuAliases = array (
'main/edit' => 'main/list'
);
protected $adminMenuIcon = 'e-adminlogs-24' ;
protected $menuTitle = ADLAN_155 ;
2021-02-03 14:59:01 -08:00
2019-03-29 19:13:32 -05:00
}
class admin_log_ui extends e_admin_ui
{
protected $pluginTitle = ADLAN_155 ;
protected $pluginName = 'core' ;
protected $table = 'admin_log' ;
protected $pid = 'dblog_id' ;
protected $perPage = 10 ;
// protected $listQry = "SELECT f.*, u.* FROM #admin_log AS f LEFT JOIN #user AS u ON f.dblog_user_id = u.user_id "; // Should not be necessary.
protected $listQry = " SELECT SQL_CALC_FOUND_ROWS f.*, u.user_id, u.user_name FROM #admin_log AS f LEFT JOIN #user AS u ON f.dblog_user_id = u.user_id " ; // Should not be required but be auto-calculated.
protected $listOrder = 'f.dblog_id DESC' ;
protected $batchDelete = false ;
protected $batchDeleteLog = false ; //TODO - AdminUI option to disable logging of changes.
protected $fields = array (
// 'checkboxes' => array ( 'title' => '', 'type' => null, 'data' => null, 'nolist'=>true, 'width' => '5%', 'thclass' => 'center', 'forced' => '1', 'class' => 'center', 'toggle' => 'e-multiselect', ),
'dblog_id' => array ( 'title' => LAN_ID , 'data' => 'int' , 'width' => '5%' , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' , ),
'dblog_datestamp' => array ( 'title' => LAN_DATESTAMP , 'type' => 'datestamp' , 'data' => 'int' , 'width' => '12%' , 'filter' => true , 'help' => '' , 'readParms' => array ( 'mask' => 'dd MM yyyy hh:ii:ss' ), 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' , ),
// 'dblog_microtime' => array ( 'title' => 'Microtime', 'type' => 'method', 'data' => 'int', 'width' => 'auto', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'center', 'thclass' => 'center', ),
'dblog_type' => array ( 'title' => RL_LAN_032 , 'type' => 'method' , 'data' => 'int' , 'width' => '5%' , 'filter' => true , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'center' , 'thclass' => 'center' , ),
'dblog_ip' => array ( 'title' => LAN_IP , 'type' => 'ip' , 'data' => 'str' , 'width' => 'auto' , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' , ),
'dblog_user_id' => array ( 'title' => LAN_USER , 'type' => 'user' , 'data' => 'int' , 'width' => 'auto' , 'filter' => true , 'help' => '' , 'readParms' => 'link=1' , 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' , ),
'dblog_eventcode' => array ( 'title' => RL_LAN_023 , 'type' => 'method' , 'data' => 'str' , 'width' => 'auto' , 'filter' => true , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' , ),
'dblog_title' => array ( 'title' => LAN_TITLE , 'type' => 'method' , 'data' => 'str' , 'width' => 'auto' , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' , ),
'dblog_remarks' => array ( 'title' => RL_LAN_033 , 'type' => 'method' , 'data' => 'str' , 'width' => '35%' , 'filter' => true , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' , ),
'options' => array ( 'title' => LAN_OPTIONS , 'type' => null , 'nolist' => true , 'data' => null , 'width' => '10%' , 'thclass' => 'center last' , 'class' => 'center last' , 'forced' => '1' , ),
);
protected $fieldpref = array ( 'dblog_datestamp' , 'dblog_type' , 'dblog_eventcode' , 'dblog_user_id' , 'dblog_ip' , 'dblog_title' , 'dblog_remarks' );
//'adminlog' => array(RL_LAN_019, RL_LAN_032, RL_LAN_020, RL_LAN_104, LAN_USER, RL_LAN_023, LAN_TITLE, RL_LAN_033),
protected $prefs = array (
'sys_log_perpage' => array ( 'title' => RL_LAN_044 , 'type' => 'dropdown' , 'data' => 'int' , 'help' => RL_LAN_064 , 'writeParms' => '' ),
'user_audit_class' => array ( 'title' => RL_LAN_123 , 'type' => 'userclass' , 'data' => 'int' , 'help' => '' ),
'user_audit_opts' => array ( 'title' => RL_LAN_031 , 'type' => 'method' , 'data' => 'array' , 'help' => '' ),
'roll_log_active' => array ( 'title' => RL_LAN_008 , 'type' => 'boolean' , 'data' => 'int' , 'help' => '' ),
'roll_log_days' => array ( 'title' => RL_LAN_009 , 'type' => 'number' , 'data' => 'string' , 'help' => '' ),
// 'Delete admin log events older than ' => array('title'=> RL_LAN_045, 'type'=>'method', 'data' => 'string','help'=>'Help Text goes here'),
// 'Delete user audit trail log events older' => array('title'=> 'Delete user audit trail log events older', 'type'=>'method', 'data' => 'string','help'=>'Help Text goes here'),
);
public $eventTypes = array ();
// optional
public function init ()
{
$perPage = e107 :: getConfig () -> get ( 'sys_log_perpage' );
$this -> perPage = vartrue ( $perPage , 10 );
$this -> prefs [ 'sys_log_perpage' ][ 'writeParms' ] = array ( 10 => 10 , 15 => 15 , 20 => 20 , 30 => 30 , 40 => 40 , 50 => 50 );
2020-12-31 09:06:20 -08:00
$this -> eventTypes = loadEventTypes ( 'admin_log' );
2019-03-29 19:13:32 -05:00
if ( getperms ( '0' ))
{
$arr = array_reverse ( $this -> fields , true );
$arr [ 'checkboxes' ] = array ( 'title' => '' , 'type' => null , 'data' => null , 'width' => '5%' , 'thclass' => 'center' , 'forced' => '1' , 'class' => 'center' , 'toggle' => 'e-multiselect' );
$this -> fields = array_reverse ( $arr , true );
$this -> batchDelete = true ;
}
}
function gen_log_delete ( $selectname )
{
$values = array ( 360 , 180 , 90 , 60 , 30 , 21 , 20 , 14 , 10 , 7 , 6 , 5 , 4 , 3 , 2 , 1 );
return e107 :: getForm () -> select ( $selectname , $values , '' , 'useValues=1&size=small' );
}
function maintenancePage ()
{
if ( ! empty ( $_POST [ 'deleteoldadmin' ]) || ! empty ( $_POST [ 'deleteoldaudit' ]))
{
$this -> maintenanceProcess ();
}
$frm = e107 :: getForm ();
// Admin log maintenance
//==================
$text = "
< form method = 'post' action = '".e_SELF."?mode=main&action=maintenance' >
< fieldset id = 'core-admin-log-maintenance' >
< legend > " .RL_LAN_125. " </ legend >
< table class = 'table adminform' >
< colgroup >
< col class = 'col-label' />
< col class = 'col-control' />
</ colgroup >
< tbody >
< tr >
< td > " .RL_LAN_045. " </ td >
< td class = 'form-inline' > " . $this->gen_log_delete ('rolllog_clearadmin'). " " .RL_LAN_046. " " . $frm->admin_button ('deleteoldadmin', 'no-value', 'delete', RL_LAN_049). " </ td >
</ tr >
" ;
// User log maintenance
//====================
$text .= "
< tr >
< td > " .RL_LAN_066. " </ td >
< td class = 'form-inline' > " . $this->gen_log_delete ('rolllog_clearaudit'). " " .RL_LAN_046. " " . $frm->admin_button ('deleteoldaudit', 'no-value', 'delete', RL_LAN_049). " </ td >
</ tr >
</ tbody >
</ table >
</ fieldset >
</ form >
</ fieldset >
" ;
return $text ;
}
function maintenanceProcess ()
{
$mes = e107 :: getMessage ();
$ns = e107 :: getRender ();
2020-12-22 09:36:02 -08:00
$log = e107 :: getLog ();
2019-03-29 19:13:32 -05:00
$frm = e107 :: getForm ();
$sql = e107 :: getDb ();
2021-11-25 10:18:53 -08:00
$tp = e107 :: getParser ();
2019-03-29 19:13:32 -05:00
2021-01-16 13:32:35 -08:00
$back_count = 0 ;
$action = '' ;
2019-03-29 19:13:32 -05:00
// print_a($_POST);
if ( ! empty ( $_POST [ 'deleteoldadmin' ]) && isset ( $_POST [ 'rolllog_clearadmin' ]))
{
$back_count = intval ( $_POST [ 'rolllog_clearadmin' ]);
$_POST [ 'backdeltype' ] = 'confdel' ;
$action = 'backdel' ;
}
elseif ( ! empty ( $_POST [ 'deleteoldaudit' ]) && isset ( $_POST [ 'rolllog_clearaudit' ]))
{
$back_count = intval ( $_POST [ 'rolllog_clearaudit' ]);
$action = 'backdel' ;
$_POST [ 'backdeltype' ] = 'auditdel' ;
}
/*
if ( isset ( $back_count ))
{
if (( $back_count >= 1 ) && ( $back_count <= 90 ))
{
$temp_date = getdate ();
$old_date = intval ( mktime ( 0 , 0 , 0 , $temp_date [ 'mon' ], $temp_date [ 'mday' ] - $back_count , $temp_date [ 'year' ]));
$old_string = strftime ( " %d %B %Y " , $old_date );
// $message = "Back delete ".$back_count." days. Oldest date = ".$old_string;
$action = $next_action ;
$qs [ 1 ] = $old_date ;
$qs [ 2 ] = $back_count ;
}
else
{
$mes -> addWarning ( RL_LAN_050 );
}
}
*/
$old_date = strtotime ( $back_count . ' days ago' );
// Actually delete back events - admin or user audit log
if (( $action == " backdel " ) && isset ( $_POST [ 'backdeltype' ]))
{
// $old_date = intval($qs[1]);
2021-11-25 10:18:53 -08:00
$old_string = $tp -> toDate ( $old_date , " %d %B %Y " );
2019-03-29 19:13:32 -05:00
$qry = " dblog_datestamp < " . $old_date ; // Same field for both logs
switch ( $_POST [ 'backdeltype' ])
{
case 'confdel' :
$db_table = 'admin_log' ;
$db_name = RL_LAN_052 ;
$db_msg = " ADLOG_02 " ;
break ;
case 'auditdel' :
$db_table = 'audit_log' ;
$db_name = RL_LAN_053 ;
$db_msg = " ADLOG_03 " ;
break ;
default :
exit (); // Someone fooling around!
}
e107 :: getMessage () -> addDebug ( " Back delete, <br />oldest date = { $old_string } <br />Query = { $qry } " );
if ( $del_count = $sql -> delete ( $db_table , $qry ))
{
// Add in a log event
$message = $db_name . str_replace ( array ( '[x]' , '[y]' ), array ( $old_string , $del_count ), RL_LAN_057 );
$mes -> addSuccess ( $message );
2020-12-18 09:39:02 -08:00
$log -> add ( $db_msg , " db_Delete - earlier than { $old_string } (past { $back_count } days)[!br!] " . $message . '[!br!]' . $db_table . ' ' . $qry , E_LOG_INFORMATIVE , '' );
2019-03-29 19:13:32 -05:00
}
else
{
2022-07-28 23:32:14 +02:00
$message = RL_LAN_054 ;
$lastErrorText = $sql -> getLastErrorText ();
if ( $lastErrorText )
{
$message .= " <br /> $lastErrorText " ;
}
$mes -> addWarning ( $message );
2019-03-29 19:13:32 -05:00
}
}
// Prompt to delete back events
/*
if (( $action == " confdel " ) || ( $action == " auditdel " ))
{
$old_string = strftime ( " %d %B %Y " , $qs [ 1 ]);
$text = "
< form method = 'post' action = '".e_SELF."?backdel.{$qs[1]}.{$qs[2]}' >
< fieldset id = 'core-admin-log-confirm-delete' >
< legend class = 'e-hideme' > " .LAN_CONFDELETE. " </ legend >
< table class = 'table adminform' >
< tr >
< td class = 'center' >
< strong > " .(( $action == " confdel " ) ? RL_LAN_047 : RL_LAN_065). $old_string . " </ strong >
</ td >
</ tr >
</ table >
< div class = 'buttons-bar center' >
< input type = 'hidden' name = 'backdeltype' value = '{$action}' />
" . $frm->admin_button ('confirmdeleteold', 'no-value', 'delete', RL_LAN_049). "
" . $frm->admin_button ('confirmcancelold', 'no-value', 'delete', LAN_CANCEL). "
</ div >
</ fieldset >
</ form >
" ;
$ns -> tablerender ( LAN_CONFDELETE , $text );
}
*/
}
}
class admin_log_form_ui extends e_admin_form_ui
{
function sys_log_perpage ( $curVal , $mode )
{
$frm = e107 :: getForm ();
switch ( $mode )
{
case 'write' : // Edit Page
return $frm -> text ( 'sys_log_perpage' , $curVal );
break ;
}
}
function user_audit_opts ( $curVal , $mode )
{
$frm = e107 :: getForm ();
// User Audit log options (for info)
//=======================
// define('USER_AUDIT_SIGNUP',11); // User signed up
// define('USER_AUDIT_EMAILACK',12); // User responded to registration email
// define('USER_AUDIT_LOGIN',13); // User logged in
// define('USER_AUDIT_LOGOUT',14); // User logged out
// define('USER_AUDIT_NEW_DN',15); // User changed display name
// define('USER_AUDIT_NEW_PW',16); // User changed password
// define('USER_AUDIT_NEW_EML',17); // User changed email
// define('USER_AUDIT_NEW_SET',19); // User changed other settings (intentional gap in numbering)
// define('USER_AUDIT_ADD_ADMIN', 20); // User added by admin
// define('USER_AUDIT_MAIL_BOUNCE', 21); // User mail bounce
// define('USER_AUDIT_BANNED', 22); // User banned
// define('USER_AUDIT_BOUNCE_RESET', 23); // User bounce reset
// define('USER_AUDIT_TEMP_ACCOUNT', 24); // User temporary account
$audit_checkboxes = array ( USER_AUDIT_SIGNUP => RL_LAN_071 , USER_AUDIT_EMAILACK => RL_LAN_072 ,
USER_AUDIT_LOGIN => LAN_AUDIT_LOG_013 , USER_AUDIT_LOGOUT => LAN_AUDIT_LOG_014 , // Logout is lumped in with login
USER_AUDIT_NEW_DN => RL_LAN_075 , USER_AUDIT_NEW_PW => RL_LAN_076 , USER_AUDIT_PW_RES => RL_LAN_078 , USER_AUDIT_NEW_EML => RL_LAN_077 , USER_AUDIT_NEW_SET => RL_LAN_079 ,
USER_AUDIT_ADD_ADMIN => RL_LAN_080 , USER_AUDIT_MAIL_BOUNCE => RL_LAN_081 , USER_AUDIT_BANNED => RL_LAN_082 , USER_AUDIT_BOUNCE_RESET => RL_LAN_083 ,
USER_AUDIT_TEMP_ACCOUNT => RL_LAN_084 );
$userAuditOpts = e107 :: getConfig () -> get ( 'user_audit_opts' );
$text = " " ;
foreach ( $audit_checkboxes as $k => $t )
{
$checked = isset ( $userAuditOpts [ $k ]) ? true : false ;
$text .= $frm -> checkbox ( 'user_audit_opts[' . $k . ']' , $k , $checked , array ( 'label' => $t ));
}
$text .= $frm -> admin_button ( 'check_all' , 'jstarget:user_audit_opts' , 'checkall' , LAN_CHECKALL ) . $frm -> admin_button ( 'uncheck_all' , 'jstarget:user_audit_opts' , 'checkall' , LAN_UNCHECKALL );
return $text ;
}
// Custom Method/Function
/*
function dblog_datestamp ( $curVal , $mode )
{
$frm = e107 :: getForm ();
switch ( $mode )
{
case 'read' : // List Page
return date ( AL_DATE_TIME_FORMAT , $curVal );
break ;
case 'write' : // Edit Page
return $frm -> text ( 'dblog_datestamp' , $curVal );
break ;
case 'filter' :
case 'batch' :
return $array ;
break ;
}
}
*/
// Custom Method/Function
function dblog_microtime ( $curVal , $mode )
{
$frm = e107 :: getForm ();
switch ( $mode )
{
case 'read' : // List Page
return date ( " H:i:s " , intval ( $curVal ) % 86400 ) . '.' . str_pad ( 100000 * round ( $curVal - floor ( $curVal ), 6 ), 6 , '0' );
break ;
case 'write' : // Edit Page
return $frm -> text ( 'dblog_microtime' , $curVal );
break ;
case 'filter' :
case 'batch' :
2020-12-05 14:13:18 -08:00
// return $array;
2019-03-29 19:13:32 -05:00
break ;
}
}
// Custom Method/Function
function dblog_type ( $curVal , $mode )
{
$tp = e107 :: getParser ();
/*
define ( " E_LOG_INFORMATIVE " , 0 ); // Minimal Log Level, including really minor stuff
define ( " E_LOG_NOTICE " , 1 ); // More important than informative, but less important than notice
define ( " E_LOG_WARNING " , 2 ); // Not anything serious, but important information
define ( " E_LOG_FATAL " , 3 ); // An event so bad your site ceased execution.
define ( " E_LOG_PLUGIN " , 4 ); // Plugin information
*/
$array = array (
' ' , // Minimal Log Level, including really minor stuff
'<i class="S16 e-info-16 e-tip" title="Notice"></i>' , //FIXME - should be the blue icon. // More important than informative, but less important than notice
'<i class="S16 e-false-16 e-tip" title="Important"></i>' , // Not anything serious, but important information
'<i class="S16 e-warning-16 e-tip" title="Warning"></i>' , // An event so bad your site ceased execution.
' ' // Plugin information - Deprecated - Leave empty.
);
$array [ 1 ] = $tp -> toGlyph ( 'fa-question-circle' );
$array [ 2 ] = $tp -> toGlyph ( 'fa-exclamation-circle' );
$array [ 3 ] = $tp -> toGlyph ( 'fa-warning' );
switch ( $mode )
{
case 'read' : // List Page
return varset ( $array [ $curVal ], $curVal );
break ;
case 'filter' :
case 'batch' :
return array ( RL_LAN_132 , RL_LAN_133 , RL_LAN_134 , RL_LAN_135 );
break ;
}
}
// Custom Method/Function
function dblog_title ( $curVal , $mode )
{
$tp = e107 :: getParser ();
switch ( $mode )
{
case 'read' : // List Page
$val = trim ( $curVal );
if ( defined ( $val ))
{
$val = constant ( $val );
}
if ( strpos ( $val , '[x]' ) !== false )
{
$remark = $this -> getController () -> getListModel () -> get ( 'dblog_remarks' );
preg_match ( " / \ [table \ ] \ s=> \ s([ \ w]*)/i " , $remark , $match );
if ( ! empty ( $match [ 1 ]))
{
$val = $tp -> lanVars ( $val , '<b>' . $match [ 1 ] . '</b>' );
}
else
{
preg_match ( " / \ [!br! \ ]TABLE: ([ \ w]*)/i " , $remark , $m );
if ( ! empty ( $m [ 1 ]))
{
$val = $tp -> lanVars ( $val , '<b>' . $m [ 1 ] . '</b>' );
}
}
}
return $val ;
break ;
case 'filter' :
case 'batch' :
return null ;
break ;
}
}
function dblog_eventcode ( $curVal , $mode )
{
$array = $this -> getController () -> eventTypes ;
switch ( $mode )
{
case 'read' : // List Page
return $curVal ;
break ;
case 'filter' :
case 'batch' :
return $array ;
break ;
}
}
// Custom Method/Function
function dblog_remarks ( $curVal , $mode )
{
$frm = e107 :: getForm ();
$tp = e107 :: getParser ();
switch ( $mode )
{
case 'read' : // List Page
2020-12-18 13:07:45 -08:00
$text = preg_replace_callback ( " # \ [!( \ w+?)(=.+?)?!]# " , 'log_process' , $curVal );
2019-03-29 19:13:32 -05:00
$text = $tp -> toHTML ( $text , false , 'E_BODY' );
if ( strpos ( $text , 'Array' ) !== false || strlen ( $text ) > 300 )
{
$id = $this -> getController () -> getListModel () -> get ( 'dblog_id' );
$ret = " <a class='e-expandit' href='#rem- " . $id . " '> " . RL_LAN_087 . " </a> " ;
$ret .= " <div style='display:none' id='rem- " . $id . " '> " ;
$text = str_replace ( " <br /> " , " \n " , $text );
$text = str_replace ( " \ " , " / " , $text );
2020-12-20 11:50:10 -08:00
if ( strpos ( $text , '\n' ) === 0 ) // cleanup (not sure of the cause)
2019-03-29 19:13:32 -05:00
{
$text = substr ( $text , 2 );
}
if ( substr ( $text , - 2 ) == '\n' ) // cleanup (not sure of the cause)
{
$text = substr ( $text , 0 , - 2 );
}
$text = print_a ( $text , true );
$ret .= $text ;
$ret .= " </div> " ;
return $ret ;
}
return $text ;
break ;
case 'filter' :
case 'batch' :
2020-12-05 14:13:18 -08:00
// return $array;
2019-03-29 19:13:32 -05:00
break ;
}
}
// Custom Method/Function
function dblog_caller ( $curVal , $mode )
{
switch ( $mode )
{
case 'read' : // List Page
$val = $curVal ;
if (( strpos ( $val , '|' ) !== FALSE ) && ( strpos ( $val , '@' ) !== FALSE ))
{
list ( $file , $rest ) = explode ( '|' , $val );
list ( $routine , $rest ) = explode ( '@' , $rest );
$val = $file . '<br />Function: ' . $routine . '<br />Line: ' . $rest ;
}
return $val ;
break ;
case 'filter' :
case 'batch' :
2020-12-05 14:13:18 -08:00
// return $array;
2019-03-29 19:13:32 -05:00
break ;
}
}
}
class audit_log_ui extends e_admin_ui
{
protected $pluginTitle = ADLAN_155 ;
2021-02-03 14:59:01 -08:00
protected $pluginName = 'core' ;
2019-03-29 19:13:32 -05:00
protected $table = 'audit_log' ;
protected $pid = 'dblog_id' ;
protected $perPage = 10 ;
protected $listOrder = 'dblog_id DESC' ;
protected $batchDelete = true ;
protected $fields = array (
'checkboxes' => array ( 'title' => '' , 'type' => null , 'data' => null , 'width' => '5%' , 'thclass' => 'center' , 'forced' => '1' , 'class' => 'center' , 'toggle' => 'e-multiselect' , ),
'dblog_id' => array ( 'title' => LAN_ID , 'data' => 'int' , 'width' => '5%' , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' , ),
'dblog_datestamp' => array ( 'title' => LAN_DATESTAMP , 'type' => 'datestamp' , 'data' => 'int' , 'width' => 'auto' , 'filter' => true , 'help' => '' , 'readParms' => array ( 'mask' => 'dd MM yyyy hh:ii:ss' ), 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' , ),
'dblog_microtime' => array ( 'title' => 'Microtime' , 'type' => 'text' , 'data' => 'int' , 'width' => 'auto' , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'center' , 'thclass' => 'center' , ),
'dblog_eventcode' => array ( 'title' => 'Eventcode' , 'type' => 'method' , 'data' => 'str' , 'width' => 'auto' , 'filter' => true , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'center' , 'thclass' => 'center' , ),
2022-05-10 10:21:05 -07:00
'dblog_user_id' => array ( 'title' => LAN_USER , 'type' => 'user' , 'data' => 'int' , 'width' => '5%' , 'help' => '' , 'readParms' => 'link=1' , 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' , ),
// 'dblog_user_name' => array ( 'title' => LAN_USER, 'type' => 'text', 'data' => 'str', 'width' => 'auto', 'filter' => true, 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
2019-03-29 19:13:32 -05:00
'dblog_ip' => array ( 'title' => LAN_IP , 'type' => 'ip' , 'data' => 'str' , 'width' => 'auto' , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' , ),
'dblog_title' => array ( 'title' => LAN_TITLE , 'type' => 'method' , 'data' => 'str' , 'width' => 'auto' , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' , ),
'dblog_remarks' => array ( 'title' => 'Remarks' , 'type' => 'method' , 'data' => 'str' , 'width' => '30%' , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' , ),
'options' => array ( 'title' => LAN_OPTIONS , 'type' => null , 'nolist' => true , 'data' => null , 'width' => '10%' , 'thclass' => 'center last' , 'class' => 'center last' , 'forced' => '1' , ),
);
protected $fieldpref = array ( 'dblog_id' , 'dblog_datestamp' , 'dblog_microtime' , 'dblog_eventcode' , 'dblog_user_id' , 'dblog_user_name' , 'dblog_ip' , 'dblog_title' , 'dblog_remarks' );
2020-12-31 09:06:20 -08:00
public $eventTypes = array ();
2019-03-29 19:13:32 -05:00
// optional
public function init ()
{
2020-12-31 09:06:20 -08:00
$perPage = e107 :: getConfig () -> get ( 'sys_log_perpage' );
2019-03-29 19:13:32 -05:00
$this -> perPage = vartrue ( $perPage , 10 );
2020-12-31 09:06:20 -08:00
$this -> eventTypes = loadEventTypes ( 'audit_log' );
2019-03-29 19:13:32 -05:00
}
/*
public function customPage ()
{
$ns = e107 :: getRender ();
$text = 'Hello World!' ;
$ns -> tablerender ( 'Hello' , $text );
}
*/
}
class dblog_ui extends e_admin_ui
{
protected $pluginTitle = ADLAN_155 ;
2021-02-03 14:59:01 -08:00
protected $pluginName = 'core' ;
2019-03-29 19:13:32 -05:00
protected $table = 'dblog' ;
protected $pid = 'dblog_id' ;
protected $perPage = 15 ;
protected $listOrder = 'dblog_id desc' ;
protected $fields = array (
'checkboxes' => array ( 'title' => '' , 'type' => null , 'data' => null , 'width' => '5%' , 'thclass' => 'center' , 'forced' => '1' , 'class' => 'center' , 'toggle' => 'e-multiselect' , ),
// 'dblog_id' => array ( 'title' => LAN_ID, 'data' => 'int', 'width' => '5%', 'help' => '', 'readParms' => '', 'writeParms' => '', 'class' => 'left', 'thclass' => 'left', ),
'dblog_datestamp' => array ( 'title' => LAN_DATESTAMP , 'type' => 'datestamp' , 'data' => 'int' , 'width' => 'auto' , 'filter' => true , 'help' => '' , 'readParms' => array ( 'mask' => 'dd MM yyyy hh:ii:ss' ), 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' , ),
'dblog_microtime' => array ( 'title' => 'Microtime' , 'type' => 'method' , 'data' => 'int' , 'width' => 'auto' , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'center' , 'thclass' => 'center' , ),
'dblog_type' => array ( 'title' => LAN_TYPE , 'type' => 'method' , 'data' => 'int' , 'width' => 'auto' , 'batch' => true , 'filter' => true , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' , ),
'dblog_eventcode' => array ( 'title' => 'Eventcode' , 'type' => 'method' , 'data' => 'str' , 'width' => 'auto' , 'filter' => true , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'center' , 'thclass' => 'center' , ),
'dblog_user_id' => array ( 'title' => LAN_ID , 'type' => 'user' , 'data' => 'int' , 'width' => '5%' , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' , ),
'dblog_user_name' => array ( 'title' => LAN_USER , 'type' => 'text' , 'data' => 'str' , 'width' => 'auto' , 'filter' => true , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' , ),
'dblog_ip' => array ( 'title' => LAN_IP , 'type' => 'ip' , 'data' => 'str' , 'width' => 'auto' , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' , ),
'dblog_caller' => array ( 'title' => 'Caller' , 'type' => 'method' , 'data' => 'str' , 'width' => 'auto' , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'center' , 'thclass' => 'center' , ),
'dblog_title' => array ( 'title' => LAN_TITLE , 'type' => 'method' , 'data' => 'str' , 'width' => 'auto' , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' , ),
'dblog_remarks' => array ( 'title' => 'Remarks' , 'type' => 'method' , 'data' => 'str' , 'width' => '30%' , 'help' => '' , 'readParms' => '' , 'writeParms' => '' , 'class' => 'left' , 'thclass' => 'left' , ),
'options' => array ( 'title' => LAN_OPTIONS , 'type' => null , 'nolist' => true , 'data' => null , 'width' => '10%' , 'thclass' => 'center last' , 'class' => 'center last' , 'forced' => '1' , ),
);
protected $fieldpref = array ( 'dblog_id' , 'dblog_datestamp' , 'dblog_microtime' , 'dblog_type' , 'dblog_eventcode' , 'dblog_user_id' , 'dblog_user_name' , 'dblog_ip' , 'dblog_caller' , 'dblog_title' , 'dblog_remarks' );
2020-12-31 09:06:20 -08:00
public $eventTypes = array ();
2019-03-29 19:13:32 -05:00
// optional
public function init ()
{
2020-12-31 09:06:20 -08:00
$perPage = e107 :: getConfig () -> get ( 'sys_log_perpage' );
$this -> perPage = vartrue ( $perPage , 10 );
$this -> eventTypes = loadEventTypes ( 'dblog' );
2019-03-29 19:13:32 -05:00
}
}
// Routine to handle the simple bbcode-like codes for log body text
function log_process ( $matches )
{
switch ( $matches [ 1 ])
{
case 'br' :
return '<br />' ;
case 'link' :
$temp = substr ( $matches [ 2 ], 1 );
return " <a href=' { $temp } '> { $temp } </a> " ;
case 'test' :
return '----TEST----' ;
default :
return $matches [ 0 ]; // No change
}
}
new adminlog_admin ();
require_once ( e_ADMIN . " auth.php " );
e107 :: getAdminUI () -> runPage ();
require_once ( e_ADMIN . " footer.php " );