| | |
| | | |
| | | 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'); |
| | |
| | | * @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']); |
| | |
| | | * |
| | | * @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) |
| | |
| | | /** |
| | | * Determines if a given condition is met |
| | | * |
| | | * @todo Get rid off eval() once I understand what this does. |
| | | * @todo Extend this to allow real conditions, not just "set" |
| | | * @param string Condition statement |
| | | * @return boolean True if condition is met, False if not |
| | | */ |
| | | protected function check_condition($condition) |
| | | { |
| | | return eval("return (".$this->parse_expression($condition).");"); |
| | | return $this->eval_expression($condition); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | |
| | | /** |
| | | * Parses expression and replaces variables |
| | | * Parse & evaluate a given expression and return its result. |
| | | * |
| | | * @param string Expression statement |
| | | * @return string Expression value |
| | | * @param string Expression statement |
| | | * |
| | | * @return mixed Expression result |
| | | */ |
| | | protected function parse_expression($expression) |
| | | protected function eval_expression ($expression) |
| | | { |
| | | return preg_replace( |
| | | $expression = preg_replace( |
| | | array( |
| | | '/session:([a-z0-9_]+)/i', |
| | | '/config:([a-z0-9_]+)(:([a-z0-9_]+))?/i', |
| | |
| | | ), |
| | | array( |
| | | "\$_SESSION['\\1']", |
| | | "\$this->app->config->get('\\1',rcube_utils::get_boolean('\\3'))", |
| | | "\$this->env['\\1']", |
| | | "\$app->config->get('\\1',rcube_utils::get_boolean('\\3'))", |
| | | "\$env['\\1']", |
| | | "rcube_utils::get_input_value('\\1', rcube_utils::INPUT_GPC)", |
| | | "\$_COOKIE['\\1']", |
| | | "\$this->browser->{'\\1'}", |
| | | "\$browser->{'\\1'}", |
| | | $this->template_name, |
| | | ), |
| | | $expression); |
| | | $expression |
| | | ); |
| | | |
| | | $fn = create_function('$app,$browser,$env', "return ($expression);"); |
| | | if (!$fn) { |
| | | rcube::raise_error(array( |
| | | 'code' => 505, |
| | | 'type' => 'php', |
| | | 'file' => __FILE__, |
| | | 'line' => __LINE__, |
| | | 'message' => "Expression parse error on: ($expression)"), true, false); |
| | | |
| | | return null; |
| | | } |
| | | |
| | | return $fn($this->app, $this->browser, $this->env); |
| | | } |
| | | |
| | | |
| | |
| | | // show a label |
| | | case 'label': |
| | | if ($attrib['expression']) |
| | | $attrib['name'] = eval("return " . $this->parse_expression($attrib['expression']) .";"); |
| | | $attrib['name'] = $this->eval_expression($attrib['expression']); |
| | | |
| | | if ($attrib['name'] || $attrib['command']) { |
| | | // @FIXME: 'noshow' is useless, remove? |
| | |
| | | // 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); |
| | |
| | | |
| | | // return code for a specified eval expression |
| | | case 'exp': |
| | | $value = $this->parse_expression($attrib['expression']); |
| | | return eval("return html::quote($value);"); |
| | | return html::quote($this->eval_expression($attrib['expression'])); |
| | | |
| | | // return variable |
| | | case 'var': |
| | |
| | | $out = sprintf('<a%s>%s</a>', $attrib_str, $btn_content); |
| | | } |
| | | |
| | | if ($attrib['wrapper']) { |
| | | $out = html::tag($attrib['wrapper'], null, $out); |
| | | } |
| | | |
| | | return $out; |
| | | } |
| | | |