| | |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Set page title variable |
| | | */ |
| | |
| | | { |
| | | $this->pagetitle = $title; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Getter for the current page title |
| | |
| | | |
| | | return $title; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Set skin |
| | |
| | | $this->js_commands[] = $cmd; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Add a localized label to the client environment |
| | | */ |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Invoke display_message command |
| | | * |
| | |
| | | public function show_message($message, $type='notice', $vars=null, $override=true) |
| | | { |
| | | if ($override || !$this->message) { |
| | | if (rcube_label_exists($message)) { |
| | | if (!empty($vars)) |
| | | $vars = array_map('Q', $vars); |
| | | $msgtext = rcube_label(array('name' => $message, 'vars' => $vars)); |
| | | } |
| | | else |
| | | $msgtext = $message; |
| | | |
| | | $this->message = $message; |
| | | $this->command( |
| | | 'display_message', |
| | | rcube_label(array('name' => $message, 'vars' => $vars)), |
| | | $type); |
| | | $this->command('display_message', $msgtext, $type, $timeout * 1000); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Delete all stored env variables and commands |
| | |
| | | parent::reset(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Redirect to a certain url |
| | | * |
| | |
| | | header('Location: ' . $location); |
| | | exit; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Send the request output to the client. |
| | |
| | | } |
| | | |
| | | /** |
| | | * Parse a specific skin template and deliver to stdout |
| | | * |
| | | * Either returns nothing, or exists hard (exit();) |
| | | * Parse a specific skin template and deliver to stdout (or return) |
| | | * |
| | | * @param string Template name |
| | | * @param boolean Exit script |
| | | * @return void |
| | | * @param boolean Don't write to stdout, return parsed content instead |
| | | * |
| | | * @link http://php.net/manual/en/function.exit.php |
| | | */ |
| | | private function parse($name = 'main', $exit = true) |
| | | function parse($name = 'main', $exit = true, $write = true) |
| | | { |
| | | $skin_path = $this->config['skin_path']; |
| | | $plugin = false; |
| | | $plugin = false; |
| | | $realname = $name; |
| | | $temp = explode('.', $name, 2); |
| | | $this->plugin_skin_path = null; |
| | | |
| | | $temp = explode(".", $name, 2); |
| | | if (count($temp) > 1) { |
| | | $plugin = $temp[0]; |
| | | $name = $temp[1]; |
| | | $skin_dir = $plugin . '/skins/' . $this->config['skin']; |
| | | $plugin = $temp[0]; |
| | | $name = $temp[1]; |
| | | $skin_dir = $plugin . '/skins/' . $this->config['skin']; |
| | | $skin_path = $this->plugin_skin_path = $this->app->plugins->dir . $skin_dir; |
| | | if (!is_dir($skin_path)) { // fallback to default skin |
| | | |
| | | // fallback to default skin |
| | | if (!is_dir($skin_path)) { |
| | | $skin_dir = $plugin . '/skins/default'; |
| | | $skin_path = $this->plugin_skin_path = $this->app->plugins->dir . $skin_dir; |
| | | } |
| | |
| | | |
| | | $path = "$skin_path/templates/$name.html"; |
| | | |
| | | if (!is_readable($path) && $this->deprecated_templates[$name]) { |
| | | $path = "$skin_path/templates/".$this->deprecated_templates[$name].".html"; |
| | | if (!is_readable($path) && $this->deprecated_templates[$realname]) { |
| | | $path = "$skin_path/templates/".$this->deprecated_templates[$realname].".html"; |
| | | if (is_readable($path)) |
| | | raise_error(array('code' => 502, 'type' => 'php', |
| | | 'file' => __FILE__, 'line' => __LINE__, |
| | | 'message' => "Using deprecated template '".$this->deprecated_templates[$name]."' in ".$this->config['skin_path']."/templates. Please rename to '".$name."'"), |
| | | 'message' => "Using deprecated template '".$this->deprecated_templates[$realname] |
| | | ."' in ".$this->config['skin_path']."/templates. Please rename to '".$realname."'"), |
| | | true, false); |
| | | } |
| | | |
| | |
| | | 'type' => 'php', |
| | | 'line' => __LINE__, |
| | | 'file' => __FILE__, |
| | | 'message' => 'Error loading template for '.$name |
| | | 'message' => 'Error loading template for '.$realname |
| | | ), true, true); |
| | | return false; |
| | | } |
| | |
| | | $output = $this->parse_xml($output); |
| | | |
| | | // trigger generic hook where plugins can put additional content to the page |
| | | $hook = $this->app->plugins->exec_hook("render_page", array('template' => $name, 'content' => $output)); |
| | | |
| | | // add debug console |
| | | if ($this->config['debug_level'] & 8) { |
| | | $this->add_footer('<div id="console" style="position:absolute;top:5px;left:5px;width:405px;padding:2px;background:white;z-index:9000;"> |
| | | <a href="#toggle" onclick="con=$(\'#dbgconsole\');con[con.is(\':visible\')?\'hide\':\'show\']();return false">console</a> |
| | | <textarea name="console" id="dbgconsole" rows="20" cols="40" wrap="off" style="display:none;width:400px;border:none;font-size:10px" spellcheck="false"></textarea></div>' |
| | | ); |
| | | } |
| | | $hook = $this->app->plugins->exec_hook("render_page", array('template' => $realname, 'content' => $output)); |
| | | |
| | | $output = $this->parse_with_globals($hook['content']); |
| | | $this->write(trim($output)); |
| | | |
| | | if ($write) { |
| | | // add debug console |
| | | if ($this->config['debug_level'] & 8) { |
| | | $this->add_footer('<div id="console" style="position:absolute;top:5px;left:5px;width:405px;padding:2px;background:white;z-index:9000;"> |
| | | <a href="#toggle" onclick="con=$(\'#dbgconsole\');con[con.is(\':visible\')?\'hide\':\'show\']();return false">console</a> |
| | | <textarea name="console" id="dbgconsole" rows="20" cols="40" wrap="off" style="display:none;width:400px;border:none;font-size:10px" spellcheck="false"></textarea></div>' |
| | | ); |
| | | } |
| | | $this->write(trim($output)); |
| | | } |
| | | else { |
| | | return $output; |
| | | } |
| | | |
| | | if ($exit) { |
| | | exit; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Return executable javascript code for all registered commands |
| | |
| | | */ |
| | | private function parse_conditions($input) |
| | | { |
| | | $matches = preg_split('/<roundcube:(if|elseif|else|endif)\s+([^>]+)>/is', $input, 2, PREG_SPLIT_DELIM_CAPTURE); |
| | | $matches = preg_split('/<roundcube:(if|elseif|else|endif)\s+([^>]+)>\n?/is', $input, 2, PREG_SPLIT_DELIM_CAPTURE); |
| | | if ($matches && count($matches) == 4) { |
| | | if (preg_match('/^(else|endif)$/i', $matches[1])) { |
| | | return $matches[0] . $this->parse_conditions($matches[3]); |
| | |
| | | $attrib = parse_attrib_string($matches[2]); |
| | | if (isset($attrib['condition'])) { |
| | | $condmet = $this->check_condition($attrib['condition']); |
| | | $submatches = preg_split('/<roundcube:(elseif|else|endif)\s+([^>]+)>/is', $matches[3], 2, PREG_SPLIT_DELIM_CAPTURE); |
| | | $submatches = preg_split('/<roundcube:(elseif|else|endif)\s+([^>]+)>\n?/is', $matches[3], 2, PREG_SPLIT_DELIM_CAPTURE); |
| | | if ($condmet) { |
| | | $result = $submatches[0]; |
| | | $result.= ($submatches[1] != 'endif' ? preg_replace('/.*<roundcube:endif\s+[^>]+>/Uis', '', $submatches[3], 1) : $submatches[3]); |
| | | $result.= ($submatches[1] != 'endif' ? preg_replace('/.*<roundcube:endif\s+[^>]+>\n?/Uis', '', $submatches[3], 1) : $submatches[3]); |
| | | } |
| | | else { |
| | | $result = "<roundcube:$submatches[1] $submatches[2]>" . $submatches[3]; |
| | |
| | | $username = $this->app->user->get_username(); |
| | | } |
| | | |
| | | return idn_to_utf8($username); |
| | | return rcube_idn_to_utf8($username); |
| | | } |
| | | |
| | | |
| | |
| | | private function login_form($attrib) |
| | | { |
| | | $default_host = $this->config['default_host']; |
| | | $attrib['autocomplete'] = $this->config['login_autocomplete'] ? null : 'off'; |
| | | $autocomplete = (int) $this->config['login_autocomplete']; |
| | | |
| | | $_SESSION['temp'] = true; |
| | | |
| | |
| | | if (empty($url) && !preg_match('/_(task|action)=logout/', $_SERVER['QUERY_STRING'])) |
| | | $url = $_SERVER['QUERY_STRING']; |
| | | |
| | | $input_user = new html_inputfield(array('name' => '_user', 'id' => 'rcmloginuser') + $attrib); |
| | | $input_pass = new html_passwordfield(array('name' => '_pass', 'id' => 'rcmloginpwd') + $attrib); |
| | | // set atocomplete attribute |
| | | $user_attrib = $autocomplete > 0 ? array() : array('autocomplete' => 'off'); |
| | | $host_attrib = $autocomplete > 0 ? array() : array('autocomplete' => 'off'); |
| | | $pass_attrib = $autocomplete > 1 ? array() : array('autocomplete' => 'off'); |
| | | |
| | | $input_task = new html_hiddenfield(array('name' => '_task', 'value' => 'login')); |
| | | $input_action = new html_hiddenfield(array('name' => '_action', 'value' => 'login')); |
| | | $input_tzone = new html_hiddenfield(array('name' => '_timezone', 'id' => 'rcmlogintz', 'value' => '_default_')); |
| | | $input_url = new html_hiddenfield(array('name' => '_url', 'id' => 'rcmloginurl', 'value' => $url)); |
| | | $input_user = new html_inputfield(array('name' => '_user', 'id' => 'rcmloginuser') |
| | | + $attrib + $user_attrib); |
| | | $input_pass = new html_passwordfield(array('name' => '_pass', 'id' => 'rcmloginpwd') |
| | | + $attrib + $pass_attrib); |
| | | $input_host = null; |
| | | |
| | | if (is_array($default_host) && count($default_host) > 1) { |
| | |
| | | 'name' => '_host', 'id' => 'rcmloginhost', 'value' => $host) + $attrib); |
| | | } |
| | | else if (empty($default_host)) { |
| | | $input_host = new html_inputfield(array('name' => '_host', 'id' => 'rcmloginhost') + $attrib); |
| | | $input_host = new html_inputfield(array('name' => '_host', 'id' => 'rcmloginhost') |
| | | + $attrib + $host_attrib); |
| | | } |
| | | |
| | | $form_name = !empty($attrib['form']) ? $attrib['form'] : 'form'; |
| | |
| | | $table = new html_table(array('cols' => 2)); |
| | | |
| | | $table->add('title', html::label('rcmloginuser', Q(rcube_label('username')))); |
| | | $table->add(null, $input_user->show(get_input_value('_user', RCUBE_INPUT_POST))); |
| | | $table->add(null, $input_user->show(get_input_value('_user', RCUBE_INPUT_GPC))); |
| | | |
| | | $table->add('title', html::label('rcmloginpwd', Q(rcube_label('password')))); |
| | | $table->add(null, $input_pass->show()); |
| | |
| | | // add host selection row |
| | | if (is_object($input_host) && !$hide_host) { |
| | | $table->add('title', html::label('rcmloginhost', Q(rcube_label('server')))); |
| | | $table->add(null, $input_host->show(get_input_value('_host', RCUBE_INPUT_POST))); |
| | | $table->add(null, $input_host->show(get_input_value('_host', RCUBE_INPUT_GPC))); |
| | | } |
| | | |
| | | $out = $input_action->show(); |
| | | $out = $input_task->show(); |
| | | $out .= $input_action->show(); |
| | | $out .= $input_tzone->show(); |
| | | $out .= $input_url->show(); |
| | | $out .= $table->show(); |
| | |
| | | 'UTF-8' => 'UTF-8 ('.rcube_label('unicode').')', |
| | | 'US-ASCII' => 'ASCII ('.rcube_label('english').')', |
| | | 'ISO-8859-1' => 'ISO-8859-1 ('.rcube_label('westerneuropean').')', |
| | | 'ISO-8859-2' => 'ISO-8895-2 ('.rcube_label('easterneuropean').')', |
| | | 'ISO-8859-4' => 'ISO-8895-4 ('.rcube_label('baltic').')', |
| | | 'ISO-8859-2' => 'ISO-8859-2 ('.rcube_label('easterneuropean').')', |
| | | 'ISO-8859-4' => 'ISO-8859-4 ('.rcube_label('baltic').')', |
| | | 'ISO-8859-5' => 'ISO-8859-5 ('.rcube_label('cyrillic').')', |
| | | 'ISO-8859-6' => 'ISO-8859-6 ('.rcube_label('arabic').')', |
| | | 'ISO-8859-7' => 'ISO-8859-7 ('.rcube_label('greek').')', |