'.__('Cleaning Database', $odb_class->odb_txt_domain).'



'; } // GET THE SIZE OF THE DATABASE BEFORE OPTIMIZATION $this->start_size = $odb_class->odb_utilities_obj->odb_get_db_size(); // TIMESTAMP FOR LOG FILE $ct = ($scheduler) ? ' (cron)' : ''; $current_datetime = Date('m/d/YH:i:s'); $odb_class->log_arr = array("time" => substr($current_datetime, 0, 10).'
'.substr($current_datetime,10).$ct); $odb_class->log_arr["after"] = 0; $odb_class->log_arr["before"] = 0; $odb_class->log_arr["orphans"] = 0; $odb_class->log_arr["pingbacks"] = 0; $odb_class->log_arr["revisions"] = 0; $odb_class->log_arr["savings"] = 0; $odb_class->log_arr["spam"] = 0; $odb_class->log_arr["tables"] = 0; $odb_class->log_arr["tags"] = 0; $odb_class->log_arr["transients"] = 0; $odb_class->log_arr["trash"] = 0; /**************************************************************************************** * DELETE REVISIONS ****************************************************************************************/ // FIND REVISIONS $results = $this->odb_get_revisions(); $total_deleted = 0; if(count($results)>0) { // WE HAVE REVISIONS TO DELETE! if(!$scheduler) { ?> odb_delete_revisions($results, $scheduler); if(!$scheduler) { ?>
# odb_txt_domain);?> odb_txt_domain);?> odb_txt_domain);?> odb_txt_domain);?>
odb_txt_domain);?>
odb_txt_domain);?>
0) // NUMBER OF DELETED REVISIONS FOR LOG FILE $odb_class->log_arr["revisions"] = $total_deleted; /**************************************************************************************** * DELETE TRASHED ITEMS ****************************************************************************************/ if($odb_class->odb_rvg_options['clear_trash'] == 'Y') { // GET TRASHED POSTS / PAGES AND COMMENTS $results = $this->odb_get_trash(); $total_deleted = 0; if(count($results)>0) { // WE HAVE TRASH TO DELETE! if(!$scheduler) { ?> odb_delete_trash($results, $scheduler); if(!$scheduler) { ?>
odb_txt_domain);?>
# odb_txt_domain);?> odb_txt_domain);?> odb_txt_domain);?> odb_txt_domain);?>
odb_txt_domain);?>
odb_txt_domain);?>
0) // NUMBER OF DELETED TRASH FOR LOG FILE $odb_class->log_arr["trash"] = $total_deleted; } // if($odb_class->odb_rvg_options['clear_trash'] == 'Y') /**************************************************************************************** * DELETE SPAMMED ITEMS ****************************************************************************************/ if($odb_class->odb_rvg_options['clear_spam'] == 'Y') { // GET SPAMMED COMMENTS $results = $this->odb_get_spam(); $total_deleted = 0; if(count($results)>0) { // WE HAVE SPAM TO DELETE! if (!$scheduler) { ?> odb_delete_spam($results, $scheduler); if (!$scheduler) { ?>
odb_txt_domain);?>
# odb_txt_domain);?> odb_txt_domain);?> odb_txt_domain);?> odb_txt_domain);?>
odb_txt_domain);?>
odb_txt_domain);?>
0) } // if($odb_class->odb_rvg_options['clear_spam'] == 'Y') // NUMBER OF SPAM DELETED FOR LOG FILE $odb_class->log_arr["spam"] = $total_deleted; /**************************************************************************************** * DELETE UNUSED TAGS ****************************************************************************************/ if($odb_class->odb_rvg_options['clear_tags'] == 'Y') { // DELETE UNUSED TAGS $total_deleted = $this->odb_delete_tags(); if($total_deleted>0) { // TAGS DELETED if (!$scheduler) { ?>
odb_txt_domain);?>:
odb_txt_domain);?>
0) } // if($odb_class->odb_rvg_options['clear_tags'] == 'Y') // NUMBER OF tags DELETED FOR LOG FILE $odb_class->log_arr["tags"] = $total_deleted; /**************************************************************************************** * DELETE EXPIRED TRANSIENTS ****************************************************************************************/ if($odb_class->odb_rvg_options['clear_transients'] == 'Y') { // DELETE UNUSED TAGS $total_deleted = $this->odb_delete_transients(); if($total_deleted>0) { // TRANSIENTS DELETED if (!$scheduler) { ?>
odb_txt_domain);?>:
odb_txt_domain);?>
0) } // if($odb_class->odb_rvg_options['clear_transients'] == 'Y') // NUMBER OF transients DELETED FOR LOG FILE $odb_class->log_arr["transients"] = $total_deleted; /**************************************************************************************** * DELETE PINGBACKS AND TRACKBACKS ****************************************************************************************/ if($odb_class->odb_rvg_options['clear_pingbacks'] == 'Y') { // DELETE UNUSED TAGS $total_deleted = $this->odb_delete_pingbacks(); if($total_deleted>0) { // PINGBACKS / TRACKBACKS DELETED\ if (!$scheduler) { ?>
odb_txt_domain);?>:
odb_txt_domain);?>
0) } // if($odb_class->odb_rvg_options['clear_pingbacks'] == 'Y') // NUMBER OF pingbacks / trackbacks DELETED (FOR LOG FILE) $odb_class->log_arr["pingbacks"] = $total_deleted; /**************************************************************************************** * DELETE ORPHANS ****************************************************************************************/ $total_deleted = $this->odb_delete_orphans(); if($total_deleted > 0) { if (!$scheduler) { ?>
odb_txt_domain);?>:
odb_txt_domain);?>
0) // FOR LOG FILE $odb_class->log_arr["orphans"] = $total_deleted; if (!$scheduler) { ?>

