PluginProbe
MainWP Dashboard: Self-hosted WordPress Management for Agencies / 6.0.7
MainWP Dashboard: Self-hosted WordPress Management for Agencies v6.0.7
6.2 6.1.8 6.1.7 6.1.6 6.1.5 6.1.4 6.1.3 6.1.2 6.1.1 6.1 6.0.12 6.0.11 4.6.0.1 5.0 5.0.1 5.0.2 5.0.3 5.0.3.1 5.0.3.2 5.1 5.1.1 5.2 5.2.1 5.2.2 5.3 All 153 releases
mainwp / modules / api-backups / classes / class-api-backups-settings.php

class-api-backups-settings.php in MainWP Dashboard: Self-hosted WordPress Management for Agencies 6.0.7, at modules/api-backups/classes/class-api-backups-settings.php

1,465 lines 109.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * =======================================
4 * MainWP API Backups Admin
5 * =======================================
6 *
7 * @package MainWP\Dashboard
8 * @version 5.0
9 */
10
11 namespace MainWP\Dashboard\Module\ApiBackups;
12
13 use MainWP\Dashboard\MainWP_UI;
14 use MainWP\Dashboard\MainWP_Settings_Indicator;
15 use MainWP\Dashboard\MainWP_Settings;
16
17 // Exit if accessed directly.
18 if ( ! defined( 'ABSPATH' ) ) {
19 exit;
20 }
21
22 /**
23 * MainWP API Backups Admin
24 */
25 class Api_Backups_Settings {
26
27 /**
28 * Static variable to hold the single instance of the class.
29 *
30 * @static
31 *
32 * @var mixed Default null
33 */
34 public static $instance = null;
35
36 /**
37 * Get Instance
38 *
39 * Creates public static instance.
40 *
41 * @static
42 *
43 * @return Api_Backups_Settings
44 */
45 public static function get_instance() {
46 if ( null === static::$instance ) {
47 static::$instance = new self();
48 }
49 return static::$instance;
50 }
51
52 /**
53 * Method get_class_name()
54 *
55 * Get Class Name.
56 *
57 * @return string __CLASS__
58 */
59 public static function get_class_name() {
60 return __CLASS__;
61 }
62
63 /**
64 * Constructor
65 *
66 * Runs each time the class is called.
67 */
68 public function __construct() {
69 add_action( 'admin_init', array( &$this, 'admin_init' ) );
70 add_action( 'mainwp_manage_sites_edit', array( &$this, 'hook_render_mainwp_manage_sites_edit' ), 10, 2 );
71 add_action( 'mainwp_update_site', array( &$this, 'hook_mainwp_update_site' ), 10, 2 );
72 }
73
74 /**
75 * Initiate Hooks
76 *
77 * Initiates hooks for the API Backups extension.
78 */
79 public function admin_init() {
80 }
81
82 /**
83 * Render settings
84 *
85 * Renders the settings page.
86 */
87 public function render_settings_page() {
88
89 if ( ! \mainwp_current_user_can( 'dashboard', 'manage_api_backups' ) ) {
90 \mainwp_do_not_have_permissions( esc_html__( 'manage api backups', 'mainwp' ) );
91 return;
92 }
93
94 do_action( 'mainwp_pageheader_settings', 'ApiBackups' );
95
96 ?>
97 <div id="mainwp-module-log-settings-wrapper">
98 <?php
99 if ( isset( $_GET['message'] ) && ! empty( $_GET['message'] ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Recommended
100 $message = esc_html__( 'Settings saved.', 'mainwp' );
101 ?>
102 <div class="ui green message" id="mainwp-module-api-backups-message-zone" >
103 <?php echo esc_html( $message ); ?>
104 <i class="ui close icon"></i>
105 </div>
106 <?php
107 }
108 ?>
109 <form id="mainwp-module-api-backups-settings-form" method="post" action="admin.php?page=SettingsApiBackups" class="ui form">
110 <?php $this->render_settings_content(); ?>
111 </form>
112 </div>
113 <?php
114 do_action( 'mainwp_pagefooter_settings', 'ApiBackups' );
115 }
116
117 /**
118 * Render settings
119 *
120 * Renders the extension settings page.
121 *
122 * @param bool $individual Individual settings True|False.
123 */
124 public function render_settings_content( $individual = false ) {
125 static::render_3rd_party_api_manager( $individual );
126 }
127
128 /**
129 * Render 3rd party api settings
130 *
131 * Renders the extension settings page.
132 *
133 * @param bool $individual Individual settings True|False.
134 */
135 public static function render_3rd_party_api_manager( $individual = false ) { //phpcs:ignore -- NOSONAR - complex method.
136 $_nonce_slug = $individual ? 'cloudways_api_form_individual' : 'cloudways_api_form_general';
137 ?>
138 <div id="3rd-party-api-manager">
139 <div class="ui padded segment">
140
141 <div class="ui stackable grid">
142 <div class="sixteen wide column">
143 <div class="ui secondary pointing fluid menu">
144
145 <a class="item active" data-tab="cloudways">
146 <?php esc_html_e( 'Cloudways', 'mainwp' ); ?>
147 </a>
148 <a class="item" data-tab="gridpane">
149 <?php esc_html_e( 'GridPane', 'mainwp' ); ?>
150 </a>
151 <a class="item" data-tab="vultr">
152 <?php echo esc_html__( 'Vultr', 'mainwp' ); ?>
153 </a>
154 <a class="item" data-tab="linode">
155 <?php echo esc_html__( 'Akamai (Linode)', 'mainwp' ); ?>
156 </a>
157 <a class="item" data-tab="digitalocean">
158 <?php echo esc_html__( 'DigitalOcean', 'mainwp' ); ?>
159 </a>
160 <a class="item" data-tab="cpanel">
161 <?php echo esc_html__( 'cPanel (WP Toolkit)', 'mainwp' ); ?>
162 </a>
163 <a class="item" data-tab="plesk">
164 <?php echo esc_html__( 'Plesk (WP Toolkit)', 'mainwp' ); ?>
165 </a>
166 <a class="item" data-tab="kinsta">
167 <?php echo esc_html__( 'Kinsta', 'mainwp' ); ?>
168 </a>
169 </div>
170 </div>
171 <div class="sixteen wide column">
172 <?php if ( Api_Backups_Utility::show_mainwp_message( 'mainwp-module-api-backups-manager-info-message' ) ) : ?>
173 <div class="ui blue message">
174 <i class="close icon mainwp-notice-dismiss" notice-id="mainwp-module-api-backups-manager-info-message"></i>
175 <?php
176 printf(
177 /* translators: %1$s: Opening HTML anchor tag, %2$s: Closing HTML anchor tag with icon */
178 esc_html__(
179 'This feature allows you to trigger and restore backups only for sites hosted on supported providers via their API. Backups cannot be created for sites hosted elsewhere or stored on these services if your site is not hosted with them. Check this %1$shelp document%2$s to see all available services & the endpoints that MainWP currently supports.',
180 'mainwp'
181 ),
182 '<a href="https://docs.mainwp.com/sites/backups/manage-backups#api-backups" target="_blank">', // NOSONAR - noopener - open safe.
183 '</a> <i class="external alternate icon"></i>'
184 );
185 ?>
186 <div class="ui hidden divider"></div>
187 <strong><?php esc_html_e( 'Note: VHM (Virtual Host Manager) is not supported.', 'mainwp' ); ?></strong> <?php esc_html_e( 'The purpose of having these global cPanel settings is to save you time when setting up per-site cPanel settings, which is particularly useful if you manage multiple child sites on the same cPanel account.', 'mainwp' ); ?>
188 </div>
189 <?php endif; ?>
190
191 <?php
192
193 $saved_settings = false;
194
195 if ( isset( $_POST['submit'] ) ) {
196 $old_settings = MainWP_Settings::get_all_settings_values();
197 }
198
199 // Save CloudWays Data.
200 //phpcs:disable WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
201 ?>
202 <?php if ( isset( $_POST['submit'] ) && isset( $_POST['wp_nonce_cloudways'] ) && wp_verify_nonce( sanitize_key( $_POST['wp_nonce_cloudways'] ), 'cloudways_api_form_general' ) ) : ?>
203 <?php Api_Backups_Utility::update_option( 'mainwp_enable_cloudways_api', ( ! isset( $_POST['mainwp_enable_cloudways_api'] ) ? 0 : 1 ) ); ?>
204 <?php Api_Backups_Utility::update_option( 'mainwp_cloudways_api_account_email', ( isset( $_POST['mainwp_cloudways_api_account_email'] ) ? wp_unslash( $_POST['mainwp_cloudways_api_account_email'] ) : '' ) ); ?>
205 <?php Api_Backups_Utility::get_instance()->update_api_key( 'cloudways', ( isset( $_POST['mainwp_cloudways_api_key'] ) ? wp_unslash( $_POST['mainwp_cloudways_api_key'] ) : '' ) ); ?>
206 <div class="ui green message"><i class="close icon"></i><?php esc_html_e( 'API credentials have been successfully saved.', 'mainwp' ); ?></div>
207 <?php
208 Api_Backups_3rd_Party::cloudways_action_update_ids();
209 $saved_settings = true;
210 ?>
211 <?php endif; ?>
212 <?php // END Save CloudWays Data. ?>
213 <?php // Save GridPane Data. ?>
214 <?php if ( isset( $_POST['submit'] ) && isset( $_POST['wp_nonce_gridpane'] ) && wp_verify_nonce( sanitize_key( $_POST['wp_nonce_gridpane'] ), 'cloudways_api_form_general' ) ) : ?>
215 <?php Api_Backups_Utility::update_option( 'mainwp_enable_gridpane_api', ( ! isset( $_POST['mainwp_enable_gridpane_api'] ) ? 0 : 1 ) ); ?>
216 <?php Api_Backups_Utility::get_instance()->update_api_key( 'gridpane', ( isset( $_POST['mainwp_gridpane_api_key'] ) ? wp_unslash( $_POST['mainwp_gridpane_api_key'] ) : '' ) ); ?>
217 <div class="ui green message"><i class="close icon"></i><?php esc_html_e( 'API credentials have been successfully saved.', 'mainwp' ); ?></div>
218 <?php
219 Api_Backups_3rd_Party::gridpane_action_update_ids();
220 $saved_settings = true;
221 ?>
222 <?php endif; ?>
223 <?php // END Save GridPane Data. ?>
224 <?php // Save Vultr Data. ?>
225 <?php if ( isset( $_POST['submit'] ) && isset( $_POST['wp_nonce_vultr'] ) && wp_verify_nonce( sanitize_key( $_POST['wp_nonce_vultr'] ), 'cloudways_api_form_general' ) ) : ?>
226 <?php Api_Backups_Utility::update_option( 'mainwp_enable_vultr_api', ( ! isset( $_POST['mainwp_enable_vultr_api'] ) ? 0 : 1 ) ); ?>
227 <?php
228 Api_Backups_Utility::get_instance()->update_api_key( 'vultr', ( isset( $_POST['mainwp_vultr_api_key'] ) ? wp_unslash( $_POST['mainwp_vultr_api_key'] ) : '' ) );
229 $saved_settings = true;
230 ?>
231 <div class="ui green message"><i class="close icon"></i><?php esc_html_e( 'API credentials have been successfully saved.', 'mainwp' ); ?></div>
232 <?php endif; ?>
233 <?php // END Save Vultr Data. ?>
234 <?php // Save Linode Data. ?>
235 <?php if ( isset( $_POST['submit'] ) && isset( $_POST['wp_nonce_linode'] ) && wp_verify_nonce( sanitize_key( $_POST['wp_nonce_linode'] ), 'cloudways_api_form_general' ) ) : ?>
236 <?php Api_Backups_Utility::update_option( 'mainwp_enable_linode_api', ( ! isset( $_POST['mainwp_enable_linode_api'] ) ? 0 : 1 ) ); ?>
237 <?php
238 Api_Backups_Utility::get_instance()->update_api_key( 'linode', ( isset( $_POST['mainwp_linode_api_key'] ) ? wp_unslash( $_POST['mainwp_linode_api_key'] ) : '' ) );
239 $saved_settings = true;
240 ?>
241 <div class="ui green message"><i class="close icon"></i><?php esc_html_e( 'API credentials have been successfully saved.', 'mainwp' ); ?></div>
242 <?php endif; ?>
243 <?php // END Save Linode Data. ?>
244 <?php // Save DigitalOcean Data. ?>
245 <?php if ( isset( $_POST['submit'] ) && isset( $_POST['wp_nonce_digitalocean'] ) && wp_verify_nonce( sanitize_key( $_POST['wp_nonce_digitalocean'] ), 'cloudways_api_form_general' ) ) : ?>
246 <?php Api_Backups_Utility::update_option( 'mainwp_enable_digitalocean_api', ( ! isset( $_POST['mainwp_enable_digitalocean_api'] ) ? 0 : 1 ) ); ?>
247 <?php
248 Api_Backups_Utility::get_instance()->update_api_key( 'digitalocean', ( isset( $_POST['mainwp_digitalocean_api_key'] ) ? wp_unslash( $_POST['mainwp_digitalocean_api_key'] ) : '' ) );
249 $saved_settings = true;
250 ?>
251 <div class="ui green message"><i class="close icon"></i><?php esc_html_e( 'API credentials have been successfully saved.', 'mainwp' ); ?></div>
252 <?php endif; ?>
253 <?php // END Save Linode Data. ?>
254 <?php // Save cPanel Data. ?>
255 <?php if ( isset( $_POST['submit'] ) && isset( $_POST['wp_nonce_cpanel'] ) && wp_verify_nonce( sanitize_key( $_POST['wp_nonce_cpanel'] ), 'cloudways_api_form_general' ) ) : ?>
256 <?php Api_Backups_Utility::update_option( 'mainwp_enable_cpanel_api', ( ! isset( $_POST['mainwp_enable_cpanel_api'] ) ? 0 : 1 ) ); ?>
257 <?php Api_Backups_Utility::update_option( 'mainwp_cpanel_url', ( isset( $_POST['mainwp_cpanel_url'] ) ? wp_unslash( $_POST['mainwp_cpanel_url'] ) : '' ) ); ?>
258 <?php Api_Backups_Utility::update_option( 'mainwp_cpanel_site_path', ( isset( $_POST['mainwp_cpanel_site_path'] ) ? wp_unslash( $_POST['mainwp_cpanel_site_path'] ) : '' ) ); ?>
259 <?php Api_Backups_Utility::update_option( 'mainwp_cpanel_account_username', ( isset( $_POST['mainwp_cpanel_account_username'] ) ? wp_unslash( $_POST['mainwp_cpanel_account_username'] ) : '' ) ); ?>
260 <?php
261 Api_Backups_Utility::get_instance()->update_api_key( 'cpanel', ( isset( $_POST['mainwp_cpanel_account_password'] ) ? wp_unslash( $_POST['mainwp_cpanel_account_password'] ) : '' ) );
262 $saved_settings = true;
263 ?>
264 <div class="ui green message"><i class="close icon"></i><?php esc_html_e( 'API credentials have been successfully saved.', 'mainwp' ); ?></div>
265 <?php endif; ?>
266 <?php // END Save cPanel Data. ?>
267 <?php // Save Plesk Data. ?>
268 <?php if ( isset( $_POST['submit'] ) && isset( $_POST['wp_nonce_plesk'] ) && wp_verify_nonce( sanitize_key( $_POST['wp_nonce_plesk'] ), 'cloudways_api_form_general' ) ) : ?>
269 <?php Api_Backups_Utility::update_option( 'mainwp_enable_plesk_api', ( ! isset( $_POST['mainwp_enable_plesk_api'] ) ? 0 : 1 ) ); ?>
270 <?php Api_Backups_Utility::update_option( 'mainwp_plesk_api_url', ( isset( $_POST['mainwp_plesk_api_url'] ) ? wp_unslash( $_POST['mainwp_plesk_api_url'] ) : '' ) ); ?>
271 <?php
272 Api_Backups_Utility::get_instance()->update_api_key( 'plesk', ( isset( $_POST['mainwp_plesk_api_key'] ) ? wp_unslash( $_POST['mainwp_plesk_api_key'] ) : '' ) );
273 $saved_settings = true;
274 ?>
275 <?php
276 if ( isset( $_POST['mainwp_plesk_installation_id'] ) ) {
277 Api_Backups_Utility::update_option( 'mainwp_plesk_installation_id', sanitize_text_field( wp_unslash( $_POST['mainwp_plesk_installation_id'] ) ) );
278 }
279 ?>
280 <div class="ui green message"><i class="close icon"></i><?php esc_html_e( 'API credentials have been successfully saved.', 'mainwp' ); ?></div>
281 <?php endif; ?>
282 <?php // END Save Plesk Data. ?>
283 <?php // Save Kinsta Data. ?>
284 <?php if ( isset( $_POST['submit'] ) && isset( $_POST['wp_nonce'] ) && wp_verify_nonce( sanitize_key( $_POST['wp_nonce'] ), 'kinsta_api_form' ) ) : ?>
285 <?php Api_Backups_Utility::update_option( 'mainwp_enable_kinsta_api', ( ! isset( $_POST['mainwp_enable_kinsta_api'] ) ? 0 : 1 ) ); ?>
286 <?php Api_Backups_Utility::get_instance()->update_api_key( 'kinsta', ! empty( $_POST['mainwp_kinsta_api_key'] ) ? wp_unslash( $_POST['mainwp_kinsta_api_key'] ) : '' ); ?>
287 <?php Api_Backups_Utility::update_option( 'mainwp_kinsta_api_account_email', ( isset( $_POST['mainwp_kinsta_api_account_email'] ) ? wp_unslash( $_POST['mainwp_kinsta_api_account_email'] ) : '' ) ); ?>
288 <?php
289 Api_Backups_Utility::update_option( 'mainwp_kinsta_company_id', ( isset( $_POST['mainwp_kinsta_company_id'] ) ? wp_unslash( $_POST['mainwp_kinsta_company_id'] ) : '' ) );
290 $saved_settings = true;
291 ?>
292 <div class="ui green message"><i class="close icon"></i><?php esc_html_e( 'API credentials have been successfully saved.', 'mainwp' ); ?></div>
293 <?php endif; ?>
294 <?php // END Save Kinsta Data. ?>
295
296 <?php
297
298 if ( $saved_settings ) {
299 $new_settings = MainWP_Settings::get_all_settings_values();
300 /**
301 * Action: mainwp_after_save_settings
302 *
303 * Fires after save settings.
304 *
305 * @since 6.0
306 *
307 * @param array $new_settings The new settings.
308 * @param array $old_settings The old settings.
309 */
310 do_action( 'mainwp_after_save_settings', $new_settings, $old_settings );
311 }
312
313 ?>
314
315 <?php // Build Cloudways API Form. ?>
316 <div class="ui tab segment active" data-tab="cloudways">
317 <h3 class="ui dividing header">
318 <?php MainWP_Settings_Indicator::render_indicator( 'header', 'settings-field-indicator-cloudways-settings' ); ?>
319 <?php esc_html_e( 'Cloudways API Settings', 'mainwp' ); ?></h3>
320 <ul>
321 <li><?php /* translators: %s: HTML anchor link */ printf( esc_html__( "1. If you don't already have one, get a %s", 'mainwp' ), '<a target="_blank" href="https://mainwp.com/go/cloudways-mainwp/">Cloudways account</a>' ); // NOSONAR - noopener - open safe. ?></li>
322 <li><?php /* translators: %s: HTML anchor link */ printf( esc_html__( '2. Get your API Key from here: %s', 'mainwp' ), '<a target="_blank" href="https://platform.cloudways.com/api">https://platform.cloudways.com/api</a>' ); // NOSONAR - noopener - open safe. ?></li>
323 <li><?php esc_html_e( '3. Enter in your account email address and API Key below.', 'mainwp' ); ?></li>
324 </ul>
325 <div class="ui hidden divider"></div>
326 <div class="ui form">
327 <form method="POST" action="">
328 <?php
329 MainWP_UI::generate_wp_nonce( 'mainwp-admin-nonce' );
330 ?>
331 <input type="hidden" name="wp_nonce_cloudways" value="<?php echo esc_attr( wp_create_nonce( $_nonce_slug ) ); ?>" />
332 <?php
333 /**
334 * Action: cloudways_api_form_top
335 *
336 * Fires at the top of CloudWays API form.
337 *
338 * @since 4.1
339 */
340 do_action( 'cloudways_api_form_top' );
341 ?>
342 <div class="ui grid field settings-field-indicator-wrapper settings-field-indicator-cloudways-settings">
343 <label class="six wide column middle aligned">
344 <?php MainWP_Settings_Indicator::render_not_default_indicator( 'none_preset_value', get_option( 'mainwp_enable_cloudways_api', 0 ) ); ?>
345 <?php esc_html_e( 'Enable Cloudways API', 'mainwp' ); ?></label>
346 <div class="ten wide column ui toggle checkbox" data-tooltip="<?php esc_attr_e( 'If enabled, the Cloudways API will be activated.', 'mainwp' ); ?>" data-inverted="" data-position="bottom left">
347 <input type="checkbox" class="settings-field-value-change-handler" name="mainwp_enable_cloudways_api" id="mainwp_enable_cloudways_api" <?php echo 1 === (int) get_option( 'mainwp_enable_cloudways_api', 0 ) ? 'checked="true"' : ''; ?> />
348 </div>
349 </div>
350 <div class="ui grid field settings-field-indicator-wrapper settings-field-indicator-cloudways-settings">
351 <label class="six wide column middle aligned">
352 <?php
353 MainWP_Settings_Indicator::render_not_default_indicator( 'none_preset_value', get_option( 'mainwp_cloudways_api_account_email' ) );
354 esc_html_e( 'Account Email', 'mainwp' );
355 ?>
356 </label>
357 <div class="five wide column">
358 <input type="text" class="settings-field-value-change-handler" name="mainwp_cloudways_api_account_email" id="mainwp_cloudways_api_account_email" value="<?php echo false === get_option( 'mainwp_cloudways_api_account_email' ) ? '' : esc_attr( get_option( 'mainwp_cloudways_api_account_email' ) ); ?>" />
359 </div>
360 </div>
361 <?php
362 $_api_key = Api_Backups_3rd_Party::get_cloudways_api_key();
363 ?>
364 <div class="ui grid field settings-field-indicator-wrapper settings-field-indicator-cloudways-settings">
365 <label class="six wide column middle aligned">
366 <?php
367 MainWP_Settings_Indicator::render_not_default_indicator( 'none_preset_value', $_api_key );
368 esc_html_e( 'API Key', 'mainwp' );
369 ?>
370 </label>
371 <div class="five wide column">
372 <input type="password" class="settings-field-value-change-handler" name="mainwp_cloudways_api_key" id="mainwp_cloudways_api_key" value="<?php echo esc_attr( $_api_key ); ?>" />
373 </div>
374 </div>
375 <?php
376 /**
377 * Action: cloudways_api_form_bottom
378 *
379 * Fires at the bottom of CloudWays API form.
380 *
381 * @since 4.1
382 */
383 do_action( 'cloudways_api_form_bottom' );
384 $el_id_btn_sbm_1 = 'submit';
385 ?>
386 <div class="ui divider"></div>
387 <input type="submit" name="submit" id="<?php echo esc_attr( $el_id_btn_sbm_1 ); ?>" class="ui green big button" value="<?php esc_attr_e( 'Save Settings', 'mainwp' ); ?>"/>
388 <div style="clear:both"></div>
389 </form>
390 </div>
391 </div>
392
393 <div class="ui tab segment" data-tab="gridpane">
394 <h3 class="ui dividing header">
395 <?php MainWP_Settings_Indicator::render_indicator( 'header', 'settings-field-indicator-gridpane-settings' ); ?>
396 <?php esc_html_e( 'GridPane API Settings', 'mainwp' ); ?></h3>
397 <div class="ui info message"><?php /* translators: 1: Opening bold tag, 2: Closing bold tag */ printf( esc_html__( 'Must be the %1$sGridPane Owners Account%2$s &amp; have a %1$sDeveloper Plan or above%2$s in order to use this feature.', 'mainwp' ), '<b>', '</b>' ); ?></div>
398 <ul>
399 <li><?php /* translators: %s: HTML anchor link */ printf( esc_html__( "1. If you don't already have one, get a %s", 'mainwp' ), '<a target="_blank" href="https://mainwp.com/go/gridpane/">GridPane account</a>' ); // NOSONAR - noopener - open safe. ?></li>
400 <li><?php /* translators: 1: Opening bold tag, 2: Closing bold tag, 3: HTML anchor link */ printf( esc_html__( '2. Get your %1$sAPI Personal Access Token%2$s here: %3$s', 'mainwp' ), '<b>', '</b>', '<a target="_blank" href="https://my.gridpane.com/settings">https://my.gridpane.com/settings</a>' ); ?></li>
401 <li><?php /* translators: 1: Opening bold tag, 2: Closing bold tag */ printf( esc_html__( '3. %1$sClick GridPare API%2$s in the left hand menu &amp; %1$sCreate your Personal Access Token%2$s', 'mainwp' ), '<b>', '</b>' ); ?></li>
402 <li><?php /* translators: 1: Opening bold tag, 2: Closing bold tag */ printf( esc_html__( '4. Copy &amp; Paste your %1$sAPI Personal Access Token%2$s below', 'mainwp' ), '<b>', '</b>' ); ?></li>
403 </ul>
404 <div class="ui hidden divider settings-field-indicator-wrapper settings-field-indicator-gridpane-settings"></div>
405 <div class="ui form">
406 <form method="POST" action="">
407 <?php MainWP_UI::generate_wp_nonce( 'mainwp-admin-nonce' ); ?>
408 <input type="hidden" name="wp_nonce_gridpane" value="<?php echo esc_attr( wp_create_nonce( $_nonce_slug ) ); ?>" />
409 <?php
410 /**
411 * Action: gridpane_api_form_top
412 *
413 * Fires at the top of GridPane API form.
414 *
415 * @since 4.1
416 */
417 do_action( 'gridpane_api_form_top' );
418 ?>
419 <div class="ui grid field settings-field-indicator-wrapper settings-field-indicator-gridpane-settings">
420 <label class="six wide column middle aligned">
421 <?php
422 MainWP_Settings_Indicator::render_not_default_indicator( 'none_preset_value', get_option( 'mainwp_enable_gridpane_api', 0 ) );
423 esc_html_e( 'Enable GridPane API', 'mainwp' );
424 ?>
425 </label>
426 <div class="ten wide column ui toggle checkbox" data-tooltip="<?php esc_attr_e( 'If enabled, the GridPane API will be activated.', 'mainwp' ); ?>" data-inverted="" data-position="bottom left">
427 <input type="checkbox" class="settings-field-value-change-handler" name="mainwp_enable_gridpane_api" id="mainwp_enable_gridpane_api" <?php echo 1 === (int) get_option( 'mainwp_enable_gridpane_api', 0 ) ? 'checked="true"' : ''; ?> />
428 </div>
429 </div>
430 <div class="ui grid field settings-field-indicator-wrapper settings-field-indicator-gridpane-settings">
431 <label class="six wide column middle aligned">
432 <?php
433 $_api_key = Api_Backups_3rd_Party::get_gridpane_api_key();
434 MainWP_Settings_Indicator::render_not_default_indicator( 'none_preset_value', $_api_key );
435 esc_html_e( 'Personal Access Token', 'mainwp' );
436 ?>
437 </label>
438 <div class="five wide column">
439 <input type="password" class="settings-field-value-change-handler" name="mainwp_gridpane_api_key" id="mainwp_gridpane_api_key" value="<?php echo esc_attr( $_api_key ); ?>" />
440 </div>
441 </div>
442 <?php
443 /**
444 * Action: gridpane_api_form_bottom
445 *
446 * Fires at the bottom of GridPane API form.
447 *
448 * @since 4.1
449 */
450 do_action( 'gridpane_api_form_bottom' );
451 $el_id_btn_sbm_2 = 'submit';
452 ?>
453 <div class="ui divider"></div>
454 <input type="submit" name="submit" id="<?php echo esc_attr( $el_id_btn_sbm_2 ); ?>" class="ui green big button" value="<?php esc_attr_e( 'Save Settings', 'mainwp' ); ?>"/>
455 <div style="clear:both"></div>
456 </form>
457 </div>
458 </div>
459
460 <div class="ui tab segment" data-tab="vultr">
461 <h3 class="ui dividing header">
462 <?php MainWP_Settings_Indicator::render_indicator( 'header', 'settings-field-indicator-vultr-settings' ); ?>
463 <?php esc_html_e( 'Vultr API Settings', 'mainwp' ); ?>
464 </h3>
465 <ul>
466 <li><?php /* translators: %s: HTML anchor link */ printf( esc_html__( "1. If you don't already have one, get a %s", 'mainwp' ), '<a target="_blank" href="https://mainwp.com/go/vultr/">Vultr account</a>' ); // NOSONAR - noopener - open safe. ?></li>
467 <li><?php /* translators: 1: Opening bold tag, 2: Closing bold tag, 3: HTML anchor link */ printf( esc_html__( '2. Use this %3$s to find your MainWP Dashboard IP Address %1$s"Mask Bits"%2$s', 'mainwp' ), '<b>', '</b>', '<a target="_blank" href="https://www.vultr.com/resources/subnet-calculator/">Subnet Calculator Tool</a>' ); ?></b></li>
468 <li><?php /* translators: 1: Opening bold tag, 2: Closing bold tag, 3: HTML anchor link */ printf( esc_html__( '3. Navigate to %3$s and Whitelist your MainWP Dashboard %1$sIP/Mask Bits%2$s and %1$sActivate/Copy%2$s your %1$sAPI Key%2$s', 'mainwp' ), '<b>', '</b>', '<a target="_blank" href="https://my.vultr.com/settings/#settingsapi">Vultr API Settings</a>' ); ?></li>
469 <li><?php esc_html_e( '4. Paste in your account API Key below and click the Save Settings button.', 'mainwp' ); ?></li>
470 <li><?php esc_html_e( '5. Once the API is connected, go to the Site Edit page (for all sites on this host) and set the correct Provider and Instance ID.', 'mainwp' ); ?></li>
471 </ul>
472 <div class="ui hidden divider"></div>
473 <div class="ui form">
474 <form method="POST" action="">
475 <?php MainWP_UI::generate_wp_nonce( 'mainwp-admin-nonce' ); ?>
476 <input type="hidden" name="wp_nonce_vultr" value="<?php echo esc_attr( wp_create_nonce( $_nonce_slug ) ); ?>" />
477 <?php
478 /**
479 * Action: vultr_api_form_top
480 *
481 * Fires at the top of Vultr API form.
482 *
483 * @since 4.1
484 */
485 do_action( 'vultr_api_form_top' );
486 ?>
487 <div class="ui grid field settings-field-indicator-wrapper settings-field-indicator-vultr-settings">
488 <label class="six wide column middle aligned">
489 <?php
490 MainWP_Settings_Indicator::render_not_default_indicator( 'none_preset_value', get_option( 'mainwp_enable_vultr_api', 0 ) );
491 esc_html_e( 'Enable Vultr API', 'mainwp' );
492 ?>
493 </label>
494 <div class="ten wide column ui toggle checkbox" data-tooltip="<?php esc_attr_e( 'If enabled, the Vultr API will be activated.', 'mainwp' ); ?>" data-inverted="" data-position="bottom left">
495 <input type="checkbox" class="settings-field-value-change-handler" name="mainwp_enable_vultr_api" id="mainwp_enable_vultr_api" <?php echo 1 === (int) get_option( 'mainwp_enable_vultr_api', 0 ) ? 'checked="true"' : ''; ?> />
496 </div>
497 </div>
498 <div class="ui grid field settings-field-indicator-wrapper settings-field-indicator-vultr-settings">
499 <label class="six wide column middle aligned">
500 <?php
501 $_api_key = Api_Backups_3rd_Party::get_vultr_api_key();
502 MainWP_Settings_Indicator::render_not_default_indicator( 'none_preset_value', $_api_key );
503 esc_html_e( 'API Key', 'mainwp' );
504 ?>
505 </label>
506 <div class="five wide column">
507 <input type="password" class="settings-field-value-change-handler" name="mainwp_vultr_api_key" id="mainwp_vultr_api_key" value="<?php echo esc_attr( $_api_key ); ?>" />
508 </div>
509 </div>
510 <?php
511 /**
512 * Action: vultr_api_form_bottom
513 *
514 * Fires at the bottom of Vultr API form.
515 *
516 * @since 4.1
517 */
518 do_action( 'vultr_api_form_bottom' );
519 $el_id_sbm_btn_1 = 'submit';
520 ?>
521 <div class="ui divider"></div>
522 <input type="submit" name="submit" id="<?php echo esc_attr( $el_id_sbm_btn_1 ); ?>" class="ui green big button" value="<?php esc_attr_e( 'Save Settings', 'mainwp' ); ?>"/>
523 <div style="clear:both"></div>
524 </form>
525 </div>
526 </div>
527
528 <div class="ui tab segment" data-tab="linode">
529 <h3 class="ui dividing header">
530 <?php MainWP_Settings_Indicator::render_indicator( 'header', 'settings-field-indicator-linode-settings' ); ?>
531 <?php esc_html_e( 'Akamai (Linode) API Settings', 'mainwp' ); ?>
532 </h3>
533 <ul>
534 <li><?php /* translators: %s: HTML anchor link */ printf( esc_html__( "1. If you don't already have one, get a %s", 'mainwp' ), '<a target="_blank" href="https://mainwp.com/go/akamai-linode/">Akamai (Linode) account</a>' ); // NOSONAR - noopener - open safe. ?></li>
535 <li><?php /* translators: 1: Opening bold tag, 2: Closing bold tag, 3: HTML anchor link */ printf( esc_html__( '2. You may create a %1$sPersonal Access Token%2$s by navigating here: %3$s', 'mainwp' ), '<b>', '</b>', '<a target="_blank" href="https://cloud.linode.com/profile/tokens">https://cloud.linode.com/profile/tokens</a>' ); ?></b></li>
536 <li><?php /* translators: 1: Opening bold tag, 2: Closing bold tag */ printf( esc_html__( '3. Paste in your account %1$sPersonal Access Token%2$s below and click the Save Settings button.', 'mainwp' ), '<b>', '</b>' ); ?></li>
537 <li><?php esc_html_e( '4. Once the API is connected, go to the Site Edit page (for all sites on this host) and set the correct Provider and Instance ID.', 'mainwp' ); ?></li>
538 </ul>
539 <div class="ui hidden divider"></div>
540 <div class="ui form">
541 <form method="POST" action="">
542 <?php MainWP_UI::generate_wp_nonce( 'mainwp-admin-nonce' ); ?>
543 <input type="hidden" name="wp_nonce_linode" value="<?php echo esc_attr( wp_create_nonce( $_nonce_slug ) ); ?>" />
544 <?php
545 /**
546 * Action: linode_api_form_top
547 *
548 * Fires at the top of Vultr API form.
549 *
550 * @since 4.1
551 */
552 do_action( 'linode_api_form_top' );
553 ?>
554 <div class="ui grid field settings-field-indicator-wrapper settings-field-indicator-linode-settings">
555 <label class="six wide column middle aligned">
556 <?php
557 MainWP_Settings_Indicator::render_not_default_indicator( 'none_preset_value', get_option( 'mainwp_enable_linode_api', 0 ) );
558 esc_html_e( 'Enable Akamai (Linode) API', 'mainwp' );
559 ?>
560 </label>
561 <div class="ten wide column ui toggle checkbox" data-tooltip="<?php esc_attr_e( 'If enabled, the Akamai (Linode) API will be activated.', 'mainwp' ); ?>" data-inverted="" data-position="bottom left">
562 <input type="checkbox" class="settings-field-value-change-handler" name="mainwp_enable_linode_api" id="mainwp_enable_linode_api" <?php echo 1 === (int) get_option( 'mainwp_enable_linode_api', 0 ) ? 'checked="true"' : ''; ?> />
563 </div>
564 </div>
565 <?php
566 $_api_key = Api_Backups_3rd_Party::get_linode_api_key();
567 ?>
568 <div class="ui grid field settings-field-indicator-wrapper settings-field-indicator-linode-settings">
569 <label class="six wide column middle aligned">
570 <?php
571 MainWP_Settings_Indicator::render_not_default_indicator( 'none_preset_value', $_api_key );
572 esc_html_e( 'API Key', 'mainwp' );
573 ?>
574 </label>
575 <div class="five wide column">
576 <input type="password" class="settings-field-value-change-handler" name="mainwp_linode_api_key" id="mainwp_linode_api_key" value="<?php echo esc_attr( $_api_key ); ?>" />
577 </div>
578 </div>
579 <?php
580 /**
581 * Action: linode_api_form_bottom
582 *
583 * Fires at the bottom of Vultr API form.
584 *
585 * @since 4.1
586 */
587 do_action( 'linode_api_form_bottom' );
588 $el_id_btn_sbm_3 = 'submit';
589 ?>
590 <div class="ui divider"></div>
591 <input type="submit" name="submit" id="<?php echo esc_attr( $el_id_btn_sbm_3 ); ?>" class="ui green big button" value="<?php esc_attr_e( 'Save Settings', 'mainwp' ); ?>"/>
592 <div style="clear:both"></div>
593 </form>
594 </div>
595 </div>
596
597 <div class="ui tab segment" data-tab="digitalocean">
598 <h3 class="ui dividing header">
599 <?php MainWP_Settings_Indicator::render_indicator( 'header', 'settings-field-indicator-digitalocean-settings' ); ?>
600 <?php esc_html_e( 'DigitalOcean', 'mainwp' ); ?>
601 </h3>
602 <ul>
603 <li><?php /* translators: %s: HTML anchor link */ printf( esc_html__( "1. If you don't already have one, get a %s", 'mainwp' ), '<a target="_blank" href="https://mainwp.com/go/digital-ocean/">DigitalOcean account</a>' ); // NOSONAR - noopener - open safe. ?></li>
604 <li><?php /* translators: 1: Opening bold tag, 2: Closing bold tag, 3: HTML anchor link */ printf( esc_html__( '2. You can generate a %1$sPersonal Access Token%2$s by visiting the %3$s section of the DigitalOcean control panel for your account.', 'mainwp' ), '<b>', '</b>', '<a target="_blank" href="https://cloud.digitalocean.com/account/api/tokens">Apps & API</a>' ); ?></b></li>
605 <li><?php /* translators: 1: Opening bold tag, 2: Closing bold tag */ printf( esc_html__( '3. Paste in your %1$sPersonal Access Token%2$s below and click the Save Settings button.', 'mainwp' ), '<b>', '</b>' ); ?></li>
606 <li><?php esc_html_e( '4. Once the API is connected, go to the Site Edit page (for all sites on this host) and set the correct Provider and Instance ID.', 'mainwp' ); ?></li>
607 </ul>
608 <div class="ui hidden divider"></div>
609 <div class="ui form">
610 <form method="POST" action="">
611 <?php MainWP_UI::generate_wp_nonce( 'mainwp-admin-nonce' ); ?>
612 <input type="hidden" name="wp_nonce_digitalocean" value="<?php echo esc_attr( wp_create_nonce( $_nonce_slug ) ); ?>" />
613 <?php
614 /**
615 * Action: digitalocean_api_form_top
616 *
617 * Fires at the top of DigitalOcean API form.
618 *
619 * @since 4.1
620 */
621 do_action( 'digitalocean_api_form_top' );
622 ?>
623 <div class="ui grid field settings-field-indicator-wrapper settings-field-indicator-digitalocean-settings">
624 <label class="six wide column middle aligned">
625 <?php
626 MainWP_Settings_Indicator::render_not_default_indicator( 'none_preset_value', get_option( 'mainwp_enable_digitalocean_api', 0 ) );
627 esc_html_e( 'Enable DigitalOcean API', 'mainwp' );
628 ?>
629 </label>
630 <div class="ten wide column ui toggle checkbox" data-tooltip="<?php esc_attr_e( 'If enabled, the DigitalOcean API will be activated.', 'mainwp' ); ?>" data-inverted="" data-position="bottom left">
631 <input type="checkbox" class="settings-field-value-change-handler" name="mainwp_enable_digitalocean_api" id="mainwp_enable_digitalocean_api" <?php echo 1 === (int) get_option( 'mainwp_enable_digitalocean_api', 0 ) ? 'checked="true"' : ''; ?> />
632 </div>
633 </div>
634 <?php
635 $_api_key = Api_Backups_3rd_Party::get_digitalocean_api_key();
636 ?>
637 <div class="ui grid field settings-field-indicator-wrapper settings-field-indicator-digitalocean-settings">
638 <label class="six wide column middle aligned">
639 <?php
640 MainWP_Settings_Indicator::render_not_default_indicator( 'none_preset_value', $_api_key );
641 esc_html_e( 'API Key', 'mainwp' );
642 ?>
643 </label>
644 <div class="five wide column">
645 <input type="password" class="settings-field-value-change-handler" name="mainwp_digitalocean_api_key" id="mainwp_digitalocean_api_key" value="<?php echo esc_attr( $_api_key ); ?>" />
646 </div>
647 </div>
648 <?php
649 /**
650 * Action: digitalocean_api_form_bottom
651 *
652 * Fires at the bottom of DigitalOcean API form.
653 *
654 * @since 4.1
655 */
656 do_action( 'digitalocean_api_form_bottom' );
657 $el_id_btn_sbm_4 = 'submit';
658 ?>
659 <div class="ui divider"></div>
660 <input type="submit" name="submit" id="<?php echo esc_attr( $el_id_btn_sbm_4 ); ?>" class="ui green big button" value="<?php esc_attr_e( 'Save Settings', 'mainwp' ); ?>"/>
661 <div style="clear:both"></div>
662 </form>
663 </div>
664 </div>
665
666 <div class="ui tab segment" data-tab="cpanel">
667 <h3 class="ui dividing header">
668 <?php MainWP_Settings_Indicator::render_indicator( 'header', 'settings-field-indicator-cpanel-settings' ); ?>
669 <?php esc_html_e( 'cPanel (WP Toolkit)', 'mainwp' ); ?>
670 </h3>
671 <ul>
672 <li><?php esc_html_e( '1. Enter in your cPanel URL below. ( eg. https://my-site.com:2083 )', 'mainwp' ); ?></li>
673 <li><?php esc_html_e( '2. Enter in your cPanel account Username and Password below.', 'mainwp' ); ?></li>
674 <li><?php esc_html_e( 'This information can be provided by your Child Site&#39;s Host.', 'mainwp' ); ?></li>
675 </ul>
676 <div class="ui hidden divider"></div>
677 <div class="ui form">
678 <form method="POST" action="">
679 <?php MainWP_UI::generate_wp_nonce( 'mainwp-admin-nonce' ); ?>
680 <input type="hidden" name="wp_nonce_cpanel" value="<?php echo esc_attr( wp_create_nonce( $_nonce_slug ) ); ?>" />
681 <?php
682 /**
683 * Action: cpanel_api_form
684 *
685 * Fires at the top of cPanel API form.
686 *
687 * @since 4.1
688 */
689 do_action( 'cpanel_api_form' );
690 ?>
691 <div class="ui grid field settings-field-indicator-wrapper settings-field-indicator-cpanel-settings">
692 <label class="six wide column middle aligned">
693 <?php
694 MainWP_Settings_Indicator::render_not_default_indicator( 'none_preset_value', get_option( 'mainwp_enable_cpanel_api', 0 ) );
695 esc_html_e( 'Enable cPanel API', 'mainwp' );
696 ?>
697 </label>
698 <div class="ten wide column ui toggle checkbox" data-tooltip="<?php esc_attr_e( 'If enabled, the cPanel API will be activated.', 'mainwp' ); ?>" data-inverted="" data-position="bottom left">
699 <input type="checkbox" class="settings-field-value-change-handler" name="mainwp_enable_cpanel_api" id="mainwp_enable_cpanel_api" <?php echo 1 === (int) get_option( 'mainwp_enable_cpanel_api', 0 ) ? 'checked="true"' : ''; ?> />
700 </div>
701 </div>
702 <div class="ui grid field settings-field-indicator-wrapper settings-field-indicator-cpanel-settings">
703 <label class="six wide column middle aligned">
704 <?php
705 MainWP_Settings_Indicator::render_not_default_indicator( 'none_preset_value', get_option( 'mainwp_cpanel_url' ) );
706 esc_html_e( 'cPanel URL', 'mainwp' );
707 ?>
708 </label>
709 <div class="five wide column">
710 <input type="text" class="settings-field-value-change-handler" name="mainwp_cpanel_url" id="mainwp_cpanel_url" value="<?php echo false === get_option( 'mainwp_cpanel_url' ) ? '' : esc_attr( get_option( 'mainwp_cpanel_url' ) ); ?>" />
711 </div>
712 </div>
713 <div class="ui grid field settings-field-indicator-wrapper settings-field-indicator-cpanel-settings">
714 <label class="six wide column middle aligned">
715 <?php
716 MainWP_Settings_Indicator::render_not_default_indicator( 'none_preset_value', get_option( 'mainwp_cpanel_account_username' ) );
717 esc_html_e( 'Username', 'mainwp' );
718 ?>
719 </label>
720
721 <div class="five wide column">
722 <input type="text" class="settings-field-value-change-handler" name="mainwp_cpanel_account_username" id="mainwp_cpanel_account_username" value="<?php echo false === get_option( 'mainwp_cpanel_account_username' ) ? '' : esc_attr( get_option( 'mainwp_cpanel_account_username' ) ); ?>" />
723 </div>
724 </div>
725 <div class="ui grid field settings-field-indicator-wrapper settings-field-indicator-cpanel-settings">
726 <label class="six wide column middle aligned">
727 <?php
728 $_api_key = Api_Backups_3rd_Party::get_cpanel_account_password();
729 MainWP_Settings_Indicator::render_not_default_indicator( 'none_preset_value', $_api_key );
730 esc_html_e( 'Password', 'mainwp' );
731 ?>
732 </label>
733 <div class="five wide column">
734 <input type="password" class="settings-field-value-change-handler" name="mainwp_cpanel_account_password" id="mainwp_cpanel_account_password" value="<?php echo esc_attr( $_api_key ); ?>" />
735 </div>
736 </div>
737 <div class="ui grid field settings-field-indicator-wrapper settings-field-indicator-cpanel-settings">
738 <label class="six wide column middle aligned">
739 <?php
740 MainWP_Settings_Indicator::render_not_default_indicator( 'none_preset_value', get_option( 'mainwp_cpanel_site_path' ) );
741 esc_html_e( 'cPanel Site Path', 'mainwp' );
742 ?>
743 </label>
744 <div class="five wide column">
745 <input type="text" class="settings-field-value-change-handler" name="mainwp_cpanel_site_path" id="mainwp_cpanel_site_path" value="<?php echo false === get_option( 'mainwp_cpanel_site_path' ) ? '' : esc_attr( get_option( 'mainwp_cpanel_site_path' ) ); ?>" />
746 </div>
747 </div>
748 <?php
749 /**
750 * Action: cpanel_api_form_bottom
751 *
752 * Fires at the bottom of cPanel API form.
753 *
754 * @since 4.1
755 */
756 do_action( 'cpanel_api_form_bottom' );
757 $el_id_btn_sbm_5 = 'submit';
758 ?>
759 <div class="ui divider"></div>
760 <input type="submit" name="submit" id="<?php echo esc_attr( $el_id_btn_sbm_5 ); ?>" class="ui green big button" value="<?php esc_attr_e( 'Save Settings', 'mainwp' ); ?>"/>
761 <div style="clear:both"></div>
762 </form>
763 </div>
764 </div>
765
766 <div class="ui tab segment" data-tab="plesk">
767 <h3 class="ui dividing header">
768 <?php MainWP_Settings_Indicator::render_indicator( 'header', 'settings-field-indicator-plesk-settings' ); ?>
769 <?php esc_html_e( 'Plesk (WP Toolkit)', 'mainwp' ); ?>
770 </h3>
771 <ul>
772 <li><?php esc_html_e( '1. Login to your Plesk Account', 'mainwp' ); ?></li>
773 <li><?php esc_html_e( '2. Do a search for "Keychain for API Secret Keys" & install it.', 'mainwp' ); ?></li>
774 <li><?php esc_html_e( '3. Click Open > Click Add Secret Key > Add a description > Click OK', 'mainwp' ); ?></li>
775 <li><?php esc_html_e( '4. Copy & Paste your API Access Token below', 'mainwp' ); ?></li>
776 </ul>
777 <div class="ui hidden divider"></div>
778 <div class="ui form">
779 <form method="POST" action="">
780 <?php MainWP_UI::generate_wp_nonce( 'mainwp-admin-nonce' ); ?>
781 <input type="hidden" name="wp_nonce_plesk" value="<?php echo esc_attr( wp_create_nonce( $_nonce_slug ) ); ?>" />
782 <?php
783 /**
784 * Action: plesk_api_form_top
785 *
786 * Fires at the top of Plesk API form.
787 *
788 * @since 4.1
789 */
790 do_action( 'plesk_api_form_top' );
791 ?>
792 <div class="ui grid field settings-field-indicator-wrapper settings-field-indicator-plesk-settings">
793 <label class="six wide column middle aligned">
794 <?php
795 MainWP_Settings_Indicator::render_not_default_indicator( 'none_preset_value', get_option( 'mainwp_enable_plesk_api', 0 ) );
796 esc_html_e( 'Enable Plesk (WP Toolkit) API', 'mainwp' );
797 ?>
798 </label>
799 <div class="ten wide column ui toggle checkbox" data-tooltip="<?php esc_attr_e( 'If enabled, the Plesk API will be activated.', 'mainwp' ); ?>" data-inverted="" data-position="bottom left">
800 <input type="checkbox" class="settings-field-value-change-handler" name="mainwp_enable_plesk_api" id="mainwp_enable_plesk_api" <?php echo 1 === (int) get_option( 'mainwp_enable_plesk_api', 0 ) ? 'checked="true"' : ''; ?> />
801 </div>
802 </div>
803 <div class="ui grid field settings-field-indicator-wrapper settings-field-indicator-plesk-settings">
804 <label class="six wide column middle aligned">
805 <?php
806 MainWP_Settings_Indicator::render_not_default_indicator( 'none_preset_value', get_option( 'mainwp_plesk_api_url' ) );
807 esc_html_e( 'Plesk URL', 'mainwp' );
808 ?>
809 </label>
810 <div class="five wide column" data-tooltip="<?php esc_attr_e( 'eg.: https://epic-snyder.123-111-123-143.plesk.page:8443', 'mainwp' ); ?>">
811 <input type="text" class="settings-field-value-change-handler" name="mainwp_plesk_api_url" id="mainwp_plesk_api_url" value="<?php echo false === get_option( 'mainwp_plesk_api_url' ) ? '' : esc_attr( get_option( 'mainwp_plesk_api_url' ) ); ?>" />
812 </div>
813 </div>
814 <div class="ui grid field settings-field-indicator-wrapper settings-field-indicator-plesk-settings">
815 <label class="six wide column middle aligned">
816 <?php
817 $_api_key = Api_Backups_3rd_Party::get_plesk_api_key();
818 MainWP_Settings_Indicator::render_not_default_indicator( 'none_preset_value', $_api_key );
819 esc_html_e( 'API Key', 'mainwp' );
820 ?>
821 </label>
822 <div class="five wide column">
823 <input type="password" class="settings-field-value-change-handler" name="mainwp_plesk_api_key" id="mainwp_plesk_api_key" value="<?php echo esc_attr( $_api_key ); ?>" />
824 </div>
825 </div>
826 <?php
827 /**
828 * Action: plesk_api_form_bottom
829 *
830 * Fires at the bottom of Plesk API form.
831 *
832 * @since 4.1
833 */
834 do_action( 'plesk_api_form_bottom' );
835 $el_id_btn_sbm_7 = 'submit';
836 ?>
837 <div class="ui divider"></div>
838 <input type="submit" name="submit" id="<?php echo esc_attr( $el_id_btn_sbm_7 ); ?>" class="ui green big button" value="<?php esc_attr_e( 'Save Settings', 'mainwp' ); ?>"/>
839 <div style="clear:both"></div>
840 </form>
841 </div>
842 </div>
843
844 <div class="ui tab segment" data-tab="kinsta">
845 <h3 class="ui dividing header">
846 <?php MainWP_Settings_Indicator::render_indicator( 'header', 'settings-field-indicator-kinsta-settings' ); ?>
847 <?php esc_html_e( 'Kinsta', 'mainwp' ); ?>
848 </h3>
849 <ul>
850 <li><?php /* translators: %s: HTML anchor link */ printf( esc_html__( "1. If you don't already have one, get a %s", 'mainwp' ), '<a target="_blank" href="https://my.kinsta.com/">Kinsta account</a>' ); ?></li>
851 <li><?php /* translators: %1$s: HTML anchor link */ printf( esc_html__( '2. You can generate an API Key by visiting the %1$s tab of the Company Settings Page.', 'mainwp' ), '<a target="_blank" href="https://my.kinsta.com/company/apiKeys">API Keys</a>' ); ?></b></li>
852 <li><?php /* translators: 1: Opening bold tag, 2: Closing bold tag */ printf( esc_html__( '3. Paste in your %1$sCredentials%2$s below and click the Save Settings button.', 'mainwp' ), '<b>', '</b>' ); ?></li>
853 <li><?php esc_html_e( '4. Once the API is connected, go to the Site Edit page (for all sites on this host) and set the correct Provider and Environment ID.', 'mainwp' ); ?></li>
854 </ul>
855 <div class="ui hidden divider"></div>
856 <div class="ui form">
857 <form method="POST" action="">
858 <?php MainWP_UI::generate_wp_nonce( 'mainwp-admin-nonce' ); ?>
859 <input type="hidden" name="wp_nonce" value="<?php echo esc_attr( wp_create_nonce( 'kinsta_api_form' ) ); ?>" />
860 <?php
861 /**
862 * Action: kinsta_api_form_top
863 *
864 * Fires at the top of Kinsta API form.
865 *
866 * @since 4.1
867 */
868 do_action( 'kinsta_api_form_top' );
869 ?>
870 <div class="ui grid field settings-field-indicator-wrapper settings-field-indicator-kinsta-settings">
871 <label class="six wide column middle aligned">
872 <?php
873 MainWP_Settings_Indicator::render_not_default_indicator( 'none_preset_value', get_option( 'mainwp_enable_kinsta_api', 0 ) );
874 esc_html_e( 'Enable Kinsta API', 'mainwp' );
875 ?>
876 </label>
877 <div class="ten wide column ui toggle checkbox" data-tooltip="<?php esc_attr_e( 'If enabled, the Kinsta API will be activated.', 'mainwp' ); ?>" data-inverted="" data-position="bottom left">
878 <input type="checkbox" name="mainwp_enable_kinsta_api" id="mainwp_enable_kinsta_api" <?php echo ( 1 === (int) get_option( 'mainwp_enable_kinsta_api', 0 ) ) ? 'checked="true"' : ''; ?> />
879 </div>
880 </div>
881 <div class="ui grid field settings-field-indicator-wrapper settings-field-indicator-cloudways-settings">
882 <label class="six wide column middle aligned">
883 <?php
884 MainWP_Settings_Indicator::render_not_default_indicator( 'none_preset_value', get_option( 'mainwp_kinsta_api_account_email' ) );
885 esc_html_e( 'Account Email', 'mainwp' );
886 ?>
887 </label>
888 <div class="five wide column">
889 <input type="text" class="settings-field-value-change-handler" name="mainwp_kinsta_api_account_email" id="mainwp_kinsta_api_account_email" value="<?php echo false === get_option( 'mainwp_kinsta_api_account_email' ) ? '' : esc_attr( get_option( 'mainwp_kinsta_api_account_email' ) ); ?>" />
890 </div>
891 </div>
892 <div class="ui grid field settings-field-indicator-wrapper settings-field-indicator-kinsta-settings">
893 <label class="six wide column middle aligned">
894 <?php
895 MainWP_Settings_Indicator::render_not_default_indicator( 'none_preset_value', get_option( 'mainwp_kinsta_company_id' ) );
896 esc_html_e( 'Company ID', 'mainwp' );
897 ?>
898 </label>
899 <div class="five wide column">
900 <input type="text" class="settings-field-value-change-handler" name="mainwp_kinsta_company_id" id="mainwp_kinsta_company_id" value="<?php echo false === get_option( 'mainwp_kinsta_company_id' ) ? '' : esc_attr( get_option( 'mainwp_kinsta_company_id' ) ); ?>" />
901 </div>
902 </div>
903 <div class="ui grid field settings-field-indicator-wrapper settings-field-indicator-kinsta-settings">
904 <label class="six wide column middle aligned">
905 <?php
906 $_api_key = Api_Backups_3rd_Party::get_kinsta_api_key();
907 MainWP_Settings_Indicator::render_not_default_indicator( 'none_preset_value', $_api_key );
908 esc_html_e( 'API Key', 'mainwp' );
909 ?>
910 </label>
911 <div class="five wide column">
912 <input type="password" name="mainwp_kinsta_api_key" id="mainwp_kinsta_api_key" value="<?php echo esc_attr( $_api_key ); ?>" />
913 </div>
914 </div>
915
916 <?php
917 /**
918 * Action: kinsta_api_form_bottom
919 *
920 * Fires at the bottom of Kinsta API form.
921 *
922 * @since 4.1
923 */
924 do_action( 'kinsta_api_form_bottom' );
925 $el_id_btn_sbm_6 = 'submit';
926 ?>
927 <div class="ui divider"></div>
928 <input type="submit" name="submit" id="<?php echo esc_attr( $el_id_btn_sbm_6 ); ?>" class="ui green big button" value="<?php esc_attr_e( 'Save Settings', 'mainwp' ); ?>"/>
929 <div style="clear:both"></div>
930 </form>
931 </div>
932 </div>
933 </div>
934 </div>
935 </div>
936 </div>
937 <?php
938 }
939
940 /**
941 * Method hook_mainwp_update_site().
942 *
943 * @param int $website_id Website ID.
944 *
945 * @return void
946 */
947 public function hook_mainwp_update_site( $website_id ) { //phpcs:ignore -- NOSONAR - complex method.
948 /**
949 * 3rd-Party Backup API Provider Settings.
950 *
951 * Update Backup API Provider Settings ( Individual Child Site Edit Page ),
952 */
953
954 //phpcs:disable WordPress.Security.NonceVerification.Missing
955 if ( ! isset( $_POST['mainwp_managesites_edit_module_api_backups_provider'] ) ) {
956 return;
957 }
958
959 $api_backup_provider = isset( $_POST['mainwp_managesites_edit_module_api_backups_provider'] ) && ! empty( $_POST['mainwp_managesites_edit_module_api_backups_provider'] ) ? intval( $_POST['mainwp_managesites_edit_module_api_backups_provider'] ) : '';
960 $api_backup_provider_name = '';
961
962 if ( ! empty( $api_backup_provider ) ) {
963 if ( 1 === $api_backup_provider ) {
964 $api_backup_provider_name = 'DigitalOcean';
965 } elseif ( 2 === $api_backup_provider ) {
966 $api_backup_provider_name = 'Linode';
967 } elseif ( 3 === $api_backup_provider ) {
968 $api_backup_provider_name = 'Vultr';
969 } elseif ( 4 === $api_backup_provider ) {
970 $api_backup_provider_name = 'cPanel';
971 } elseif ( 5 === $api_backup_provider ) {
972 $api_backup_provider_name = 'Plesk';
973 } elseif ( 6 === $api_backup_provider ) {
974 $api_backup_provider_name = 'Kinsta';
975 }
976 }
977
978 // Store the 3rd Party Backup Provider.
979 Api_Backups_Helper::update_website_option( $website_id, 'mainwp_3rd_party_api', $api_backup_provider_name );
980
981 // Store the 3rd Party Backup Provider Instance ID.
982 $api_backup_instance_id = isset( $_POST['edit_site_module_api_backups_provider_instance_id'] ) ? sanitize_text_field( wp_unslash( $_POST['edit_site_module_api_backups_provider_instance_id'] ) ) : '';
983 Api_Backups_Helper::update_website_option( $website_id, 'mainwp_3rd_party_instance_id', $api_backup_instance_id );
984
985 // Store the cPanel Individual API URL.
986 $cpanel_api_url = isset( $_POST['cpanel_api_url'] ) ? wp_unslash( $_POST['cpanel_api_url'] ) : ''; //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
987 Api_Backups_Helper::update_website_option( $website_id, 'cpanel_api_url', $cpanel_api_url );
988
989 // Store cPanel Individual or Global toggle.
990 $mainwp_enable_wp_toolkit = isset( $_POST['mainwp_enable_wp_toolkit'] ) ? wp_unslash( $_POST['mainwp_enable_wp_toolkit'] ) : '0'; //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
991 Api_Backups_Helper::update_website_option( $website_id, 'mainwp_enable_wp_toolkit', $mainwp_enable_wp_toolkit );
992
993 // Store cPanel Individual or Global toggle.
994 $enable_cpanel_individual = isset( $_POST['mainwp_enable_cpanel_individual'] ) ? wp_unslash( $_POST['mainwp_enable_cpanel_individual'] ) : '0';//phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
995 Api_Backups_Helper::update_website_option( $website_id, 'mainwp_enable_cpanel_individual', $enable_cpanel_individual );
996
997 // Store cPanel Individual Account Username.
998 $cpanel_account_username = isset( $_POST['mainwp_cpanel_account_username'] ) ? wp_unslash( $_POST['mainwp_cpanel_account_username'] ) : ''; //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
999 Api_Backups_Helper::update_website_option( $website_id, 'cpanel_account_username', $cpanel_account_username );
1000
1001 // Store cPanel Individual Account Password.
1002 $cpanel_account_password = isset( $_POST['mainwp_cpanel_account_password'] ) ? wp_unslash( $_POST['mainwp_cpanel_account_password'] ) : ''; //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1003 Api_Backups_Utility::get_instance()->update_child_api_key( $website_id, 'cpanel', $cpanel_account_password );
1004
1005 // Store cPanel Individual Site Path.
1006 $cpanel_site_path = isset( $_POST['cpanel_site_path'] ) ? wp_unslash( $_POST['cpanel_site_path'] ) : ''; //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1007 Api_Backups_Helper::update_website_option( $website_id, 'cpanel_site_path', $cpanel_site_path );
1008
1009 // Store Plesk Individual or Global toggle.
1010 $enable_plesk_individual = isset( $_POST['mainwp_enable_plesk_individual'] ) ? wp_unslash( $_POST['mainwp_enable_plesk_individual'] ) : '0'; //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1011 Api_Backups_Helper::update_website_option( $website_id, 'mainwp_enable_plesk_individual', $enable_plesk_individual );
1012
1013 // Store Plesk Individual API URL.
1014 $plesk_api_url = isset( $_POST['plesk_api_url'] ) ? wp_unslash( $_POST['plesk_api_url'] ) : ''; //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1015 Api_Backups_Helper::update_website_option( $website_id, 'plesk_api_url', rtrim( $plesk_api_url, '/' ) );
1016
1017 // Store Plesk Individual Installation ID.
1018 $plesk_installation_id = isset( $_POST['plesk_installation_id'] ) ? wp_unslash( $_POST['plesk_installation_id'] ) : ''; //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1019 Api_Backups_Helper::update_website_option( $website_id, 'mainwp_plesk_installation_id', $plesk_installation_id );
1020
1021 // Store Plesk Individual API Key.
1022 $plesk_api_key = isset( $_POST['mainwp_plesk_api_key'] ) ? wp_unslash( $_POST['mainwp_plesk_api_key'] ) : ''; //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
1023 Api_Backups_Utility::get_instance()->update_child_api_key( $website_id, 'plesk', $plesk_api_key );
1024
1025 // Store Kinsta Individual or Global toggle.
1026 $enable_kinsta_individual = isset( $_POST['mainwp_enable_kinsta_individual'] ) ? wp_unslash( $_POST['mainwp_enable_kinsta_individual'] ) : '0';
1027 Api_Backups_Helper::update_website_option( $website_id, 'mainwp_enable_kinsta_individual', $enable_kinsta_individual );
1028
1029 // Store Kinsta Environment ID.
1030 $kinsta_environment_id = isset( $_POST['kinsta_environment_id'] ) ? wp_unslash( $_POST['kinsta_environment_id'] ) : '0';
1031 Api_Backups_Helper::update_website_option( $website_id, 'mainwp_kinsta_environment_id', $kinsta_environment_id );
1032
1033 // Store Kinsta Account Email.
1034 $kinsta_account_email = isset( $_POST['kinsta_account_email'] ) ? wp_unslash( $_POST['kinsta_account_email'] ) : '0';
1035 Api_Backups_Helper::update_website_option( $website_id, 'mainwp_kinsta_account_email', $kinsta_account_email );
1036
1037 // Store Kinsta Company ID.
1038 $kinsta_company_id = isset( $_POST['kinsta_company_id'] ) ? wp_unslash( $_POST['kinsta_company_id'] ) : '0';
1039 Api_Backups_Helper::update_website_option( $website_id, 'mainwp_kinsta_company_id', $kinsta_company_id );
1040
1041 // Store Kinsta Individual API Key.
1042 $kinsta_api_key = isset( $_POST['mainwp_kinsta_api_key'] ) ? wp_unslash( $_POST['mainwp_kinsta_api_key'] ) : '';
1043 Api_Backups_Utility::get_instance()->update_child_api_key( $website_id, 'kinsta', $kinsta_api_key );
1044 //phpcs:enable
1045 }
1046
1047 /**
1048 * Method hook_render_mainwp_manage_sites_edit().
1049 *
1050 * @param mixed $website Website.
1051 * @return mixed
1052 */
1053 public function hook_render_mainwp_manage_sites_edit( $website ) { //phpcs:ignore -- NOSONAR - complex method.
1054
1055 if ( empty( $website ) ) {
1056 return;
1057 }
1058
1059 $mainwp_3rd_party_api = '';
1060 $mainwp_3rd_party_instance_id = '';
1061 $mainwp_3rd_party_cloudways_app_id = '';
1062 $mainwp_3rd_party_cloudways_server_id = '';
1063 $mainwp_3rd_party_gridpane_site_id = '';
1064 $mainwp_cpanel_api_url = '';
1065 $mainwp_cpanel_site_path = '';
1066 $mainwp_cpanel_account_username = '';
1067 $mainwp_plesk_api_url = '';
1068
1069 $cpanel_account_password = '';
1070
1071 if ( is_object( $website ) && property_exists( $website, 'id' ) ) {
1072 $opts = Api_Backups_Helper::get_website_options(
1073 $website,
1074 array(
1075 'mainwp_3rd_party_api',
1076 'mainwp_3rd_party_instance_id',
1077 'mainwp_3rd_party_app_id',
1078 'mainwp_enable_wp_toolkit',
1079 'mainwp_enable_cpanel_individual',
1080 'mainwp_enable_plesk_individual',
1081 'mainwp_enable_kinsta_individual',
1082 'cpanel_api_url',
1083 'cpanel_site_path',
1084 'cpanel_account_username',
1085 'plesk_api_url',
1086 'mainwp_plesk_installation_id',
1087 'mainwp_kinsta_environment_id',
1088 'mainwp_kinsta_account_email',
1089 'mainwp_kinsta_company_id',
1090 )
1091 );
1092
1093 if ( is_array( $opts ) ) {
1094 $mainwp_3rd_party_api = isset( $opts['mainwp_3rd_party_api'] ) ? $opts['mainwp_3rd_party_api'] : '';
1095 $mainwp_3rd_party_instance_id = isset( $opts['mainwp_3rd_party_instance_id'] ) ? $opts['mainwp_3rd_party_instance_id'] : '';
1096 $mainwp_3rd_party_cloudways_app_id = isset( $opts['mainwp_3rd_party_app_id'] ) ? $opts['mainwp_3rd_party_app_id'] : '';
1097 $mainwp_3rd_party_cloudways_server_id = isset( $opts['mainwp_3rd_party_instance_id'] ) ? $opts['mainwp_3rd_party_instance_id'] : '';
1098 $mainwp_3rd_party_gridpane_site_id = isset( $opts['mainwp_3rd_party_instance_id'] ) ? $opts['mainwp_3rd_party_instance_id'] : '';
1099 $mainwp_enable_wp_toolkit = isset( $opts['mainwp_enable_wp_toolkit'] ) ? $opts['mainwp_enable_wp_toolkit'] : '0';
1100 $mainwp_enable_cpanel_individual = isset( $opts['mainwp_enable_cpanel_individual'] ) ? $opts['mainwp_enable_cpanel_individual'] : '0';
1101 $mainwp_enable_plesk_individual = isset( $opts['mainwp_enable_plesk_individual'] ) ? $opts['mainwp_enable_plesk_individual'] : '0';
1102 $mainwp_enable_kinsta_individual = isset( $opts['mainwp_enable_kinsta_individual'] ) ? $opts['mainwp_enable_kinsta_individual'] : '0';
1103 $mainwp_cpanel_api_url = isset( $opts['cpanel_api_url'] ) ? $opts['cpanel_api_url'] : '';
1104 $mainwp_cpanel_site_path = isset( $opts['cpanel_site_path'] ) ? $opts['cpanel_site_path'] : '';
1105 $mainwp_cpanel_account_username = isset( $opts['cpanel_account_username'] ) ? $opts['cpanel_account_username'] : '';
1106 $mainwp_plesk_api_url = isset( $opts['plesk_api_url'] ) ? $opts['plesk_api_url'] : '';
1107 $mainwp_plesk_installation_id = isset( $opts['mainwp_plesk_installation_id'] ) ? $opts['mainwp_plesk_installation_id'] : '';
1108 $mainwp_kinsta_environment_id = isset( $opts['mainwp_kinsta_environment_id'] ) ? $opts['mainwp_kinsta_environment_id'] : '';
1109 $mainwp_kinsta_account_email = isset( $opts['mainwp_kinsta_account_email'] ) ? $opts['mainwp_kinsta_account_email'] : '';
1110 $mainwp_kinsta_company_id = isset( $opts['mainwp_kinsta_company_id'] ) ? $opts['mainwp_kinsta_company_id'] : '';
1111 }
1112
1113 if ( empty( $mainwp_cpanel_api_url ) && ! empty( get_option( 'mainwp_cpanel_url' ) ) ) {
1114 $mainwp_cpanel_api_url = get_option( 'mainwp_cpanel_url' );
1115 }
1116
1117 if ( empty( $mainwp_cpanel_account_username ) && ! empty( get_option( 'mainwp_cpanel_account_username' ) ) ) {
1118 $mainwp_cpanel_account_username = get_option( 'mainwp_cpanel_account_username' );
1119 }
1120
1121 $cpanel_account_password = Api_Backups_Utility::get_instance()->get_child_api_key( $website, 'cpanel' );
1122 $_api_key = Api_Backups_3rd_Party::get_cpanel_account_password();
1123 if ( empty( $cpanel_account_password ) && ! empty( $_api_key ) ) {
1124 $cpanel_account_password = $_api_key;
1125 }
1126
1127 if ( empty( $mainwp_cpanel_site_path ) && ! empty( get_option( 'mainwp_cpanel_site_path' ) ) ) {
1128 $mainwp_cpanel_site_path = get_option( 'mainwp_cpanel_site_path' );
1129 }
1130 }
1131
1132 ?>
1133 <div class="ui basic accordion mainwp-blank-accordion mainwp-sidebar-accordion" id="mainwp-edit-site-backup-api-provider-settings-accordion">
1134 <h2 class="ui dividing header title">
1135 <i class="right dropdown icon"></i>
1136 <?php esc_html_e( 'Backup API Provider Settings', 'mainwp' ); ?>
1137 <div class="sub header"><?php esc_html_e( 'Use the provided settings to set your Backup API provider. Sites hosted on Cloudways and Gridpane do not require these settings.', 'mainwp' ); ?></div>
1138 <div class="sub header"><?php esc_html_e( 'Use these settings to select Provider and instance ID only if the site is hosted on DigitalOcean, Akamai (Linode), or Vultr hosting.', 'mainwp' ); ?></div>
1139 <div class="sub header"><?php esc_html_e( 'Sites hosted on Cloudways and GridPane do not require these settings to be added manually. All the necessary info for the feature will be obtained automatically so you can leave these settings blank.', 'mainwp' ); ?></div>
1140 </h2>
1141 <div class="content">
1142 <?php if ( '' === $mainwp_3rd_party_api || 'cPanel' === $mainwp_3rd_party_api || 'Plesk' === $mainwp_3rd_party_api || 'Kinsta' === $mainwp_3rd_party_api ) : ?>
1143 <div class="ui grid field settings-field-indicator-wrapper">
1144 <label class="six wide column middle aligned">
1145 <?php
1146 MainWP_Settings_Indicator::render_not_default_indicator( 'none_preset_value', $mainwp_3rd_party_api );
1147 ?>
1148 <?php esc_html_e( 'Choose a provider', 'mainwp' ); ?></label>
1149 <div class="ui six wide column" data-tooltip="<?php esc_attr_e( 'Detected provider', 'mainwp' ); ?>" data-inverted="" data-position="top left">
1150 <select class="ui dropdown settings-field-value-change-handler" id="mainwp_managesites_edit_module_api_backups_provider" name="mainwp_managesites_edit_module_api_backups_provider">
1151 <option <?php echo ( '' === $mainwp_3rd_party_api ) ? 'selected' : ''; ?> value="0"><?php esc_html_e( 'None', 'mainwp' ); ?></option>
1152 <option <?php echo ( 'DigitalOcean' === $mainwp_3rd_party_api ) ? 'selected' : ''; ?> value="1"><?php esc_html_e( 'DigitalOcean', 'mainwp' ); ?></option>
1153 <option <?php echo ( 'Linode' === $mainwp_3rd_party_api ) ? 'selected' : ''; ?> value="2"><?php esc_html_e( 'Akamai (Linode)', 'mainwp' ); ?></option>
1154 <option <?php echo ( 'Vultr' === $mainwp_3rd_party_api ) ? 'selected' : ''; ?> value="3"><?php esc_html_e( 'Vultr', 'mainwp' ); ?></option>
1155 <option <?php echo ( 'cPanel' === $mainwp_3rd_party_api ) ? 'selected' : ''; ?> value="4"><?php esc_html_e( 'cPanel (WP Toolkit)', 'mainwp' ); ?></option>
1156 <option <?php echo ( 'Plesk' === $mainwp_3rd_party_api ) ? 'selected' : ''; ?> value="5"><?php esc_html_e( 'Plesk (WP Toolkit)', 'mainwp' ); ?></option>
1157 <option <?php echo ( 'Kinsta' === $mainwp_3rd_party_api ) ? 'selected' : ''; ?> value="6"><?php esc_html_e( 'Kinsta', 'mainwp' ); ?></option>
1158 </select>
1159 </div>
1160 </div>
1161 <div class="mainwp_cpanel_menu_container" style="display:none;">
1162 <div class="ui grid field">
1163 <label class="six wide column middle aligned"><?php esc_html_e( 'Enable WP Toolkit API', 'mainwp' ); ?></label>
1164 <div id="enable_wp_toolkit_check" class="ten wide column ui toggle checkbox" data-tooltip="<?php esc_attr_e( 'If enabled, the WP Toolkit API will also be active.', 'mainwp' ); ?>" data-inverted="" data-position="bottom left">
1165 <input type="checkbox" name="mainwp_enable_wp_toolkit" id="mainwp_enable_wp_toolkit" <?php echo 'on' === $mainwp_enable_wp_toolkit ? 'checked="true"' : 'off'; ?> />
1166 </div>
1167 </div>
1168 <div class="ui grid field">
1169 <label class="six wide column middle aligned"><?php esc_html_e( 'Overwrite cPanel Global Settings', 'mainwp' ); ?></label>
1170 <div id="individual_settings_check" class="ten wide column ui toggle checkbox" data-tooltip="<?php esc_attr_e( 'If enabled, the cPanel Individual Settings will be used.', 'mainwp' ); ?>" data-inverted="" data-position="bottom left">
1171 <input type="checkbox" name="mainwp_enable_cpanel_individual" id="mainwp_enable_cpanel_individual" <?php echo 'on' === $mainwp_enable_cpanel_individual ? 'checked="true"' : 'off'; ?> />
1172 </div>
1173 </div>
1174 <div class="mainwp_cpanel_individual_container" style="display:none;">
1175 <div class="ui grid field">
1176 <label class="six wide column middle aligned"><?php esc_html_e( 'cPanel URL', 'mainwp' ); ?></label>
1177 <div class="ui six wide column" data-tooltip="<?php esc_attr_e( 'Enter the cPanel API URL. eg.: https://yoursite.com:2083', 'mainwp' ); ?>" data-inverted="" data-position="top left">
1178 <div class="ui left labeled input">
1179 <input type="text" id="cpanel_api_url" name="cpanel_api_url" value="<?php echo empty( $mainwp_cpanel_api_url ) ? '' : esc_attr( $mainwp_cpanel_api_url ); ?>" />
1180 </div>
1181 </div>
1182 </div>
1183 <div class="ui grid field">
1184 <label class="six wide column middle aligned"><?php esc_html_e( 'Username', 'mainwp' ); ?></label>
1185 <div class="ui six wide column" data-tooltip="<?php esc_attr_e( 'Enter the cPanel Account Username.', 'mainwp' ); ?>" data-inverted="" data-position="top left">
1186 <div class="ui left labeled input">
1187 <?php $el_id_int_un_1 = 'mainwp_cpanel_account_username'; ?>
1188 <input type="text" name="mainwp_cpanel_account_username" id="<?php echo esc_attr( $el_id_int_un_1 ); ?>" value="<?php echo empty( $mainwp_cpanel_account_username ) ? '' : esc_attr( $mainwp_cpanel_account_username ); ?>" />
1189 </div>
1190 </div>
1191 </div>
1192 <div class="ui grid field">
1193 <label class="six wide column middle aligned"><?php esc_html_e( 'Password', 'mainwp' ); ?></label>
1194 <div class="ui six wide column" data-tooltip="<?php esc_attr_e( 'Enter the cPanel Account Password.', 'mainwp' ); ?>" data-inverted="" data-position="top left">
1195 <div class="ui left labeled input">
1196 <input type="password" name="mainwp_cpanel_account_password" id="mainwp_cpanel_account_password" value="<?php echo esc_attr( $cpanel_account_password ); ?>" />
1197 </div>
1198 </div>
1199 </div>
1200 <div class="ui grid field">
1201 <label class="six wide column middle aligned"><?php esc_html_e( 'Site Path', 'mainwp' ); ?></label>
1202 <div class="ui six wide column" data-tooltip="<?php esc_attr_e( 'Enter the directory the site is installed. eg.: /public_html/child/', 'mainwp' ); ?>" data-inverted="" data-position="top left">
1203 <div class="ui left labeled input">
1204 <input type="text" id="cpanel_site_path" name="cpanel_site_path" value="<?php echo empty( $mainwp_cpanel_site_path ) ? '' : esc_attr( $mainwp_cpanel_site_path ); ?>" />
1205 </div>
1206 </div>
1207 </div>
1208 </div>
1209 </div>
1210 <div class="mainwp_plesk_menu_container" style="display:none;">
1211 <div class="ui grid field">
1212 <label class="six wide column middle aligned"><?php esc_html_e( 'Installation ID', 'mainwp' ); ?></label>
1213 <div class="ui six wide column" data-tooltip="<?php esc_attr_e( 'Enter the Plesk Installation ID. eg.: "1"', 'mainwp' ); ?>" data-inverted="" data-position="top left">
1214 <div class="ui left labeled input">
1215 <input type="text" id="plesk_installation_id" name="plesk_installation_id" value="<?php echo empty( $mainwp_plesk_installation_id ) ? '' : esc_html( $mainwp_plesk_installation_id ); ?>" />
1216 </div>
1217 </div>
1218 </div>
1219 <?php $el_id_ind_set_chk_1 = 'individual_settings_check'; ?>
1220 <div class="ui grid field">
1221 <label class="six wide column middle aligned"><?php esc_html_e( 'Overwrite Global Settings', 'mainwp' ); ?></label>
1222 <div id="<?php echo esc_attr( $el_id_ind_set_chk_1 ); ?>" class="ten wide column ui toggle checkbox" data-tooltip="<?php esc_attr_e( 'If enabled, the Plesk (WP Toolkit) Individual Settings will be used.', 'mainwp' ); ?>" data-inverted="" data-position="bottom left">
1223 <input type="checkbox" name="mainwp_enable_plesk_individual" id="mainwp_enable_plesk_individual" <?php echo 'on' === $mainwp_enable_plesk_individual ? 'checked="true"' : 'off'; ?> />
1224 </div>
1225 </div>
1226 <div class="mainwp_plesk_individual_container" style="display:none;">
1227 <div class="ui grid field">
1228 <label class="six wide column middle aligned"><?php esc_html_e( 'Plesk URL', 'mainwp' ); ?></label>
1229 <div class="ui six wide column" data-tooltip="<?php esc_attr_e( 'eg.: https://epic-snyder.123-111-123-143.plesk.page:8443', 'mainwp' ); ?>" data-inverted="" data-position="top left">
1230 <div class="ui left labeled input">
1231 <input type="text" id="plesk_api_url" name="plesk_api_url" value="<?php echo empty( $mainwp_plesk_api_url ) ? '' : esc_attr( $mainwp_plesk_api_url ); ?>" />
1232 </div>
1233 </div>
1234 </div>
1235 <div class="ui grid field">
1236 <label class="six wide column middle aligned"><?php esc_html_e( 'API Key', 'mainwp' ); ?></label>
1237 <div class="ui six wide column" data-tooltip="<?php esc_attr_e( 'Enter the Plesk API Key', 'mainwp' ); ?>" data-inverted="" data-position="top left">
1238 <div class="ui left labeled input">
1239 <?php
1240 $plesk_api_key = Api_Backups_Utility::get_instance()->get_child_api_key( $website, 'plesk' );
1241 ?>
1242 <input type="password" name="mainwp_plesk_api_key" id="mainwp_plesk_api_key" value="<?php echo esc_attr( $plesk_api_key ); ?>" />
1243 </div>
1244 </div>
1245 </div>
1246 </div>
1247 </div>
1248 <div class="mainwp_kinsta_menu_container" style="display:none;">
1249 <div class="ui grid field">
1250 <label class="six wide column middle aligned"><?php esc_html_e( 'Environment ID', 'mainwp' ); ?></label>
1251 <div class="ui six wide column" data-tooltip="<?php esc_attr_e( 'Enter the Kinsta Environment ID.', 'mainwp' ); ?>" data-inverted="" data-position="top left">
1252 <div class="ui left labeled input">
1253 <input type="text" id="kinsta_environment_id" name="kinsta_environment_id" value="<?php echo empty( $mainwp_kinsta_environment_id ) ? '' : esc_html( $mainwp_kinsta_environment_id ); ?>" />
1254 </div>
1255 </div>
1256 </div>
1257 <?php $el_id_ind_set_chk_2 = 'kinsta_individual_settings_check'; ?>
1258 <div class="ui grid field">
1259 <label class="six wide column middle aligned"><?php esc_html_e( 'Overwrite Global Settings', 'mainwp' ); ?></label>
1260 <div id="<?php echo esc_attr( $el_id_ind_set_chk_2 ); ?>" class="ten wide column ui toggle checkbox" data-tooltip="<?php esc_attr_e( 'If enabled, the Kinsta Individual Settings will be used.', 'mainwp' ); ?>" data-inverted="" data-position="bottom left">
1261 <input type="checkbox" name="mainwp_enable_kinsta_individual" id="mainwp_enable_kinsta_individual" <?php echo ( 'on' === $mainwp_enable_kinsta_individual ) ? 'checked="true"' : 'off'; ?> />
1262 </div>
1263 </div>
1264 <div class="mainwp_kinsta_individual_container" style="display:none;">
1265 <div class="ui grid field">
1266 <label class="six wide column middle aligned"><?php esc_html_e( 'Account Email', 'mainwp' ); ?></label>
1267 <div class="ui six wide column" data-tooltip="<?php esc_attr_e( 'Enter the Kinsta Account Email.', 'mainwp' ); ?>" data-inverted="" data-position="top left">
1268 <div class="ui left labeled input">
1269 <input type="text" id="kinsta_account_email" name="kinsta_account_email" value="<?php echo empty( $mainwp_kinsta_account_email ) ? '' : esc_html( $mainwp_kinsta_account_email ); ?>" />
1270 </div>
1271 </div>
1272 </div>
1273 <div class="ui grid field">
1274 <label class="six wide column middle aligned"><?php esc_html_e( 'Company ID', 'mainwp' ); ?></label>
1275 <div class="ui six wide column" data-tooltip="<?php esc_attr_e( 'Enter the Kinsta Company ID.', 'mainwp' ); ?>" data-inverted="" data-position="top left">
1276 <div class="ui left labeled input">
1277 <input type="text" id="kinsta_company_id" name="kinsta_company_id" value="<?php echo empty( $mainwp_kinsta_company_id ) ? '' : esc_html( $mainwp_kinsta_company_id ); ?>" />
1278 </div>
1279 </div>
1280 </div>
1281 <div class="ui grid field">
1282 <label class="six wide column middle aligned"><?php esc_html_e( 'API Key', 'mainwp' ); ?></label>
1283 <div class="ui six wide column" data-tooltip="<?php esc_attr_e( 'Enter the Kinsta API Key', 'mainwp' ); ?>" data-inverted="" data-position="top left">
1284 <div class="ui left labeled input">
1285 <?php
1286 $kinsta_api_key = Api_Backups_Utility::get_instance()->get_child_api_key( $website, 'kinsta' );
1287 ?>
1288 <input type="password" name="mainwp_kinsta_api_key" id="mainwp_kinsta_api_key" value="<?php echo esc_attr( $kinsta_api_key ); ?>" />
1289 </div>
1290 </div>
1291 </div>
1292 </div>
1293 </div>
1294 <div class="ui hidden divider"></div>
1295 <?php elseif ( 'DigitalOcean' === $mainwp_3rd_party_api || 'Linode' === $mainwp_3rd_party_api || 'Vultr' === $mainwp_3rd_party_api ) : ?>
1296 <div class="ui grid field settings-field-indicator-wrapper">
1297 <label class="six wide column middle aligned">
1298 <?php
1299 MainWP_Settings_Indicator::render_not_default_indicator( 'none_preset_value', $mainwp_3rd_party_api );
1300
1301 $el_id_api_bk_prov_sl_1 = 'mainwp_managesites_edit_module_api_backups_provider';
1302 ?>
1303 <?php esc_html_e( 'Choose a provider', 'mainwp' ); ?></label>
1304 <div class="ui six wide column" data-tooltip="<?php esc_attr_e( 'Detected provider', 'mainwp' ); ?>" data-inverted="" data-position="top left">
1305 <select class="ui dropdown settings-field-value-change-handler" id="<?php echo esc_attr( $el_id_api_bk_prov_sl_1 ); ?>" name="mainwp_managesites_edit_module_api_backups_provider">
1306 <option <?php echo ( '' === $mainwp_3rd_party_api ) ? 'selected' : ''; ?> value="0"><?php esc_html_e( 'None', 'mainwp' ); ?></option>
1307 <option <?php echo ( 'DigitalOcean' === $mainwp_3rd_party_api ) ? 'selected' : ''; ?> value="1"><?php esc_html_e( 'DigitalOcean', 'mainwp' ); ?></option>
1308 <option <?php echo ( 'Linode' === $mainwp_3rd_party_api ) ? 'selected' : ''; ?> value="2"><?php esc_html_e( 'Akamai (Linode)', 'mainwp' ); ?></option>
1309 <option <?php echo ( 'Vultr' === $mainwp_3rd_party_api ) ? 'selected' : ''; ?> value="3"><?php esc_html_e( 'Vultr', 'mainwp' ); ?></option>
1310 <option <?php echo ( 'cPanel' === $mainwp_3rd_party_api ) ? 'selected' : ''; ?> value="4"><?php esc_html_e( 'cPanel (WP Toolkit)', 'mainwp' ); ?></option>
1311 <option <?php echo ( 'Plesk' === $mainwp_3rd_party_api ) ? 'selected' : ''; ?> value="5"><?php esc_html_e( 'Plesk (WP Toolkit)', 'mainwp' ); ?></option>
1312 <option <?php echo ( 'Kinsta' === $mainwp_3rd_party_api ) ? 'selected' : ''; ?> value="6"><?php esc_html_e( 'Kinsta', 'mainwp' ); ?></option>
1313 </select>
1314 </div>
1315 </div>
1316 <?php $instance_id = $mainwp_3rd_party_instance_id; ?>
1317 <div class="ui grid field">
1318 <label class="six wide column middle aligned"><?php esc_html_e( 'Instance ID', 'mainwp' ); ?></label>
1319 <div class="ui six wide column" data-tooltip="<?php esc_attr_e( 'Enter the Instance ID (Droplet ID). This information is available in your provider account.', 'mainwp' ); ?>" data-inverted="" data-position="top left">
1320 <div class="ui left labeled input">
1321 <input type="text" id="edit_site_module_api_backups_provider_instance_id" name="edit_site_module_api_backups_provider_instance_id" value="<?php echo empty( $instance_id ) ? '' : esc_attr( $instance_id ); ?>" />
1322 </div>
1323 </div>
1324 </div>
1325 <?php elseif ( 'Cloudways' === $mainwp_3rd_party_api ) : ?>
1326 <div class="ui grid field settings-field-indicator-wrapper">
1327 <label class="six wide column middle aligned">
1328 <?php
1329 MainWP_Settings_Indicator::render_not_default_indicator( 'none_preset_value', $mainwp_3rd_party_api );
1330 ?>
1331 <?php esc_html_e( 'Choose a provider', 'mainwp' ); ?></label>
1332 <div class="ui six wide column" data-tooltip="<?php esc_attr_e( 'Detected provider', 'mainwp' ); ?>" data-inverted="" data-position="top left">
1333 <select class="ui disabled dropdown settings-field-value-change-handler">
1334 <option><?php esc_html_e( 'Cloudways', 'mainwp' ); ?></option>
1335 </select>
1336 </div>
1337 </div>
1338 <?php $app_id = $mainwp_3rd_party_cloudways_app_id; ?>
1339 <?php $server_id = $mainwp_3rd_party_cloudways_server_id; ?>
1340 <div class="ui grid field settings-field-indicator-wrapper">
1341 <label class="six wide column middle aligned">
1342 <?php
1343 MainWP_Settings_Indicator::render_not_default_indicator( 'none_preset_value', $app_id );
1344 ?>
1345 <?php esc_html_e( 'App ID', 'mainwp' ); ?></label>
1346 <div class="ui six wide column" data-tooltip="<?php esc_attr_e( 'Detected Cloudways site ID.', 'mainwp' ); ?>" data-inverted="" data-position="top left">
1347 <div class="ui left labeled input">
1348 <input type="text" class="settings-field-value-change-handler" disabled value="<?php echo esc_attr( $app_id ); ?>" />
1349 </div>
1350 </div>
1351 </div>
1352 <div class="ui grid field">
1353 <label class="six wide column middle aligned"><?php esc_html_e( 'Instance ID', 'mainwp' ); ?></label>
1354 <div class="ui six wide column" data-tooltip="<?php esc_attr_e( 'Detected Cloudways site ID.', 'mainwp' ); ?>" data-inverted="" data-position="top left">
1355 <div class="ui left labeled input">
1356 <input type="text" disabled value="<?php echo esc_attr( $server_id ); ?>" />
1357 </div>
1358 </div>
1359 </div>
1360 <?php elseif ( 'GridPane' === $mainwp_3rd_party_api ) : ?>
1361 <div class="ui grid field settings-field-indicator-wrapper">
1362 <label class="six wide column middle aligned">
1363 <?php
1364 MainWP_Settings_Indicator::render_not_default_indicator( 'none_preset_value', $mainwp_3rd_party_api );
1365 ?>
1366 <?php esc_html_e( 'Choose a provider', 'mainwp' ); ?></label>
1367 <div class="ui six wide column" data-tooltip="<?php esc_attr_e( 'Detected provider', 'mainwp' ); ?>" data-inverted="" data-position="top left">
1368 <select class="ui disabled dropdown settings-field-value-change-handler">
1369 <option><?php esc_html_e( 'GridPane (Developer or higher)', 'mainwp' ); ?></option>
1370 </select>
1371 </div>
1372 </div>
1373 <?php $instance_id = $mainwp_3rd_party_gridpane_site_id; ?>
1374 <div class="ui grid field">
1375 <label class="six wide column middle aligned"><?php esc_html_e( 'Instance ID', 'mainwp' ); ?></label>
1376 <div class="ui six wide column" data-tooltip="<?php esc_attr_e( 'Detected GridPane site ID.', 'mainwp' ); ?>" data-inverted="" data-position="top left">
1377 <div class="ui left labeled input">
1378 <input type="text" disabled value="<?php echo esc_attr( $instance_id ); ?>" />
1379 </div>
1380 </div>
1381 </div>
1382 <?php endif; ?>
1383 <script type="text/javascript">
1384 jQuery( document ).ready( function() {
1385
1386 // Check if cPanel or Plesk is selected when page loads.
1387 let dropdown_selection = jQuery("#mainwp_managesites_edit_module_api_backups_provider" ).val();
1388 if ( dropdown_selection === '4' ) {
1389 jQuery('.mainwp_cpanel_menu_container').show();
1390 jQuery('.mainwp_plesk_menu_container').hide();
1391 jQuery('.mainwp_kinsta_menu_container').hide();
1392 } else if ( dropdown_selection === '5' ) {
1393 jQuery('.mainwp_cpanel_menu_container').hide();
1394 jQuery('.mainwp_plesk_menu_container').show();
1395 jQuery('.mainwp_kinsta_menu_container').hide();
1396 } else if ( dropdown_selection === '6' ) {
1397 jQuery('.mainwp_cpanel_menu_container').hide();
1398 jQuery('.mainwp_plesk_menu_container').hide();
1399 jQuery('.mainwp_kinsta_menu_container').show();
1400 } else {
1401 jQuery('.mainwp_cpanel_menu_container').hide();
1402 jQuery('.mainwp_plesk_menu_container').hide();
1403 jQuery('.mainwp_kinsta_menu_container').hide();
1404 }
1405
1406 // Check if cPanel Individual Settings is :checked when page loads.
1407 if ( jQuery( "#mainwp_enable_cpanel_individual" ).is( ":checked" ) ) {
1408 jQuery('.mainwp_cpanel_individual_container').show();
1409 } else if ( jQuery( "#mainwp_enable_plesk_individual" ).is( ":checked" ) ) {
1410 jQuery('.mainwp_plesk_individual_container').show();
1411 } else if ( jQuery( "#mainwp_enable_kinsta_individual" ).is( ":checked" ) ) {
1412 jQuery('.mainwp_kinsta_individual_container').show();
1413 } else {
1414 jQuery('.mainwp_cpanel_individual_container').hide();
1415 jQuery('.mainwp_plesk_individual_container').hide();
1416 jQuery('.mainwp_kinsta_individual_container').hide();
1417 }
1418
1419 // Check which Provider is `selected` when using dropdown & show/hide the appropriate settings.
1420 jQuery( "#mainwp_managesites_edit_module_api_backups_provider" ).on( "change", function() {
1421
1422 let selected = jQuery(this).val();
1423
1424 if ( selected === '4' ) {
1425 jQuery('.mainwp_cpanel_menu_container').show();
1426 jQuery('.mainwp_plesk_menu_container').hide();
1427 jQuery('.mainwp_kinsta_menu_container').hide();
1428 } else if ( selected === '5' ) {
1429 jQuery('.mainwp_cpanel_menu_container').hide();
1430 jQuery('.mainwp_plesk_menu_container').show();
1431 jQuery('.mainwp_kinsta_menu_container').hide();
1432 } else if ( selected === '6' ) {
1433 jQuery('.mainwp_cpanel_menu_container').hide();
1434 jQuery('.mainwp_plesk_menu_container').hide();
1435 jQuery('.mainwp_kinsta_menu_container').show();
1436 } else {
1437 jQuery('.mainwp_cpanel_menu_container').hide();
1438 jQuery('.mainwp_plesk_menu_container').hide();
1439 jQuery('.mainwp_kinsta_menu_container').hide();
1440 }
1441 } );
1442
1443 // Toggle cPanel Individual Settings on/off when clicked.
1444 jQuery( "#mainwp_enable_cpanel_individual" ).on( "change", function() {
1445 jQuery('.mainwp_cpanel_individual_container').toggle();
1446 } );
1447
1448 // Toggle Plesk Individual Settings on/off when clicked.
1449 jQuery( "#mainwp_enable_plesk_individual" ).on( "change", function() {
1450 jQuery('.mainwp_plesk_individual_container').toggle();
1451 } );
1452
1453 // Toggle Plesk Individual Settings on/off when clicked.
1454 jQuery( "#mainwp_enable_kinsta_individual" ).on( "change", function() {
1455 jQuery('.mainwp_kinsta_individual_container').toggle();
1456 } );
1457
1458 } );
1459 </script>
1460 </div>
1461 </div>
1462 <?php
1463 } // [ END: hook_render_mainwp_manage_sites_edit ]
1464 } // [ END: class Api_Backups_Settings ]
1465