Пример #1
0
function qtranxf_init_language()
{
    global $q_config, $pagenow;
    //qtranxf_dbg_log('1.qtranxf_init_language:');
    //if(defined('QTRANS_INIT')){
    //	//qtranxf_dbg_log('qtranxf_init_language: QTRANS_INIT: url_info: ',$q_config['url_info']);
    //	return;
    //}
    //define('QTRANS_INIT',true);
    qtranxf_loadConfig();
    //'url_info' hash is not for external use, it is subject to change at any time.
    //'url_info' is preserved on reloadConfig
    if (!isset($q_config['url_info'])) {
        $q_config['url_info'] = array();
    }
    $url_info =& $q_config['url_info'];
    $url_info['cookie_enabled'] = isset($_COOKIE[QTX_COOKIE_NAME_FRONT]) || isset($_COOKIE[QTX_COOKIE_NAME_ADMIN]);
    if (WP_DEBUG) {
        $url_info['pagenow'] = $pagenow;
        $url_info['REQUEST_METHOD'] = isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : '';
        if (defined('WP_ADMIN') && WP_ADMIN) {
            $url_info['WP_ADMIN'] = true;
        }
        if (defined('DOING_AJAX')) {
            $url_info['DOING_AJAX_POST'] = $_POST;
        }
        if (defined('DOING_CRON')) {
            $url_info['DOING_CRON_POST'] = $_POST;
        }
    }
    //fill $url_info the same way as _parseURL does
    $url_info['scheme'] = is_ssl() ? 'https' : 'http';
    $url_info['host'] = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '';
    //https://wordpress.org/support/topic/messy-wp-cronphp-command-line-output
    if (empty($_SERVER['REQUEST_URI'])) {
        $url_info['path'] = '';
    } else {
        $url_info['path'] = $_SERVER['REQUEST_URI'];
        $p = strpos($url_info['path'], '?');
        if ($p) {
            $url_info['path'] = substr($url_info['path'], 0, $p);
            if (empty($_SERVER['QUERY_STRING'])) {
                $url_info['query'] = substr($url_info['path'], $p + 1);
            } else {
                $url_info['query'] = $_SERVER['QUERY_STRING'];
            }
            $url_info['query'] = qtranxf_sanitize_url($url_info['query']);
            // to prevent xss
            if (strpos($url_info['query'], 'qtranslate-mode=raw') !== false) {
                $url_info['qtranslate-mode'] = 'raw';
                $url_info['doing_front_end'] = true;
                $q_config['url_info'] = $url_info;
                $q_config['url_info']['language'] = $q_config['default_language'];
                $q_config['language'] = $q_config['default_language'];
                //qtranxf_load_option_qtrans_compatibility();
                return;
            }
        }
    }
    $url_info['original_url'] = $_SERVER['REQUEST_URI'];
    //is in use in -slug, here is for debugging purpose only
    //qtranxf_dbg_log('qtranxf_init_language: SERVER: ',$_SERVER);
    $url_info['language'] = qtranxf_detect_language($url_info);
    $q_config['language'] = apply_filters('qtranslate_language', $url_info['language'], $url_info);
    //qtranxf_dbg_log('qtranxf_init_language: detected: url_info: ',$url_info);
    if ($q_config['url_info']['doing_front_end'] && qtranxf_can_redirect()) {
        $lang = $q_config['language'];
        $url_orig = $url_info['scheme'] . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
        $url_lang = qtranxf_convertURL('', $lang);
        //uses $q_config['url_info'] and caches information, which will be needed later anyway.
        if (!isset($url_info['doredirect']) && $url_orig != $url_lang) {
            $url_info['doredirect'] = '$url_orig != $url_lang';
        }
        if (isset($url_info['doredirect'])) {
            $target = apply_filters('qtranslate_language_detect_redirect', $url_lang, $url_orig, $url_info);
            //qtranxf_dbg_log('qtranxf_init_language: doredirect to '.$lang.PHP_EOL .'urlorg:'.$url_orig.PHP_EOL .'target:'.$target.PHP_EOL .'url_info: ',$url_info);
            if ($target !== false && $target != $url_orig) {
                wp_redirect($target);
                //header('Location: '.$target);
                exit;
            } else {
                //neutral path
                $url_info['doredirect'] .= ' - cancelled, because it goes to the same target - neutral URL';
                if ($pagenow == 'index.php' && $q_config['url_mode'] == QTX_URL_PATH) {
                    $_SERVER['REQUEST_URI'] = trailingslashit($url_info['path-base']) . $lang . $url_info['wp-path'];
                    //should not hurt?
                    if (!empty($url_info['query'])) {
                        $_SERVER['REQUEST_URI'] .= '?' . $url_info['query'];
                    }
                }
            }
            //qtranxf_dbg_log('qtranxf_init_language: doredirect canceled: $url_info: ',$url_info);
        }
    } elseif (isset($url_info['doredirect'])) {
        $url_info['doredirect'] .= ' - cancelled by can_redirect';
        //qtranxf_dbg_log('qtranxf_init_language: doredirect canceled: $url_info: ',$url_info);
    }
    // fix url to prevent xss - how does this prevents xss?
    //$q_config['url_info']['url'] = qtranxf_convertURL(add_query_arg('lang',$q_config['default_language'],$q_config['url_info']['url']));
    //qtranslate_hooks.php has to go before load_plugin_textdomain()
    require_once dirname(__FILE__) . '/qtranslate_hooks.php';
    //common hooks moved here from qtranslate.php since 3.2.9.2, because they all need language already detected
    // load plugin translations
    // since 3.2-b3 moved it here as https://codex.wordpress.org/Function_Reference/load_plugin_textdomain seem to recommend to run load_plugin_textdomain in 'plugins_loaded' action, which is this function respond to
    $lang_dir = qtranxf_plugin_dirname() . '/lang';
    load_plugin_textdomain('qtranslate', false, $lang_dir);
    /**
     * allow other plugins to initialize whatever they need before the fork between front and admin.
     */
    do_action('qtranslate_load_front_admin', $url_info);
    if ($q_config['url_info']['doing_front_end']) {
        require_once QTRANSLATE_DIR . '/qtranslate_frontend.php';
    } else {
        require_once QTRANSLATE_DIR . '/admin/qtx_admin.php';
    }
    apply_filters('wp_translator', null);
    //create QTX_Translator object
    qtranxf_load_option_qtrans_compatibility();
    /**
     * allow other plugins to initialize whatever they need for language
     */
    do_action('qtranslate_init_language', $url_info);
    //qtranxf_dbg_log('qtranxf_init_language: done: url_info: ',$url_info);
}
Пример #2
0
function qtranxf_activation_hook()
{
    //qtranxf_dbg_log('qtranxf_activation_hook: ', __FILE__);
    //global $q_config;
    if (version_compare(PHP_VERSION, '5.2.0') < 0) {
        // Deactivate ourself
        $plugin_dir = qtranxf_plugin_dirname();
        $lang_dir = $plugin_dir . '/lang';
        load_plugin_textdomain('qtranslate', false, $lang_dir);
        $msg = sprintf(__('Plugin %s requires PHP version %s at least. This server instance runs PHP version %s. A PHP version %s or higher is recommended. The plugin has not been activated.', 'qtranslate'), '<a href="https://wordpress.org/plugins/qtranslate-x/" style="color:blue" target="_blank">qTranslate&#8209;X</a>', '5.2.0', PHP_VERSION, '5.4.0');
        deactivate_plugins($plugin_dir . '/qtranslate.php');
        wp_die($msg);
    }
    require_once QTRANSLATE_DIR . '/admin/qtx_admin_options.php';
    require_once QTRANSLATE_DIR . '/admin/qtx_import_export.php';
    // Check if other qTranslate forks are activated.
    if (is_plugin_active('mqtranslate/mqtranslate.php')) {
        qtranxf_admin_notice_deactivate_plugin('mqTranslate', 'mqtranslate/mqtranslate.php');
    }
    if (is_plugin_active('qtranslate/qtranslate.php')) {
        update_option('qtranslate_qtrans_compatibility', '1');
        qtranxf_admin_notice_deactivate_plugin('qTranslate', 'qtranslate/qtranslate.php');
    }
    if (is_plugin_active('qtranslate-xp/ppqtranslate.php')) {
        qtranxf_admin_notice_deactivate_plugin('qTranslate Plus', 'qtranslate-xp/ppqtranslate.php');
    }
    if (is_plugin_active('ztranslate/ztranslate.php')) {
        qtranxf_admin_notice_deactivate_plugin('zTranslate', 'ztranslate/ztranslate.php');
    }
    $next_thanks = get_option('qtranslate_next_thanks');
    $check_qtranslate_forks = $next_thanks === false;
    if ($next_thanks !== false && $next_thanks < time() + 7 * 24 * 60 * 60) {
        $next_thanks = time() + rand(10, 20) * 24 * 60 * 60;
        update_option('qtranslate_next_thanks', $next_thanks);
    }
    $messages = qtranxf_update_admin_notice('next_thanks');
    $default_language = get_option('qtranslate_default_language');
    $first_install = $default_language === false;
    if ($first_install) {
        qtranxf_default_default_language();
        $ver = qtranxf_version_int();
        update_option('qtranslate_version_previous', $ver);
        $check_qtranslate_forks = true;
    } else {
        $ver = get_option('qtranslate_version_previous');
        if (!$ver) {
            update_option('qtranslate_version_previous', 29000);
        }
        if (!isset($messages['initial-install'])) {
            $messages = qtranxf_update_option_admin_notices($messages, 'initial-install');
        }
    }
    // @since 3.3.7
    if ($check_qtranslate_forks) {
        // possibly first install after a fork
        if (get_option('qtranslate_qtrans_compatibility') === false) {
            //to prevent most of fatal errors on upgrade
            if (file_exists(WP_PLUGIN_DIR . '/qtranslate/qtranslate.php') || file_exists(WP_PLUGIN_DIR . '/mqtranslate/mqtranslate.php') || file_exists(WP_PLUGIN_DIR . '/ztranslate/ztranslate.php') || file_exists(WP_PLUGIN_DIR . '/qtranslate-xp/ppqtranslate.php')) {
                update_option('qtranslate_qtrans_compatibility', '1');
            }
        }
    }
    //clear file debug-qtranslate.log
    //$f=null; //qtranxf_dbg
    $f = WP_CONTENT_DIR . '/debug-qtranslate.log';
    if (file_exists($f)) {
        if (WP_DEBUG) {
            $fh = fopen($f, "a+");
            ftruncate($fh, 0);
            fclose($fh);
        } else {
            unlink($f);
        }
    }
    /**
     * @since 3.4
     */
    do_action('qtranslate_activation_hook');
    qtranxf_update_config_files();
}
Пример #3
0
function qtranxf_activation_hook()
{
    qtranxf_clear_debug_log();
    //qtranxf_dbg_log('qtranxf_activation_hook: ', __FILE__);
    if (version_compare(PHP_VERSION, '5.2.0') < 0) {
        // Deactivate ourself
        $plugin_dir = qtranxf_plugin_dirname();
        $lang_dir = $plugin_dir . '/lang';
        load_plugin_textdomain('qtranslate', false, $lang_dir);
        $msg = sprintf(__('Plugin %s requires PHP version %s at least. This server instance runs PHP version %s. A PHP version %s or higher is recommended. The plugin has not been activated.', 'qtranslate'), '<a href="https://wordpress.org/plugins/qtranslate-x/" style="color:blue" target="_blank">qTranslate&#8209;X</a>', '5.2.0', PHP_VERSION, '5.4.0');
        deactivate_plugins($plugin_dir . '/qtranslate.php');
        wp_die($msg);
    }
    require_once QTRANSLATE_DIR . '/admin/qtx_admin_options_update.php';
    // Check if other qTranslate forks are activated.
    if (is_plugin_active('mqtranslate/mqtranslate.php')) {
        qtranxf_admin_notice_deactivate_plugin('mqTranslate', 'mqtranslate/mqtranslate.php');
    }
    if (is_plugin_active('qtranslate/qtranslate.php')) {
        update_option('qtranslate_qtrans_compatibility', '1');
        qtranxf_admin_notice_deactivate_plugin('qTranslate', 'qtranslate/qtranslate.php');
    }
    if (is_plugin_active('qtranslate-xp/ppqtranslate.php')) {
        qtranxf_admin_notice_deactivate_plugin('qTranslate Plus', 'qtranslate-xp/ppqtranslate.php');
    }
    if (is_plugin_active('ztranslate/ztranslate.php')) {
        qtranxf_admin_notice_deactivate_plugin('zTranslate', 'ztranslate/ztranslate.php');
    }
    $ts = time();
    $next_thanks = get_option('qtranslate_next_thanks');
    $check_qtranslate_forks = $next_thanks === false;
    if ($next_thanks !== false && $next_thanks < $ts + 7 * 24 * 60 * 60) {
        $next_thanks = $ts + rand(10, 20) * 24 * 60 * 60;
        update_option('qtranslate_next_thanks', $next_thanks);
    }
    $messages = qtranxf_update_admin_notice('next_thanks');
    $default_language = get_option('qtranslate_default_language');
    $ver_cur = qtranxf_version_int();
    $first_install = $default_language === false;
    if ($first_install) {
        qtranxf_default_default_language();
        update_option('qtranslate_version_previous', $ver_cur);
        $check_qtranslate_forks = true;
        if (isset($messages['initial-install'])) {
            $messages = qtranxf_update_option_admin_notices($messages, 'initial-install');
        }
    } else {
        $ver_prv = get_option('qtranslate_version_previous');
        if (!$ver_prv) {
            update_option('qtranslate_version_previous', 29000);
        }
        if (!isset($messages['initial-install'])) {
            $messages = qtranxf_update_option_admin_notices($messages, 'initial-install');
        }
    }
    $vers = get_option('qtranslate_versions', array());
    if (!isset($vers[$ver_cur])) {
        $vers[$ver_cur] = $ts;
    }
    $vers['l'] = $ts;
    update_option('qtranslate_versions', $vers);
    qtranxf_sync_language_config();
    // @since 3.3.7
    if ($check_qtranslate_forks) {
        // possibly first install after a fork
        if (get_option('qtranslate_qtrans_compatibility') === false) {
            //to prevent most of fatal errors on upgrade
            if (file_exists(WP_PLUGIN_DIR . '/qtranslate/qtranslate.php') || file_exists(WP_PLUGIN_DIR . '/mqtranslate/mqtranslate.php') || file_exists(WP_PLUGIN_DIR . '/ztranslate/ztranslate.php') || file_exists(WP_PLUGIN_DIR . '/qtranslate-xp/ppqtranslate.php')) {
                update_option('qtranslate_qtrans_compatibility', '1');
            }
        }
    }
    /**
     * A chance to execute activation actions specifically for this plugin.
     * @since 3.4
     */
    do_action('qtranslate_activation_hook');
    qtranxf_update_config_files();
}