odb_txt_domain);?>



nr_of_optimized_tables = $this->odb_optimize_tables($scheduler); if(!$scheduler) { ?>
# odb_txt_domain);?> odb_txt_domain);?> odb_txt_domain);?> odb_txt_domain);?> odb_txt_domain);?>
log_arr["tables"] = $this->nr_of_optimized_tables; // DATABASE SIZE BEFORE OPTIMIZATION $odb_class->log_arr["before"] = $odb_class->odb_utilities_obj->odb_format_size($this->start_size,3); // DATABASE SIZE AFTER OPTIMIZATION $end_size = $odb_class->odb_utilities_obj->odb_get_db_size(); $odb_class->log_arr["after"] = $odb_class->odb_utilities_obj->odb_format_size($end_size,3); // TOTAL SAVING $odb_class->log_arr["savings"] = $odb_class->odb_utilities_obj->odb_format_size(($this->start_size - $end_size),3); // WRITE RESULTS TO LOG FILE $odb_class->odb_logger_obj->write_log($odb_class->log_arr); $total_savings = $odb_class->odb_rvg_options['total_savings']; $total_savings += ($this->start_size - $end_size); $odb_class->odb_rvg_options['total_savings'] = $total_savings; $odb_class->odb_multisite_obj->odb_ms_update_option('odb_rvg_options', $odb_class->odb_rvg_options); if(!$scheduler) { ?>

odb_txt_domain);?>



  odb_txt_domain);?>
odb_txt_domain);?> odb_utilities_obj->odb_format_size($this->start_size,3); ?>
odb_txt_domain);?> odb_utilities_obj->odb_format_size($end_size,3); ?>
odb_txt_domain);?> odb_utilities_obj->odb_format_size(($this->start_size - $end_size),3); ?>
odb_txt_domain);?> odb_utilities_obj->odb_format_size($total_savings,3); ?>
odb_start_time), 4); ?>

odb_txt_domain);?>



