]>
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>" ;
327 print "<div align='right'>
328 <input type= \" submit \" class= \" button \"
329 onclick= \" return feedEditSave() \" value= \" " . __ ( 'Save' ). " \" >
330 <input type='submit' class='button'
331 onclick= \" return feedEditCancel() \" value= \" " . __ ( 'Cancel' ). " \" ></div>" ;
338 if ( $subop == "editSave" ) {
340 $feed_title = db_escape_string ( trim ( $_POST [ "title" ]));
341 $feed_link = db_escape_string ( trim ( $_POST [ "feed_url" ]));
342 $upd_intl = db_escape_string ( $_POST [ "update_interval" ]);
343 $purge_intl = db_escape_string ( $_POST [ "purge_interval" ]);
344 $feed_id = db_escape_string ( $_POST [ "id" ]);
345 $cat_id = db_escape_string ( $_POST [ "cat_id" ]);
346 $auth_login = db_escape_string ( trim ( $_POST [ "auth_login" ]));
347 $auth_pass = db_escape_string ( trim ( $_POST [ "auth_pass" ]));
348 $parent_feed = db_escape_string ( $_POST [ "parent_feed" ]);
349 $private = checkbox_to_sql_bool ( db_escape_string ( $_POST [ "private" ]));
350 $rtl_content = checkbox_to_sql_bool ( db_escape_string ( $_POST [ "rtl_content" ]));
351 $hidden = checkbox_to_sql_bool ( db_escape_string ( $_POST [ "hidden" ]));
352 $include_in_digest = checkbox_to_sql_bool (
353 db_escape_string ( $_POST [ "include_in_digest" ]));
355 if ( get_pref ( $link , 'ENABLE_FEED_CATS' )) {
356 if ( $cat_id && $cat_id != 0 ) {
357 $category_qpart = "cat_id = ' $cat_id '," ;
358 $category_qpart_nocomma = "cat_id = ' $cat_id '" ;
360 $category_qpart = 'cat_id = NULL,' ;
361 $category_qpart_nocomma = 'cat_id = NULL' ;
364 $category_qpart = "" ;
365 $category_qpart_nocomma = "" ;
368 if ( $parent_feed && $parent_feed != 0 ) {
369 $parent_qpart = "parent_feed = ' $parent_feed '" ;
371 $parent_qpart = 'parent_feed = NULL' ;
374 $result = db_query ( $link , "UPDATE ttrss_feeds SET
375 $category_qpart $parent_qpart ,
376 title = ' $feed_title ', feed_url = ' $feed_link ',
377 update_interval = ' $upd_intl ',
378 purge_interval = ' $purge_intl ',
379 auth_login = ' $auth_login ',
380 auth_pass = ' $auth_pass ',
382 rtl_content = $rtl_content ,
384 include_in_digest = $include_in_digest
385 WHERE id = ' $feed_id ' AND owner_uid = " . $_SESSION [ "uid" ]);
387 if ( get_pref ( $link , 'ENABLE_FEED_CATS' )) {
388 # update linked feed categories
389 $result = db_query ( $link , "UPDATE ttrss_feeds SET
390 $category_qpart_nocomma WHERE parent_feed = ' $feed_id ' AND
391 owner_uid = " . $_SESSION [ "uid" ]);
395 if ( $subop == "remove" ) {
397 if (! WEB_DEMO_MODE
) {
399 $ids = split ( "," , db_escape_string ( $_GET [ "ids" ]));
401 foreach ( $ids as $id ) {
405 db_query ( $link , "DELETE FROM ttrss_feeds
406 WHERE id = ' $id ' AND owner_uid = " . $_SESSION [ "uid" ]);
408 $icons_dir = ICONS_DIR
;
410 if ( file_exists ( $icons_dir . "/ $id .ico" )) {
411 unlink ( $icons_dir . "/ $id .ico" );
413 } else if ( $id < - 10 ) {
415 $label_id = - $id - 11 ;
417 db_query ( $link , "DELETE FROM ttrss_labels
418 WHERE id = ' $label_id ' AND owner_uid = " . $_SESSION [ "uid" ]);
424 if ( $subop == "add" ) {
426 if (! WEB_DEMO_MODE
) {
428 $feed_url = db_escape_string ( trim ( $_REQUEST [ "feed_url" ]));
429 $cat_id = db_escape_string ( $_REQUEST [ "cat_id" ]);
430 $p_from = db_escape_string ( $_REQUEST [ "from" ]);
432 /* only read authentication information from POST */
434 $auth_login = db_escape_string ( trim ( $_POST [ "auth_login" ]));
435 $auth_pass = db_escape_string ( trim ( $_POST [ "auth_pass" ]));
437 if ( $p_from != 'tt-rss' ) {
440 <title>Tiny Tiny RSS - Subscribe to feed...</title>
441 <link rel= \" stylesheet \" type= \" text/css \" href= \" quicksub.css \" >
444 <img class= \" logo \" src= \" images/ttrss_logo.png \"
445 alt= \" Tiny Tiny RSS \" />
446 <h1>Subscribe to feed...</h1>
447 <div class= \" content \" >" ;
450 if ( subscribe_to_feed ( $link , $feed_url , $cat_id , $auth_login , $auth_pass )) {
451 print_notice ( T_sprintf ( "Subscribed to <b> %s </b>." , $feed_url ));
453 print_warning ( T_sprintf ( "Already subscribed to <b> %s </b>." , $feed_url ));
456 if ( $p_from != 'tt-rss' ) {
457 $tt_uri = 'http://' . $_SERVER [ 'SERVER_NAME' ] .
458 preg_replace ( '/backend\.php.*$/' ,
459 'tt-rss.php' , $_SERVER [ "REQUEST_URI" ]);
461 $tp_uri = 'http://' . $_SERVER [ 'SERVER_NAME' ] .
462 preg_replace ( '/backend\.php.*$/' ,
463 'prefs.php' , $_SERVER [ "REQUEST_URI" ]);
465 print "<p><a href=' $tt_uri '>Return to Tiny Tiny RSS</a> |" ;
467 $result = db_query ( $link , "SELECT id FROM ttrss_feeds WHERE
468 feed_url = ' $feed_url ' AND owner_uid = " . $_SESSION [ "uid" ]);
470 $feed_id = db_fetch_result ( $result , 0 , "id" );
473 print "<a href=' $tp_uri ?tab=feedConfig&subop=editFeed: $feed_id '>
474 Edit subscription options</a> | " ;
477 print "<a href='javascript:window.close()'>Close this window</a>.</p>" ;
479 print "</div></body></html>" ;
486 if ( $subop == "categorize" ) {
488 if (! WEB_DEMO_MODE
) {
490 $ids = split ( "," , db_escape_string ( $_GET [ "ids" ]));
492 $cat_id = db_escape_string ( $_GET [ "cat_id" ]);
495 $cat_id_qpart = 'NULL' ;
497 $cat_id_qpart = "' $cat_id '" ;
500 db_query ( $link , "BEGIN" );
502 foreach ( $ids as $id ) {
504 db_query ( $link , "UPDATE ttrss_feeds SET cat_id = $cat_id_qpart
505 WHERE id = ' $id ' AND parent_feed IS NULL
506 AND owner_uid = " . $_SESSION [ "uid" ]);
508 # update linked feed categories
509 db_query ( $link , "UPDATE ttrss_feeds SET
510 cat_id = $cat_id_qpart WHERE parent_feed = ' $id ' AND
511 owner_uid = " . $_SESSION [ "uid" ]);
515 db_query ( $link , "COMMIT" );
520 if ( $subop == "editCats" ) {
522 print "<div id= \" infoBoxTitle \" >" . __ ( 'Category editor' ). "</div>" ;
524 print "<div class= \" infoBoxContents \" >" ;
526 $action = $_REQUEST [ "action" ];
528 if ( $action == "save" ) {
530 $cat_title = db_escape_string ( trim ( $_GET [ "title" ]));
531 $cat_id = db_escape_string ( $_GET [ "id" ]);
533 $result = db_query ( $link , "UPDATE ttrss_feed_categories SET
534 title = ' $cat_title ' WHERE id = ' $cat_id ' AND owner_uid = " . $_SESSION [ "uid" ]);
538 if ( $action == "add" ) {
540 if (! WEB_DEMO_MODE
) {
542 $feed_cat = db_escape_string ( trim ( $_GET [ "cat" ]));
544 $result = db_query ( $link ,
545 "SELECT id FROM ttrss_feed_categories
546 WHERE title = ' $feed_cat ' AND owner_uid = " . $_SESSION [ "uid" ]);
548 if ( db_num_rows ( $result ) == 0 ) {
550 $result = db_query ( $link ,
551 "INSERT INTO ttrss_feed_categories (owner_uid,title)
552 VALUES ('" . $_SESSION [ "uid" ]. "', ' $feed_cat ')" );
556 print_warning ( T_sprintf ( "Category <b>$ %s </b> already exists in the database." ,
563 if ( $action == "remove" ) {
565 if (! WEB_DEMO_MODE
) {
567 $ids = split ( "," , db_escape_string ( $_GET [ "ids" ]));
569 foreach ( $ids as $id ) {
571 db_query ( $link , "BEGIN" );
573 $result = db_query ( $link ,
574 "SELECT count(id) as num_feeds FROM ttrss_feeds
575 WHERE cat_id = ' $id '" );
577 $num_feeds = db_fetch_result ( $result , 0 , "num_feeds" );
579 if ( $num_feeds == 0 ) {
580 db_query ( $link , "DELETE FROM ttrss_feed_categories
581 WHERE id = ' $id ' AND owner_uid = " . $_SESSION [ "uid" ]);
584 print format_warning ( __ ( "Unable to delete non empty feed categories." ));
588 db_query ( $link , "COMMIT" );
593 print "<div class= \" prefGenericAddBox \" >
594 <input id= \" fadd_cat \"
595 onkeypress= \" return filterCR(event, addFeedCat) \"
596 onkeyup= \" toggleSubmitNotEmpty(this, 'catadd_submit_btn') \"
597 onchange= \" toggleSubmitNotEmpty(this, 'catadd_submit_btn') \"
600 type= \" submit \" class= \" button \" disabled= \" true \" id= \" catadd_submit_btn \"
601 onclick= \" javascript:addFeedCat() \" value= \" " . __ ( 'Create category' ). " \" ></div>" ;
603 $result = db_query ( $link , "SELECT title,id FROM ttrss_feed_categories
604 WHERE owner_uid = " . $_SESSION [ "uid" ]. "
609 if ( db_num_rows ( $result ) != 0 ) {
611 print "<table width= \" 100% \" class= \" prefFeedCatList \"
614 print "<tr><td class= \" selectPrompt \" colspan= \" 8 \" >
616 <a href= \" javascript:selectPrefRows('fcat', true) \" >" . __ ( 'All' ). "</a>,
617 <a href= \" javascript:selectPrefRows('fcat', false) \" >" . __ ( 'None' ). "</a>
622 print "<div class= \" prefFeedCatHolder \" >" ;
624 print "<form id= \" feed_cat_edit_form \" onsubmit= \" return false \" >" ;
626 print "<table width= \" 100% \" class= \" prefFeedCatList \"
627 cellspacing= \" 0 \" id= \" prefFeedCatList \" >" ;
629 /* print "<tr class=\"title\">
630 <td width=\"5%\"> </td><td width=\"80%\">Title</td>
635 while ( $line = db_fetch_assoc ( $result )) {
637 $class = ( $lnum %
2 ) ?
"even" : "odd" ;
639 $cat_id = $line [ "id" ];
641 $edit_cat_id = $_GET [ "id" ];
643 if ( $action == "edit" && $cat_id == $edit_cat_id ) {
644 $class .= "Selected" ;
646 } else if ( $action == "edit" && $cat_id != $edit_cat_id ) {
650 $this_row_id = "id= \" FCATR- $cat_id\" " ;
653 print "<tr class= \" $class\" $this_row_id >" ;
655 $edit_title = htmlspecialchars ( $line [ "title" ]);
657 if (! $edit_cat_id ||
$action != "edit" ) {
659 print "<td width='5%' align='center'><input
660 onclick='toggleSelectPrefRow(this, \" fcat \" );'
661 type= \" checkbox \" id= \" FCCHK-" . $line [ "id" ]. " \" ></td>" ;
663 print "<td><a href= \" javascript:editFeedCat( $cat_id ); \" >" .
664 $edit_title . "</a></td>" ;
666 } else if ( $cat_id != $edit_cat_id ) {
668 print "<td width='5%' align='center'><input disabled= \" true \" type= \" checkbox \"
669 id= \" FRCHK-" . $line [ "id" ]. " \" ></td>" ;
671 print "<td> $edit_title </td>" ;
675 print "<td width='5%' align='center'><input disabled= \" true \" type= \" checkbox \" checked>" ;
677 print "<input type= \" hidden \" name= \" id \" value= \" $cat_id\" >" ;
678 print "<input type= \" hidden \" name= \" op \" value= \" pref-feeds \" >" ;
679 print "<input type= \" hidden \" name= \" subop \" value= \" editCats \" >" ;
680 print "<input type= \" hidden \" name= \" action \" value= \" save \" >" ;
684 print "<td><input onkeypress= \" return filterCR(event, feedCatEditSave) \"
685 name= \" title \" size= \" 40 \" value= \" $edit_title\" ></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 \" >" ;
710 if ( $action == "edit" ) {
711 print "<input type= \" submit \" class= \" button \"
712 onclick= \" return feedCatEditSave() \" value= \" " . __ ( 'Save' ). " \" >
713 <input type= \" submit \" class= \" button \"
714 onclick= \" return feedCatEditCancel() \" value= \" " . __ ( 'Cancel' ). " \" >" ;
718 <input type= \" submit \" class= \" button \" disabled= \" true \"
719 onclick= \" return editSelectedFeedCat() \" value= \" " . __ ( 'Edit' ). " \" >
720 <input type= \" submit \" class= \" button \" disabled= \" true \"
721 onclick= \" return removeSelectedFeedCats() \" value= \" " . __ ( 'Remove' ). " \" >" ;
734 set_pref ( $link , "_PREFS_ACTIVE_TAB" , "feedConfig" );
736 $result = db_query ( $link , "SELECT COUNT(id) AS num_errors
737 FROM ttrss_feeds WHERE last_error != '' AND owner_uid = " . $_SESSION [ "uid" ]);
739 $num_errors = db_fetch_result ( $result , 0 , "num_errors" );
741 if ( $num_errors > 0 ) {
743 print format_notice ( "<a href= \" javascript:showFeedsWithErrors() \" >" .
744 __ ( 'Some feeds have update errors (click for details)' ). "</a>" );
747 $feed_search = db_escape_string ( $_GET [ "search" ]);
749 if ( array_key_exists ( "search" , $_GET )) {
750 $_SESSION [ "prefs_feed_search" ] = $feed_search ;
752 $feed_search = $_SESSION [ "prefs_feed_search" ];
755 print "<div class= \" feedEditSearch \" >
756 <input id= \" feed_search \" size= \" 20 \"
757 onchange= \" javascript:updateFeedList() \" value= \" $feed_search\" >
758 <input type= \" submit \" class= \" button \"
759 onclick= \" javascript:updateFeedList() \" value= \" " . __ ( 'Search' ). " \" >
762 /* print "<input id=\"fadd_link\"
763 onkeyup=\"toggleSubmitNotEmpty(this, 'fadd_submit_btn')\"
764 onchange=\"toggleSubmitNotEmpty(this, 'fadd_submit_btn')\"
766 <input type=\"submit\" class=\"button\"
767 disabled=\"true\" id=\"fadd_submit_btn\"
768 onclick=\"addFeed()\" value=\"".__('Subscribe')."\">"; */
770 print "<input onclick= \" javascript:displayDlg('quickAddFeed') \"
771 type= \" submit \" id= \" subscribe_to_feed_btn \"
772 class= \" button \" value= \" " . __ ( 'Subscribe to feed' ). " \" >" ;
774 if ( ENABLE_FEED_BROWSER
&& ! SINGLE_USER_MODE
) {
775 print " <input type= \" submit \" class= \" button \"
776 id= \" top25_feeds_btn \"
777 onclick= \" javascript:browseFeeds() \" value= \" " . __ ( 'Top 25' ). " \" >" ;
780 $feeds_sort = db_escape_string ( $_GET [ "sort" ]);
782 if (! $feeds_sort ||
$feeds_sort == "undefined" ) {
783 $feeds_sort = $_SESSION [ "pref_sort_feeds" ];
784 if (! $feeds_sort ) $feeds_sort = "title" ;
787 $_SESSION [ "pref_sort_feeds" ] = $feeds_sort ;
790 $search_qpart = "(UPPER(F1.title) LIKE UPPER('% $feed_search %') OR
791 UPPER(F1.feed_url) LIKE UPPER('% $feed_search %')) AND" ;
796 $show_last_article_info = false ;
797 $show_last_article_checked = "" ;
798 $show_last_article_qpart = "" ;
800 if ( $_GET [ "slat" ] == "true" ) {
801 $show_last_article_info = true ;
802 $show_last_article_checked = "checked" ;
803 $show_last_article_qpart = ", (SELECT SUBSTRING(MAX(updated),1,16) FROM ttrss_user_entries,
804 ttrss_entries WHERE ref_id = ttrss_entries.id
805 AND feed_id = F1.id) AS last_article" ;
806 } else if ( $feeds_sort == "last_article" ) {
807 $feeds_sort = "title" ;
810 if ( get_pref ( $link , 'ENABLE_FEED_CATS' )) {
811 $order_by_qpart = "category, $feeds_sort ,title" ;
813 $order_by_qpart = " $feeds_sort ,title" ;
816 $result = db_query ( $link , "SELECT
820 substring(F1.last_updated,1,16) AS last_updated,
826 F2.title AS parent_title,
827 C1.title AS category,
830 $show_last_article_qpart
833 LEFT JOIN ttrss_feeds AS F2
834 ON (F1.parent_feed = F2.id)
835 LEFT JOIN ttrss_feed_categories AS C1
836 ON (F1.cat_id = C1.id)
838 $search_qpart F1.owner_uid = '" . $_SESSION [ "uid" ]. "'
839 ORDER by $order_by_qpart " );
841 if ( db_num_rows ( $result ) != 0 ) {
843 // print "<div id=\"infoBoxShadow\"><div id=\"infoBox\">PLACEHOLDER</div></div>";
845 print "<p><table width= \" 100% \" cellspacing= \" 0 \"
846 class= \" prefFeedList \" id= \" prefFeedList \" >" ;
847 print "<tr><td class= \" selectPrompt \" colspan= \" 8 \" >" .
848 "<div style='float : right'>" .
849 "<input id='show_last_article_times' type='checkbox' onchange='feedlistToggleSLAT()'
850 $show_last_article_checked ><label
851 for='show_last_article_times'>" . __ ( 'Show last article times' ). "</label></div>" .
853 <a href= \" javascript:selectPrefRows('feed', true) \" >" . __ ( 'All' ). "</a>,
854 <a href= \" javascript:selectPrefRows('feed', false) \" >" . __ ( 'None' ). "</a>
857 if (! get_pref ( $link , 'ENABLE_FEED_CATS' )) {
858 print "<tr class= \" title \" >
859 <td width='5%' align='center'> </td>" ;
861 if ( get_pref ( $link , 'ENABLE_FEED_ICONS' )) {
862 print "<td width='3%'> </td>" ;
865 print "<td width='60%'><a href= \" javascript:updateFeedList('title') \" >" . __ ( 'Title' ). "</a></td>" ;
867 if ( $show_last_article_info ) {
868 print "<td width='20%' align='right'><a href= \" javascript:updateFeedList('last_article') \" >" . __ ( 'Last Article' ). "</a></td>" ;
871 print "<td width='20%' align='right'><a href= \" javascript:updateFeedList('last_updated') \" >" . __ ( 'Updated' ). "</a></td>" ;
878 while ( $line = db_fetch_assoc ( $result )) {
880 $feed_id = $line [ "id" ];
881 $cat_id = $line [ "cat_id" ];
883 $edit_title = htmlspecialchars ( $line [ "title" ]);
884 $edit_cat = htmlspecialchars ( $line [ "category" ]);
886 $hidden = sql_bool_to_bool ( $line [ "hidden" ]);
888 $last_error = $line [ "last_error" ];
890 if (! $edit_cat ) $edit_cat = __ ( "Uncategorized" );
892 $last_updated = $line [ "last_updated" ];
894 if (! $last_updated ) {
895 $last_updated = "—" ;
896 } else if ( get_pref ( $link , 'HEADLINES_SMART_DATE' )) {
897 $last_updated = smart_date_time ( strtotime ( $last_updated ));
899 $short_date = get_pref ( $link , 'SHORT_DATE_FORMAT' );
900 $last_updated = date ( $short_date , strtotime ( $last_updated ));
903 $last_article = $line [ "last_article" ];
905 if (! $last_article ) {
906 $last_article = "—" ;
907 } else if ( get_pref ( $link , 'HEADLINES_SMART_DATE' )) {
908 $last_article = smart_date_time ( strtotime ( $last_article ));
910 $short_date = get_pref ( $link , 'SHORT_DATE_FORMAT' );
911 $last_article = date ( $short_date , strtotime ( $last_article ));
914 if ( get_pref ( $link , 'ENABLE_FEED_CATS' ) && $cur_cat_id != $cat_id ) {
917 print "<tr><td colspan= \" 6 \" class= \" feedEditCat \" > $edit_cat </td></tr>" ;
919 print "<tr class= \" title \" >
920 <td width='5%'> </td>" ;
922 if ( get_pref ( $link , 'ENABLE_FEED_ICONS' )) {
923 print "<td width='3%'> </td>" ;
926 print "<td width='60%'><a href= \" javascript:updateFeedList('title') \" >" . __ ( 'Title' ). "</a></td>" ;
928 if ( $show_last_article_info ) {
929 print "<td width='20%' align='right'>
930 <a href= \" javascript:updateFeedList('last_article') \" >" . __ ( 'Last Article' ). "</a></td>" ;
933 print "<td width='20%' align='right'>
934 <a href= \" javascript:updateFeedList('last_updated') \" >" . __ ( 'Updated' ). "</a></td>" ;
936 $cur_cat_id = $cat_id ;
939 $class = ( $lnum %
2 ) ?
"even" : "odd" ;
940 $this_row_id = "id= \" FEEDR- $feed_id\" " ;
942 print "<tr class= \" $class\" $this_row_id >" ;
944 $icon_file = ICONS_DIR
. "/ $feed_id .ico" ;
946 if ( file_exists ( $icon_file ) && filesize ( $icon_file ) > 0 ) {
947 $feed_icon = "<img class= \" tinyFeedIcon \" src= \" " . ICONS_URL
. "/ $feed_id .ico \" >" ;
949 $feed_icon = "<img class= \" tinyFeedIcon \" src= \" images/blank_icon.gif \" >" ;
952 print "<td class='feedSelect'><input onclick='toggleSelectPrefRow(this, \" feed \" );'
953 type= \" checkbox \" id= \" FRCHK-" . $line [ "id" ]. " \" ></td>" ;
955 if ( get_pref ( $link , 'ENABLE_FEED_ICONS' )) {
956 print "<td class='feedIcon'> $feed_icon </td>" ;
960 $edit_title = "<span class= \" insensitive \" > $edit_title (Hidden)</span>" ;
961 $last_updated = "<span class= \" insensitive \" > $last_updated </span>" ;
962 $last_article = "<span class= \" insensitive \" > $last_article </span>" ;
966 $edit_title = "<span class= \" feed_error \" > $edit_title ( $last_error )</span>" ;
967 $last_updated = "<span class= \" feed_error \" > $last_updated </span>" ;
968 $last_article = "<span class= \" feed_error \" > $last_article </span>" ;
971 $parent_title = $line [ "parent_title" ];
973 $parent_title = "<span class='groupPrompt'>(linked to
974 $parent_title )</span>" ;
977 print "<td><a href= \" javascript:editFeed( $feed_id ); \" >" .
978 " $edit_title $parent_title " . "</a></td>" ;
980 if ( $show_last_article_info ) {
981 print "<td align='right'><a href= \" javascript:editFeed( $feed_id ); \" >" .
982 " $last_article </a></td>" ;
985 print "<td align='right'><a href= \" javascript:editFeed( $feed_id ); \" >" .
986 " $last_updated </a></td>" ;
995 print "<p><span id= \" feedOpToolbar \" >" ;
997 print "<input type= \" submit \" class= \" button \" disabled= \" true \"
998 onclick= \" javascript:editSelectedFeed() \" value= \" " . __ ( 'Edit' ). " \" >
999 <input type= \" submit \" class= \" button \" disabled= \" true \"
1000 onclick= \" javascript:removeSelectedFeeds() \"
1001 value= \" " . __ ( 'Unsubscribe' ). " \" >" ;
1003 if ( get_pref ( $link , 'ENABLE_FEED_CATS' )) {
1005 print " | " ;
1007 print_feed_cat_select ( $link , "sfeed_set_fcat" , "" , "disabled" );
1009 print " <input type= \" submit \" class= \" button \" disabled= \" true \"
1010 onclick= \" javascript:categorizeSelectedFeeds() \" value= \" " .
1011 __ ( 'Recategorize' ). " \" >" ;
1016 if ( get_pref ( $link , 'ENABLE_FEED_CATS' )) {
1018 print " <input type= \" submit \" class= \" button \"
1019 onclick= \" javascript:editFeedCats() \" value= \" " .
1020 __ ( "Edit categories" ). " \" >" ;
1022 # print " | ";
1027 // print "<p>No feeds defined.</p>";
1031 print "<h3>" . __ ( 'OPML' ). "</h3>
1033 <div style='float : left'>
1034 <form enctype= \" multipart/form-data \" method= \" POST \" action= \" opml.php \" >
1035 File: <input id= \" opml_file \" name= \" opml_file \" type= \" file \" >
1036 <input class= \" button \" name= \" op \" onclick= \" return validateOpmlImport(); \"
1037 type= \" submit \" value= \" " . __ ( 'Import' ). " \" >
1042 print "<input type= \" submit \"
1043 class= \" button \" onclick= \" gotoExportOpml() \"
1044 value= \" " . __ ( 'Export OPML' ). " \" >" ;
1047 print "<h3>Published articles</h3>" ;
1049 if (! get_pref ( $link , "_PREFS_PUBLISH_KEY" )) {
1050 set_pref ( $link , "_PREFS_PUBLISH_KEY" , generate_publish_key ());
1053 print "<p>" . __ ( 'Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the address specified below.' ). "</p>" ;
1055 $url_path = 'http://' . $_SERVER [ "HTTP_HOST" ] . \
1056 parse_url ( $_SERVER [ "REQUEST_URI" ], PHP_URL_PATH
);
1058 $url_path .= "?op=publish&key=" . get_pref ( $link , "_PREFS_PUBLISH_KEY" );
1060 print "<p><a id= \" pubGenAddress \" target= \" _new \" href= \" $url_path\" > $url_path </a></p>" ;
1062 print "<p><input type= \" submit \" onclick= \" return pubRegenKey() \"
1063 value= \" " . __ ( 'Generate another address' ). " \" ></p>" ;