function test_wl_configuration_enable_color_coding()
 {
     wl_configuration_set_enable_color_coding(false);
     $this->assertFalse(wl_configuration_get_enable_color_coding());
     wl_configuration_set_enable_color_coding(true);
     $this->assertTrue(wl_configuration_get_enable_color_coding());
 }
/**
 * Configure all the configuration parameters. The configuration parameters are grouped in two tabs:
 *  * General
 *  * Advanced (only available if the WL_ENABLE_ADVANCED_CONFIGURATION constant exists and is set to True)
 *
 * Called by the *admin_init* hook.
 *
 * @since 3.0.0
 */
function wl_configuration_settings()
{
    register_setting('wl_general_settings', 'wl_general_settings', 'wl_configuration_sanitize_settings');
    add_settings_section('wl_general_settings_section', 'General Settings', 'wl_configuration_general_settings_section_callback', 'wl_general_settings');
    add_settings_field(WL_CONFIG_WORDLIFT_KEY, __('WordLift Key', 'wordlift'), 'wl_configuration_input_box', 'wl_general_settings', 'wl_general_settings_section', array('id' => 'wl-key', 'name' => 'wl_general_settings[key]', 'value' => wl_configuration_get_key(), 'description' => __('Insert the WordLift Key', 'wordlift')));
    add_settings_field(WL_CONFIG_ENABLE_COLOR_CODING_ON_FRONTEND_NAME, __('Enable color coding on front-end', 'wordlift'), 'wl_configuration_checkbox', 'wl_general_settings', 'wl_general_settings_section', array('id' => 'wl-enable-color-coding', 'name' => 'wl_general_settings[enable_color_coding]', 'value' => wl_configuration_get_enable_color_coding(), 'description' => __('Enable color coding', 'wordlift')));
    add_settings_field(WL_CONFIG_SITE_LANGUAGE_NAME, __('Site Language', 'wordlift'), 'wl_configuration_select', 'wl_general_settings', 'wl_general_settings_section', array('id' => 'wl-site-language', 'name' => 'wl_general_settings[site_language]', 'value' => wl_configuration_get_site_language(), 'description' => __('The site language', 'wordlift'), 'options' => wl_configuration_get_languages()));
    if (defined('WL_ENABLE_ADVANCED_CONFIGURATION') && WL_ENABLE_ADVANCED_CONFIGURATION) {
        register_setting('wl_advanced_settings', 'wl_advanced_settings', 'wl_configuration_sanitize_settings');
        add_settings_section('wl_advanced_settings_section', 'Advanced', 'wl_configuration_advanced_settings_section_callback', 'wl_advanced_settings');
        add_settings_field(WL_CONFIG_API_URL, __('API URL', 'wordlift'), 'wl_configuration_input_box', 'wl_advanced_settings', 'wl_advanced_settings_section', array('id' => 'wl-api-url', 'name' => 'wl_advanced_settings[api_url]', 'value' => wl_configuration_get_api_url(), 'description' => __('The API URL', 'wordlift')));
        add_settings_field(WL_CONFIG_APPLICATION_KEY_NAME, __('Redlink Key', 'wordlift'), 'wl_configuration_input_box', 'wl_advanced_settings', 'wl_advanced_settings_section', array('id' => 'wl-redlink-key', 'name' => 'wl_advanced_settings[redlink_key]', 'value' => wl_configuration_get_redlink_key(), 'description' => __('The Redlink key', 'wordlift')));
        add_settings_field(WL_CONFIG_USER_ID_NAME, __('Redlink User Id', 'wordlift'), 'wl_configuration_input_box', 'wl_advanced_settings', 'wl_advanced_settings_section', array('id' => 'wl-redlink-user-id', 'name' => 'wl_advanced_settings[redlink_user_id]', 'value' => wl_configuration_get_redlink_user_id(), 'description' => __('The Redlink User Id', 'wordlift')));
        add_settings_field(WL_CONFIG_DATASET_NAME, __('Redlink Dataset name', 'wordlift'), 'wl_configuration_input_box', 'wl_advanced_settings', 'wl_advanced_settings_section', array('id' => 'wl-redlink-dataset-name', 'name' => 'wl_advanced_settings[redlink_dataset_name]', 'value' => wl_configuration_get_redlink_dataset_name(), 'description' => __('The Redlink Dataset Name', 'wordlift')));
        add_settings_field(WL_CONFIG_DATASET_BASE_URI_NAME, __('Redlink Dataset URI', 'wordlift'), 'wl_configuration_input_box', 'wl_advanced_settings', 'wl_advanced_settings_section', array('id' => 'wl-redlink-dataset-uri', 'name' => 'wl_advanced_settings[redlink_dataset_uri]', 'value' => wl_configuration_get_redlink_dataset_uri(), 'description' => __('The Redlink Dataset URI', 'wordlift')));
        add_settings_field(WL_CONFIG_ANALYSIS_NAME, __('Redlink Application Name', 'wordlift'), 'wl_configuration_input_box', 'wl_advanced_settings', 'wl_advanced_settings_section', array('id' => 'wl-redlink-application-name', 'name' => 'wl_advanced_settings[redlink_application_name]', 'value' => wl_configuration_get_redlink_application_name(), 'description' => __('The Redlink Application Name', 'wordlift')));
    }
}
/**
 * Embed the entity properties as microdata in the content.
 *
 * @param string $content A content.
 * @param string $uri An entity URI.
 * @param string $itemprop Specifies which property this entity is for another entity. Useful for recursive markup.
 *
 * @return string The content with embedded microdata.
 */
