'.__('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_txt_domain);?> |
odb_txt_domain);?> |
odb_txt_domain);?> |
odb_txt_domain);?> |
odb_delete_revisions($results, $scheduler);
if(!$scheduler)
{
?>
| 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_txt_domain);?>
|
| # |
odb_txt_domain);?> |
odb_txt_domain);?> |
odb_txt_domain);?> |
odb_txt_domain);?> |
odb_delete_trash($results, $scheduler);
if(!$scheduler)
{
?>
| 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_txt_domain);?>
|
| # |
odb_txt_domain);?> |
odb_txt_domain);?> |
odb_txt_domain);?> |
odb_txt_domain);?> |
odb_delete_spam($results, $scheduler);
if (!$scheduler)
{
?>
| 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);?>
| # |
odb_txt_domain);?> |
odb_txt_domain);?> |
odb_txt_domain);?> |
odb_txt_domain);?> |
odb_txt_domain);?> |
nr_of_optimized_tables = $this->odb_optimize_tables($scheduler);
if(!$scheduler)
{
?>
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_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) ?> |