register_plugin( 'audit-trail', __FILE__);
$this->add_action( 'admin_menu' );
$this->add_action( 'activate_audit-trail/audit-trail.php', 'activate' );
$this->add_action( 'admin_head', 'wp_print_styles' );
$this->add_action( 'admin_print_styles', 'wp_print_styles' );
// $this->add_filter( 'contextual_help', 'contextual_help', 10, 2 );
$this->add_action( 'admin_footer' );
// Ajax functions
if ( defined( 'DOING_AJAX' ) ) {
include_once dirname( __FILE__ ).'/ajax.php';
$this->ajax = new AuditAjax();
}
$this->register_plugin_settings( __FILE__ );
}
// Add ourself to the Audit Trail functions
$this->auditor = new AT_Auditor;
$this->add_action( 'plugins_loaded' );
}
function contextual_help($help, $screen) {
if ( $screen == 'settings_page_audittrail' ) {
$help .= '
' . __('Audit Trail Help', 'audit-trail' ) . '
';
}
return $help;
}
function plugin_settings( $links) {
$settings_link = ''.__('Trail', 'audit-trail' ).'';
array_unshift( $links, $settings_link );
return $links;
}
/**
* After all the plugins have loaded this starts listening for all registered filters/actions
*
* @return void
**/
function plugins_loaded() {
$methods = get_option( 'audit_methods' );
if ( !empty( $methods) && is_array( $methods ) ) {
foreach( $methods AS $name)
do_action( 'audit_listen', $name);
}
}
/**
* Creates the database and upgrades any existing data
*
* @return void
**/
function activate() {
global $wpdb;
if ( get_option( 'audit_trail' ) == '0.1' || get_option( 'audit_trail' ) == 'true' )
$wpdb->query( "DROP TABLE {$wpdb->prefix}audit_trail");
if ( get_option( 'audit_trail' ) != '0.2' ) {
$wpdb->query( "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}audit_trail`(
`id` int(11) NOT NULL auto_increment,
`operation` varchar(40) NOT NULL default '',
`user_id` int(11) NOT NULL,
`ip` int(11) unsigned NOT NULL default '0',
`happened_at` datetime NOT NULL,
`item_id` int(11) default NULL,
`data` longtext,
`title` varchar(100) default NULL,
PRIMARY KEY ( `id`)
)");
}
if ( get_option( 'audit_trail' ) != '0.3' )
$wpdb->query( "ALTER TABLE `{$wpdb->prefix}audit_trail` CHANGE `ip` `ip` int(11) UNSIGNED NOT NULL DEFAULT '0'");
update_option( 'audit_trail', AUDIT_TRAIL_VERSION);
}
function is_25() {
global $wp_version;
if ( version_compare( '2.5', $wp_version) <= 0)
return true;
return false;
}
/**
* Inject Audit Trail into the menu
*
* @return void
**/
function admin_menu() {
if ( current_user_can( 'edit_plugins' ) || current_user_can( 'audit_trail' ) )
add_management_page( __("Audit Trail",'audit-trail' ), __("Audit Trail",'audit-trail' ), "publish_posts", basename( __FILE__), array( $this, "admin_screen") );
}
/**
* Inserts the edit box into the edit post/page area
*
* @return void
**/
function edit_box() {
global $post;
$this->render_admin( 'edit_box', array( 'trail' => AT_Audit::get_by_post( $post->ID) ));
}
function edit_box_advanced() {
global $post;
$this->render_admin( 'edit_box_25', array( 'trail' => AT_Audit::get_by_post( $post->ID) ));
}
function submenu( $inwrap = false) {
// Decide what to do
$sub = isset( $_GET['sub']) ? $_GET['sub'] : '';
$url = explode( '&', $_SERVER['REQUEST_URI']);
$url = $url[0];
if ( !$this->is_25() && $inwrap == false)
$this->render_admin( 'submenu', array( 'url' => $url, 'sub' => $sub, 'class' => 'id="subsubmenu"' ) );
else if ( $this->is_25() && $inwrap == true)
$this->render_admin( 'submenu', array( 'url' => $url, 'sub' => $sub, 'class' => 'class="subsubsub"', 'trail' => ' | ' ) );
return $sub;
}
/**
* Displays the admin screen
*
* @return void
**/
function admin_screen() {
if ( !current_user_can( 'edit_plugins' ) && !current_user_can( 'audit_trail' ) )
return;
// Decide what to do
$sub = $this->submenu();
AT_Audit::expire( get_option( 'audit_expiry' ) === false ? 30 : get_option( 'audit_expiry' ) );
if ( $sub == '' )
$this->screen_trail();
else if ( $sub == 'options' )
$this->screen_options();
else if ( $sub == 'support' )
$this->render_admin( 'support' );
}
/**
* Displays the audit trail log
*
* @return void
**/
function screen_trail() {
if ( isset( $_POST['item'] ) && isset( $_POST['action2'] ) && $_POST['action2'] == 'delete' ) {
foreach( $_POST['item'] AS $id ) {
// AT_Audit::delete( intval( $id ) );
}
}
$pager = new AT_Pager( $_REQUEST, $_SERVER['REQUEST_URI'], 'happened_at', 'DESC' );
if ( isset( $_REQUEST['perpage'] ) && in_array( $_REQUEST['perpage'], array( 10, 25, 50, 100, 250 ) ) )
$pager->per_page = intval( $_REQUEST['perpage'] );
$this->render_admin( 'trail', array( 'trail' => AT_Audit::get_all( $pager), 'pager' => $pager) );
}
/**
* Display audit trail options
*
* @return void
**/
function screen_options() {
if ( isset( $_POST['save']) && check_admin_referer( 'audittrail-update_options' ) ) {
update_option( 'audit_methods', stripslashes_deep( $_POST['methods'] ) );
update_option( 'audit_expiry', intval( $_POST['expiry']) );
update_option( 'audit_post', isset( $_POST['post']) ? true : false);
update_option( 'audit_post_order', isset( $_POST['post_order']) ? true : false);
update_option( 'audit_version', isset( $_POST['version']) ? 'true' : 'false' );
update_option( 'audit_ignore', preg_replace( '/[^0-9,]/', '', $_POST['ignore_users']) );
update_option( 'audit_support', isset( $_POST['support'] ) ? true : false );
$this->render_message( __( 'Options have been updated', 'audit-trail' ) );
}
$current = get_option( 'audit_methods' );
if ( !is_array( $current) )
$current = array();
$methods = apply_filters( 'audit_collect', array() );
if ( is_array( $methods) )
ksort( $methods);
$support = get_option( 'audit_support' );
$expiry = get_option( 'audit_expiry' );
if ( $expiry === false)
$expiry = 30;
$this->render_admin( 'options', array( 'methods' => $methods, 'current' => $current, 'support' => $support, 'expiry' => $expiry, 'post' => get_option( 'audit_post' ), 'post_order' => get_option( 'audit_post_order' ), 'version' => get_option( 'audit_version' ) == 'false' ? false : true, 'ignore_users' => get_option( 'audit_ignore' ) ));
}
function wp_print_styles() {
if ( ( isset( $_GET['page']) && $_GET['page'] == 'audit-trail.php' ) ) {
echo '';
if ( !function_exists( 'wp_enqueue_style' ) )
echo '';
}
}
function locales() {
$locales = array();
$readme = @file_get_contents( dirname( __FILE__ ).'/readme.txt' );
if ( $readme ) {
if ( preg_match_all( '/^\*( .*?) by \[(.*?)\]\((.*?)\)/m', $readme, $matches ) ) {
foreach( $matches[1] AS $pos => $match ) {
$locales[$match] = ''.$matches[2][$pos].'';
}
}
}
ksort( $locales );
return $locales;
}
function admin_footer() {
if ( isset($_GET['page']) && $_GET['page'] == basename( __FILE__ ) ) {
$support = get_option( 'audit_support' );
if ( $support == false ) {
?>