]>
git.wh0rd.org - tt-rss.git/blob - modules/pref-feeds.php
3 function module_pref_feeds ( $link ) {
5 global $update_intervals ;
6 global $purge_intervals ;
8 $subop = $_REQUEST [ "subop" ];
9 $quiet = $_REQUEST [ "quiet" ];
11 if ( $subop == "massSubscribe" ) {
12 $ids = split ( "," , db_escape_string ( $_GET [ "ids" ]));
14 $subscribed = array ();
16 foreach ( $ids as $id ) {
17 $result = db_query ( $link , "SELECT feed_url,title FROM ttrss_feeds
20 $feed_url = db_escape_string ( db_fetch_result ( $result , 0 , "feed_url" ));
21 $title = db_escape_string ( db_fetch_result ( $result , 0 , "title" ));
23 $title_orig = db_fetch_result ( $result , 0 , "title" );
25 $result = db_query ( $link , "SELECT id FROM ttrss_feeds WHERE
26 feed_url = ' $feed_url ' AND owner_uid = " . $_SESSION [ "uid" ]);
28 if ( db_num_rows ( $result ) == 0 ) {
29 $result = db_query ( $link ,
30 "INSERT INTO ttrss_feeds (owner_uid,feed_url,title,cat_id)
31 VALUES ('" . $_SESSION [ "uid" ]. "', ' $feed_url ', ' $title ', NULL)" );
33 array_push ( $subscribed , $title_orig );
37 if ( count ( $subscribed ) > 0 ) {
38 $msg = "<b>" . __ ( 'Subscribed to feeds:' ). "</b>" .
39 "<ul class= \" nomarks \" >" ;
41 foreach ( $subscribed as $title ) {
42 $msg .= "<li> $title </li>" ;
46 print format_notice ( $msg );
50 if ( $subop == "browse" ) {
52 if (! ENABLE_FEED_BROWSER
) {
53 print __ ( "Feed browser is administratively disabled." );
57 print "<div id= \" infoBoxTitle \" >" . __ ( 'Other feeds: Top 25' ). "</div>" ;
59 print "<div class= \" infoBoxContents \" >" ;
61 print "<p>" . __ ( "Showing top 25 registered feeds, sorted by popularity:" ). "</p>" ;
63 # $result = db_query($link, "SELECT feed_url,count(id) AS subscribers
65 # WHERE auth_login = '' AND auth_pass = '' AND private = false
66 # GROUP BY feed_url ORDER BY subscribers DESC LIMIT 25");
68 $owner_uid = $_SESSION [ "uid" ];
70 $result = db_query ( $link , "SELECT feed_url,COUNT(id) AS subscribers
71 FROM ttrss_feeds WHERE (SELECT COUNT(id) = 0 FROM ttrss_feeds AS tf
72 WHERE tf.feed_url = ttrss_feeds.feed_url
73 AND owner_uid = ' $owner_uid ') GROUP BY feed_url
74 ORDER BY subscribers DESC LIMIT 25" );
76 print "<ul class='browseFeedList' id='browseFeedList'>" ;
80 while ( $line = db_fetch_assoc ( $result )) {
81 $feed_url = $line [ "feed_url" ];
82 $subscribers = $line [ "subscribers" ];
84 $det_result = db_query ( $link , "SELECT site_url,title,id
85 FROM ttrss_feeds WHERE feed_url = ' $feed_url ' LIMIT 1" );
87 $details = db_fetch_assoc ( $det_result );
89 $icon_file = ICONS_DIR
. "/" . $details [ "id" ] . ".ico" ;
91 if ( file_exists ( $icon_file ) && filesize ( $icon_file ) > 0 ) {
92 $feed_icon = "<img class= \" tinyFeedIcon \" src= \" " . ICONS_URL
.
93 "/" . $details [ "id" ]. ".ico \" >" ;
95 $feed_icon = "<img class= \" tinyFeedIcon \" src= \" images/blank_icon.gif \" >" ;
98 $check_box = "<input onclick='toggleSelectListRow(this)' class='feedBrowseCB'
99 type= \" checkbox \" id= \" FBCHK-" . $details [ "id" ] . " \" >" ;
101 $class = ( $feedctr %
2 ) ?
"even" : "odd" ;
103 print "<li class=' $class ' id= \" FBROW-" . $details [ "id" ]. " \" > $check_box " .
104 " $feed_icon " . $details [ "title" ] .
105 " <span class='subscribers'>( $subscribers )</span></li>" ;
111 print "<li>" . __ ( 'No feeds found to subscribe.' ). "</li>" ;
116 print "<div align='center'>
117 <input type= \" submit \" class= \" button \"
118 onclick= \" feedBrowserSubscribe() \" value= \" " . __ ( 'Subscribe' ). " \" >
119 <input type='submit' class='button'
120 onclick= \" closeInfoBox() \" value= \" " . __ ( 'Cancel' ). " \" ></div>" ;
126 if ( $subop == "editfeed" ) {
127 $feed_id = db_escape_string ( $_REQUEST [ "id" ]);
129 $result = db_query ( $link ,
130 "SELECT * FROM ttrss_feeds WHERE id = ' $feed_id ' AND
131 owner_uid = " . $_SESSION [ "uid" ]);
133 $title = htmlspecialchars ( db_fetch_result ( $result ,
136 $icon_file = ICONS_DIR
. "/ $feed_id .ico" ;
138 if ( file_exists ( $icon_file ) && filesize ( $icon_file ) > 0 ) {
139 $feed_icon = "<img width= \" 16 \" height= \" 16 \"
140 src= \" " . ICONS_URL
. "/ $feed_id .ico \" >" ;
145 print "<div id= \" infoBoxTitle \" >" . __ ( 'Feed editor' ). "</div>" ;
147 print "<div class= \" infoBoxContents \" >" ;
149 print "<form id= \" edit_feed_form \" onsubmit= \" return false \" >" ;
151 print "<input type= \" hidden \" name= \" id \" value= \" $feed_id\" >" ;
152 print "<input type= \" hidden \" name= \" op \" value= \" pref-feeds \" >" ;
153 print "<input type= \" hidden \" name= \" subop \" value= \" editSave \" >" ;
155 print "<table width='100%'>" ;
157 print "<tr><td>" . __ ( 'Title:' ). "</td>" ;
158 print "<td><input class= \" iedit \" onkeypress= \" return filterCR(event, feedEditSave) \"
159 name= \" title \" value= \" $title\" ></td></tr>" ;
161 $feed_url = db_fetch_result ( $result , 0 , "feed_url" );
162 $feed_url = htmlspecialchars ( db_fetch_result ( $result ,
165 print "<tr><td>" . __ ( 'Feed URL:' ). "</td>" ;
166 print "<td><input class= \" iedit \" onkeypress= \" return filterCR(event, feedEditSave) \"
167 name= \" feed_url \" value= \" $feed_url\" ></td></tr>" ;
169 if ( get_pref ( $link , 'ENABLE_FEED_CATS' )) {
171 $cat_id = db_fetch_result ( $result , 0 , "cat_id" );
173 print "<tr><td>" . __ ( 'Category:' ). "</td>" ;
176 $parent_feed = db_fetch_result ( $result , 0 , "parent_feed" );
178 if ( sprintf ( " %d " , $parent_feed ) > 0 ) {
179 $disabled = "disabled" ;
184 print_feed_cat_select ( $link , "cat_id" , $cat_id , "class= \" iedit \" $disabled " );
191 $update_interval = db_fetch_result ( $result , 0 , "update_interval" );
193 print "<tr><td>" . __ ( 'Update Interval:' ). "</td>" ;
197 print_select_hash ( "update_interval" , $update_interval , $update_intervals ,
202 print "<tr><td>" . __ ( 'Link to:' ). "</td><td>" ;
204 $tmp_result = db_query ( $link , "SELECT COUNT(id) AS count
205 FROM ttrss_feeds WHERE parent_feed = ' $feed_id '" );
207 $linked_count = db_fetch_result ( $tmp_result , 0 , "count" );
209 $parent_feed = db_fetch_result ( $result , 0 , "parent_feed" );
211 if ( $linked_count > 0 ) {
212 $disabled = "disabled" ;
217 print "<select class= \" iedit \" $disabled name= \" parent_feed \" >" ;
219 print "<option value= \" 0 \" >" . __ ( 'Not linked' ). "</option>" ;
221 if ( get_pref ( $link , 'ENABLE_FEED_CATS' )) {
223 $cat_qpart = "AND cat_id = ' $cat_id '" ;
225 $cat_qpart = "AND cat_id IS NULL" ;
229 $tmp_result = db_query ( $link , "SELECT id,title FROM ttrss_feeds
230 WHERE id != ' $feed_id ' AND owner_uid = " . $_SESSION [ "uid" ]. " AND
231 (SELECT COUNT(id) FROM ttrss_feeds AS T2 WHERE T2.id = ttrss_feeds.parent_feed) = 0
232 $cat_qpart ORDER BY title" );
234 if ( db_num_rows ( $tmp_result ) > 0 ) {
235 print "<option disabled>--------</option>" ;
238 while ( $tmp_line = db_fetch_assoc ( $tmp_result )) {
239 if ( $tmp_line [ "id" ] == $parent_feed ) {
240 $is_selected = "selected" ;
244 printf ( "<option $is_selected value=' %d '> %s </option>" ,
245 $tmp_line [ "id" ], $tmp_line [ "title" ]);
251 $purge_interval = db_fetch_result ( $result , 0 , "purge_interval" );
253 print "<tr><td>" . __ ( 'Article purging:' ). "</td>" ;
257 print_select_hash ( "purge_interval" , $purge_interval , $purge_intervals ,
262 $auth_login = htmlspecialchars ( db_fetch_result ( $result , 0 , "auth_login" ));
264 print "<tr><td>" . __ ( 'Login:' ). "</td>" ;
265 print "<td><input class= \" iedit \" onkeypress= \" return filterCR(event, feedEditSave) \"
266 name= \" auth_login \" value= \" $auth_login\" ></td></tr>" ;
268 $auth_pass = htmlspecialchars ( db_fetch_result ( $result , 0 , "auth_pass" ));
270 print "<tr><td>" . __ ( 'Password:' ). "</td>" ;
271 print "<td><input class= \" iedit \" type= \" password \" name= \" auth_pass \"
272 onkeypress= \" return filterCR(event, feedEditSave) \"
273 value= \" $auth_pass\" ></td></tr>" ;
275 $private = sql_bool_to_bool ( db_fetch_result ( $result , 0 , "private" ));
278 $checked = "checked" ;
283 print "<tr><td valign='top'>" . __ ( 'Options:' ). "</td>" ;
284 print "<td><input type= \" checkbox \" name= \" private \" id= \" private \"
285 $checked ><label for= \" private \" >" . __ ( 'Hide from "Other Feeds"' ). "</label>" ;
287 $rtl_content = sql_bool_to_bool ( db_fetch_result ( $result , 0 , "rtl_content" ));
290 $checked = "checked" ;
295 print "<br><input type= \" checkbox \" id= \" rtl_content \" name= \" rtl_content \"
296 $checked ><label for= \" rtl_content \" >" . __ ( 'Right-to-left content' ). "</label>" ;
298 $hidden = sql_bool_to_bool ( db_fetch_result ( $result , 0 , "hidden" ));
301 $checked = "checked" ;
306 print "<br><input type= \" checkbox \" id= \" hidden \" name= \" hidden \"
307 $checked ><label for= \" hidden \" >" . __ ( 'Hide from my feed list' ). "</label>" ;
309 $include_in_digest = sql_bool_to_bool ( db_fetch_result ( $result , 0 , "include_in_digest" ));
311 if ( $include_in_digest ) {
312 $checked = "checked" ;
317 print "<br><input type= \" checkbox \" id= \" include_in_digest \"
318 name= \" include_in_digest \"
319 $checked ><label for= \" include_in_digest \" >" . __ ( 'Include in e-mail digest' ). "</label>" ;
321 $cache_images = sql_bool_to_bool ( db_fetch_result ( $result , 0 , "cache_images" ));
324 $checked = "checked" ;
329 if ( ENABLE_SIMPLEPIE
&& SIMPLEPIE_CACHE_IMAGES
) {
333 $disabled = "disabled" ;
334 $label_class = "class='insensitive'" ;
337 print "<br><input type= \" checkbox \" id= \" cache_images \"
338 name= \" cache_images \" $disabled
339 $checked ><label $label_class for= \" cache_images \" >" .
340 __ ( 'Cache images locally' ). "</label>" ;
348 print "<div align='right'>
349 <input type= \" submit \" class= \" button \"
350 onclick= \" return feedEditSave() \" value= \" " . __ ( 'Save' ). " \" >
351 <input type='submit' class='button'
352 onclick= \" return feedEditCancel() \" value= \" " . __ ( 'Cancel' ). " \" ></div>" ;
359 if ( $subop == "editSave" ) {
361 $feed_title = db_escape_string ( trim ( $_POST [ "title" ]));
362 $feed_link = db_escape_string ( trim ( $_POST [ "feed_url" ]));
363 $upd_intl = db_escape_string ( $_POST [ "update_interval" ]);
364 $purge_intl = db_escape_string ( $_POST [ "purge_interval" ]);
365 $feed_id = db_escape_string ( $_POST [ "id" ]);
366 $cat_id = db_escape_string ( $_POST [ "cat_id" ]);
367 $auth_login = db_escape_string ( trim ( $_POST [ "auth_login" ]));
368 $auth_pass = db_escape_string ( trim ( $_POST [ "auth_pass" ]));
369 $parent_feed = db_escape_string ( $_POST [ "parent_feed" ]);
370 $private = checkbox_to_sql_bool ( db_escape_string ( $_POST [ "private" ]));
371 $rtl_content = checkbox_to_sql_bool ( db_escape_string ( $_POST [ "rtl_content" ]));
372 $hidden = checkbox_to_sql_bool ( db_escape_string ( $_POST [ "hidden" ]));
373 $include_in_digest = checkbox_to_sql_bool (
374 db_escape_string ( $_POST [ "include_in_digest" ]));
375 $cache_images = checkbox_to_sql_bool (
376 db_escape_string ( $_POST [ "cache_images" ]));
378 if ( get_pref ( $link , 'ENABLE_FEED_CATS' )) {
379 if ( $cat_id && $cat_id != 0 ) {
380 $category_qpart = "cat_id = ' $cat_id '," ;
381 $category_qpart_nocomma = "cat_id = ' $cat_id '" ;
383 $category_qpart = 'cat_id = NULL,' ;
384 $category_qpart_nocomma = 'cat_id = NULL' ;
387 $category_qpart = "" ;
388 $category_qpart_nocomma = "" ;
391 if ( $parent_feed && $parent_feed != 0 ) {
392 $parent_qpart = "parent_feed = ' $parent_feed '" ;
394 $parent_qpart = 'parent_feed = NULL' ;
397 if ( ENABLE_SIMPLEPIE
&& SIMPLEPIE_CACHE_IMAGES
) {
398 $cache_images_qpart = "cache_images = $cache_images ," ;
400 $cache_images_qpart = "" ;
403 $result = db_query ( $link , "UPDATE ttrss_feeds SET
404 $category_qpart $parent_qpart ,
405 title = ' $feed_title ', feed_url = ' $feed_link ',
406 update_interval = ' $upd_intl ',
407 purge_interval = ' $purge_intl ',
408 auth_login = ' $auth_login ',
409 auth_pass = ' $auth_pass ',
411 rtl_content = $rtl_content ,
414 include_in_digest = $include_in_digest
415 WHERE id = ' $feed_id ' AND owner_uid = " . $_SESSION [ "uid" ]);
417 if ( get_pref ( $link , 'ENABLE_FEED_CATS' )) {
418 # update linked feed categories
419 $result = db_query ( $link , "UPDATE ttrss_feeds SET
420 $category_qpart_nocomma WHERE parent_feed = ' $feed_id ' AND
421 owner_uid = " . $_SESSION [ "uid" ]);
425 if ( $subop == "remove" ) {
427 if (! WEB_DEMO_MODE
) {
429 $ids = split ( "," , db_escape_string ( $_GET [ "ids" ]));
431 foreach ( $ids as $id ) {
435 db_query ( $link , "DELETE FROM ttrss_feeds
436 WHERE id = ' $id ' AND owner_uid = " . $_SESSION [ "uid" ]);
438 $icons_dir = ICONS_DIR
;
440 if ( file_exists ( $icons_dir . "/ $id .ico" )) {
441 unlink ( $icons_dir . "/ $id .ico" );
443 } else if ( $id < - 10 ) {
445 $label_id = - $id - 11 ;
447 db_query ( $link , "DELETE FROM ttrss_labels
448 WHERE id = ' $label_id ' AND owner_uid = " . $_SESSION [ "uid" ]);
454 if ( $subop == "clear" ) {
455 $id = db_escape_string ( $_GET [ "id" ]);
456 clear_feed_articles ( $link , $id );
459 if ( $subop == "add" ) {
461 if (! WEB_DEMO_MODE
) {
463 $feed_url = db_escape_string ( trim ( $_REQUEST [ "feed_url" ]));
464 $cat_id = db_escape_string ( $_REQUEST [ "cat_id" ]);
465 $p_from = db_escape_string ( $_REQUEST [ "from" ]);
467 /* only read authentication information from POST */
469 $auth_login = db_escape_string ( trim ( $_POST [ "auth_login" ]));
470 $auth_pass = db_escape_string ( trim ( $_POST [ "auth_pass" ]));
472 if ( $p_from != 'tt-rss' ) {
475 <title>Tiny Tiny RSS - Subscribe to feed...</title>
476 <link rel= \" stylesheet \" type= \" text/css \" href= \" quicksub.css \" >
479 <img class= \" logo \" src= \" images/ttrss_logo.png \"
480 alt= \" Tiny Tiny RSS \" />
481 <h1>Subscribe to feed...</h1>
482 <div class= \" content \" >" ;
485 if ( subscribe_to_feed ( $link , $feed_url , $cat_id , $auth_login , $auth_pass )) {
486 print_notice ( T_sprintf ( "Subscribed to <b> %s </b>." , $feed_url ));
488 print_warning ( T_sprintf ( "Already subscribed to <b> %s </b>." , $feed_url ));
491 if ( $p_from != 'tt-rss' ) {
492 $tt_uri = 'http://' . $_SERVER [ 'SERVER_NAME' ] .
493 preg_replace ( '/backend\.php.*$/' ,
494 'tt-rss.php' , $_SERVER [ "REQUEST_URI" ]);
496 $tp_uri = 'http://' . $_SERVER [ 'SERVER_NAME' ] .
497 preg_replace ( '/backend\.php.*$/' ,
498 'prefs.php' , $_SERVER [ "REQUEST_URI" ]);
500 print "<p><a href=' $tt_uri '>Return to Tiny Tiny RSS</a> |" ;
502 $result = db_query ( $link , "SELECT id FROM ttrss_feeds WHERE
503 feed_url = ' $feed_url ' AND owner_uid = " . $_SESSION [ "uid" ]);
505 $feed_id = db_fetch_result ( $result , 0 , "id" );
508 print "<a href=' $tp_uri ?tab=feedConfig&subop=editFeed: $feed_id '>
509 Edit subscription options</a> | " ;
512 print "<a href='javascript:window.close()'>Close this window</a>.</p>" ;
514 print "</div></body></html>" ;
521 if ( $subop == "categorize" ) {
523 if (! WEB_DEMO_MODE
) {
525 $ids = split ( "," , db_escape_string ( $_GET [ "ids" ]));
527 $cat_id = db_escape_string ( $_GET [ "cat_id" ]);
530 $cat_id_qpart = 'NULL' ;
532 $cat_id_qpart = "' $cat_id '" ;
535 db_query ( $link , "BEGIN" );
537 foreach ( $ids as $id ) {
539 db_query ( $link , "UPDATE ttrss_feeds SET cat_id = $cat_id_qpart
540 WHERE id = ' $id ' AND parent_feed IS NULL
541 AND owner_uid = " . $_SESSION [ "uid" ]);
543 # update linked feed categories
544 db_query ( $link , "UPDATE ttrss_feeds SET
545 cat_id = $cat_id_qpart WHERE parent_feed = ' $id ' AND
546 owner_uid = " . $_SESSION [ "uid" ]);
550 db_query ( $link , "COMMIT" );
555 if ( $subop == "editCats" ) {
557 $action = $_REQUEST [ "action" ];
559 if ( $action == "save" ) {
561 $cat_title = db_escape_string ( trim ( $_REQUEST [ "value" ]));
562 $cat_id = db_escape_string ( $_GET [ "cid" ]);
564 $result = db_query ( $link , "UPDATE ttrss_feed_categories SET
565 title = ' $cat_title ' WHERE id = ' $cat_id ' AND owner_uid = " . $_SESSION [ "uid" ]);
567 print $_REQUEST [ "value" ];
573 print "<div id= \" infoBoxTitle \" >" . __ ( 'Category editor' ). "</div>" ;
575 print "<div class= \" infoBoxContents \" >" ;
578 if ( $action == "add" ) {
580 if (! WEB_DEMO_MODE
) {
582 $feed_cat = db_escape_string ( trim ( $_GET [ "cat" ]));
584 $result = db_query ( $link ,
585 "SELECT id FROM ttrss_feed_categories
586 WHERE title = ' $feed_cat ' AND owner_uid = " . $_SESSION [ "uid" ]);
588 if ( db_num_rows ( $result ) == 0 ) {
590 $result = db_query ( $link ,
591 "INSERT INTO ttrss_feed_categories (owner_uid,title)
592 VALUES ('" . $_SESSION [ "uid" ]. "', ' $feed_cat ')" );
596 print_warning ( T_sprintf ( "Category <b>$ %s </b> already exists in the database." ,
603 if ( $action == "remove" ) {
605 if (! WEB_DEMO_MODE
) {
607 $ids = split ( "," , db_escape_string ( $_GET [ "ids" ]));
609 foreach ( $ids as $id ) {
611 db_query ( $link , "BEGIN" );
613 $result = db_query ( $link ,
614 "SELECT count(id) as num_feeds FROM ttrss_feeds
615 WHERE cat_id = ' $id '" );
617 $num_feeds = db_fetch_result ( $result , 0 , "num_feeds" );
619 if ( $num_feeds == 0 ) {
620 db_query ( $link , "DELETE FROM ttrss_feed_categories
621 WHERE id = ' $id ' AND owner_uid = " . $_SESSION [ "uid" ]);
624 print format_warning ( __ ( "Unable to delete non empty feed categories." ));
628 db_query ( $link , "COMMIT" );
633 print "<div class= \" prefGenericAddBox \" >
634 <input id= \" fadd_cat \"
635 onkeypress= \" return filterCR(event, addFeedCat) \"
636 onkeyup= \" toggleSubmitNotEmpty(this, 'catadd_submit_btn') \"
637 onchange= \" toggleSubmitNotEmpty(this, 'catadd_submit_btn') \"
640 type= \" submit \" class= \" button \" disabled= \" true \" id= \" catadd_submit_btn \"
641 onclick= \" javascript:addFeedCat() \" value= \" " . __ ( 'Create category' ). " \" ></div>" ;
643 $result = db_query ( $link , "SELECT title,id FROM ttrss_feed_categories
644 WHERE owner_uid = " . $_SESSION [ "uid" ]. "
649 if ( db_num_rows ( $result ) != 0 ) {
651 print "<table width= \" 100% \" class= \" prefFeedCatList \"
654 print "<tr><td class= \" selectPrompt \" colspan= \" 8 \" >
656 <a href= \" javascript:selectPrefRows('fcat', true) \" >" . __ ( 'All' ). "</a>,
657 <a href= \" javascript:selectPrefRows('fcat', false) \" >" . __ ( 'None' ). "</a>
662 print "<div class= \" prefFeedCatHolder \" >" ;
664 print "<form id= \" feed_cat_edit_form \" onsubmit= \" return false \" >" ;
666 print "<table width= \" 100% \" class= \" prefFeedCatList \"
667 cellspacing= \" 0 \" id= \" prefFeedCatList \" >" ;
671 while ( $line = db_fetch_assoc ( $result )) {
673 $class = ( $lnum %
2 ) ?
"even" : "odd" ;
675 $cat_id = $line [ "id" ];
676 $this_row_id = "id= \" FCATR- $cat_id\" " ;
678 print "<tr class= \" $class\" $this_row_id >" ;
680 $edit_title = htmlspecialchars ( $line [ "title" ]);
682 print "<td width='5%' align='center'><input
683 onclick='toggleSelectPrefRow(this, \" fcat \" );'
684 type= \" checkbox \" id= \" FCCHK- $cat_id\" ></td>" ;
686 print "<td><span id= \" FCATT- $cat_id\" >" .
687 $edit_title . "</span></td>" ;
701 print "<p>" . __ ( 'No feed categories defined.' ). "</p>" ;
704 print "<div style='float : right'>
705 <input type='submit' class='button'
706 onclick= \" selectTab('feedConfig') \" value= \" " . __ ( 'Close this window' ). " \" ></div>" ;
708 print "<div id= \" catOpToolbar \" >" ;
711 <input type= \" submit \" class= \" button \" disabled= \" true \"
712 onclick= \" return removeSelectedFeedCats() \" value= \" " . __ ( 'Remove' ). " \" >" ;
724 set_pref ( $link , "_PREFS_ACTIVE_TAB" , "feedConfig" );
726 $result = db_query ( $link , "SELECT COUNT(id) AS num_errors
727 FROM ttrss_feeds WHERE last_error != '' AND owner_uid = " . $_SESSION [ "uid" ]);
729 $num_errors = db_fetch_result ( $result , 0 , "num_errors" );
731 if ( $num_errors > 0 ) {
733 print format_notice ( "<a href= \" javascript:showFeedsWithErrors() \" >" .
734 __ ( 'Some feeds have update errors (click for details)' ). "</a>" );
737 $feed_search = db_escape_string ( $_GET [ "search" ]);
739 if ( array_key_exists ( "search" , $_GET )) {
740 $_SESSION [ "prefs_feed_search" ] = $feed_search ;
742 $feed_search = $_SESSION [ "prefs_feed_search" ];
745 print "<div class= \" feedEditSearch \" >
746 <input id= \" feed_search \" size= \" 20 \" type= \" search \"
747 onchange= \" javascript:updateFeedList() \" value= \" $feed_search\" >
748 <input type= \" submit \" class= \" button \"
749 onclick= \" javascript:updateFeedList() \" value= \" " . __ ( 'Search' ). " \" >
752 /* print "<input id=\"fadd_link\"
753 onkeyup=\"toggleSubmitNotEmpty(this, 'fadd_submit_btn')\"
754 onchange=\"toggleSubmitNotEmpty(this, 'fadd_submit_btn')\"
756 <input type=\"submit\" class=\"button\"
757 disabled=\"true\" id=\"fadd_submit_btn\"
758 onclick=\"addFeed()\" value=\"".__('Subscribe')."\">"; */
760 print "<input onclick= \" javascript:displayDlg('quickAddFeed') \"
761 type= \" submit \" id= \" subscribe_to_feed_btn \"
762 class= \" button \" value= \" " . __ ( 'Subscribe to feed' ). " \" >" ;
764 if ( ENABLE_FEED_BROWSER
&& ! SINGLE_USER_MODE
) {
765 print " <input type= \" submit \" class= \" button \"
766 id= \" top25_feeds_btn \"
767 onclick= \" javascript:browseFeeds() \" value= \" " . __ ( 'Top 25' ). " \" >" ;
770 $feeds_sort = db_escape_string ( $_GET [ "sort" ]);
772 if (! $feeds_sort ||
$feeds_sort == "undefined" ) {
773 $feeds_sort = $_SESSION [ "pref_sort_feeds" ];
774 if (! $feeds_sort ) $feeds_sort = "title" ;
777 $_SESSION [ "pref_sort_feeds" ] = $feeds_sort ;
780 $search_qpart = "(UPPER(F1.title) LIKE UPPER('% $feed_search %') OR
781 UPPER(F1.feed_url) LIKE UPPER('% $feed_search %')) AND" ;
786 $show_last_article_info = false ;
787 $show_last_article_checked = "" ;
788 $show_last_article_qpart = "" ;
790 if ( $_GET [ "slat" ] == "true" ) {
791 $show_last_article_info = true ;
792 $show_last_article_checked = "checked" ;
793 $show_last_article_qpart = ", (SELECT SUBSTRING(MAX(updated),1,16) FROM ttrss_user_entries,
794 ttrss_entries WHERE ref_id = ttrss_entries.id
795 AND feed_id = F1.id) AS last_article" ;
796 } else if ( $feeds_sort == "last_article" ) {
797 $feeds_sort = "title" ;
800 if ( get_pref ( $link , 'ENABLE_FEED_CATS' )) {
801 $order_by_qpart = "category, $feeds_sort ,title" ;
803 $order_by_qpart = " $feeds_sort ,title" ;
806 $result = db_query ( $link , "SELECT
810 substring(F1.last_updated,1,16) AS last_updated,
816 F2.title AS parent_title,
817 C1.title AS category,
820 $show_last_article_qpart
823 LEFT JOIN ttrss_feeds AS F2
824 ON (F1.parent_feed = F2.id)
825 LEFT JOIN ttrss_feed_categories AS C1
826 ON (F1.cat_id = C1.id)
828 $search_qpart F1.owner_uid = '" . $_SESSION [ "uid" ]. "'
829 ORDER by $order_by_qpart " );
831 if ( db_num_rows ( $result ) != 0 ) {
833 // print "<div id=\"infoBoxShadow\"><div id=\"infoBox\">PLACEHOLDER</div></div>";
835 print "<p><table width= \" 100% \" cellspacing= \" 0 \"
836 class= \" prefFeedList \" id= \" prefFeedList \" >" ;
837 print "<tr><td class= \" selectPrompt \" colspan= \" 8 \" >" .
838 "<div style='float : right'>" .
839 "<input id='show_last_article_times' type='checkbox' onchange='feedlistToggleSLAT()'
840 $show_last_article_checked ><label
841 for='show_last_article_times'>" . __ ( 'Show last article times' ). "</label></div>" .
843 <a href= \" javascript:selectPrefRows('feed', true) \" >" . __ ( 'All' ). "</a>,
844 <a href= \" javascript:selectPrefRows('feed', false) \" >" . __ ( 'None' ). "</a>
847 if (! get_pref ( $link , 'ENABLE_FEED_CATS' )) {
848 print "<tr class= \" title \" >
849 <td width='5%' align='center'> </td>" ;
851 if ( get_pref ( $link , 'ENABLE_FEED_ICONS' )) {
852 print "<td width='3%'> </td>" ;
855 print "<td width='60%'><a href= \" javascript:updateFeedList('title') \" >" . __ ( 'Title' ). "</a></td>" ;
857 if ( $show_last_article_info ) {
858 print "<td width='20%' align='right'><a href= \" javascript:updateFeedList('last_article') \" >" . __ ( 'Last Article' ). "</a></td>" ;
861 print "<td width='20%' align='right'><a href= \" javascript:updateFeedList('last_updated') \" >" . __ ( 'Updated' ). "</a></td>" ;
868 while ( $line = db_fetch_assoc ( $result )) {
870 $feed_id = $line [ "id" ];
871 $cat_id = $line [ "cat_id" ];
873 $edit_title = htmlspecialchars ( $line [ "title" ]);
874 $edit_cat = htmlspecialchars ( $line [ "category" ]);
876 $hidden = sql_bool_to_bool ( $line [ "hidden" ]);
878 $last_error = $line [ "last_error" ];
880 if (! $edit_cat ) $edit_cat = __ ( "Uncategorized" );
882 $last_updated = $line [ "last_updated" ];
884 if (! $last_updated ) {
885 $last_updated = "—" ;
886 } else if ( get_pref ( $link , 'HEADLINES_SMART_DATE' )) {
887 $last_updated = smart_date_time ( strtotime ( $last_updated ));
889 $short_date = get_pref ( $link , 'SHORT_DATE_FORMAT' );
890 $last_updated = date ( $short_date , strtotime ( $last_updated ));
893 $last_article = $line [ "last_article" ];
895 if (! $last_article ) {
896 $last_article = "—" ;
897 } else if ( get_pref ( $link , 'HEADLINES_SMART_DATE' )) {
898 $last_article = smart_date_time ( strtotime ( $last_article ));
900 $short_date = get_pref ( $link , 'SHORT_DATE_FORMAT' );
901 $last_article = date ( $short_date , strtotime ( $last_article ));
904 if ( get_pref ( $link , 'ENABLE_FEED_CATS' ) && $cur_cat_id != $cat_id ) {
907 print "<tr><td colspan= \" 6 \" class= \" feedEditCat \" > $edit_cat </td></tr>" ;
909 print "<tr class= \" title \" >
910 <td width='5%'> </td>" ;
912 if ( get_pref ( $link , 'ENABLE_FEED_ICONS' )) {
913 print "<td width='3%'> </td>" ;
916 print "<td width='60%'><a href= \" javascript:updateFeedList('title') \" >" . __ ( 'Title' ). "</a></td>" ;
918 if ( $show_last_article_info ) {
919 print "<td width='20%' align='right'>
920 <a href= \" javascript:updateFeedList('last_article') \" >" . __ ( 'Last Article' ). "</a></td>" ;
923 print "<td width='20%' align='right'>
924 <a href= \" javascript:updateFeedList('last_updated') \" >" . __ ( 'Updated' ). "</a></td>" ;
926 $cur_cat_id = $cat_id ;
929 $class = ( $lnum %
2 ) ?
"even" : "odd" ;
930 $this_row_id = "id= \" FEEDR- $feed_id\" " ;
932 print "<tr class= \" $class\" $this_row_id >" ;
934 $icon_file = ICONS_DIR
. "/ $feed_id .ico" ;
936 if ( file_exists ( $icon_file ) && filesize ( $icon_file ) > 0 ) {
937 $feed_icon = "<img class= \" tinyFeedIcon \" src= \" " . ICONS_URL
. "/ $feed_id .ico \" >" ;
939 $feed_icon = "<img class= \" tinyFeedIcon \" src= \" images/blank_icon.gif \" >" ;
942 print "<td class='feedSelect'><input onclick='toggleSelectPrefRow(this, \" feed \" );'
943 type= \" checkbox \" id= \" FRCHK-" . $line [ "id" ]. " \" ></td>" ;
945 if ( get_pref ( $link , 'ENABLE_FEED_ICONS' )) {
946 print "<td class='feedIcon'> $feed_icon </td>" ;
950 $edit_title = "<span class= \" insensitive \" > $edit_title (Hidden)</span>" ;
951 $last_updated = "<span class= \" insensitive \" > $last_updated </span>" ;
952 $last_article = "<span class= \" insensitive \" > $last_article </span>" ;
956 $edit_title = "<span class= \" feed_error \" > $edit_title </span>" ;
957 $last_updated = "<span class= \" feed_error \" > $last_updated </span>" ;
958 $last_article = "<span class= \" feed_error \" > $last_article </span>" ;
961 $parent_title = $line [ "parent_title" ];
963 $parent_title = "<span class='groupPrompt'>(linked to
964 $parent_title )</span>" ;
967 print "<td><a href= \" javascript:editFeed( $feed_id ); \" >" .
968 " $edit_title $parent_title " . "</a></td>" ;
970 if ( $show_last_article_info ) {
971 print "<td align='right'><a href= \" javascript:editFeed( $feed_id ); \" >" .
972 " $last_article </a></td>" ;
975 print "<td align='right'><a href= \" javascript:editFeed( $feed_id ); \" >" .
976 " $last_updated </a></td>" ;
987 print "<div id= \" feedOpToolbar \" >" ;
989 if ( get_pref ( $link , 'ENABLE_FEED_CATS' )) {
991 print __ ( 'Selection:' ) . " " ;
993 print_feed_cat_select ( $link , "sfeed_set_fcat" , "" , "disabled" );
995 print " <input type= \" submit \" class= \" button \" disabled= \" true \"
996 onclick= \" javascript:categorizeSelectedFeeds() \" value= \" " .
997 __ ( 'Recategorize' ). " \" >" ;
1002 print "<select id= \" feedActionChooser \" onchange= \" feedActionChange() \" >
1003 <option value= \" facDefault \" selected>" . __ ( 'Actions...' ). "</option>
1004 <option disabled>--------</option>
1005 <option style= \" color : #5050aa \" disabled>" . __ ( 'Selection:' ). "</option>
1006 <option value= \" facEdit \" > " . __ ( 'Edit' ). "</option>
1007 <option value= \" facPurge \" > " . __ ( 'Manual purge' ). "</option>
1008 <option value= \" facClear \" > " . __ ( 'Clear feed data' ). "</option>
1009 <option value= \" facUnsubscribe \" > " . __ ( 'Unsubscribe' ). "</option>" ;
1011 if ( get_pref ( $link , 'ENABLE_FEED_CATS' )) {
1013 print "<option disabled>--------</option>
1014 <option style= \" color : #5050aa \" disabled>" . __ ( 'Other:' ). "</option>
1015 <option value= \" facEditCats \" > " . __ ( 'Edit categories' ). "
1021 /* print "<input type=\"submit\" class=\"button\" disabled=\"true\"
1022 onclick=\"javascript:editSelectedFeed()\" value=\"".__('Edit')."\">
1023 <input type=\"submit\" class=\"button\" disabled=\"true\"
1024 onclick=\"javascript:removeSelectedFeeds()\"
1025 value=\"".__('Unsubscribe')."\">"; */
1027 // if (get_pref($link, 'ENABLE_FEED_CATS')) {
1029 /* print " <input type=\"submit\" class=\"button\"
1030 onclick=\"javascript:editFeedCats()\" value=\"".
1031 __("Edit categories")."\">"; */
1033 # print " | ";
1038 // print "<p>No feeds defined.</p>";
1042 print "<h3>" . __ ( 'OPML' ). "</h3>
1044 <div style='float : left'>
1045 <form enctype= \" multipart/form-data \" method= \" POST \" action= \" opml.php \" >
1046 " . __ ( 'File:' ). " <input id= \" opml_file \" name= \" opml_file \" type= \" file \" >
1047 <input type= \" hidden \" name= \" op \" value= \" Import \" >
1048 <input class= \" button \" onclick= \" return validateOpmlImport(); \"
1049 type= \" submit \" value= \" " . __ ( 'Import' ). " \" >
1054 print "<input type= \" submit \"
1055 class= \" button \" onclick= \" gotoExportOpml() \"
1056 value= \" " . __ ( 'Export OPML' ). " \" >" ;
1059 print "<h3>" . __ ( "Firefox Integration" ) . "</h3>" ;
1061 print "<p>" . __ ( 'This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the link below.' );
1062 print "</p><p class= \" small \" > <a href='javascript:window.navigator.registerContentHandler(" .
1063 " \" application/vnd.mozilla.maybe.feed \" , " .
1064 " \" " . add_feed_url () . " \" , " . " \" Tiny Tiny RSS \" )'>" .
1065 __ ( 'Click here to register this site as a feed reader.' ) . "</a></p>" ;
1068 print "<h3>" . __ ( "Published articles" ). "</h3>" ;
1070 if (! get_pref ( $link , "_PREFS_PUBLISH_KEY" )) {
1071 set_pref ( $link , "_PREFS_PUBLISH_KEY" , generate_publish_key ());
1074 print "<p>" . __ ( 'Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the address specified below.' ). "</p>" ;
1076 $url_path = article_publish_url ( $link );
1078 print "<p class= \" small \" ><a id= \" pubGenAddress \" target= \" _new \" href= \" $url_path\" > $url_path </a></p>" ;
1080 print "<p><input type= \" submit \" onclick= \" return pubRegenKey() \"
1081 value= \" " . __ ( 'Generate another address' ). " \" ></p>" ;