Aleksander Machniak
2014-09-10 dcc4469844f8ce98bd8323b684e40cf64643e5ae
program/include/rcmail.php
@@ -116,11 +116,13 @@
            $_SESSION['task'] = $this->task;
        }
        // init output class
        if (!empty($_REQUEST['_remote']))
        // init output class (not in CLI mode)
        if (!empty($_REQUEST['_remote'])) {
            $GLOBALS['OUTPUT'] = $this->json_init();
        else
        }
        else if ($_SERVER['REMOTE_ADDR']) {
            $GLOBALS['OUTPUT'] = $this->load_gui(!empty($_REQUEST['_framed']));
        }
        // load plugins
        $this->plugins->init($this, $this->task);
@@ -147,8 +149,13 @@
        $this->task      = $task;
        $this->comm_path = $this->url(array('task' => $this->task));
        if (!empty($_REQUEST['_framed'])) {
            $this->comm_path .= '&_framed=1';
        }
        if ($this->output) {
            $this->output->set_env('task', $this->task);
            $this->output->set_env('comm_path', $this->comm_path);
        }
    }
@@ -168,7 +175,7 @@
        setlocale(LC_ALL, $lang . '.utf8', $lang . '.UTF-8', 'en_US.utf8', 'en_US.UTF-8');
        // workaround for http://bugs.php.net/bug.php?id=18556
        if (version_compare(PHP_VERSION, '5.5.0', '<') && in_array($lang, array('tr_TR', 'ku', 'az_AZ'))) {
        if (PHP_VERSION_ID < 50500 && in_array($lang, array('tr_TR', 'ku', 'az_AZ'))) {
            setlocale(LC_CTYPE, 'en_US.utf8', 'en_US.UTF-8');
        }
    }
@@ -789,11 +796,13 @@
    /**
     * Build a valid URL to this instance of Roundcube
     *
     * @param mixed Either a string with the action or url parameters as key-value pairs
     * @param mixed   Either a string with the action or url parameters as key-value pairs
     * @param boolean Build an URL absolute to document root
     * @param boolean Create fully qualified URL including http(s):// and hostname
     *
     * @return string Valid application URL
     */
    public function url($p)
    public function url($p, $absolute = false, $full = false)
    {
        if (!is_array($p)) {
            if (strpos($p, 'http') === 0) {
@@ -803,14 +812,15 @@
            $p = array('_action' => @func_get_arg(0));
        }
        $task = $p['_task'] ? $p['_task'] : ($p['task'] ? $p['task'] : $this->task);
        $p['_task'] = $task;
        unset($p['task']);
        $pre = array();
        $task = $p['_task'] ?: ($p['task'] ?: $this->task);
        $pre['_task'] = $task;
        unset($p['task'], $p['_task']);
        $url  = './' . $this->filename;
        $url  = $this->filename;
        $delm = '?';
        foreach (array_reverse($p) as $key => $val) {
        foreach (array_merge($pre, $p) as $key => $val) {
            if ($val !== '' && $val !== null) {
                $par  = $key[0] == '_' ? $key : '_'.$key;
                $url .= $delm.urlencode($par).'='.urlencode($val);
@@ -818,7 +828,24 @@
            }
        }
        return $url;
        if ($absolute || $full) {
            // add base path to this Roundcube installation
            $base_path = preg_replace('![^/]+$!', '', strval($_SERVER['SCRIPT_NAME']));
            if ($base_path == '') $base_path = '/';
            $prefix = $base_path;
            // prepend protocol://hostname:port
            if ($full) {
                $prefix = rcube_utils::resolve_url($prefix);
            }
            $prefix = rtrim($prefix, '/') . '/';
        }
        else {
            $prefix = './';
        }
        return $prefix . $url;
    }
    /**