__('Element', 'advanced-database-cleaner'), //singular name of the listed records 'plural' => __('Elements', 'advanced-database-cleaner'), //plural name of the listed records 'ajax' => false //does this table support ajax? )); $this->aDBc_prepare_elements_to_clean(); $this->aDBc_print_page_content(); } /** Prepare elements to display */ function aDBc_prepare_elements_to_clean(){ // Test if user wants to delete a scheduled task if(isset($_POST['aDBc_delete_schedule'])){ //Quick nonce security check! if(!check_admin_referer('delete_cleanup_schedule_nonce', 'delete_cleanup_schedule_nonce')) return; //get out if we didn't click the delete link // We delete the schedule $aDBc_sanitized_schedule_name = sanitize_html_class($_POST['aDBc_delete_schedule']); wp_clear_scheduled_hook('aDBc_clean_scheduler', array($aDBc_sanitized_schedule_name)); // We delete the item from database $aDBc_schedules = get_option('aDBc_clean_schedule'); unset($aDBc_schedules[$aDBc_sanitized_schedule_name]); update_option('aDBc_clean_schedule', $aDBc_schedules, "no"); $this->aDBc_message = __('The clean-up schedule deleted successfully!', 'advanced-database-cleaner'); } // Test if user wants to edit keep_last column for an item if(isset($_POST['aDBc_keep_input'])){ // Security check - verify nonce if(!check_admin_referer('aDBc_keep_last_nonce', 'aDBc_keep_last_nonce')) return; //get out if nonce verification fails $sanitized_keep_input = sanitize_html_class($_POST['aDBc_keep_input']); $sanitized_item_keep_to_edit = sanitize_html_class($_POST['aDBc_item_keep_to_edit']); $settings = get_option('aDBc_settings'); if(empty($settings['keep_last'])){ $keep_value = array($sanitized_item_keep_to_edit => intval($sanitized_keep_input)); }else{ $keep_value = $settings['keep_last']; $keep_value[$sanitized_item_keep_to_edit] = intval($sanitized_keep_input); } $settings['keep_last'] = $keep_value; update_option('aDBc_settings', $settings, "no"); // Test if the items belongs to a scheduled task. If so, show msg differently $aDBc_schedules = get_option('aDBc_clean_schedule'); $aDBc_schedules = is_array($aDBc_schedules) ? $aDBc_schedules : array(); $msg_keep_last = __("The 'keep last' value saved successfully!", "advanced-database-cleaner"); foreach($aDBc_schedules as $hook_name => $hook_params){ $lits_of_elements = $hook_params['elements_to_clean']; if(in_array($sanitized_item_keep_to_edit, $lits_of_elements)){ $msg_keep_last = __("The 'keep last' value saved successfully!", "advanced-database-cleaner") . " " . __("Please keep in mind that this will change the value of 'keep last' of your corresponding scheduled tasks as well!", "advanced-database-cleaner") . ""; break; } } $this->aDBc_message = $msg_keep_last; } // Process bulk action if any before preparing elements to clean $this->process_bulk_action(); // Get all unused elements $aDBc_unused_elements = aDBc_count_all_elements_to_clean(); $aDBc_new_URI = $_SERVER['REQUEST_URI']; // Get settings from DB $settings = get_option('aDBc_settings'); $aDBc_schedules = get_option('aDBc_clean_schedule'); $aDBc_schedules = is_array($aDBc_schedules) ? $aDBc_schedules : array(); foreach($aDBc_unused_elements as $element_type => $element_info){ // Count total unused elements $this->aDBc_total_elements_to_clean += $element_info['count']; // If the item is scheduled, show green image, otherwise show grey one. Select also the text to show next green image $scheduled_img_name = "grey_clock.svg"; $item_scheduled_in = ""; foreach($aDBc_schedules as $hook_name => $hook_params){ $lits_of_elements = $hook_params['elements_to_clean']; if(in_array ($element_type, $lits_of_elements)){ $scheduled_img_name = "green_clock.svg"; $item_scheduled_in .= "
" . $hook_name . "
"; } } if(empty($item_scheduled_in)){ $aDBc_scheduled = "-"; }else{ $aDBc_scheduled = " -" . __('Scheduled in:','advanced-database-cleaner') . $item_scheduled_in . ""; } if($element_info['count'] > 0){ $color = "red"; $aDBc_count = "" . $element_info['count'] . ""; $aDBc_new_URI = add_query_arg('aDBc_view', $element_type, $aDBc_new_URI); $aDBc_see = "view"; }else{ $aDBc_count = "0"; $aDBc_see = "-"; } // Get "keep_last" option. This option is added in ADBC version 3.0, so test if it is not empty before using it if(empty($settings['keep_last'])){ $keep_number = '0'; }else{ $keep_setting = $settings['keep_last']; if(empty($keep_setting[$element_type])){ $keep_number = '0'; }else{ $keep_number = $keep_setting[$element_type]; } } // If the item can have keep_last, then prepare it, otherwise echo N/A if($element_type == "revision" || $element_type == "auto-draft" || $element_type == "trash-posts" || $element_type == "moderated-comments" || $element_type == "spam-comments" || $element_type == "trash-comments" || $element_type == "pingbacks" || $element_type == "trackbacks"){ $save_button = __('Save','advanced-database-cleaner'); $keep_info = "" . $keep_number . " " . __('days','advanced-database-cleaner') . " | " . "" . __("Edit", "advanced-database-cleaner") . ""; $keep_info .= "
" . __('Cancel','advanced-database-cleaner') . ""; $keep_info .= wp_nonce_field('aDBc_keep_last_nonce', 'aDBc_keep_last_nonce', true, false); $keep_info .= "
"; }else{ $keep_info = __('N/A','advanced-database-cleaner') ; } if($element_type == "revision"){ }else if($element_type == "revision"){ $keep_info = __('N/A','advanced-database-cleaner') ; } array_push($this->aDBc_elements_to_display, array( 'element_to_clean' => " " . $element_info['name'], 'count' => $aDBc_count, 'view' => $aDBc_see, 'scheduled' => $aDBc_scheduled, 'keep' => $keep_info, 'type' => $element_type ) ); } // Call WP prepare_items function $this->prepare_items(); } /** WP: Get columns */ function get_columns() { $aDBc_scheduled_toolip = " " . __('Indicates if you have selected the item to be cleaned automatically on a scheduled task. A green image indicates that the item is scheduled while a grey image indicated the opposite.','advanced-database-cleaner') ." "; $aDBc_keep_last_toolip = " " . __('Keep the last x days’ data from being displayed, and therefore from being cleaned. The plugin will always show only data older than the number of days you have specified.','advanced-database-cleaner') ." "; $columns = array( 'cb' => '', 'element_to_clean' => __('Elements to clean','advanced-database-cleaner'), 'count' => __('Count','advanced-database-cleaner'), 'view' => __('View','advanced-database-cleaner'), 'scheduled' => __('Scheduled','advanced-database-cleaner') . $aDBc_scheduled_toolip, 'keep' => __('Keep last','advanced-database-cleaner') . $aDBc_keep_last_toolip, 'type' => 'Type' ); return $columns; } /** WP: Prepare items to display */ function prepare_items() { $columns = $this->get_columns(); $hidden = $this->get_hidden_columns(); $sortable = array(); $this->_column_headers = array($columns, $hidden, $sortable); $per_page = 50; $current_page = $this->get_pagenum(); // Prepare sequence of elements to display $display_data = array_slice($this->aDBc_elements_to_display,(($current_page-1) * $per_page), $per_page); $this->set_pagination_args( array( 'total_items' => count($this->aDBc_elements_to_display), 'per_page' => $per_page )); $this->items = $display_data; } /** WP: Get columns that should be hidden */ function get_hidden_columns(){ return array('type'); } /** WP: Column default */ function column_default($item, $column_name){ switch($column_name){ case 'element_to_clean': case 'count': case 'view': case 'scheduled': case 'keep': case 'type': return $item[$column_name]; default: return print_r($item, true) ; //Show the whole array for troubleshooting purposes } } /** WP: Column cb for check box */ function column_cb($item) { return sprintf('', $item['type'], $item['type']); } /** WP: Get bulk actions */ function get_bulk_actions() { $actions = array( 'clean' => __('Clean','advanced-database-cleaner') ); return $actions; } /** WP: Message to display when no items found */ function no_items() { _e('Your database is clean!','advanced-database-cleaner'); } /** WP: Process bulk actions */ public function process_bulk_action() { // Detect when a bulk action is being triggered. $action = $this->current_action(); if ( ! $action ) return; // security check! check_admin_referer( 'bulk-' . $this->_args['plural'] ); // Check role if ( ! current_user_can( 'administrator' ) ) wp_die( 'Security check failed!' ); if ( $action == 'clean' ) { // If the user wants to clean the elements he/she selected if(isset($_POST['aDBc_elements_to_process'])){ // Create an array containing allowed elements_types to clean for security $aDBc_allowed_types = array("revision", "auto-draft", "trash-posts", "moderated-comments", "spam-comments", "trash-comments", "pingbacks", "trackbacks", "orphan-postmeta", "orphan-commentmeta", "orphan-relationships", "orphan-usermeta", "orphan-termmeta", "expired-transients"); foreach($_POST['aDBc_elements_to_process'] as $element){ $aDBc_sanitized_element = sanitize_html_class($element); if(in_array($aDBc_sanitized_element, $aDBc_allowed_types)){ aDBc_clean_all_elements_type($aDBc_sanitized_element); } } // Update the message to show to the user $this->aDBc_message = __('Selected elements successfully cleaned!', 'advanced-database-cleaner'); } } } /** Print the page content */ function aDBc_print_page_content(){ // Print a message if any if($this->aDBc_message != ""){ echo '

