]> git.wh0rd.org Git - tt-rss.git/blob - modules/pref-feeds.php
rework batch feed editor
[tt-rss.git] / modules / pref-feeds.php
1 <?php
2
3         function batch_edit_cbox($elem, $label = false) {
4                 print "<input type=\"checkbox\" title=\"".__("Check to enable field")."\"
5                         onchange=\"dijit.byId('feedEditDlg').toggleField(this, '$elem', '$label')\">";
6         }
7
8         function module_pref_feeds($link) {
9
10                 global $update_intervals;
11                 global $purge_intervals;
12                 global $update_methods;
13
14                 $subop = $_REQUEST["subop"];
15                 $quiet = $_REQUEST["quiet"];
16                 $mode = $_REQUEST["mode"];
17
18                 if ($subop == "renamecat") {
19                         $title = db_escape_string($_REQUEST['title']);
20                         $id = db_escape_string($_REQUEST['id']);
21
22                         if ($title) {
23                                 db_query($link, "UPDATE ttrss_feed_categories SET
24                                         title = '$title' WHERE id = '$id' AND owner_uid = " . $_SESSION["uid"]);
25                         }
26                         return;
27                 }
28
29                 if ($subop == "getfeedtree") {
30
31                         $root = array();
32                         $root['id'] = 'root';
33                         $root['name'] = __('Feeds');
34                         $root['items'] = array();
35                         $root['type'] = 'category';
36
37                         if (get_pref($link, 'ENABLE_FEED_CATS')) {
38
39                                 $result = db_query($link, "SELECT id, title FROM ttrss_feed_categories
40                                         WHERE owner_uid = " . $_SESSION["uid"] . " ORDER BY order_id, title");
41         
42                                 while ($line = db_fetch_assoc($result)) {
43                                         $cat = array();
44                                         $cat['id'] = 'CAT:' . $line['id'];
45                                         $cat['bare_id'] = $feed_id;
46                                         $cat['name'] = $line['title'];
47                                         $cat['items'] = array();
48                                         $cat['type'] = 'category';
49         
50                                         $feed_result = db_query($link, "SELECT id, title, last_error 
51                                                 FROM ttrss_feeds
52                                                 WHERE cat_id = '".$line['id']."' AND owner_uid = ".$_SESSION["uid"].
53                                                 " ORDER BY order_id, title");
54         
55                                         while ($feed_line = db_fetch_assoc($feed_result)) {
56                                                 $feed = array();
57                                                 $feed['id'] = 'FEED:' . $feed_line['id'];
58                                                 $feed['bare_id'] = $feed_line['id'];
59                                                 $feed['name'] = $feed_line['title'];
60                                                 $feed['checkbox'] = false;
61                                                 $feed['error'] = $feed_line['last_error'];
62                                                 $feed['icon'] = getFeedIcon($feed_line['id']);
63
64                                                 array_push($cat['items'], $feed);
65                                         }
66         
67                                         array_push($root['items'], $cat);
68                                 }
69         
70                                 /* Uncategorized is a special case */
71         
72                                 $cat = array();
73                                 $cat['id'] = 'CAT:0';
74                                 $cat['bare_id'] = 0;
75                                 $cat['name'] = __("Uncategorized");
76                                 $cat['items'] = array();
77                                 $cat['type'] = 'category';
78
79                                 $feed_result = db_query($link, "SELECT id, title,last_error 
80                                         FROM ttrss_feeds
81                                         WHERE cat_id IS NULL AND owner_uid = ".$_SESSION["uid"].
82                                         " ORDER BY order_id, title");
83         
84                                 while ($feed_line = db_fetch_assoc($feed_result)) {
85                                         $feed = array();
86                                         $feed['id'] = 'FEED:' . $feed_line['id'];
87                                         $feed['bare_id'] = $feed_line['id'];
88                                         $feed['name'] = $feed_line['title'];
89                                         $feed['checkbox'] = false;
90                                         $feed['error'] = $feed_line['last_error'];
91                                         $feed['icon'] = getFeedIcon($feed_line['id']);
92
93                                         array_push($cat['items'], $feed);
94                                 }
95         
96                                 array_push($root['items'], $cat);
97                         } else {
98                                 $feed_result = db_query($link, "SELECT id, title, last_error 
99                                         FROM ttrss_feeds
100                                         WHERE owner_uid = ".$_SESSION["uid"].
101                                         " ORDER BY order_id, title");
102         
103                                 while ($feed_line = db_fetch_assoc($feed_result)) {
104                                         $feed = array();
105                                         $feed['id'] = 'FEED:' . $feed_line['id'];
106                                         $feed['bare_id'] = $feed_line['id'];
107                                         $feed['name'] = $feed_line['title'];
108                                         $feed['checkbox'] = false;
109                                         $feed['error'] = $feed_line['last_error'];
110                                         $feed['icon'] = getFeedIcon($feed_line['id']);
111
112                                         array_push($root['items'], $feed);
113                                 }
114                         }
115
116                         $fl = array();
117                         $fl['identifier'] = 'id';
118                         $fl['label'] = 'name';
119                         $fl['items'] = array($root);
120
121                         print json_encode($fl);
122                         return;
123                 }
124
125                 if ($subop == "catsortreset") {
126                         db_query($link, "UPDATE ttrss_feed_categories 
127                                         SET order_id = 0 WHERE owner_uid = " . $_SESSION["uid"]);
128                         return;
129                 }       
130
131                 if ($subop == "feedsortreset") {
132                         db_query($link, "UPDATE ttrss_feeds 
133                                         SET order_id = 0 WHERE owner_uid = " . $_SESSION["uid"]);
134                         return;
135                 }       
136
137                 if ($subop == "savefeedorder") {
138 #                       if ($_POST['payload']) {
139 #                               file_put_contents("/tmp/blahblah.txt", $_POST['payload']);
140 #                               $data = json_decode($_POST['payload'], true);   
141 #                       } else {
142 #                               $data = json_decode(file_get_contents("/tmp/blahblah.txt"), true);
143 #                       }
144
145                         $data = json_decode($_POST['payload'], true);
146
147                         if (is_array($data) && is_array($data['items'])) {
148                                 $cat_order_id = 0;
149
150                                 $data_map = array();
151
152                                 foreach ($data['items'] as $item) {
153
154                                         if ($item['id'] != 'root') {
155                                                 if (is_array($item['items'])) {
156                                                         if (isset($item['items']['_reference'])) {
157                                                                 $data_map[$item['id']] = array($item['items']);
158                                                         } else {
159                                                                 $data_map[$item['id']] =& $item['items'];
160                                                         }
161                                                 }
162                                         }
163                                 }
164
165                                 foreach ($data['items'][0]['items'] as $item) {
166                                         $id = $item['_reference'];
167                                         $bare_id = substr($id, strpos($id, ':')+1);
168
169                                         ++$cat_order_id;
170
171                                         if ($bare_id > 0) {
172                                                 db_query($link, "UPDATE ttrss_feed_categories 
173                                                         SET order_id = '$cat_order_id' WHERE id = '$bare_id' AND
174                                                         owner_uid = " . $_SESSION["uid"]);
175                                         }
176
177                                         $feed_order_id = 0;
178
179                                         if (is_array($data_map[$id])) {
180                                                 foreach ($data_map[$id] as $feed) {
181                                                         $id = $feed['_reference'];
182                                                         $feed_id = substr($id, strpos($id, ':')+1);
183
184                                                         if ($bare_id != 0) 
185                                                                 $cat_query = "cat_id = '$bare_id'";
186                                                         else
187                                                                 $cat_query = "cat_id = NULL";
188
189                                                         db_query($link, "UPDATE ttrss_feeds
190                                                                 SET order_id = '$feed_order_id',
191                                                                 $cat_query
192                                                                 WHERE id = '$feed_id' AND
193                                                                         owner_uid = " . $_SESSION["uid"]);
194         
195                                                         ++$feed_order_id;
196                                                 } 
197                                         }
198                                 }
199                         }
200
201                         return;
202                 }
203
204                 if ($subop == "removeicon") {                   
205                         $feed_id = db_escape_string($_REQUEST["feed_id"]);
206
207                         $result = db_query($link, "SELECT id FROM ttrss_feeds
208                                 WHERE id = '$feed_id' AND owner_uid = ". $_SESSION["uid"]);
209
210                         if (db_num_rows($result) != 0) {
211                                 unlink(ICONS_DIR . "/$feed_id.ico");
212                         }
213
214                         return;
215                 }
216
217                 if ($subop == "uploadicon") {
218                         $icon_file = $_FILES['icon_file']['tmp_name'];
219                         $feed_id = db_escape_string($_REQUEST["feed_id"]);
220
221                         if (is_file($icon_file) && $feed_id) {
222                                 if (filesize($icon_file) < 20000) {
223                                         
224                                         $result = db_query($link, "SELECT id FROM ttrss_feeds
225                                                 WHERE id = '$feed_id' AND owner_uid = ". $_SESSION["uid"]);
226
227                                         if (db_num_rows($result) != 0) {
228                                                 unlink(ICONS_DIR . "/$feed_id.ico");
229                                                 move_uploaded_file($icon_file, ICONS_DIR . "/$feed_id.ico");
230                                                 $rc = 0;
231                                         } else {
232                                                 $rc = 2;
233                                         }
234                                 } else {
235                                         $rc = 1;
236                                 }
237                         } else {
238                                 $rc = 2;
239                         }
240
241                         print "<script type=\"text/javascript\">";
242                         print "parent.uploadIconHandler($rc);";
243                         print "</script>";
244                         return;
245                 }
246
247                 if ($subop == "editfeed") {
248
249                         $feed_id = db_escape_string($_REQUEST["id"]);
250
251                         $result = db_query($link, 
252                                 "SELECT * FROM ttrss_feeds WHERE id = '$feed_id' AND
253                                         owner_uid = " . $_SESSION["uid"]);
254
255                         $title = htmlspecialchars(db_fetch_result($result,
256                                 0, "title"));
257
258                         print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"id\" value=\"$feed_id\">";
259                         print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"pref-feeds\">";
260                         print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"subop\" value=\"editSave\">";
261
262                         print "<div class=\"dlgSec\">".__("Feed")."</div>";
263                         print "<div class=\"dlgSecCont\">";
264
265                         /* Title */
266
267                         print "<input dojoType=\"dijit.form.ValidationTextBox\" required=\"1\"
268                                 placeHolder=\"".__("Feed Title")."\"
269                                 style=\"font-size : 16px; width: 20em\" name=\"title\" value=\"$title\">";
270
271                         /* Feed URL */
272
273                         $feed_url = db_fetch_result($result, 0, "feed_url");
274                         $feed_url = htmlspecialchars(db_fetch_result($result,
275                                 0, "feed_url"));
276
277                         print "<br/>";
278
279                         print __('URL:') . " ";
280                         print "<input dojoType=\"dijit.form.ValidationTextBox\" required=\"1\"
281                                 placeHolder=\"".__("Feed URL")."\"
282                                 regExp='^(http|https)://.*' style=\"width : 20em\"
283                                 name=\"feed_url\" value=\"$feed_url\">";
284
285                         /* Category */
286
287                         if (get_pref($link, 'ENABLE_FEED_CATS')) {
288
289                                 $cat_id = db_fetch_result($result, 0, "cat_id");
290
291                                 print "<br/>";
292
293                                 print __('Place in category:') . " ";
294
295                                 print_feed_cat_select($link, "cat_id", $cat_id, 
296                                         'dojoType="dijit.form.Select"');
297                         }
298
299                         print "</div>";
300
301                         print "<div class=\"dlgSec\">".__("Update")."</div>";
302                         print "<div class=\"dlgSecCont\">";
303
304                         /* Update Interval */
305
306                         $update_interval = db_fetch_result($result, 0, "update_interval");
307
308                         print_select_hash("update_interval", $update_interval, $update_intervals, 
309                                 'dojoType="dijit.form.Select"');
310
311                         /* Update method */
312
313                         $update_method = db_fetch_result($result, 0, "update_method", 
314                                 'dojoType="dijit.form.Select"');
315
316                         print " " . __('using') . " ";
317                         print_select_hash("update_method", $update_method, $update_methods,
318                                 'dojoType="dijit.form.Select"');                        
319
320                         $purge_interval = db_fetch_result($result, 0, "purge_interval");
321
322                         if (FORCE_ARTICLE_PURGE == 0) {
323
324                                 /* Purge intl */
325
326                                 print "<br/>";
327
328                                 print __('Article purging:') . " ";
329
330                                 print_select_hash("purge_interval", $purge_interval, $purge_intervals, 
331                                         'dojoType="dijit.form.Select"');
332
333                         } else {
334                                 print "<input type='hidden' name='purge_interval' value='$purge_interval'>";
335
336                         }
337
338                         print "</div>";
339                         print "<div class=\"dlgSec\">".__("Authentication")."</div>";
340                         print "<div class=\"dlgSecCont\">";
341
342                         $auth_login = htmlspecialchars(db_fetch_result($result, 0, "auth_login"));
343
344 #                       print "<table>";
345
346 #                       print "<tr><td>" . __('Login:') . "</td><td>";
347
348                         print "<input dojoType=\"dijit.form.TextBox\" 
349                                 placeHolder=\"".__("Login")."\"
350                                 name=\"auth_login\" value=\"$auth_login\"><br/>";
351
352 #                       print "</tr><tr><td>" . __("Password:") . "</td><td>";
353
354                         $auth_pass = htmlspecialchars(db_fetch_result($result, 0, "auth_pass"));
355
356                         print "<input dojoType=\"dijit.form.TextBox\" type=\"password\" name=\"auth_pass\" 
357                                 placeHolder=\"".__("Password")."\"
358                                 value=\"$auth_pass\">";
359
360 #                       print "</td></tr></table>";
361
362                         print "</div>";
363                         print "<div class=\"dlgSec\">".__("Options")."</div>";
364                         print "<div class=\"dlgSecCont\">";
365
366 #                       print "<div style=\"line-height : 100%\">";
367
368                         $private = sql_bool_to_bool(db_fetch_result($result, 0, "private"));
369
370                         if ($private) {
371                                 $checked = "checked=\"1\"";
372                         } else {
373                                 $checked = "";
374                         }
375
376                         print "<input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" name=\"private\" id=\"private\" 
377                                 $checked>&nbsp;<label for=\"private\">".__('Hide from Popular feeds')."</label>";
378
379                         $rtl_content = sql_bool_to_bool(db_fetch_result($result, 0, "rtl_content"));
380
381                         if ($rtl_content) {
382                                 $checked = "checked=\"1\"";
383                         } else {
384                                 $checked = "";
385                         }
386
387                         print "<br/><input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" id=\"rtl_content\" name=\"rtl_content\"
388                                 $checked>&nbsp;<label for=\"rtl_content\">".__('Right-to-left content')."</label>";
389
390                         $include_in_digest = sql_bool_to_bool(db_fetch_result($result, 0, "include_in_digest"));
391
392                         if ($include_in_digest) {
393                                 $checked = "checked=\"1\"";
394                         } else {
395                                 $checked = "";
396                         }
397
398                         print "<br/><input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" id=\"include_in_digest\" 
399                                 name=\"include_in_digest\"
400                                 $checked>&nbsp;<label for=\"include_in_digest\">".__('Include in e-mail digest')."</label>";
401
402
403                         $always_display_enclosures = sql_bool_to_bool(db_fetch_result($result, 0, "always_display_enclosures"));
404
405                         if ($always_display_enclosures) {
406                                 $checked = "checked";
407                         } else {
408                                 $checked = "";
409                         }
410
411                         print "<br/><input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" id=\"always_display_enclosures\" 
412                                 name=\"always_display_enclosures\"
413                                 $checked>&nbsp;<label for=\"always_display_enclosures\">".__('Always display image attachments')."</label>";
414
415
416                         $cache_images = sql_bool_to_bool(db_fetch_result($result, 0, "cache_images"));
417
418                         if ($cache_images) {
419                                 $checked = "checked=\"1\"";
420                         } else {
421                                 $checked = "";
422                         }
423
424                         print "<br/><input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" id=\"cache_images\" 
425                                 name=\"cache_images\"
426                                 $checked>&nbsp;<label for=\"cache_images\">".
427                                 __('Cache images locally (SimplePie only)')."</label>";
428
429
430 #                       print "</div>";
431                         print "</div>";
432
433                         /* Icon */
434
435                         print "<br/>";
436
437                         print "<div class=\"dlgSec\">".__("Icon")."</div>";
438                         print "<div class=\"dlgSecCont\">";
439
440                         print "<iframe name=\"icon_upload_iframe\"
441                                 style=\"width: 400px; height: 100px; display: none;\"></iframe>";
442
443                         print "<form style='display : block' target=\"icon_upload_iframe\"
444                                 enctype=\"multipart/form-data\" method=\"POST\" 
445                                 action=\"backend.php\">
446                                 <input id=\"icon_file\" size=\"10\" name=\"icon_file\" type=\"file\">
447                                 <input type=\"hidden\" name=\"op\" value=\"pref-feeds\">
448                                 <input type=\"hidden\" name=\"feed_id\" value=\"$feed_id\">
449                                 <input type=\"hidden\" name=\"subop\" value=\"uploadicon\">
450                                 <button dojoType=\"dijit.form.Button\" onclick=\"return uploadFeedIcon();\"
451                                         type=\"submit\">".__('Replace')."</button>
452                                 <button dojoType=\"dijit.form.Button\" onclick=\"return removeFeedIcon($feed_id);\"
453                                         type=\"submit\">".__('Remove')."</button>
454                                 </form>";
455
456                         print "</div>";
457
458                         $title = htmlspecialchars($title, ENT_QUOTES);
459
460                         print "<div class='dlgButtons'>
461                                 <div style=\"float : left\">
462                                 <button dojoType=\"dijit.form.Button\" onclick='return unsubscribeFeed($feed_id, \"$title\")'>".
463                                         __('Unsubscribe')."</button>
464                                 </div>
465                                 <button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('feedEditDlg').execute()\">".__('Save')."</button>
466                                 <button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('feedEditDlg').hide()\">".__('Cancel')."</button>
467                         </div>";
468
469                         return;
470                 }
471
472                 if ($subop == "editfeeds") {
473
474                         $feed_ids = db_escape_string($_REQUEST["ids"]);
475
476                         print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"ids\" value=\"$feed_ids\">";
477                         print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"pref-feeds\">";
478                         print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"subop\" value=\"batchEditSave\">";
479
480                         print "<div class=\"dlgSec\">".__("Feed")."</div>";
481                         print "<div class=\"dlgSecCont\">";
482
483                         /* Title */
484
485                         print "<input dojoType=\"dijit.form.ValidationTextBox\" 
486                                 disabled=\"1\" style=\"font-size : 16px; width : 20em;\" required=\"1\"
487                                 name=\"title\" value=\"$title\">";
488
489                         batch_edit_cbox("title");
490
491                         /* Feed URL */
492
493                         print "<br/>";
494
495                         print __('URL:') . " ";
496                         print "<input dojoType=\"dijit.form.ValidationTextBox\" disabled=\"1\"
497                                 required=\"1\" regExp='^(http|https)://.*' style=\"width : 20em\"
498                                 name=\"feed_url\" value=\"$feed_url\">";
499
500                         batch_edit_cbox("feed_url");
501
502                         /* Category */
503
504                         if (get_pref($link, 'ENABLE_FEED_CATS')) {
505
506                                 print "<br/>";
507
508                                 print __('Place in category:') . " ";
509
510                                 print_feed_cat_select($link, "cat_id", $cat_id, 
511                                         'disabled="1" dojoType="dijit.form.Select"');
512
513                                 batch_edit_cbox("cat_id");
514
515                         }
516
517                         print "</div>";
518
519                         print "<div class=\"dlgSec\">".__("Update")."</div>";
520                         print "<div class=\"dlgSecCont\">";
521
522                         /* Update Interval */
523
524                         print_select_hash("update_interval", $update_interval, $update_intervals, 
525                                 'disabled="1" dojoType="dijit.form.Select"');
526
527                         batch_edit_cbox("update_interval");
528
529                         /* Update method */
530
531                         print " " . __('using') . " ";
532                         print_select_hash("update_method", $update_method, $update_methods, 
533                                 'disabled="1" dojoType="dijit.form.Select"');                   
534                         batch_edit_cbox("update_method");
535
536                         /* Purge intl */
537
538                         if (FORCE_ARTICLE_PURGE == 0) {
539
540                                 print "<br/>";
541
542                                 print __('Article purging:') . " ";
543
544                                 print_select_hash("purge_interval", $purge_interval, $purge_intervals,
545                                         'disabled="1" dojoType="dijit.form.Select"');
546
547                                 batch_edit_cbox("purge_interval");
548                         }
549
550                         print "</div>";
551                         print "<div class=\"dlgSec\">".__("Authentication")."</div>";
552                         print "<div class=\"dlgSecCont\">";
553
554                         print "<input dojoType=\"dijit.form.TextBox\" 
555                                 placeHolder=\"".__("Login")."\" disabled=\"1\"
556                                 name=\"auth_login\" value=\"$auth_login\">";
557
558                         batch_edit_cbox("auth_login");
559
560                         print "<br/><input dojoType=\"dijit.form.TextBox\" type=\"password\" name=\"auth_pass\" 
561                                 placeHolder=\"".__("Password")."\" disabled=\"1\"
562                                 value=\"$auth_pass\">";
563
564                         batch_edit_cbox("auth_pass");
565
566                         print "</div>";
567                         print "<div class=\"dlgSec\">".__("Options")."</div>";
568                         print "<div class=\"dlgSecCont\">";
569
570                         print "<input disabled=\"1\" type=\"checkbox\" name=\"private\" id=\"private\" 
571                                 dojoType=\"dijit.form.CheckBox\">&nbsp;<label id=\"private_l\" class='insensitive' for=\"private\">".__('Hide from Popular feeds')."</label>";
572
573                         print "&nbsp;"; batch_edit_cbox("private", "private_l");
574
575                         print "<br/><input disabled=\"1\" type=\"checkbox\" id=\"rtl_content\" name=\"rtl_content\"
576                                 dojoType=\"dijit.form.CheckBox\">&nbsp;<label class='insensitive' id=\"rtl_content_l\" for=\"rtl_content\">".__('Right-to-left content')."</label>";
577
578                         print "&nbsp;"; batch_edit_cbox("rtl_content", "rtl_content_l");
579
580                         print "<br/><input disabled=\"1\" type=\"checkbox\" id=\"include_in_digest\" 
581                                 name=\"include_in_digest\" 
582                                 dojoType=\"dijit.form.CheckBox\">&nbsp;<label id=\"include_in_digest_l\" class='insensitive' for=\"include_in_digest\">".__('Include in e-mail digest')."</label>";
583
584                         print "&nbsp;"; batch_edit_cbox("include_in_digest", "include_in_digest_l");
585
586                         print "<br/><input disabled=\"1\" type=\"checkbox\" id=\"always_display_enclosures\" 
587                                 name=\"always_display_enclosures\" 
588                                 dojoType=\"dijit.form.CheckBox\">&nbsp;<label id=\"always_display_enclosures_l\" class='insensitive' for=\"always_display_enclosures\">".__('Always display image attachments')."</label>";
589
590                         print "&nbsp;"; batch_edit_cbox("always_display_enclosures", "always_display_enclosures_l");
591
592                         print "<br/><input disabled=\"1\" type=\"checkbox\" id=\"cache_images\" 
593                                 name=\"cache_images\" 
594                                 dojoType=\"dijit.form.CheckBox\">&nbsp;<label class='insensitive' id=\"cache_images_l\" 
595                                         for=\"cache_images\">".
596                                 __('Cache images locally')."</label>";
597
598
599                         print "&nbsp;"; batch_edit_cbox("cache_images", "cache_images_l");
600
601                         print "</div>";
602
603                         print "<div class='dlgButtons'>
604                                 <input type=\"submit\" class=\"button\" 
605                                 onclick=\"return dijit.byId('feedEditDlg').execute()\" 
606                                         value=\"".__('Save')."\">
607                                 <input type='submit' class='button'                     
608                                 onclick=\"return dijit.byId('feedEditDlg').hide()\" 
609                                         value=\"".__('Cancel')."\">
610                                 </div>";
611                 
612                         return;
613                 }
614
615                 if ($subop == "editSave" || $subop == "batchEditSave") {
616
617                         $feed_title = db_escape_string(trim($_POST["title"]));
618                         $feed_link = db_escape_string(trim($_POST["feed_url"]));
619                         $upd_intl = db_escape_string($_POST["update_interval"]);
620                         $purge_intl = db_escape_string($_POST["purge_interval"]);
621                         $feed_id = db_escape_string($_POST["id"]); /* editSave */
622                         $feed_ids = db_escape_string($_POST["ids"]); /* batchEditSave */
623                         $cat_id = db_escape_string($_POST["cat_id"]);
624                         $auth_login = db_escape_string(trim($_POST["auth_login"]));
625                         $auth_pass = db_escape_string(trim($_POST["auth_pass"]));
626                         $private = checkbox_to_sql_bool(db_escape_string($_POST["private"]));
627                         $rtl_content = checkbox_to_sql_bool(db_escape_string($_POST["rtl_content"]));
628                         $include_in_digest = checkbox_to_sql_bool(
629                                 db_escape_string($_POST["include_in_digest"]));
630                         $cache_images = checkbox_to_sql_bool(
631                                 db_escape_string($_POST["cache_images"]));
632                         $update_method = (int) db_escape_string($_POST["update_method"]);
633
634                         $always_display_enclosures = checkbox_to_sql_bool(
635                                 db_escape_string($_POST["always_display_enclosures"]));
636
637                         if (get_pref($link, 'ENABLE_FEED_CATS')) {                      
638                                 if ($cat_id && $cat_id != 0) {
639                                         $category_qpart = "cat_id = '$cat_id',";
640                                         $category_qpart_nocomma = "cat_id = '$cat_id'";
641                                 } else {
642                                         $category_qpart = 'cat_id = NULL,';
643                                         $category_qpart_nocomma = 'cat_id = NULL';
644                                 }
645                         } else {
646                                 $category_qpart = "";
647                                 $category_qpart_nocomma = "";
648                         }
649
650                         if (SIMPLEPIE_CACHE_IMAGES) {
651                                 $cache_images_qpart = "cache_images = $cache_images,";
652                         } else {
653                                 $cache_images_qpart = "";
654                         }
655
656                         if ($subop == "editSave") {
657
658                                 $result = db_query($link, "UPDATE ttrss_feeds SET 
659                                         $category_qpart
660                                         title = '$feed_title', feed_url = '$feed_link',
661                                         update_interval = '$upd_intl',
662                                         purge_interval = '$purge_intl',
663                                         auth_login = '$auth_login',
664                                         auth_pass = '$auth_pass',
665                                         private = $private,
666                                         rtl_content = $rtl_content,
667                                         $cache_images_qpart
668                                         include_in_digest = $include_in_digest,
669                                         always_display_enclosures = $always_display_enclosures,
670                                         update_method = '$update_method'
671                                         WHERE id = '$feed_id' AND owner_uid = " . $_SESSION["uid"]);
672
673                         } else if ($subop == "batchEditSave") {
674                                 $feed_data = array();
675
676                                 foreach (array_keys($_POST) as $k) {
677                                         if ($k != "op" && $k != "subop" && $k != "ids") {
678                                                 $feed_data[$k] = $_POST[$k];
679                                         }
680                                 }
681
682                                 db_query($link, "BEGIN");
683
684                                 foreach (array_keys($feed_data) as $k) {
685
686                                         $qpart = "";
687
688                                         switch ($k) {
689                                                 case "title":                                                   
690                                                         $qpart = "title = '$feed_title'";
691                                                         break;
692
693                                                 case "feed_url":
694                                                         $qpart = "feed_url = '$feed_link'";
695                                                         break;
696
697                                                 case "update_interval":
698                                                         $qpart = "update_interval = '$upd_intl'";
699                                                         break;
700
701                                                 case "purge_interval":
702                                                         $qpart = "purge_interval = '$purge_intl'";
703                                                         break;
704
705                                                 case "auth_login":
706                                                         $qpart = "auth_login = '$auth_login'";
707                                                         break;
708
709                                                 case "auth_pass":
710                                                         $qpart = "auth_pass = '$auth_pass'";
711                                                         break;
712
713                                                 case "private":
714                                                         $qpart = "private = '$private'";
715                                                         break;
716
717                                                 case "include_in_digest":
718                                                         $qpart = "include_in_digest = '$include_in_digest'";
719                                                         break;
720
721                                                 case "always_display_enclosures":
722                                                         $qpart = "always_display_enclosures = '$always_display_enclosures'";
723                                                         break;
724
725                                                 case "cache_images":
726                                                         $qpart = "cache_images = '$cache_images'";
727                                                         break;
728
729                                                 case "rtl_content":
730                                                         $qpart = "rtl_content = '$rtl_content'";
731                                                         break;
732
733                                                 case "update_method":
734                                                         $qpart = "update_method = '$update_method'";
735                                                         break;
736
737                                                 case "cat_id":
738                                                         $qpart = $category_qpart_nocomma;
739                                                         break;
740
741                                         }
742
743                                         if ($qpart) {
744                                                 db_query($link,
745                                                         "UPDATE ttrss_feeds SET $qpart WHERE id IN ($feed_ids)
746                                                         AND owner_uid = " . $_SESSION["uid"]);
747                                                 print "<br/>";
748                                         }
749                                 }
750
751                                 db_query($link, "COMMIT");
752                         }
753                         return;
754                 }
755
756                 if ($subop == "remove") {
757
758                         $ids = split(",", db_escape_string($_REQUEST["ids"]));
759
760                         foreach ($ids as $id) {
761                                 remove_feed($link, $id, $_SESSION["uid"]);
762                         }
763
764                         return;
765                 }
766
767                 if ($subop == "clear") {
768                         $id = db_escape_string($_REQUEST["id"]);
769                         clear_feed_articles($link, $id);
770                 }
771
772                 if ($subop == "rescore") {
773                         $ids = split(",", db_escape_string($_REQUEST["ids"]));
774
775                         foreach ($ids as $id) {
776
777                                 $filters = load_filters($link, $id, $_SESSION["uid"], 6);
778
779                                 $result = db_query($link, "SELECT 
780                                         title, content, link, ref_id, author,".
781                                         SUBSTRING_FOR_DATE."(updated, 1, 19) AS updated
782                                         FROM
783                                                 ttrss_user_entries, ttrss_entries 
784                                                 WHERE ref_id = id AND feed_id = '$id' AND 
785                                                         owner_uid = " .$_SESSION['uid']."
786                                                 ");
787
788                                 $scores = array();
789
790                                 while ($line = db_fetch_assoc($result)) {
791
792                                         $tags = get_article_tags($link, $line["ref_id"]);
793
794                                         $article_filters = get_article_filters($filters, $line['title'], 
795                                                 $line['content'], $line['link'], strtotime($line['updated']), 
796                                                 $line['author'], $tags);
797                                         
798                                         $new_score = calculate_article_score($article_filters);
799
800                                         if (!$scores[$new_score]) $scores[$new_score] = array();
801
802                                         array_push($scores[$new_score], $line['ref_id']);
803                                 }
804
805                                 foreach (array_keys($scores) as $s) {
806                                         if ($s > 1000) {
807                                                 db_query($link, "UPDATE ttrss_user_entries SET score = '$s', 
808                                                         marked = true WHERE
809                                                         ref_id IN (" . join(',', $scores[$s]) . ")");
810                                         } else if ($s < -500) {
811                                                 db_query($link, "UPDATE ttrss_user_entries SET score = '$s', 
812                                                         unread = false WHERE
813                                                         ref_id IN (" . join(',', $scores[$s]) . ")");
814                                         } else {
815                                                 db_query($link, "UPDATE ttrss_user_entries SET score = '$s' WHERE
816                                                         ref_id IN (" . join(',', $scores[$s]) . ")");
817                                         }
818                                 }
819                         }
820
821                         print __("All done.");
822
823                 }
824
825                 if ($subop == "rescoreAll") {
826
827                         $result = db_query($link, 
828                                 "SELECT id FROM ttrss_feeds WHERE owner_uid = " . $_SESSION['uid']);
829
830                         while ($feed_line = db_fetch_assoc($result)) {
831
832                                 $id = $feed_line["id"];
833
834                                 $filters = load_filters($link, $id, $_SESSION["uid"], 6);
835
836                                 $tmp_result = db_query($link, "SELECT 
837                                         title, content, link, ref_id, author,".
838                                                 SUBSTRING_FOR_DATE."(updated, 1, 19) AS updated
839                                                 FROM
840                                                 ttrss_user_entries, ttrss_entries 
841                                                 WHERE ref_id = id AND feed_id = '$id' AND 
842                                                         owner_uid = " .$_SESSION['uid']."
843                                                 ");
844
845                                 $scores = array();
846
847                                 while ($line = db_fetch_assoc($tmp_result)) {
848
849                                         $tags = get_article_tags($link, $line["ref_id"]);
850
851                                         $article_filters = get_article_filters($filters, $line['title'], 
852                                                 $line['content'], $line['link'], strtotime($line['updated']), 
853                                                 $line['author'], $tags);
854
855                                         $new_score = calculate_article_score($article_filters);
856
857                                         if (!$scores[$new_score]) $scores[$new_score] = array();
858
859                                         array_push($scores[$new_score], $line['ref_id']);
860                                 }
861
862                                 foreach (array_keys($scores) as $s) {
863                                         if ($s > 1000) {
864                                                 db_query($link, "UPDATE ttrss_user_entries SET score = '$s', 
865                                                         marked = true WHERE
866                                                         ref_id IN (" . join(',', $scores[$s]) . ")");
867                                         } else {
868                                                 db_query($link, "UPDATE ttrss_user_entries SET score = '$s' WHERE
869                                                         ref_id IN (" . join(',', $scores[$s]) . ")");
870                                         }
871                                 }
872                         }
873
874                         print __("All done.");
875
876                 }
877
878                 if ($subop == "add") {
879
880                         $feed_url = db_escape_string(trim($_REQUEST["feed_url"]));
881                         $cat_id = db_escape_string($_REQUEST["cat_id"]);
882                         $p_from = db_escape_string($_REQUEST["from"]);
883
884                         /* only read authentication information from POST */
885
886                         $auth_login = db_escape_string(trim($_POST["auth_login"]));
887                         $auth_pass = db_escape_string(trim($_POST["auth_pass"]));
888
889                         if ($p_from != 'tt-rss') {
890                                 print "<html>
891                                         <head>
892                                                 <title>Tiny Tiny RSS</title>
893                                                 <link rel=\"stylesheet\" type=\"text/css\" href=\"utility.css\">
894                                         </head>
895                                         <body>
896                                         <img class=\"floatingLogo\" src=\"images/ttrss_logo.png\"
897                                                 alt=\"Tiny Tiny RSS\"/> 
898                                         <h1>Subscribe to feed...</h1>";
899                         }
900
901                         $rc = subscribe_to_feed($link, $feed_url, $cat_id, $auth_login, $auth_pass);
902
903                         switch ($rc) {
904                         case 1: 
905                                 print_notice(T_sprintf("Subscribed to <b>%s</b>.", $feed_url));
906                                 break;
907                         case 2:
908                                 print_error(T_sprintf("Could not subscribe to <b>%s</b>.", $feed_url));
909                                 break;
910                         case 0:
911                                 print_warning(T_sprintf("Already subscribed to <b>%s</b>.", $feed_url));
912                                 break;
913                         }
914
915                         if ($p_from != 'tt-rss') {
916                                 $tt_uri = ($_SERVER['HTTPS'] != "on" ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . preg_replace('/backend\.php.*$/', 'tt-rss.php', $_SERVER["REQUEST_URI"]);
917
918
919                                 $tp_uri = ($_SERVER['HTTPS'] != "on" ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . preg_replace('/backend\.php.*$/', 'prefs.php', $_SERVER["REQUEST_URI"]);
920
921                                 $result = db_query($link, "SELECT id FROM ttrss_feeds WHERE
922                                         feed_url = '$feed_url' AND owner_uid = " . $_SESSION["uid"]);
923
924                                 $feed_id = db_fetch_result($result, 0, "id");
925
926                                 print "<p>";
927
928                                 if ($feed_id) {
929                                         print "<form method=\"GET\" style='display: inline' 
930                                                 action=\"$tp_uri\">
931                                                 <input type=\"hidden\" name=\"tab\" value=\"feedConfig\">
932                                                 <input type=\"hidden\" name=\"subop\" value=\"editFeed\">
933                                                 <input type=\"hidden\" name=\"subopparam\" value=\"$feed_id\">
934                                                 <input type=\"submit\" value=\"".__("Edit subscription options")."\">
935                                                 </form>";
936                                 }
937
938                                 print "<form style='display: inline' method=\"GET\" action=\"$tt_uri\">
939                                         <input type=\"submit\" value=\"".__("Return to Tiny Tiny RSS")."\">
940                                         </form></p>";
941
942                                 print "</body></html>";
943                                 return;
944                         }
945                 }
946
947                 if ($subop == "categorize") {
948
949
950                         $ids = split(",", db_escape_string($_REQUEST["ids"]));
951
952                         $cat_id = db_escape_string($_REQUEST["cat_id"]);
953
954                         if ($cat_id == 0) {
955                                 $cat_id_qpart = 'NULL';
956                         } else {
957                                 $cat_id_qpart = "'$cat_id'";
958                         }
959
960                         db_query($link, "BEGIN");
961
962                         foreach ($ids as $id) {
963                         
964                                 db_query($link, "UPDATE ttrss_feeds SET cat_id = $cat_id_qpart
965                                         WHERE id = '$id'
966                                         AND owner_uid = " . $_SESSION["uid"]);
967
968                         }
969
970                         db_query($link, "COMMIT");
971
972                 }
973
974                 if ($subop == "editCats") {
975
976                         $action = $_REQUEST["action"];
977
978                         if ($action == "save") {
979
980                                 $cat_title = db_escape_string(trim($_REQUEST["value"]));
981                                 $cat_id = db_escape_string($_REQUEST["cid"]);
982
983                                 db_query($link, "BEGIN");
984
985                                 $result = db_query($link, "SELECT title FROM ttrss_feed_categories
986                                         WHERE id = '$cat_id' AND owner_uid = ".$_SESSION["uid"]);
987
988                                 if (db_num_rows($result) == 1) {
989
990                                         $old_title = db_fetch_result($result, 0, "title");
991                                         
992                                         if ($cat_title != "") {
993                                                 $result = db_query($link, "UPDATE ttrss_feed_categories SET
994                                                         title = '$cat_title' WHERE id = '$cat_id' AND 
995                                                         owner_uid = ".$_SESSION["uid"]);
996
997                                                 print $cat_title;
998                                         } else {
999                                                 print $old_title;
1000                                         }
1001                                 } else {
1002                                         print $_REQUEST["value"];
1003                                 }
1004
1005                                 db_query($link, "COMMIT");
1006
1007                                 return;
1008
1009                         }
1010
1011                         if ($action == "add") {
1012
1013                                 $feed_cat = db_escape_string(trim($_REQUEST["cat"]));
1014
1015                                 if (!add_feed_category($link, $feed_cat))
1016                                         print_warning(T_sprintf("Category <b>$%s</b> already exists in the database.", $feed_cat));
1017
1018                         }
1019
1020                         if ($action == "remove") {
1021         
1022                                 $ids = split(",", db_escape_string($_REQUEST["ids"]));
1023         
1024                                 foreach ($ids as $id) {
1025                                         remove_feed_category($link, $id, $_SESSION["uid"]);
1026                                 }
1027                         }
1028
1029                         print "<div dojoType=\"dijit.Toolbar\">
1030                                 <input dojoType=\"dijit.form.ValidationTextBox\" required=\"1\" name=\"newcat\">
1031                                         <button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('feedCatEditDlg').addCategory()\">".
1032                                                 __('Create category')."</button></div>";
1033         
1034                         $result = db_query($link, "SELECT title,id FROM ttrss_feed_categories
1035                                 WHERE owner_uid = ".$_SESSION["uid"]."
1036                                 ORDER BY title");
1037
1038 #                       print "<p>";
1039
1040                         if (db_num_rows($result) != 0) {
1041
1042                                 print "<div class=\"prefFeedCatHolder\">";
1043
1044 #                               print "<form id=\"feed_cat_edit_form\" onsubmit=\"return false\">";
1045
1046                                 print "<table width=\"100%\" class=\"prefFeedCatList\" 
1047                                         cellspacing=\"0\" id=\"prefFeedCatList\">";
1048                                                 
1049                                 $lnum = 0;
1050                                 
1051                                 while ($line = db_fetch_assoc($result)) {
1052                 
1053                                         $class = ($lnum % 2) ? "even" : "odd";
1054                 
1055                                         $cat_id = $line["id"];
1056                                         $this_row_id = "id=\"FCATR-$cat_id\"";
1057                 
1058                                         print "<tr class=\"\" $this_row_id>";
1059                 
1060                                         $edit_title = htmlspecialchars($line["title"]);
1061                 
1062                                         print "<td width='5%' align='center'><input 
1063                                                 onclick='toggleSelectRow2(this);' dojoType=\"dijit.form.CheckBox\" 
1064                                                 type=\"checkbox\" id=\"FCCHK-$cat_id\"></td>";
1065         
1066                                         print "<td>";
1067                                         
1068 #                                       print "<span id=\"FCATT-$cat_id\">" . 
1069 #                                               $edit_title . "</span>";                
1070
1071                                         print "<span dojoType=\"dijit.InlineEditBox\" 
1072                                                 width=\"300px\" autoSave=\"false\"
1073                                                 cat-id=\"$cat_id\">" . $edit_title . 
1074                                                 "<script type=\"dojo/method\" event=\"onChange\" args=\"item\">
1075                                                         var elem = this;
1076                                                         dojo.xhrPost({
1077                                                                 url: 'backend.php',
1078                                                                 content: {op: 'pref-feeds', subop: 'editCats',
1079                                                                         action: 'save',
1080                                                                         value: this.value,
1081                                                                         cid: this.srcNodeRef.getAttribute('cat-id')},
1082                                                                         load: function(response) {
1083                                                                                 elem.attr('value', response);
1084                                                                                 updateFeedList();
1085                                                                 }
1086                                                         });     
1087                                                 </script>
1088                                         </span>";
1089
1090                                         print "</td></tr>";
1091                 
1092                                         ++$lnum;
1093                                 }
1094         
1095                                 print "</table>";
1096
1097 #                               print "</form>";
1098
1099                                 print "</div>";
1100
1101                         } else {
1102                                 print "<p>".__('No feed categories defined.')."</p>";
1103                         }
1104
1105                         print "<div class='dlgButtons'>
1106                                 <div style='float : left'>
1107                                 <button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('feedCatEditDlg').removeSelected()\">".
1108                                 __('Remove selected categories')."</button>
1109                                 </div>";
1110
1111                         print "<button dojoType=\"dijit.form.Button\" onclick=\"dijit.byId('feedCatEditDlg').hide()\">".
1112                                 __('Close this window')."</button></div>";
1113
1114                         return;
1115
1116                 }
1117
1118                 if ($quiet) return;
1119
1120                 print "<div dojoType=\"dijit.layout.AccordionContainer\" region=\"center\">";
1121                 print "<div id=\"pref-feeds-feeds\" dojoType=\"dijit.layout.AccordionPane\" title=\"".__('Feeds')."\">";
1122
1123                 $result = db_query($link, "SELECT COUNT(id) AS num_errors
1124                         FROM ttrss_feeds WHERE last_error != '' AND owner_uid = ".$_SESSION["uid"]);
1125
1126                 $num_errors = db_fetch_result($result, 0, "num_errors");
1127
1128                 if ($num_errors > 0) {
1129
1130                         $error_button = "<button dojoType=\"dijit.form.Button\"
1131                                         onclick=\"showFeedsWithErrors\" id=\"errorButton\">" .
1132                                 __("Feeds with errors") . "</button>";
1133
1134 //                      print format_notice("<a href=\"javascript:showFeedsWithErrors()\">".
1135 //                              __('Some feeds have update errors (click for details)')."</a>");
1136                 }
1137
1138                 $feed_search = db_escape_string($_REQUEST["search"]);
1139
1140                 if (array_key_exists("search", $_REQUEST)) {
1141                         $_SESSION["prefs_feed_search"] = $feed_search;
1142                 } else {
1143                         $feed_search = $_SESSION["prefs_feed_search"];
1144                 }
1145
1146                 print "<div dojoType=\"dijit.Toolbar\">";
1147
1148                 /* 
1149                 print "<div style='float : right'> 
1150                         <input id=\"feed_search\" size=\"20\" type=\"search\"
1151                                 onfocus=\"disableHotkeys();\" 
1152                                 onblur=\"enableHotkeys();\"
1153                                 onchange=\"updateFeedList()\" value=\"$feed_search\">
1154                         <button onclick=\"updateFeedList()\">".
1155                                 __('Search')."</button>
1156                                 </div>"; */
1157
1158                 print "<div dojoType=\"dijit.form.DropDownButton\">".
1159                                 "<span>" . __('Select')."</span>";
1160                 print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
1161                 print "<div onclick=\"dijit.byId('feedTree').model.setAllChecked(true)\" 
1162                         dojoType=\"dijit.MenuItem\">".__('All')."</div>";
1163                 print "<div onclick=\"dijit.byId('feedTree').model.setAllChecked(false)\" 
1164                         dojoType=\"dijit.MenuItem\">".__('None')."</div>";
1165                 print "</div></div>";
1166
1167                 print "<div dojoType=\"dijit.form.DropDownButton\">".
1168                                 "<span>" . __('Feeds')."</span>";
1169                 print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
1170                 print "<div onclick=\"quickAddFeed()\" 
1171                         dojoType=\"dijit.MenuItem\">".__('Subscribe to feed')."</div>";
1172                 print "<div onclick=\"editSelectedFeed()\" 
1173                         dojoType=\"dijit.MenuItem\">".__('Edit selected feeds')."</div>";
1174                 print "<div onclick=\"resetFeedOrder()\" 
1175                         dojoType=\"dijit.MenuItem\">".__('Reset sort order')."</div>";
1176                 print "</div></div>";
1177
1178                 if (get_pref($link, 'ENABLE_FEED_CATS')) {
1179                         print "<div dojoType=\"dijit.form.DropDownButton\">".
1180                                         "<span>" . __('Categories')."</span>";
1181                         print "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
1182                         print "<div onclick=\"editFeedCats()\" 
1183                                 dojoType=\"dijit.MenuItem\">".__('Edit categories')."</div>";
1184                         print "<div onclick=\"resetCatOrder()\" 
1185                                 dojoType=\"dijit.MenuItem\">".__('Reset sort order')."</div>";
1186                         print "</div></div>";
1187
1188                 }
1189
1190                 print $error_button;
1191
1192                 print "<button dojoType=\"dijit.form.Button\" onclick=\"removeSelectedFeeds()\">"
1193                         .__('Unsubscribe')."</button dojoType=\"dijit.form.Button\"> ";
1194
1195                 if (defined('_ENABLE_FEED_DEBUGGING')) {
1196
1197                         print "<select id=\"feedActionChooser\" onchange=\"feedActionChange()\">
1198                                 <option value=\"facDefault\" selected>".__('More actions...')."</option>";
1199         
1200                         if (FORCE_ARTICLE_PURGE == 0) {
1201                                 print 
1202                                         "<option value=\"facPurge\">".__('Manual purge')."</option>";
1203                         }
1204         
1205                         print "
1206                                 <option value=\"facClear\">".__('Clear feed data')."</option>
1207                                 <option value=\"facRescore\">".__('Rescore articles')."</option>";
1208         
1209                         print "</select>";
1210
1211                 }
1212
1213                 print "</div>"; # toolbar
1214
1215                 print "<div id=\"feedlistLoading\">
1216                 <img src='images/indicator_tiny.gif'>".
1217                  __("Loading, please wait...")."</div>";
1218
1219                 print "<div dojoType=\"fox.PrefFeedStore\" jsId=\"feedStore\" 
1220                         url=\"backend.php?op=pref-feeds&subop=getfeedtree\">
1221                 </div>
1222                 <div dojoType=\"lib.CheckBoxStoreModel\" jsId=\"feedModel\" store=\"feedStore\"
1223                 query=\"{id:'root'}\" rootId=\"root\" rootLabel=\"Feeds\"
1224                         childrenAttrs=\"items\" checkboxStrict=\"false\" checkboxAll=\"false\">
1225                 </div>
1226                 <div dojoType=\"fox.PrefFeedTree\" id=\"feedTree\" 
1227                         dndController=\"dijit.tree.dndSource\" 
1228                         betweenThreshold=\"5\"
1229                         model=\"feedModel\" openOnClick=\"false\">
1230                 <script type=\"dojo/method\" event=\"onClick\" args=\"item\">
1231                         var id = String(item.id);
1232                         var bare_id = id.substr(id.indexOf(':')+1);
1233
1234                         if (id.match('FEED:')) {
1235                                 editFeed(bare_id, event);
1236                         } else if (id.match('CAT:')) {
1237                                 editCat(bare_id, item, event);
1238                         }                       
1239                 </script>
1240                 <script type=\"dojo/method\" event=\"onLoad\" args=\"item\">
1241                         Element.hide(\"feedlistLoading\");
1242                 </script>
1243                 </div>";
1244
1245                 print "<div dojoType=\"dijit.Tooltip\" connectId=\"feedTree\" position=\"below\">
1246                         <b>Hint:</b> you can drag feeds and categories around.
1247                         </div>";
1248
1249                 print "</div>"; # feeds pane
1250
1251                 print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"".__('OPML')."\">";
1252
1253                 print "<p>" . __("Using OPML you can export and import your feeds and Tiny Tiny RSS settings.");
1254
1255                 print "<div class=\"insensitive\">" . __("Note: Only main settings profile can be migrated using OPML.") . "</div>";
1256
1257                 print "</p>";
1258
1259                 print "<iframe name=\"upload_iframe\"
1260                         style=\"width: 400px; height: 100px; display: none;\"></iframe>";
1261
1262                 print "<div style='float : left'>";
1263                 print "<form style='display : block' target=\"upload_iframe\"
1264                         enctype=\"multipart/form-data\" method=\"POST\" 
1265                                 action=\"backend.php\">
1266                         <input id=\"opml_file\" name=\"opml_file\" type=\"file\">&nbsp;
1267                         <input type=\"hidden\" name=\"op\" value=\"dlg\">
1268                         <input type=\"hidden\" name=\"id\" value=\"importOpml\">
1269                         <button onclick=\"return opmlImport();\"
1270                                 type=\"submit\">".__('Import')."</button>
1271                         </form>";
1272                 print "</div>&nbsp;";
1273
1274                 print "<button onclick=\"gotoExportOpml()\">".__('Export OPML')."</button>";
1275
1276                 print "<p>".__('Your OPML can be published publicly and can be subscribed by anyone who knows the URL below.');
1277
1278                 print "<div class=\"insensitive\">" . __("Note: Published OPML does not include your Tiny Tiny RSS settings, feeds that require authentication or feeds hidden from Popular feeds.") .                  "</div>" . "</p>";
1279
1280                 print "<button onclick=\"return displayDlg('pubOPMLUrl')\">".
1281                         __('Display URL')."</button> ";
1282
1283
1284                 print "</div>"; # pane
1285
1286                 if (strpos($_SERVER['HTTP_USER_AGENT'], "Firefox") !== false) {
1287
1288                         print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"".__('Firefox integration')."\">";
1289                 
1290                         print "<p>" . __('This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the link below.') . "</p>";
1291
1292                         print "<p>";
1293
1294                         print "<button onclick='window.navigator.registerContentHandler(" .
1295                       "\"application/vnd.mozilla.maybe.feed\", " .
1296                       "\"" . add_feed_url() . "\", " . " \"Tiny Tiny RSS\")'>" .
1297                                                          __('Click here to register this site as a feed reader.') . 
1298                                 "</button>";
1299
1300                         print "</p>";
1301
1302                         print "</div>"; # pane
1303                 }
1304
1305                 print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"".__('Subscribing using bookmarklet')."\">";
1306                 
1307                 print "<p>" . __("Drag the link below to your browser toolbar, open the feed you're interested in in your browser and click on the link to subscribe to it.") . "</p>";
1308
1309                 $bm_subscribe_url = str_replace('%s', '', add_feed_url());
1310
1311                 $confirm_str = __('Subscribe to %s in Tiny Tiny RSS?');
1312
1313                 $bm_url = htmlspecialchars("javascript:{if(confirm('$confirm_str'.replace('%s',window.location.href)))window.location.href='$bm_subscribe_url'+window.location.href}");
1314
1315                 print "<a href=\"$bm_url\" class='visibleLink'>" . __('Subscribe in Tiny Tiny RSS'). "</a>";
1316
1317                 print "</div>"; #pane
1318
1319                 print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"".__('Published articles and generated feeds')."\">";
1320
1321                 print "<p>".__('Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the URL specified below.')."</p>";
1322
1323                 $rss_url = '-2::' . htmlspecialchars(get_self_url_prefix() . 
1324                                 "/backend.php?op=rss&id=-2&view-mode=all_articles");;
1325
1326                 print "<button onclick=\"return displayDlg('generatedFeed', '$rss_url')\">".
1327                         __('Display URL')."</button> ";
1328                
1329                 print "<button onclick=\"return clearFeedAccessKeys()\">".
1330                         __('Clear all generated URLs')."</button> ";
1331
1332                 print "</div>"; #pane
1333                 print "</div>"; #container
1334
1335         }
1336
1337         function print_feed_browser($link, $search, $limit, $mode = 1) {
1338
1339                         $owner_uid = $_SESSION["uid"];
1340
1341                         if ($search) {
1342                                 $search_qpart = "AND (UPPER(feed_url) LIKE UPPER('%$search%') OR 
1343                                         UPPER(title) LIKE UPPER('%$search%'))";
1344                         } else {
1345                                 $search_qpart = "";
1346                         }
1347
1348                         if ($mode == 1) {
1349                                 $result = db_query($link, "SELECT feed_url, subscribers FROM
1350                                         ttrss_feedbrowser_cache WHERE (SELECT COUNT(id) = 0 FROM ttrss_feeds AS tf
1351                                         WHERE tf.feed_url = ttrss_feedbrowser_cache.feed_url
1352                                         AND owner_uid = '$owner_uid') $search_qpart 
1353                                         ORDER BY subscribers DESC LIMIT $limit");
1354                         } else if ($mode == 2) {
1355                                 $result = db_query($link, "SELECT *,
1356                                         (SELECT COUNT(*) FROM ttrss_user_entries WHERE
1357                                                 orig_feed_id = ttrss_archived_feeds.id) AS articles_archived
1358                                         FROM
1359                                                 ttrss_archived_feeds
1360                                         WHERE 
1361                                         (SELECT COUNT(*) FROM ttrss_feeds 
1362                                                 WHERE ttrss_feeds.feed_url = ttrss_archived_feeds.feed_url AND
1363                                                         owner_uid = '$owner_uid') = 0   AND                                     
1364                                         owner_uid = '$owner_uid' $search_qpart 
1365                                         ORDER BY id DESC LIMIT $limit");
1366                         }
1367
1368                         $feedctr = 0;
1369                         
1370                         while ($line = db_fetch_assoc($result)) {
1371
1372                                 if ($mode == 1) {
1373
1374                                         $feed_url = $line["feed_url"];
1375                                         $subscribers = $line["subscribers"];
1376
1377                                         $det_result = db_query($link, "SELECT site_url,title,id 
1378                                                 FROM ttrss_feeds WHERE feed_url = '$feed_url' LIMIT 1");
1379         
1380                                         $details = db_fetch_assoc($det_result);
1381                                 
1382                                         $icon_file = ICONS_DIR . "/" . $details["id"] . ".ico";
1383         
1384                                         if (file_exists($icon_file) && filesize($icon_file) > 0) {
1385                                                         $feed_icon = "<img style=\"vertical-align : middle\" class=\"tinyFeedIcon\"     src=\"" . ICONS_URL . 
1386                                                                 "/".$details["id"].".ico\">";
1387                                         } else {
1388                                                 $feed_icon = "<img class=\"tinyFeedIcon\" src=\"images/blank_icon.gif\">";
1389                                         }
1390         
1391                                         $check_box = "<input onclick='toggleSelectListRow2(this)' 
1392                                                 dojoType=\"dijit.form.CheckBox\"
1393                                                 type=\"checkbox\" \">";
1394         
1395                                         $class = ($feedctr % 2) ? "even" : "odd";
1396         
1397                                         $feed_url = htmlspecialchars($line["feed_url"]);
1398
1399                                         if ($details["site_url"]) {
1400                                                 $site_url = "<a target=\"_blank\" href=\"".
1401                                                         htmlspecialchars($details["site_url"])."\">
1402                                                         <img style='border-width : 0px' src='images/www.png' alt='www'></a>";
1403                                         } else {
1404                                                 $site_url = "";
1405                                         }
1406
1407                                         $feed_url = "<a target=\"_blank\" href=\"$feed_url\"><img 
1408                                                 style='border-width : 0px; vertical-align : middle' 
1409                                                 src='images/feed-icon-12x12.png'></a>";
1410
1411                                         print "<li title=\"".htmlspecialchars($details["site_url"])."\" 
1412                                                 id=\"FBROW-".$details["id"]."\">$check_box".
1413                                                 "$feed_icon $feed_url " . htmlspecialchars($details["title"]) . 
1414                                                 "&nbsp;<span class='subscribers'>($subscribers)</span>
1415                                                 $site_url</li>";
1416         
1417                                 } else if ($mode == 2) {
1418                                         $feed_url = htmlspecialchars($line["feed_url"]);
1419                                         $site_url = htmlspecialchars($line["site_url"]); 
1420                                         $title = htmlspecialchars($line["title"]);
1421
1422                                         $icon_file = ICONS_DIR . "/" . $line["id"] . ".ico";
1423         
1424                                         if (file_exists($icon_file) && filesize($icon_file) > 0) {
1425                                                         $feed_icon = "<img class=\"tinyFeedIcon\"       src=\"" . ICONS_URL . 
1426                                                                 "/".$line["id"].".ico\">";
1427                                         } else {
1428                                                 $feed_icon = "<img class=\"tinyFeedIcon\" src=\"images/blank_icon.gif\">";
1429                                         }
1430
1431                                         $check_box = "<input onclick='toggleSelectListRow2(this)' dojoType=\"dijit.form.CheckBox\"
1432                                                 type=\"checkbox\">";
1433         
1434                                         $class = ($feedctr % 2) ? "even" : "odd";
1435
1436                                         if ($line['articles_archived'] > 0) {
1437                                                 $archived = sprintf(__("%d archived articles"), $line['articles_archived']);
1438                                                 $archived = "&nbsp;<span class='subscribers'>($archived)</span>";
1439                                         } else {
1440                                                 $archived = '';
1441                                         }
1442
1443                                         if ($line["site_url"]) {
1444                                                 $site_url = "<a target=\"_blank\" href=\"$site_url\">
1445                                                         <img style='border-width : 0px' src='images/www.png' alt='www'></a>";
1446                                         } else {
1447                                                 $site_url = "";
1448                                         }
1449
1450                                         $feed_url = "<a target=\"_blank\" href=\"$feed_url\"><img 
1451                                                 style='border-width : 0px; vertical-align : middle' 
1452                                                 src='images/feed-icon-12x12.png'></a>";
1453
1454                                         print "<li title='".$line['site_url']."' class='$class' 
1455                                                 id=\"FBROW-".$line["id"]."\">".
1456                                                 $check_box . "$feed_icon $feed_url " . $title . 
1457                                                 $archived . $site_url . "</li>";
1458
1459
1460                                 }
1461
1462                                 ++$feedctr;
1463                         }
1464
1465                         if ($feedctr == 0) {
1466                                 print "<li style=\"text-align : center\"><p>".__('No feeds found.')."</p></li>";
1467                         }
1468
1469                 return $feedctr;
1470
1471         }
1472
1473 ?>