odb_txt_domain)?>  odb_txt_domain)?>. odb_plugin_path.'logs/rvg-optimize-db-log.html')) { ?>

   
odb_rvg_options['nr_of_revisions']; $index = 0; for($i=0; $iodb_ms_prefixes); $i++) { $sql = " SELECT `post_parent`, `post_title`, COUNT(*) cnt FROM ".$odb_class->odb_ms_prefixes[$i]."posts WHERE `post_type` = 'revision' GROUP BY `post_parent` HAVING COUNT(*) > ".$max_revisions." ORDER BY UCASE(`post_title`) "; $res = $wpdb->get_results($sql, ARRAY_A); for($j=0; $jodb_ms_prefixes[$i]; $index++; } } } return $res_arr; } // odb_get_revisions() /******************************************************************************************** * DELETE THE REVISIONS ********************************************************************************************/ function odb_delete_revisions($results, $scheduler) { global $odb_class, $wpdb; $max_revisions = $odb_class->odb_rvg_options['nr_of_revisions']; $nr = 1; $total_deleted = 0; for($i=0; $i . get_results($sql_get_posts); for($j=0; $j<$nr_to_delete; $j++) { if(!$scheduler) echo $results_get_posts[$j]->post_modified.'
'; $sql_delete = " DELETE FROM ".$results[$i]['site']."posts WHERE `ID` = ".$results_get_posts[$j]->ID." "; $wpdb->get_results($sql_delete); } // for($j=0; $j<$nr_to_delete; $j++) $nr++; if(!$scheduler) { ?> odb_ms_prefixes); $i++) { $sql = " SELECT `ID` AS id, 'post' AS post_type, `post_title` AS title, `post_modified` AS modified FROM ".$odb_class->odb_ms_prefixes[$i]."posts WHERE `post_status` = 'trash' UNION ALL SELECT `comment_ID` AS id, 'comment' AS post_type, `comment_author_IP` AS title, `comment_date` AS modified FROM ".$odb_class->odb_ms_prefixes[$i]."comments WHERE `comment_approved` = 'trash' ORDER BY post_type, UCASE(title) "; $res = $wpdb->get_results($sql, ARRAY_A); if($res != null) { $res_arr[$index] = $res[0]; $res_arr[$index]['site'] = $odb_class->odb_ms_prefixes[$i]; $index++; } } return $res_arr; } // odb_get_trash() /******************************************************************************************** * DELETE TRASHED POSTS AND PAGES ********************************************************************************************/ function odb_delete_trash($results, $scheduler) { global $wpdb; $nr = 1; $total_deleted = count($results); for($i=0; $i<$total_deleted; $i++) { if(!$scheduler) { ?> get_results($sql_delete); } // DELETE TRASHED POSTS / PAGES $sql_delete = " DELETE FROM ".$results[$i]['site']."posts WHERE `post_status` = 'trash' "; $wpdb->get_results($sql_delete); // DELETE TRASHED COMMENTS $sql_delete = " DELETE FROM ".$results[$i]['site']."comments WHERE `comment_approved` = 'trash' "; $wpdb->get_results($sql_delete); $nr++; } // for($i=0; $iodb_ms_prefixes); $i++) { $sql = " SELECT `comment_ID`, `comment_author`, `comment_author_email`, `comment_date` FROM ".$odb_class->odb_ms_prefixes[$i]."comments WHERE `comment_approved` = 'spam' ORDER BY UCASE(`comment_author`) "; $res = $wpdb->get_results($sql, ARRAY_A); if($res != null) { $res_arr[$index] = $res[0]; $res_arr[$index]['site'] = $odb_class->odb_ms_prefixes[$i]; $index++; } } return $res_arr; } // odb_get_spam() /******************************************************************************************** * DELETE SPAMMED ITEMS ********************************************************************************************/ function odb_delete_spam($results, $scheduler) { global $wpdb; $nr = 1; $total_deleted = count($results); for($i=0; $i get_results($sql_delete); $sql_delete = " DELETE FROM ".$results[$i]['site']."comments WHERE `comment_approved` = 'spam' "; $wpdb->get_results($sql_delete); $nr++; } // for($i=0; $iodb_ms_prefixes); $i++) { $sql = " SELECT a.term_id AS term_id, a.name AS name FROM `".$odb_class->odb_ms_prefixes[$i]."terms` a, `".$odb_class->odb_ms_prefixes[$i]."term_taxonomy` b WHERE a.term_id = b.term_id AND b.taxonomy = 'post_tag' AND b.term_taxonomy_id NOT IN ( SELECT term_taxonomy_id FROM ".$odb_class->odb_ms_prefixes[$i]."term_relationships ) "; $res = $wpdb->get_results($sql); for($j=0; $jodb_delete_tags_is_scheduled($res[$j]->term_id, $odb_class->odb_ms_prefixes[$i])) { // TAG NOT USED IN SCHEDULED POSTS: CAN BE DELETED $total_deleted++; $sql_del = " DELETE FROM ".$odb_class->odb_ms_prefixes[$i]."term_taxonomy WHERE term_id = ".$res[$j]->term_id." "; $wpdb->get_results($sql_del); $sql_del = " DELETE FROM ".$odb_class->odb_ms_prefixes[$i]."terms WHERE term_id = ".$res[$j]->term_id." "; $wpdb->get_results($sql_del); } } // for($j=0; $jodb_ms_blogids); $i++) return $total_deleted; } // odb_delete_tags() /******************************************************************************************** * IS THE UNUSED TAG USED IN ONE OR MORE SCHEDULED POSTS? ********************************************************************************************/ function odb_delete_tags_is_scheduled($term_id, $odb_prefix) { global $wpdb; $sql_get_posts = " SELECT p.post_status FROM ".$odb_prefix."term_relationships t, ".$odb_prefix."posts p WHERE t.term_taxonomy_id = '".$term_id."' AND t.object_id = p.ID "; $results_get_posts = $wpdb->get_results($sql_get_posts); for($i=0; $ipost_status == 'future') return true; return false; } // odb_delete_tags_is_scheduled() /******************************************************************************************** * DELETE EXPIRED TRANSIENTS ********************************************************************************************/ function odb_delete_transients() { global $wpdb, $odb_class; $delay = time() - 60; // ONE MINUTE DELAY $total_deleted = 0; // LOOP THROUGH THE NETWORK for($i=0; $iodb_ms_prefixes); $i++) { // FIND EXPIRED TRANSIENTS $sql = " SELECT `option_name` FROM ".$odb_class->odb_ms_prefixes[$i]."options WHERE ( option_name LIKE '_transient_timeout_%' OR option_name LIKE '_site_transient_timeout_%' ) AND option_value < '$delay' "; $results = $wpdb->get_results($sql); $total_deleted += count($results); // LOOP THROUGH THE RESULTS for($j=0; $joption_name, 0, 19) == '_transient_timeout_') { // _transient_timeout_% $transient = substr($results[$j]->option_name, 19); // DELETE THE TRANSIENT delete_transient($transient); } else { // _site_transient_timeout_% $transient = substr($results[$j]->option_name, 24); // DELETE THE TRANSIENT delete_site_transient($transient); } } // for($j=0; $jodb_ms_prefixes); $i++) return $total_deleted; } // odb_delete_transients() /******************************************************************************************** * DELETE PINGBACKS AND TRACKBACKS ********************************************************************************************/ function odb_delete_pingbacks() { global $wpdb, $odb_class; $total_deleted = 0; // LOOP THROUGH THE NETWORK for($i=0; $iodb_ms_prefixes); $i++) { $sql = " SELECT `comment_ID` FROM ".$odb_class->odb_ms_prefixes[$i]."comments WHERE ( `comment_type` = 'pingback' OR `comment_type` = 'trackback' ) "; $results = $wpdb->get_results($sql); $total_deleted = count($results); for($j=0; $jodb_ms_prefixes[$i]."commentmeta WHERE `comment_id` = ".$results[$j]->comment_ID." "; $wpdb->get_results($sql_delete_meta); } // DELETE COMMENTS $sql_delete_comments = " DELETE FROM ".$odb_class->odb_ms_prefixes[$i]."comments WHERE ( `comment_type` = 'pingback' OR `comment_type` = 'trackback' ) "; $wpdb->get_results($sql_delete_comments); } // for($i=0; $iodb_ms_prefixes); $i++) return $total_deleted; } // odb_delete_pingbacks() /******************************************************************************************** * DELETE ORPHAN POSTMETA RECORDS ********************************************************************************************/ function odb_delete_orphans() { global $wpdb, $odb_class; $meta_orphans = 0; $post_orphans = 0; // LOOP THROUGH THE NETWORK for($i=0; $iodb_ms_prefixes); $i++) { // DELETE POST ORPHANS (AUTO DRAFTS) $sql_delete = " SELECT COUNT(*) cnt FROM ".$odb_class->odb_ms_prefixes[$i]."posts WHERE ID NOT IN (SELECT post_id FROM ".$odb_class->odb_ms_prefixes[$i]."postmeta) AND post_status = 'auto-draft' "; $results = $wpdb->get_results($sql_delete); $post_orphans = $results[0]->cnt; if($post_orphans > 0) { $sql_delete = " DELETE FROM ".$odb_class->odb_ms_prefixes[$i]."posts WHERE ID NOT IN (SELECT post_id FROM ".$odb_class->odb_ms_prefixes[$i]."postmeta) AND post_status = 'auto-draft' "; $wpdb->get_results($sql_delete); } // DELETE POSTMETA ORPHANS $sql_delete = " SELECT COUNT(*) cnt FROM ".$odb_class->odb_ms_prefixes[$i]."postmeta WHERE post_id NOT IN (SELECT ID FROM ".$odb_class->odb_ms_prefixes[$i]."posts) "; $results = $wpdb->get_results($sql_delete); $meta_orphans = $results[0]->cnt; if($meta_orphans > 0) { $sql_delete = " DELETE FROM ".$odb_class->odb_ms_prefixes[$i]."postmeta WHERE post_id NOT IN (SELECT ID FROM ".$odb_class->odb_ms_prefixes[$i]."posts) "; $wpdb->get_results($sql_delete); } } return ($meta_orphans + $post_orphans); } // odb_delete_orphans() /******************************************************************************************** * OPTIMIZE DATABASE TABLES ********************************************************************************************/ function odb_optimize_tables($scheduler) { global $odb_class, $wpdb; $cnt = 0; for ($i=0; $iodb_tables); $i++) { if(!isset($odb_class->odb_rvg_excluded_tabs[$odb_class->odb_tables[$i][0]])) { # TABLE NOT EXCLUDED $cnt++; $sql = " SELECT engine, (data_length + index_length) AS size, table_rows FROM information_schema.TABLES WHERE table_schema = '".DB_NAME."' AND table_name = '".$odb_class->odb_tables[$i][0]."' "; $table_info = $wpdb->get_results($sql); if($odb_class->odb_rvg_options["optimize_innodb"] == 'N' && strtolower($table_info[0]->engine) == 'innodb') { // SKIP InnoDB tables $msg = __('InnoDB table: skipped...', 'rvg-optimize-database'); } else { $query = "OPTIMIZE TABLE ".$odb_class->odb_tables[$i][0]; $result = $wpdb->get_results($query); $msg = $result[0]->Msg_text; $msg = str_replace('OK', __('TABLE OPTIMIZED', 'rvg-optimize-database'), $msg); $msg = str_replace('Table is already up to date', __('Table is already up to date', 'rvg-optimize-database'), $msg); $msg = str_replace('Table does not support optimize, doing recreate + analyze instead', __('TABLE OPTIMIZED', 'rvg-optimize-database'), $msg); } if (!$scheduler) { // NOT FROM THE SCEDULER ?> . odb_tables[$i][0] ?> engine ?> table_rows ?> odb_utilities_obj->odb_format_size($table_info[0]->size) ?>