' . $this->aDBc_message . '

'; } ?>
display(); ?>
aDBc_total_elements_to_clean == 0 ) { ?>
aDBc_total_elements_to_clean; ?>
" . $count_schedules ." " .__('Cleanup schedule(s) set','advanced-database-cleaner') . "
"; ?>
$hook_params ) { echo "
"; echo "" . __( 'Name', 'advanced-database-cleaner' ) . " : " . $hook_name; echo "
"; // We convert hook name to a string because the arg maybe only a digit! $timestamp = wp_next_scheduled( "aDBc_clean_scheduler", array( $hook_name . '' ) ); if($timestamp){ $next_run = get_date_from_gmt(date('Y-m-d H:i:s', (int) $timestamp), 'M j, Y - H:i'); }else{ $next_run = "---"; } echo "".__('Next run','advanced-database-cleaner') . " : " . $next_run . "
"; $repeat = $hook_params['repeat']; switch($repeat){ case "once" : $repeat = __('Once','advanced-database-cleaner'); break; case "hourly" : $repeat = __('Hourly','advanced-database-cleaner'); break; case "twicedaily" : $repeat = __('Twice a day','advanced-database-cleaner'); break; case "daily" : $repeat = __('Daily','advanced-database-cleaner'); break; case "weekly" : $repeat = __('Weekly','advanced-database-cleaner'); break; case "monthly" : $repeat = __('Monthly','advanced-database-cleaner'); break; } echo "".__('Frequency','advanced-database-cleaner') . " : " . $repeat . "
"; echo "".__('Items to clean','advanced-database-cleaner') . " : " . count($hook_params['elements_to_clean'])."
"; echo $hook_params['active'] == "1" ? "" : ""; $aDBc_new_URI = $_SERVER['REQUEST_URI']; $aDBc_new_URI = add_query_arg('aDBc_view', 'edit_cleanup_schedule', $aDBc_new_URI); $aDBc_new_URI = add_query_arg('hook_name', $hook_name, $aDBc_new_URI); ?> |