]> git.wh0rd.org - tt-rss.git/commitdiff
assign/remove to label rpc: use JSON
authorAndrew Dolgov <fox@madoka.volgo-balt.ru>
Mon, 29 Nov 2010 11:11:54 +0000 (14:11 +0300)
committerAndrew Dolgov <fox@madoka.volgo-balt.ru>
Mon, 29 Nov 2010 11:11:54 +0000 (14:11 +0300)
modules/backend-rpc.php
viewfeed.js

index 59faee7b317799f7d0d0eec265f4cfb5b9f7275d..e027ff39d1f906179a15c2c800ca91b8abf523d1 100644 (file)
                        return;
                }
 
-               if ($subop == "removeFromLabel") {
-
-                       $ids = explode(",", db_escape_string($_REQUEST["ids"]));
-                       $label_id = db_escape_string($_REQUEST["lid"]);
-
-                       $label = db_escape_string(label_find_caption($link, $label_id, 
-                               $_SESSION["uid"]));
-
-                       print "<rpc-reply>";
-                       print "<info-for-headlines>";
-
-                       if ($label) {
-
-                               foreach ($ids as $id) {
-                                       label_remove_article($link, $id, $label, $_SESSION["uid"]);
-
-                                       print "<entry id=\"$id\"><![CDATA[";
-
-                                       $labels = get_article_labels($link, $id, $_SESSION["uid"]);
-                                       print format_article_labels($labels, $id);
-
-                                       print "]]></entry>";
-
-                               }
-                       }
-
-                       print "</info-for-headlines>";
-
-                       print "<message>UPDATE_COUNTERS</message>";
-                       print "</rpc-reply>";
-
-                       return;
-               }
+               if ($subop == "assignToLabel" || $subop == "removeFromLabel") {
+                       header("Content-Type: text/plain");
 
-               if ($subop == "assignToLabel") {
+                       $reply = array();
 
                        $ids = split(",", db_escape_string($_REQUEST["ids"]));
                        $label_id = db_escape_string($_REQUEST["lid"]);
                        $label = db_escape_string(label_find_caption($link, $label_id, 
                                $_SESSION["uid"]));
 
-                       print "<rpc-reply>";                    
-
-                       print "<info-for-headlines>";
+                       $reply["info-for-headlines"] = array();
 
                        if ($label) {
 
                                foreach ($ids as $id) {
-                                       label_add_article($link, $id, $label, $_SESSION["uid"]);
 
-                                       print "<entry id=\"$id\"><![CDATA[";
+                                       if ($subop == "assignToLabel")
+                                               label_add_article($link, $id, $label, $_SESSION["uid"]);
+                                       else
+                                               label_remove_article($link, $id, $label, $_SESSION["uid"]);
 
                                        $labels = get_article_labels($link, $id, $_SESSION["uid"]);
-                                       print format_article_labels($labels, $id);
-
-                                       print "]]></entry>";
+                                 
+                                       array_push($reply["info-for-headlines"],
+                                         array("id" => $id, "labels" => format_article_labels($labels, $id)));
 
                                }
                        }
 
-                       print "</info-for-headlines>";
+                       $reply["message"] = "UPDATE_COUNTERS";
 
-                       print "<message>UPDATE_COUNTERS</message>";
-                       print "</rpc-reply>";
+                       print json_encode($reply);
 
                        return;
                }
index f36c75b46bfd2bdfb8148adb54fdc8bab6fa274b..22523fa10255d0439985b0954a93cc65add3c61f 100644 (file)
@@ -683,8 +683,8 @@ function selectionRemoveLabel(id, ids) {
                        new Ajax.Request("backend.php", {
                                parameters: query,
                                onComplete: function(transport) { 
+                                       handle_rpc_json(transport);
                                        show_labels_in_headlines(transport);
-                                       handle_rpc_reply(transport);
                                } });
 
 //             }
@@ -721,8 +721,8 @@ function selectionAssignLabel(id, ids) {
                        new Ajax.Request("backend.php", {
                                parameters: query,
                                onComplete: function(transport) { 
+                                       handle_rpc_json(transport);
                                        show_labels_in_headlines(transport);
-                                       handle_rpc_reply(transport);
                                } });
 
 //             }
@@ -1776,29 +1776,17 @@ function scrollArticle(offset) {
 
 function show_labels_in_headlines(transport) {
        try {
-               if (transport.responseXML) {
-                       var info = transport.responseXML.getElementsByTagName("info-for-headlines")[0];
-
-                       var elems = info.getElementsByTagName("entry");
-
-                       for (var l = 0; l < elems.length; l++) {
-                               var e_id = elems[l].getAttribute("id");
-
-                               if (e_id) {
+               var data = JSON.parse(transport.responseText);
 
-                                       var ctr = $("HLLCTR-" + e_id);
-
-                                       if (ctr) {
-                                               ctr.innerHTML = elems[l].firstChild.nodeValue;
-                                       }
-                               }
-
-                       }
+               if (data) {
+                       data['info-for-headlines'].each(function(elem) {
+                               var ctr = $("HLLCTR-" + elem.id);
 
+                               if (ctr) ctr.innerHTML = elem.labels;
+                       });
                }
        } catch (e) {
                exception_error("show_labels_in_headlines", e);
-
        }
 }