PluginProbe
WP-DBManager / 2.71
WP-DBManager v2.71
4.0.0 trunk 1.00 2.00 2.01 2.02 2.03 2.04 2.05 2.10 2.11 2.20 2.30 2.31 2.40 2.50 2.65 2.70 2.71 2.72 2.73 2.74 2.75 2.76 2.78 All 40 releases
wp-dbmanager / wp-dbmanager.php

wp-dbmanager.php in WP-DBManager 2.71, at wp-dbmanager.php

744 lines 33.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /*
3 Plugin Name: WP-DBManager
4 Plugin URI: http://lesterchan.net/portfolio/programming/php/
5 Description: Manages your WordPress database. Allows you to optimize database, repair database, backup database, restore database, delete backup database , drop/empty tables and run selected queries. Supports automatic scheduling of backing up, optimizing and repairing of database.
6 Version: 2.71
7 Author: Lester 'GaMerZ' Chan
8 Author URI: http://lesterchan.net
9 Text Domain: wp-dbmanager
10 */
11
12
13 /*
14 Copyright 2014 Lester Chan (email : lesterchan@gmail.com)
15
16 This program is free software; you can redistribute it and/or modify
17 it under the terms of the GNU General Public License as published by
18 the Free Software Foundation; either version 2 of the License, or
19 (at your option) any later version.
20
21 This program is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 GNU General Public License for more details.
25
26 You should have received a copy of the GNU General Public License
27 along with this program; if not, write to the Free Software
28 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
29 */
30
31
32 ### Create Text Domain For Translations
33 add_action( 'plugins_loaded', 'dbmanager_textdomain' );
34 function dbmanager_textdomain() {
35 load_plugin_textdomain( 'wp-dbmanager', false, dirname( plugin_basename( __FILE__ ) ) );
36 }
37
38
39 ### Function: Database Manager Menu
40 add_action('admin_menu', 'dbmanager_menu');
41 function dbmanager_menu() {
42 if (function_exists('add_menu_page')) {
43 add_menu_page(__('Database', 'wp-dbmanager'), __('Database', 'wp-dbmanager'), 'manage_database', 'wp-dbmanager/database-manager.php', '', 'dashicons-archive');
44 }
45 if (function_exists('add_submenu_page')) {
46 add_submenu_page('wp-dbmanager/database-manager.php', __('Backup DB', 'wp-dbmanager'), __('Backup DB', 'wp-dbmanager'), 'manage_database', 'wp-dbmanager/database-backup.php');
47 add_submenu_page('wp-dbmanager/database-manager.php', __('Manage Backup DB', 'wp-dbmanager'), __('Manage Backup DB', 'wp-dbmanager'), 'manage_database', 'wp-dbmanager/database-manage.php');
48 add_submenu_page('wp-dbmanager/database-manager.php', __('Optimize DB', 'wp-dbmanager'), __('Optimize DB', 'wp-dbmanager'), 'manage_database', 'wp-dbmanager/database-optimize.php');
49 add_submenu_page('wp-dbmanager/database-manager.php', __('Repair DB', 'wp-dbmanager'), __('Repair DB', 'wp-dbmanager'), 'manage_database', 'wp-dbmanager/database-repair.php');
50 add_submenu_page('wp-dbmanager/database-manager.php', __('Empty/Drop Tables', 'wp-dbmanager'), __('Empty/Drop Tables', 'wp-dbmanager'), 'manage_database', 'wp-dbmanager/database-empty.php');
51 add_submenu_page('wp-dbmanager/database-manager.php', __('Run SQL Query', 'wp-dbmanager'), __('Run SQL Query', 'wp-dbmanager'), 'manage_database', 'wp-dbmanager/database-run.php');
52 add_submenu_page('wp-dbmanager/database-manager.php', __('DB Options', 'wp-dbmanager'), __('DB Options', 'wp-dbmanager'), 'manage_database', 'wp-dbmanager/wp-dbmanager.php', 'dbmanager_options');
53 }
54 }
55
56
57 ### Funcion: Database Manager Cron
58 add_filter('cron_schedules', 'cron_dbmanager_reccurences');
59 add_action('dbmanager_cron_backup', 'cron_dbmanager_backup');
60 add_action('dbmanager_cron_optimize', 'cron_dbmanager_optimize');
61 add_action('dbmanager_cron_repair', 'cron_dbmanager_repair');
62 function cron_dbmanager_backup() {
63 global $wpdb;
64 $backup_options = get_option('dbmanager_options');
65 $backup_email = stripslashes($backup_options['backup_email']);
66 if(intval($backup_options['backup_period']) > 0) {
67 $current_date = mysql2date(sprintf(__('%s @ %s', 'wp-dbmanager'), get_option('date_format'), get_option('time_format')), gmdate('Y-m-d H:i:s', current_time('timestamp')));
68 $backup = array();
69 $backup['date'] = current_time('timestamp');
70 $backup['mysqldumppath'] = $backup_options['mysqldumppath'];
71 $backup['mysqlpath'] = $backup_options['mysqlpath'];
72 $backup['path'] = $backup_options['path'];
73 $backup['password'] = str_replace('$', '\$', DB_PASSWORD);
74 $backup['host'] = DB_HOST;
75 $backup['port'] = '';
76 $backup['sock'] = '';
77 if(strpos(DB_HOST, ':') !== false) {
78 $db_host = explode(':', DB_HOST);
79 $backup['host'] = $db_host[0];
80 if(intval($db_host[1]) != 0) {
81 $backup['port'] = ' --port="'.intval($db_host[1]).'"';
82 } else {
83 $backup['sock'] = ' --socket="'.$db_host[1].'"';
84 }
85 }
86 $backup['command'] = '';
87 $brace = (substr(PHP_OS, 0, 3) == 'WIN') ? '"' : '';
88 if(intval($backup_options['backup_gzip']) == 1) {
89 $backup['filename'] = $backup['date'].'_-_'.DB_NAME.'.sql.gz';
90 $backup['filepath'] = $backup['path'].'/'.$backup['filename'];
91 $backup['command'] = $brace.$backup['mysqldumppath'].$brace.' --force --host="'.$backup['host'].'" --user="'.DB_USER.'" --password="'.$backup['password'].'"'.$backup['port'].$backup['sock'].' --add-drop-table --skip-lock-tables '.DB_NAME.' | gzip > '.$brace.$backup['filepath'].$brace;
92 } else {
93 $backup['filename'] = $backup['date'].'_-_'.DB_NAME.'.sql';
94 $backup['filepath'] = $backup['path'].'/'.$backup['filename'];
95 $backup['command'] = $brace.$backup['mysqldumppath'].$brace.' --force --host="'.$backup['host'].'" --user="'.DB_USER.'" --password="'.$backup['password'].'"'.$backup['port'].$backup['sock'].' --add-drop-table --skip-lock-tables '.DB_NAME.' > '.$brace.$backup['filepath'].$brace;
96 }
97 execute_backup($backup['command']);
98 if( !empty( $backup_email ) )
99 {
100 dbmanager_email_backup( $backup_email, $backup['filepath'] );
101 }
102 }
103 return;
104 }
105 function cron_dbmanager_optimize() {
106 global $wpdb;
107 $backup_options = get_option('dbmanager_options');
108 $optimize = intval($backup_options['optimize']);
109 $optimize_period = intval($backup_options['optimize_period']);
110 if($optimize_period > 0) {
111 $optimize_tables = array();
112 $tables = $wpdb->get_col("SHOW TABLES");
113 foreach($tables as $table_name) {
114 $optimize_tables[] = '`'.$table_name.'`';
115 }
116 $wpdb->query('OPTIMIZE TABLE '.implode(',', $optimize_tables));
117 }
118 return;
119 }
120 function cron_dbmanager_repair() {
121 global $wpdb;
122 $backup_options = get_option('dbmanager_options');
123 $repair = intval($backup_options['repair']);
124 $repair_period = intval($backup_options['repair_period']);
125 if($repair_period > 0) {
126 $repair_tables = array();
127 $tables = $wpdb->get_col("SHOW TABLES");
128 foreach($tables as $table_name) {
129 $repair_tables[] = '`'.$table_name.'`';
130 }
131 $wpdb->query('REPAIR TABLE '.implode(',', $repair_tables));
132 }
133 return;
134 }
135 function cron_dbmanager_reccurences($schedules) {
136 $backup_options = get_option('dbmanager_options');
137 $backup = intval($backup_options['backup'])*intval($backup_options['backup_period']);
138 $optimize = intval($backup_options['optimize'])*intval($backup_options['optimize_period']);
139 $repair = intval($backup_options['repair'])*intval($backup_options['repair_period']);
140 if($backup == 0) {
141 $backup = 31536000;
142 }
143 if($optimize == 0) {
144 $optimize = 31536000;
145 }
146 if($repair == 0) {
147 $repair = 31536000;
148 }
149 $schedules['dbmanager_backup'] = array('interval' => $backup, 'display' => __('WP-DBManager Backup Schedule', 'wp-dbmanager'));
150 $schedules['dbmanager_optimize'] = array('interval' => $optimize, 'display' => __('WP-DBManager Optimize Schedule', 'wp-dbmanager'));
151 $schedules['dbmanager_repair'] = array('interval' => $repair, 'display' => __('WP-DBManager Repair Schedule', 'wp-dbmanager'));
152 return $schedules;
153 }
154
155
156 ### Function: Ensure .htaccess Is In The Backup Folder
157 add_action( 'admin_notices', 'dbmanager_admin_notices' );
158 function dbmanager_admin_notices() {
159 $backup_options = get_option( 'dbmanager_options' );
160 $backup_folder_writable = ( is_dir( $backup_options['path'] ) && wp_is_writable( $backup_options['path'] ) );
161 $htaccess_exists = ( file_exists( $backup_options['path'] . '/.htaccess' ) );
162
163 if( !isset( $backup_options['hide_admin_notices'] ) || intval( $backup_options['hide_admin_notices'] ) === 0 )
164 {
165 if( !$backup_folder_writable || !$htaccess_exists ) {
166 echo '<div class="error">';
167
168 if( !$backup_folder_writable ) {
169 echo '<p style="font-weight: bold;">'.__('Your backup folder is NOT writable', 'wp-postratings').'</p>';
170 echo '<p>'.sprintf( __( 'To correct this issue, make the folder <strong>%s</strong> writable.', 'wp-dbmanager'), $backup_options['path'] ).'</p>';
171 }
172 if( !$htaccess_exists ) {
173 echo '<p style="font-weight: bold;">'.__('Your backup folder MIGHT be visible to the public', 'wp-dbmanager').'</p>';
174 echo '<p>'.sprintf( __( 'To correct this issue, move the file from <strong>%s</strong> to <strong>%s</strong>', 'wp-dbmanager'), plugin_dir_path( __FILE__ ) . 'htaccess.txt', $backup_options['path'] .'/.htaccess' ).'</p>';
175 }
176
177 echo '</div>';
178 }
179 }
180 }
181
182
183 ### Function: Auto Detect MYSQL and MYSQL Dump Paths
184 function detect_mysql() {
185 global $wpdb;
186 $paths = array('mysq' => '', 'mysqldump' => '');
187 if(substr(PHP_OS,0,3) == 'WIN') {
188 $mysql_install = $wpdb->get_row("SHOW VARIABLES LIKE 'basedir'");
189 if($mysql_install) {
190 $install_path = str_replace('\\', '/', $mysql_install->Value);
191 $paths['mysql'] = $install_path.'bin/mysql.exe';
192 $paths['mysqldump'] = $install_path.'bin/mysqldump.exe';
193 } else {
194 $paths['mysql'] = 'mysql.exe';
195 $paths['mysqldump'] = 'mysqldump.exe';
196 }
197 } else {
198 if(function_exists('exec')) {
199 $paths['mysql'] = @exec('which mysql');
200 $paths['mysqldump'] = @exec('which mysqldump');
201 } else {
202 $paths['mysql'] = 'mysql';
203 $paths['mysqldump'] = 'mysqldump';
204 }
205 }
206 return $paths;
207 }
208
209
210 ### Executes OS-Dependent mysqldump Command (By: Vlad Sharanhovich)
211 function execute_backup($command) {
212 $backup_options = get_option('dbmanager_options');
213 check_backup_files();
214 if(substr(PHP_OS, 0, 3) == 'WIN') {
215 $writable_dir = $backup_options['path'];
216 $tmpnam = $writable_dir.'/wp-dbmanager.bat';
217 $fp = fopen($tmpnam, 'w');
218 fwrite($fp, $command);
219 fclose($fp);
220 system($tmpnam.' > NUL', $error);
221 unlink($tmpnam);
222 } else {
223 passthru($command, $error);
224 }
225 return $error;
226 }
227
228 ### Function: Email database backup
229 function dbmanager_email_backup($to = '', $backup_file_path)
230 {
231 if( is_email( $to ) && file_exists( $backup_file_path ) )
232 {
233 $backup_options = get_option( 'dbmanager_options' );
234
235 $file_name = basename( $backup_file_path );
236 $file_gmt_date = gmdate( 'Y-m-d H:i:s', substr( $file_name, 0, 10 ) );
237 $file_size = format_size( filesize( $backup_file_path) );
238 $file_date = mysql2date( sprintf( __( '%s @ %s', 'wp-dbmanager' ), get_option( 'date_format' ), get_option( 'time_format' ) ), $file_gmt_date );
239
240 $to = ( !empty( $to ) ? $to : get_option( 'admin_email' ) );
241
242 $subject = ( !empty( $backup_options['backup_email_subject'] ) ? $backup_options['backup_email_subject'] : dbmanager_default_options( 'backup_email_subject' ) );
243 $subject = str_replace(
244 array(
245 '%SITE_NAME%'
246 , '%POST_DATE%'
247 , '%POST_TIME%'
248 )
249 , array(
250 wp_specialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES )
251 , mysql2date( get_option( 'date_format' ), $file_gmt_date )
252 , mysql2date( get_option( 'time_format' ), $file_gmt_date )
253 )
254 , $subject
255 );
256 $message = __( 'Website Name:', 'wp-dbmanager').' '. wp_specialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES ) . "\n".
257 __( 'Website URL:', 'wp-dbmanager' ).' '.get_bloginfo( 'url' )."\n".
258 __( 'Backup File Name:', 'wp-dbmanager' ).' '.$file_name."\n".
259 __( 'Backup File Date:', 'wp-dbmanager' ).' '.$file_date."\n".
260 __( 'Backup File Size:', 'wp-dbmanager' ).' '.$file_size."\n\n".
261 __( 'With Regards,', 'wp-dbmanager' )."\n".
262 wp_specialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES ). ' ' . __('Administrator', 'wp-dbmanager' )."\n".
263 get_bloginfo('url');
264
265 $from = ( !empty( $backup_options['backup_email_from'] ) ? $backup_options['backup_email_from'] : dbmanager_default_options( 'backup_email_from' ) );
266 $from_name = ( !empty( $backup_options['backup_email_from_name'] ) ? $backup_options['backup_email_from_name'] : dbmanager_default_options( 'backup_email_from_name' ) );
267 $headers[] = 'From: "' . wp_specialchars_decode( stripslashes_deep( $from_name ), ENT_QUOTES ) . '" <'.$from.'>';
268
269 return wp_mail( $to, $subject, $message, $headers, $backup_file_path );
270 }
271
272 return false;
273 }
274
275
276 ### Function: Format Bytes Into KB/MB
277 if(!function_exists('format_size')) {
278 function format_size($rawSize) {
279 if($rawSize / 1073741824 > 1)
280 return number_format_i18n($rawSize/1048576, 1) . ' '.__('GiB', 'wp-dbmanager');
281 else if ($rawSize / 1048576 > 1)
282 return number_format_i18n($rawSize/1048576, 1) . ' '.__('MiB', 'wp-dbmanager');
283 else if ($rawSize / 1024 > 1)
284 return number_format_i18n($rawSize/1024, 1) . ' '.__('KiB', 'wp-dbmanager');
285 else
286 return number_format_i18n($rawSize, 0) . ' '.__('bytes', 'wp-dbmanager');
287 }
288 }
289
290
291 ### Function: Get File Extension
292 if(!function_exists('file_ext')) {
293 function file_ext($file_name) {
294 return substr(strrchr($file_name, '.'), 1);
295 }
296 }
297
298
299 ### Function: Check Folder Whether There Is Any File Inside
300 if(!function_exists('is_emtpy_folder')) {
301 function is_emtpy_folder($folder){
302 if(is_dir($folder) ){
303 $folder_content = '';
304 $handle = opendir($folder);
305 while( (gettype( $name = readdir($handle)) != 'boolean')){
306 if($name != '.htaccess') {
307 $name_array[] = $name;
308 }
309 }
310 foreach($name_array as $temp)
311 $folder_content .= $temp;
312
313 if($folder_content == '...')
314 return true;
315 else
316 return false;
317 closedir($handle);
318 }
319 else
320 return true;
321 }
322 }
323
324
325 ### Function: Make Sure Maximum Number Of Database Backup Files Does Not Exceed
326 function check_backup_files() {
327 $backup_options = get_option('dbmanager_options');
328 $database_files = array();
329 if(!is_emtpy_folder($backup_options['path'])) {
330 if ($handle = opendir($backup_options['path'])) {
331 while (false !== ($file = readdir($handle))) {
332 if ($file != '.' && $file != '..' && (file_ext($file) == 'sql' || file_ext($file) == 'gz')) {
333 $database_files[] = $file;
334 }
335 }
336 closedir($handle);
337 sort($database_files);
338 }
339 }
340 if(sizeof($database_files) >= $backup_options['max_backup']) {
341 @unlink($backup_options['path'].'/'.$database_files[0]);
342 }
343 }
344
345
346 ### Function: DBManager Default Options
347 function dbmanager_default_options( $option_name )
348 {
349 switch( $option_name )
350 {
351 case 'backup_email_from':
352 return get_option( 'admin_email' );
353 break;
354 case 'backup_email_from_name':
355 return wp_specialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES ) .' '.__( 'Administrator', 'wp-dbmanager' );
356 break;
357 case 'backup_email_subject':
358 return __( '%SITE_NAME% Database Backup File For %POST_DATE% @ %POST_TIME%', 'wp-dbmanager' );
359 break;
360 case 'hide_admin_notices':
361 return 0;
362 break;
363 }
364 }
365
366 ### Function: Acticate Plugin
367 register_activation_hook( __FILE__, 'dbmanager_activation' );
368 function dbmanager_activation( $network_wide )
369 {
370 $auto = detect_mysql();
371 // Add Options
372 $option_name = 'dbmanager_options';
373 $option = array(
374 'mysqldumppath' => $auto['mysqldump']
375 , 'mysqlpath' => $auto['mysql']
376 , 'path' => str_replace( '\\', '/', WP_CONTENT_DIR ).'/backup-db'
377 , 'max_backup' => 10
378 , 'backup' => 1
379 , 'backup_gzip' => 0
380 , 'backup_period' => 604800
381 , 'backup_email' => get_option( 'admin_email' )
382 , 'backup_email_from' => dbmanager_default_options( 'backup_email_from' )
383 , 'backup_email_from_name' => dbmanager_default_options( 'backup_email_from_name' )
384 , 'backup_email_subject' => dbmanager_default_options( 'backup_email_subject' )
385 , 'optimize' => 3
386 , 'optimize_period' => 86400
387 , 'repair' => 2
388 , 'repair_period' => 604800
389 , 'hide_admin_notices' => 0
390 );
391
392 if ( is_multisite() && $network_wide )
393 {
394 $ms_sites = wp_get_sites();
395
396 if( 0 < sizeof( $ms_sites ) )
397 {
398 foreach ( $ms_sites as $ms_site )
399 {
400 switch_to_blog( $ms_site['blog_id'] );
401 add_option( $option_name, $option );
402 dbmanager_activate();
403 }
404 }
405
406 restore_current_blog();
407 }
408 else
409 {
410 add_option( $option_name, $option );
411 dbmanager_activate();
412 }
413 }
414
415 function dbmanager_activate() {
416 $plugin_path = plugin_dir_path( __FILE__ );
417 $default_backup_folder = WP_CONTENT_DIR . '/backup-db';
418
419 // Create Backup Folder
420 if( is_dir( $default_backup_folder ) && wp_is_writable( $default_backup_folder ) )
421 {
422 if( wp_mkdir_p( $default_backup_folder ) )
423 {
424 @copy( $plugin_path . 'htaccess.txt', $default_backup_folder . '/.htaccess' );
425 @chmod( $default_backup_folder, 0750 );
426 }
427 }
428
429 // Set 'manage_database' Capabilities To Administrator
430 $role = get_role( 'administrator' );
431 if( !$role->has_cap( 'manage_database') )
432 {
433 $role->add_cap( 'manage_database' );
434 }
435 }
436
437
438 ### Function: Download Database
439 add_action('init', 'download_database');
440 function download_database() {
441 if(isset($_POST['do']) && $_POST['do'] == __('Download', 'wp-dbmanager') && !empty($_POST['database_file'])) {
442 if(strpos($_SERVER['HTTP_REFERER'], admin_url('admin.php?page=wp-dbmanager/database-manage.php')) !== false) {
443 $database_file = trim($_POST['database_file']);
444 if(substr($database_file, strlen($database_file) - 4, 4) == '.sql' || substr($database_file, strlen($database_file) - 7, 7) == '.sql.gz') {
445 check_admin_referer('wp-dbmanager_manage');
446 $backup_options = get_option('dbmanager_options');
447 $clean_file_name = sanitize_file_name($database_file);
448 $clean_file_name = str_replace('sql_.gz', 'sql.gz', $clean_file_name);
449 $file_path = $backup_options['path'].'/'.$clean_file_name;
450 header("Pragma: public");
451 header("Expires: 0");
452 header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
453 header("Content-Type: application/force-download");
454 header("Content-Type: application/octet-stream");
455 header("Content-Type: application/download");
456 header("Content-Disposition: attachment; filename=".basename($file_path).";");
457 header("Content-Transfer-Encoding: binary");
458 header("Content-Length: ".filesize($file_path));
459 @readfile($file_path);
460 }
461 }
462 exit();
463 }
464 }
465
466 ### Function: Database Options
467 function dbmanager_options() {
468 $text = '';
469 $backup_options = get_option('dbmanager_options');
470 if(!empty($_POST['Submit'])) {
471 check_admin_referer('wp-dbmanager_options');
472 $backup_options['mysqldumppath'] = sanitize_text_field( $_POST['db_mysqldumppath'] );
473 $backup_options['mysqlpath'] = sanitize_text_field( $_POST['db_mysqlpath'] );
474 $backup_options['path'] = sanitize_text_field( $_POST['db_path'] );
475 $backup_options['max_backup'] = intval( $_POST['db_max_backup'] );
476 $backup_options['backup'] = intval( $_POST['db_backup'] );
477 $backup_options['backup_gzip'] = intval( $_POST['db_backup_gzip'] );
478 $backup_options['backup_period'] = intval( $_POST['db_backup_period'] );
479 $backup_options['backup_email'] = sanitize_email( $_POST['db_backup_email'] );
480 $backup_options['backup_email_from'] = sanitize_email( $_POST['db_backup_email_from'] );
481 $backup_options['backup_email_from_name'] = sanitize_text_field( $_POST['db_backup_email_from_name'] );
482 $backup_options['backup_email_subject'] = sanitize_text_field( $_POST['db_backup_email_subject'] );
483 $backup_options['optimize'] = intval( $_POST['db_optimize'] );
484 $backup_options['optimize_period'] = intval( $_POST['db_optimize_period'] );
485 $backup_options['repair'] = intval( $_POST['db_repair'] );
486 $backup_options['repair_period'] = intval( $_POST['db_repair_period'] );
487 $backup_options['hide_admin_notices'] = intval( $_POST['db_hide_admin_notices'] );
488
489 $update_db_options = update_option('dbmanager_options', $backup_options);
490 if($update_db_options) {
491 $text = '<font color="green">'.__('Database Options Updated', 'wp-dbmanager').'</font>';
492 }
493 if(empty($text)) {
494 $text = '<font color="red">'.__('No Database Option Updated', 'wp-dbmanager').'</font>';
495 }
496 wp_clear_scheduled_hook('dbmanager_cron_backup');
497 if($backup_options['backup_period'] > 0) {
498 if (!wp_next_scheduled('dbmanager_cron_backup')) {
499 wp_schedule_event(time(), 'dbmanager_backup', 'dbmanager_cron_backup');
500 }
501 }
502 wp_clear_scheduled_hook('dbmanager_cron_optimize');
503 if($backup_options['optimize_period'] > 0) {
504 if (!wp_next_scheduled('dbmanager_cron_optimize')) {
505 wp_schedule_event(time(), 'dbmanager_optimize', 'dbmanager_cron_optimize');
506 }
507 }
508 wp_clear_scheduled_hook('dbmanager_cron_repair');
509 if($backup_options['repair_period'] > 0) {
510 if (!wp_next_scheduled('dbmanager_cron_repair')) {
511 wp_schedule_event(time(), 'dbmanager_repair', 'dbmanager_cron_repair');
512 }
513 }
514 }
515 $path = detect_mysql();
516
517 // Default Options
518 if( !isset( $backup_options['backup_email_from'] ) )
519 {
520 $backup_options['backup_email_from'] = dbmanager_default_options( 'backup_email_from' );
521 }
522 if( !isset( $backup_options['backup_email_from_name'] ) )
523 {
524 $backup_options['backup_email_from_name'] = dbmanager_default_options( 'backup_email_from_name' );
525 }
526 if( !isset( $backup_options['backup_email_subject'] ) )
527 {
528 $backup_options['backup_email_subject'] = dbmanager_default_options( 'backup_email_subject' );
529 }
530 if( !isset( $backup_options['hide_admin_notices'] ) )
531 {
532 $backup_options['hide_admin_notices'] = dbmanager_default_options( 'hide_admin_notices' );
533 }
534
535 ?>
536 <script type="text/javascript">
537 /* <![CDATA[*/
538 function mysqlpath() {
539 jQuery("#db_mysqlpath").val("<?php echo $path['mysql']; ?>");
540 }
541 function mysqldumppath() {
542 jQuery("#db_mysqldumppath").val("<?php echo $path['mysqldump']; ?>");
543 }
544 /* ]]> */
545 </script>
546 <?php if(!empty($text)) { echo '<!-- Last Action --><div id="message" class="updated fade"><p>'.$text.'</p></div>'; } ?>
547 <!-- Database Options -->
548 <form method="post" action="<?php echo admin_url('admin.php?page='.plugin_basename(__FILE__)); ?>">
549 <?php wp_nonce_field('wp-dbmanager_options'); ?>
550 <div class="wrap">
551 <h2><?php _e('Database Options', 'wp-dbmanager'); ?></h2>
552 <h3><?php _e('Paths', 'wp-dbmanager'); ?></h3>
553 <table class="form-table">
554 <tr>
555 <td width="20%" valign="top"><strong><?php _e('Path To mysqldump:', 'wp-dbmanager'); ?></strong></td>
556 <td width="80%">
557 <input type="text" id="db_mysqldumppath" name="db_mysqldumppath" size="60" maxlength="100" value="<?php echo stripslashes($backup_options['mysqldumppath']); ?>" dir="ltr" />&nbsp;&nbsp;<input type="button" value="<?php _e('Auto Detect', 'wp-dbmanager'); ?>" onclick="mysqldumppath();" />
558 <p><?php _e('The absolute path to mysqldump without trailing slash. If unsure, please email your server administrator about this.', 'wp-dbmanager'); ?></p>
559 </td>
560 </tr>
561 <tr>
562 <td valign="top"><strong><?php _e('Path To mysql:', 'wp-dbmanager'); ?></strong></td>
563 <td>
564 <input type="text" id="db_mysqlpath" name="db_mysqlpath" size="60" maxlength="100" value="<?php echo stripslashes($backup_options['mysqlpath']); ?>" dir="ltr" />&nbsp;&nbsp;<input type="button" value="<?php _e('Auto Detect', 'wp-dbmanager'); ?>" onclick="mysqlpath();" />
565 <p><?php _e('The absolute path to mysql without trailing slash. If unsure, please email your server administrator about this.', 'wp-dbmanager'); ?></p>
566 </td>
567 </tr>
568 <tr>
569 <td valign="top"><strong><?php _e('Path To Backup:', 'wp-dbmanager'); ?></strong></td>
570 <td>
571 <input type="text" name="db_path" size="60" maxlength="100" value="<?php echo stripslashes($backup_options['path']); ?>" dir="ltr" />
572 <p><?php _e('The absolute path to your database backup folder without trailing slash. Make sure the folder is writable.', 'wp-dbmanager'); ?></p>
573 </td>
574 </tr>
575 <tr>
576 <td valign="top"><strong><?php _e('Maximum Backup Files:', 'wp-dbmanager'); ?></strong></td>
577 <td>
578 <input type="text" name="db_max_backup" size="5" maxlength="5" value="<?php echo stripslashes($backup_options['max_backup']); ?>" />
579 <p><?php _e('The maximum number of database backup files that is allowed in the backup folder as stated above. The oldest database backup file is always deleted in order to maintain this value. This is to prevent the backup folder from getting too large.', 'wp-dbmanager'); ?></p>
580 </td>
581 </tr>
582 </table>
583
584 <h3><?php _e('Note', 'wp-dbmanager'); ?></h3>
585 <table class="form-table">
586 <tr>
587 <td>
588 <strong><?php _e('Windows Server', 'wp-dbmanager'); ?></strong><br />
589 <?php _e('For mysqldump path, you can try \'<strong>mysqldump.exe</strong>\'.', 'wp-dbmanager'); ?><br />
590 <?php _e('For mysql path, you can try \'<strong>mysql.exe</strong>\'.', 'wp-dbmanager'); ?>
591 </td>
592 </tr>
593 <tr>
594 <td>
595 <strong><?php _e('Linux Server', 'wp-dbmanager'); ?></strong><br />
596 <?php _e('For mysqldump path, normally is just \'<strong>mysqldump</strong>\'.', 'wp-dbmanager'); ?><br />
597 <?php _e('For mysql path, normally is just \'<strong>mysql</strong>\'.', 'wp-dbmanager'); ?>
598 </td>
599 </tr>
600 <tr>
601 <td>
602 <strong><?php _e('Note', 'wp-dbmanager'); ?></strong><br />
603 <?php _e('The \'Auto Detect\' function does not work for some servers. If it does not work for you, please contact your server administrator for the MYSQL and MYSQL DUMP paths.', 'wp-dbmanager'); ?>
604 </td>
605 </tr>
606 </table>
607
608 <h3><?php _e('Automatic Scheduling', 'wp-dbmanager'); ?></h3>
609 <table class="form-table">
610 <tr>
611 <td valign="top"><strong><?php _e('Automatic Backing Up Of DB:', 'wp-dbmanager'); ?></strong></td>
612 <td>
613 <?php
614 _e('Next backup date: ', 'wp-dbmanager');
615 if(wp_next_scheduled('dbmanager_cron_backup')) {
616 echo '<strong>'.mysql2date(sprintf(__('%s @ %s', 'wp-dbmanager'), get_option('date_format'), get_option('time_format')), gmdate('Y-m-d H:i:s', (wp_next_scheduled('dbmanager_cron_backup') + (get_option('gmt_offset') * 3600)))).'</strong>';
617 } else {
618 _e('N/A', 'wp-dbmanager');
619 }
620 ?>
621 <p>
622 <?php _e('Every', 'wp-dbmanager'); ?>&nbsp;<input type="text" name="db_backup" size="3" maxlength="5" value="<?php echo intval($backup_options['backup']); ?>" />&nbsp;
623 <select name="db_backup_period" size="1">
624 <option value="0"<?php selected('0', $backup_options['backup_period']); ?>><?php _e('Disable', 'wp-dbmanager'); ?></option>
625 <option value="60"<?php selected('60', $backup_options['backup_period']); ?>><?php _e('Minutes(s)', 'wp-dbmanager'); ?></option>
626 <option value="3600"<?php selected('3600', $backup_options['backup_period']); ?>><?php _e('Hour(s)', 'wp-dbmanager'); ?></option>
627 <option value="86400"<?php selected('86400', $backup_options['backup_period']); ?>><?php _e('Day(s)', 'wp-dbmanager'); ?></option>
628 <option value="604800"<?php selected('604800', $backup_options['backup_period']); ?>><?php _e('Week(s)', 'wp-dbmanager'); ?></option>
629 <option value="18144000"<?php selected('18144000', $backup_options['backup_period']); ?>><?php _e('Month(s)', 'wp-dbmanager'); ?></option>
630 </select>&nbsp;&nbsp;&nbsp;
631 <?php _e('Gzip', 'wp-dbmanager'); ?>
632 <select name="db_backup_gzip" size="1">
633 <option value="0"<?php selected('0', $backup_options['backup_gzip']); ?>><?php _e('No', 'wp-dbmanager'); ?></option>
634 <option value="1"<?php selected('1', $backup_options['backup_gzip']); ?>><?php _e('Yes', 'wp-dbmanager'); ?></option>
635 </select>
636 </p>
637 <p><?php _e('WP-DBManager can automatically backup your database after a certain period.', 'wp-dbmanager'); ?></p>
638 </td>
639 </tr>
640 <tr>
641 <td valign="top"><strong><?php _e('Automatic Optimizing Of DB:', 'wp-dbmanager'); ?></strong></td>
642 <td>
643 <?php
644 _e('Next optimize date: ', 'wp-dbmanager');
645 if(wp_next_scheduled('dbmanager_cron_optimize')) {
646 echo '<strong>'.mysql2date(sprintf(__('%s @ %s', 'wp-dbmanager'), get_option('date_format'), get_option('time_format')), gmdate('Y-m-d H:i:s', (wp_next_scheduled('dbmanager_cron_optimize') + (get_option('gmt_offset') * 3600)))).'</strong>';
647 } else {
648 _e('N/A', 'wp-dbmanager');
649 }
650 ?>
651 <p>
652 <?php _e('Every', 'wp-dbmanager'); ?>&nbsp;<input type="text" name="db_optimize" size="3" maxlength="5" value="<?php echo intval($backup_options['optimize']); ?>" />&nbsp;
653 <select name="db_optimize_period" size="1">
654 <option value="0"<?php selected('0', $backup_options['optimize_period']); ?>><?php _e('Disable', 'wp-dbmanager'); ?></option>
655 <option value="60"<?php selected('60', $backup_options['optimize_period']); ?>><?php _e('Minutes(s)', 'wp-dbmanager'); ?></option>
656 <option value="3600"<?php selected('3600', $backup_options['optimize_period']); ?>><?php _e('Hour(s)', 'wp-dbmanager'); ?></option>
657 <option value="86400"<?php selected('86400', $backup_options['optimize_period']); ?>><?php _e('Day(s)', 'wp-dbmanager'); ?></option>
658 <option value="604800"<?php selected('604800', $backup_options['optimize_period']); ?>><?php _e('Week(s)', 'wp-dbmanager'); ?></option>
659 <option value="18144000"<?php selected('18144000', $backup_options['optimize_period']); ?>><?php _e('Month(s)', 'wp-dbmanager'); ?></option>
660 </select>
661 </p>
662 <p><?php _e('WP-DBManager can automatically optimize your database after a certain period.', 'wp-dbmanager'); ?></p>
663 </td>
664 </tr>
665 <tr>
666 <td valign="top"><strong><?php _e('Automatic Repairing Of DB:', 'wp-dbmanager'); ?></strong></td>
667 <td>
668 <?php
669 _e('Next repair date: ', 'wp-dbmanager');
670 if(wp_next_scheduled('dbmanager_cron_repair')) {
671 echo '<strong>'.mysql2date(sprintf(__('%s @ %s', 'wp-dbmanager'), get_option('date_format'), get_option('time_format')), gmdate('Y-m-d H:i:s', (wp_next_scheduled('dbmanager_cron_repair') + (get_option('gmt_offset') * 3600)))).'</strong>';
672 } else {
673 _e('N/A', 'wp-dbmanager');
674 }
675 ?>
676 <p>
677 <?php _e('Every', 'wp-dbmanager'); ?>&nbsp;<input type="text" name="db_repair" size="3" maxlength="5" value="<?php echo intval($backup_options['repair']); ?>" />&nbsp;
678 <select name="db_repair_period" size="1">
679 <option value="0"<?php selected('0', $backup_options['repair_period']); ?>><?php _e('Disable', 'wp-dbmanager'); ?></option>
680 <option value="60"<?php selected('60', $backup_options['repair_period']); ?>><?php _e('Minutes(s)', 'wp-dbmanager'); ?></option>
681 <option value="3600"<?php selected('3600', $backup_options['repair_period']); ?>><?php _e('Hour(s)', 'wp-dbmanager'); ?></option>
682 <option value="86400"<?php selected('86400', $backup_options['repair_period']); ?>><?php _e('Day(s)', 'wp-dbmanager'); ?></option>
683 <option value="604800"<?php selected('604800', $backup_options['repair_period']); ?>><?php _e('Week(s)', 'wp-dbmanager'); ?></option>
684 <option value="18144000"<?php selected('18144000', $backup_options['repair_period']); ?>><?php _e('Month(s)', 'wp-dbmanager'); ?></option>
685 </select>
686 </p>
687 <p><?php _e('WP-DBManager can automatically repair your database after a certain period.', 'wp-dbmanager'); ?></p>
688 </td>
689 </tr>
690 </table>
691
692 <h3><?php _e('Backup Email Options', 'wp-dbmanager'); ?></h3>
693 <table class="form-table">
694 <tr>
695 <td valign="top"><strong><?php _e('To', 'wp-dbmanager'); ?></strong></td>
696 <td>
697 <p>
698 <input type="text" name="db_backup_email" size="30" maxlength="250" placeholder="<?php _e ( 'To E-mail', 'wp-dbmanager' ); ?>" value="<?php echo esc_attr( stripslashes( $backup_options['backup_email'] ) ) ?>" dir="ltr" />
699 </p>
700 <p><?php _e('(Leave blank to disable this feature)', 'wp-dbmanager'); ?></p>
701 </td>
702 </tr>
703 <tr>
704 <td valign="top"><strong><?php _e('From', 'wp-dbmanager'); ?></strong></td>
705 <td>
706 <p>
707 <input type="text" name="db_backup_email_from_name" size="60" maxlength="250" placeholder="<?php _e ( 'From Name', 'wp-dbmanager' ); ?>" value="<?php echo esc_attr( stripslashes( $backup_options['backup_email_from_name'] ) ) ?>" dir="ltr" />&nbsp;
708 &lt;<input type="text" name="db_backup_email_from" size="30" maxlength="250" placeholder="<?php _e ( 'From E-mail', 'wp-dbmanager' ); ?>" value="<?php echo esc_attr( stripslashes( $backup_options['backup_email_from'] ) ) ?>" dir="ltr" />&gt;
709 </p>
710 <p><?php _e('(Leave blank to use the default)', 'wp-dbmanager'); ?></p>
711 </td>
712 </tr>
713 <tr>
714 <td valign="top"><strong><?php _e('Subject:', 'wp-dbmanager'); ?></strong></td>
715 <td>
716 <p>
717 <input type="text" name="db_backup_email_subject" size="90" maxlength="255" placeholder="<?php _e ( 'Subject', 'wp-dbmanager' ); ?>" value="<?php echo esc_attr( stripslashes( $backup_options['backup_email_subject'] ) ) ?>" dir="ltr" />
718 </p>
719 <p><?php _e('(Leave blank to use the default)', 'wp-dbmanager'); ?></p>
720 </td>
721 </tr>
722 </table>
723
724 <h3><?php _e('Miscellaneous Options', 'wp-dbmanager'); ?></h3>
725 <table class="form-table">
726 <tr>
727 <td valign="top"><strong><?php _e('Hide Admin Notices', 'wp-dbmanager'); ?></strong></td>
728 <td>
729 <p>
730 <input type="radio" name="db_hide_admin_notices" value="1"<?php echo (intval( $backup_options['hide_admin_notices'] ) === 1 ? ' checked="checked"' : '' ); ?> />&nbsp;<?php _e('Yes', 'wp-dbmanager'); ?>
731 <input type="radio" name="db_hide_admin_notices" value="0"<?php echo (intval( $backup_options['hide_admin_notices'] ) === 0 ? ' checked="checked"' : '' ); ?> />&nbsp;<?php _e('No', 'wp-dbmanager'); ?>
732 </p>
733 </td>
734 </tr>
735 </table>
736
737 <p class="submit">
738 <input type="submit" name="Submit" class="button" value="<?php _e('Save Changes', 'wp-dbmanager'); ?>" />
739 </p>
740 </div>
741 </form>
742 <?php
743 }
744 ?>