PluginProbe
Redirection / 2.6.1
Redirection v2.6.1
5.10.0 5.9.0 5.8.1 5.8.0 3.7.2 3.7.3 4.0 4.0.1 4.1 4.1.1 4.2 4.2.1 4.2.2 4.2.3 4.3 4.3.1 4.3.2 4.3.3 4.4 4.4.1 4.4.2 4.5 4.5.1 4.6.2 4.7.1 All 130 releases
redirection / models / database.php

database.php in Redirection 2.6.1, at models/database.php

260 lines 8.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 class RE_Database {
4 public function get_charset() {
5 global $wpdb;
6
7 $charset_collate = '';
8 if ( ! empty( $wpdb->charset ) ) {
9 $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
10 }
11
12 if ( ! empty( $wpdb->collate ) ) {
13 $charset_collate .= " COLLATE=$wpdb->collate";
14 }
15
16 return $charset_collate;
17 }
18
19 private function create_items_sql( $prefix, $charset_collate ) {
20 return "CREATE TABLE IF NOT EXISTS `{$prefix}redirection_items` (
21 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
22 `url` mediumtext NOT NULL,
23 `regex` int(11) unsigned NOT NULL DEFAULT '0',
24 `position` int(11) unsigned NOT NULL DEFAULT '0',
25 `last_count` int(10) unsigned NOT NULL DEFAULT '0',
26 `last_access` datetime NOT NULL,
27 `group_id` int(11) NOT NULL DEFAULT '0',
28 `status` enum('enabled','disabled') NOT NULL DEFAULT 'enabled',
29 `action_type` varchar(20) NOT NULL,
30 `action_code` int(11) unsigned NOT NULL,
31 `action_data` mediumtext,
32 `match_type` varchar(20) NOT NULL,
33 `title` varchar(50) DEFAULT NULL,
34 PRIMARY KEY (`id`),
35 KEY `url` (`url`(191)),
36 KEY `status` (`status`),
37 KEY `regex` (`regex`),
38 KEY `group_idpos` (`group_id`,`position`),
39 KEY `group` (`group_id`)
40 ) $charset_collate";
41 }
42
43 private function create_groups_sql( $prefix, $charset_collate ) {
44 return "CREATE TABLE IF NOT EXISTS `{$prefix}redirection_groups` (
45 `id` int(11) NOT NULL AUTO_INCREMENT,
46 `name` varchar(50) NOT NULL,
47 `tracking` int(11) NOT NULL DEFAULT '1',
48 `module_id` int(11) unsigned NOT NULL DEFAULT '0',
49 `status` enum('enabled','disabled') NOT NULL DEFAULT 'enabled',
50 `position` int(11) unsigned NOT NULL DEFAULT '0',
51 PRIMARY KEY (`id`),
52 KEY `module_id` (`module_id`),
53 KEY `status` (`status`)
54 ) $charset_collate";
55 }
56
57 private function create_log_sql( $prefix, $charset_collate ) {
58 return "CREATE TABLE IF NOT EXISTS `{$prefix}redirection_logs` (
59 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
60 `created` datetime NOT NULL,
61 `url` mediumtext NOT NULL,
62 `sent_to` mediumtext,
63 `agent` mediumtext NOT NULL,
64 `referrer` mediumtext,
65 `redirection_id` int(11) unsigned DEFAULT NULL,
66 `ip` varchar(17) NOT NULL DEFAULT '',
67 `module_id` int(11) unsigned NOT NULL,
68 `group_id` int(11) unsigned DEFAULT NULL,
69 PRIMARY KEY (`id`),
70 KEY `created` (`created`),
71 KEY `redirection_id` (`redirection_id`),
72 KEY `ip` (`ip`),
73 KEY `group_id` (`group_id`),
74 KEY `module_id` (`module_id`)
75 ) $charset_collate";
76 }
77
78 private function create_404_sql( $prefix, $charset_collate ) {
79 return "CREATE TABLE IF NOT EXISTS `{$prefix}redirection_404` (
80 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
81 `created` datetime NOT NULL,
82 `url` varchar(255) NOT NULL DEFAULT '',
83 `agent` varchar(255) DEFAULT NULL,
84 `referrer` varchar(255) DEFAULT NULL,
85 `ip` int(10) unsigned NOT NULL,
86 PRIMARY KEY (`id`),
87 KEY `created` (`created`),
88 KEY `url` (`url`(191)),
89 KEY `ip` (`ip`),
90 KEY `referrer` (`referrer`(191))
91 ) $charset_collate";
92 }
93
94 public function get_all_tables() {
95 global $wpdb;
96
97 $charset_collate = $this->get_charset();
98
99 return array(
100 "{$wpdb->prefix}redirection_items" => $this->create_items_sql( $wpdb->prefix, $charset_collate ),
101 "{$wpdb->prefix}redirection_groups" => $this->create_groups_sql( $wpdb->prefix, $charset_collate ),
102 "{$wpdb->prefix}redirection_logs" => $this->create_log_sql( $wpdb->prefix, $charset_collate ),
103 "{$wpdb->prefix}redirection_404" => $this->create_404_sql( $wpdb->prefix, $charset_collate ),
104 );
105 }
106
107 public function createDefaults() {
108 $this->createDefaultGroups();
109
110 update_option( 'redirection_version', REDIRECTION_VERSION );
111 }
112
113 private function createDefaultGroups() {
114 global $wpdb;
115
116 $existing_groups = $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->prefix}redirection_groups" );
117
118 // Default groups
119 if ( intval( $existing_groups, 10 ) === 0 ) {
120 $wpdb->insert( $wpdb->prefix.'redirection_groups', array( 'name' => __( 'Redirections', 'redirection' ), 'module_id' => 1, 'position' => 0 ) );
121 $wpdb->insert( $wpdb->prefix.'redirection_groups', array( 'name' => __( 'Modified Posts', 'redirection' ), 'module_id' => 1, 'position' => 1 ) );
122 }
123 }
124
125 public function install() {
126 global $wpdb;
127
128 $wpdb->show_errors();
129
130 foreach ( $this->get_all_tables() as $sql ) {
131 if ( $wpdb->query( $sql ) === false ) {
132 throw new Exception( 'There was a database error installing Redirection - please post these details to https://github.com/johngodley/redirection/issues' );
133 return false;
134 }
135 }
136
137 $this->createDefaults();
138 $wpdb->hide_errors();
139
140 return true;
141 }
142
143 public function upgrade( $current, $target ) {
144 global $wpdb;
145
146 $wpdb->show_errors();
147
148 if ( $current !== false ) {
149 $versions = array(
150 '2.0.1' => 'upgrade_to_201',
151 '2.1.16' => 'upgrade_to_216',
152 '2.2' => 'upgrade_to_220',
153 '2.3.1' => 'upgrade_to_231',
154 '2.3.2' => 'upgrade_to_232',
155 '2.3.3' => 'upgrade_to_233',
156 );
157
158 foreach ( $versions AS $vers => $upgrade ) {
159 if ( version_compare( $current, $vers ) === -1 ) {
160 $this->$upgrade();
161 }
162 }
163
164 update_option( 'redirection_version', $target );
165 }
166
167 $wpdb->hide_errors();
168 }
169
170 /**
171 * 2.32 => 2.3.3
172 * Migrate any groups with incorrect module_ids
173 * Create a group if none exists
174 */
175 private function upgrade_to_233() {
176 global $wpdb;
177
178 $wpdb->query( "UPDATE {$wpdb->prefix}redirection_groups SET module_id=1 WHERE module_id > 2" );
179 $this->createDefaultGroups();
180 }
181
182 /**
183 * 2.3.1 => 2.3.2
184 * Delete the redirection_modules table
185 */
186 private function upgrade_to_232() {
187 global $wpdb;
188
189 $wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}redirection_modules;" );
190 }
191
192 /**
193 * 2.2 => 2.3.1
194 * Update any group referring to 404 module to WordPress module
195 * Create 404 log table
196 */
197 private function upgrade_to_231() {
198 global $wpdb;
199
200 $wpdb->query( "UPDATE {$wpdb->prefix}redirection_groups SET module_id=1 WHERE module_id=3" );
201 $wpdb->query( $this->create_404_sql( $wpdb->prefix, $this->get_charset() ) );
202 }
203
204 /**
205 * 2.1.6 => 2.2.0
206 * Add indices to redirection items and logs
207 */
208 private function upgrade_to_220() {
209 global $wpdb;
210
211 $wpdb->query( "ALTER TABLE `{$wpdb->prefix}redirection_items` ADD INDEX `group_idpos` (`group_id`,`position`)" );
212 $wpdb->query( "ALTER TABLE `{$wpdb->prefix}redirection_items` ADD INDEX `group` (`group_id`)" );
213 $wpdb->query( "ALTER TABLE `{$wpdb->prefix}redirection_logs` ADD INDEX `created` (`created`)" );
214 $wpdb->query( "ALTER TABLE `{$wpdb->prefix}redirection_logs` ADD INDEX `redirection_id` (`redirection_id`)" );
215 $wpdb->query( "ALTER TABLE `{$wpdb->prefix}redirection_logs` ADD INDEX `ip` (`ip`)" );
216 $wpdb->query( "ALTER TABLE `{$wpdb->prefix}redirection_logs` ADD INDEX `group_id` (`group_id`)" );
217 $wpdb->query( "ALTER TABLE `{$wpdb->prefix}redirection_logs` ADD INDEX `module_id` (`module_id`)" );
218 }
219
220 /**
221 * 2.0.1 => 2.1.6
222 * Update any group referring to 404 module to WordPress module
223 * Create 404 log table
224 */
225 private function upgrade_to_216() {
226 global $wpdb;
227
228 $wpdb->query( "ALTER TABLE `{$wpdb->prefix}redirection_groups` ADD INDEX(module_id)" );
229 $wpdb->query( "ALTER TABLE `{$wpdb->prefix}redirection_groups` ADD INDEX(status)" );
230 $wpdb->query( "ALTER TABLE `{$wpdb->prefix}redirection_items` ADD INDEX(url(191))" );
231 $wpdb->query( "ALTER TABLE `{$wpdb->prefix}redirection_items` ADD INDEX(status)" );
232 $wpdb->query( "ALTER TABLE `{$wpdb->prefix}redirection_items` ADD INDEX(regex)" );
233 }
234
235 /**
236 * <2.0.1 => 2.0.1
237 */
238 private function upgrade_to_201() {
239 global $wpdb;
240
241 $wpdb->query( "ALTER TABLE `{$wpdb->prefix}redirection_items` ADD `title` varchar(50) NULL" );
242 }
243
244 public function remove() {
245 global $wpdb;
246
247 $wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}redirection_items" );
248 $wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}redirection_logs" );
249 $wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}redirection_groups" );
250 $wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}redirection_modules" );
251 $wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}redirection_404" );
252
253 delete_option( 'redirection_lookup' );
254 delete_option( 'redirection_post' );
255 delete_option( 'redirection_root' );
256 delete_option( 'redirection_index' );
257 delete_option( 'redirection_version' );
258 }
259 }
260