updraftplus
Last commit date
addons
13 years ago
css
10 years ago
images
10 years ago
includes
10 years ago
languages
10 years ago
methods
10 years ago
vendor
10 years ago
admin.php
10 years ago
backup.php
10 years ago
class-updraftplus.php
10 years ago
class-zip.php
10 years ago
clean-composer.sh
10 years ago
composer.json
10 years ago
composer.lock
10 years ago
example-decrypt.php
10 years ago
index.html
10 years ago
options.php
10 years ago
readme.txt
10 years ago
restorer.php
10 years ago
updraftplus.php
10 years ago
options.php
184 lines
| 1 | <?php |
| 2 | |
| 3 | // Options handling |
| 4 | if (!defined('ABSPATH')) die ('No direct access allowed'); |
| 5 | |
| 6 | class UpdraftPlus_Options { |
| 7 | |
| 8 | public static function user_can_manage() { |
| 9 | $user_can_manage = current_user_can(apply_filters('option_page_capability_updraft-options-group', 'manage_options')); |
| 10 | // false: allows the filter to know that the request is not coming from the multisite add-on |
| 11 | return apply_filters('updraft_user_can_manage', $user_can_manage, false); |
| 12 | } |
| 13 | |
| 14 | public static function options_table() { |
| 15 | return 'options'; |
| 16 | } |
| 17 | |
| 18 | public static function admin_page_url() { |
| 19 | return admin_url('options-general.php'); |
| 20 | } |
| 21 | |
| 22 | public static function admin_page() { |
| 23 | return 'options-general.php'; |
| 24 | } |
| 25 | |
| 26 | public static function get_updraft_option($option, $default = null) { |
| 27 | return get_option($option, $default); |
| 28 | } |
| 29 | |
| 30 | // The apparently unused parameter is used in the alternative class in the Multisite add-on |
| 31 | public static function update_updraft_option($option, $value, $use_cache = true) { |
| 32 | return update_option($option, $value); |
| 33 | } |
| 34 | |
| 35 | public static function delete_updraft_option($option) { |
| 36 | delete_option($option); |
| 37 | } |
| 38 | |
| 39 | public static function add_admin_pages() { |
| 40 | global $updraftplus_admin; |
| 41 | add_submenu_page('options-general.php', 'UpdraftPlus', __('UpdraftPlus Backups','updraftplus'), apply_filters('option_page_capability_updraft-options-group', 'manage_options'), "updraftplus", array($updraftplus_admin, "settings_output")); |
| 42 | } |
| 43 | |
| 44 | public static function options_form_begin($settings_fields = 'updraft-options-group', $allow_autocomplete = true, $get_params = array()) { |
| 45 | global $pagenow; |
| 46 | echo '<form method="post"'; |
| 47 | |
| 48 | $page = ''; |
| 49 | if ('options-general.php' == $pagenow) $page="options.php"; |
| 50 | |
| 51 | if (!empty($get_params)) { |
| 52 | $page .= '?'; |
| 53 | $first_one = true; |
| 54 | foreach ($get_params as $k => $v) { |
| 55 | if ($first_one) { |
| 56 | $first_one = false; |
| 57 | } else { |
| 58 | $page .= '&'; |
| 59 | } |
| 60 | $page .= urlencode($k).'='.urlencode($v); |
| 61 | } |
| 62 | } |
| 63 | |
| 64 | if ($page) echo ' action="'.$page.'"'; |
| 65 | |
| 66 | if (!$allow_autocomplete) echo ' autocomplete="off"'; |
| 67 | echo '>'; |
| 68 | if ($settings_fields) { |
| 69 | // This is settings_fields('updraft-options-group'), but with the referer pruned |
| 70 | echo "<input type='hidden' name='option_page' value='" . esc_attr('updraft-options-group') . "' />"; |
| 71 | echo '<input type="hidden" name="action" value="update" />'; |
| 72 | // $action = -1, $name = "_wpnonce", $referer = true , $echo = true |
| 73 | wp_nonce_field("updraft-options-group-options", '_wpnonce', false); |
| 74 | |
| 75 | $remove_query_args = array('state', 'action', 'updraftcopycomparms', 'oauth_verifier'); |
| 76 | |
| 77 | // wp_unslash() does not exist until after WP 3.5 |
| 78 | if (function_exists('wp_unslash')) { |
| 79 | $referer = wp_unslash( remove_query_arg( $remove_query_args, $_SERVER['REQUEST_URI']) ); |
| 80 | } else { |
| 81 | $referer = stripslashes_deep( remove_query_arg( $remove_query_args, $_SERVER['REQUEST_URI']) ); |
| 82 | } |
| 83 | |
| 84 | // Add back the page parameter if it looks like we were on the settings page via an OAuth callback that has now had all parameters removed. This is likely unnecessarily conservative, but there's nothing requiring more than this at the current time. |
| 85 | if (substr($referer, -19, 19) == 'options-general.php' && false !== strpos($_SERVER['REQUEST_URI'], '?')) $referer .= '?page=updraftplus'; |
| 86 | |
| 87 | $referer_field = '<input type="hidden" name="_wp_http_referer" value="'. esc_attr($referer) . '" />'; |
| 88 | echo $referer_field; |
| 89 | } |
| 90 | } |
| 91 | |
| 92 | public static function admin_init() { |
| 93 | |
| 94 | global $updraftplus, $updraftplus_admin; |
| 95 | register_setting('updraft-options-group', 'updraft_interval', array($updraftplus, 'schedule_backup') ); |
| 96 | register_setting('updraft-options-group', 'updraft_interval_database', array($updraftplus, 'schedule_backup_database') ); |
| 97 | register_setting('updraft-options-group', 'updraft_interval_increments'); |
| 98 | register_setting('updraft-options-group', 'updraft_retain', array($updraftplus, 'retain_range') ); |
| 99 | register_setting('updraft-options-group', 'updraft_retain_db', array($updraftplus, 'retain_range') ); |
| 100 | register_setting('updraft-options-group', 'updraft_retain_extrarules' ); |
| 101 | |
| 102 | register_setting('updraft-options-group', 'updraft_encryptionphrase'); |
| 103 | register_setting('updraft-options-group', 'updraft_service', array($updraftplus, 'just_one')); |
| 104 | |
| 105 | register_setting('updraft-options-group', 'updraft_s3', array($updraftplus, 's3_sanitise')); |
| 106 | register_setting('updraft-options-group', 'updraft_ftp', array($updraftplus, 'ftp_sanitise')); |
| 107 | register_setting('updraft-options-group', 'updraft_dreamobjects'); |
| 108 | register_setting('updraft-options-group', 'updraft_s3generic'); |
| 109 | register_setting('updraft-options-group', 'updraft_cloudfiles'); |
| 110 | register_setting('updraft-options-group', 'updraft_bitcasa', array($updraftplus, 'bitcasa_checkchange')); |
| 111 | register_setting('updraft-options-group', 'updraft_copycom', array($updraftplus, 'copycom_checkchange')); |
| 112 | register_setting('updraft-options-group', 'updraft_openstack'); |
| 113 | register_setting('updraft-options-group', 'updraft_dropbox', array($updraftplus, 'dropbox_checkchange')); |
| 114 | register_setting('updraft-options-group', 'updraft_googledrive', array($updraftplus, 'googledrive_checkchange')); |
| 115 | register_setting('updraft-options-group', 'updraft_onedrive', array($updraftplus, 'onedrive_checkchange')); |
| 116 | register_setting('updraft-options-group', 'updraft_azure', array($updraftplus, 'azure_checkchange')); |
| 117 | register_setting('updraft-options-group', 'updraft_googlecloud', array($updraftplus, 'googlecloud_checkchange')); |
| 118 | |
| 119 | register_setting('updraft-options-group', 'updraft_sftp_settings'); |
| 120 | register_setting('updraft-options-group', 'updraft_webdav_settings', array($updraftplus, 'replace_http_with_webdav')); |
| 121 | |
| 122 | register_setting('updraft-options-group', 'updraft_ssl_nossl', 'absint'); |
| 123 | register_setting('updraft-options-group', 'updraft_log_syslog', 'absint'); |
| 124 | register_setting('updraft-options-group', 'updraft_ssl_useservercerts', 'absint'); |
| 125 | register_setting('updraft-options-group', 'updraft_ssl_disableverify', 'absint'); |
| 126 | |
| 127 | register_setting('updraft-options-group', 'updraft_split_every', array($updraftplus_admin, 'optionfilter_split_every') ); |
| 128 | |
| 129 | register_setting('updraft-options-group', 'updraft_dir', array($updraftplus_admin, 'prune_updraft_dir_prefix') ); |
| 130 | register_setting('updraft-options-group', 'updraft_email', array($updraftplus, 'just_one_email')); |
| 131 | |
| 132 | register_setting('updraft-options-group', 'updraft_report_warningsonly', array($updraftplus_admin, 'return_array')); |
| 133 | register_setting('updraft-options-group', 'updraft_report_wholebackup', array($updraftplus_admin, 'return_array')); |
| 134 | |
| 135 | register_setting('updraft-options-group', 'updraft_autobackup_default', 'absint' ); |
| 136 | register_setting('updraft-options-group', 'updraft_delete_local', 'absint' ); |
| 137 | register_setting('updraft-options-group', 'updraft_debug_mode', 'absint' ); |
| 138 | register_setting('updraft-options-group', 'updraft_extradbs'); |
| 139 | register_setting('updraft-options-group', 'updraft_backupdb_nonwp', 'absint'); |
| 140 | |
| 141 | register_setting('updraft-options-group', 'updraft_include_plugins', 'absint' ); |
| 142 | register_setting('updraft-options-group', 'updraft_include_themes', 'absint' ); |
| 143 | register_setting('updraft-options-group', 'updraft_include_uploads', 'absint' ); |
| 144 | register_setting('updraft-options-group', 'updraft_include_others', 'absint' ); |
| 145 | register_setting('updraft-options-group', 'updraft_include_wpcore', 'absint' ); |
| 146 | register_setting('updraft-options-group', 'updraft_include_wpcore_exclude', array($updraftplus, 'strip_dirslash')); |
| 147 | register_setting('updraft-options-group', 'updraft_include_more', 'absint' ); |
| 148 | register_setting('updraft-options-group', 'updraft_include_more_path', array($updraftplus, 'remove_empties')); |
| 149 | register_setting('updraft-options-group', 'updraft_include_uploads_exclude', array($updraftplus, 'strip_dirslash')); |
| 150 | register_setting('updraft-options-group', 'updraft_include_others_exclude', array($updraftplus, 'strip_dirslash')); |
| 151 | |
| 152 | register_setting('updraft-options-group', 'updraft_starttime_files', array('UpdraftPlus_Options', 'hourminute') ); |
| 153 | register_setting('updraft-options-group', 'updraft_starttime_db', array('UpdraftPlus_Options', 'hourminute') ); |
| 154 | |
| 155 | register_setting('updraft-options-group', 'updraft_startday_files', array('UpdraftPlus_Options', 'week_or_month_day') ); |
| 156 | register_setting('updraft-options-group', 'updraft_startday_db', array('UpdraftPlus_Options', 'week_or_month_day') ); |
| 157 | |
| 158 | global $pagenow; |
| 159 | if (is_multisite() && $pagenow == 'options-general.php' && isset($_REQUEST['page']) && 'updraftplus' == substr($_REQUEST['page'], 0, 11)) { |
| 160 | add_action('all_admin_notices', array('UpdraftPlus_Options', 'show_admin_warning_multisite') ); |
| 161 | } |
| 162 | } |
| 163 | |
| 164 | public static function hourminute($pot) { |
| 165 | if (preg_match("/^([0-2]?[0-9]):([0-5][0-9])$/", $pot, $matches)) return sprintf("%02d:%s", $matches[1], $matches[2]); |
| 166 | if ('' == $pot) return date('H:i', time()+300); |
| 167 | return '00:00'; |
| 168 | } |
| 169 | |
| 170 | public static function week_or_month_day($pot) { |
| 171 | $pot = absint($pot); |
| 172 | return ($pot>28) ? 1 : $pot; |
| 173 | } |
| 174 | |
| 175 | public static function show_admin_warning_multisite() { |
| 176 | global $updraftplus_admin; |
| 177 | $updraftplus_admin->show_admin_warning('<strong>'.__('UpdraftPlus warning:', 'updraftplus').'</strong> '.__('This is a WordPress multi-site (a.k.a. network) installation.', 'updraftplus').' <a href="https://updraftplus.com/shop/">'.__('WordPress Multisite is supported, with extra features, by UpdraftPlus Premium, or the Multisite add-on.', 'updraftplus').'</a> '.__('Without upgrading, UpdraftPlus allows <strong>every</strong> blog admin who can modify plugin settings to back up (and hence access the data, including passwords, from) and restore (including with customised modifications, e.g. changed passwords) <strong>the entire network</strong>.', 'updraftplus').' '.__('(This applies to all WordPress backup plugins unless they have been explicitly coded for multisite compatibility).', 'updraftplus'), 'error'); |
| 178 | } |
| 179 | |
| 180 | } |
| 181 | |
| 182 | add_action('admin_init', array('UpdraftPlus_Options', 'admin_init')); |
| 183 | add_action('admin_menu', array('UpdraftPlus_Options', 'add_admin_pages')); |
| 184 |