function wl_content_embed_item_microdata($content, $uri, $itemprop = null, $recursion_level = 0)
{
    if ($recursion_level > wl_config_get_recursion_depth()) {
        wl_write_log("recursion depth limit exceeded [ level :: {$recursion_level} ][ max :: " . wl_config_get_recursion_depth() . " ]");
        return '';
    }
    $post = wl_get_entity_post_by_uri($uri);
    // Entity not found or not published. Delete <span> tags but leave their content on page.
    if (null === $post || $post->post_status !== 'publish') {
        wl_write_log("wl_content_embed_item_microdata : entity not found or not published [ uri :: {$uri} ]");
        // Replace the original tagging with the new tagging.
        $regex = wl_content_embed_build_regex_from_uri($uri);
        $content = preg_replace($regex, '$2', $content);
        return $content;
    }
    // Get the entity URI and its escaped version for the regex.
    $entity_uri = wl_get_entity_uri($post->ID);
    // Get the main type.
    $main_type = wl_entity_type_taxonomy_get_type($post->ID);
    if (null === $main_type) {
        $item_type = '';
    } else {
        $item_type = ' itemtype="' . esc_attr($main_type['uri']) . '"';
        // Append the stylesheet if the enable color coding flag is set to true.
        if (wl_configuration_get_enable_color_coding() && is_null($itemprop)) {
            $item_type .= ' class="' . esc_attr($main_type['css_class']) . '"';
        }
    }
    // Define attribute itemprop if this entity is nested.
    if (!is_null($itemprop)) {
        $itemprop = ' itemprop="' . $itemprop . '"';
    }
    // Get additional properties (this may imply a recursion of this method on a sub-entity).
    $additional_properties = wl_content_embed_compile_microdata_template($post->ID, $main_type, $recursion_level);
    $same_as = '';
    // Get the array of sameAs uris.
    $same_as_uris = wl_schema_get_value($post->ID, 'sameAs');
    // Prepare the sameAs fragment.
    foreach ($same_as_uris as $same_as_uri) {
        $same_as .= "<link itemprop=\"sameAs\" href=\"{$same_as_uri}\">";
    }
    // Get the entity URL.
    $permalink = get_permalink($post->ID);
    $url = '<link itemprop="url" href="' . $permalink . '" />';
    // Replace the original tagging with the new tagging.
    $regex = wl_content_embed_build_regex_from_uri($uri);
    $content = preg_replace($regex, '<$1' . $itemprop . ' itemscope' . $item_type . ' itemid="' . esc_attr($entity_uri) . '">' . $same_as . $additional_properties . $url . '<a class="wl-entity-page-link" href="' . $permalink . '" itemprop="name" content="$2">' . (is_null($itemprop) ? '$2' : '') . '</a></$1>', $content);
    wl_write_log("wl_content_embed_item_microdata [ uri :: {$uri} ][ regex :: {$regex} ]");
    return $content;
}