]> git.wh0rd.org - tt-rss.git/blame - xml-rpc.php
fix unneeded submit of create filter form
[tt-rss.git] / xml-rpc.php
CommitLineData
956c7629
AD
1<?
2 require "xmlrpc/lib/xmlrpc.inc";
3 require "xmlrpc/lib/xmlrpcs.inc";
4
68d3cf5a
AD
5 $xmlrpc_defencoding = "UTF8";
6
956c7629
AD
7 require_once "sanity_check.php";
8 require_once "config.php";
9
10 require_once "db.php";
11 require_once "db-prefs.php";
12 require_once "functions.php";
13
14 $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
15
16 if (!$link) {
17 if (DB_TYPE == "mysql") {
18 print mysql_error();
19 }
20 // PG seems to display its own errors just fine by default.
21 return;
22 }
23
24 if (DB_TYPE == "pgsql") {
25 pg_query("set client_encoding = 'utf-8'");
26 }
27
7fb32341
AD
28 function getSubscribedFeeds($msg) {
29 global $link;
30
31 $login_o = $msg->getParam(0);
32 $pass_o = $msg->getParam(1);
33
34 $login = $login_o->scalarval();
35 $pass = $pass_o->scalarval();
36
37 $user_id = authenticate_user($link, $login, $pass);
38
39 if (authenticate_user($link, $login, $pass)) {
40
41 $result = db_query($link, "SELECT
42 id, feed_url, title, SUBSTRING(last_updated,1,19) AS last_updated
43 FROM ttrss_feeds WHERE owner_uid = " .
44 $_SESSION["uid"]);
956c7629 45
7fb32341
AD
46 $feeds = array();
47
48 while ($line = db_fetch_assoc($result)) {
49
50 $line_struct = new xmlrpcval(
51 array(
52 "feed_url" => new xmlrpcval($line["feed_url"]),
53 "title" => new xmlrpcval($line["title"]),
68d3cf5a
AD
54 "id" => new xmlrpcval($line["id"], "int"),
55 "last_updated" => new xmlrpcval(strtotime($line["last_updated"]), "int")
7fb32341
AD
56 ),
57 "struct");
58
59 array_push($feeds, $line_struct);
60 }
61
62 $reply = new xmlrpcval($feeds, "array");
63
64 } else {
65 $reply = new xmlrpcval("Login failed.");
66 }
67
68 return new xmlrpcresp($reply);
69 }
70
71 function subscribeToFeed($msg) {
956c7629
AD
72 global $link;
73
68d3cf5a
AD
74 $error_code = 0;
75
956c7629
AD
76 $login_o = $msg->getParam(0);
77 $pass_o = $msg->getParam(1);
78 $feed_url_o = $msg->getParam(2);
79
80 $login = $login_o->scalarval();
81 $pass = $pass_o->scalarval();
82 $feed_url = $feed_url_o->scalarval();
956c7629
AD
83
84 if (authenticate_user($link, $login, $pass)) {
85 if (subscribe_to_feed($link, $feed_url)) {
86 $reply_msg = "Subscribed successfully.";
87 } else {
88 $reply_msg = "Feed already exists in the database.";
68d3cf5a 89 $error_code = 2;
956c7629
AD
90 }
91 } else {
92 $reply_msg = "Login failed.";
68d3cf5a
AD
93 $error_code = 1;
94 }
95
96 if ($error_code != 0) {
97 return new xmlrpcresp(0, $error_code, $reply_msg);
98 } else {
99 return new xmlrpcresp(new xmlrpcval($reply_msg));
100 }
101 }
102
103 function getFeedHeadlines($msg) {
104 global $link;
105
106 $error_code = 0;
107
108 $login_o = $msg->getParam(0);
109 $pass_o = $msg->getParam(1);
110 $feed_id_o = $msg->getParam(2);
111 $limit_o = $msg->getParam(3);
112 $filter_o = $msg->getParam(4);
113
114 $login = $login_o->scalarval();
115 $pass = $pass_o->scalarval();
116 $feed_id = $feed_id_o->scalarval();
117 $limit = $limit_o->scalarval();
118 $filter = $filter_o->scalarval();
119
120 if (authenticate_user($link, $login, $pass)) {
121
122 if ($limit > 0) {
123 $limit_query_part = "LIMIT $limit";
124 }
125
126 if ($filter == 1) {
127 $query_strategy_part = "unread = true";
128 } else if ($filter == 2) {
129 $query_strategy_part = "marked = true";
130 } else {
131 $query_strategy_part = "ttrss_entries.id > 0";
132 }
133
134 $query = "SELECT
135 ttrss_entries.id,ttrss_entries.title,
136 SUBSTRING(updated,1,16) as updated,
137 unread,feed_id,marked,link,last_read,
138 SUBSTRING(last_read,1,19) as last_read_noms,
139 SUBSTRING(updated,1,19) as updated_noms
140 FROM
141 ttrss_entries,ttrss_user_entries,ttrss_feeds
142 WHERE
143 ttrss_feeds.id = '$feed_id' AND
144 ttrss_user_entries.feed_id = ttrss_feeds.id AND
145 ttrss_user_entries.ref_id = ttrss_entries.id AND
146 ttrss_user_entries.owner_uid = '".$_SESSION["uid"]."' AND
147 $query_strategy_part ORDER BY updated
148 $limit_query_part";
149
150 $result = db_query($link, $query);
151
152 $articles = array();
153
154 while ($line = db_fetch_assoc($result)) {
155
156
157 $line_struct = new xmlrpcval(
158 array(
159 "id" => new xmlrpcval($line["id"], "int"),
160 "unread" => new xmlrpcval(sql_bool_to_bool($line["unread"]), "boolean"),
161 "marked" => new xmlrpcval(sql_bool_to_bool($line["marked"]), "boolean"),
162 "updated" => new xmlrpcval(strtotime($line["updated"]), "int"),
163 "title" => new xmlrpcval($line["title"])
164 ),
165 "struct");
166
167 array_push($articles, $line_struct);
168
169 }
170
171 $reply = new xmlrpcval($articles, "array");
172
173 } else {
174 $reply_msg = "Login failed.";
175 $error_code = 1;
176 }
177
178 if ($error_code != 0) {
179 return new xmlrpcresp(0, $error_code, $reply_msg);
180 } else {
181 return new xmlrpcresp($reply);
956c7629 182 }
68d3cf5a
AD
183
184 }
185
186 function getArticle($msg) {
187 global $link;
188
189 $error_code = 0;
190
191 $login_o = $msg->getParam(0);
192 $pass_o = $msg->getParam(1);
193 $article_id_o = $msg->getParam(2);
194
195 $login = $login_o->scalarval();
196 $pass = $pass_o->scalarval();
197 $article_id = $article_id_o->scalarval();
198
199 if (authenticate_user($link, $login, $pass)) {
200
201 $query = "SELECT title,link,content,feed_id,comments,int_id,
202 marked,unread,
203 SUBSTRING(updated,1,16) as updated,
204 author
205 FROM ttrss_entries,ttrss_user_entries
206 WHERE id = '$article_id' AND ref_id = id AND owner_uid = " . $_SESSION["uid"] ;
207
208 $result = db_query($link, $query);
209
210 if (db_num_rows($result) == 1) {
211
212 $line = db_fetch_assoc($result);
213
214 $reply = new xmlrpcval(
215 array(
216 "title" => new xmlrpcval($line["title"]),
217 "link" => new xmlrpcval($line["link"]),
218 "unread" => new xmlrpcval(sql_bool_to_bool($line["unread"]), "boolean"),
219 "marked" => new xmlrpcval(sql_bool_to_bool($line["marked"]), "boolean"),
220 "comments" => new xmlrpcval($line["comments"]),
221 "author" => new xmlrpcval($line["author"]),
222 "updated" => new xmlrpcval(strtotime($line["updated"], "int")),
223 "content" => new xmlrpcval($line["content"])
224 ),
225 "struct");
226
227 } else {
228 $reply_msg = "Article not found.";
229 $error_code = 2;
230 }
956c7629 231
68d3cf5a
AD
232 } else {
233 $reply_msg = "Login failed.";
234 $error_code = 1;
235 }
236
237 if ($error_code != 0) {
238 return new xmlrpcresp(0, $error_code, $reply_msg);
239 } else {
240 return new xmlrpcresp($reply);
241 }
242 }
243
244 function setArticleMarked($msg) {
245 global $link;
246
247 $error_code = 0;
248
249 $login_o = $msg->getParam(0);
250 $pass_o = $msg->getParam(1);
251 $article_id_o = $msg->getParam(2);
252 $marked_o = $msg->getParam(3);
253
254 $login = $login_o->scalarval();
255 $pass = $pass_o->scalarval();
256 $article_id = $article_id_o->scalarval();
257 $marked = $marked_o->scalarval();
258
259 if (authenticate_user($link, $login, $pass)) {
260
261 if ($marked == 0) {
262 $query_strategy_part = "marked = false";
263 } else if ($marked == 1) {
264 $query_strategy_part = "marked = true";
265 } else if ($marked == 2) {
266 $query_strategy_part = "marked = NOT marked";
267 }
268
269 $result = db_query($link, "UPDATE ttrss_user_entries SET
270 $query_strategy_part WHERE ref_id = '$article_id' AND
271 owner_uid = " . $_SESSION["uid"]);
272
273 if (db_affected_rows($link, $result) == 1) {
274 $reply_msg = "OK";
275 } else {
276 $error_code = 2;
277 $reply_msg = "Failed to update article.";
278 }
279
280 } else {
281 $reply_msg = "Login failed.";
282 $error_code = 1;
283 }
284
285 if ($error_code != 0) {
286 return new xmlrpcresp(0, $error_code, $reply_msg);
287 } else {
288 return new xmlrpcresp(new xmlrpcval($reply_msg));
289 }
290
291 }
292
293 function setArticleRead($msg) {
294 global $link;
295
296 $error_code = 0;
297
298 $login_o = $msg->getParam(0);
299 $pass_o = $msg->getParam(1);
300 $article_id_o = $msg->getParam(2);
301 $read_o = $msg->getParam(3);
302
303 $login = $login_o->scalarval();
304 $pass = $pass_o->scalarval();
305 $article_id = $article_id_o->scalarval();
306 $read = $read_o->scalarval();
307
308 if (authenticate_user($link, $login, $pass)) {
309
310 if ($read == 0) {
311 $query_strategy_part = "unread = true";
312 } else if ($read == 1) {
313 $query_strategy_part = "unread = false";
314 } else if ($read == 2) {
315 $query_strategy_part = "unread = NOT unread";
316 }
317
318 $result = db_query($link, "UPDATE ttrss_user_entries SET
319 $query_strategy_part WHERE ref_id = '$article_id' AND
320 owner_uid = " . $_SESSION["uid"]);
321
322 if (db_affected_rows($link, $result) == 1) {
323 $reply_msg = "OK";
324 } else {
325 $error_code = 2;
326 $reply_msg = "Failed to update article.";
327 }
328
329 } else {
330 $reply_msg = "Login failed.";
331 $error_code = 1;
332 }
333
334 if ($error_code != 0) {
335 return new xmlrpcresp(0, $error_code, $reply_msg);
336 } else {
337 return new xmlrpcresp(new xmlrpcval($reply_msg));
338 }
339
956c7629
AD
340 }
341
342 $subscribeToFeed_sig = array(array($xmlrpcString,
343 $xmlrpcString, $xmlrpcString, $xmlrpcString));
7fb32341
AD
344
345 $getSubscribedFeeds_sig = array(array($xmlrpcString,
346 $xmlrpcString, $xmlrpcString));
347
68d3cf5a
AD
348 $getFeedHeadlines_sig = array(array($xmlrpcString,
349 $xmlrpcString, $xmlrpcString, $xmlrpcInt, $xmlrpcInt, $xmlrpcInt));
350
351 $getArticle_sig = array(array($xmlrpcString,
352 $xmlrpcString, $xmlrpcString, $xmlrpcInt));
353
354 $setArticleMarked_sig = array(array($xmlrpcString,
355 $xmlrpcString, $xmlrpcString, $xmlrpcInt, $xmlrpcInt));
356
357 $setArticleUnread_sig = array(array($xmlrpcString,
358 $xmlrpcString, $xmlrpcString, $xmlrpcInt, $xmlrpcInt));
359
956c7629
AD
360 $s = new xmlrpc_server(
361 array(
68d3cf5a
AD
362 "rss.setArticleRead" => array("function" => "setArticleRead",
363 "signature" => $setArticleRead_sig),
364 "rss.setArticleMarked" => array("function" => "setArticleMarked",
365 "signature" => $setArticleMarked_sig),
366 "rss.getArticle" => array("function" => "getArticle",
367 "signature" => $getArticle_sig),
368 "rss.getFeedHeadlines" => array("function" => "getFeedHeadlines",
369 "signature" => $getFeedHeadlines_sig),
7fb32341
AD
370 "rss.getSubscribedFeeds" => array("function" => "getSubscribedFeeds",
371 "signature" => $getSubscribedFeeds_sig),
956c7629
AD
372 "rss.subscribeToFeed" => array("function" => "subscribeToFeed",
373 "signature" => $subscribeToFeed_sig))
374 );
375?>