| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | <?php |
| 2 | 2 | /** |
| 3 | - * A class that adds a scan link to the admin sidebar. | |
| 3 | + * A class that adds a scan and backup link to the admin sidebar. | |
| 4 | 4 | * |
| 5 | 5 | * @package automattic/jetpack |
| 6 | 6 | */ |
| 7 | 7 | |
| @@ -7,8 +7,9 @@ | ||
| 7 | 7 | |
| 8 | 8 | namespace Automattic\Jetpack\Scan; |
| 9 | 9 | |
| 10 | 10 | use Automattic\Jetpack\Admin_UI\Admin_Menu; |
| 11 | +use Automattic\Jetpack\My_Jetpack\Products\Backup; | |
| 11 | 12 | use Automattic\Jetpack\Redirect; |
| 12 | 13 | use Automattic\Jetpack\Status\Host; |
| 13 | 14 | use Jetpack_Core_Json_Api_Endpoints; |
| 14 | 15 | |
| @@ -59,9 +60,9 @@ | ||
| 59 | 60 | add_action( self::SCHEDULE_ACTION_HOOK, array( $this, 'refresh_state_cache' ) ); |
| 60 | 61 | } |
| 61 | 62 | |
| 62 | 63 | /** |
| 63 | - * Adds a link to the Scan page. | |
| 64 | + * Adds a link to the Scan and Backup page. | |
| 64 | 65 | */ |
| 65 | 66 | public function maybe_add_admin_link() { |
| 66 | 67 | if ( ! $this->should_show_link() ) { |
| 67 | 68 | return; |
| @@ -94,15 +95,25 @@ | ||
| 94 | 95 | $position, |
| 95 | 96 | array( 'key' => 'jetpack-scan-cloud' ) |
| 96 | 97 | ); |
| 97 | 98 | } |
| 99 | + | |
| 100 | + if ( $this->should_show_backup() ) { | |
| 101 | + Admin_Menu::add_menu( | |
| 102 | + /** "VaultPress Backup" is a product name, do not translate. */ | |
| 103 | + 'VaultPress Backup', | |
| 104 | + 'VaultPress Backup <span aria-hidden="true">↗</span>', | |
| 105 | + 'manage_options', | |
| 106 | + esc_url( Redirect::get_url( 'calypso-backups' ) ), | |
| 107 | + null, | |
| 108 | + $position, | |
| 109 | + array( 'key' => 'jetpack-backup-cloud' ) | |
| 110 | + ); | |
| 111 | + } | |
| 98 | 112 | } |
| 99 | 113 | |
| 100 | 114 | /** |
| 101 | 115 | * Refreshes the state cache via API call. Called via cron. |
| 102 | - * | |
| 103 | - * Still warms the rewind state, which this class no longer reads itself: | |
| 104 | - * Jetpack_Core_Json_Api_Endpoints::rewind_data() serves it from that cache. | |
| 105 | 116 | */ |
| 106 | 117 | public function refresh_state_cache() { |
| 107 | 118 | Jetpack_Core_Json_Api_Endpoints::get_scan_state(); |
| 108 | 119 | Jetpack_Core_Json_Api_Endpoints::get_rewind_data(); |
| @@ -113,9 +124,9 @@ | ||
| 113 | 124 | * |
| 114 | 125 | * @return boolean |
| 115 | 126 | */ |
| 116 | 127 | private function should_show_link() { |
| 117 | - // Jetpack Scan is currently not supported on multisite. | |
| 128 | + // Jetpack Scan/Backup is currently not supported on multisite. | |
| 118 | 129 | if ( is_multisite() ) { |
| 119 | 130 | return false; |
| 120 | 131 | } |
| 121 | 132 | |
| @@ -124,9 +135,9 @@ | ||
| 124 | 135 | if ( class_exists( 'VaultPress' ) ) { |
| 125 | 136 | return false; |
| 126 | 137 | } |
| 127 | 138 | |
| 128 | - return $this->should_show_scan() || $this->should_show_scan_history_only(); | |
| 139 | + return $this->should_show_scan() || $this->should_show_backup() || $this->should_show_scan_history_only(); | |
| 129 | 140 | } |
| 130 | 141 | |
| 131 | 142 | /** |
| 132 | 143 | * Check if we should display the Scan menu item. |
| @@ -150,8 +161,19 @@ | ||
| 150 | 161 | return $this->has_scan() && ( new Host() )->is_woa_site() && get_option( 'wpcom_admin_interface' ) === 'wp-admin'; |
| 151 | 162 | } |
| 152 | 163 | |
| 153 | 164 | /** |
| 165 | + * Check if we should display the Backup menu item. | |
| 166 | + * | |
| 167 | + * It will only be displayed if site has Backup enabled and the stand-alone Backup plugin is not active, because it will have a menu item of its own. | |
| 168 | + * | |
| 169 | + * @return boolean | |
| 170 | + */ | |
| 171 | + private function should_show_backup() { | |
| 172 | + return $this->has_backup() && ! $this->has_backup_plugin(); | |
| 173 | + } | |
| 174 | + | |
| 175 | + /** | |
| 154 | 176 | * Detects if Scan is enabled. |
| 155 | 177 | * |
| 156 | 178 | * @return boolean |
| 157 | 179 | */ |
| @@ -171,8 +193,32 @@ | ||
| 171 | 193 | * @return boolean |
| 172 | 194 | */ |
| 173 | 195 | private function has_protect_plugin() { |
| 174 | 196 | return class_exists( 'Jetpack_Protect' ); |
| 197 | + } | |
| 198 | + | |
| 199 | + /** | |
| 200 | + * Detects if Backup is enabled. | |
| 201 | + * | |
| 202 | + * @return boolean | |
| 203 | + */ | |
| 204 | + private function has_backup() { | |
| 205 | + $this->maybe_refresh_transient_cache(); | |
| 206 | + $rewind_state = get_transient( 'jetpack_rewind_state' ); | |
| 207 | + if ( ! $rewind_state ) { | |
| 208 | + return false; | |
| 209 | + } | |
| 210 | + | |
| 211 | + return isset( $rewind_state->state ) && 'unavailable' !== $rewind_state->state; | |
| 212 | + } | |
| 213 | + | |
| 214 | + /** | |
| 215 | + * Detects if Backup plugin is active. | |
| 216 | + * | |
| 217 | + * @return boolean | |
| 218 | + */ | |
| 219 | + private function has_backup_plugin() { | |
| 220 | + return Backup::is_standalone_plugin_active(); | |
| 175 | 221 | } |
| 176 | 222 | |
| 177 | 223 | /** |
| 178 | 224 | * Triggers a cron job to refresh the Scan and Rewind state cache. |