| | |
| | | private $js_commands = array(); |
| | | private $object_handlers = array(); |
| | | private $plugin_skin_path; |
| | | private $template_name; |
| | | |
| | | public $browser; |
| | | public $framed = false; |
| | |
| | | |
| | | //$this->framed = $framed; |
| | | $this->set_env('task', $task); |
| | | $this->set_env('request_token', $this->app->get_request_token()); |
| | | |
| | | // load the correct skin (in case user-defined) |
| | | $this->set_skin($this->config['skin']); |
| | |
| | | $this->add_script(JS_OBJECT_NAME.'.init();', 'docready'); |
| | | |
| | | $this->scripts_path = 'program/js/'; |
| | | $this->include_script('jquery-1.5.min.js'); |
| | | $this->include_script('jquery.min.js'); |
| | | $this->include_script('common.js'); |
| | | $this->include_script('app.js'); |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 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 |
| | | */ |
| | |
| | | $this->command('add_label', $name, rcube_label($name)); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Invoke display_message command |
| | |
| | | $this->command('display_message', $msgtext, $type); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 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. |
| | |
| | | else if ($unlock) { |
| | | array_unshift($this->js_commands, array('hide_message', $unlock)); |
| | | } |
| | | |
| | | if (!empty($this->script_files)) |
| | | $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 ? ' }' : ''); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 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; |
| | | $realname = $name; |
| | | $temp = explode('.', $name, 2); |
| | | |
| | | $this->plugin_skin_path = null; |
| | | $this->template_name = $realname; |
| | | |
| | | if (count($temp) > 1) { |
| | | $plugin = $temp[0]; |
| | |
| | | // trigger generic hook where plugins can put additional content to the page |
| | | $hook = $this->app->plugins->exec_hook("render_page", array('template' => $realname, '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>' |
| | | ); |
| | | $output = $this->parse_with_globals($hook['content']); |
| | | |
| | | 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; |
| | | } |
| | | |
| | | $output = $this->parse_with_globals($hook['content']); |
| | | $this->write(trim($output)); |
| | | if ($exit) { |
| | | exit; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Return executable javascript code for all registered commands |
| | |
| | | '/env:([a-z0-9_]+)/i', |
| | | '/request:([a-z0-9_]+)/i', |
| | | '/cookie:([a-z0-9_]+)/i', |
| | | '/browser:([a-z0-9_]+)/i' |
| | | '/browser:([a-z0-9_]+)/i', |
| | | '/template:name/i', |
| | | ), |
| | | array( |
| | | "\$_SESSION['\\1']", |
| | |
| | | "\$this->env['\\1']", |
| | | "get_input_value('\\1', RCUBE_INPUT_GPC)", |
| | | "\$_COOKIE['\\1']", |
| | | "\$this->browser->{'\\1'}" |
| | | "\$this->browser->{'\\1'}", |
| | | $this->template_name, |
| | | ), |
| | | $expression); |
| | | } |