| @@ -14,8 +14,12 @@ | ||
| 14 | 14 | /** |
| 15 | 15 | * Setting |
| 16 | 16 | */ |
| 17 | 17 | class Setting { |
| 18 | + const DISPLAY_TYPE_SINGLE = 'Single'; | |
| 19 | + const DISPLAY_TYPE_GRID = 'Grid'; | |
| 20 | + const DISPLAY_TYPE_LIST = 'List'; | |
| 21 | + | |
| 18 | 22 | /** |
| 19 | 23 | * Convert WP GET parameters to Lasso GET |
| 20 | 24 | * |
| 21 | 25 | * @var array|string $get |
| @@ -45,8 +49,15 @@ | ||
| 45 | 49 | 'easy-affiliate-links/easy-affiliate-links.php', |
| 46 | 50 | ); |
| 47 | 51 | |
| 48 | 52 | /** |
| 53 | + * Settings general page | |
| 54 | + * | |
| 55 | + * @var string $settings_general_page | |
| 56 | + */ | |
| 57 | + public $settings_general_page = 'settings-general'; | |
| 58 | + | |
| 59 | + /** | |
| 49 | 60 | * Setting constructor. |
| 50 | 61 | */ |
| 51 | 62 | public function __construct() { |
| 52 | 63 | $this->get = Helper::GET(); |
| @@ -61,8 +72,15 @@ | ||
| 61 | 72 | return 'edit.php' === $pagenow && isset( $this->get['post_type'] ) && SIMPLE_URLS_SLUG === $this->get['post_type'] && isset( $this->get['page'] ); |
| 62 | 73 | } |
| 63 | 74 | |
| 64 | 75 | /** |
| 76 | + * Dashboard page | |
| 77 | + * | |
| 78 | + * @var string $dashboard_page | |
| 79 | + */ | |
| 80 | + public $dashboard_page = 'dashboard'; | |
| 81 | + | |
| 82 | + /** | |
| 65 | 83 | * Check whether current page is WP post page |
| 66 | 84 | */ |
| 67 | 85 | public function is_wordpress_post() { |
| 68 | 86 | global $pagenow; |
| @@ -186,8 +204,26 @@ | ||
| 186 | 204 | return $this->is_surls_page() && Helper::add_prefix_page( Enum::PAGE_DASHBOARD ) === $this->current_page; |
| 187 | 205 | } |
| 188 | 206 | |
| 189 | 207 | /** |
| 208 | + * Check current page is opportunities page | |
| 209 | + * | |
| 210 | + * @return bool | |
| 211 | + */ | |
| 212 | + public function is_opportunities_page() { | |
| 213 | + return $this->is_surls_page() && Helper::add_prefix_page( Enum::PAGE_OPPORTUNITIES ) === $this->current_page; | |
| 214 | + } | |
| 215 | + | |
| 216 | + /** | |
| 217 | + * Check current page is tables page | |
| 218 | + * | |
| 219 | + * @return bool | |
| 220 | + */ | |
| 221 | + public function is_tables_page() { | |
| 222 | + return $this->is_surls_page() && Helper::add_prefix_page( Enum::PAGE_TABLES ) === $this->current_page; | |
| 223 | + } | |
| 224 | + | |
| 225 | + /** | |
| 190 | 226 | * Check current page is setting page |
| 191 | 227 | * |
| 192 | 228 | * @return bool |
| 193 | 229 | */ |
| @@ -273,60 +309,94 @@ | ||
| 273 | 309 | public static function save_support( $is_ajax = true ) { |
| 274 | 310 | $post = Helper::POST(); |
| 275 | 311 | $email = $post['email'] ?? ''; |
| 276 | 312 | $is_subscribe = $post['is_subscribe'] ?? ''; |
| 277 | - if ( $is_ajax && false === is_email( $email ) ) { | |
| 278 | - wp_send_json_success( | |
| 279 | - array( | |
| 280 | - 'success' => false, | |
| 281 | - 'msg' => 'Email is invalid.', | |
| 282 | - ) | |
| 313 | + $share_diagnostics = $post['share_diagnostics'] ?? 1; // Default to 1 (checked) | |
| 314 | + | |
| 315 | + | |
| 316 | + $settings = self::get_settings(); | |
| 317 | + $share_diagnostics_db = $settings[ Enum::SHARE_DIAGNOSTICS ] ?? ''; | |
| 318 | + $email_db = $settings[ Enum::EMAIL_SUPPORT ] ?? ''; | |
| 319 | + | |
| 320 | + if ( $is_ajax ) { | |
| 321 | + $settings[ Enum::IS_SUBSCRIBE ] = $is_subscribe; | |
| 322 | + $settings[ Enum::EMAIL_SUPPORT ] = $email; | |
| 323 | + $settings[ Enum::SHARE_DIAGNOSTICS ] = $share_diagnostics; | |
| 324 | + } else { | |
| 325 | + $email = $settings[ Enum::EMAIL_SUPPORT ]; | |
| 326 | + } | |
| 327 | + $support_enable_time = $settings[ Enum::SUPPORT_ENABLED_TIME ] ?? ''; | |
| 328 | + $current_date = date( 'm/d/Y', time() ); // phpcs:ignore | |
| 329 | + if ( ! $is_ajax || empty( $support_enable_time ) || $current_date > $support_enable_time || $share_diagnostics_db !== $share_diagnostics || $email !== $email_db ) { | |
| 330 | + global $wp_version; | |
| 331 | + $jwt_data = array( | |
| 332 | + 'email' => $email, | |
| 333 | + 'installed_version' => LASSO_LITE_VERSION, | |
| 334 | + 'datetime' => gmdate( 'Y-m-d H:i:s' ), | |
| 335 | + 'site_id' => License::get_site_id(), | |
| 336 | + 'install_url' => site_url(), | |
| 337 | + 'wordpress_version' => $wp_version, | |
| 338 | + 'php_version' => phpversion(), | |
| 339 | + 'mysql_version' => Model::get_wpdb()->db_version(), | |
| 340 | + 'is_classic_editor' => Helper::is_classic_editor() ? 1 : 0, | |
| 341 | + 'share_diagnostics' => $share_diagnostics, | |
| 283 | 342 | ); |
| 284 | - } else { | |
| 285 | - $settings = self::get_settings(); | |
| 286 | 343 | |
| 287 | - if ( $is_ajax ) { | |
| 288 | - $settings[ Enum::IS_SUBSCRIBE ] = $is_subscribe; | |
| 289 | - $settings[ Enum::EMAIL_SUPPORT ] = $email; | |
| 290 | - $settings[ Enum::SUPPORT_ENABLED ] = true; | |
| 291 | - } else { | |
| 292 | - $email = $settings[ Enum::EMAIL_SUPPORT ]; | |
| 344 | + $jwt = JWT::encode( $jwt_data, Constant::JWT_SECRET_KEY, 'HS256' ); | |
| 345 | + $data['data'] = $jwt; | |
| 346 | + $response = Helper::send_request( 'post', Constant::LASSO_LINK . '/lasso-lite/enable-support', $data ); | |
| 347 | + $response_body = ( isset( $response['response'] ) && is_object( $response['response'] ) ) ? $response['response'] : null; | |
| 348 | + $is_succeed = null !== $response_body && boolval( $response_body->succeed ?? false ); | |
| 349 | + if ( $is_succeed ) { | |
| 350 | + $user_hash = $response_body->user_hash; | |
| 351 | + $intercom_jwt = $response_body->intercom_jwt; | |
| 352 | + $settings[ Enum::SUPPORT_ENABLED_TIME ] = date( 'm/d/Y', time() ); // phpcs:ignore | |
| 353 | + $settings[ Enum::USER_HASH ] = $user_hash; | |
| 354 | + $settings[ Constant::SITE_ID_KEY ] = $response_body->site_id; | |
| 355 | + if ( ! empty( $intercom_jwt ) ) { | |
| 356 | + $settings[ Enum::INTERCOM_JWT ] = $intercom_jwt; | |
| 357 | + } | |
| 293 | 358 | } |
| 294 | - $support_enable_time = $settings[ Enum::SUPPORT_ENABLED_TIME ] ?? ''; | |
| 295 | - $current_date = date( 'm/d/Y', time() ); // phpcs:ignore | |
| 296 | - if ( ! $is_ajax || empty( $support_enable_time ) || $current_date > $support_enable_time ) { | |
| 297 | - global $wp_version; | |
| 298 | - $jwt_data = array( | |
| 299 | - 'email' => $email, | |
| 300 | - 'installed_version' => LASSO_LITE_VERSION, | |
| 301 | - 'datetime' => gmdate( 'Y-m-d H:i:s' ), | |
| 302 | - 'site_id' => Helper::get_option( Constant::SITE_ID_KEY ), | |
| 303 | - 'install_url' => site_url(), | |
| 304 | - 'wordpress_version' => $wp_version, | |
| 305 | - 'php_version' => phpversion(), | |
| 306 | - 'mysql_version' => Model::get_wpdb()->db_version(), | |
| 307 | - 'is_classic_editor' => Helper::is_classic_editor_plugin_active() ? 1 : 0, | |
| 308 | - ); | |
| 359 | + } | |
| 309 | 360 | |
| 310 | - $jwt = JWT::encode( $jwt_data, Constant::JWT_SECRET_KEY, 'HS256' ); | |
| 311 | - $data['data'] = $jwt; | |
| 312 | - $response = Helper::send_request( 'post', Constant::LASSO_LINK . 'lasso-lite/enable-support', $data ); | |
| 313 | - $is_succeed = boolval( $response['response']->succeed ); | |
| 314 | - if ( $is_succeed ) { | |
| 315 | - $user_hash = $response['response']->user_hash; | |
| 316 | - $settings[ Enum::SUPPORT_ENABLED_TIME ] = date( 'm/d/Y', time() ); // phpcs:ignore | |
| 317 | - $settings[ Enum::USER_HASH ] = $user_hash; | |
| 361 | + self::set_settings( $settings ); | |
| 362 | + if ( $is_ajax ) { | |
| 363 | + $response_data = array( | |
| 364 | + 'success' => true, | |
| 365 | + ); | |
| 366 | + | |
| 367 | + // Provide Intercom bootstrap payload on AJAX success so frontend can init Intercom immediately | |
| 368 | + if ( ! empty( $settings[ Enum::INTERCOM_JWT ] ) ) { | |
| 369 | + $email_support = $settings[ Enum::EMAIL_SUPPORT ] ?? $email; | |
| 370 | + $email_support_norm = strtolower( trim( $email_support ) ); | |
| 371 | + | |
| 372 | + $intercom_user_id = Helper::get_intercom_user_id( $email_support_norm, $settings[ Enum::INTERCOM_JWT ] ); | |
| 373 | + | |
| 374 | + $user = get_user_by( 'email', $email_support_norm ); | |
| 375 | + $user_name = isset( $user->display_name ) ? $user->display_name : get_bloginfo( 'name' ); | |
| 376 | + $classic_editor = Helper::is_classic_editor() ? 1 : 0; | |
| 377 | + $lasso_lite_user = 1; | |
| 378 | + if ( Helper::is_lasso_pro_plugin_active() ) { | |
| 379 | + $lasso_lite_user = 0; | |
| 318 | 380 | } |
| 319 | - } | |
| 320 | 381 | |
| 321 | - self::set_settings( $settings ); | |
| 322 | - if ( $is_ajax ) { | |
| 323 | - wp_send_json_success( | |
| 324 | - array( | |
| 325 | - 'success' => true, | |
| 326 | - ) | |
| 382 | + $response_data['intercom'] = array( | |
| 383 | + 'app_id' => Constant::LASSO_INTERCOM_APP_ID, | |
| 384 | + 'name' => $user_name, | |
| 385 | + 'user_id' => $intercom_user_id, | |
| 386 | + 'email' => $email_support_norm, | |
| 387 | + 'lasso_version' => (int) LASSO_LITE_VERSION, | |
| 388 | + 'classic_editor' => $classic_editor, | |
| 389 | + 'wp_admin_url' => admin_url(), | |
| 390 | + 'lasso_lite_user' => $lasso_lite_user, | |
| 391 | + 'intercom_user_jwt' => $settings[ Enum::INTERCOM_JWT ], | |
| 392 | + 'site_id' => $settings[ Constant::SITE_ID_KEY ], | |
| 327 | 393 | ); |
| 328 | 394 | } |
| 395 | + | |
| 396 | + wp_send_json_success( | |
| 397 | + $response_data | |
| 398 | + ); | |
| 329 | 399 | } |
| 330 | 400 | } |
| 331 | 401 | |
| 332 | 402 | /** |
| @@ -353,9 +423,9 @@ | ||
| 353 | 423 | * |
| 354 | 424 | * @return array|false |
| 355 | 425 | */ |
| 356 | 426 | public static function get_import_sources() { |
| 357 | - $plugin_list = self::$import_sources; | |
| 427 | + $plugin_list = (array) self::$import_sources; | |
| 358 | 428 | |
| 359 | 429 | $result = array(); |
| 360 | 430 | $plugin_path_abs = dirname( SIMPLE_URLS_DIR ); |
| 361 | 431 | |
| @@ -393,6 +463,38 @@ | ||
| 393 | 463 | $plugin_name = $plugin_data['Name']; |
| 394 | 464 | } |
| 395 | 465 | |
| 396 | 466 | return $plugin_name; |
| 467 | + } | |
| 468 | + | |
| 469 | + /** | |
| 470 | + * Get report url by tab | |
| 471 | + */ | |
| 472 | + public function get_dashboard_page() { | |
| 473 | + $dashboard_url = add_query_arg( | |
| 474 | + array( | |
| 475 | + 'post_type' => Constant::LASSO_POST_TYPE, | |
| 476 | + 'page' => $this->dashboard_page, | |
| 477 | + ), | |
| 478 | + admin_url( 'edit.php' ) | |
| 479 | + ); | |
| 480 | + | |
| 481 | + return $dashboard_url; | |
| 482 | + } | |
| 483 | + | |
| 484 | + /** | |
| 485 | + * Get report url by tab | |
| 486 | + * | |
| 487 | + * @param string $page_slug Page slug. | |
| 488 | + */ | |
| 489 | + public static function get_lasso_page_url( $page_slug ) { | |
| 490 | + $dashboard_url = add_query_arg( | |
| 491 | + array( | |
| 492 | + 'post_type' => Constant::LASSO_POST_TYPE, | |
| 493 | + 'page' => $page_slug, | |
| 494 | + ), | |
| 495 | + admin_url( 'edit.php' ) | |
| 496 | + ); | |
| 497 | + | |
| 498 | + return $dashboard_url; | |
| 397 | 499 | } |
| 398 | 500 | } |