| | |
| | | // add cookie info |
| | | $this->set_env('cookie_domain', ini_get('session.cookie_domain')); |
| | | $this->set_env('cookie_path', ini_get('session.cookie_path')); |
| | | $this->set_env('cookie_secure', ini_get('session.cookie_secure')); |
| | | $this->set_env('cookie_secure', filter_var(ini_get('session.cookie_secure'), FILTER_VALIDATE_BOOLEAN)); |
| | | |
| | | // load the correct skin (in case user-defined) |
| | | $skin = $this->config->get('skin'); |
| | |
| | | |
| | | if (!empty($_REQUEST['_extwin'])) |
| | | $this->set_env('extwin', 1); |
| | | if ($this->framed || !empty($_REQUEST['_framed'])) |
| | | $this->set_env('framed', 1); |
| | | |
| | | // add common javascripts |
| | | $this->add_script('var '.self::JS_OBJECT_NAME.' = new rcube_webmail();', 'head_top'); |
| | |
| | | } |
| | | |
| | | $this->config->set('skin_path', $skin_path); |
| | | $this->base_path = $skin_path; |
| | | |
| | | // register skin path(s) |
| | | $this->skin_paths = array(); |
| | |
| | | * @param string Additional path to search in |
| | | * @return mixed Relative path to the requested file or False if not found |
| | | */ |
| | | public function get_skin_file($file, &$skin_path, $add_path = null) |
| | | public function get_skin_file($file, &$skin_path = null, $add_path = null) |
| | | { |
| | | $skin_paths = $this->skin_paths; |
| | | if ($add_path) |
| | |
| | | |
| | | /** |
| | | * Delete all stored env variables and commands |
| | | * |
| | | * @param bool $all Reset all env variables (including internal) |
| | | */ |
| | | public function reset() |
| | | public function reset($all = false) |
| | | { |
| | | $env = $all ? null : array_intersect_key($this->env, array('extwin'=>1, 'framed'=>1)); |
| | | |
| | | parent::reset(); |
| | | $this->js_env = array(); |
| | | $this->js_labels = array(); |
| | | $this->js_commands = array(); |
| | | |
| | | // let some env variables survive |
| | | $this->env = $this->js_env = $env; |
| | | $this->js_labels = array(); |
| | | $this->js_commands = array(); |
| | | $this->script_files = array(); |
| | | $this->scripts = array(); |
| | | $this->header = ''; |
| | |
| | | $this->parse($templ, false); |
| | | } |
| | | else { |
| | | $this->framed = $templ == 'iframe' ? true : $this->framed; |
| | | $this->framed = true; |
| | | $this->write(); |
| | | } |
| | | |
| | |
| | | // unlock interface after iframe load |
| | | $unlock = preg_replace('/[^a-z0-9]/i', '', $_REQUEST['_unlock']); |
| | | if ($this->framed) { |
| | | array_unshift($this->js_commands, array('set_busy', false, null, $unlock)); |
| | | array_unshift($this->js_commands, array('iframe_loaded', $unlock)); |
| | | } |
| | | else if ($unlock) { |
| | | array_unshift($this->js_commands, array('hide_message', $unlock)); |
| | |
| | | $this->set_env('request_token', $this->app->get_request_token()); |
| | | |
| | | // write all env variables to client |
| | | $js = $this->framed ? "if(window.parent) {\n" : ''; |
| | | $js .= $this->get_js_commands() . ($this->framed ? ' }' : ''); |
| | | $this->add_script($js, 'head_top'); |
| | | if ($commands = $this->get_js_commands()) { |
| | | $js = $this->framed ? "if (window.parent) {\n" : ''; |
| | | $js .= $commands . ($this->framed ? ' }' : ''); |
| | | $this->add_script($js, 'head_top'); |
| | | } |
| | | |
| | | // send clickjacking protection headers |
| | | $iframe = $this->framed || !empty($_REQUEST['_framed']); |
| | |
| | | if (is_readable($path)) { |
| | | $this->config->set('skin_path', $skin_path); |
| | | $this->base_path = preg_replace('!plugins/\w+/!', '', $skin_path); // set base_path to core skin directory (not plugin's skin) |
| | | $skin_dir = preg_replace('!^plugins/!', '', $skin_path); |
| | | break; |
| | | } |
| | | else { |
| | |
| | | protected function file_callback($matches) |
| | | { |
| | | $file = $matches[3]; |
| | | $file[0] = preg_replace('!^/this/!', '/', $file[0]); |
| | | |
| | | // correct absolute paths |
| | | if ($file[0] == '/') { |
| | |
| | | * |
| | | * @param string $input |
| | | * @return string |
| | | * @uses rcube_output_html::parse_xml() |
| | | * @uses rcmail_output_html::parse_xml() |
| | | * @since 0.1-rc1 |
| | | */ |
| | | public function just_parse($input) |
| | |
| | | // include a file |
| | | case 'include': |
| | | $old_base_path = $this->base_path; |
| | | if (!empty($attrib['skin_path'])) $attrib['skinpath'] = $attrib['skin_path']; |
| | | if ($path = $this->get_skin_file($attrib['file'], $skin_path, $attrib['skinpath'])) { |
| | | $this->base_path = preg_replace('!plugins/\w+/!', '', $skin_path); // set base_path to core skin directory (not plugin's skin) |
| | | $path = realpath($path); |
| | |
| | | |
| | | // generate html code for button |
| | | if ($btn_content) { |
| | | $attrib_str = html::attrib_string($attrib, $link_attrib); |
| | | $attrib_str = html::attrib_string($attrib, array_merge(html::$common_attrib, $link_attrib)); |
| | | $out = sprintf('<a%s>%s</a>', $attrib_str, $btn_content); |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | } |
| | | else if (is_array($default_host) && ($host = array_pop($default_host))) { |
| | | else if (is_array($default_host) && ($host = key($default_host)) !== null) { |
| | | $hide_host = true; |
| | | $input_host = new html_hiddenfield(array( |
| | | 'name' => '_host', 'id' => 'rcmloginhost', 'value' => $host) + $attrib); |
| | | 'name' => '_host', 'id' => 'rcmloginhost', 'value' => is_numeric($host) ? $default_host[$host] : $host) + $attrib); |
| | | } |
| | | else if (empty($default_host)) { |
| | | $input_host = new html_inputfield(array('name' => '_host', 'id' => 'rcmloginhost') |