1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
|
<?php
if (!defined('WPO_VERSION')) die('No direct access allowed');
class WP_Optimization_revisions extends WP_Optimization {
public $ui_sort_order = 1000; public $available_for_auto = true; public $auto_default = true;
public $setting_default = true;
public $available_for_saving = true;
/** * Prepare data for preview widget. * * @param array $params * * @return array */ public function preview($params) {
$retention_subquery = '';
if ('true' == $this->retention_enabled) { $retention_subquery = ' and post_modified < NOW() - INTERVAL ' . $this->retention_period . ' WEEK'; }
// get data requested for preview. $sql = $this->wpdb->prepare( "SELECT `ID`, `post_title`, `post_date`". " FROM `" . $this->wpdb->posts . "`". " WHERE post_type = 'revision'". $retention_subquery. " ORDER BY `ID` LIMIT %d, %d;", array( $params['offset'], $params['limit'], ) );
$posts = $this->wpdb->get_results($sql, ARRAY_A);
// fix empty revision titles. if (!empty($posts)) { foreach ($posts as $key => $post) { $posts[$key]['post_title'] = '' == $post['post_title'] ? '('.__('no title', 'wp-optimize').')' : $post['post_title']; } }
// get total count revisions for optimization. $sql = "SELECT COUNT(*) FROM `" . $this->wpdb->posts . "` WHERE post_type = 'revision'".$retention_subquery.";";
$total = $this->wpdb->get_var($sql);
return array( 'id_key' => 'ID', 'columns' => array( 'ID' => __('ID', 'wp-optimize'), 'post_title' => __('Title', 'wp-optimize'), 'post_date' => __('Date', 'wp-optimize'), ), 'offset' => $params['offset'], 'limit' => $params['limit'], 'total' => $total, 'data' => $this->htmlentities_array($posts, array('ID')), 'message' => $total > 0 ? '' : __('No post revisions found', 'wp-optimize'), ); }
/** * Do actions after optimize() function. */ public function after_optimize() { $message = sprintf(_n('%s post revision deleted', '%s post revisions deleted', $this->processed_count, 'wp-optimize'), number_format_i18n($this->processed_count));
if ($this->is_multisite_mode()) { $message .= ' ' . sprintf(_n('across %s site', 'across %s sites', count($this->blogs_ids), 'wp-optimize'), count($this->blogs_ids)); }
$this->logger->info($message); $this->register_output($message); }
/** * Do optimization. */ public function optimize() { $clean = "DELETE FROM `" . $this->wpdb->posts . "` WHERE post_type = 'revision'";
if ('true' == $this->retention_enabled) { $clean .= ' AND post_modified < NOW() - INTERVAL ' . $this->retention_period . ' WEEK'; }
// if posted ids in params, then remove only selected items. used by preview widget. if (isset($this->data['ids'])) { $clean .= ' AND `ID` in ('.join(',', $this->data['ids']).')'; }
$clean .= ';';
$revisions = $this->query($clean); $this->processed_count += $revisions;
// clean orphaned post meta. $clean = "DELETE pm FROM `" . $this->wpdb->postmeta . "` pm LEFT JOIN `" . $this->wpdb->posts . "` p ON pm.post_id = p.ID WHERE p.ID IS NULL"; $this->query($clean); }
/** * Do actions after get_info() function. */ public function after_get_info() { if ($this->found_count > 0) { $message = sprintf(_n('%s post revision in your database', '%s post revisions in your database', $this->found_count, 'wp-optimize'), number_format_i18n($this->found_count)); } else { $message = __('No post revisions found', 'wp-optimize'); }
if ($this->is_multisite_mode()) { $message .= ' '.sprintf(_n('across %s site', 'across %s sites', count($this->blogs_ids), 'wp-optimize'), count($this->blogs_ids)); }
// add preview link to message. if ($this->found_count > 0) { $message = $this->get_preview_link($message); }
$this->register_output($message); } public function get_info() { $sql = "SELECT COUNT(*) FROM `" . $this->wpdb->posts . "` WHERE post_type = 'revision'";
if ('true' == $this->retention_enabled) { $sql .= ' and post_modified < NOW() - INTERVAL ' . $this->retention_period . ' WEEK'; } $sql .= ';';
$revisions = $this->wpdb->get_var($sql);
$this->found_count += $revisions; } public function settings_label() { if ('true' == $this->retention_enabled) { return sprintf(__('Clean post revisions which are older than %d weeks', 'wp-optimize'), $this->retention_period); } else { return __('Clean all post revisions', 'wp-optimize'); } }
public function get_auto_option_description() { return __('Clean all post revisions', 'wp-optimize'); } }
|