/**
  * @covers test_wpseo_is_nginx()
  */
 public function test_wpseo_is_nginx()
 {
     $_SERVER['SERVER_SOFTWARE'] = 'nginx/1.5.11';
     $this->assertTrue(wpseo_is_nginx());
     $_SERVER['SERVER_SOFTWARE'] = 'Apache/2.2.22';
     $this->assertFalse(wpseo_is_nginx());
 }
Beispiel #2
0
 * @todo - [JRF => whomever] check for existance of .xls rewrite rule in .htaccess from
 * google-sitemaps-plugin/generator and remove as it will cause errors for our sitemaps
 * (or inform the user and disallow enabling of sitemaps )
 * @todo - [JRF => whomever] check if anything along these lines is already being done
 */
if (!defined('WPSEO_VERSION')) {
    header('Status: 403 Forbidden');
    header('HTTP/1.1 403 Forbidden');
    exit;
}
global $wpseo_admin_pages;
$wpseo_admin_pages->admin_header(true, WPSEO_Options::get_group_name('wpseo_xml'), 'wpseo_xml');
$options = get_option('wpseo_xml');
$content = $wpseo_admin_pages->checkbox('enablexmlsitemap', __('Check this box to enable XML sitemap functionality.', 'wordpress-seo'), false);
$content .= '<div id="sitemapinfo">';
if (wpseo_is_nginx()) {
    $content .= '<div style="margin: 5px 0; padding: 3px 10px; background-color: #ffffe0; border: 1px solid #E6DB55; border-radius: 3px;">';
    $content .= '<p>' . __('As you\'re on NGINX, you\'ll need the following rewrites:', 'wordpress-seo') . '</p>';
    $content .= '<pre>rewrite ^/sitemap_index\\.xml$ /index.php?sitemap=1 last;
rewrite ^/([^/]+?)-sitemap([0-9]+)?\\.xml$ /index.php?sitemap=$1&sitemap_n=$2 last;</pre>';
    $content .= '</div>';
}
if ($options['enablexmlsitemap'] === true) {
    $content .= '<p>' . sprintf(esc_html__('You can find your XML Sitemap here: %sXML Sitemap%s', 'wordpress-seo'), '<a target="_blank" class="button-secondary" href="' . esc_url(wpseo_xml_sitemaps_base_url('sitemap_index.xml')) . '">', '</a>') . '<br/><br/>' . __('You do <strong>not</strong> need to generate the XML sitemap, nor will it take up time to generate after publishing a post.', 'wordpress-seo') . '</p>';
} else {
    $content .= '<p>' . __('Save your settings to activate XML Sitemaps.', 'wordpress-seo') . '</p>';
}
// When we write the help tab for this we should definitely reference this plugin :https://wordpress.org/plugins/edit-author-slug/
$content .= '<h2>' . __('User sitemap', 'wordpress-seo') . '</h2>';
$content .= $wpseo_admin_pages->checkbox('disable_author_sitemap', __('Disable author/user sitemap', 'wordpress-seo'), false);
$content .= '<div id="xml_user_block">';
 /**
  * Create the redirect file
  */
 public function save_redirect_file()
 {
     // Options
     $options = self::get_options();
     if ('on' == $options['disable_php_redirect']) {
         // Create the correct file object
         $file = null;
         if (wpseo_is_apache()) {
             if ('on' == $options['separate_file']) {
                 $file = new WPSEO_Apache_Redirect_File();
             } else {
                 $file = new WPSEO_Htaccess_Redirect_File();
             }
         } elseif (wpseo_is_nginx()) {
             $file = new WPSEO_Nginx_Redirect_File();
         }
         // Save the file
         if (null !== $file) {
             $file->save_file();
         }
     }
 }
/**
 * Adds tracking parameters for WP SEO settings. Outside of the main class as the class could also be in use in other plugins.
 *
 * @param array $options
 *
 * @return array
 */
