]> git.wh0rd.org Git - tt-rss.git/blob - backend.php
report db error on connect
[tt-rss.git] / backend.php
1 <?
2 //      header("Content-Type: application/xml");
3
4         require_once "config.php";
5         require_once "db.php";
6         require_once "functions.php";
7         require_once "magpierss/rss_fetch.inc";
8
9         $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); 
10
11         if (DB_TYPE == "pgsql") {
12                 pg_query("set client_encoding = 'utf-8'");
13         }
14
15         $op = $_GET["op"];
16         $fetch = $_GET["fetch"];
17
18         function outputFeedList($link) {
19
20                 print "<html><head>
21                         <title>Tiny Tiny RSS : Feedlist</title>
22                         <link rel=\"stylesheet\" href=\"tt-rss.css\" type=\"text/css\">
23                         <script type=\"text/javascript\" src=\"functions.js\"></script>
24                         <script type=\"text/javascript\" src=\"feedlist.js\"></script>
25                         <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">
26                         </head><body>";
27                         
28                 $result = db_query($link, "SELECT *,
29                         (SELECT count(id) FROM ttrss_entries 
30                                 WHERE feed_id = ttrss_feeds.id) AS total,
31                         (SELECT count(id) FROM ttrss_entries
32                                 WHERE feed_id = ttrss_feeds.id AND unread = true) as unread
33                         FROM ttrss_feeds ORDER BY title");                      
34
35                 $actid = $_GET["actid"];
36
37 //              print "<table width=\"100%\" class=\"feedsList\" id=\"feedsList\">";
38
39                 print "<ul class=\"feedList\" id=\"feedList\">";
40
41                 $lnum = 0;
42
43                 $total_unread = 0;
44
45                 while ($line = db_fetch_assoc($result)) {
46                 
47                         $feed = $line["title"];
48                         $feed_id = $line["id"];   
49
50                         $subop = $_GET["subop"];
51                         
52                         $total = $line["total"];
53                         $unread = $line["unread"];
54                         
55 //                      $class = ($lnum % 2) ? "even" : "odd";
56
57                         $class = "odd";
58
59                         if ($unread > 0) $class .= "Unread";
60
61                         if ($actid == $feed_id) {
62                                 $class .= "Selected";
63                         }
64
65                         $total_unread += $unread;
66
67 //                      print "<tr class=\"$class\" id=\"FEEDR-$feed_id\">";
68
69                         $icon_file = ICONS_DIR . "/$feed_id.ico";
70
71                         if ($subop != "piggie") {
72
73                                 if (file_exists($icon_file) && filesize($icon_file) > 0) {
74                                                 $feed_icon = "<img src=\"" . ICONS_URL . "/$feed_id.ico\">";
75                                 } else {
76                                         $feed_icon = "<img src=\"images/blank_icon.png\">";
77                                 }
78                         } else {
79                                 $feed_icon = "<img width=\"16\" height=\"16\"
80                                         src=\"http://madoka.spb.ru/stuff/fox/tiny_piggie.png\">";
81                         }
82                 
83                         $feed = "<a href=\"javascript:viewfeed($feed_id, 0);\">$feed</a>";
84                         
85 /*                      if (ENABLE_FEED_ICONS) {
86                                 print "<td>$feed_icon</td>";
87                         }
88                         
89                         print "<td id=\"FEEDN-$feed_id\">$feed</td>";
90                         print "<td>";
91                         print "<span id=\"FEEDU-$feed_id\">$unread</span>&nbsp;/&nbsp;";
92                         print "<span id=\"FEEDT-$feed_id\">$total</span>";
93                         print "</td>";
94
95                         print "</tr>"; */
96
97                         print "<li id=\"FEEDR-$feed_id\" class=\"$class\">";
98                         if (ENABLE_FEED_ICONS) {
99                                 print "$feed_icon";
100                         }
101                         print "<span id=\"FEEDN-$feed_id\">$feed</span>";
102
103                         if ($unread != 0) {
104                                 $fctr_class = "";
105                         } else {
106                                 $fctr_class = "class=\"invisible\"";
107                         }
108
109                         print "<span $fctr_class id=\"FEEDCTR-$feed_id\">
110                                  (<span id=\"FEEDU-$feed_id\">$unread</span>)</span>";
111                         
112                         print "</li>";
113
114                         ++$lnum;
115                 }
116
117                 print "</table>";
118
119                 print "<div class=\"invisible\" id=\"FEEDTU\">$total_unread</div>";
120                 print "<div class=\"invisible\" id=\"ACTFEEDID\">$actid</div>";
121
122         }
123
124
125         if ($op == "rpc") {
126
127                 $subop = $_GET["subop"];
128
129                 if ($subop == "mark") {
130                         $mark = $_GET["mark"];
131                         $id = db_escape_string($_GET["id"]);
132
133                         if ($mark == "1") {
134                                 $mark = "true";
135                         } else {
136                                 $mark = "false";
137                         }
138
139                         $result = db_query($link, "UPDATE ttrss_entries SET marked = $mark
140                                 WHERE id = '$id'");
141                 }
142
143                 if ($subop == "updateFeed") {
144                         $feed_id = db_escape_string($_GET["feed"]);
145
146                         $result = db_query($link, 
147                                 "SELECT feed_url FROM ttrss_feeds WHERE id = '$feed_id'");
148
149                         if (db_num_rows($result) > 0) {                 
150                                 $feed_url = db_fetch_result($result, 0, "feed_url");
151 //                              update_rss_feed($link, $feed_url, $feed_id);
152                         }
153
154                         print "DONE-$feed_id";
155
156                         return;
157                 }
158
159                 if ($subop == "forceUpdateAllFeeds") {
160                         update_all_feeds($link, true);                  
161                 }
162
163                 if ($subop == "updateAllFeeds") {
164                         update_all_feeds($link, false);
165                 }
166                 
167                 if ($subop == "catchupPage") {
168
169                         $ids = split(",", $_GET["ids"]);
170
171                         foreach ($ids as $id) {
172
173                                 db_query($link, "UPDATE ttrss_entries SET unread=false,last_read = NOW()
174                                         WHERE id = '$id'");
175
176                         }
177
178                         print "Marked active page as read.";
179                 }
180
181         }
182         
183         if ($op == "feeds") {
184
185                 $subop = $_GET["subop"];
186
187                 if ($subop == "catchupAll") {
188                         db_query($link, "UPDATE ttrss_entries SET last_read = NOW(),unread = false");
189                 }
190
191                 outputFeedList($link);
192
193         }
194
195         if ($op == "view") {
196
197                 $id = $_GET["id"];
198
199                 $result = db_query($link, "UPDATE ttrss_entries SET unread = false,last_read = NOW() WHERE id = '$id'");
200
201                 $addheader = $_GET["addheader"];
202
203                 $result = db_query($link, "SELECT title,link,content,feed_id,comments,
204                         (SELECT icon_url FROM ttrss_feeds WHERE id = feed_id) as icon_url 
205                         FROM ttrss_entries
206                         WHERE   id = '$id'");
207
208                 if ($addheader) {
209                         print "<html><head>
210                                 <title>Tiny Tiny RSS : Article $id</title>
211                                 <link rel=\"stylesheet\" href=\"tt-rss.css\" type=\"text/css\">
212                                 <script type=\"text/javascript\" src=\"functions.js\"></script>
213                                 <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">
214                                 </head><body>";
215                 }
216
217                 if ($result) {
218
219                         $line = db_fetch_assoc($result);
220
221                         if ($line["icon_url"]) {
222                                 $feed_icon = "<img class=\"feedIcon\" src=\"" . $line["icon_url"] . "\">";
223                         } else {
224                                 $feed_icon = "&nbsp;";
225                         }
226
227                         if ($line["comments"] && $line["link"] != $line["comments"]) {
228                                 $entry_comments = "(<a href=\"".$line["comments"]."\">Comments</a>)";
229                         } else {
230                                 $entry_comments = "";
231                         }
232
233                         print "<div class=\"postReply\">";
234
235                         print "<div class=\"postHeader\"><table>";
236
237                         print "<tr><td><b>Title:</b></td>
238                                 <td width='100%'>" . $line["title"] . "</td></tr>";
239                                 
240                         print "<tr><td><b>Link:</b></td>
241                                 <td width='100%'>
242                                 <a href=\"" . $line["link"] . "\">".$line["link"]."</a>
243                                 $entry_comments</td></tr>";
244                                         
245                         print "</table></div>";
246
247                         print "<div class=\"postIcon\">" . $feed_icon . "</div>";
248                         print "<div class=\"postContent\">" . $line["content"] . "</div>";
249                         
250                         print "</div>";
251
252                 }
253
254                 if ($addheader) {
255                         print "</body></html>";
256                 }
257         }
258
259         if ($op == "viewfeed") {
260
261                 $feed = $_GET["feed"];
262                 $skip = $_GET["skip"];
263                 $subop = $_GET["subop"];
264                 $view_mode = $_GET["view"];
265                 $addheader = $_GET["addheader"];
266                 $limit = $_GET["limit"];
267
268                 if (!$skip) $skip = 0;
269
270                 if ($subop == "undefined") $subop = "";
271
272                 if ($addheader) {
273                         print "<html><head>
274                                 <title>Tiny Tiny RSS : Feed $feed</title>
275                                 <link rel=\"stylesheet\" href=\"tt-rss.css\" type=\"text/css\">
276                                 <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">
277                                 <script type=\"text/javascript\" src=\"functions.js\"></script>
278                                 <script type=\"text/javascript\" src=\"viewfeed.js\"></script>
279                                 </head><body>";
280                 }
281
282                 if (DB_TYPE == "pgsql") {
283                         $result = db_query($link, 
284                                 "SELECT *,SUBSTRING(last_updated,1,16) as last_updated_s,
285                                 EXTRACT(EPOCH FROM NOW()) - EXTRACT(EPOCH FROM last_updated) as update_timeout
286                                 FROM ttrss_feeds WHERE id = '$feed'");
287                 } else {
288                         $result = db_query($link, 
289                                 "SELECT *,SUBSTRING(last_updated,1,16) as last_updated_s
290                                 FROM ttrss_feeds WHERE id = '$feed'");
291                 }
292
293                 if ($result) {
294
295                         $line = db_fetch_assoc($result);
296
297                         update_rss_feed($link, $line["feed_url"], $feed);
298                                 
299                         if ($subop == "MarkAllRead")  {
300
301                                 db_query($link, "UPDATE ttrss_entries SET unread = false,last_read = NOW() 
302                                         WHERE feed_id = '$feed'");
303                         }
304                 }
305
306                 print "<table class=\"headlinesList\" id=\"headlinesList\" width=\"100%\">";
307
308                 $feed_last_updated = "Updated: " . $line["last_updated"];
309
310                 $search = $_GET["search"];
311
312                 if ($search) {
313                         $search_query_part = "(upper(title) LIKE upper('%$search%') 
314                                 OR content LIKE '%$search%') AND";
315                 } else {
316                         $search_query_part = "";
317                 }
318
319                 $view_query_part = "";
320
321                 if ($view_mode == "Starred") {
322                         $view_query_part = " marked = true AND ";
323                 }
324
325                 if ($view_mode == "Unread") {
326                         $view_query_part = " unread = true AND ";
327                 }
328
329                 $result = db_query($link, "SELECT count(id) AS total_entries 
330                         FROM ttrss_entries WHERE 
331                         $search_query_part
332                         feed_id = '$feed'");
333
334                 $total_entries = db_fetch_result($result, 0, "total_entries");
335
336 /*              $result = db_query("SELECT count(id) AS unread_entries 
337                         FROM ttrss_entries WHERE 
338                         $search_query_part
339                         unread = true AND
340                         feed_id = '$feed'");
341
342                 $unread_entries = db_fetch_result($result, 0, "unread_entries"); */
343
344                 if ($limit != "All") {
345                         $limit_query_part = "LIMIT " . $limit;
346                 } 
347
348                 $result = db_query($link, "SELECT 
349                                 id,title,updated,unread,feed_id,marked,link,last_read
350                         FROM
351                                 ttrss_entries 
352                         WHERE
353                         $search_query_part
354                         $view_query_part
355                         feed_id = '$feed' ORDER BY updated DESC 
356                         $limit_query_part");
357
358                 $lnum = 0;
359                 
360                 $num_unread = 0;
361
362                 while ($line = db_fetch_assoc($result)) {
363
364                         $class = ($lnum % 2) ? "even" : "odd";
365
366                         $id = $line["id"];
367                         $feed_id = $line["feed_id"];
368
369 //                      printf("%d %s - %d %s<br>", strtotime($line["last_read"]), $line["last_read"],
370 //                              strtotime($line["updated"]), $line["updated"]);
371
372                         if (strtotime($line["last_read"]) < strtotime($line["updated"]) && 
373                                 ($line["unread"] == "f" || $line["unread"] == "0")) {
374                                                   
375                                 $update_pic = "<img id='FUPDPIC-$id' src=\"images/updated.png\" 
376                                         alt=\"Updated\">";
377                                 ++$num_unread;
378                         } else {
379                                 $update_pic = "<img id='FUPDPIC-$id' src=\"images/blank_icon.png\" 
380                                         alt=\"Updated\">";
381                         }
382
383                         if ($line["unread"] == "t" || $line["unread"] == "1") {
384                                 $class .= "Unread";
385                                 ++$num_unread;
386                         }
387
388                         if ($line["marked"] == "t" || $line["marked"] == "1") {
389                                 $marked_pic = "<img id=\"FMARKPIC-$id\" src=\"images/mark_set.png\" 
390                                         alt=\"Reset mark\" onclick='javascript:toggleMark($id, false)'>";
391                         } else {
392                                 $marked_pic = "<img id=\"FMARKPIC-$id\" src=\"images/mark_unset.png\" 
393                                         alt=\"Set mark\" onclick='javascript:toggleMark($id, true)'>";
394                         }
395
396                         $content_link = "<a id=\"FTITLE-$id\" href=\"javascript:view($id,$feed_id);\">" .
397                                 $line["title"] . "</a>";
398                                 
399                         print "<tr class='$class' id='RROW-$id'";
400                         // onclick=\"javascript:view($id,$feed_id)\">
401
402                         print "<td valign='center' align='center'
403                                 class='headlineUpdateMark'>$update_pic</td>";
404
405                         print "<td valign='center' align='center'
406                                 class='headlineUpdateMark'>$marked_pic</td>";
407
408                         print "<td class='headlineUpdated' width='25%'>
409                                 <a href=\"javascript:view($id,$feed_id);\">".$line["updated"]."</a></td>";
410                         print "<td width='70%' class='headlineTitle'>$content_link</td>";
411
412                         print "</tr>";
413
414                         ++$lnum;
415                 }
416
417                 if ($lnum == 0) {
418                         print "<tr><td align='center'>No entries found.</td></tr>";
419                 }
420
421                 while ($lnum < HEADLINES_PER_PAGE) {
422                         ++$lnum;
423                         print "<tr><td>&nbsp;</td></tr>";
424                 }
425                 
426                 print "</table>";
427
428                 $result = db_query($link, "SELECT id, (SELECT count(id) FROM ttrss_entries 
429                         WHERE feed_id = ttrss_feeds.id) AS total,
430                 (SELECT count(id) FROM ttrss_entries
431                         WHERE feed_id = ttrss_feeds.id AND unread = true) as unread
432                 FROM ttrss_feeds WHERE id = '$feed'");                  
433
434                 $total = db_fetch_result($result, 0, "total");
435                 $unread = db_fetch_result($result, 0, "unread");
436
437                 // update unread/total counters and status for active feed in the feedlist 
438                 // kludge, because iframe doesn't seem to support onload() 
439                 
440                 print "<script type=\"text/javascript\">
441                         document.onkeydown = hotkey_handler;
442
443                         var p_document = parent.frames['feeds-frame'].document;
444
445                         var feedr = p_document.getElementById(\"FEEDR-\" + $feed);
446                         var feedu = p_document.getElementById(\"FEEDU-\" + $feed);
447
448                         if (feedu) {
449                                 feedu.innerHTML = \"$unread\";
450                         }
451
452                         var feedctr = p_document.getElementById(\"FEEDCTR-\" + $feed);
453
454                         if ($unread > 0 && !feedr.className.match(\"Unread\")) {
455                                         feedr.className = feedr.className + \"Unread\";
456                                         feedctr.className = '';
457                         } else if ($unread <= 0) {      
458                                         feedr.className = feedr.className.replace(\"Unread\", \"\");
459                                         feedctr.className = 'invisible';
460                         }       
461
462 //                      p_notify(\"\");
463
464                 </script>";
465
466                 if ($addheader) {
467                         print "</body></html>";
468                 }
469
470         }
471
472         if ($op == "pref-rpc") {
473
474                 $subop = $_GET["subop"];
475
476                 if ($subop == "unread") {
477                         $ids = split(",", $_GET["ids"]);
478                         foreach ($ids as $id) {
479                                 db_query($link, "UPDATE ttrss_entries SET unread = true WHERE feed_id = '$id'");
480                         }
481
482                         print "Marked selected feeds as read.";
483                 }
484
485                 if ($subop == "read") {
486                         $ids = split(",", $_GET["ids"]);
487                         foreach ($ids as $id) {
488                                 db_query($link, "UPDATE ttrss_entries 
489                                         SET unread = false,last_read = NOW() WHERE feed_id = '$id'");
490                         }
491
492                         print "Marked selected feeds as unread.";
493
494                 }
495
496         }
497
498         if ($op == "pref-feeds") {
499         
500                 $subop = $_GET["subop"];
501
502                 if ($subop == "editSave") {
503                         $feed_title = db_escape_string($_GET["t"]);
504                         $feed_link = db_escape_string($_GET["l"]);
505                         $feed_id = $_GET["id"];
506
507                         $result = db_query($link, "UPDATE ttrss_feeds SET 
508                                 title = '$feed_title', feed_url = '$feed_link' WHERE id = '$feed_id'");                 
509
510                 }
511
512                 if ($subop == "remove") {
513
514                         if (!WEB_DEMO_MODE) {
515
516                                 $ids = split(",", $_GET["ids"]);
517
518                                 foreach ($ids as $id) {
519                                         db_query($link, "BEGIN");
520                                         db_query($link, "DELETE FROM ttrss_entries WHERE feed_id = '$id'");
521                                         db_query($link, "DELETE FROM ttrss_feeds WHERE id = '$id'");
522                                         db_query($link, "COMMIT");
523                                         
524                                         if (file_exists(ICONS_DIR . "/$id.ico")) {
525                                                 unlink(ICONS_DIR . "/$id.ico");
526                                         }
527                                 }
528                         }
529                 }
530
531                 if ($subop == "add") {
532                 
533                         if (!WEB_DEMO_MODE) {
534
535                                 $feed_link = db_escape_string($_GET["link"]);
536                                         
537                                 $result = db_query($link,
538                                         "INSERT INTO ttrss_feeds (feed_url,title) VALUES ('$feed_link', '')");
539
540                                 $result = db_query($link,
541                                         "SELECT id FROM ttrss_feeds WHERE feed_url = '$feed_link'");
542
543                                 $feed_id = db_fetch_result($result, 0, "id");
544
545                                 if ($feed_id) {
546                                         update_rss_feed($link, $feed_link, $feed_id);
547                                 }
548                         }
549                 }
550
551                 print "<table class=\"prefAddFeed\"><tr>
552                         <td><input id=\"fadd_link\"></td>
553                         <td colspan=\"4\" align=\"right\">
554                                 <a class=\"button\" href=\"javascript:addFeed()\">Add feed</a></td></tr>
555                 </table>";
556
557                 $result = db_query($link, "SELECT 
558                                 id,title,feed_url,substring(last_updated,1,16) as last_updated
559                         FROM 
560                                 ttrss_feeds ORDER by title");
561
562                 print "<p><table width=\"100%\" class=\"prefFeedList\" id=\"prefFeedList\">";
563                 print "<tr class=\"title\">
564                                         <td>&nbsp;</td><td>Select</td><td width=\"40%\">Title</td>
565                                         <td width=\"40%\">Link</td><td>Last updated</td></tr>";
566                 
567                 $lnum = 0;
568                 
569                 while ($line = db_fetch_assoc($result)) {
570
571                         $class = ($lnum % 2) ? "even" : "odd";
572
573                         $feed_id = $line["id"];
574
575                         $edit_feed_id = $_GET["id"];
576
577                         if ($subop == "edit" && $feed_id != $edit_feed_id) {
578                                 $class .= "Grayed";
579                         }
580
581                         print "<tr class=\"$class\" id=\"FEEDR-$feed_id\">";
582
583                         $icon_file = ICONS_DIR . "/$feed_id.ico";
584
585                         if (file_exists($icon_file) && filesize($icon_file) > 0) {
586                                         $feed_icon = "<img width=\"16\" height=\"16\"
587                                                 src=\"" . ICONS_URL . "/$feed_id.ico\">";
588                         } else {
589                                 $feed_icon = "&nbsp;";
590                         }
591                         print "<td align='center'>$feed_icon</td>";             
592
593                         if (!$edit_feed_id || $subop != "edit") {
594
595                                 print "<td><input onclick='toggleSelectRow(this);' 
596                                 type=\"checkbox\" id=\"FRCHK-".$line["id"]."\"></td>";
597
598                                 print "<td><a href=\"javascript:editFeed($feed_id);\">" . 
599                                         $line["title"] . "</td>";               
600                                 print "<td><a href=\"javascript:editFeed($feed_id);\">" . 
601                                         $line["feed_url"] . "</td>";            
602                         
603
604                         } else if ($feed_id != $edit_feed_id) {
605
606                                 print "<td><input disabled=\"true\" type=\"checkbox\" 
607                                         id=\"FRCHK-".$line["id"]."\"></td>";
608
609                                 print "<td>".$line["title"]."</td>";            
610                                 print "<td>".$line["feed_url"]."</td>";         
611
612                         } else {
613
614                                 print "<td><input disabled=\"true\" type=\"checkbox\"></td>";
615
616                                 print "<td><input id=\"iedit_title\" value=\"".$line["title"]."\"></td>";
617                                 print "<td><input id=\"iedit_link\" value=\"".$line["feed_url"]."\"></td>";
618                                                 
619                         }
620
621                         if (!$line["last_updated"]) $line["last_updated"] = "Never";
622
623                         print "<td>" . $line["last_updated"] . "</td>";
624                         
625                         print "</tr>";
626
627                         ++$lnum;
628                 }
629
630                 if ($lnum == 0) {
631                         print "<tr><td colspan=\"5\" align=\"center\">No feeds defined.</td></tr>";
632                 }
633
634                 print "</table>";
635
636                 print "<p>";
637
638                 if ($subop == "edit") {
639                         print "Edit feed:&nbsp;
640                                 <input type=\"submit\" class=\"button\" 
641                                         onclick=\"javascript:feedEditCancel()\" value=\"Cancel\">
642                                 <input type=\"submit\" class=\"button\" 
643                                         onclick=\"javascript:feedEditSave()\" value=\"Save\">";
644                         } else {
645
646                         print "
647                                 Selection:&nbsp;
648                         <input type=\"submit\" class=\"button\" 
649                                 onclick=\"javascript:editSelectedFeed()\" value=\"Edit\">
650                         <input type=\"submit\" class=\"button\" 
651                                 onclick=\"javascript:removeSelectedFeeds()\" value=\"Remove\">";
652                                 
653                         if (ENABLE_PREFS_CATCHUP_UNCATCHUP) {
654                                 print "
655                                 <input type=\"submit\" class=\"button\" 
656                                         onclick=\"javascript:readSelectedFeeds()\" value=\"Mark as read\">
657                                 <input type=\"submit\" class=\"button\" 
658                                         onclick=\"javascript:unreadSelectedFeeds()\" value=\"Mark as unread\">&nbsp;";
659                         }
660                         print "
661                         All feeds: 
662                                 <input type=\"submit\" 
663                                         class=\"button\" onclick=\"gotoExportOpml()\" value=\"Export OPML\">";
664                 
665                         }
666
667         }
668
669         if ($op == "pref-filters") {
670
671                 $subop = $_GET["subop"];
672
673                 if ($subop == "editSave") {
674
675                         $regexp = db_escape_string($_GET["r"]);
676                         $descr = db_escape_string($_GET["d"]);
677                         $match = db_escape_string($_GET["m"]);
678                         $filter_id = db_escape_string($_GET["id"]);
679                         
680                         $result = db_query($link, "UPDATE ttrss_filters SET 
681                                 reg_exp = '$regexp', 
682                                 description = '$descr',
683                                 filter_type = (SELECT id FROM ttrss_filter_types WHERE
684                                         description = '$match')
685                                 WHERE id = '$filter_id'");
686                 }
687
688                 if ($subop == "remove") {
689
690                         if (!WEB_DEMO_MODE) {
691
692                                 $ids = split(",", $_GET["ids"]);
693
694                                 foreach ($ids as $id) {
695                                         db_query($link, "DELETE FROM ttrss_filters WHERE id = '$id'");
696                                         
697                                 }
698                         }
699                 }
700
701                 if ($subop == "add") {
702                 
703                         if (!WEB_DEMO_MODE) {
704
705                                 $regexp = db_escape_string($_GET["regexp"]);
706                                 $match = db_escape_string($_GET["match"]);
707                                         
708                                 $result = db_query($link,
709                                         "INSERT INTO ttrss_filters (reg_exp,filter_type) VALUES 
710                                                 ('$regexp', (SELECT id FROM ttrss_filter_types WHERE
711                                                         description = '$match'))");
712                         } 
713                 }
714
715                 $result = db_query($link, "SELECT description 
716                         FROM ttrss_filter_types ORDER BY description");
717
718                 $filter_types = array();
719
720                 while ($line = db_fetch_assoc($result)) {
721                         array_push($filter_types, $line["description"]);
722                 }
723
724                 print "<table class=\"prefAddFeed\"><tr>
725                         <td><input id=\"fadd_regexp\"></td>
726                         <td>";
727                         print_select("fadd_match", "Title", $filter_types);     
728         
729                 print"</td><td colspan=\"4\" align=\"right\">
730                                 <a class=\"button\" href=\"javascript:addFilter()\">Add filter</a></td></tr>
731                 </table>";
732
733                 $result = db_query($link, "SELECT 
734                                 id,reg_exp,description,
735                                 (SELECT name FROM ttrss_filter_types WHERE 
736                                         id = filter_type) as filter_type_name,
737                                 (SELECT description FROM ttrss_filter_types 
738                                         WHERE id = filter_type) as filter_type_descr
739                         FROM 
740                                 ttrss_filters ORDER by reg_exp");
741
742                 print "<p><table width=\"100%\" class=\"prefFilterList\" id=\"prefFilterList\">";
743
744                 print "<tr class=\"title\">
745                                         <td width=\"5%\">Select</td><td width=\"40%\">Filter expression</td>
746                                         <td width=\"40%\">Description</td><td width=\"10%\">Match</td></tr>";
747                 
748                 $lnum = 0;
749                 
750                 while ($line = db_fetch_assoc($result)) {
751
752                         $class = ($lnum % 2) ? "even" : "odd";
753
754                         $filter_id = $line["id"];
755                         $edit_filter_id = $_GET["id"];
756
757                         if ($subop == "edit" && $filter_id != $edit_filter_id) {
758                                 $class .= "Grayed";
759                         }
760
761                         print "<tr class=\"$class\" id=\"FILRR-$filter_id\">";
762
763                         $line["regexp"] = htmlspecialchars($line["reg_exp"]);
764                         $line["description"] = htmlspecialchars($line["description"]);
765
766                         if (!$edit_filter_id || $subop != "edit") {
767
768                                 if (!$line["description"]) $line["description"] = "[No description]";
769
770                                 print "<td><input onclick='toggleSelectRow(this);' 
771                                 type=\"checkbox\" id=\"FICHK-".$line["id"]."\"></td>";
772
773                                 print "<td><a href=\"javascript:editFilter($filter_id);\">" . 
774                                         $line["reg_exp"] . "</td>";             
775                                         
776                                 print "<td><a href=\"javascript:editFilter($filter_id);\">" . 
777                                         $line["description"] . "</td>";                 
778
779                                 print "<td>".$line["filter_type_descr"]."</td>";
780
781                         } else if ($filter_id != $edit_filter_id) {
782
783                                 if (!$line["description"]) $line["description"] = "[No description]";
784
785                                 print "<td><input disabled=\"true\" type=\"checkbox\" 
786                                         id=\"FICHK-".$line["id"]."\"></td>";
787
788                                 print "<td>".$line["reg_exp"]."</td>";          
789                                 print "<td>".$line["description"]."</td>";              
790                                 print "<td>".$line["filter_type_descr"]."</td>";
791
792                         } else {
793
794                                 print "<td><input disabled=\"true\" type=\"checkbox\"></td>";
795
796                                 print "<td><input id=\"iedit_regexp\" value=\"".$line["reg_exp"].
797                                         "\"></td>";
798
799                                 print "<td><input id=\"iedit_descr\" value=\"".$line["description"].
800                                         "\"></td>";
801
802                                 print "<td>";
803                                 print_select("iedit_match", $line["filter_type_descr"], $filter_types);
804                                 print "</td>";
805                                                 
806                         }
807                                 
808                         
809                         print "</tr>";
810
811                         ++$lnum;
812                 }
813
814                 if ($lnum == 0) {
815                         print "<tr><td colspan=\"4\" align=\"center\">No filters defined.</td></tr>";
816                 }
817
818                 print "</table>";
819
820                 print "<p>";
821
822                 if ($subop == "edit") {
823                         print "Edit feed:
824                                 <input type=\"submit\" class=\"button\" 
825                                         onclick=\"javascript:filterEditCancel()\" value=\"Cancel\">
826                                 <input type=\"submit\" class=\"button\" 
827                                         onclick=\"javascript:filterEditSave()\" value=\"Save\">";
828                                         
829                 } else {
830
831                         print "
832                                 Selection:
833                         <input type=\"submit\" class=\"button\" 
834                                 onclick=\"javascript:editSelectedFilter()\" value=\"Edit\">
835                         <input type=\"submit\" class=\"button\" 
836                                 onclick=\"javascript:removeSelectedFilters()\" value=\"Remove\">";
837                 }
838         }
839
840         if ($op == "error") {
841                 print "<div width=\"100%\" align='center'>";
842                 $msg = $_GET["msg"];
843                 print $msg;
844                 print "</div>";
845         }
846
847         db_close($link);
848 ?>