| 1 |
<?php |
| 2 |
/** |
| 3 |
* MainWP Setup Wizard |
| 4 |
* |
| 5 |
* MainWP Quick Setup Wizard enables you to quickly set basic plugin settings |
| 6 |
* |
| 7 |
* @package MainWP/Setup_Wizard |
| 8 |
*/ |
| 9 |
|
| 10 |
namespace MainWP\Dashboard; |
| 11 |
|
| 12 |
// Exit if accessed directly. |
| 13 |
if ( ! defined( 'ABSPATH' ) ) { |
| 14 |
exit; |
| 15 |
} |
| 16 |
|
| 17 |
/** |
| 18 |
* Copyright |
| 19 |
* Plugin: WooCommerce |
| 20 |
* Plugin URI: http://www.woothemes.com/woocommerce/ |
| 21 |
* Description: An e-commerce toolkit that helps you sell anything. Beautifully. |
| 22 |
* Version: 2.4.4 |
| 23 |
* Author: WooThemes |
| 24 |
* Author URI: http://woothemes.com |
| 25 |
*/ |
| 26 |
|
| 27 |
/** |
| 28 |
* Class MainWP_Setup_Wizard |
| 29 |
* |
| 30 |
* @package MainWP\Dashboard |
| 31 |
*/ |
| 32 |
class MainWP_Setup_Wizard { // phpcs:ignore Generic.Classes.OpeningBraceSameLine.ContentAfterBrace -- NOSONAR. |
| 33 |
|
| 34 |
/** |
| 35 |
* Private variable to hold current quick setup wizard step. |
| 36 |
* |
| 37 |
* @var string Current QSW step. |
| 38 |
*/ |
| 39 |
private $step = ''; |
| 40 |
|
| 41 |
/** |
| 42 |
* Private variable to hold quick setup wizard steps. |
| 43 |
* |
| 44 |
* @var array QSW steps. |
| 45 |
*/ |
| 46 |
private $steps = array(); |
| 47 |
|
| 48 |
/** |
| 49 |
* MainWP_Setup_Wizard constructor. |
| 50 |
* |
| 51 |
* Run each time the class is called. |
| 52 |
*/ |
| 53 |
public function __construct() { |
| 54 |
add_action( 'admin_menu', array( $this, 'admin_menus' ) ); |
| 55 |
add_action( 'admin_init', array( $this, 'admin_init' ), 999 ); |
| 56 |
} |
| 57 |
|
| 58 |
/** |
| 59 |
* Method get_instance(). |
| 60 |
*/ |
| 61 |
public static function get_instance() { |
| 62 |
return new self(); |
| 63 |
} |
| 64 |
|
| 65 |
/** |
| 66 |
* Method admin_menus() |
| 67 |
* |
| 68 |
* Add Quick Setup Wizard page. |
| 69 |
*/ |
| 70 |
public function admin_menus() { |
| 71 |
add_dashboard_page( '', '', 'manage_options', 'mainwp-setup', '' ); |
| 72 |
} |
| 73 |
|
| 74 |
/** |
| 75 |
* Medthod admin_init() |
| 76 |
* |
| 77 |
* Initiate Quick Setup Wizard page. |
| 78 |
*/ |
| 79 |
public function admin_init() { // phpcs:ignore -- NOSONAR - complex method. |
| 80 |
if ( empty( $_GET['page'] ) || 'mainwp-setup' !== $_GET['page'] ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized |
| 81 |
return; |
| 82 |
} |
| 83 |
$this->steps = array( |
| 84 |
'welcome' => array( |
| 85 |
'name' => esc_html__( 'Welcome', 'mainwp' ), |
| 86 |
'desc' => esc_html__( 'Welcome to MainWP!', 'mainwp' ), |
| 87 |
'view' => array( $this, 'mwp_setup_welcome' ), |
| 88 |
'handler' => '', |
| 89 |
), |
| 90 |
'introduction' => array( |
| 91 |
'name' => esc_html__( 'Introduction', 'mainwp' ), |
| 92 |
'desc' => esc_html__( 'How MainWP works', 'mainwp' ), |
| 93 |
'view' => array( $this, 'mwp_setup_introduction' ), |
| 94 |
'handler' => array( $this, 'mwp_setup_introduction_save' ), |
| 95 |
), |
| 96 |
'system_check' => array( |
| 97 |
'name' => esc_html__( 'System Check', 'mainwp' ), |
| 98 |
'desc' => esc_html__( 'Verify requirements', 'mainwp' ), |
| 99 |
'view' => array( $this, 'mwp_setup_system_requirements' ), |
| 100 |
'handler' => array( $this, 'mwp_setup_system_requirements_save' ), |
| 101 |
), |
| 102 |
'connect_first_site' => array( |
| 103 |
'name' => esc_html__( 'Add Site', 'mainwp' ), |
| 104 |
'desc' => esc_html__( 'Add your first site', 'mainwp' ), |
| 105 |
'view' => array( $this, 'mwp_setup_connect_first_site' ), |
| 106 |
'handler' => array( $this, 'mwp_setup_connect_first_site_save' ), |
| 107 |
), |
| 108 |
'add_client' => array( |
| 109 |
'name' => esc_html__( 'Add Client', 'mainwp' ), |
| 110 |
'desc' => esc_html__( 'Set up a client', 'mainwp' ), |
| 111 |
'view' => array( $this, 'mwp_setup_add_client' ), |
| 112 |
'handler' => '', |
| 113 |
), |
| 114 |
'monitoring' => array( |
| 115 |
'name' => esc_html__( 'Monitoring', 'mainwp' ), |
| 116 |
'desc' => esc_html__( 'Configure monitoring', 'mainwp' ), |
| 117 |
'view' => array( $this, 'mwp_setup_monitoring' ), |
| 118 |
'handler' => array( $this, 'mwp_setup_monitoring_save' ), |
| 119 |
), |
| 120 |
'next_steps' => array( |
| 121 |
'name' => esc_html__( 'Setup Complete!', 'mainwp' ), |
| 122 |
'desc' => esc_html__( 'You\'re all set!', 'mainwp' ), |
| 123 |
'view' => array( $this, 'mwp_setup_ready' ), |
| 124 |
'handler' => '', |
| 125 |
), |
| 126 |
); |
| 127 |
|
| 128 |
$this->step = isset( $_GET['step'] ) ? sanitize_key( $_GET['step'] ) : current( array_keys( $this->steps ) ); // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized |
| 129 |
|
| 130 |
wp_enqueue_script( 'fomantic-ui', MAINWP_PLUGIN_URL . 'assets/js/fomantic-ui/fomantic-ui.js', array( 'jquery' ), MAINWP_VERSION, false ); |
| 131 |
wp_localize_script( 'mainwp-setup', 'mainwpSetupLocalize', array( 'nonce' => wp_create_nonce( 'MainWPSetup' ) ) ); |
| 132 |
wp_enqueue_script( 'mainwp', MAINWP_PLUGIN_URL . 'assets/js/mainwp.js', array( 'jquery' ), MAINWP_VERSION, true ); |
| 133 |
wp_enqueue_script( 'mainwp-clients', MAINWP_PLUGIN_URL . 'assets/js/mainwp-clients.js', array(), MAINWP_VERSION, true ); |
| 134 |
wp_enqueue_script( 'mainwp-setup', MAINWP_PLUGIN_URL . 'assets/js/mainwp-setup.js', array( 'jquery', 'fomantic-ui' ), MAINWP_VERSION, true ); |
| 135 |
wp_enqueue_script( 'mainwp-import', MAINWP_PLUGIN_URL . 'assets/js/mainwp-managesites-import.js', array( 'jquery' ), MAINWP_VERSION, true ); |
| 136 |
wp_enqueue_script( 'mainwp-ui', MAINWP_PLUGIN_URL . 'assets/js/mainwp-ui.js', array(), MAINWP_VERSION, true ); |
| 137 |
wp_enqueue_style( 'mainwp', MAINWP_PLUGIN_URL . 'assets/css/mainwp.css', array(), MAINWP_VERSION ); |
| 138 |
wp_enqueue_style( 'mainwp-fonts', MAINWP_PLUGIN_URL . 'assets/css/mainwp-fonts.css', array(), MAINWP_VERSION ); |
| 139 |
wp_enqueue_style( 'fomantic', MAINWP_PLUGIN_URL . 'assets/js/fomantic-ui/fomantic-ui.css', array(), MAINWP_VERSION ); |
| 140 |
wp_enqueue_style( 'mainwp-fomantic', MAINWP_PLUGIN_URL . 'assets/css/mainwp-fomantic.css', array(), MAINWP_VERSION ); |
| 141 |
|
| 142 |
// load custom MainWP theme. |
| 143 |
$selected_theme = MainWP_Settings::get_instance()->get_selected_theme(); |
| 144 |
if ( ! empty( $selected_theme ) ) { |
| 145 |
if ( 'dark' === $selected_theme ) { |
| 146 |
wp_enqueue_style( 'mainwp-custom-dashboard-extension-dark-theme', MAINWP_PLUGIN_URL . 'assets/css/themes/mainwp-dark-theme.css', array(), MAINWP_VERSION ); |
| 147 |
} elseif ( 'wpadmin' === $selected_theme ) { |
| 148 |
wp_enqueue_style( 'mainwp-custom-dashboard-extension-wp-admin-theme', MAINWP_PLUGIN_URL . 'assets/css/themes/mainwp-wpadmin-theme.css', array(), MAINWP_VERSION ); |
| 149 |
} elseif ( 'minimalistic' === $selected_theme ) { |
| 150 |
wp_enqueue_style( 'mainwp-custom-dashboard-extension-minimalistic-theme', MAINWP_PLUGIN_URL . 'assets/css/themes/mainwp-minimalistic-theme.css', array(), MAINWP_VERSION ); |
| 151 |
} elseif ( 'default' === $selected_theme ) { |
| 152 |
wp_enqueue_style( 'mainwp-custom-dashboard-extension-default-theme', MAINWP_PLUGIN_URL . 'assets/css/themes/mainwp-default-theme.css', array(), MAINWP_VERSION ); |
| 153 |
} elseif ( 'default-dark' === $selected_theme ) { |
| 154 |
wp_enqueue_style( 'mainwp-custom-dashboard-extension-default-theme', MAINWP_PLUGIN_URL . 'assets/css/themes/mainwp-default-dark-theme.css', array(), MAINWP_VERSION ); |
| 155 |
} else { |
| 156 |
$dirs = MainWP_Settings::get_instance()->get_custom_theme_folder(); |
| 157 |
$custom_theme_url = $dirs[1]; |
| 158 |
wp_enqueue_style( 'mainwp-custom-dashboard-theme', $custom_theme_url . $selected_theme, array(), MAINWP_VERSION ); |
| 159 |
} |
| 160 |
} |
| 161 |
|
| 162 |
if ( ! empty( $_POST['save_step'] ) && isset( $this->steps[ $this->step ]['handler'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized |
| 163 |
call_user_func( $this->steps[ $this->step ]['handler'] ); |
| 164 |
} |
| 165 |
|
| 166 |
if ( MainWP_Utility::instance()->is_disabled_functions( 'error_log' ) || ! function_exists( '\error_log' ) ) { |
| 167 |
error_reporting(0); // phpcs:ignore -- try to disabled the error_log somewhere in WP. |
| 168 |
} |
| 169 |
|
| 170 |
ob_start(); |
| 171 |
$this->setup_wizard_header(); |
| 172 |
|
| 173 |
$this->setup_wizard_content(); |
| 174 |
$this->setup_wizard_footer(); |
| 175 |
?> |
| 176 |
<?php |
| 177 |
if ( get_option( 'mainwp_enable_guided_tours', 0 ) ) { |
| 178 |
static::mainwp_usetiful_tours(); |
| 179 |
} |
| 180 |
exit; |
| 181 |
} |
| 182 |
|
| 183 |
/** |
| 184 |
* Method get_next_step_link() |
| 185 |
* |
| 186 |
* Get the link for the next step. |
| 187 |
* |
| 188 |
* @param string $step Next step link. |
| 189 |
* |
| 190 |
* @return string Link for next step. |
| 191 |
*/ |
| 192 |
public function get_next_step_link( $step = '' ) { |
| 193 |
if ( ! empty( $step ) && isset( $step, $this->steps ) ) { |
| 194 |
return esc_url_raw( remove_query_arg( array( 'noregister', 'message' ), add_query_arg( 'step', $step ) ) ); |
| 195 |
} |
| 196 |
$keys = array_keys( $this->steps ); |
| 197 |
return esc_url_raw( remove_query_arg( array( 'noregister', 'message' ), add_query_arg( 'step', $keys[ array_search( $this->step, array_keys( $this->steps ) ) + 1 ] ) ) ); |
| 198 |
} |
| 199 |
|
| 200 |
/** |
| 201 |
* Method get_back_step_link() |
| 202 |
* |
| 203 |
* Get the link for the previouse step. |
| 204 |
* |
| 205 |
* @param string $step Previouse step link. |
| 206 |
* |
| 207 |
* @return string Link for previouse step. |
| 208 |
*/ |
| 209 |
public function get_back_step_link( $step = '' ) { |
| 210 |
if ( ! empty( $step ) && isset( $step, $this->steps ) ) { |
| 211 |
return esc_url_raw( remove_query_arg( array( 'noregister', 'message' ), add_query_arg( 'step', $step ) ) ); |
| 212 |
} |
| 213 |
$keys = array_keys( $this->steps ); |
| 214 |
return esc_url_raw( remove_query_arg( array( 'noregister', 'message' ), add_query_arg( 'step', $keys[ array_search( $this->step, array_keys( $this->steps ) ) - 1 ] ) ) ); |
| 215 |
} |
| 216 |
|
| 217 |
/** |
| 218 |
* Method setup_wizard_header() |
| 219 |
* |
| 220 |
* Render Setup Wizard's header. |
| 221 |
*/ |
| 222 |
public function setup_wizard_header() { |
| 223 |
$selected_theme = MainWP_Settings::get_instance()->get_selected_theme(); |
| 224 |
?> |
| 225 |
<!DOCTYPE html> |
| 226 |
<html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?> class="mainwp-quick-setup"> |
| 227 |
<head> |
| 228 |
<meta name="viewport" content="width=device-width" /> |
| 229 |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
| 230 |
<title><?php esc_html_e( 'MainWP › Setup Wizard', 'mainwp' ); ?></title> |
| 231 |
<?php wp_print_scripts( 'mainwp' ); ?> |
| 232 |
<?php wp_print_scripts( 'mainwp-clients' ); ?> |
| 233 |
<?php wp_print_scripts( 'mainwp-setup' ); ?> |
| 234 |
<?php wp_print_scripts( 'fomantic' ); ?> |
| 235 |
<?php wp_print_scripts( 'mainwp-ui' ); ?> |
| 236 |
<?php wp_print_scripts( 'mainwp-import' ); ?> |
| 237 |
<?php |
| 238 |
// to fix warning. |
| 239 |
/** |
| 240 |
* Remove the deprecated `print_emoji_styles` handler. |
| 241 |
* It avoids breaking style generation with a deprecation message. |
| 242 |
*/ |
| 243 |
$has_emoji_styles = has_action( 'admin_print_styles', 'print_emoji_styles' ); |
| 244 |
if ( $has_emoji_styles ) { |
| 245 |
remove_action( 'admin_print_styles', 'print_emoji_styles' ); |
| 246 |
} |
| 247 |
?> |
| 248 |
<?php do_action( 'admin_print_styles' ); ?> |
| 249 |
<style> |
| 250 |
@keyframes tadaaaa { |
| 251 |
0% { |
| 252 |
transform: scale(1) rotate(0deg); |
| 253 |
} |
| 254 |
10% { |
| 255 |
transform: scale(0.9) rotate(-3deg); |
| 256 |
} |
| 257 |
20% { |
| 258 |
transform: scale(1.1) rotate(3deg); |
| 259 |
} |
| 260 |
30% { |
| 261 |
transform: scale(0.95) rotate(-2deg); |
| 262 |
} |
| 263 |
40% { |
| 264 |
transform: scale(1.05) rotate(2deg); |
| 265 |
} |
| 266 |
50% { |
| 267 |
transform: scale(1) rotate(0deg); |
| 268 |
} |
| 269 |
60% { |
| 270 |
transform: scale(1.02) rotate(-1deg); |
| 271 |
} |
| 272 |
80% { |
| 273 |
transform: scale(0.98) rotate(1deg); |
| 274 |
} |
| 275 |
100% { |
| 276 |
transform: scale(1) rotate(0deg); |
| 277 |
} |
| 278 |
} |
| 279 |
|
| 280 |
.tadaaaa { |
| 281 |
display: inline-block; |
| 282 |
animation: tadaaaa 0.6s ease-in-out 1 forwards; |
| 283 |
} |
| 284 |
</style> |
| 285 |
<script type="text/javascript"> let ajaxurl = '<?php echo esc_url( admin_url( 'admin-ajax.php' ) ); ?>';</script> |
| 286 |
<script type="text/javascript">let mainwp_ajax_nonce = "<?php echo esc_js( wp_create_nonce( 'mainwp_ajax' ) ); ?>", mainwp_js_nonce = "<?php echo esc_js( wp_create_nonce( 'mainwp_nonce' ) ); ?>";</script> |
| 287 |
</head> |
| 288 |
<body class="mainwp-ui <?php echo ! empty( $selected_theme ) ? 'mainwp-custom-theme' : ''; ?> mainwp-ui-setup"> |
| 289 |
<div class="ui stackable padded grid"> |
| 290 |
<div class="two wide left aligned middle aligned column"> |
| 291 |
<img src="<?php echo esc_url( MAINWP_PLUGIN_URL . 'assets/images/mainwp-icon.svg' ); ?>" alt="<?php esc_attr_e( 'MainWP', 'mainwp' ); ?>" style="width:40px;height40px;" /> |
| 292 |
</div> |
| 293 |
<div class="twelve wide column"> |
| 294 |
<?php $this->setup_wizard_steps(); ?> |
| 295 |
</div> |
| 296 |
<div class="two wide right aligned middle aligned column"> |
| 297 |
|
| 298 |
</div> |
| 299 |
</div> |
| 300 |
|
| 301 |
<div id="mainwp-quick-setup-wizard" class="ui grid"> |
| 302 |
<div class="two wide column"></div> |
| 303 |
<div class="twelve wide column"> |
| 304 |
<?php |
| 305 |
} |
| 306 |
|
| 307 |
/** |
| 308 |
* Method setup_wizard_footer() |
| 309 |
* |
| 310 |
* Render Setup Wizard's footer. |
| 311 |
*/ |
| 312 |
public function setup_wizard_footer() { |
| 313 |
?> |
| 314 |
</div> |
| 315 |
<div class="two wide column"></div> |
| 316 |
</div> |
| 317 |
<div id="mainwp-qsw-exit-links"> |
| 318 |
<?php esc_html_e( 'Go to', 'mainwp' ); ?> <a class="" href="<?php echo esc_url( admin_url( 'index.php' ) ); ?>"><?php esc_html_e( 'WP Admin', 'mainwp' ); ?></a> <?php esc_html_e( 'or', 'mainwp' ); ?> <a class="" href="<?php echo esc_url( admin_url( 'admin.php?page=mainwp_tab' ) ); ?>"><?php esc_html_e( 'MainWP', 'mainwp' ); ?></a> |
| 319 |
</div> |
| 320 |
</body> |
| 321 |
</html> |
| 322 |
<?php |
| 323 |
} |
| 324 |
|
| 325 |
/** |
| 326 |
* Method setup_wizard_steps() |
| 327 |
* |
| 328 |
* Render Setup Wizards Steps. |
| 329 |
*/ |
| 330 |
public function setup_wizard_steps() { // phpcs:ignore -- NOSONAR - complex method. |
| 331 |
$ouput_steps = $this->steps; |
| 332 |
?> |
| 333 |
<div id="mainwp-quick-setup-wizard-steps" class="ui circular ordered stackable fluid steps" style=""> |
| 334 |
<?php foreach ( $ouput_steps as $step_key => $step ) { ?> |
| 335 |
<?php |
| 336 |
if ( isset( $step['hidden'] ) && $step['hidden'] ) { |
| 337 |
continue; |
| 338 |
} |
| 339 |
|
| 340 |
?> |
| 341 |
<div |
| 342 |
<?php |
| 343 |
if ( $step_key === $this->step ) { |
| 344 |
// Check if this is the last step. |
| 345 |
$step_keys = array_keys( $this->steps ); // NOSONAR -- ??. |
| 346 |
$last_step_key = end( $step_keys ); |
| 347 |
|
| 348 |
if ( $step_key === $last_step_key ) { |
| 349 |
echo 'class="step completed" aria-label="Completed: ' . esc_attr( $step['name'] ) . '"'; |
| 350 |
} else { |
| 351 |
echo 'class="step active tada transition" aria-current="step"'; |
| 352 |
} |
| 353 |
} elseif ( array_search( $this->step, array_keys( $this->steps ) ) > array_search( $step_key, array_keys( $this->steps ) ) ) { |
| 354 |
echo 'class="step completed" aria-label="Completed: ' . esc_attr( $step['name'] ) . '"'; |
| 355 |
} else { |
| 356 |
echo 'class="step"'; |
| 357 |
} |
| 358 |
?> |
| 359 |
> |
| 360 |
<?php if ( array_search( $this->step, array_keys( $this->steps ) ) > array_search( $step_key, array_keys( $this->steps ) ) ) : ?> |
| 361 |
<span data-tooltip="<?php esc_attr_e( 'Completed!', 'mainwp' ); ?>" data-inverted="" data-position="bottom center"> |
| 362 |
<?php endif; ?> |
| 363 |
<div class="content"> |
| 364 |
<div class="title"><?php echo esc_html( $step['name'] ); ?></div> |
| 365 |
<div class="description"><?php echo esc_html( $step['desc'] ); ?></div> |
| 366 |
</div> |
| 367 |
<?php if ( array_search( $this->step, array_keys( $this->steps ) ) > array_search( $step_key, array_keys( $this->steps ) ) ) : ?> |
| 368 |
</span> |
| 369 |
<?php endif; ?> |
| 370 |
</div> |
| 371 |
<?php } ?> |
| 372 |
</div> |
| 373 |
<script type="text/javascript"> |
| 374 |
jQuery( document ).ready( function( $ ) { |
| 375 |
// Function to handle circular steps responsive behavior. |
| 376 |
function handleCircularStepsResize() { |
| 377 |
var circularSteps = jQuery('.ui.stackable.circular.steps'), |
| 378 |
isMobile = window.innerWidth <= 768; |
| 379 |
if (isMobile) { |
| 380 |
circularSteps.addClass('vertical'); |
| 381 |
} else { |
| 382 |
circularSteps.removeClass('vertical'); |
| 383 |
} |
| 384 |
} |
| 385 |
|
| 386 |
// Run on page load. |
| 387 |
handleCircularStepsResize(); |
| 388 |
|
| 389 |
// Run on window resize. |
| 390 |
jQuery(window).on('resize', handleCircularStepsResize); |
| 391 |
}); |
| 392 |
</script> |
| 393 |
<?php |
| 394 |
} |
| 395 |
|
| 396 |
/** |
| 397 |
* Method setup_wizard_content() |
| 398 |
* |
| 399 |
* Render setup Wizard's current step view. |
| 400 |
*/ |
| 401 |
public function setup_wizard_content() { |
| 402 |
echo '<div class="mainwp-quick-setup-wizard-steps-content" style="margin-top:3em;">'; |
| 403 |
call_user_func( $this->steps[ $this->step ]['view'] ); |
| 404 |
echo '</div>'; |
| 405 |
echo '<div class="ui clearing hidden divider"></div>'; |
| 406 |
} |
| 407 |
|
| 408 |
/** |
| 409 |
* Method mwp_setup_welcome() |
| 410 |
* |
| 411 |
* Renders the Welcome screen of the Quick Start Wizard |
| 412 |
*/ |
| 413 |
public function mwp_setup_welcome() { |
| 414 |
delete_option( 'mainwp_run_quick_setup' ); |
| 415 |
?> |
| 416 |
<div class="ui vertical basic padded segments"> |
| 417 |
<div class="ui padded segment"> |
| 418 |
<h1 class="ui massive header"><?php esc_html_e( 'Get Your MainWP Dashboard Running in 5 Minutes!', 'mainwp' ); ?></h1> |
| 419 |
<p><?php esc_html_e( 'Remember WordPress\' famous 5-minute install? This is that, but for your management dashboard.', 'mainwp' ); ?> |
| 420 |
</div> |
| 421 |
<div class="ui padded segment"> |
| 422 |
<h2 class="ui big header"><?php esc_html_e( 'We\'ll walk you through:', 'mainwp' ); ?></h2> |
| 423 |
<h3 class="ui header"><?php esc_html_e( 'What to Expect in the Setup Wizard', 'mainwp' ); ?></h3> |
| 424 |
<div class="ui bulleted list"> |
| 425 |
<div class="item" style="text-align:left"> |
| 426 |
<strong><?php esc_html_e( 'System Check', 'mainwp' ); ?></strong> - <?php esc_html_e( 'Confirm your server is ready for MainWP.', 'mainwp' ); ?> |
| 427 |
</div> |
| 428 |
<div class="item" style="text-align:left"> |
| 429 |
<strong><?php esc_html_e( 'Adding Your First Site', 'mainwp' ); ?></strong> - <?php esc_html_e( 'Connect your first WordPress install.', 'mainwp' ); ?> |
| 430 |
</div> |
| 431 |
<div class="item" style="text-align:left"> |
| 432 |
<strong><?php esc_html_e( 'Adding Your First Client', 'mainwp' ); ?></strong> - <?php esc_html_e( 'Set up a client profile.', 'mainwp' ); ?> |
| 433 |
</div> |
| 434 |
<div class="item" style="text-align:left"> |
| 435 |
<strong><?php esc_html_e( 'Monitoring Configuration', 'mainwp' ); ?></strong> - <?php esc_html_e( 'Enable uptime & site health checks.', 'mainwp' ); ?> |
| 436 |
</div> |
| 437 |
</div> |
| 438 |
<em><?php esc_html_e( 'Takes about 5 minutes, maybe less if your server\'s already configured.', 'mainwp' ); ?></em> |
| 439 |
<p><?php esc_html_e( 'If you don\'t want to go through the setup wizard, you can skip and proceed to your MainWP Dashboard by clicking the "Skip the Setup Wizard" link. If you change your mind, you can come back later by starting the Setup Wizard from the MainWP > Settings > MainWP Tools page!', 'mainwp' ); ?></p> |
| 440 |
</div> |
| 441 |
<div class="ui padded segment"> |
| 442 |
<a class="ui huge green basic button" href="<?php echo esc_url( admin_url( 'admin.php?page=mainwp-setup&step=introduction' ) ); ?>"><?php esc_html_e( 'Start the MainWP Quick Setup Wizard', 'mainwp' ); ?></a> |
| 443 |
<div class="ui hidden divider"></div> |
| 444 |
<div class="ui hidden divider"></div> |
| 445 |
<?php esc_html_e( '...or ', 'mainwp' ); ?> <a class="" href="<?php echo esc_url( admin_url( 'admin.php?page=mainwp_tab' ) ); ?>"><?php esc_html_e( 'Skip the Setup Wizard', 'mainwp' ); ?></a> |
| 446 |
<div class="ui hidden divider"></div> |
| 447 |
<div class="ui hidden divider"></div> |
| 448 |
<em><?php esc_html_e( 'Your Dashboard may seem limited until you add sites or clients. Completing the setup ensures you\'re ready to unlock the full potential of MainWP.', 'mainwp' ); ?></em> |
| 449 |
</div> |
| 450 |
<div class="ui padded segment"> |
| 451 |
<h2 class="ui header"><?php esc_html_e( 'Quick concepts if you\'re new to MainWP:', 'mainwp' ); ?></h2> |
| 452 |
<div><strong><?php esc_html_e( 'MainWP Dashboard', 'mainwp' ); ?></strong> <?php esc_html_e( 'Where you manage everything. This is what you just installed.', 'mainwp' ); ?></div> |
| 453 |
<div><strong><?php esc_html_e( 'MainWP Child', 'mainwp' ); ?></strong> <?php esc_html_e( 'Plugin you install on each site you want to manage. It connects your sites to this dashboard.', 'mainwp' ); ?></div> |
| 454 |
</div> |
| 455 |
</div> |
| 456 |
<?php |
| 457 |
if ( empty( get_user_option( 'mainwp_selected_theme' ) ) ) { |
| 458 |
$sites = MainWP_DB::instance()->get_sites(); // Get site data. |
| 459 |
if ( empty( $sites ) ) { |
| 460 |
?> |
| 461 |
<script> |
| 462 |
jQuery(function ($) { |
| 463 |
let detectedMode = ''; |
| 464 |
if(window.matchMedia('(prefers-color-scheme: dark)').matches){ |
| 465 |
detectedMode = 'dark'; |
| 466 |
} else if(window.matchMedia('(prefers-color-scheme: light)').matches){ |
| 467 |
detectedMode = 'light'; |
| 468 |
} |
| 469 |
let data = mainwp_secure_data({ |
| 470 |
action: 'mainwp_qsw_ui_mode_detected', |
| 471 |
ui_mode: detectedMode, |
| 472 |
}); |
| 473 |
$.post(ajaxurl, data, function (response) { |
| 474 |
// nothing. |
| 475 |
}, 'json'); |
| 476 |
}); |
| 477 |
</script> |
| 478 |
<?php |
| 479 |
} |
| 480 |
} |
| 481 |
} |
| 482 |
|
| 483 |
/** |
| 484 |
* Method mwp_setup_introduction() |
| 485 |
* |
| 486 |
* Renders the Introduction screen of the Quick Start Wizard |
| 487 |
*/ |
| 488 |
public function mwp_setup_introduction() { |
| 489 |
?> |
| 490 |
<div class="ui message" id="mainwp-message-zone" style="display:none"></div> |
| 491 |
<div class="ui vertical basic padded segments"> |
| 492 |
<div class="ui padded segment"> |
| 493 |
<h1 class="ui massive header"><?php esc_html_e( 'MainWP Quick Setup Wizard', 'mainwp' ); ?></h1> |
| 494 |
<p><?php esc_html_e( 'Thank you for choosing MainWP for managing your WordPress sites. This quick setup wizard will help you configure the basic settings.', 'mainwp' ); ?></p> |
| 495 |
</div> |
| 496 |
<div class="ui padded segment"> |
| 497 |
<a href="https://docs.mainwp.com/getting-started/get-started-with-mainwp" target="_blank" class="ui big icon green button"><i class="youtube icon"></i> <?php esc_html_e( 'Walkthrough', 'mainwp' ); ?></a> |
| 498 |
</div> |
| 499 |
</div> |
| 500 |
<div class="ui hidden divider"></div> |
| 501 |
<div class="ui hidden divider"></div> |
| 502 |
<form method="post"> |
| 503 |
<div class="ui vertical basic padded segments"> |
| 504 |
<div class="ui padded segment"> |
| 505 |
<h2 class="ui big header"><?php esc_html_e( 'MainWP Guided Tours', 'mainwp' ); ?> <span class="ui blue mini label"><?php esc_html_e( 'BETA', 'mainwp' ); ?></span></h2> |
| 506 |
<p><?php esc_html_e( 'MainWP guided tours are designed to provide information about all essential features on each MainWP Dashboard page.', 'mainwp' ); ?></p> |
| 507 |
<div class="ui blue message"> |
| 508 |
<?php /* translators: 1: opening anchor tag, 2: closing anchor tag */ printf( esc_html__( 'This feature is implemented using Javascript provided by Usetiful and is subject to the %1$sUsetiful Privacy Policy%2$s.', 'mainwp' ), '<a href="https://www.usetiful.com/privacy-policy" target="_blank">', '</a>' ); ?> |
| 509 |
</div> |
| 510 |
<div class="ui form"> |
| 511 |
<div class="field"> |
| 512 |
<label><?php esc_html_e( 'Do you want to enable MainWP Guided Tours?', 'mainwp' ); ?></label> |
| 513 |
<div class="ui hidden divider"></div> |
| 514 |
<div class="ui toggle checkbox"> |
| 515 |
<input type="checkbox" name="mainwp-guided-tours-option" id="mainwp-guided-tours-option" checked="true"> |
| 516 |
<label for="mainwp-guided-tours-option"><?php esc_html_e( 'Select to enable the MainWP Guided Tours.', 'mainwp' ); ?><span class="ui left pointing green label"><?php esc_html_e( 'Highly recommended if new to MainWP!', 'mainwp' ); ?></span></label> |
| 517 |
</div> |
| 518 |
</div> |
| 519 |
</div> |
| 520 |
</div> |
| 521 |
<div class="ui padded segment"> |
| 522 |
<input type="submit" class="ui big green basic right floated button" value="<?php esc_html_e( 'Let\'s Go!', 'mainwp' ); ?>" name="save_step" /> |
| 523 |
<?php wp_nonce_field( 'mwp-setup' ); ?> |
| 524 |
</div> |
| 525 |
</div> |
| 526 |
</form> |
| 527 |
<?php |
| 528 |
MainWP_System_View::render_comfirm_modal(); |
| 529 |
} |
| 530 |
|
| 531 |
|
| 532 |
/** |
| 533 |
* Method mwp_setup_system_requirements() |
| 534 |
* |
| 535 |
* Render System Requirements Step. |
| 536 |
* |
| 537 |
* @uses \MainWP\Dashboard\MainWP_Server_Information::render_quick_setup_system_check() |
| 538 |
*/ |
| 539 |
public function mwp_setup_system_requirements() { |
| 540 |
?> |
| 541 |
<div class="ui vertical basic padded segments"> |
| 542 |
<div class="ui padded segment"> |
| 543 |
<h1 class="ui massive header"><?php esc_html_e( 'System Requirements Check', 'mainwp' ); ?></h1> |
| 544 |
<p> |
| 545 |
<?php |
| 546 |
/* translators: 1: opening anchor tag, 2: closing anchor tag */ |
| 547 |
printf( esc_html__( 'These checks ensure MainWP can connect to your child sites. If any check fails, %1$slearn how to resolve the issue%2$s.', 'mainwp' ), '<a href="https://docs.mainwp.com/advanced/miscellaneous/mainwp-system-requirements" target="_blank">', '</a>' ); |
| 548 |
?> |
| 549 |
</p> |
| 550 |
<?php MainWP_System_View::mainwp_warning_notice(); ?> |
| 551 |
</div> |
| 552 |
</div> |
| 553 |
<form method="post" class="ui form"> |
| 554 |
<?php MainWP_UI::generate_wp_nonce( 'mainwp-admin-nonce' ); ?> |
| 555 |
<div class="ui vertical basic padded segments"> |
| 556 |
<?php |
| 557 |
$show_ssl = false; |
| 558 |
if ( MainWP_Server_Information_Handler::is_openssl_config_warning() ) { |
| 559 |
$openssl_loc = MainWP_System_Utility::get_openssl_conf(); |
| 560 |
?> |
| 561 |
<div class="ui padded segment"> |
| 562 |
<div class="grouped fields"> |
| 563 |
<label><?php esc_html_e( 'What is the openssl.cnf file location on your computer?', 'mainwp' ); ?></label> |
| 564 |
<div class="field" id="mainwp-setup-installation-openssl-location"> |
| 565 |
<div class="ui fluid input"> |
| 566 |
<input type="text" name="mwp_setup_openssl_lib_location" value="<?php echo esc_attr( $openssl_loc ); ?>"> |
| 567 |
</div> |
| 568 |
<div><em><?php esc_html_e( 'Due to bug with PHP on some servers, enter the openssl.cnf file location so MainWP Dashboard can connect to your child sites. If your openssl.cnf file is saved to a different path from what is entered above please enter your exact path. ', 'mainwp' ); ?><?php /* translators: 1: opening anchor tag, 2: closing anchor tag with icon */ printf( esc_html__( '%1$sClick here%2$s to see how to find the OpenSSL.cnf file.', 'mainwp' ), '<a href="https://docs.mainwp.com/troubleshooting/potential-issues#openssl-library-error-invalid-request" target="_blank">', '</a> <i class="external alternate icon"></i>' ); ?></em></div> |
| 569 |
</div> |
| 570 |
</div> |
| 571 |
</div> |
| 572 |
<?php |
| 573 |
$show_ssl = true; |
| 574 |
} |
| 575 |
?> |
| 576 |
<div class="ui padded segment"> |
| 577 |
<?php MainWP_Server_Information::render_quick_setup_system_check(); ?> |
| 578 |
</div> |
| 579 |
<div class="ui padded segment"> |
| 580 |
<a href="<?php echo esc_url( $this->get_back_step_link() ); ?>" class="ui big basic button"><i class="arrow left icon"></i> <?php esc_html_e( 'Back to Introduction', 'mainwp' ); ?></a> |
| 581 |
<?php if ( $show_ssl ) : ?> |
| 582 |
<input type="submit" class="ui big basic green right floated button" value="<?php esc_attr_e( 'Next', 'mainwp' ); ?>" name="save_step" /> |
| 583 |
<?php else : ?> |
| 584 |
<a href="<?php echo esc_url( $this->get_next_step_link() ); ?>" class="ui big basic green right floated button"><?php esc_html_e( 'Next to Add Site', 'mainwp' ); ?> <i class="arrow right icon"></i></a> |
| 585 |
<?php endif; ?> |
| 586 |
</div> |
| 587 |
</div> |
| 588 |
<?php wp_nonce_field( 'mwp-setup' ); ?> |
| 589 |
</form> |
| 590 |
<?php |
| 591 |
} |
| 592 |
|
| 593 |
|
| 594 |
/** |
| 595 |
* Method mwp_setup_introduction_save() |
| 596 |
* |
| 597 |
* Installation Step save to DB. |
| 598 |
* |
| 599 |
* @uses \MainWP\Dashboard\MainWP_Utility::update_option() |
| 600 |
*/ |
| 601 |
public function mwp_setup_introduction_save() { |
| 602 |
check_admin_referer( 'mwp-setup' ); |
| 603 |
$enabled_tours = ! isset( $_POST['mainwp-guided-tours-option'] ) ? 0 : 1; // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized |
| 604 |
MainWP_Utility::update_option( 'mainwp_enable_guided_tours', $enabled_tours ); |
| 605 |
wp_safe_redirect( $this->get_next_step_link() ); |
| 606 |
exit; |
| 607 |
} |
| 608 |
|
| 609 |
/** |
| 610 |
* Method mwp_setup_connect_first_site_save() |
| 611 |
* |
| 612 |
* Installation Step after connect first site. |
| 613 |
*/ |
| 614 |
public function mwp_setup_connect_first_site_save() { |
| 615 |
check_admin_referer( 'mwp-setup' ); |
| 616 |
if ( isset( $_POST['mainwp-qsw-confirm-add-new-client'] ) && ! empty( $_POST['mainwp-qsw-confirm-add-new-client'] ) ) { |
| 617 |
wp_safe_redirect( $this->get_next_step_link() ); |
| 618 |
} else { |
| 619 |
wp_safe_redirect( $this->get_next_step_link( 'monitoring' ) ); |
| 620 |
} |
| 621 |
exit; |
| 622 |
} |
| 623 |
|
| 624 |
/** |
| 625 |
* Method mwp_setup_system_requirements_save() |
| 626 |
* |
| 627 |
* Installation Step save to DB. |
| 628 |
* |
| 629 |
* @uses \MainWP\Dashboard\MainWP_Utility::update_option() |
| 630 |
*/ |
| 631 |
public function mwp_setup_system_requirements_save() { |
| 632 |
check_admin_referer( 'mwp-setup' ); |
| 633 |
if ( isset( $_POST['mwp_setup_openssl_lib_location'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized |
| 634 |
MainWP_Utility::update_option( 'mainwp_opensslLibLocation', isset( $_POST['mwp_setup_openssl_lib_location'] ) ? sanitize_text_field( wp_unslash( $_POST['mwp_setup_openssl_lib_location'] ) ) : '' ); // phpcs:ignore WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized |
| 635 |
} |
| 636 |
wp_safe_redirect( $this->get_next_step_link() ); |
| 637 |
exit; |
| 638 |
} |
| 639 |
|
| 640 |
/** |
| 641 |
* Method mwp_setup_connect_first_site() |
| 642 |
* |
| 643 |
* Render Install first Child Site Step form. |
| 644 |
* |
| 645 |
* @uses MainWP_Manage_Sites_View::render_import_sites() |
| 646 |
* @uses MainWP_Manage_Sites::mainwp_managesites_form_import_sites() |
| 647 |
* @uses MainWP_Manage_Sites::mainwp_managesites_information_import_sites() |
| 648 |
* @uses MainWP_Manage_Sites::render_import_sites_modal() |
| 649 |
* @uses MainWP_Utility::show_mainwp_message() |
| 650 |
*/ |
| 651 |
public function mwp_setup_connect_first_site() { |
| 652 |
$has_file_upload = isset( $_FILES['mainwp_managesites_file_bulkupload'] ) && isset( $_FILES['mainwp_managesites_file_bulkupload']['error'] ) && UPLOAD_ERR_OK === $_FILES['mainwp_managesites_file_bulkupload']['error']; |
| 653 |
$has_import_data = ! empty( $_POST['mainwp_managesites_import'] ); |
| 654 |
?> |
| 655 |
<div class="ui vertical basic padded segments"> |
| 656 |
<div class="ui padded segment"> |
| 657 |
<h1 class="ui massive header"><?php esc_html_e( 'Connect Your First Child Site', 'mainwp' ); ?></h1> |
| 658 |
<p><?php esc_html_e( 'In the MainWP system, the sites you connect are referred to as "Child Sites."', 'mainwp' ); ?> <?php esc_html_e( 'These Child Sites will be managed centrally from your MainWP Dashboard.', 'mainwp' ); ?></p> |
| 659 |
</div> |
| 660 |
|
| 661 |
<div class="ui padded segment"> |
| 662 |
<div class="ui form"> |
| 663 |
<div class="field"> |
| 664 |
<label><?php esc_html_e( 'How would you like to get started?', 'mainwp' ); ?></label> |
| 665 |
</div> |
| 666 |
<div class="grouped fields mainwp-field-tab-connect"> |
| 667 |
<div class="field"> |
| 668 |
<div class="ui compact invisible checkbox"> |
| 669 |
<input type="radio" name="tab_connect" tabindex="0" class="hidden" value="single-site"> |
| 670 |
<label for="tab_connect" class="ui icon message"> |
| 671 |
<i class="plus icon"></i> |
| 672 |
<div class="content"> |
| 673 |
<div class="header"><?php esc_html_e( 'Add One Site ', 'mainwp' ); ?></div> |
| 674 |
<p><?php esc_html_e( 'Add one site now, add more later.', 'mainwp' ); ?></p> |
| 675 |
</div> |
| 676 |
</label> |
| 677 |
</div> |
| 678 |
</div> |
| 679 |
<div class="field"> |
| 680 |
<div class="ui compact invisible checkbox"> |
| 681 |
<input type="radio" name="tab_connect" tabindex="0" class="hidden" value="multiple-site"> |
| 682 |
<label for="tab_connect" class="ui icon message"> |
| 683 |
<i class="file upload icon"></i> |
| 684 |
<div class="content"> |
| 685 |
<div class="header"><?php esc_html_e( 'Add Multiple Sites', 'mainwp' ); ?></div> |
| 686 |
<p><?php esc_html_e( 'Connect several sites right away.', 'mainwp' ); ?></p> |
| 687 |
</div> |
| 688 |
</label> |
| 689 |
</div> |
| 690 |
</div> |
| 691 |
</div> |
| 692 |
</div> |
| 693 |
</div> |
| 694 |
</div> |
| 695 |
<?php if ( ( $has_file_upload || $has_import_data ) && check_admin_referer( 'mainwp-admin-nonce' ) ) : ?> |
| 696 |
<?php |
| 697 |
$url = 'admin.php?page=mainwp-setup'; |
| 698 |
$url .= '&step=add_client'; |
| 699 |
MainWP_Manage_Sites::render_import_sites_modal( $url, 'Import Sites' ); |
| 700 |
?> |
| 701 |
<?php |
| 702 |
else : |
| 703 |
$el_id_msg_zn_1 = 'submit'; |
| 704 |
?> |
| 705 |
<form method="post" action="" class="ui form" enctype="multipart/form-data" id="mainwp_connect_first_site_form"> |
| 706 |
<div class="ui vertical basic padded segments"> |
| 707 |
<div class="ui padded segment"> |
| 708 |
<div id="mainwp-qsw-connect-site-form" style="display:none"> |
| 709 |
<div class="ui message" id="<?php echo esc_attr( $el_id_msg_zn_1 ); ?>" style="display:none"></div> |
| 710 |
<div class="ui red message" id="mainwp-error-zone" style="display:none"></div> |
| 711 |
<div class="ui green message" id="mainwp-success-zone" style="display:none"></div> |
| 712 |
<div class="ui info message" id="mainwp-info-zone" style="display:none"></div> |
| 713 |
|
| 714 |
<div class="ui top attached equal width tabular massive menu menu-connect-first-site"> |
| 715 |
<a class="item active" data-tab="single-site"><i class="plus grey icon"></i> <?php esc_html_e( 'Connect a Single Site', 'mainwp' ); ?></a> |
| 716 |
<a class="item" data-tab="multiple-site"><i class="file upload grey icon"></i> <?php esc_html_e( 'Connect Multiple Sites', 'mainwp' ); ?></a> |
| 717 |
</div> |
| 718 |
|
| 719 |
<div class="ui bottom attached tab segment active" data-tab="single-site"> |
| 720 |
<div> |
| 721 |
<div class="ui hidden divider"></div> |
| 722 |
<div class="field"> |
| 723 |
<label for="mainwp_managesites_add_wpurl_protocol"><?php esc_html_e( 'What is the site URL?', 'mainwp' ); ?> <span class="ui red small text"><?php esc_html_e( '(Reqruired)', 'mainwp' ); ?></span></label> |
| 724 |
<div class="ui left action input"> |
| 725 |
<select class="ui compact selection dropdown" id="mainwp_managesites_add_wpurl_protocol" name="mainwp_managesites_add_wpurl_protocol" style="width:120px;padding:0px;"> |
| 726 |
<option value="https">https://</option> |
| 727 |
<option value="http">http://</option> |
| 728 |
</select> |
| 729 |
<input type="text" id="mainwp_managesites_add_wpurl" name="mainwp_managesites_add_wpurl" value="" placeholder="yoursite.com" /> |
| 730 |
</div> |
| 731 |
</div> |
| 732 |
<div class="ui hidden divider"></div> |
| 733 |
<div class="field"> |
| 734 |
<label for="mainwp_managesites_add_wpadmin"><?php esc_html_e( 'What is your administrator username on that site? ', 'mainwp' ); ?> <span class="ui red small text"><?php esc_html_e( '(Reqruired)', 'mainwp' ); ?></label> |
| 735 |
<input type="text" id="mainwp_managesites_add_wpadmin" name="mainwp_managesites_add_wpadmin" value="" /> |
| 736 |
</div> |
| 737 |
<div class="ui hidden divider"></div> |
| 738 |
<div class="field"> |
| 739 |
<label for=""><?php esc_html_e( 'Choose your connection authentication method:', 'mainwp' ); ?></label> |
| 740 |
<div class="ui hidden fitted divider"></div> |
| 741 |
<div class="ui toggle checked checkbox not-auto-init" id="addsite-adminpwd" style="margin-right:2em;"> |
| 742 |
<input type="checkbox" id="mainwp-administrator-password-checkbox-field" checked=""><label><?php esc_html_e( 'Administrator password', 'mainwp' ); ?></label> |
| 743 |
</div> |
| 744 |
<div class="ui toggle checkbox not-auto-init" id="addsite-uniqueid"> |
| 745 |
<input type="checkbox" id="mainwp-unique-security-id-checkbox-field"><label><?php esc_html_e( 'Unique Security ID', 'mainwp' ); ?></label> |
| 746 |
</div> |
| 747 |
</div> |
| 748 |
<div class="ui hidden divider"></div> |
| 749 |
<div class="ui fluid segment accordion" id="mainwp-connection-authentication-accordion" style="margin-top:1em"> |
| 750 |
<div class="title"> |
| 751 |
<i class="dropdown icon"></i> |
| 752 |
<?php esc_html_e( 'Connection authentication methods explained', 'mainwp' ); ?> |
| 753 |
</div> |
| 754 |
<div class="content"> |
| 755 |
<span class="ui text"><?php esc_html_e( 'Choose options based on your MainWP Child plugin setup on the WordPress site you want to connect.', 'mainwp' ); ?></span> |
| 756 |
<div class="ui bulleted small list"> |
| 757 |
<div class="item"><?php esc_html_e( 'Default Setup: Use only the Password field if you haven\'t changed the default settings.', 'mainwp' ); ?></div> |
| 758 |
<div class="item"><?php esc_html_e( 'Advanced Setup: If you\'ve turned off all verification on the child site, switch off both fields.', 'mainwp' ); ?></div> |
| 759 |
</div> |
| 760 |
<span class="ui text"><?php esc_html_e( 'Use the sliders to control the fields shown:', 'mainwp' ); ?></span> |
| 761 |
<div class="ui bulleted small list"> |
| 762 |
<div class="item"><?php esc_html_e( 'Password On: Displays the Password field.', 'mainwp' ); ?></div> |
| 763 |
<div class="item"><?php esc_html_e( 'Security Key On: Displays the Security Key field.', 'mainwp' ); ?></div> |
| 764 |
<div class="item"><?php esc_html_e( 'Both On: Displays both fields.', 'mainwp' ); ?></div> |
| 765 |
<div class="item"><?php esc_html_e( 'Both Off: Hides both fields.', 'mainwp' ); ?></div> |
| 766 |
</div> |
| 767 |
<span class="ui text"><strong><?php esc_html_e( 'This needs to match what is set on your child site. Default is Administrator password.', 'mainwp' ); ?></strong></span> |
| 768 |
</div> |
| 769 |
</div> |
| 770 |
<div class="field" id="mainwp-administrator-password-field"> |
| 771 |
<label for="mainwp_managesites_add_admin_pwd"><?php esc_html_e( 'What is your administrator password on that site?', 'mainwp' ); ?> <span class="ui red small text"><?php esc_html_e( '(Required if enabled)', 'mainwp' ); ?></span></label> |
| 772 |
<input type="password" id="mainwp_managesites_add_admin_pwd" name="mainwp_managesites_add_admin_pwd" value="" /> |
| 773 |
<div class="ui up pointing basic grey label" style="line-height:1.5em"><?php esc_html_e( 'Your password is never stored by your Dashboard and never sent to MainWP.com. Once this initial connection is complete, your MainWP Dashboard generates a secure Public and Private key pair (2048 bits) using OpenSSL, allowing future connections without needing your password again. For added security, you can even change this admin password once connected, just be sure not to delete the admin account, as this would disrupt the connection.', 'mainwp' ); ?></div> |
| 774 |
</div> |
| 775 |
<div class="ui hidden divider"></div> |
| 776 |
<div class="field" id="mainwp-unique-security-id-field" style="display:none" > |
| 777 |
<label for="mainwp_managesites_add_uniqueId"><?php esc_html_e( 'Did you generate unique security ID on the site? If yes, copy it here, if not, leave this field blank. ', 'mainwp' ); ?> <span class="ui red small text"><?php esc_html_e( '(Reqruired if enabled)', 'mainwp' ); ?></span></label> |
| 778 |
<input type="text" id="mainwp_managesites_add_uniqueId" name="mainwp_managesites_add_uniqueId" value="" /> |
| 779 |
</div> |
| 780 |
<div class="ui hidden divider"></div> |
| 781 |
<div class="field"> |
| 782 |
<label for="mainwp_managesites_add_wpname"><?php esc_html_e( 'Add site title: ', 'mainwp' ); ?> <span class="ui grey small text"><?php esc_html_e( '(Optional)', 'mainwp' ); ?></label> |
| 783 |
<input type="text" id="mainwp_managesites_add_wpname" name="mainwp_managesites_add_wpname" value="" /> |
| 784 |
<em><?php esc_html_e( 'This is how your site will appear in your MainWP Dashboard. If you skip this, we\'ll use the site\'s URL automatically.', 'mainwp' ); ?></em> |
| 785 |
</div> |
| 786 |
</div> |
| 787 |
</div> |
| 788 |
|
| 789 |
<div class="ui bottom attached tab segment" data-tab="multiple-site"> |
| 790 |
<div class="mainwp-wish-to-csv mainwp-wish-to-migrate"> |
| 791 |
<div class="ui fluid segment accordion" id="mainwp-add-sites-info-accordion"> |
| 792 |
<div class="title"> |
| 793 |
<i class="dropdown icon"></i> |
| 794 |
<?php esc_html_e( 'Click here to see instructions for adding multiple sites.', 'mainwp' ); ?> |
| 795 |
</div> |
| 796 |
<div class="content"> |
| 797 |
<?php MainWP_Manage_Sites::mainwp_managesites_information_import_sites( true ); ?> |
| 798 |
</div> |
| 799 |
</div> |
| 800 |
<?php MainWP_Manage_Sites::mainwp_managesites_form_import_sites(); ?> |
| 801 |
<div class="ui hidden divider"></div> |
| 802 |
<span class="ui grey text"><?php esc_html_e( 'Your password is never stored by your Dashboard and never sent to MainWP.com. Once this initial connection is complete, your MainWP Dashboard generates a secure Public and Private key pair (2048 bits) using OpenSSL, allowing future connections without needing your password again. For added security, you can even change this admin password once connected, just be sure not to delete the admin account, as this would disrupt the connection.', 'mainwp' ); ?></span> |
| 803 |
<div class="ui hidden divider"></div> |
| 804 |
<div class="ui hidden divider"></div> |
| 805 |
<div class="ui hidden divider"></div> |
| 806 |
<div class="ui horizontal left aligned divider"> |
| 807 |
<?php esc_attr_e( 'or upload csv file', 'mainwp' ); ?> |
| 808 |
</div> |
| 809 |
<div class="ui hidden divider"></div> |
| 810 |
<div class="ui hidden divider"></div> |
| 811 |
<div class="ui hidden divider"></div> |
| 812 |
<div class="ui hidden divider"></div> |
| 813 |
<div class="field"> |
| 814 |
<label for="mainwp_managesites_file_bulkupload"><?php esc_html_e( 'Upload the CSV file', 'mainwp' ); ?> (<a href="<?php echo esc_url( MAINWP_PLUGIN_URL . 'assets/csv/sample.csv' ); ?>"><?php esc_html_e( 'Download sample CSV file', 'mainwp' ); ?></a>)</label> |
| 815 |
<div class="ui grid"> |
| 816 |
<div class="eight wide middle aligned column"> |
| 817 |
<div class="ui file grey input"> |
| 818 |
<input type="file" name="mainwp_managesites_file_bulkupload" id="connect_first_site_file_bulkupload" accept="text/comma-separated-values" /> |
| 819 |
</div> |
| 820 |
</div> |
| 821 |
<div class="eight wide middle aligned column"> |
| 822 |
<div class="ui toggle checkbox ten wide middle aligned column"> |
| 823 |
<input type="checkbox" name="mainwp_managesites_chk_header_first" checked="checked" id="managesites_chk_header_first" value="1" /> <label for="mainwp_managesites_chk_header_first"><?php esc_html_e( 'CSV file contains a header', 'mainwp' ); ?></label> |
| 824 |
</div> |
| 825 |
</div> |
| 826 |
</div> |
| 827 |
</div> |
| 828 |
<div class="ui hidden divider"></div> |
| 829 |
</div> |
| 830 |
</div> |
| 831 |
</div> |
| 832 |
</div> |
| 833 |
<div class="ui padded segment"> |
| 834 |
<div class="ui toggle checkbox" id="mainwp-qsw-toggle-verify-mainwp-child-active" style="display:none"> |
| 835 |
<input type="checkbox" name="mainwp-qsw-verify-mainwp-child-active" id="mainwp-qsw-verify-mainwp-child-active" > |
| 836 |
<label for="mainwp-qsw-verify-mainwp-child-active" ><?php esc_html_e( 'Confirm that the MainWP Child plugin is activated on the site(s) you wish to connect.', 'mainwp' ); ?></label> |
| 837 |
</div> |
| 838 |
</div> |
| 839 |
<div class="ui padded segment"> |
| 840 |
<?php wp_nonce_field( 'mwp-setup' ); ?> |
| 841 |
<?php MainWP_UI::generate_wp_nonce( 'mainwp-admin-nonce' ); ?> |
| 842 |
<input type="hidden" name="qsw_nonce[mainwp_addwp]" value="<?php echo esc_attr( wp_create_nonce( 'mainwp_addwp' ) ); ?>"> |
| 843 |
<input type="hidden" name="qsw_nonce[mainwp_checkwp]" value="<?php echo esc_attr( wp_create_nonce( 'mainwp_checkwp' ) ); ?>"> |
| 844 |
|
| 845 |
|
| 846 |
<div class="ui two column grid"> |
| 847 |
<div class="column"> |
| 848 |
<a href="<?php echo esc_url( $this->get_back_step_link() ); ?>" class="ui big basic button"><i class="arrow left icon"></i> <?php esc_html_e( 'Back to System Check', 'mainwp' ); ?></a> |
| 849 |
</div> |
| 850 |
|
| 851 |
<div class="column"> |
| 852 |
<a href="<?php echo esc_url( $this->get_next_step_link() ); ?>" id="mainwp_addsite_continue_button" class="ui big basic green right floated button"><?php esc_html_e( 'Continue Without Adding Sites', 'mainwp' ); ?> <i class="arrow right icon"></i></a> |
| 853 |
<a style="display:none" name="mainwp_managesites_add" id="mainwp_managesites_add" class="ui button green basic big right floated disabled"><?php esc_html_e( 'Connect Site and Proceed', 'mainwp' ); ?> <i class="arrow right icon"></i></a> |
| 854 |
<a style="display:none" name="mainwp_managesites_add_import" id="mainwp_managesites_add_import" class="ui button basic green big right floated disabled"><?php esc_html_e( 'Connect Sites and Proceed', 'mainwp' ); ?> <i class="arrow right icon"></i></a> |
| 855 |
</div> |
| 856 |
</div> |
| 857 |
</div> |
| 858 |
</div> |
| 859 |
</form> |
| 860 |
<?php endif; ?> |
| 861 |
|
| 862 |
<script> |
| 863 |
jQuery('.menu-connect-first-site .item').tab({ |
| 864 |
'onVisible': function() { |
| 865 |
mainwp_menu_connect_first_site_onvisible_callback(this); |
| 866 |
} |
| 867 |
}); |
| 868 |
jQuery('#mainwp-add-sites-info-accordion').accordion(); |
| 869 |
</script> |
| 870 |
<?php |
| 871 |
MainWP_Manage_Sites::render_add_site_scripts(); |
| 872 |
} |
| 873 |
|
| 874 |
/** |
| 875 |
* Method mwp_setup_connect_first_site_already() |
| 876 |
* |
| 877 |
* Render Added first Child Site Step form. |
| 878 |
*/ |
| 879 |
public function mwp_setup_connect_first_site_already() { |
| 880 |
$count_clients = MainWP_DB_Client::instance()->count_total_clients(); |
| 881 |
?> |
| 882 |
<h1 class="ui header"><?php esc_html_e( 'Congratulations!', 'mainwp' ); ?></h1> |
| 883 |
<p><?php esc_html_e( 'You have successfully connected your first site to your MainWP Dashboard!', 'mainwp' ); ?></p> |
| 884 |
<div class="ui form"> |
| 885 |
<form method="post" class="ui form"> |
| 886 |
<?php if ( empty( $count_clients ) ) { ?> |
| 887 |
<div class="field"> |
| 888 |
<label><?php esc_html_e( 'Do you want to create a client for your first child site?', 'mainwp' ); ?></label> |
| 889 |
<div><?php esc_html_e( 'By adding a new client, you streamline site management within MainWP. Assigning sites to clients allows you to group and manage websites according to the clients they belong to for better organization and accessibility.', 'mainwp' ); ?></div> |
| 890 |
<div class="ui hidden divider"></div> |
| 891 |
<div class="ui toggle checkbox"> |
| 892 |
<input type="checkbox" name="mainwp-qsw-confirm-add-new-client" id="mainwp-qsw-confirm-add-new-client" checked="true"/> |
| 893 |
<label><?php esc_html_e( 'Select to create a New Client', 'mainwp' ); ?></label> |
| 894 |
</div> |
| 895 |
</div> |
| 896 |
<?php } ?> |
| 897 |
<?php MainWP_UI::generate_wp_nonce( 'mainwp-admin-nonce' ); ?> |
| 898 |
<div class="ui clearing hidden divider"></div> |
| 899 |
<div class="ui hidden divider"></div> |
| 900 |
<div class="ui hidden divider"></div> |
| 901 |
<input type="submit" class="ui big green right floated button" value="<?php esc_attr_e( 'Continue', 'mainwp' ); ?>" name="save_step" /> |
| 902 |
<a href="<?php echo esc_url( $this->get_back_step_link() ); ?>" class="ui big basic green button"><?php esc_html_e( 'Back', 'mainwp' ); ?></a> |
| 903 |
<?php wp_nonce_field( 'mwp-setup' ); ?> |
| 904 |
<input type="hidden" id="nonce_secure_data" mainwp_addwp="<?php echo esc_js( wp_create_nonce( 'mainwp_addwp' ) ); ?>" mainwp_checkwp="<?php echo esc_attr( wp_create_nonce( 'mainwp_checkwp' ) ); ?>" /> |
| 905 |
</form> |
| 906 |
</div> |
| 907 |
<?php |
| 908 |
} |
| 909 |
|
| 910 |
/** |
| 911 |
* Method mwp_setup_add_client() |
| 912 |
* |
| 913 |
* Render Add first Client Step form. |
| 914 |
*/ |
| 915 |
public function mwp_setup_add_client() { |
| 916 |
$count_clients = MainWP_DB_Client::instance()->count_total_clients(); |
| 917 |
$sites = MainWP_DB::instance()->get_sites(); // Get site data. |
| 918 |
$total_sites = ! empty( $sites ) ? count( $sites ) : 5; // Set default. |
| 919 |
$item_class_active = 1 === $total_sites ? 'active' : ''; |
| 920 |
$tab_class_active = 1 < $total_sites ? 'active' : ''; |
| 921 |
$first_site_id = get_transient( 'mainwp_transient_just_connected_site_id' ); |
| 922 |
?> |
| 923 |
<div class="ui vertical basic padded segments"> |
| 924 |
<div class="ui padded segment"> |
| 925 |
<h1 class="ui massive header"><?php esc_html_e( 'Add Your First Client', 'mainwp' ); ?></h1> |
| 926 |
<p><?php esc_html_e( 'In the MainWP system, Clients help you organize and group your Child Sites.', 'mainwp' ); ?> <?php esc_html_e( 'You can assign one or more sites to each Client to keep your Dashboard organized and make management easier.', 'mainwp' ); ?></p> |
| 927 |
</div> |
| 928 |
</div> |
| 929 |
<form action="" method="post" enctype="multipart/form-data" name="createclient_form" id="createclient_form" class="add:clients: validate"> |
| 930 |
<div class="ui vertical basic padded segments"> |
| 931 |
<div class="ui padded segment"> |
| 932 |
<div class="ui red message" id="mainwp-message-zone" style="display:none"></div> |
| 933 |
<div class="ui message" id="mainwp-message-zone-client" style="display:none;"></div> |
| 934 |
<?php MainWP_UI::generate_wp_nonce( 'mainwp-admin-nonce' ); ?> |
| 935 |
<div class="ui top attached equal width tabular massive menu mainwp-qsw-add-client"> |
| 936 |
<a class="item <?php echo esc_attr( $item_class_active ); ?>" data-tab="single-client"><i class="user grey icon"></i> <?php esc_html_e( 'Add a Single Client', 'mainwp' ); ?></a> |
| 937 |
<a class="item <?php echo esc_attr( $tab_class_active ); ?>" data-tab="multiple-client"><i class="users grey icon"></i> <?php esc_html_e( 'Add Multiple Clients', 'mainwp' ); ?></a> |
| 938 |
</div> |
| 939 |
<div class="ui bottom attached tab segment <?php echo esc_attr( $item_class_active ); ?>" data-tab="single-client"> |
| 940 |
<div class="ui hidden divider"></div> |
| 941 |
<div id="mainwp-add-new-client-form" > |
| 942 |
<?php $this->render_add_client_content( false, true ); ?> |
| 943 |
</div> |
| 944 |
<input type="hidden" name="selected_first_site" value="<?php echo intval( $first_site_id ); ?>"> |
| 945 |
</div> |
| 946 |
<div class="ui bottom attached tab segment <?php echo esc_attr( $tab_class_active ); ?>" data-tab="multiple-client"> |
| 947 |
<div class="ui blue message"> |
| 948 |
<div><?php esc_html_e( 'For each site you’ve imported, please enter the Client Name and Client Email.', 'mainwp' ); ?></div> |
| 949 |
<div><?php esc_html_e( 'If the same client name and email are used across multiple sites, those sites will be merged and assigned to a single client profile.', 'mainwp' ); ?></div> |
| 950 |
<div><strong><?php esc_html_e( 'You can always update or edit this information later from the Clients module in your MainWP Dashboard.', 'mainwp' ); ?></strong></div> |
| 951 |
</div> |
| 952 |
<div> |
| 953 |
<div class="ui middle aligned left aligned compact grid"> |
| 954 |
<div class="ui row"> |
| 955 |
<div class="five wide column" > |
| 956 |
<span class="ui text small"><strong><?php esc_html_e( 'Client Site URL', 'mainwp' ); ?></strong> <span class="ui grey small text"><?php esc_html_e( '(Auto applied)', 'mainwp' ); ?></span></span> |
| 957 |
</div> |
| 958 |
<div class="five wide column"> |
| 959 |
<span class="ui text small"><strong><?php esc_html_e( 'Client Name', 'mainwp' ); ?></strong> <span class="ui red small text"><?php esc_html_e( '(Reqruired)', 'mainwp' ); ?></span></span> |
| 960 |
</div> |
| 961 |
<div class="five wide column"> |
| 962 |
<span class="ui text small"><strong><?php esc_html_e( 'Client Email', 'mainwp' ); ?></strong> <span class="ui red small text"><?php esc_html_e( '(Reqruired)', 'mainwp' ); ?></span></span> |
| 963 |
</div> |
| 964 |
<div class="one wide column"> |
| 965 |
<span></span> |
| 966 |
</div> |
| 967 |
</div> |
| 968 |
<?php |
| 969 |
for ( $i = 0; $i < $total_sites; $i++ ) { |
| 970 |
$website = isset( $sites[ $i ] ) ? $sites[ $i ] : array(); |
| 971 |
$this->render_multi_add_client_content( $i, $website ); |
| 972 |
} |
| 973 |
?> |
| 974 |
</div> |
| 975 |
</div> |
| 976 |
</div> |
| 977 |
</div> |
| 978 |
<div class="ui padded segment"> |
| 979 |
<a style="display:none" current-page="qsw-add" id="bulk_add_createclient" class="ui big green basic right floated button"><?php echo esc_attr__( 'Add and Proceed to Monitoring', 'mainwp' ); ?> <i class="arrow right icon"></i></a> |
| 980 |
<a style="display:none" current-page="qsw-add" id="bulk_add_multi_create_client" class="ui big green basic right floated button"><?php echo esc_attr__( 'Add and Proceed to Monitoring', 'mainwp' ); ?> <i class="arrow right icon"></i></a> |
| 981 |
<a href="<?php echo esc_url( $this->get_next_step_link() ); ?>" id="mainwp_qsw_add_client_continue_button" class="ui big green basic right floated button"><?php esc_html_e( 'Continue Without Creating Clients', 'mainwp' ); ?> <i class="arrow right icon"></i></a> |
| 982 |
<a href="<?php echo esc_url( $this->get_back_step_link() ); ?>" class="ui big basic button"><i class="arrow left icon"></i> <?php esc_html_e( 'Back to Add Sites', 'mainwp' ); ?></a> |
| 983 |
</div> |
| 984 |
</div> |
| 985 |
</form> |
| 986 |
<script> |
| 987 |
jQuery('.mainwp-qsw-add-client .item').tab({ |
| 988 |
'onVisible': function() { |
| 989 |
mainwp_add_client_onvisible_callback(this); |
| 990 |
} |
| 991 |
}); |
| 992 |
</script> |
| 993 |
<?php |
| 994 |
} |
| 995 |
|
| 996 |
/** |
| 997 |
* Method render_add_client_content(). |
| 998 |
* |
| 999 |
* Renders add client content window. |
| 1000 |
*/ |
| 1001 |
public function render_add_client_content() { |
| 1002 |
$edit_client = false; |
| 1003 |
$client_id = 0; |
| 1004 |
$default_client_fields = MainWP_Client_Handler::get_mini_default_client_fields(); |
| 1005 |
$first_site_id = get_transient( 'mainwp_transient_just_connected_site_id' ); |
| 1006 |
$website = MainWP_DB::instance()->get_website_by_id( $first_site_id ); |
| 1007 |
?> |
| 1008 |
<div class="ui form"> |
| 1009 |
<?php if ( $first_site_id ) : ?> |
| 1010 |
<div class="field"> |
| 1011 |
<label><?php esc_html_e( 'Client Site URL', 'mainwp' ); ?></label> |
| 1012 |
<div class="ui disabled fluid input"> |
| 1013 |
<input type="text" value="<?php echo esc_url( $website->url ); ?>" /> |
| 1014 |
</div> |
| 1015 |
</div> |
| 1016 |
<?php endif; ?> |
| 1017 |
<?php |
| 1018 |
foreach ( $default_client_fields as $field_name => $field ) { |
| 1019 |
$db_field = isset( $field['db_field'] ) ? $field['db_field'] : ''; |
| 1020 |
$val = $edit_client && '' !== $db_field && property_exists( $edit_client, $db_field ) ? $edit_client->{$db_field} : ''; |
| 1021 |
$tip = isset( $field['tooltip'] ) ? $field['tooltip'] : ''; |
| 1022 |
?> |
| 1023 |
<div class="field"> |
| 1024 |
<label for="client_fields[default_field][<?php echo esc_attr( $field_name ); ?>]"><?php echo esc_html( $field['title'] ); ?> <?php echo isset( $field['required'] ) && $field['required'] ? '<span class="ui red small text">' . esc_html__( '(Required)', 'mainwp' ) . '</span>' : ''; ?></label> |
| 1025 |
<input type="text" value="<?php echo esc_html( $val ); ?>" id="mainwp_qsw_client_name_field" class="regular-text" name="client_fields[default_field][<?php echo esc_attr( $field_name ); ?>]"/> |
| 1026 |
</div> |
| 1027 |
<?php |
| 1028 |
|
| 1029 |
if ( 'client.email' === $field_name ) { |
| 1030 |
?> |
| 1031 |
<div class="field"> |
| 1032 |
<label><?php esc_html_e( 'Client photo', 'mainwp' ); ?></label> |
| 1033 |
<div class="ui file grey input"> |
| 1034 |
<input type="file" name="mainwp_client_image_uploader[client_field]" accept="image/*" data-inverted="" data-tooltip="<?php esc_attr_e( "Image must be 500KB maximum. It will be cropped to 310px wide and 70px tall. For best results us an image of this site. Allowed formats: jpeg, gif and png. Note that animated gifs aren't going to be preserved.", 'mainwp' ); ?>" /> |
| 1035 |
</div> |
| 1036 |
</div> |
| 1037 |
<?php |
| 1038 |
} |
| 1039 |
} |
| 1040 |
$temp = $this->get_add_contact_temp( false ); |
| 1041 |
?> |
| 1042 |
<div class="field"> |
| 1043 |
<a href="javascript:void(0);" class="mainwp-client-add-contact" add-contact-temp="<?php echo esc_attr( $temp ); ?>"><i class="plus icon"></i><?php esc_html_e( 'Additional Contact Information', 'mainwp' ); ?></a> |
| 1044 |
</div> |
| 1045 |
<div class="ui section hidden divider after-add-contact-field"></div> |
| 1046 |
</div> |
| 1047 |
<input type="hidden" name="client_fields[client_id]" value="<?php echo intval( $client_id ); ?>"> |
| 1048 |
<?php |
| 1049 |
} |
| 1050 |
|
| 1051 |
/** |
| 1052 |
* Method render_multi_add_client_content() |
| 1053 |
* |
| 1054 |
* Render form multi create client. |
| 1055 |
* |
| 1056 |
* @uses MainWP_Client_Handler::get_mini_default_contact_fields() |
| 1057 |
* |
| 1058 |
* @param int $index row index. |
| 1059 |
* @param array $website website data. |
| 1060 |
*/ |
| 1061 |
public function render_multi_add_client_content( $index, $website ) { |
| 1062 |
$contact_fields = MainWP_Client_Handler::get_mini_default_contact_fields(); |
| 1063 |
?> |
| 1064 |
<div class="row mainwp-qsw-add-client-rows" id="mainwp-qsw-add-client-row-<?php echo esc_attr( $index ); ?>"> |
| 1065 |
<div class="five wide column"> |
| 1066 |
<div class="ui mini fluid input"> |
| 1067 |
<input type="text" name="mainwp_add_client[<?php echo esc_attr( $index ); ?>][site_url]" class="mainwp-qsw-add-client-site-url" value="<?php echo isset( $website['url'] ) ? esc_attr( $website['url'] ) : ''; ?>" data-row-index="<?php echo esc_attr( $index ); ?>" id="mainwp-qsw-add-client-site-url-<?php echo esc_attr( $index ); ?>" <?php echo isset( $website['id'] ) ? 'disabled' : ''; ?>> |
| 1068 |
<?php if ( isset( $website['id'] ) ) : ?> |
| 1069 |
<input type="hidden" name="mainwp_add_client[<?php echo esc_attr( $index ); ?>][website_id]" value="<?php echo intval( $website['id'] ); ?>" id="mainwp-qsw-add-client-website-id-<?php echo esc_attr( $index ); ?>" > |
| 1070 |
<?php endif ?> |
| 1071 |
</div> |
| 1072 |
</div> |
| 1073 |
<div class="five wide column"> |
| 1074 |
<div class="ui mini fluid input"> |
| 1075 |
<input type="text" name="mainwp_add_client[<?php echo esc_attr( $index ); ?>][client_name]" class="mainwp-qsw-add-client-client-name" value="" data-row-index="<?php echo esc_attr( $index ); ?>" id="mainwp-qsw-add-client-client-name-<?php echo esc_attr( $index ); ?>"> |
| 1076 |
</div> |
| 1077 |
</div> |
| 1078 |
<div class="five wide column"> |
| 1079 |
<div class="ui mini fluid input"> |
| 1080 |
<input type="email" name="mainwp_add_client[<?php echo esc_attr( $index ); ?>][client_email]" class="mainwp-qsw-add-client-client-email" value="" data-row-index="<?php echo esc_attr( $index ); ?>" id="mainwp-qsw-add-client-client-email-<?php echo esc_attr( $index ); ?>"> |
| 1081 |
</div> |
| 1082 |
</div> |
| 1083 |
<div class="one wide column"> |
| 1084 |
<div class="ui mini fluid input"> |
| 1085 |
<a class="mainwp-qsw-add-client-more-row" onclick="mainwp_qsw_add_client_more_row(<?php echo esc_attr( $index ); ?>)" style="margin-right: 10px !important;"> |
| 1086 |
<i class="caret left icon" id="icon-visible-<?php echo esc_attr( $index ); ?>"></i> |
| 1087 |
<i class="caret down icon" id="icon-hidden-<?php echo esc_attr( $index ); ?>" style="display:none"></i> |
| 1088 |
</a> |
| 1089 |
<a class="mainwp-qsw-add-client-delete-row" href="javascript:void(0)" onclick="mainwp_qsw_add_client_delete_row(<?php echo esc_attr( $index ); ?>)"> |
| 1090 |
<i class="trash alternate outline icon"></i> |
| 1091 |
</a> |
| 1092 |
</div> |
| 1093 |
</div> |
| 1094 |
<?php if ( ! empty( $contact_fields ) ) : ?> |
| 1095 |
<?php foreach ( $contact_fields as $field_name => $field ) : ?> |
| 1096 |
<div class="five wide column mainwp-qsw-add-client-column-more-<?php echo esc_attr( $index ); ?>" style="display:none"> |
| 1097 |
<span class="ui small text"><?php echo esc_html( $field['title'] ); ?></span> |
| 1098 |
<div class="ui mini fluid input"> |
| 1099 |
<input type="text" name="client_fields[<?php echo esc_attr( $index ); ?>][new_contacts_field][<?php echo esc_attr( $field_name ); ?>][]" class="mainwp-qsw-add-client-client-fields"> |
| 1100 |
</div> |
| 1101 |
</div> |
| 1102 |
<?php endforeach; ?> |
| 1103 |
<?php endif; ?> |
| 1104 |
</div> |
| 1105 |
<?php |
| 1106 |
} |
| 1107 |
|
| 1108 |
/** |
| 1109 |
* Method get_add_contact_temp(). |
| 1110 |
* |
| 1111 |
* Get add contact template. |
| 1112 |
* |
| 1113 |
* @param bool $echo_out Echo template or not. |
| 1114 |
*/ |
| 1115 |
public function get_add_contact_temp( $echo_out = false ) { |
| 1116 |
|
| 1117 |
$input_name = 'new_contacts_field'; |
| 1118 |
$contact_id = 0; |
| 1119 |
ob_start(); |
| 1120 |
?> |
| 1121 |
<div class="ui hidden divider top-contact-fields"></div> <?php // must have class: top-contact-fields. ?> |
| 1122 |
<div class="ui left aligned horizontal divider"><?php esc_html_e( 'Additional Contact Information', 'mainwp' ); ?></div> |
| 1123 |
<div class="ui hidden divider"></div> |
| 1124 |
<div class="ui hidden divider"></div> |
| 1125 |
<?php |
| 1126 |
$contact_fields = MainWP_Client_Handler::get_mini_default_contact_fields(); |
| 1127 |
foreach ( $contact_fields as $field_name => $field ) { |
| 1128 |
$val = ''; |
| 1129 |
$contact_id = ''; |
| 1130 |
?> |
| 1131 |
<div class="field"> |
| 1132 |
<label><?php echo esc_html( $field['title'] ); ?> <?php echo isset( $field['required'] ) && $field['required'] ? '<span class="ui red small text">' . esc_html__( '(Required)', 'mainwp' ) . '</span>' : ''; ?></label> |
| 1133 |
<input type="text" value="<?php echo esc_html( $val ); ?>" class="regular-text" name="client_fields[<?php echo esc_html( $input_name ); ?>][<?php echo esc_attr( $field_name ); ?>][]"/> |
| 1134 |
</div> |
| 1135 |
<?php |
| 1136 |
} |
| 1137 |
?> |
| 1138 |
<div class="field remove-contact-field-parent"> |
| 1139 |
<a href="javascript:void(0);" contact-id="<?php echo intval( $contact_id ); ?>" class="mainwp-client-remove-contact"><i class="minus icon"></i><?php esc_html_e( 'Remove contact', 'mainwp' ); ?></a> |
| 1140 |
</div> |
| 1141 |
<div class="ui section hidden divider bottom-contact-fields"></div> |
| 1142 |
<?php |
| 1143 |
$html = ob_get_clean(); |
| 1144 |
if ( $echo_out ) { |
| 1145 |
echo $html; //phpcs:ignore -- validated content. |
| 1146 |
} |
| 1147 |
return $html; |
| 1148 |
} |
| 1149 |
|
| 1150 |
/** |
| 1151 |
* Method mwp_setup_monitoring() |
| 1152 |
* |
| 1153 |
* Render Monitoring Step. |
| 1154 |
*/ |
| 1155 |
public function mwp_setup_monitoring() { |
| 1156 |
|
| 1157 |
$disableSitesHealthMonitoring = get_option( 'mainwp_disableSitesHealthMonitoring', 1 ); |
| 1158 |
$sitehealthThreshold = get_option( 'mainwp_sitehealthThreshold', 80 ); // "Should be improved" threshold. |
| 1159 |
|
| 1160 |
$global_settings = MainWP_Uptime_Monitoring_Handle::get_global_monitoring_settings(); |
| 1161 |
|
| 1162 |
$glo_active = 0; |
| 1163 |
if ( isset( $global_settings['active'] ) ) { |
| 1164 |
$glo_active = 1 === (int) $global_settings['active'] ? 1 : 0; |
| 1165 |
} |
| 1166 |
?> |
| 1167 |
<form method="post" class="ui form"> |
| 1168 |
<?php MainWP_UI::generate_wp_nonce( 'mainwp-admin-nonce' ); ?> |
| 1169 |
<div class="ui vertical basic padded segments"> |
| 1170 |
<div class="ui padded segment"> |
| 1171 |
<h1 class="ui massive header"><?php esc_html_e( 'Enable Monitoring for Your Sites', 'mainwp' ); ?></h1> |
| 1172 |
<p><?php esc_html_e( 'MainWP can automatically keep an eye on your Child Sites\' uptime and overall health.', 'mainwp' ); ?></p> |
| 1173 |
</div> |
| 1174 |
</div> |
| 1175 |
<div class="ui vertical basic padded segments"> |
| 1176 |
<div class="ui padded segment"> |
| 1177 |
<h2 class="ui big header"><?php esc_html_e( 'Uptime Monitoring', 'mainwp' ); ?></h2> |
| 1178 |
<p><?php esc_html_e( 'MainWP checks your sites at regular intervals to ensure they\'re online and reachable. You\'ll get an email alert if any site goes down. No third-party service needed.', 'mainwp' ); ?></p> |
| 1179 |
<div class="ui hidden divider"></div> |
| 1180 |
<div class="field settings-field-indicator-wrapper settings-field-indicator-monitor-general" default-indi-value="0"> |
| 1181 |
<label> |
| 1182 |
<?php |
| 1183 |
MainWP_Settings_Indicator::render_not_default_indicator( 'mainwp_setup_enableUptimeMonitoring', (int) $glo_active, true, 0 ); |
| 1184 |
esc_html_e( 'Enable uptime monitoring', 'mainwp' ); |
| 1185 |
?> |
| 1186 |
</label> |
| 1187 |
<div class="ui hidden divider"></div> |
| 1188 |
<div class="ui toggle checkbox mainwp-checkbox-showhide-elements" hide-parent="uptime-monitoring"> |
| 1189 |
<input type="checkbox" value="1" class="settings-field-value-change-handler" name="mainwp_setup_enableUptimeMonitoring" id="mainwp_setup_enableUptimeMonitoring" <?php echo 1 === (int) $glo_active ? 'checked="true"' : ''; ?>/> |
| 1190 |
</div> |
| 1191 |
</div> |
| 1192 |
<div class="ui hidden divider"></div> |
| 1193 |
<div class="field settings-field-indicator-wrapper settings-field-indicator-monitor-general" default-indi-value="60" <?php echo $glo_active ? '' : 'style="display:none"'; ?> hide-element="uptime-monitoring"> |
| 1194 |
<label> |
| 1195 |
<?php |
| 1196 |
MainWP_Settings_Indicator::render_not_default_indicator( 'mainwp_setup_monitor_interval_hidden', (int) $global_settings['interval'], true, 60 ); |
| 1197 |
esc_html_e( 'Monitor interval (minutes)', 'mainwp' ); |
| 1198 |
?> |
| 1199 |
</label> |
| 1200 |
<div class="ui hidden divider"></div> |
| 1201 |
<div class="ui labeled ticked slider settings-field-value-change-handler" id="mainwp_setup_monitor_interval_slider" style="max-width: 600px"></div> |
| 1202 |
<input type="hidden" name="mainwp_setup_monitor_interval_hidden" class="settings-field-value-change-handler" id="mainwp_setup_monitor_interval_hidden" value="<?php echo intval( $global_settings['interval'] ); ?>" /> |
| 1203 |
</div> |
| 1204 |
</div> |
| 1205 |
</div> |
| 1206 |
<div class="ui vertical basic padded segments"> |
| 1207 |
<div class="ui padded segment"> |
| 1208 |
<h2 class="ui big header"><?php esc_html_e( 'Site Health Monitoring', 'mainwp' ); ?></h2> |
| 1209 |
<p><?php esc_html_e( 'MainWP keeps an eye on each site\'s WordPress Site Health status and alerts you if any issues appear or a site\'s health drops below "Good".', 'mainwp' ); ?></p> |
| 1210 |
<div class="ui hidden divider"></div> |
| 1211 |
<div class="field settings-field-indicator-wrapper" default-indi-value="1"> |
| 1212 |
<label> |
| 1213 |
<?php |
| 1214 |
MainWP_Settings_Indicator::render_not_default_indicator( 'mainwp_disableSitesHealthMonitoring', (int) $disableSitesHealthMonitoring ); |
| 1215 |
esc_html_e( 'Enable site health monitoring', 'mainwp' ); |
| 1216 |
?> |
| 1217 |
</label> |
| 1218 |
<div class="ui hidden divider"></div> |
| 1219 |
<div class="ui toggle checkbox mainwp-checkbox-showhide-elements" hide-parent="health-monitoring"> |
| 1220 |
<input type="checkbox" class="settings-field-value-change-handler" inverted-value="1" name="mainwp_setup_disable_sitesHealthMonitoring" id="mainwp_setup_disable_sitesHealthMonitoring" <?php echo 1 === (int) $disableSitesHealthMonitoring ? '' : 'checked="true"'; ?>/> |
| 1221 |
</div> |
| 1222 |
</div> |
| 1223 |
<div class="ui hidden divider"></div> |
| 1224 |
<div class="field settings-field-indicator-wrapper" default-indi-value="80" <?php echo $disableSitesHealthMonitoring ? 'style="display:none"' : ''; ?> hide-element="health-monitoring"> |
| 1225 |
<label> |
| 1226 |
<?php |
| 1227 |
MainWP_Settings_Indicator::render_not_default_indicator( 'mainwp_sitehealthThreshold', (int) $sitehealthThreshold ); |
| 1228 |
esc_html_e( 'Site health threshold', 'mainwp' ); |
| 1229 |
?> |
| 1230 |
</label> |
| 1231 |
<div class="ui hidden divider"></div> |
| 1232 |
<select name="mainwp_setup_site_healthThreshold" id="mainwp_setup_site_healthThreshold" class="ui compact dropdown settings-field-value-change-handler"> |
| 1233 |
<option value="80" <?php echo 80 === $sitehealthThreshold || 0 === $sitehealthThreshold ? 'selected' : ''; ?>><?php esc_html_e( 'Should be improved', 'mainwp' ); ?></option> |
| 1234 |
<option value="100" <?php echo 100 === $sitehealthThreshold ? 'selected' : ''; ?>><?php esc_html_e( 'Good', 'mainwp' ); ?></option> |
| 1235 |
</select> |
| 1236 |
</div> |
| 1237 |
</div> |
| 1238 |
<div class="ui padded segment"> |
| 1239 |
<input type="submit" class="ui big green basic right floated button" value="<?php esc_attr_e( 'Save and Finish!', 'mainwp' ); ?>" name="save_step" /> |
| 1240 |
<a href="<?php echo esc_url( $this->get_back_step_link() ); ?>" class="ui big basic button"><i class="arrow left icon"></i> <?php esc_html_e( 'Back to Add Client', 'mainwp' ); ?></a> |
| 1241 |
</div> |
| 1242 |
</div> |
| 1243 |
<?php wp_nonce_field( 'mwp-setup' ); ?> |
| 1244 |
</form> |
| 1245 |
|
| 1246 |
<script type="text/javascript"> |
| 1247 |
<?php |
| 1248 |
$all_intervals = MainWP_Uptime_Monitoring_Edit::get_interval_values( false ); |
| 1249 |
echo 'var interval_label = ' . wp_json_encode( array_values( $all_intervals ) ) . ";\n"; |
| 1250 |
echo 'var interval_values = ' . wp_json_encode( array_keys( $all_intervals ) ) . ";\n"; |
| 1251 |
?> |
| 1252 |
jQuery('#mainwp_setup_monitor_interval_slider').slider({ |
| 1253 |
interpretLabel: function(value) { |
| 1254 |
return interval_label[value]; |
| 1255 |
}, |
| 1256 |
autoAdjustLabels: false, |
| 1257 |
min: 0, |
| 1258 |
smooth: true, |
| 1259 |
restrictedLabels: [interval_label[0],interval_label[<?php echo count( $all_intervals ) - 1; ?>]], |
| 1260 |
showThumbTooltip: true, |
| 1261 |
tooltipConfig: { |
| 1262 |
position: 'bottom center', |
| 1263 |
variation: 'small visible black' |
| 1264 |
}, |
| 1265 |
max: <?php echo count( $all_intervals ) - 1; ?>, |
| 1266 |
onChange: function(value) { |
| 1267 |
jQuery('#mainwp_setup_monitor_interval_hidden').val(interval_values[value]).change(); |
| 1268 |
}, |
| 1269 |
onMove: function(value) { |
| 1270 |
jQuery(this).find('.thumb').attr('data-tooltip', interval_label[value]); |
| 1271 |
} |
| 1272 |
}); |
| 1273 |
jQuery('#mainwp_setup_monitor_interval_slider').slider('set value', interval_values.indexOf(<?php echo intval( $global_settings['interval'] ); ?>)); |
| 1274 |
</script> |
| 1275 |
|
| 1276 |
<?php |
| 1277 |
} |
| 1278 |
|
| 1279 |
/** |
| 1280 |
* Method mwp_setup_monitoring_save() |
| 1281 |
* |
| 1282 |
* Save Monitoring form data. |
| 1283 |
* |
| 1284 |
* @uses \MainWP\Dashboard\MainWP_Utility::update_option() |
| 1285 |
*/ |
| 1286 |
public function mwp_setup_monitoring_save() { |
| 1287 |
check_admin_referer( 'mwp-setup' ); |
| 1288 |
// phpcs:disable WordPress.Security.NonceVerification,WordPress.Security.ValidatedSanitizedInput.InputNotSanitized |
| 1289 |
|
| 1290 |
$global_settings = MainWP_Uptime_Monitoring_Handle::get_global_monitoring_settings(); |
| 1291 |
$global_settings['active'] = ! empty( $_POST['mainwp_setup_enableUptimeMonitoring'] ) ? 1 : 0; |
| 1292 |
$global_settings['interval'] = isset( $_POST['mainwp_setup_monitor_interval_hidden'] ) ? intval( $_POST['mainwp_setup_monitor_interval_hidden'] ) : 60; |
| 1293 |
|
| 1294 |
MainWP_Uptime_Monitoring_Handle::update_uptime_global_settings( $global_settings ); |
| 1295 |
|
| 1296 |
MainWP_Utility::update_option( 'mainwp_disableSitesHealthMonitoring', ( ! isset( $_POST['mainwp_setup_disable_sitesHealthMonitoring'] ) ? 1 : 0 ) ); |
| 1297 |
$val = isset( $_POST['mainwp_setup_site_healthThreshold'] ) ? intval( $_POST['mainwp_setup_site_healthThreshold'] ) : 80; |
| 1298 |
MainWP_Utility::update_option( 'mainwp_sitehealthThreshold', $val ); |
| 1299 |
// phpcs:enable |
| 1300 |
wp_safe_redirect( $this->get_next_step_link() ); |
| 1301 |
exit; |
| 1302 |
} |
| 1303 |
|
| 1304 |
/** |
| 1305 |
* Method mwp_setup_ready() |
| 1306 |
* |
| 1307 |
* Render MainWP Dashboard ready message. |
| 1308 |
*/ |
| 1309 |
public function mwp_setup_ready() { |
| 1310 |
?> |
| 1311 |
<div class="ui hidden divider"></div> |
| 1312 |
<div class="ui hidden divider"></div> |
| 1313 |
<div class="ui basic segment"> |
| 1314 |
<h1 class="ui icon huge header"> |
| 1315 |
<em data-emoji=":tada:" class="big tadaaaa"></em> |
| 1316 |
</h1> |
| 1317 |
<h2 class="ui massive header"><?php esc_html_e( 'Setup Complete!', 'mainwp' ); ?></h2> |
| 1318 |
</div> |
| 1319 |
<div class="ui basic segment"> |
| 1320 |
<div><?php esc_html_e( 'Your MainWP Dashboard is configured and connected. You can now:', 'mainwp' ); ?></div> |
| 1321 |
<div class="ui bulleted list"> |
| 1322 |
<div class="item"><?php esc_html_e( 'Manage updates across all connected sites', 'mainwp' ); ?></div> |
| 1323 |
<div class="item"><?php esc_html_e( 'Monitor uptime and site performance', 'mainwp' ); ?></div> |
| 1324 |
<div class="item"><?php esc_html_e( 'Update plugins and themes in bulk', 'mainwp' ); ?></div> |
| 1325 |
<div class="item"><?php esc_html_e( 'Run backups and maintenance tasks', 'mainwp' ); ?></div> |
| 1326 |
<div class="item"><?php esc_html_e( 'And much more, all from YOUR MainWP Dashboard.', 'mainwp' ); ?></div> |
| 1327 |
</div> |
| 1328 |
</div> |
| 1329 |
<div class="ui basic segment"> |
| 1330 |
<a class="ui huge green fade in transition button" href="<?php echo esc_url( admin_url( 'admin.php?page=mainwp_tab' ) ); ?>"><?php esc_html_e( 'Go to Dashboard', 'mainwp' ); ?></a> |
| 1331 |
</div> |
| 1332 |
<div class="ui basic segment"> |
| 1333 |
<span class="ui grey text"><?php esc_html_e( 'Your connected sites are ready to manage from your MainWP Dashboard.', 'mainwp' ); ?></span> |
| 1334 |
</div> |
| 1335 |
<div class="ui hidden divider"></div> |
| 1336 |
<div class="ui hidden divider"></div> |
| 1337 |
<?php |
| 1338 |
} |
| 1339 |
|
| 1340 |
/** |
| 1341 |
* Render usetiful tours. |
| 1342 |
*/ |
| 1343 |
public static function mainwp_usetiful_tours() { |
| 1344 |
echo " |
| 1345 |
<script> |
| 1346 |
(function (w, d, s) { |
| 1347 |
let a = d.getElementsByTagName('head')[0]; |
| 1348 |
let r = d.createElement('script'); |
| 1349 |
r.async = 1; |
| 1350 |
r.src = s; |
| 1351 |
r.setAttribute('id', 'usetifulScript'); |
| 1352 |
r.dataset.token = '480fa17b0507a1c60abba94bfdadd0a7'; |
| 1353 |
a.appendChild(r); |
| 1354 |
})(window, document, 'https://www.usetiful.com/dist/usetiful.js');</script> |
| 1355 |
"; |
| 1356 |
} |
| 1357 |
} |
| 1358 |
|