siteimprove_nonce; } /** * Register section. */ public function register_section() { $this->siteimprove_nonce = wp_create_nonce( 'siteimprove-options' ); // Register settings for siteimprove plugin settings page. register_setting( 'siteimprove', 'siteimprove_token' ); register_setting( 'siteimprove', 'siteimprove_disable_new_version', 'Siteimprove_Admin_Settings::validate_siteimprove_disable_new_version' ); register_setting( 'siteimprove', 'siteimprove_public_url', 'Siteimprove_Admin_Settings::validate_public_url' ); register_setting( 'siteimprove', 'siteimprove_ignore_path_segments', 'Siteimprove_Admin_Settings::validate_ignore_path_segments' ); register_setting( 'siteimprove', 'siteimprove_api_username', 'Siteimprove_Admin_Settings::validate_api_username' ); register_setting( 'siteimprove', 'siteimprove_api_key', 'Siteimprove_Admin_Settings::validate_api_key' ); register_setting( 'siteimprove', 'siteimprove_dev_mode', 'Siteimprove_Admin_Settings::validate_siteimprove_dev_mode' ); register_setting( 'siteimprove', 'siteimprove_overlayjs_file', 'Siteimprove_Admin_Settings::validate_siteimprove_overlayjs_file' ); // Register a new section in the siteimprove page. add_settings_section( 'siteimprove_token', __( 'Token', 'siteimprove' ), 'Siteimprove_Admin_Settings::siteimprove_settings_section_title', 'siteimprove' ); // register a new field siteimprove_token_field, inside the siteimprove_token section of the settings page. add_settings_field( 'siteimprove_token', __( 'Token', 'siteimprove' ), 'Siteimprove_Admin_Settings::siteimprove_token_field', 'siteimprove', 'siteimprove_token' ); // Register a new section in the siteimprove page. add_settings_section( 'siteimprove_public_url', __( 'Public URL', 'siteimprove' ), 'Siteimprove_Admin_Settings::siteimprove_settings_section_title', 'siteimprove' ); // register a new field siteimprove_public_url_field, inside the siteimprove_token section of the settings page. add_settings_field( 'siteimprove_public_url', __( 'Public URL', 'siteimprove' ), 'Siteimprove_Admin_Settings::siteimprove_public_url_field', 'siteimprove', 'siteimprove_public_url' ); // register a new field siteimprove_ignore_path_segments_field, inside the siteimprove_public_url section of the settings page. add_settings_field( 'siteimprove_ignore_path_segments', __( 'Ignore Path Segments', 'siteimprove' ), 'Siteimprove_Admin_Settings::siteimprove_ignore_path_segments_field', 'siteimprove', 'siteimprove_public_url' ); // Register a new section in the siteimprove page. add_settings_section( 'siteimprove_version_section', __( 'Plugin Experience', 'siteimprove' ), 'Siteimprove_Admin_Settings::siteimprove_settings_section_title', 'siteimprove' ); // register a new field siteimprove_disable_new_version_field, inside the siteimprove_version_section section of the settings page. add_settings_field( 'siteimprove_disable_new_version', __( 'Use latest experience', 'siteimprove' ), 'Siteimprove_Admin_Settings::siteimprove_disable_new_version_field', 'siteimprove', 'siteimprove_version_section' ); // register a new field siteimprove_token_field, inside the siteimprove_token section of the settings page. add_settings_field( 'siteimprove_public_url', __( 'Public URL', 'siteimprove' ), 'Siteimprove_Admin_Settings::siteimprove_public_url_field', 'siteimprove', 'siteimprove_public_url' ); // Register a new section in the siteimprove page. add_settings_section( 'siteimprove_api_credentials', __( 'API Credentials', 'siteimprove' ), 'Siteimprove_Admin_Settings::siteimprove_settings_section_title', 'siteimprove' ); // Register a new section in the siteimprove page. if ( isset( $_GET['devmode'] ) ) { add_settings_section( 'siteimprove_dev_mode_section', __( 'Dev Mode', 'siteimprove' ), 'Siteimprove_Admin_Settings::siteimprove_settings_section_title', 'siteimprove' ); // register a new field Overlayjs_file, inside the siteimprove_api_credentials section of the settings page. add_settings_field( 'siteimprove_overlayjs_file', __( 'Overlay JS File', 'siteimprove' ), 'Siteimprove_Admin_Settings::siteimprove_overlayjs_file_field', 'siteimprove', 'siteimprove_dev_mode_section' ); } // register a new field siteimprove_api_username_field, inside the siteimprove_api_credentials section of the settings page. add_settings_field( 'siteimprove_api_username', __( 'API Username (Email)', 'siteimprove' ), 'Siteimprove_Admin_Settings::siteimprove_api_username_field', 'siteimprove', 'siteimprove_api_credentials' ); // register a new field siteimprove_api_key_field, inside the siteimprove_api_credentials section of the settings page. add_settings_field( 'siteimprove_api_key', __( 'API Key', 'siteimprove' ), 'Siteimprove_Admin_Settings::siteimprove_api_key_field', 'siteimprove', 'siteimprove_api_credentials' ); // Register a new section in the siteimprove page. add_settings_section( 'siteimprove_prepublish', __( 'Prepublish', 'siteimprove' ), 'Siteimprove_Admin_Settings::siteimprove_settings_section_title', 'siteimprove' ); } /** * Register menu for settings form page. */ public function register_menu() { // Add top level menu page. add_menu_page( __( 'Siteimprove Plugin' ), __( 'Siteimprove' ), 'manage_options', 'siteimprove', 'Siteimprove_Admin_Settings::siteimprove_settings_form', plugins_url( 'siteimprove/admin/img/si-icon.svg' ), ); } /** * Section title. * * @param mixed $args Section title arguments. * @return void */ public static function siteimprove_settings_section_title( $args ) { if ( 'siteimprove_prepublish' === $args['id'] ) { $siteimprove_api_key = get_option( 'siteimprove_api_key', '' ); $prepublish_allowed = intval( get_option( 'siteimprove_prepublish_allowed', 0 ) ); $prepublish_enabled = intval( get_option( 'siteimprove_prepublish_enabled', 0 ) ); if ( ! empty( $siteimprove_api_key ) ) { if ( 1 === $prepublish_allowed ) { ?>

You can use Prepublish on your account.

here', 'siteimprove' ), array( 'a' => array( 'href' => array(), 'id' => array(), 'class' => array(), ), ) ); ?>

Siteimprove Prepublish Check located on the top bar of the admin panel', 'siteimprove' ), array( 'strong' => array(), ) ); ?>

/>

'1.1', 'blocking' => true, 'headers' => array( 'Authorization' => 'Basic ' . base64_encode( $username . ':' . $key ), 'sslverify' => false, ), ); array_merge( $params, $args ); $url = ( ! empty( $alternate_url ) ) ? $alternate_url : self::SITEIMPROVE_API_URL; if ( 'get' === $method ) { $request = wp_remote_get( $url . $path, $params ); } else { $request = wp_remote_post( $url . $path, $params ); } return $request; } /** * Check if the credentials are valid for the current domain * * @param string $username API Username. * @param string $key API Key. * @return array */ public static function check_credentials( $username, $key ) { $return = array( 'status' => 'false', 'error' => __( 'Unable to check API Credentials, please try again', 'siteimprove' ), ); $request = self::make_api_request( $username, $key, '/ping/account' ); if ( isset( $request['response'] ) && 401 === $request['response']['code'] ) { // Wrong credentials, trow error and exit. $return['error'] = __( 'Wrong API Credentials, API access denied. Please fix the credentials and try again', 'siteimprove' ); return $return; } $request = self::make_api_request( $username, $key, '/sites?page_size=1000' ); if ( isset( $request['response'] ) && 200 === $request['response']['code'] ) { $results = json_decode( $request['body'] ); $account_sites = $results->items; $public_url = get_option( 'siteimprove_public_url' ); if ( ! empty( $public_url ) ) { $site_url = $public_url; } else { $site_url = get_site_url(); } $domain = wp_parse_url( $site_url, PHP_URL_HOST ); $site_found = false; foreach ( $account_sites as $site_key => $site_data ) { if ( false !== strpos( $site_data->url, $domain ) ) { $site_found = true; } } if ( true === $site_found ) { $return = array( 'status' => 'true', ); } else { $return['error'] = __( 'Current domain/website not found for the provided credentials', 'siteimprove' ); } } else { $return['error'] = __( 'Unable to check website domain. Please try again later', 'siteimprove' ); } return $return; } /** * Check against the API endpoint if the user has the prepublish (AKA contentcheck) enabled * * @param string $username API Username. * @param string $key API Key. * @return void */ public static function verify_contentcheck( $username, $key ) { $request = self::make_api_request( $username, $key, '/settings/content_checking' ); if ( isset( $request['response'] ) && 400 === $request['response']['code'] ) { $results = json_decode( $request['body'] ); if ( preg_match( '/Requires|feature/i', $results->message ) ) { update_option( 'siteimprove_prepublish_allowed', 0 ); } } else { /* TODO: Figure out how to find if the feature is allowed but not enabled yet. For now we are considering that if there are no errors, then we can keep going and suppose it's then possibly allowed to be enabled by the user whenever he wishes to do so. */ update_option( 'siteimprove_prepublish_allowed', 1 ); /* Now we'll try to see if the prepublish feature is already enabled. If not, then we can show the user a button so he can enable it himself. */ $results = json_decode( $request['body'] ); if ( isset( $results->is_ready ) && true === $results->is_ready ) { update_option( 'siteimprove_prepublish_enabled', 1 ); } else { update_option( 'siteimprove_prepublish_enabled', 0 ); } } } /** * Check against the API endpoint if the user has the prepublish (AKA contentcheck) available but not enabled yet. * * @return void */ public function prepublish_manual_activation() { $siteimprove_api_username = get_option( 'siteimprove_api_username', '' ); $siteimprove_api_key = get_option( 'siteimprove_api_key', '' ); $return = array( 'message' => 'activation_triggered', 'result' => true, ); $request = self::make_api_request( $siteimprove_api_username, $siteimprove_api_key, '/settings/content_checking', array(), '', 'post' ); $results = json_decode( $request['body'] ); if ( 400 === $request['response']['code'] ) { $return['result'] = false; } elseif ( '' !== $results ) { $return['result'] = false; } wp_send_json( $return ); wp_die(); } /** * Check against the API endpoint if the user has the prepublish (AKA contentcheck) available but not enabled yet. * * @return void */ public function check_prepublish_activation() { $siteimprove_api_username = get_option( 'siteimprove_api_username', '' ); $siteimprove_api_key = get_option( 'siteimprove_api_key', '' ); $return = array( 'message' => 'enabled', 'result' => false, ); $request = self::make_api_request( $siteimprove_api_username, $siteimprove_api_key, '/settings/content_checking', array() ); $results = json_decode( $request['body'] ); if ( isset( $results->is_ready ) && true === $results->is_ready ) { update_option( 'siteimprove_prepublish_enabled', 1 ); $return['result'] = true; } wp_send_json( $return ); wp_die(); } /** * Return new token for ajax requests. */ public function request_token() { // Check access. if ( ! current_user_can( 'manage_options' ) ) { return; } // Check if the nonce is set and is valid. if ( isset( $_REQUEST['_wpnonce'] ) && wp_verify_nonce( sanitize_key( $_REQUEST['_wpnonce'] ), 'siteimprove-options' ) ) { // The nonce is valid, output the token. echo esc_html( SiteimproveUtils::request_token() ); } else { wp_die(); } wp_die(); } }