From 5c2d6e3555af7a2e71c0087d4b4c0a8780e835ca Mon Sep 17 00:00:00 2001 From: thomascube <thomas@roundcube.net> Date: Sun, 26 Apr 2009 13:02:13 -0400 Subject: [PATCH] Fix adding labels from plugins --- program/include/rcube_json_output.php | 71 +++++++++++++++++++++++------------ 1 files changed, 46 insertions(+), 25 deletions(-) diff --git a/program/include/rcube_json_output.php b/program/include/rcube_json_output.php index 6bf4f8a..7c79157 100644 --- a/program/include/rcube_json_output.php +++ b/program/include/rcube_json_output.php @@ -5,7 +5,7 @@ | program/include/rcube_json_output.php | | | | This file is part of the RoundCube Webmail client | - | Copyright (C) 2008, RoundCube Dev. - Switzerland | + | Copyright (C) 2008-2009, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | | PURPOSE: | @@ -34,17 +34,16 @@ private $texts = array(); private $commands = array(); - public $task = ''; + public $type = 'js'; public $ajax_call = true; /** * Constructor */ - public function __construct(&$config, $task) + public function __construct($task) { - $this->task = $task; - $this->config = $config; + $this->config = rcmail::get_instance()->config; } @@ -60,11 +59,14 @@ } /** - * @ignore + * Issue command to set page title + * + * @param string New page title */ public function set_pagetitle($title) { - // ignore + $name = $this->config->get('product_name'); + $this->command('set_pagetitle', JQ(empty($name) ? $title : $name.' :: '.$title)); } /** @@ -128,9 +130,12 @@ */ public function add_label() { - $arg_list = func_get_args(); - foreach ($arg_list as $i => $name) { - $this->texts[$name] = rcube::gettext($name); + $args = func_get_args(); + if (count($args) == 1 && is_array($args[0])) + $args = $args[0]; + + foreach ($args as $name) { + $this->texts[$name] = rcube_label($name); } } @@ -147,7 +152,7 @@ { $this->command( 'display_message', - rcube::gettext(array('name' => $message, 'vars' => $vars)), + rcube_label(array('name' => $message, 'vars' => $vars)), $type ); } @@ -155,11 +160,24 @@ /** * Delete all stored env variables and commands */ - public public function reset() + public function reset() { $this->env = array(); $this->texts = array(); $this->commands = array(); + } + + /** + * Redirect to a certain url + * + * @param mixed Either a string with the action or url parameters as key-value pairs + * @see rcmail::url() + */ + public function redirect($p = array(), $delay = 1) + { + $location = rcmail::get_instance()->url($p); + $this->remote_response("window.setTimeout(\"location.href='{$location}'\", $delay);"); + exit; } @@ -181,26 +199,33 @@ * @return void * @deprecated */ - public function remote_response($add='', $flush=false) + public function remote_response($add='') { static $s_header_sent = false; if (!$s_header_sent) { $s_header_sent = true; send_nocacheing_headers(); - header('Content-Type: application/x-javascript; charset=' . $this->get_charset()); + header('Content-Type: text/plain; charset=' . $this->get_charset()); print '/** ajax response ['.date('d/M/Y h:i:s O')."] **/\n"; } // unset default env vars unset($this->env['task'], $this->env['action'], $this->env['comm_path']); - // send response code - echo $this->get_js_commands() . $add; + $rcmail = rcmail::get_instance(); + $response = array('action' => $rcmail->action, 'unlock' => (bool)$_REQUEST['_unlock']); + + if (!empty($this->env)) + $response['env'] = $this->env; + + if (!empty($this->texts)) + $response['texts'] = $this->texts; - // flush the output buffer - if ($flush) - flush(); + // send response code + $response['exec'] = $this->get_js_commands() . $add; + + echo json_serialize($response); } @@ -211,12 +236,8 @@ */ private function get_js_commands() { - $out = 'this.set_env('.json_serialize($this->env).");\n"; + $out = ''; - foreach($this->texts as $name => $text) { - $out .= sprintf("this.add_label('%s', '%s');\n", $name, JQ($text)); - } - foreach ($this->commands as $i => $args) { $method = array_shift($args); foreach ($args as $i => $arg) { @@ -229,7 +250,7 @@ implode(',', $args) ); } - + return $out; } } -- Gitblit v1.9.1