PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3-a.1
Jetpack – WP Security, Backup, Speed, & Growth v16.3-a.1
16.3 16.3-beta 16.3-a.5 16.3-a.7 16.3-a.3 16.3-a.1 16.2 16.2-beta 12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 All 508 releases
← All changes | modules/scan/class-admin-sidebar-link.php +55 -11 16.3 → 16.3-a.1 View file →
@@ -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;
@@ -66,10 +67,8 @@
66 67 if ( ! $this->should_show_link() ) {
67 68 return;
68 69 }
69 70
70 - $position = defined( Admin_Menu::class . '::POSITION_EXTERNAL' ) ? Admin_Menu::POSITION_EXTERNAL : 100;
71 -
72 71 if ( $this->should_show_scan() ) {
73 72 Admin_Menu::add_menu(
74 73 /** "Scan" is a product name, do not translate. */
75 74 'Scan',
@@ -76,9 +75,9 @@
76 75 'Scan <span aria-hidden="true">↗</span>',
77 76 'manage_options',
78 77 esc_url( Redirect::get_url( 'cloud-scan-history-wp-menu' ) ),
79 78 null,
80 - $position,
79 + Admin_Menu::POSITION_EXTERNAL,
81 80 array( 'key' => 'jetpack-scan-cloud' )
82 81 );
83 82 }
84 83
@@ -90,19 +89,29 @@
90 89 'Scan <span aria-hidden="true">↗</span>',
91 90 'manage_options',
92 91 esc_url( Redirect::get_url( 'cloud-scan-history-wp-menu' ) ),
93 92 null,
94 - $position,
93 + Admin_Menu::POSITION_EXTERNAL,
95 94 array( 'key' => 'jetpack-scan-cloud' )
96 95 );
97 96 }
97 +
98 + if ( $this->should_show_backup() ) {
99 + Admin_Menu::add_menu(
100 + /** "VaultPress Backup" is a product name, do not translate. */
101 + 'VaultPress Backup',
102 + 'VaultPress Backup <span aria-hidden="true">↗</span>',
103 + 'manage_options',
104 + esc_url( Redirect::get_url( 'calypso-backups' ) ),
105 + null,
106 + Admin_Menu::POSITION_EXTERNAL,
107 + array( 'key' => 'jetpack-backup-cloud' )
108 + );
109 + }
98 110 }
99 111
100 112 /**
101 113 * 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 114 */
106 115 public function refresh_state_cache() {
107 116 Jetpack_Core_Json_Api_Endpoints::get_scan_state();
108 117 Jetpack_Core_Json_Api_Endpoints::get_rewind_data();
@@ -113,9 +122,9 @@
113 122 *
114 123 * @return boolean
115 124 */
116 125 private function should_show_link() {
117 - // Jetpack Scan is currently not supported on multisite.
126 + // Jetpack Scan/Backup is currently not supported on multisite.
118 127 if ( is_multisite() ) {
119 128 return false;
120 129 }
121 130
@@ -124,9 +133,9 @@
124 133 if ( class_exists( 'VaultPress' ) ) {
125 134 return false;
126 135 }
127 136
128 - return $this->should_show_scan() || $this->should_show_scan_history_only();
137 + return $this->should_show_scan() || $this->should_show_backup() || $this->should_show_scan_history_only();
129 138 }
130 139
131 140 /**
132 141 * Check if we should display the Scan menu item.
@@ -150,8 +159,19 @@
150 159 return $this->has_scan() && ( new Host() )->is_woa_site() && get_option( 'wpcom_admin_interface' ) === 'wp-admin';
151 160 }
152 161
153 162 /**
163 + * Check if we should display the Backup menu item.
164 + *
165 + * 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.
166 + *
167 + * @return boolean
168 + */
169 + private function should_show_backup() {
170 + return $this->has_backup() && ! $this->has_backup_plugin();
171 + }
172 +
173 + /**
154 174 * Detects if Scan is enabled.
155 175 *
156 176 * @return boolean
157 177 */
@@ -171,8 +191,32 @@
171 191 * @return boolean
172 192 */
173 193 private function has_protect_plugin() {
174 194 return class_exists( 'Jetpack_Protect' );
195 + }
196 +
197 + /**
198 + * Detects if Backup is enabled.
199 + *
200 + * @return boolean
201 + */
202 + private function has_backup() {
203 + $this->maybe_refresh_transient_cache();
204 + $rewind_state = get_transient( 'jetpack_rewind_state' );
205 + if ( ! $rewind_state ) {
206 + return false;
207 + }
208 +
209 + return isset( $rewind_state->state ) && 'unavailable' !== $rewind_state->state;
210 + }
211 +
212 + /**
213 + * Detects if Backup plugin is active.
214 + *
215 + * @return boolean
216 + */
217 + private function has_backup_plugin() {
218 + return Backup::is_standalone_plugin_active();
175 219 }
176 220
177 221 /**
178 222 * Triggers a cron job to refresh the Scan and Rewind state cache.