From 155e4f61253cd5233c5ee44504d696b9402b7419 Mon Sep 17 00:00:00 2001
From: Andrew Dolgov <noreply@fakecake.org>
Date: Wed, 24 Feb 2021 12:07:25 +0300
Subject: [PATCH] pass a bunch of related arrays properly to backend

---
 classes/rpc.php | 20 ++++----------------
 js/Feeds.js     |  2 +-
 js/Headlines.js |  8 ++++----
 3 files changed, 9 insertions(+), 21 deletions(-)

diff --git a/classes/rpc.php b/classes/rpc.php
index 7caf37cf0..b9fd492fa 100755
--- a/classes/rpc.php
+++ b/classes/rpc.php
@@ -73,10 +73,7 @@ class RPC extends Handler_Protected {
 	}
 
 	function getAllCounters() {
-		$feed_ids = array_map("intval",
-			explode(",",
-				clean($_REQUEST["feed_ids"])));
-
+		$feed_ids = array_map("intval", clean($_REQUEST["feed_ids"] ?? []));
 		@$seq = (int) $_REQUEST['seq'];
 
 		// @phpstan-ignore-next-line
@@ -95,10 +92,7 @@ class RPC extends Handler_Protected {
 
 	/* GET["cmode"] = 0 - mark as read, 1 - as unread, 2 - toggle */
 	function catchupSelected() {
-		$ids = array_map("intval",
-			explode(",",
-				clean($_REQUEST["ids"])));
-
+		$ids = array_map("intval", clean($_REQUEST["ids"] ?? []));
 		$cmode = (int)clean($_REQUEST["cmode"]);
 
 		Article::_catchup_by_id($ids, $cmode);
@@ -107,10 +101,7 @@ class RPC extends Handler_Protected {
 	}
 
 	function markSelected() {
-		$ids = array_map("intval",
-			explode(",",
-				clean($_REQUEST["ids"])));
-
+		$ids = array_map("intval", clean($_REQUEST["ids"] ?? []));
 		$cmode = (int)clean($_REQUEST["cmode"]);
 
 		$this->markArticlesById($ids, $cmode);
@@ -119,10 +110,7 @@ class RPC extends Handler_Protected {
 	}
 
 	function publishSelected() {
-		$ids = array_map("intval",
-			explode(",",
-				clean($_REQUEST["ids"])));
-
+		$ids = array_map("intval", clean($_REQUEST["ids"] ?? []));
 		$cmode = (int)clean($_REQUEST["cmode"]);
 
 		$this->publishArticlesById($ids, $cmode);
diff --git a/js/Feeds.js b/js/Feeds.js
index d4bdd01b6..5d64b77ee 100644
--- a/js/Feeds.js
+++ b/js/Feeds.js
@@ -134,7 +134,7 @@ const	Feeds = {
 		this.reloadCurrent();
 	},
 	requestCounters: function(feed_ids = null) {
-		xhr.json("backend.php", {op: "rpc", method: "getAllCounters", feed_ids: feed_ids, seq: App.next_seq()}, () => {
+		xhr.json("backend.php", {op: "rpc", method: "getAllCounters", "feed_ids[]": feed_ids, seq: App.next_seq()}, () => {
 			//
 		});
 	},
diff --git a/js/Headlines.js b/js/Headlines.js
index 18c7cda2e..8baf93671 100755
--- a/js/Headlines.js
+++ b/js/Headlines.js
@@ -150,19 +150,19 @@ const Headlines = {
 
 		if (ops.tmark.length != 0)
 			promises.push(xhr.post("backend.php",
-				{op: "rpc", method: "markSelected", ids: ops.tmark.toString(), cmode: 2}));
+				{op: "rpc", method: "markSelected", "ids[]": ops.tmark, cmode: 2}));
 
 		if (ops.tpub.length != 0)
 			promises.push(xhr.post("backend.php",
-				{op: "rpc", method: "publishSelected", ids: ops.tpub.toString(), cmode: 2}));
+				{op: "rpc", method: "publishSelected", "ids[]": ops.tpub, cmode: 2}));
 
 		if (ops.read.length != 0)
 			promises.push(xhr.post("backend.php",
-				{op: "rpc", method: "catchupSelected", ids: ops.read.toString(), cmode: 0}));
+				{op: "rpc", method: "catchupSelected", "ids[]": ops.read, cmode: 0}));
 
 		if (ops.unread.length != 0)
 			promises.push(xhr.post("backend.php",
-				{op: "rpc", method: "catchupSelected", ids: ops.unread.toString(), cmode: 1}));
+				{op: "rpc", method: "catchupSelected", "ids[]": ops.unread, cmode: 1}));
 
 		const scores = Object.keys(ops.rescore);
 
-- 
GitLab