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 |   35 +++++++++++++++++++----------------
 1 files changed, 19 insertions(+), 16 deletions(-)

diff --git a/program/include/rcube_json_output.php b/program/include/rcube_json_output.php
index 0bd3a2b..7c79157 100644
--- a/program/include/rcube_json_output.php
+++ b/program/include/rcube_json_output.php
@@ -130,8 +130,11 @@
      */
     public function add_label()
     {
-        $arg_list = func_get_args();
-        foreach ($arg_list as $i => $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);
         }
     }
@@ -196,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);
     }
     
     
@@ -227,14 +237,7 @@
     private function get_js_commands()
     {
         $out = '';
-	
-	if (sizeof($this->env))
-	    $out .= 'this.set_env('.json_serialize($this->env).");\n";
         
-        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) {

--
Gitblit v1.9.1