get = Helper::GET(); $this->current_page = $this->get['page'] ?? ''; } /** * Check whether current page is SURLS page or not. */ public function is_surls_page() { global $pagenow; return 'edit.php' === $pagenow && isset( $this->get['post_type'] ) && SIMPLE_URLS_SLUG === $this->get['post_type'] && isset( $this->get['page'] ); } /** * Dashboard page * * @var string $dashboard_page */ public $dashboard_page = 'dashboard'; /** * Check whether current page is WP post page */ public function is_wordpress_post() { global $pagenow; $action = $this->get['action'] ?? ''; $add_new_page = 'post-new.php' === $pagenow; $edit_page = 'post.php' === $pagenow && 'edit' === $action; $post_type = $this->get['post_type'] ?? ''; if ( ( 'edit.php' === $pagenow || $add_new_page ) && '' === $post_type ) { $post_type = 'post'; } elseif ( $add_new_page ) { $post_type = $this->get['post_type'] ?? $post_type; } elseif ( $edit_page ) { $post_id = intval( $this->get['post'] ?? 0 ); $post_type = $post_id > 0 ? get_post_type( $post_id ) : $post_type; } if ( 'term.php' === $pagenow ) { $post_type = ''; } return 'post' === $post_type || 'page' === $post_type; } /** * Check whether current page is custom post page */ public function is_custom_post() { global $pagenow; $action = $this->get['action'] ?? ''; $add_new_page = 'post-new.php' === $pagenow; $edit_page = 'post.php' === $pagenow && 'edit' === $action; $post_type = $this->get['post_type'] ?? ''; if ( ( 'edit.php' === $pagenow || $add_new_page ) && '' === $post_type ) { $post_type = 'post'; } elseif ( $add_new_page ) { $post_type = $this->get['post_type'] ?? $post_type; } elseif ( $edit_page ) { $post_id = intval( $this->get['post'] ?? 0 ); $post_type = $post_id > 0 ? get_post_type( $post_id ) : $post_type; } if ( 'term.php' === $pagenow ) { $post_type = ''; } return '' !== $post_type && 'post' !== $post_type && 'page' !== $post_type; } /** * Update lasso setting to db * * @param string $option_name Option name. * @param string $option_default Option default. Default to null. */ public static function get_setting( $option_name, $option_default = null ) { if ( ! is_string( $option_name ) ) { return $option_default; } $options = self::get_settings(); return $options[ $option_name ] ?? $option_default; } /** * Get lasso settings from db */ public static function get_settings() { $options = get_option( 'lassolite_settings', array() ); if ( ! is_array( $options ) ) { $options = array(); } $defaults = Constant::DEFAULT_SETTINGS; return wp_parse_args( $options, $defaults ); } /** * Update lasso setting to db * * @param string $option_name Option name. * @param string $option_value Option value. */ public static function set_setting( $option_name, $option_value ) { if ( ! is_string( $option_name ) ) { return false; } $options = self::get_settings(); $options[ $option_name ] = $option_value; return update_option( 'lassolite_settings', $options ); } /** * Update lasso settings to db * * @param array $options New options. */ public static function set_settings( $options ) { if ( ! is_array( $options ) ) { return false; } $defaults = self::get_settings(); $options = array_merge( $defaults, $options ); return update_option( 'lassolite_settings', $options ); } /** * Check current page is dashboard page * * @return bool */ public function is_dashboard_page() { return $this->is_surls_page() && Helper::add_prefix_page( Enum::PAGE_DASHBOARD ) === $this->current_page; } /** * Check current page is opportunities page * * @return bool */ public function is_opportunities_page() { return $this->is_surls_page() && Helper::add_prefix_page( Enum::PAGE_OPPORTUNITIES ) === $this->current_page; } /** * Check current page is tables page * * @return bool */ public function is_tables_page() { return $this->is_surls_page() && Helper::add_prefix_page( Enum::PAGE_TABLES ) === $this->current_page; } /** * Check current page is setting page * * @return bool */ public function is_setting_page() { $setting_pages = array( Helper::add_prefix_page( Enum::PAGE_SETTINGS_GENERAL ), Helper::add_prefix_page( Enum::PAGE_SETTINGS_DISPLAY ), Helper::add_prefix_page( Enum::PAGE_SETTINGS_AMAZON ), ); return $this->is_surls_page() && in_array( $this->current_page, $setting_pages, true ); } /** * Check current page is setting - display page * * @return bool */ public function is_setting_display_page() { return $this->is_surls_page() && Helper::add_prefix_page( Enum::PAGE_SETTINGS_DISPLAY ) === $this->current_page; } /** * Check current page is setting - amazon page * * @return bool */ public function is_setting_amazon_page() { return $this->is_surls_page() && Helper::add_prefix_page( Enum::PAGE_SETTINGS_AMAZON ) === $this->current_page; } /** * Check current page is onboarding * * @return bool */ public function is_setting_onboarding_page() { return $this->is_surls_page() && Helper::add_prefix_page( Enum::PAGE_ONBOARDING ) === $this->current_page; } /** * Update lasso settings to db * Check current page is setting - display page * * @return bool */ public function is_setting_general_page() { return $this->is_surls_page() && Helper::add_prefix_page( Enum::PAGE_SETTINGS_GENERAL ) === $this->current_page; } /** * Check current page is import page * * @return bool */ public function is_import_page() { return $this->is_surls_page() && Helper::add_prefix_page( Enum::PAGE_IMPORT ) === $this->current_page; } /** * Check current page is group detail page * * @return bool */ public function is_group_detail_page() { return $this->is_surls_page() && Helper::add_prefix_page( Enum::PAGE_GROUP_DETAIL ) === $this->current_page; } /** * Check current page is group detail page * * @return bool */ public function is_group_page() { return $this->is_surls_page() && Helper::add_prefix_page( Enum::PAGE_GROUPS ) === $this->current_page; } /** * Save support * * @param bool $is_ajax check whether $is_ajax request. */ public static function save_support( $is_ajax = true ) { $post = Helper::POST(); $email = $post['email'] ?? ''; $is_subscribe = $post['is_subscribe'] ?? ''; $share_diagnostics = $post['share_diagnostics'] ?? 1; // Default to 1 (checked) $settings = self::get_settings(); $share_diagnostics_db = $settings[ Enum::SHARE_DIAGNOSTICS ] ?? ''; $email_db = $settings[ Enum::EMAIL_SUPPORT ] ?? ''; if ( $is_ajax ) { $settings[ Enum::IS_SUBSCRIBE ] = $is_subscribe; $settings[ Enum::EMAIL_SUPPORT ] = $email; $settings[ Enum::SHARE_DIAGNOSTICS ] = $share_diagnostics; } else { $email = $settings[ Enum::EMAIL_SUPPORT ]; } $support_enable_time = $settings[ Enum::SUPPORT_ENABLED_TIME ] ?? ''; $current_date = date( 'm/d/Y', time() ); // phpcs:ignore if ( ! $is_ajax || empty( $support_enable_time ) || $current_date > $support_enable_time || $share_diagnostics_db !== $share_diagnostics || $email !== $email_db ) { global $wp_version; $jwt_data = array( 'email' => $email, 'installed_version' => LASSO_LITE_VERSION, 'datetime' => gmdate( 'Y-m-d H:i:s' ), 'site_id' => License::get_site_id(), 'install_url' => site_url(), 'wordpress_version' => $wp_version, 'php_version' => phpversion(), 'mysql_version' => Model::get_wpdb()->db_version(), 'is_classic_editor' => Helper::is_classic_editor() ? 1 : 0, 'share_diagnostics' => $share_diagnostics, ); $jwt = JWT::encode( $jwt_data, Constant::JWT_SECRET_KEY, 'HS256' ); $data['data'] = $jwt; $response = Helper::send_request( 'post', Constant::LASSO_LINK . '/lasso-lite/enable-support', $data ); $response_body = ( isset( $response['response'] ) && is_object( $response['response'] ) ) ? $response['response'] : null; $is_succeed = null !== $response_body && boolval( $response_body->succeed ?? false ); if ( $is_succeed ) { $user_hash = $response_body->user_hash; $intercom_jwt = $response_body->intercom_jwt; $settings[ Enum::SUPPORT_ENABLED_TIME ] = date( 'm/d/Y', time() ); // phpcs:ignore $settings[ Enum::USER_HASH ] = $user_hash; $settings[ Constant::SITE_ID_KEY ] = $response_body->site_id; if ( ! empty( $intercom_jwt ) ) { $settings[ Enum::INTERCOM_JWT ] = $intercom_jwt; } } } self::set_settings( $settings ); if ( $is_ajax ) { $response_data = array( 'success' => true, ); // Provide Intercom bootstrap payload on AJAX success so frontend can init Intercom immediately if ( ! empty( $settings[ Enum::INTERCOM_JWT ] ) ) { $email_support = $settings[ Enum::EMAIL_SUPPORT ] ?? $email; $email_support_norm = strtolower( trim( $email_support ) ); $intercom_user_id = Helper::get_intercom_user_id( $email_support_norm, $settings[ Enum::INTERCOM_JWT ] ); $user = get_user_by( 'email', $email_support_norm ); $user_name = isset( $user->display_name ) ? $user->display_name : get_bloginfo( 'name' ); $classic_editor = Helper::is_classic_editor() ? 1 : 0; $lasso_lite_user = 1; if ( Helper::is_lasso_pro_plugin_active() ) { $lasso_lite_user = 0; } $response_data['intercom'] = array( 'app_id' => Constant::LASSO_INTERCOM_APP_ID, 'name' => $user_name, 'user_id' => $intercom_user_id, 'email' => $email_support_norm, 'lasso_version' => (int) LASSO_LITE_VERSION, 'classic_editor' => $classic_editor, 'wp_admin_url' => admin_url(), 'lasso_lite_user' => $lasso_lite_user, 'intercom_user_jwt' => $settings[ Enum::INTERCOM_JWT ], 'site_id' => $settings[ Constant::SITE_ID_KEY ], ); } wp_send_json_success( $response_data ); } } /** * Check plugins for importing * * @return string */ public function check_plugins_for_import() { // ? import plugin check $plugins_for_import = $this->get_import_sources(); $setting_page_link = ''; $plugins_for_import_txt = ''; if ( ! empty( $plugins_for_import ) ) { $verb = count( $plugins_for_import ) > 1 ? 'are' : 'is'; $plugins_for_import_txt = implode( ', ', $plugins_for_import ) . ' ' . $verb; } return $plugins_for_import_txt; } /** * Check whether the plugins are activated * * @return array|false */ public static function get_import_sources() { $plugin_list = (array) self::$import_sources; $result = array(); $plugin_path_abs = dirname( SIMPLE_URLS_DIR ); try { foreach ( $plugin_list as $plugin ) { $full_plugin_path = $plugin_path_abs . '/' . $plugin; if ( ! file_exists( $full_plugin_path ) ) { continue; } // ? Check plugin is activated if ( is_plugin_active( $plugin ) ) { $plugin_name = self::get_plugin_name( $plugin ); $key = $plugin; $result[ $key ] = $plugin_name; } } } catch ( \Exception $e ) { return false; } return $result; } /** * Get plugin name * * @param string $plugin Plugin file path. */ public static function get_plugin_name( $plugin ) { $plugin_name = 'The plugin ' . $plugin . ' has been deleted.'; $plugin_path = WP_PLUGIN_DIR . '/' . $plugin; if ( file_exists( $plugin_path ) ) { $plugin_data = get_plugin_data( $plugin_path ); $plugin_name = $plugin_data['Name']; } return $plugin_name; } /** * Get report url by tab */ public function get_dashboard_page() { $dashboard_url = add_query_arg( array( 'post_type' => Constant::LASSO_POST_TYPE, 'page' => $this->dashboard_page, ), admin_url( 'edit.php' ) ); return $dashboard_url; } /** * Get report url by tab * * @param string $page_slug Page slug. */ public static function get_lasso_page_url( $page_slug ) { $dashboard_url = add_query_arg( array( 'post_type' => Constant::LASSO_POST_TYPE, 'page' => $page_slug, ), admin_url( 'edit.php' ) ); return $dashboard_url; } }