function wpseo_tracking_additions($options)
{
    if (function_exists('curl_version')) {
        $curl = curl_version();
    } else {
        $curl = null;
    }
    $opt = WPSEO_Options::get_all();
    $options['wpseo'] = array('xml_sitemaps' => $opt['enablexmlsitemap'] === true ? 1 : 0, 'force_rewrite' => $opt['forcerewritetitle'] === true ? 1 : 0, 'opengraph' => $opt['opengraph'] === true ? 1 : 0, 'twitter' => $opt['twitter'] === true ? 1 : 0, 'strip_category_base' => $opt['stripcategorybase'] === true ? 1 : 0, 'on_front' => get_option('show_on_front'), 'wmt_alexa' => !empty($opt['alexaverify']) ? 1 : 0, 'wmt_bing' => !empty($opt['msverify']) ? 1 : 0, 'wmt_google' => !empty($opt['googleverify']) ? 1 : 0, 'wmt_pinterest' => !empty($opt['pinterestverify']) ? 1 : 0, 'wmt_yandex' => !empty($opt['yandexverify']) ? 1 : 0, 'permalinks_clean' => $opt['cleanpermalinks'] == 1 ? 1 : 0, 'site_db_charset' => DB_CHARSET, 'webserver_apache' => wpseo_is_apache() ? 1 : 0, 'webserver_apache_version' => function_exists('apache_get_version') ? apache_get_version() : 0, 'webserver_nginx' => wpseo_is_nginx() ? 1 : 0, 'webserver_server_software' => $_SERVER['SERVER_SOFTWARE'], 'webserver_gateway_interface' => $_SERVER['GATEWAY_INTERFACE'], 'webserver_server_protocol' => $_SERVER['SERVER_PROTOCOL'], 'php_version' => phpversion(), 'php_max_execution_time' => ini_get('max_execution_time'), 'php_memory_limit' => ini_get('memory_limit'), 'php_open_basedir' => ini_get('open_basedir'), 'php_bcmath_enabled' => extension_loaded('bcmath') ? 1 : 0, 'php_ctype_enabled' => extension_loaded('ctype') ? 1 : 0, 'php_curl_enabled' => extension_loaded('curl') ? 1 : 0, 'php_curl_version_a' => phpversion('curl'), 'php_curl' => !is_null($curl) ? $curl['version'] : 0, 'php_dom_enabled' => extension_loaded('dom') ? 1 : 0, 'php_dom_version' => phpversion('dom'), 'php_filter_enabled' => extension_loaded('filter') ? 1 : 0, 'php_mbstring_enabled' => extension_loaded('mbstring') ? 1 : 0, 'php_mbstring_version' => phpversion('mbstring'), 'php_pcre_enabled' => extension_loaded('pcre') ? 1 : 0, 'php_pcre_version' => phpversion('pcre'), 'php_pcre_with_utf8_a' => @preg_match('/^.{1}$/u', 'ñ', $UTF8_ar), 'php_pcre_with_utf8_b' => defined('PREG_BAD_UTF8_ERROR'), 'php_spl_enabled' => extension_loaded('spl') ? 1 : 0);
    return $options;
}
    /**
     * Function that outputs the redirect page
     */
    public static function display()
    {
        global $wpseo_admin_pages;
        // Check if there's an old URL set
        $old_url = '';
        if (isset($_GET['old_url'])) {
            $old_url = urldecode($_GET['old_url']);
        }
        // Get the redirect types
        $redirect_types = WPSEO_Redirect_Manager::get_redirect_types();
        // Admin header
        $wpseo_admin_pages->admin_header(false, 'yoast_wpseo_redirects_options', 'wpseo_redirects');
        ?>
		<h2 class="nav-tab-wrapper" id="wpseo-tabs">
			<a class="nav-tab" id="tab-url-tab" href="#top#tab-url"><?php 
        _e('Redirects', 'wordpress-seo');
        ?>
</a>
			<a class="nav-tab" id="tab-regex-tab" href="#top#tab-regex"><?php 
        _e('Regex Redirects', 'wordpress-seo');
        ?>
</a>
			<a class="nav-tab" id="settings-tab" href="#top#settings"><?php 
        _e('Settings', 'wordpress-seo');
        ?>
</a>
		</h2>

		<div class="tabwrapper>">
			<div id="tab-url" class="wpseotab redirect-table-tab">
				<?php 
        // Add new redirect HTML
        echo "<form class='wpseo-new-redirect-form' method='post'>\n";
        echo "<div class='wpseo_redirects_new'>\n";
        //				echo "<h2>" . __( 'Add New Redirect', 'wordpress-seo' ) . "</h2>\n";
        echo "<label class='textinput' for='wpseo_redirects_new_old'>" . __('Old URL', 'wordpress-seo') . "</label>\n";
        echo "<input type='text' class='textinput' name='wpseo_redirects_new_old' id='wpseo_redirects_new_old' value='", esc_url($old_url) . "' />\n";
        echo "<br class='clear'/>\n";
        echo "<label class='textinput' for='wpseo_redirects_new_new'>" . __('New URL', 'wordpress-seo') . "</label>\n";
        echo "<input type='text' class='textinput' name='wpseo_redirects_new_new' id='wpseo_redirects_new_new' value='' />\n";
        echo "<br class='clear'/>\n";
        echo "<label class='textinput' for='wpseo_redirects_new_type'>" . __('Type', 'wordpress-seo') . "</label>\n";
        // Redirect type select element
        echo "<select name='wpseo_redirects_new_type' id='wpseo_redirects_new_type' class='select'>" . PHP_EOL;
        // Loop through the redirect types
        if (count($redirect_types) > 0) {
            foreach ($redirect_types as $type => $desc) {
                echo "<option value='" . $type . "'>" . $desc . "</option>" . PHP_EOL;
            }
        }
        echo "</select>" . PHP_EOL;
        echo '<img src="' . plugins_url('images/question-mark.png', WPSEO_FILE) . '" class="yoast_help" style="margin:17px 0 0 5px" alt="' . __(sprintf('The redirect type is de HTTP response code send to the browser telling the browser what type of redirect is served.<br/><br/>Read <a href=\'%s\'>this page</a> for more info.', 'http://kb.yoast.com/article/121-redirect-types/#utm_source=wordpress-seo-premium-redirects&amp;utm_medium=inline-help&amp;utm_campaign=redirect-types'), 'wordpress-seo') . '">';
        echo "<br class='clear'/>\n";
        echo "<a href='javascript:;' class='button-primary'>" . __('Add Redirect', 'wordpress-seo') . "</a>\n";
        echo "</div>\n";
        echo "</form>\n";
        echo "<p class='desc'>&nbsp;</p>\n";
        // Open <form>
        echo "<form id='url' class='wpseo-redirects-table-form' method='post' action=''>\n";
        // AJAX nonce
        echo "<input type='hidden' class='wpseo_redirects_ajax_nonce' value='" . wp_create_nonce('wpseo-redirects-ajax-security') . "' />\n";
        // The list table
        $list_table = new WPSEO_Redirect_Table('URL');
        $list_table->prepare_items();
        $list_table->search_box(__('Search', 'wordpress-seo'), 'wpseo-redirect-search');
        $list_table->display();
        // Close <form>
        echo "</form>\n";
        ?>
			</div>
			<div id="tab-regex" class="wpseotab redirect-table-tab">
				<?php 
        // Add new redirect HTML
        echo "<p>" . sprintf(__('Regex Redirects are extremely powerful redirects. You should only use them if you know what you are doing.<br />If you don\'t know what Regular Expressions (REGEX) are, please refer to %1$sour knowledge base%2$s.', 'wordpress-seo'), '<a href="http://kb.yoast.com/article/142-what-are-regex-redirects" target="_blank">', '</a>') . "</p>\n";
        echo "<form class='wpseo-new-redirect-form' method='post'>\n";
        echo "<div class='wpseo_redirects_new'>\n";
        //				echo "<h2>" . __( 'Add New Regex Redirect', 'wordpress-seo' ) . "</h2>\n";
        echo "<label class='textinput' for='wpseo_redirects_new_old'>" . __('REGEX', 'wordpress-seo') . "</label>\n";
        echo "<input type='text' class='textinput' name='wpseo_redirects_new_old' id='wpseo_redirects_new_old' value='{$old_url}' />\n";
        echo "<br class='clear'/>\n";
        echo "<label class='textinput' for='wpseo_redirects_new_new'>" . __('URL', 'wordpress-seo') . "</label>\n";
        echo "<input type='text' class='textinput' name='wpseo_redirects_new_new' id='wpseo_redirects_new_new' value='' />\n";
        echo "<br class='clear'/>\n";
        echo "<label class='textinput' for='wpseo_redirects_new_type'>" . __('Type', 'wordpress-seo') . "</label>\n";
        // Redirect type select element
        echo "<select name='wpseo_redirects_new_type' id='wpseo_redirects_new_type' class='select'>" . PHP_EOL;
        // Loop through the redirect types
        if (count($redirect_types) > 0) {
            foreach ($redirect_types as $key => $desc) {
                echo "<option value='" . $key . "'>" . $desc . "</option>" . PHP_EOL;
            }
        }
        echo "</select>" . PHP_EOL;
        echo '<img src="' . plugins_url('images/question-mark.png', WPSEO_FILE) . '" class="yoast_help" style="margin:17px 0 0 5px" alt="' . __(sprintf('The redirect type is de HTTP response code send to the browser telling the browser what type of redirect is served.<br/><br/>Read <a href=\'%s\'>this page</a> for more info.', 'http://kb.yoast.com/article/121-redirect-types/#utm_source=wordpress-seo-premium-redirects&amp;utm_medium=inline-help&amp;utm_campaign=redirect-types'), 'wordpress-seo') . '">';
        echo "<br class='clear'/>\n";
        echo "<a href='javascript:;' class='button-primary'>" . __('Add Regex Redirect', 'wordpress-seo') . "</a>\n";
        echo "</div>\n";
        echo "</form>\n";
        echo "<p class='desc'>&nbsp;</p>\n";
        // Open <form>
        echo "<form id='regex' class='wpseo-redirects-table-form' method='post' action=''>\n";
        // AJAX nonce
        echo "<input type='hidden' class='wpseo_redirects_ajax_nonce' value='" . wp_create_nonce('wpseo-redirects-ajax-security') . "' />\n";
        // The list table
        $list_table = new WPSEO_Redirect_Table('REGEX');
        $list_table->prepare_items();
        $list_table->search_box(__('Search', 'wordpress-seo'), 'wpseo-redirect-search');
        $list_table->display();
        // Close <form>
        echo "</form>\n";
        ?>
			</div>
			<div id="settings" class="wpseotab">
				<?php 
        // Get redirect options
        $redirect_options = WPSEO_Redirect_Manager::get_options();
        // Do file checks
        if ('on' == $redirect_options['disable_php_redirect']) {
            $file_write_error = false;
            if (wpseo_is_apache()) {
                if ('on' == $redirect_options['separate_file']) {
                    if (file_exists(WPSEO_Redirect_File_Manager::get_file_path())) {
                        echo '<div style="margin: 5px 0; padding: 3px 10px; background-color: #ffffe0; border: 1px solid #E6DB55; border-radius: 3px">';
                        echo '<p>' . __("As you're on Apache, you should add the following include to the website httpd config file:", 'wordpress-seo') . '</p>';
                        echo '<pre>Include ' . WPSEO_Redirect_File_Manager::get_file_path() . '</pre>';
                        echo '</div>';
                    } else {
                        $file_write_error = true;
                    }
                } else {
                    if (!is_writable(WPSEO_Redirect_File_Manager::get_htaccess_file_path())) {
                        echo "<div class='error'><p><b>" . __("We're unable to save the redirects to your .htaccess file, please make the file writable.", 'wordpress-seo') . "</b></p></div>\n";
                    }
                }
            } else {
                if (wpseo_is_nginx()) {
                    if (file_exists(WPSEO_Redirect_File_Manager::get_file_path())) {
                        echo '<div style="margin: 5px 0; padding: 3px 10px; background-color: #ffffe0; border: 1px solid #E6DB55; border-radius: 3px">';
                        echo '<p>' . __("As you're on NGINX, you should add the following include to the website Nginx config file:", 'wordpress-seo') . '</p>';
                        echo '<pre>include ' . WPSEO_Redirect_File_Manager::get_file_path() . ';</pre>';
                        echo '</div>';
                    } else {
                        $file_write_error = true;
                    }
                }
            }
            if ($file_write_error) {
                echo "<div class='error'><p><b>" . __(sprintf("We're unable to save the redirect file to %s", WPSEO_Redirect_File_Manager::get_file_path()), 'wordpress-seo') . "</b></p></div>\n";
            }
        }
        ?>
				<h2>Redirect Settings</h2>

				<form action="<?php 
        echo admin_url('options.php');
        ?>
" method="post">
					<?php 
        settings_fields('yoast_wpseo_redirect_options');
        $wpseo_admin_pages->currentoption = 'wpseo_redirect';
        if (wpseo_is_apache()) {
            echo $wpseo_admin_pages->checkbox('disable_php_redirect', __('Disable PHP redirects', 'wordpress-seo'));
            echo '<p class="desc">' . __("Write redirects to the .htaccess file. Make sure the .htaccess file is writable!", 'wordpress-seo') . '</p>';
            echo $wpseo_admin_pages->checkbox('separate_file', __('Generate a separate redirect file', 'wordpress-seo'));
            echo '<p class="desc">' . __("By default we write the redirects to your .htaccess file, check this if you want a the redirects written to a separate file. Only check this option if you know what your doing!", 'wordpress-seo') . '</p>';
        } else {
            echo $wpseo_admin_pages->checkbox('disable_php_redirect', __('Disable PHP redirects', 'wordpress-seo'));
            echo '<p class="desc">' . __("WordPress SEO will generate redirect files that can be included in your website configuration, you can disable PHP redirect if this is done correctly. Only check this option if you know what your doing!", 'wordpress-seo') . '</p>';
        }
        ?>
					<p class="submit">
						<input type="submit" name="submit" id="submit" class="button button-primary" value="<?php 
        _e('Save Changes', 'wordpress-seo');
        ?>
">
					</p>
				</form>
			</div>
		</div>
		<br class="clear">
		<?php 
        // Admin footer
        $wpseo_admin_pages->admin_footer(false);
    }