2011-12-13 06:29:22 +01:00
< ? php
2012-08-17 12:20:55 +02:00
class Pref_Feeds extends Handler_Protected {
2011-12-26 09:02:52 +01:00
function csrf_ignore ( $method ) {
2012-01-02 22:37:51 +01:00
$csrf_ignored = array ( " index " , " getfeedtree " , " add " , " editcats " , " editfeed " ,
2013-04-01 10:36:57 +02:00
" savefeedorder " , " uploadicon " , " feedswitherrors " , " inactivefeeds " ,
" batchsubscribe " );
2011-12-26 09:02:52 +01:00
return array_search ( $method , $csrf_ignored ) !== false ;
}
2011-12-13 06:29:22 +01:00
function batch_edit_cbox ( $elem , $label = false ) {
print " <input type= \" checkbox \" title= \" " . __ ( " Check to enable field " ) . " \"
onchange = \ " dijit.byId('feedEditDlg').toggleField(this, ' $elem ', ' $label ') \" > " ;
}
function renamecat () {
2013-04-17 18:12:14 +02:00
$title = $this -> dbh -> escape_string ( $_REQUEST [ 'title' ]);
$id = $this -> dbh -> escape_string ( $_REQUEST [ 'id' ]);
2011-12-13 06:29:22 +01:00
if ( $title ) {
2013-04-17 18:12:14 +02:00
$this -> dbh -> query ( " UPDATE ttrss_feed_categories SET
2011-12-13 06:29:22 +01:00
title = '$title' WHERE id = '$id' AND owner_uid = " . $_SESSION["uid"] );
}
return ;
}
2012-08-13 12:47:43 +02:00
private function get_category_items ( $cat_id ) {
2012-09-15 14:24:00 +02:00
if ( $_REQUEST [ 'mode' ] != 2 )
$search = $_SESSION [ " prefs_feed_search " ];
else
$search = " " ;
2012-09-13 10:47:09 +02:00
if ( $search ) $search_qpart = " AND LOWER(title) LIKE LOWER('% $search %') " ;
2013-03-28 12:28:37 +01:00
// first one is set by API
$show_empty_cats = $_REQUEST [ 'force_show_empty' ] ||
2013-05-06 10:50:52 +02:00
( $_REQUEST [ 'mode' ] != 2 && ! $search );
2012-08-13 12:47:43 +02:00
$items = array ();
2013-04-17 18:12:14 +02:00
$result = $this -> dbh -> query ( " SELECT id, title FROM ttrss_feed_categories
2012-08-13 12:47:43 +02:00
WHERE owner_uid = " . $_SESSION["uid"] . " AND parent_cat = '$cat_id' ORDER BY order_id , title " );
2013-04-17 18:12:14 +02:00
while ( $line = $this -> dbh -> fetch_assoc ( $result )) {
2012-08-13 12:47:43 +02:00
$cat = array ();
$cat [ 'id' ] = 'CAT:' . $line [ 'id' ];
2012-08-13 16:56:55 +02:00
$cat [ 'bare_id' ] = ( int ) $line [ 'id' ];
2012-08-13 12:47:43 +02:00
$cat [ 'name' ] = $line [ 'title' ];
$cat [ 'items' ] = array ();
$cat [ 'checkbox' ] = false ;
$cat [ 'type' ] = 'category' ;
2012-08-13 16:56:55 +02:00
$cat [ 'unread' ] = 0 ;
2012-08-13 17:52:34 +02:00
$cat [ 'child_unread' ] = 0 ;
2013-05-15 23:08:04 +02:00
$cat [ 'auxcounter' ] = 0 ;
2014-06-14 12:37:05 +02:00
$cat [ 'parent_id' ] = $cat_id ;
2012-08-13 12:47:43 +02:00
$cat [ 'items' ] = $this -> get_category_items ( $line [ 'id' ]);
2013-06-07 13:31:43 +02:00
$num_children = $this -> calculate_children_count ( $cat );
$cat [ 'param' ] = vsprintf ( _ngettext ( '(%d feed)' , '(%d feeds)' , $num_children ), $num_children );
2012-08-13 12:47:43 +02:00
2013-06-07 13:31:43 +02:00
if ( $num_children > 0 || $show_empty_cats )
2012-08-13 12:47:43 +02:00
array_push ( $items , $cat );
}
2013-04-17 18:12:14 +02:00
$feed_result = $this -> dbh -> query ( " SELECT id, title, last_error,
2012-08-13 12:47:43 +02:00
" .SUBSTRING_FOR_DATE. " ( last_updated , 1 , 19 ) AS last_updated
FROM ttrss_feeds
WHERE cat_id = '$cat_id' AND owner_uid = " . $_SESSION["uid"] .
" $search_qpart ORDER BY order_id, title " );
2013-04-17 18:12:14 +02:00
while ( $feed_line = $this -> dbh -> fetch_assoc ( $feed_result )) {
2012-08-13 12:47:43 +02:00
$feed = array ();
$feed [ 'id' ] = 'FEED:' . $feed_line [ 'id' ];
2012-08-13 16:56:55 +02:00
$feed [ 'bare_id' ] = ( int ) $feed_line [ 'id' ];
2013-05-15 23:08:04 +02:00
$feed [ 'auxcounter' ] = 0 ;
2012-08-13 12:47:43 +02:00
$feed [ 'name' ] = $feed_line [ 'title' ];
$feed [ 'checkbox' ] = false ;
2012-08-13 16:56:55 +02:00
$feed [ 'unread' ] = 0 ;
2012-08-13 12:47:43 +02:00
$feed [ 'error' ] = $feed_line [ 'last_error' ];
$feed [ 'icon' ] = getFeedIcon ( $feed_line [ 'id' ]);
2013-04-17 14:23:15 +02:00
$feed [ 'param' ] = make_local_datetime (
2012-08-13 12:47:43 +02:00
$feed_line [ 'last_updated' ], true );
array_push ( $items , $feed );
}
return $items ;
}
2011-12-13 06:29:22 +01:00
function getfeedtree () {
2013-03-28 08:04:15 +01:00
print json_encode ( $this -> makefeedtree ());
}
function makefeedtree () {
2011-12-13 06:29:22 +01:00
2012-09-15 14:24:00 +02:00
if ( $_REQUEST [ 'mode' ] != 2 )
$search = $_SESSION [ " prefs_feed_search " ];
else
$search = " " ;
2011-12-13 06:29:22 +01:00
if ( $search ) $search_qpart = " AND LOWER(title) LIKE LOWER('% $search %') " ;
$root = array ();
$root [ 'id' ] = 'root' ;
$root [ 'name' ] = __ ( 'Feeds' );
$root [ 'items' ] = array ();
$root [ 'type' ] = 'category' ;
2013-04-17 16:34:18 +02:00
$enable_cats = get_pref ( 'ENABLE_FEED_CATS' );
2012-08-13 16:56:55 +02:00
if ( $_REQUEST [ 'mode' ] == 2 ) {
if ( $enable_cats ) {
2013-02-27 12:34:13 +01:00
$cat = $this -> feedlist_init_cat ( - 1 );
2012-08-13 16:56:55 +02:00
} else {
$cat [ 'items' ] = array ();
}
2012-08-27 08:08:11 +02:00
foreach ( array ( - 4 , - 3 , - 1 , - 2 , 0 , - 6 ) as $i ) {
2012-08-13 16:56:55 +02:00
array_push ( $cat [ 'items' ], $this -> feedlist_init_feed ( $i ));
}
2013-03-27 13:14:27 +01:00
/* Plugin feeds for -1 */
2013-04-18 10:27:34 +02:00
$feeds = PluginHost :: getInstance () -> get_feeds ( - 1 );
2013-03-27 13:14:27 +01:00
if ( $feeds ) {
foreach ( $feeds as $feed ) {
$feed_id = PluginHost :: pfeed_to_feed_id ( $feed [ 'id' ]);
$item = array ();
$item [ 'id' ] = 'FEED:' . $feed_id ;
$item [ 'bare_id' ] = ( int ) $feed_id ;
2013-05-15 23:08:04 +02:00
$item [ 'auxcounter' ] = 0 ;
2013-03-27 13:14:27 +01:00
$item [ 'name' ] = $feed [ 'title' ];
$item [ 'checkbox' ] = false ;
$item [ 'error' ] = '' ;
$item [ 'icon' ] = $feed [ 'icon' ];
$item [ 'param' ] = '' ;
$item [ 'unread' ] = 0 ; //$feed['sender']->get_unread($feed['id']);
$item [ 'type' ] = 'feed' ;
array_push ( $cat [ 'items' ], $item );
}
}
2012-08-13 16:56:55 +02:00
if ( $enable_cats ) {
array_push ( $root [ 'items' ], $cat );
} else {
$root [ 'items' ] = array_merge ( $root [ 'items' ], $cat [ 'items' ]);
}
2011-12-13 06:29:22 +01:00
2013-04-17 18:12:14 +02:00
$result = $this -> dbh -> query ( " SELECT * FROM
2012-08-13 16:56:55 +02:00
ttrss_labels2 WHERE owner_uid = " . $_SESSION['uid'] . " ORDER by caption " );
2013-04-17 18:12:14 +02:00
if ( $this -> dbh -> num_rows ( $result ) > 0 ) {
2012-08-13 16:56:55 +02:00
2013-04-17 16:34:18 +02:00
if ( get_pref ( 'ENABLE_FEED_CATS' )) {
2013-02-27 12:34:13 +01:00
$cat = $this -> feedlist_init_cat ( - 2 );
2012-08-13 16:56:55 +02:00
} else {
$cat [ 'items' ] = array ();
}
2013-04-17 18:12:14 +02:00
while ( $line = $this -> dbh -> fetch_assoc ( $result )) {
2012-08-13 16:56:55 +02:00
2013-03-27 06:40:07 +01:00
$label_id = label_to_feed_id ( $line [ 'id' ]);
2012-08-13 16:56:55 +02:00
2013-02-27 12:34:13 +01:00
$feed = $this -> feedlist_init_feed ( $label_id , false , 0 );
2012-08-13 16:56:55 +02:00
$feed [ 'fg_color' ] = $line [ 'fg_color' ];
$feed [ 'bg_color' ] = $line [ 'bg_color' ];
array_push ( $cat [ 'items' ], $feed );
}
if ( $enable_cats ) {
array_push ( $root [ 'items' ], $cat );
} else {
$root [ 'items' ] = array_merge ( $root [ 'items' ], $cat [ 'items' ]);
}
}
}
if ( $enable_cats ) {
2013-03-28 12:28:37 +01:00
$show_empty_cats = $_REQUEST [ 'force_show_empty' ] ||
2013-05-06 10:50:52 +02:00
( $_REQUEST [ 'mode' ] != 2 && ! $search );
2012-08-13 16:56:55 +02:00
2013-04-17 18:12:14 +02:00
$result = $this -> dbh -> query ( " SELECT id, title FROM ttrss_feed_categories
2012-08-13 12:47:43 +02:00
WHERE owner_uid = " . $_SESSION["uid"] . " AND parent_cat IS NULL ORDER BY order_id , title " );
2011-12-13 06:29:22 +01:00
2013-04-17 18:12:14 +02:00
while ( $line = $this -> dbh -> fetch_assoc ( $result )) {
2011-12-13 06:29:22 +01:00
$cat = array ();
$cat [ 'id' ] = 'CAT:' . $line [ 'id' ];
2012-08-13 16:56:55 +02:00
$cat [ 'bare_id' ] = ( int ) $line [ 'id' ];
2013-05-15 23:08:04 +02:00
$cat [ 'auxcounter' ] = 0 ;
2011-12-13 06:29:22 +01:00
$cat [ 'name' ] = $line [ 'title' ];
$cat [ 'items' ] = array ();
$cat [ 'checkbox' ] = false ;
$cat [ 'type' ] = 'category' ;
2012-08-13 16:56:55 +02:00
$cat [ 'unread' ] = 0 ;
2012-08-13 17:52:34 +02:00
$cat [ 'child_unread' ] = 0 ;
2011-12-13 06:29:22 +01:00
2012-08-13 12:47:43 +02:00
$cat [ 'items' ] = $this -> get_category_items ( $line [ 'id' ]);
2011-12-13 06:29:22 +01:00
2013-06-07 13:31:43 +02:00
$num_children = $this -> calculate_children_count ( $cat );
$cat [ 'param' ] = vsprintf ( _ngettext ( '(%d feed)' , '(%d feeds)' , $num_children ), $num_children );
2011-12-13 06:29:22 +01:00
2013-06-07 13:31:43 +02:00
if ( $num_children > 0 || $show_empty_cats )
2011-12-13 06:29:22 +01:00
array_push ( $root [ 'items' ], $cat );
$root [ 'param' ] += count ( $cat [ 'items' ]);
}
/* Uncategorized is a special case */
$cat = array ();
$cat [ 'id' ] = 'CAT:0' ;
$cat [ 'bare_id' ] = 0 ;
2013-05-15 23:08:04 +02:00
$cat [ 'auxcounter' ] = 0 ;
2011-12-13 06:29:22 +01:00
$cat [ 'name' ] = __ ( " Uncategorized " );
$cat [ 'items' ] = array ();
$cat [ 'type' ] = 'category' ;
$cat [ 'checkbox' ] = false ;
2012-08-13 16:56:55 +02:00
$cat [ 'unread' ] = 0 ;
2012-08-13 17:52:34 +02:00
$cat [ 'child_unread' ] = 0 ;
2011-12-13 06:29:22 +01:00
2013-04-17 18:12:14 +02:00
$feed_result = $this -> dbh -> query ( " SELECT id, title,last_error,
2011-12-13 06:29:22 +01:00
" .SUBSTRING_FOR_DATE. " ( last_updated , 1 , 19 ) AS last_updated
FROM ttrss_feeds
WHERE cat_id IS NULL AND owner_uid = " . $_SESSION["uid"] .
" $search_qpart ORDER BY order_id, title " );
2013-04-17 18:12:14 +02:00
while ( $feed_line = $this -> dbh -> fetch_assoc ( $feed_result )) {
2011-12-13 06:29:22 +01:00
$feed = array ();
$feed [ 'id' ] = 'FEED:' . $feed_line [ 'id' ];
2012-08-13 16:56:55 +02:00
$feed [ 'bare_id' ] = ( int ) $feed_line [ 'id' ];
2013-05-15 23:08:04 +02:00
$feed [ 'auxcounter' ] = 0 ;
2011-12-13 06:29:22 +01:00
$feed [ 'name' ] = $feed_line [ 'title' ];
$feed [ 'checkbox' ] = false ;
$feed [ 'error' ] = $feed_line [ 'last_error' ];
$feed [ 'icon' ] = getFeedIcon ( $feed_line [ 'id' ]);
2013-04-17 14:23:15 +02:00
$feed [ 'param' ] = make_local_datetime (
2011-12-13 06:29:22 +01:00
$feed_line [ 'last_updated' ], true );
2012-08-13 16:56:55 +02:00
$feed [ 'unread' ] = 0 ;
$feed [ 'type' ] = 'feed' ;
2011-12-13 06:29:22 +01:00
array_push ( $cat [ 'items' ], $feed );
}
2013-04-01 14:06:04 +02:00
$cat [ 'param' ] = vsprintf ( _ngettext ( '(%d feed)' , '(%d feeds)' , count ( $cat [ 'items' ])), count ( $cat [ 'items' ]));
2011-12-13 06:29:22 +01:00
2012-03-05 09:08:39 +01:00
if ( count ( $cat [ 'items' ]) > 0 || $show_empty_cats )
2011-12-13 06:29:22 +01:00
array_push ( $root [ 'items' ], $cat );
2013-06-07 13:31:43 +02:00
$num_children = $this -> calculate_children_count ( $root );
$root [ 'param' ] = vsprintf ( _ngettext ( '(%d feed)' , '(%d feeds)' , $num_children ), $num_children );
2011-12-13 06:29:22 +01:00
} else {
2013-04-17 18:12:14 +02:00
$feed_result = $this -> dbh -> query ( " SELECT id, title, last_error,
2011-12-13 06:29:22 +01:00
" .SUBSTRING_FOR_DATE. " ( last_updated , 1 , 19 ) AS last_updated
FROM ttrss_feeds
WHERE owner_uid = " . $_SESSION["uid"] .
" $search_qpart ORDER BY order_id, title " );
2013-04-17 18:12:14 +02:00
while ( $feed_line = $this -> dbh -> fetch_assoc ( $feed_result )) {
2011-12-13 06:29:22 +01:00
$feed = array ();
$feed [ 'id' ] = 'FEED:' . $feed_line [ 'id' ];
2012-08-13 16:56:55 +02:00
$feed [ 'bare_id' ] = ( int ) $feed_line [ 'id' ];
2013-05-15 23:08:04 +02:00
$feed [ 'auxcounter' ] = 0 ;
2011-12-13 06:29:22 +01:00
$feed [ 'name' ] = $feed_line [ 'title' ];
$feed [ 'checkbox' ] = false ;
$feed [ 'error' ] = $feed_line [ 'last_error' ];
$feed [ 'icon' ] = getFeedIcon ( $feed_line [ 'id' ]);
2013-04-17 14:23:15 +02:00
$feed [ 'param' ] = make_local_datetime (
2011-12-13 06:29:22 +01:00
$feed_line [ 'last_updated' ], true );
2012-08-13 16:56:55 +02:00
$feed [ 'unread' ] = 0 ;
$feed [ 'type' ] = 'feed' ;
2011-12-13 06:29:22 +01:00
array_push ( $root [ 'items' ], $feed );
}
2013-04-01 14:06:04 +02:00
$root [ 'param' ] = vsprintf ( _ngettext ( '(%d feed)' , '(%d feeds)' , count ( $cat [ 'items' ])), count ( $cat [ 'items' ]));
2011-12-13 06:29:22 +01:00
}
$fl = array ();
$fl [ 'identifier' ] = 'id' ;
$fl [ 'label' ] = 'name' ;
2012-08-13 16:56:55 +02:00
if ( $_REQUEST [ 'mode' ] != 2 ) {
$fl [ 'items' ] = array ( $root );
} else {
$fl [ 'items' ] =& $root [ 'items' ];
}
2011-12-13 06:29:22 +01:00
2013-03-28 08:04:15 +01:00
return $fl ;
2011-12-13 06:29:22 +01:00
}
function catsortreset () {
2013-04-17 18:12:14 +02:00
$this -> dbh -> query ( " UPDATE ttrss_feed_categories
2011-12-13 06:29:22 +01:00
SET order_id = 0 WHERE owner_uid = " . $_SESSION["uid"] );
return ;
}
function feedsortreset () {
2013-04-17 18:12:14 +02:00
$this -> dbh -> query ( " UPDATE ttrss_feeds
2011-12-13 06:29:22 +01:00
SET order_id = 0 WHERE owner_uid = " . $_SESSION["uid"] );
return ;
}
2012-08-15 08:10:24 +02:00
private function process_category_order ( & $data_map , $item_id , $parent_id = false , $nest_level = 0 ) {
$debug = isset ( $_REQUEST [ " debug " ]);
$prefix = " " ;
for ( $i = 0 ; $i < $nest_level ; $i ++ )
$prefix .= " " ;
if ( $debug ) _debug ( " $prefix C: $item_id P: $parent_id " );
$bare_item_id = substr ( $item_id , strpos ( $item_id , ':' ) + 1 );
2012-08-13 12:47:43 +02:00
if ( $item_id != 'root' ) {
if ( $parent_id && $parent_id != 'root' ) {
$parent_bare_id = substr ( $parent_id , strpos ( $parent_id , ':' ) + 1 );
2013-04-17 18:12:14 +02:00
$parent_qpart = $this -> dbh -> escape_string ( $parent_bare_id );
2012-08-13 12:47:43 +02:00
} else {
$parent_qpart = 'NULL' ;
}
2013-04-17 18:12:14 +02:00
$this -> dbh -> query ( " UPDATE ttrss_feed_categories
2012-08-15 08:10:24 +02:00
SET parent_cat = $parent_qpart WHERE id = '$bare_item_id' AND
2012-08-13 12:47:43 +02:00
owner_uid = " . $_SESSION["uid"] );
}
$order_id = 0 ;
$cat = $data_map [ $item_id ];
if ( $cat && is_array ( $cat )) {
foreach ( $cat as $item ) {
$id = $item [ '_reference' ];
$bare_id = substr ( $id , strpos ( $id , ':' ) + 1 );
2012-08-15 08:10:24 +02:00
if ( $debug ) _debug ( " $prefix [ $order_id ] $id / $bare_id " );
2012-08-13 12:47:43 +02:00
if ( $item [ '_reference' ]) {
if ( strpos ( $id , " FEED " ) === 0 ) {
2012-08-15 08:10:24 +02:00
$cat_id = ( $item_id != " root " ) ?
2013-04-17 18:12:14 +02:00
$this -> dbh -> escape_string ( $bare_item_id ) : " NULL " ;
2012-08-15 08:10:24 +02:00
2012-11-06 12:48:47 +01:00
$cat_qpart = ( $cat_id != 0 ) ? " cat_id = ' $cat_id ' " :
" cat_id = NULL " ;
2013-04-17 18:12:14 +02:00
$this -> dbh -> query ( " UPDATE ttrss_feeds
2012-11-06 12:48:47 +01:00
SET order_id = $order_id , $cat_qpart
2012-08-15 08:10:24 +02:00
WHERE id = '$bare_id' AND
2012-08-13 12:47:43 +02:00
owner_uid = " . $_SESSION["uid"] );
} else if ( strpos ( $id , " CAT: " ) === 0 ) {
2012-08-15 08:10:24 +02:00
$this -> process_category_order ( $data_map , $item [ '_reference' ], $item_id ,
$nest_level + 1 );
2012-08-13 12:47:43 +02:00
if ( $item_id != 'root' ) {
2013-04-17 18:12:14 +02:00
$parent_qpart = $this -> dbh -> escape_string ( $bare_id );
2012-08-13 12:47:43 +02:00
} else {
$parent_qpart = 'NULL' ;
}
2013-04-17 18:12:14 +02:00
$this -> dbh -> query ( " UPDATE ttrss_feed_categories
2012-08-13 12:47:43 +02:00
SET order_id = '$order_id' WHERE id = '$bare_id' AND
owner_uid = " . $_SESSION["uid"] );
}
}
++ $order_id ;
}
}
}
2011-12-13 06:29:22 +01:00
function savefeedorder () {
$data = json_decode ( $_POST [ 'payload' ], true );
2012-08-13 12:47:43 +02:00
#file_put_contents("/tmp/saveorder.json", $_POST['payload']);
#$data = json_decode(file_get_contents("/tmp/saveorder.json"), true);
2012-08-14 17:37:31 +02:00
2012-08-15 08:10:24 +02:00
if ( ! is_array ( $data [ 'items' ]))
$data [ 'items' ] = json_decode ( $data [ 'items' ], true );
# print_r($data['items']);
2012-08-13 12:47:43 +02:00
2011-12-13 06:29:22 +01:00
if ( is_array ( $data ) && is_array ( $data [ 'items' ])) {
2014-02-19 12:42:52 +01:00
# $cat_order_id = 0;
2011-12-13 06:29:22 +01:00
$data_map = array ();
2012-08-13 12:47:43 +02:00
$root_item = false ;
2011-12-13 06:29:22 +01:00
foreach ( $data [ 'items' ] as $item ) {
2012-08-13 12:47:43 +02:00
# if ($item['id'] != 'root') {
2011-12-13 06:29:22 +01:00
if ( is_array ( $item [ 'items' ])) {
if ( isset ( $item [ 'items' ][ '_reference' ])) {
$data_map [ $item [ 'id' ]] = array ( $item [ 'items' ]);
} else {
$data_map [ $item [ 'id' ]] =& $item [ 'items' ];
}
}
2012-08-13 12:47:43 +02:00
if ( $item [ 'id' ] == 'root' ) {
$root_item = $item [ 'id' ];
2011-12-13 06:29:22 +01:00
}
}
2012-08-14 10:18:52 +02:00
$this -> process_category_order ( $data_map , $root_item );
2012-08-13 12:47:43 +02:00
/* foreach ( $data [ 'items' ][ 0 ][ 'items' ] as $item ) {
2011-12-13 06:29:22 +01:00
$id = $item [ '_reference' ];
$bare_id = substr ( $id , strpos ( $id , ':' ) + 1 );
++ $cat_order_id ;
if ( $bare_id > 0 ) {
2013-04-17 18:12:14 +02:00
$this -> dbh -> query ( " UPDATE ttrss_feed_categories
2011-12-13 06:29:22 +01:00
SET order_id = '$cat_order_id' WHERE id = '$bare_id' AND
owner_uid = " . $_SESSION["uid"] );
}
$feed_order_id = 0 ;
if ( is_array ( $data_map [ $id ])) {
foreach ( $data_map [ $id ] as $feed ) {
$id = $feed [ '_reference' ];
$feed_id = substr ( $id , strpos ( $id , ':' ) + 1 );
if ( $bare_id != 0 )
$cat_query = " cat_id = ' $bare_id ' " ;
else
$cat_query = " cat_id = NULL " ;
2013-04-17 18:12:14 +02:00
$this -> dbh -> query ( " UPDATE ttrss_feeds
2011-12-13 06:29:22 +01:00
SET order_id = '$feed_order_id' ,
$cat_query
WHERE id = '$feed_id' AND
owner_uid = " . $_SESSION["uid"] );
++ $feed_order_id ;
}
}
2012-08-13 12:47:43 +02:00
} */
2011-12-13 06:29:22 +01:00
}
return ;
}
function removeicon () {
2013-04-17 18:12:14 +02:00
$feed_id = $this -> dbh -> escape_string ( $_REQUEST [ " feed_id " ]);
2011-12-13 06:29:22 +01:00
2013-04-17 18:12:14 +02:00
$result = $this -> dbh -> query ( " SELECT id FROM ttrss_feeds
2011-12-13 06:29:22 +01:00
WHERE id = '$feed_id' AND owner_uid = " . $_SESSION["uid"] );
2013-04-17 18:12:14 +02:00
if ( $this -> dbh -> num_rows ( $result ) != 0 ) {
2013-04-11 17:12:00 +02:00
@ unlink ( ICONS_DIR . " / $feed_id .ico " );
2013-04-15 16:22:48 +02:00
2013-04-17 18:12:14 +02:00
$this -> dbh -> query ( " UPDATE ttrss_feeds SET favicon_avg_color = NULL
2013-04-15 16:22:48 +02:00
where id = '$feed_id' " );
2011-12-13 06:29:22 +01:00
}
return ;
}
function uploadicon () {
2013-02-28 06:17:17 +01:00
header ( " Content-type: text/html " );
2013-04-11 17:12:00 +02:00
$tmp_file = false ;
if ( is_uploaded_file ( $_FILES [ 'icon_file' ][ 'tmp_name' ])) {
$tmp_file = tempnam ( CACHE_DIR . '/upload' , 'icon' );
$result = move_uploaded_file ( $_FILES [ 'icon_file' ][ 'tmp_name' ],
$tmp_file );
if ( ! $result ) {
return ;
}
} else {
return ;
}
$icon_file = $tmp_file ;
2013-04-17 18:12:14 +02:00
$feed_id = $this -> dbh -> escape_string ( $_REQUEST [ " feed_id " ]);
2011-12-13 06:29:22 +01:00
if ( is_file ( $icon_file ) && $feed_id ) {
2014-10-08 14:38:03 +02:00
if ( filesize ( $icon_file ) < 65535 ) {
2011-12-13 06:29:22 +01:00
2013-04-17 18:12:14 +02:00
$result = $this -> dbh -> query ( " SELECT id FROM ttrss_feeds
2011-12-13 06:29:22 +01:00
WHERE id = '$feed_id' AND owner_uid = " . $_SESSION["uid"] );
2013-04-17 18:12:14 +02:00
if ( $this -> dbh -> num_rows ( $result ) != 0 ) {
2013-04-11 17:12:00 +02:00
@ unlink ( ICONS_DIR . " / $feed_id .ico " );
2013-04-15 16:22:48 +02:00
if ( rename ( $icon_file , ICONS_DIR . " / $feed_id .ico " )) {
2013-04-17 18:12:14 +02:00
$this -> dbh -> query ( " UPDATE ttrss_feeds SET
2013-04-29 14:08:40 +02:00
favicon_avg_color = ''
2013-04-15 16:22:48 +02:00
WHERE id = '$feed_id' " );
$rc = 0 ;
}
2011-12-13 06:29:22 +01:00
} else {
$rc = 2 ;
}
} else {
$rc = 1 ;
}
} else {
$rc = 2 ;
}
2013-04-11 17:12:00 +02:00
@ unlink ( $icon_file );
2011-12-13 06:29:22 +01:00
print " <script type= \" text/javascript \" > " ;
print " parent.uploadIconHandler( $rc ); " ;
print " </script> " ;
return ;
}
function editfeed () {
global $purge_intervals ;
global $update_intervals ;
2013-04-17 18:12:14 +02:00
$feed_id = $this -> dbh -> escape_string ( $_REQUEST [ " id " ]);
2011-12-13 06:29:22 +01:00
2013-04-17 18:12:14 +02:00
$result = $this -> dbh -> query (
2011-12-13 06:29:22 +01:00
" SELECT * FROM ttrss_feeds WHERE id = ' $feed_id ' AND
owner_uid = " . $_SESSION["uid"] );
2013-04-17 18:12:14 +02:00
$auth_pass_encrypted = sql_bool_to_bool ( $this -> dbh -> fetch_result ( $result , 0 ,
2013-04-13 16:24:27 +02:00
" auth_pass_encrypted " ));
2013-04-17 18:12:14 +02:00
$title = htmlspecialchars ( $this -> dbh -> fetch_result ( $result ,
2011-12-13 06:29:22 +01:00
0 , " title " ));
print " <input dojoType= \" dijit.form.TextBox \" style= \" display : none \" name= \" id \" value= \" $feed_id\ " > " ;
print " <input dojoType= \" dijit.form.TextBox \" style= \" display : none \" name= \" op \" value= \" pref-feeds \" > " ;
print " <input dojoType= \" dijit.form.TextBox \" style= \" display : none \" name= \" method \" value= \" editSave \" > " ;
print " <div class= \" dlgSec \" > " . __ ( " Feed " ) . " </div> " ;
print " <div class= \" dlgSecCont \" > " ;
/* Title */
print " <input dojoType= \" dijit.form.ValidationTextBox \" required= \" 1 \"
placeHolder = \ " " . __ ( " Feed Title " ) . " \"
style = \ " font-size : 16px; width: 20em \" name= \" title \" value= \" $title\ " > " ;
/* Feed URL */
2013-04-17 18:12:14 +02:00
$feed_url = $this -> dbh -> fetch_result ( $result , 0 , " feed_url " );
$feed_url = htmlspecialchars ( $this -> dbh -> fetch_result ( $result ,
2011-12-13 06:29:22 +01:00
0 , " feed_url " ));
print " <hr/> " ;
print __ ( 'URL:' ) . " " ;
print " <input dojoType= \" dijit.form.ValidationTextBox \" required= \" 1 \"
placeHolder = \ " " . __ ( " Feed URL " ) . " \"
regExp = '^(http|https)://.*' style = \ " width : 20em \"
name = \ " feed_url \" value= \" $feed_url\ " > " ;
2013-04-17 18:12:14 +02:00
$last_error = $this -> dbh -> fetch_result ( $result , 0 , " last_error " );
2011-12-13 06:29:22 +01:00
if ( $last_error ) {
2013-07-12 10:38:50 +02:00
print " <img src= \" images/error.png \" alt= \" (error) \"
style = \ " vertical-align : middle \"
title = \ " " . htmlspecialchars ( $last_error ) . " \" > " ;
2011-12-13 06:29:22 +01:00
}
/* Category */
2013-04-17 16:34:18 +02:00
if ( get_pref ( 'ENABLE_FEED_CATS' )) {
2011-12-13 06:29:22 +01:00
2013-04-17 18:12:14 +02:00
$cat_id = $this -> dbh -> fetch_result ( $result , 0 , " cat_id " );
2011-12-13 06:29:22 +01:00
print " <hr/> " ;
print __ ( 'Place in category:' ) . " " ;
2013-04-17 16:34:18 +02:00
print_feed_cat_select ( " cat_id " , $cat_id ,
2011-12-13 06:29:22 +01:00
'dojoType="dijit.form.Select"' );
}
print " </div> " ;
print " <div class= \" dlgSec \" > " . __ ( " Update " ) . " </div> " ;
print " <div class= \" dlgSecCont \" > " ;
/* Update Interval */
2013-04-17 18:12:14 +02:00
$update_interval = $this -> dbh -> fetch_result ( $result , 0 , " update_interval " );
2011-12-13 06:29:22 +01:00
print_select_hash ( " update_interval " , $update_interval , $update_intervals ,
'dojoType="dijit.form.Select"' );
2012-12-24 10:45:34 +01:00
/* Purge intl */
2011-12-13 06:29:22 +01:00
2013-04-17 18:12:14 +02:00
$purge_interval = $this -> dbh -> fetch_result ( $result , 0 , " purge_interval " );
2011-12-13 06:29:22 +01:00
print " <hr/> " ;
print __ ( 'Article purging:' ) . " " ;
print_select_hash ( " purge_interval " , $purge_interval , $purge_intervals ,
'dojoType="dijit.form.Select" ' .
(( FORCE_ARTICLE_PURGE == 0 ) ? " " : 'disabled="1"' ));
print " </div> " ;
print " <div class= \" dlgSec \" > " . __ ( " Authentication " ) . " </div> " ;
print " <div class= \" dlgSecCont \" > " ;
2013-04-17 18:12:14 +02:00
$auth_login = htmlspecialchars ( $this -> dbh -> fetch_result ( $result , 0 , " auth_login " ));
2011-12-13 06:29:22 +01:00
print " <input dojoType= \" dijit.form.TextBox \" id= \" feedEditDlg_login \"
placeHolder = \ " " . __ ( " Login " ) . " \"
name = \ " auth_login \" value= \" $auth_login\ " >< hr /> " ;
2013-04-17 18:12:14 +02:00
$auth_pass = $this -> dbh -> fetch_result ( $result , 0 , " auth_pass " );
2013-04-13 16:24:27 +02:00
if ( $auth_pass_encrypted ) {
require_once " crypt.php " ;
$auth_pass = decrypt_string ( $auth_pass );
}
$auth_pass = htmlspecialchars ( $auth_pass );
2011-12-13 06:29:22 +01:00
print " <input dojoType= \" dijit.form.TextBox \" type= \" password \" name= \" auth_pass \"
placeHolder = \ " " . __ ( " Password " ) . " \"
value = \ " $auth_pass\ " > " ;
print " <div dojoType= \" dijit.Tooltip \" connectId= \" feedEditDlg_login \" position= \" below \" >
" .__('<b>Hint:</b> you need to fill in your login information if your feed requires authentication, except for Twitter feeds.'). "
</ div > " ;
print " </div> " ;
print " <div class= \" dlgSec \" > " . __ ( " Options " ) . " </div> " ;
print " <div class= \" dlgSecCont \" > " ;
2013-04-17 18:12:14 +02:00
$private = sql_bool_to_bool ( $this -> dbh -> fetch_result ( $result , 0 , " private " ));
2011-12-13 06:29:22 +01:00
if ( $private ) {
$checked = " checked= \" 1 \" " ;
} else {
$checked = " " ;
}
print " <input dojoType= \" dijit.form.CheckBox \" type= \" checkbox \" name= \" private \" id= \" private \"
$checked >& nbsp ; < label for = \ " private \" > " . __ ( 'Hide from Popular feeds' ) . " </label> " ;
2013-04-17 18:12:14 +02:00
$include_in_digest = sql_bool_to_bool ( $this -> dbh -> fetch_result ( $result , 0 , " include_in_digest " ));
2011-12-13 06:29:22 +01:00
if ( $include_in_digest ) {
$checked = " checked= \" 1 \" " ;
} else {
$checked = " " ;
}
print " <hr/><input dojoType= \" dijit.form.CheckBox \" type= \" checkbox \" id= \" include_in_digest \"
name = \ " include_in_digest \"
$checked >& nbsp ; < label for = \ " include_in_digest \" > " . __ ( 'Include in e-mail digest' ) . " </label> " ;
2013-04-17 18:12:14 +02:00
$always_display_enclosures = sql_bool_to_bool ( $this -> dbh -> fetch_result ( $result , 0 , " always_display_enclosures " ));
2011-12-13 06:29:22 +01:00
if ( $always_display_enclosures ) {
$checked = " checked " ;
} else {
$checked = " " ;
}
print " <hr/><input dojoType= \" dijit.form.CheckBox \" type= \" checkbox \" id= \" always_display_enclosures \"
name = \ " always_display_enclosures \"
$checked >& nbsp ; < label for = \ " always_display_enclosures \" > " . __ ( 'Always display image attachments' ) . " </label> " ;
2013-04-17 18:12:14 +02:00
$hide_images = sql_bool_to_bool ( $this -> dbh -> fetch_result ( $result , 0 , " hide_images " ));
2013-03-19 19:41:10 +01:00
if ( $hide_images ) {
$checked = " checked= \" 1 \" " ;
} else {
$checked = " " ;
}
print " <hr/><input dojoType= \" dijit.form.CheckBox \" type= \" checkbox \" id= \" hide_images \"
name = \ " hide_images \"
$checked >& nbsp ; < label for = \ " hide_images \" > " .
__ ( 'Do not embed images' ) . " </label> " ;
2011-12-13 06:29:22 +01:00
2013-04-17 18:12:14 +02:00
$cache_images = sql_bool_to_bool ( $this -> dbh -> fetch_result ( $result , 0 , " cache_images " ));
2011-12-13 06:29:22 +01:00
if ( $cache_images ) {
$checked = " checked= \" 1 \" " ;
} else {
$checked = " " ;
}
2011-12-26 10:11:08 +01:00
print " <hr/><input dojoType= \" dijit.form.CheckBox \" type= \" checkbox \" id= \" cache_images \"
name = \ " cache_images \"
2011-12-13 06:29:22 +01:00
$checked >& nbsp ; < label for = \ " cache_images \" > " .
2011-12-26 10:11:08 +01:00
__ ( 'Cache images locally' ) . " </label> " ;
2011-12-13 06:29:22 +01:00
2013-04-17 18:12:14 +02:00
$mark_unread_on_update = sql_bool_to_bool ( $this -> dbh -> fetch_result ( $result , 0 , " mark_unread_on_update " ));
2011-12-13 06:29:22 +01:00
if ( $mark_unread_on_update ) {
$checked = " checked " ;
} else {
$checked = " " ;
}
print " <hr/><input dojoType= \" dijit.form.CheckBox \" type= \" checkbox \" id= \" mark_unread_on_update \"
name = \ " mark_unread_on_update \"
$checked >& nbsp ; < label for = \ " mark_unread_on_update \" > " . __ ( 'Mark updated articles as unread' ) . " </label> " ;
print " </div> " ;
/* Icon */
print " <div class= \" dlgSec \" > " . __ ( " Icon " ) . " </div> " ;
print " <div class= \" dlgSecCont \" > " ;
print " <iframe name= \" icon_upload_iframe \"
style = \ " width: 400px; height: 100px; display: none; \" ></iframe> " ;
print " <form style='display : block' target= \" icon_upload_iframe \"
enctype = \ " multipart/form-data \" method= \" POST \"
action = \ " backend.php \" >
< input id = \ " icon_file \" size= \" 10 \" name= \" icon_file \" type= \" file \" >
< input type = \ " hidden \" name= \" op \" value= \" pref-feeds \" >
< input type = \ " hidden \" name= \" feed_id \" value= \" $feed_id\ " >
< input type = \ " hidden \" name= \" method \" value= \" uploadicon \" >
2014-10-08 14:38:03 +02:00
< button class = \ " small \" dojoType= \" dijit.form.Button \" onclick= \" return uploadFeedIcon(); \"
2011-12-13 06:29:22 +01:00
type = \ " submit \" > " . __ ( 'Replace' ) . " </button>
2014-10-08 14:38:03 +02:00
< button class = \ " small \" dojoType= \" dijit.form.Button \" onclick= \" return removeFeedIcon( $feed_id ); \"
2011-12-13 06:29:22 +01:00
type = \ " submit \" > " . __ ( 'Remove' ) . " </button>
</ form > " ;
print " </div> " ;
2013-04-26 12:21:08 +02:00
PluginHost :: getInstance () -> run_hooks ( PluginHost :: HOOK_PREFS_EDIT_FEED ,
" hook_prefs_edit_feed " , $feed_id );
2011-12-13 06:29:22 +01:00
$title = htmlspecialchars ( $title , ENT_QUOTES );
print " <div class='dlgButtons'>
< div style = \ " float : left \" >
< button dojoType = \ " dijit.form.Button \" onclick='return unsubscribeFeed( $feed_id , \" $title\ " ) ' > " .
__ ( 'Unsubscribe' ) . " </button> " ;
if ( PUBSUBHUBBUB_ENABLED ) {
2013-04-17 18:12:14 +02:00
$pubsub_state = $this -> dbh -> fetch_result ( $result , 0 , " pubsub_state " );
2011-12-13 06:29:22 +01:00
$pubsub_btn_disabled = ( $pubsub_state == 2 ) ? " " : " disabled= \" 1 \" " ;
print " <button dojoType= \" dijit.form.Button \" id= \" pubsubReset_Btn \" $pubsub_btn_disabled
onclick = 'return resetPubSub($feed_id, \"$title\")' > " .__('Resubscribe to push updates').
" </button> " ;
}
print " </div> " ;
print " <div dojoType= \" dijit.Tooltip \" connectId= \" pubsubReset_Btn \" position= \" below \" > " .
__ ( 'Resets PubSubHubbub subscription status for push-enabled feeds.' ) . " </div> " ;
print " <button dojoType= \" dijit.form.Button \" onclick= \" return dijit.byId('feedEditDlg').execute() \" > " . __ ( 'Save' ) . " </button>
< button dojoType = \ " dijit.form.Button \" onclick= \" return dijit.byId('feedEditDlg').hide() \" > " . __ ( 'Cancel' ) . " </button>
</ div > " ;
return ;
}
function editfeeds () {
global $purge_intervals ;
global $update_intervals ;
2011-12-13 11:15:42 +01:00
2013-04-17 18:12:14 +02:00
$feed_ids = $this -> dbh -> escape_string ( $_REQUEST [ " ids " ]);
2011-12-13 06:29:22 +01:00
2013-03-28 11:01:25 +01:00
print_notice ( " Enable the options you wish to apply using checkboxes on the right: " );
print " <p> " ;
2012-06-14 19:23:09 +02:00
2011-12-13 06:29:22 +01:00
print " <input dojoType= \" dijit.form.TextBox \" style= \" display : none \" name= \" ids \" value= \" $feed_ids\ " > " ;
print " <input dojoType= \" dijit.form.TextBox \" style= \" display : none \" name= \" op \" value= \" pref-feeds \" > " ;
print " <input dojoType= \" dijit.form.TextBox \" style= \" display : none \" name= \" method \" value= \" batchEditSave \" > " ;
print " <div class= \" dlgSec \" > " . __ ( " Feed " ) . " </div> " ;
print " <div class= \" dlgSecCont \" > " ;
/* Category */
2013-04-17 16:34:18 +02:00
if ( get_pref ( 'ENABLE_FEED_CATS' )) {
2011-12-13 06:29:22 +01:00
print __ ( 'Place in category:' ) . " " ;
2013-05-07 13:18:37 +02:00
print_feed_cat_select ( " cat_id " , false ,
2011-12-13 06:29:22 +01:00
'disabled="1" dojoType="dijit.form.Select"' );
$this -> batch_edit_cbox ( " cat_id " );
}
print " </div> " ;
print " <div class= \" dlgSec \" > " . __ ( " Update " ) . " </div> " ;
print " <div class= \" dlgSecCont \" > " ;
/* Update Interval */
2013-05-07 13:18:37 +02:00
print_select_hash ( " update_interval " , " " , $update_intervals ,
2011-12-13 06:29:22 +01:00
'disabled="1" dojoType="dijit.form.Select"' );
$this -> batch_edit_cbox ( " update_interval " );
/* Purge intl */
if ( FORCE_ARTICLE_PURGE == 0 ) {
print " <br/> " ;
print __ ( 'Article purging:' ) . " " ;
2013-05-07 13:18:37 +02:00
print_select_hash ( " purge_interval " , " " , $purge_intervals ,
2011-12-13 06:29:22 +01:00
'disabled="1" dojoType="dijit.form.Select"' );
$this -> batch_edit_cbox ( " purge_interval " );
}
print " </div> " ;
print " <div class= \" dlgSec \" > " . __ ( " Authentication " ) . " </div> " ;
print " <div class= \" dlgSecCont \" > " ;
print " <input dojoType= \" dijit.form.TextBox \"
placeHolder = \ " " . __ ( " Login " ) . " \" disabled= \" 1 \"
2013-05-07 13:18:37 +02:00
name = \ " auth_login \" value= \" \" > " ;
2011-12-13 06:29:22 +01:00
$this -> batch_edit_cbox ( " auth_login " );
2013-06-25 21:07:09 +02:00
print " <hr/> <input dojoType= \" dijit.form.TextBox \" type= \" password \" name= \" auth_pass \"
2011-12-13 06:29:22 +01:00
placeHolder = \ " " . __ ( " Password " ) . " \" disabled= \" 1 \"
2013-05-07 13:18:37 +02:00
value = \ " \" > " ;
2011-12-13 06:29:22 +01:00
$this -> batch_edit_cbox ( " auth_pass " );
print " </div> " ;
print " <div class= \" dlgSec \" > " . __ ( " Options " ) . " </div> " ;
print " <div class= \" dlgSecCont \" > " ;
print " <input disabled= \" 1 \" type= \" checkbox \" name= \" private \" id= \" private \"
dojoType = \ " dijit.form.CheckBox \" > <label id= \" private_l \" class='insensitive' for= \" private \" > " . __ ( 'Hide from Popular feeds' ) . " </label> " ;
print " " ; $this -> batch_edit_cbox ( " private " , " private_l " );
print " <br/><input disabled= \" 1 \" type= \" checkbox \" id= \" include_in_digest \"
name = \ " include_in_digest \"
dojoType = \ " dijit.form.CheckBox \" > <label id= \" include_in_digest_l \" class='insensitive' for= \" include_in_digest \" > " . __ ( 'Include in e-mail digest' ) . " </label> " ;
print " " ; $this -> batch_edit_cbox ( " include_in_digest " , " include_in_digest_l " );
print " <br/><input disabled= \" 1 \" type= \" checkbox \" id= \" always_display_enclosures \"
name = \ " always_display_enclosures \"
dojoType = \ " dijit.form.CheckBox \" > <label id= \" always_display_enclosures_l \" class='insensitive' for= \" always_display_enclosures \" > " . __ ( 'Always display image attachments' ) . " </label> " ;
print " " ; $this -> batch_edit_cbox ( " always_display_enclosures " , " always_display_enclosures_l " );
2013-03-19 19:41:10 +01:00
print " <br/><input disabled= \" 1 \" type= \" checkbox \" id= \" hide_images \"
name = \ " hide_images \"
dojoType = \ " dijit.form.CheckBox \" > <label class='insensitive' id= \" hide_images_l \"
for = \ " hide_images \" > " .
__ ( 'Do not embed images' ) . " </label> " ;
print " " ; $this -> batch_edit_cbox ( " hide_images " , " hide_images_l " );
2011-12-26 10:11:08 +01:00
print " <br/><input disabled= \" 1 \" type= \" checkbox \" id= \" cache_images \"
name = \ " cache_images \"
dojoType = \ " dijit.form.CheckBox \" > <label class='insensitive' id= \" cache_images_l \"
for = \ " cache_images \" > " .
__ ( 'Cache images locally' ) . " </label> " ;
2011-12-13 06:29:22 +01:00
2011-12-26 10:11:08 +01:00
print " " ; $this -> batch_edit_cbox ( " cache_images " , " cache_images_l " );
2011-12-13 06:29:22 +01:00
print " <br/><input disabled= \" 1 \" type= \" checkbox \" id= \" mark_unread_on_update \"
name = \ " mark_unread_on_update \"
dojoType = \ " dijit.form.CheckBox \" > <label id= \" mark_unread_on_update_l \" class='insensitive' for= \" mark_unread_on_update \" > " . __ ( 'Mark updated articles as unread' ) . " </label> " ;
print " " ; $this -> batch_edit_cbox ( " mark_unread_on_update " , " mark_unread_on_update_l " );
print " </div> " ;
print " <div class='dlgButtons'>
< button dojoType = \ " dijit.form.Button \"
onclick = \ " return dijit.byId('feedEditDlg').execute() \" > " .
__ ( 'Save' ) . " </button>
< button dojoType = \ " dijit.form.Button \"
onclick = \ " return dijit.byId('feedEditDlg').hide() \" > " .
__ ( 'Cancel' ) . " </button>
</ div > " ;
return ;
}
function batchEditSave () {
2011-12-14 09:04:52 +01:00
return $this -> editsaveops ( true );
2011-12-13 06:29:22 +01:00
}
2011-12-13 11:15:42 +01:00
2011-12-13 06:29:22 +01:00
function editSave () {
2011-12-14 09:04:52 +01:00
return $this -> editsaveops ( false );
2011-12-13 06:29:22 +01:00
}
2011-12-13 11:15:42 +01:00
function editsaveops ( $batch ) {
2013-04-17 18:12:14 +02:00
$feed_title = $this -> dbh -> escape_string ( trim ( $_POST [ " title " ]));
$feed_link = $this -> dbh -> escape_string ( trim ( $_POST [ " feed_url " ]));
$upd_intl = ( int ) $this -> dbh -> escape_string ( $_POST [ " update_interval " ]);
$purge_intl = ( int ) $this -> dbh -> escape_string ( $_POST [ " purge_interval " ]);
$feed_id = ( int ) $this -> dbh -> escape_string ( $_POST [ " id " ]); /* editSave */
$feed_ids = $this -> dbh -> escape_string ( $_POST [ " ids " ]); /* batchEditSave */
$cat_id = ( int ) $this -> dbh -> escape_string ( $_POST [ " cat_id " ]);
$auth_login = $this -> dbh -> escape_string ( trim ( $_POST [ " auth_login " ]));
2013-04-13 16:58:09 +02:00
$auth_pass = trim ( $_POST [ " auth_pass " ]);
2013-04-17 18:12:14 +02:00
$private = checkbox_to_sql_bool ( $this -> dbh -> escape_string ( $_POST [ " private " ]));
2011-12-13 06:29:22 +01:00
$include_in_digest = checkbox_to_sql_bool (
2013-04-17 18:12:14 +02:00
$this -> dbh -> escape_string ( $_POST [ " include_in_digest " ]));
2011-12-13 06:29:22 +01:00
$cache_images = checkbox_to_sql_bool (
2013-04-17 18:12:14 +02:00
$this -> dbh -> escape_string ( $_POST [ " cache_images " ]));
2013-03-19 19:41:10 +01:00
$hide_images = checkbox_to_sql_bool (
2013-04-17 18:12:14 +02:00
$this -> dbh -> escape_string ( $_POST [ " hide_images " ]));
2011-12-13 06:29:22 +01:00
$always_display_enclosures = checkbox_to_sql_bool (
2013-04-17 18:12:14 +02:00
$this -> dbh -> escape_string ( $_POST [ " always_display_enclosures " ]));
2011-12-13 06:29:22 +01:00
$mark_unread_on_update = checkbox_to_sql_bool (
2013-04-17 18:12:14 +02:00
$this -> dbh -> escape_string ( $_POST [ " mark_unread_on_update " ]));
2011-12-13 06:29:22 +01:00
2013-04-13 16:24:27 +02:00
if ( strlen ( FEED_CRYPT_KEY ) > 0 ) {
require_once " crypt.php " ;
$auth_pass = substr ( encrypt_string ( $auth_pass ), 0 , 250 );
$auth_pass_encrypted = 'true' ;
} else {
$auth_pass_encrypted = 'false' ;
}
2013-04-17 18:12:14 +02:00
$auth_pass = $this -> dbh -> escape_string ( $auth_pass );
2013-04-13 16:58:09 +02:00
2013-04-17 16:34:18 +02:00
if ( get_pref ( 'ENABLE_FEED_CATS' )) {
2011-12-13 06:29:22 +01:00
if ( $cat_id && $cat_id != 0 ) {
$category_qpart = " cat_id = ' $cat_id ', " ;
$category_qpart_nocomma = " cat_id = ' $cat_id ' " ;
} else {
$category_qpart = 'cat_id = NULL,' ;
$category_qpart_nocomma = 'cat_id = NULL' ;
}
} else {
$category_qpart = " " ;
$category_qpart_nocomma = " " ;
}
2011-12-14 09:04:52 +01:00
if ( ! $batch ) {
2011-12-13 06:29:22 +01:00
2014-02-19 12:42:52 +01:00
$this -> dbh -> query ( " UPDATE ttrss_feeds SET
2011-12-13 06:29:22 +01:00
$category_qpart
title = '$feed_title' , feed_url = '$feed_link' ,
update_interval = '$upd_intl' ,
purge_interval = '$purge_intl' ,
auth_login = '$auth_login' ,
auth_pass = '$auth_pass' ,
2013-04-13 16:24:27 +02:00
auth_pass_encrypted = $auth_pass_encrypted ,
2011-12-13 06:29:22 +01:00
private = $private ,
2012-11-23 10:22:34 +01:00
cache_images = $cache_images ,
2013-03-19 19:41:10 +01:00
hide_images = $hide_images ,
2011-12-13 06:29:22 +01:00
include_in_digest = $include_in_digest ,
always_display_enclosures = $always_display_enclosures ,
2013-02-26 16:20:58 +01:00
mark_unread_on_update = $mark_unread_on_update
2012-12-24 10:45:34 +01:00
WHERE id = '$feed_id' AND owner_uid = " . $_SESSION["uid"] );
2011-12-13 06:29:22 +01:00
2013-04-26 12:23:18 +02:00
PluginHost :: getInstance () -> run_hooks ( PluginHost :: HOOK_PREFS_SAVE_FEED ,
" hook_prefs_save_feed " , $feed_id );
2011-12-14 09:04:52 +01:00
} else {
2011-12-13 06:29:22 +01:00
$feed_data = array ();
foreach ( array_keys ( $_POST ) as $k ) {
if ( $k != " op " && $k != " method " && $k != " ids " ) {
$feed_data [ $k ] = $_POST [ $k ];
}
}
2013-04-17 18:12:14 +02:00
$this -> dbh -> query ( " BEGIN " );
2011-12-13 06:29:22 +01:00
foreach ( array_keys ( $feed_data ) as $k ) {
$qpart = " " ;
switch ( $k ) {
case " title " :
$qpart = " title = ' $feed_title ' " ;
break ;
case " feed_url " :
$qpart = " feed_url = ' $feed_link ' " ;
break ;
case " update_interval " :
$qpart = " update_interval = ' $upd_intl ' " ;
break ;
case " purge_interval " :
$qpart = " purge_interval = ' $purge_intl ' " ;
break ;
case " auth_login " :
$qpart = " auth_login = ' $auth_login ' " ;
break ;
case " auth_pass " :
2013-04-13 16:24:27 +02:00
$qpart = " auth_pass = ' $auth_pass ' AND
auth_pass_encrypted = $auth_pass_encrypted " ;
2011-12-13 06:29:22 +01:00
break ;
case " private " :
2012-03-09 10:05:06 +01:00
$qpart = " private = $private " ;
2011-12-13 06:29:22 +01:00
break ;
case " include_in_digest " :
2012-03-09 10:05:06 +01:00
$qpart = " include_in_digest = $include_in_digest " ;
2011-12-13 06:29:22 +01:00
break ;
case " always_display_enclosures " :
2012-03-09 10:05:06 +01:00
$qpart = " always_display_enclosures = $always_display_enclosures " ;
2011-12-13 06:29:22 +01:00
break ;
case " mark_unread_on_update " :
2012-03-09 10:05:06 +01:00
$qpart = " mark_unread_on_update = $mark_unread_on_update " ;
2011-12-13 06:29:22 +01:00
break ;
case " cache_images " :
2012-03-09 10:05:06 +01:00
$qpart = " cache_images = $cache_images " ;
2011-12-13 06:29:22 +01:00
break ;
2013-03-19 19:41:10 +01:00
case " hide_images " :
$qpart = " hide_images = $hide_images " ;
break ;
2011-12-13 06:29:22 +01:00
case " cat_id " :
$qpart = $category_qpart_nocomma ;
break ;
}
if ( $qpart ) {
2013-04-17 18:12:14 +02:00
$this -> dbh -> query (
2011-12-13 06:29:22 +01:00
" UPDATE ttrss_feeds SET $qpart WHERE id IN ( $feed_ids )
AND owner_uid = " . $_SESSION["uid"] );
print " <br/> " ;
}
}
2013-04-17 18:12:14 +02:00
$this -> dbh -> query ( " COMMIT " );
2011-12-13 06:29:22 +01:00
}
return ;
}
function resetPubSub () {
2013-04-17 18:12:14 +02:00
$ids = $this -> dbh -> escape_string ( $_REQUEST [ " ids " ]);
2011-12-13 06:29:22 +01:00
2013-04-17 18:12:14 +02:00
$this -> dbh -> query ( " UPDATE ttrss_feeds SET pubsub_state = 0 WHERE id IN ( $ids )
2011-12-13 06:29:22 +01:00
AND owner_uid = " . $_SESSION["uid"] );
return ;
}
function remove () {
2013-04-17 18:12:14 +02:00
$ids = explode ( " , " , $this -> dbh -> escape_string ( $_REQUEST [ " ids " ]));
2011-12-13 06:29:22 +01:00
foreach ( $ids as $id ) {
2013-04-17 16:34:18 +02:00
Pref_Feeds :: remove_feed ( $id , $_SESSION [ " uid " ]);
2011-12-13 06:29:22 +01:00
}
return ;
}
function clear () {
2013-04-17 18:12:14 +02:00
$id = $this -> dbh -> escape_string ( $_REQUEST [ " id " ]);
2013-04-17 16:34:18 +02:00
$this -> clear_feed_articles ( $id );
2011-12-13 06:29:22 +01:00
}
function rescore () {
2012-10-30 09:11:46 +01:00
require_once " rssfuncs.php " ;
2013-04-17 18:12:14 +02:00
$ids = explode ( " , " , $this -> dbh -> escape_string ( $_REQUEST [ " ids " ]));
2011-12-13 06:29:22 +01:00
foreach ( $ids as $id ) {
2013-04-17 16:34:18 +02:00
$filters = load_filters ( $id , $_SESSION [ " uid " ], 6 );
2011-12-13 06:29:22 +01:00
2013-04-17 18:12:14 +02:00
$result = $this -> dbh -> query ( " SELECT
2011-12-13 06:29:22 +01:00
title , content , link , ref_id , author , " .
SUBSTRING_FOR_DATE . " (updated, 1, 19) AS updated
FROM
ttrss_user_entries , ttrss_entries
WHERE ref_id = id AND feed_id = '$id' AND
owner_uid = " . $_SESSION['uid'] . "
" );
$scores = array ();
2013-04-17 18:12:14 +02:00
while ( $line = $this -> dbh -> fetch_assoc ( $result )) {
2011-12-13 06:29:22 +01:00
2013-04-17 16:34:18 +02:00
$tags = get_article_tags ( $line [ " ref_id " ]);
2011-12-13 06:29:22 +01:00
$article_filters = get_article_filters ( $filters , $line [ 'title' ],
$line [ 'content' ], $line [ 'link' ], strtotime ( $line [ 'updated' ]),
$line [ 'author' ], $tags );
$new_score = calculate_article_score ( $article_filters );
if ( ! $scores [ $new_score ]) $scores [ $new_score ] = array ();
array_push ( $scores [ $new_score ], $line [ 'ref_id' ]);
}
foreach ( array_keys ( $scores ) as $s ) {
if ( $s > 1000 ) {
2013-04-17 18:12:14 +02:00
$this -> dbh -> query ( " UPDATE ttrss_user_entries SET score = ' $s ',
2011-12-13 06:29:22 +01:00
marked = true WHERE
ref_id IN ( " . join(',', $scores[$s] ) . " ) " );
} else if ( $s < - 500 ) {
2013-04-17 18:12:14 +02:00
$this -> dbh -> query ( " UPDATE ttrss_user_entries SET score = ' $s ',
2011-12-13 06:29:22 +01:00
unread = false WHERE
ref_id IN ( " . join(',', $scores[$s] ) . " ) " );
} else {
2013-04-17 18:12:14 +02:00
$this -> dbh -> query ( " UPDATE ttrss_user_entries SET score = ' $s ' WHERE
2011-12-13 06:29:22 +01:00
ref_id IN ( " . join(',', $scores[$s] ) . " ) " );
}
}
}
print __ ( " All done. " );
}
function rescoreAll () {
2013-04-17 18:12:14 +02:00
$result = $this -> dbh -> query (
2011-12-13 06:29:22 +01:00
" SELECT id FROM ttrss_feeds WHERE owner_uid = " . $_SESSION [ 'uid' ]);
2013-04-17 18:12:14 +02:00
while ( $feed_line = $this -> dbh -> fetch_assoc ( $result )) {
2011-12-13 06:29:22 +01:00
$id = $feed_line [ " id " ];
2013-04-17 16:34:18 +02:00
$filters = load_filters ( $id , $_SESSION [ " uid " ], 6 );
2011-12-13 06:29:22 +01:00
2013-04-17 18:12:14 +02:00
$tmp_result = $this -> dbh -> query ( " SELECT
2011-12-13 06:29:22 +01:00
title , content , link , ref_id , author , " .
SUBSTRING_FOR_DATE . " (updated, 1, 19) AS updated
FROM
ttrss_user_entries , ttrss_entries
WHERE ref_id = id AND feed_id = '$id' AND
owner_uid = " . $_SESSION['uid'] . "
" );
$scores = array ();
2013-04-17 18:12:14 +02:00
while ( $line = $this -> dbh -> fetch_assoc ( $tmp_result )) {
2011-12-13 06:29:22 +01:00
2013-04-17 16:34:18 +02:00
$tags = get_article_tags ( $line [ " ref_id " ]);
2011-12-13 06:29:22 +01:00
$article_filters = get_article_filters ( $filters , $line [ 'title' ],
$line [ 'content' ], $line [ 'link' ], strtotime ( $line [ 'updated' ]),
$line [ 'author' ], $tags );
$new_score = calculate_article_score ( $article_filters );
if ( ! $scores [ $new_score ]) $scores [ $new_score ] = array ();
array_push ( $scores [ $new_score ], $line [ 'ref_id' ]);
}
foreach ( array_keys ( $scores ) as $s ) {
if ( $s > 1000 ) {
2013-04-17 18:12:14 +02:00
$this -> dbh -> query ( " UPDATE ttrss_user_entries SET score = ' $s ',
2011-12-13 06:29:22 +01:00
marked = true WHERE
ref_id IN ( " . join(',', $scores[$s] ) . " ) " );
} else {
2013-04-17 18:12:14 +02:00
$this -> dbh -> query ( " UPDATE ttrss_user_entries SET score = ' $s ' WHERE
2011-12-13 06:29:22 +01:00
ref_id IN ( " . join(',', $scores[$s] ) . " ) " );
}
}
}
print __ ( " All done. " );
}
function categorize () {
2013-04-17 18:12:14 +02:00
$ids = explode ( " , " , $this -> dbh -> escape_string ( $_REQUEST [ " ids " ]));
2011-12-13 06:29:22 +01:00
2013-04-17 18:12:14 +02:00
$cat_id = $this -> dbh -> escape_string ( $_REQUEST [ " cat_id " ]);
2011-12-13 06:29:22 +01:00
if ( $cat_id == 0 ) {
$cat_id_qpart = 'NULL' ;
} else {
$cat_id_qpart = " ' $cat_id ' " ;
}
2013-04-17 18:12:14 +02:00
$this -> dbh -> query ( " BEGIN " );
2011-12-13 06:29:22 +01:00
foreach ( $ids as $id ) {
2013-04-17 18:12:14 +02:00
$this -> dbh -> query ( " UPDATE ttrss_feeds SET cat_id = $cat_id_qpart
2011-12-13 06:29:22 +01:00
WHERE id = '$id'
AND owner_uid = " . $_SESSION["uid"] );
}
2013-04-17 18:12:14 +02:00
$this -> dbh -> query ( " COMMIT " );
2011-12-13 06:29:22 +01:00
}
2012-08-15 07:59:08 +02:00
function removeCat () {
2013-04-17 18:12:14 +02:00
$ids = explode ( " , " , $this -> dbh -> escape_string ( $_REQUEST [ " ids " ]));
2012-08-15 07:59:08 +02:00
foreach ( $ids as $id ) {
2013-04-17 16:34:18 +02:00
$this -> remove_feed_category ( $id , $_SESSION [ " uid " ]);
2012-08-15 07:59:08 +02:00
}
}
function addCat () {
2013-04-17 18:12:14 +02:00
$feed_cat = $this -> dbh -> escape_string ( trim ( $_REQUEST [ " cat " ]));
2012-08-15 07:59:08 +02:00
2013-04-17 16:34:18 +02:00
add_feed_category ( $feed_cat );
2012-08-15 07:59:08 +02:00
}
2011-12-13 06:29:22 +01:00
function index () {
print " <div dojoType= \" dijit.layout.AccordionContainer \" region= \" center \" > " ;
print " <div id= \" pref-feeds-feeds \" dojoType= \" dijit.layout.AccordionPane \" title= \" " . __ ( 'Feeds' ) . " \" > " ;
2013-04-17 18:12:14 +02:00
$result = $this -> dbh -> query ( " SELECT COUNT(id) AS num_errors
2011-12-13 06:29:22 +01:00
FROM ttrss_feeds WHERE last_error != '' AND owner_uid = " . $_SESSION["uid"] );
2013-04-17 18:12:14 +02:00
$num_errors = $this -> dbh -> fetch_result ( $result , 0 , " num_errors " );
2011-12-13 06:29:22 +01:00
if ( $num_errors > 0 ) {
$error_button = " <button dojoType= \" dijit.form.Button \"
onclick = \ " showFeedsWithErrors() \" id= \" errorButton \" > " .
__ ( " Feeds with errors " ) . " </button> " ;
}
if ( DB_TYPE == " pgsql " ) {
$interval_qpart = " NOW() - INTERVAL '3 months' " ;
} else {
$interval_qpart = " DATE_SUB(NOW(), INTERVAL 3 MONTH) " ;
}
2014-05-22 10:10:24 +02:00
// could be performance-intensive and prevent feeds pref-panel from showing
if ( ! defined ( '_DISABLE_INACTIVE_FEEDS' ) || ! _DISABLE_INACTIVE_FEEDS ) {
$result = $this -> dbh -> query ( " SELECT COUNT(*) AS num_inactive FROM ttrss_feeds WHERE
2011-12-13 06:29:22 +01:00
( SELECT MAX ( updated ) FROM ttrss_entries , ttrss_user_entries WHERE
ttrss_entries . id = ref_id AND
ttrss_user_entries . feed_id = ttrss_feeds . id ) < $interval_qpart AND
ttrss_feeds . owner_uid = " . $_SESSION["uid"] );
2014-05-22 10:10:24 +02:00
$num_inactive = $this -> dbh -> fetch_result ( $result , 0 , " num_inactive " );
} else {
$num_inactive = 0 ;
}
2011-12-13 06:29:22 +01:00
if ( $num_inactive > 0 ) {
$inactive_button = " <button dojoType= \" dijit.form.Button \"
onclick = \ " showInactiveFeeds() \" > " .
__ ( " Inactive feeds " ) . " </button> " ;
}
2013-04-17 18:12:14 +02:00
$feed_search = $this -> dbh -> escape_string ( $_REQUEST [ " search " ]);
2011-12-13 06:29:22 +01:00
if ( array_key_exists ( " search " , $_REQUEST )) {
$_SESSION [ " prefs_feed_search " ] = $feed_search ;
} else {
$feed_search = $_SESSION [ " prefs_feed_search " ];
}
print '<div dojoType="dijit.layout.BorderContainer" gutters="false">' ;
print " <div region='top' dojoType= \" dijit.Toolbar \" > " ; #toolbar
print " <div style='float : right; padding-right : 4px;'>
< input dojoType = \ " dijit.form.TextBox \" id= \" feed_search \" size= \" 20 \" type= \" search \"
value = \ " $feed_search\ " >
< button dojoType = \ " dijit.form.Button \" onclick= \" updateFeedList() \" > " .
__ ( 'Search' ) . " </button>
</ div > " ;
print " <div dojoType= \" dijit.form.DropDownButton \" > " .
" <span> " . __ ( 'Select' ) . " </span> " ;
print " <div dojoType= \" dijit.Menu \" style= \" display: none; \" > " ;
print " <div onclick= \" dijit.byId('feedTree').model.setAllChecked(true) \"
dojoType = \ " dijit.MenuItem \" > " . __ ( 'All' ) . " </div> " ;
print " <div onclick= \" dijit.byId('feedTree').model.setAllChecked(false) \"
dojoType = \ " dijit.MenuItem \" > " . __ ( 'None' ) . " </div> " ;
print " </div></div> " ;
print " <div dojoType= \" dijit.form.DropDownButton \" > " .
" <span> " . __ ( 'Feeds' ) . " </span> " ;
print " <div dojoType= \" dijit.Menu \" style= \" display: none; \" > " ;
print " <div onclick= \" quickAddFeed() \"
dojoType = \ " dijit.MenuItem \" > " . __ ( 'Subscribe to feed' ) . " </div> " ;
print " <div onclick= \" editSelectedFeed() \"
dojoType = \ " dijit.MenuItem \" > " . __ ( 'Edit selected feeds' ) . " </div> " ;
print " <div onclick= \" resetFeedOrder() \"
dojoType = \ " dijit.MenuItem \" > " . __ ( 'Reset sort order' ) . " </div> " ;
2012-01-29 14:51:00 +01:00
print " <div onclick= \" batchSubscribe() \"
dojoType = \ " dijit.MenuItem \" > " . __ ( 'Batch subscribe' ) . " </div> " ;
2013-04-02 06:55:35 +02:00
print " <div dojoType= \" dijit.MenuItem \" onclick= \" removeSelectedFeeds() \" > "
. __ ( 'Unsubscribe' ) . " </div> " ;
2011-12-13 06:29:22 +01:00
print " </div></div> " ;
2013-04-17 16:34:18 +02:00
if ( get_pref ( 'ENABLE_FEED_CATS' )) {
2011-12-13 06:29:22 +01:00
print " <div dojoType= \" dijit.form.DropDownButton \" > " .
" <span> " . __ ( 'Categories' ) . " </span> " ;
print " <div dojoType= \" dijit.Menu \" style= \" display: none; \" > " ;
2012-08-15 07:38:57 +02:00
print " <div onclick= \" createCategory() \"
dojoType = \ " dijit.MenuItem \" > " . __ ( 'Add category' ) . " </div> " ;
2011-12-13 06:29:22 +01:00
print " <div onclick= \" resetCatOrder() \"
dojoType = \ " dijit.MenuItem \" > " . __ ( 'Reset sort order' ) . " </div> " ;
2012-09-03 14:06:24 +02:00
print " <div onclick= \" removeSelectedCategories() \"
dojoType = \ " dijit.MenuItem \" > " . __ ( 'Remove selected' ) . " </div> " ;
2011-12-13 06:29:22 +01:00
print " </div></div> " ;
}
print $error_button ;
print $inactive_button ;
if ( defined ( '_ENABLE_FEED_DEBUGGING' )) {
print " <select id= \" feedActionChooser \" onchange= \" feedActionChange() \" >
< option value = \ " facDefault \" selected> " . __ ( 'More actions...' ) . " </option> " ;
if ( FORCE_ARTICLE_PURGE == 0 ) {
print
" <option value= \" facPurge \" > " . __ ( 'Manual purge' ) . " </option> " ;
}
print "
< option value = \ " facClear \" > " . __ ( 'Clear feed data' ) . " </option>
< option value = \ " facRescore \" > " . __ ( 'Rescore articles' ) . " </option> " ;
print " </select> " ;
}
print " </div> " ; # toolbar
//print '</div>';
print '<div dojoType="dijit.layout.ContentPane" region="center">' ;
print " <div id= \" feedlistLoading \" >
< img src = 'images/indicator_tiny.gif' > " .
__ ( " Loading, please wait... " ) . " </div> " ;
print " <div dojoType= \" fox.PrefFeedStore \" jsId= \" feedStore \"
url = \ " backend.php?op=pref-feeds&method=getfeedtree \" >
</ div >
< div dojoType = \ " lib.CheckBoxStoreModel \" jsId= \" feedModel \" store= \" feedStore \"
query = \ " { id:'root'} \" rootId= \" root \" rootLabel= \" Feeds \"
childrenAttrs = \ " items \" checkboxStrict= \" false \" checkboxAll= \" false \" >
</ div >
< div dojoType = \ " fox.PrefFeedTree \" id= \" feedTree \"
dndController = \ " dijit.tree.dndSource \"
betweenThreshold = \ " 5 \"
model = \ " feedModel \" openOnClick= \" false \" >
< script type = \ " dojo/method \" event= \" onClick \" args= \" item \" >
var id = String ( item . id );
var bare_id = id . substr ( id . indexOf ( ':' ) + 1 );
if ( id . match ( 'FEED:' )) {
editFeed ( bare_id );
} else if ( id . match ( 'CAT:' )) {
editCat ( bare_id , item );
}
</ script >
< script type = \ " dojo/method \" event= \" onLoad \" args= \" item \" >
Element . hide ( \ " feedlistLoading \" );
</ script >
</ div > " ;
2012-08-15 08:48:25 +02:00
# print "<div dojoType=\"dijit.Tooltip\" connectId=\"feedTree\" position=\"below\">
# ".__('<b>Hint:</b> you can drag feeds and categories around.')."
# </div>";
2011-12-13 06:29:22 +01:00
print '</div>' ;
print '</div>' ;
print " </div> " ; # feeds pane
2012-12-24 12:03:19 +01:00
print " <div dojoType= \" dijit.layout.AccordionPane \" title= \" " . __ ( 'OPML' ) . " \" > " ;
2011-12-13 06:29:22 +01:00
2013-05-12 10:36:25 +02:00
print_notice ( __ ( " Using OPML you can export and import your feeds, filters, labels and Tiny Tiny RSS settings. " ) . __ ( " Only main settings profile can be migrated using OPML. " ));
2011-12-13 06:29:22 +01:00
2011-12-27 20:10:04 +01:00
print " <iframe id= \" upload_iframe \"
2011-12-13 06:29:22 +01:00
name = \ " upload_iframe \" onload= \" opmlImportComplete(this) \"
style = \ " width: 400px; height: 100px; display: none; \" ></iframe> " ;
print " <form name= \" opml_form \" style='display : block' target= \" upload_iframe \"
enctype = \ " multipart/form-data \" method= \" POST \"
2011-12-27 20:10:04 +01:00
action = \ " backend.php \" >
2011-12-13 06:29:22 +01:00
< input id = \ " opml_file \" name= \" opml_file \" type= \" file \" >
< input type = \ " hidden \" name= \" op \" value= \" dlg \" >
2011-12-22 13:45:19 +01:00
< input type = \ " hidden \" name= \" method \" value= \" importOpml \" >
2011-12-13 06:29:22 +01:00
< button dojoType = \ " dijit.form.Button \" onclick= \" return opmlImport(); \" type= \" submit \" > " .
2011-12-28 06:43:17 +01:00
__ ( 'Import my OPML' ) . " </button> " ;
2011-12-13 06:29:22 +01:00
2011-12-28 06:43:17 +01:00
print " <hr> " ;
2011-12-13 06:29:22 +01:00
print " <p> " . __ ( 'Filename:' ) .
" <input type= \" text \" id= \" filename \" value= \" TinyTinyRSS.opml \" /> " .
2011-12-28 06:43:17 +01:00
__ ( 'Include settings' ) . " <input type= \" checkbox \" id= \" settings \" checked= \" 1 \" /> " ;
2011-12-13 06:29:22 +01:00
2011-12-28 06:43:17 +01:00
print " </p><button dojoType= \" dijit.form.Button \"
2011-12-13 06:29:22 +01:00
onclick = \ " gotoExportOpml(document.opml_form.filename.value, document.opml_form.settings.checked) \" > " .
2011-12-28 06:43:17 +01:00
__ ( 'Export OPML' ) . " </button></p></form> " ;
2011-12-13 06:29:22 +01:00
2011-12-28 06:43:17 +01:00
print " <hr> " ;
2011-12-13 06:29:22 +01:00
print " <p> " . __ ( 'Your OPML can be published publicly and can be subscribed by anyone who knows the URL below.' ) . " " ;
2011-12-27 18:09:22 +01:00
print __ ( " Published OPML does not include your Tiny Tiny RSS settings, feeds that require authentication or feeds hidden from Popular feeds. " ) . " </p> " ;
2011-12-13 06:29:22 +01:00
2013-04-01 08:47:41 +02:00
print " <button dojoType= \" dijit.form.Button \" onclick= \" return displayDlg(' " . __ ( " Public OPML URL " ) . " ','pubOPMLUrl') \" > " .
2011-12-28 06:43:17 +01:00
__ ( 'Display published OPML URL' ) . " </button> " ;
2011-12-13 06:29:22 +01:00
2013-04-18 10:27:34 +02:00
PluginHost :: getInstance () -> run_hooks ( PluginHost :: HOOK_PREFS_TAB_SECTION ,
2012-12-26 22:12:28 +01:00
" hook_prefs_tab_section " , " prefFeedsOPML " );
2011-12-13 06:29:22 +01:00
print " </div> " ; # pane
if ( strpos ( $_SERVER [ 'HTTP_USER_AGENT' ], " Firefox " ) !== false ) {
print " <div dojoType= \" dijit.layout.AccordionPane \" title= \" " . __ ( 'Firefox integration' ) . " \" > " ;
2013-05-12 10:36:25 +02:00
print_notice ( __ ( 'This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the link below.' ));
2011-12-13 06:29:22 +01:00
print " <p> " ;
print " <button onclick='window.navigator.registerContentHandler( " .
" \" application/vnd.mozilla.maybe.feed \" , " .
" \" " . add_feed_url () . " \" , " . " \" Tiny Tiny RSS \" )'> " .
__ ( 'Click here to register this site as a feed reader.' ) .
" </button> " ;
print " </p> " ;
print " </div> " ; # pane
}
2012-01-30 13:39:40 +01:00
print " <div dojoType= \" dijit.layout.AccordionPane \" title= \" " . __ ( 'Published & shared articles / Generated feeds' ) . " \" > " ;
2011-12-13 06:29:22 +01:00
2013-05-12 10:36:25 +02:00
print_notice ( __ ( 'Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the URL specified below.' ));
2011-12-13 06:29:22 +01:00
$rss_url = '-2::' . htmlspecialchars ( get_self_url_prefix () .
" /public.php?op=rss&id=-2&view-mode=all_articles " );;
2013-05-12 10:36:25 +02:00
print " <p> " ;
2013-04-01 08:47:41 +02:00
print " <button dojoType= \" dijit.form.Button \" onclick= \" return displayDlg(' " . __ ( " View as RSS " ) . " ','generatedFeed', ' $rss_url ') \" > " .
2011-12-13 06:29:22 +01:00
__ ( 'Display URL' ) . " </button> " ;
print " <button dojoType= \" dijit.form.Button \" onclick= \" return clearFeedAccessKeys() \" > " .
__ ( 'Clear all generated URLs' ) . " </button> " ;
2013-05-12 10:36:25 +02:00
print " </p> " ;
2011-12-13 06:29:22 +01:00
2013-04-18 10:27:34 +02:00
PluginHost :: getInstance () -> run_hooks ( PluginHost :: HOOK_PREFS_TAB_SECTION ,
2012-12-26 22:12:28 +01:00
" hook_prefs_tab_section " , " prefFeedsPublishedGenerated " );
2011-12-13 06:29:22 +01:00
print " </div> " ; #pane
2013-04-18 10:27:34 +02:00
PluginHost :: getInstance () -> run_hooks ( PluginHost :: HOOK_PREFS_TAB ,
2012-12-23 13:15:34 +01:00
" hook_prefs_tab " , " prefFeeds " );
2011-12-13 06:29:22 +01:00
print " </div> " ; #container
}
2012-08-13 16:56:55 +02:00
2013-02-27 12:34:13 +01:00
private function feedlist_init_cat ( $cat_id ) {
2012-08-13 16:56:55 +02:00
$obj = array ();
$cat_id = ( int ) $cat_id ;
if ( $cat_id > 0 ) {
2013-04-17 16:34:18 +02:00
$cat_unread = ccache_find ( $cat_id , $_SESSION [ " uid " ], true );
2012-08-13 16:56:55 +02:00
} else if ( $cat_id == 0 || $cat_id == - 2 ) {
2013-04-17 16:34:18 +02:00
$cat_unread = getCategoryUnread ( $cat_id );
2012-08-13 16:56:55 +02:00
}
$obj [ 'id' ] = 'CAT:' . $cat_id ;
$obj [ 'items' ] = array ();
2013-04-17 16:34:18 +02:00
$obj [ 'name' ] = getCategoryTitle ( $cat_id );
2012-08-13 16:56:55 +02:00
$obj [ 'type' ] = 'category' ;
$obj [ 'unread' ] = ( int ) $cat_unread ;
$obj [ 'bare_id' ] = $cat_id ;
return $obj ;
}
private function feedlist_init_feed ( $feed_id , $title = false , $unread = false , $error = '' , $updated = '' ) {
$obj = array ();
$feed_id = ( int ) $feed_id ;
if ( ! $title )
2013-04-17 16:34:18 +02:00
$title = getFeedTitle ( $feed_id , false );
2012-08-13 16:56:55 +02:00
if ( $unread === false )
2013-04-17 16:34:18 +02:00
$unread = getFeedUnread ( $feed_id , false );
2012-08-13 16:56:55 +02:00
$obj [ 'id' ] = 'FEED:' . $feed_id ;
$obj [ 'name' ] = $title ;
$obj [ 'unread' ] = ( int ) $unread ;
$obj [ 'type' ] = 'feed' ;
$obj [ 'error' ] = $error ;
$obj [ 'updated' ] = $updated ;
$obj [ 'icon' ] = getFeedIcon ( $feed_id );
$obj [ 'bare_id' ] = $feed_id ;
2013-05-15 23:08:04 +02:00
$obj [ 'auxcounter' ] = 0 ;
2012-08-13 16:56:55 +02:00
return $obj ;
}
2012-09-14 10:30:04 +02:00
function inactiveFeeds () {
if ( DB_TYPE == " pgsql " ) {
$interval_qpart = " NOW() - INTERVAL '3 months' " ;
} else {
$interval_qpart = " DATE_SUB(NOW(), INTERVAL 3 MONTH) " ;
}
2013-04-17 18:12:14 +02:00
$result = $this -> dbh -> query ( " SELECT ttrss_feeds.title, ttrss_feeds.site_url,
2012-09-14 10:30:04 +02:00
ttrss_feeds . feed_url , ttrss_feeds . id , MAX ( updated ) AS last_article
FROM ttrss_feeds , ttrss_entries , ttrss_user_entries WHERE
( SELECT MAX ( updated ) FROM ttrss_entries , ttrss_user_entries WHERE
ttrss_entries . id = ref_id AND
ttrss_user_entries . feed_id = ttrss_feeds . id ) < $interval_qpart
AND ttrss_feeds . owner_uid = " . $_SESSION["uid"] . " AND
ttrss_user_entries . feed_id = ttrss_feeds . id AND
ttrss_entries . id = ref_id
GROUP BY ttrss_feeds . title , ttrss_feeds . id , ttrss_feeds . site_url , ttrss_feeds . feed_url
ORDER BY last_article " );
2013-05-12 10:36:25 +02:00
print " <p " . __ ( " These feeds have not been updated with new content for 3 months (oldest first): " ) . " </p> " ;
2012-09-14 10:30:04 +02:00
print " <div dojoType= \" dijit.Toolbar \" > " ;
print " <div dojoType= \" dijit.form.DropDownButton \" > " .
" <span> " . __ ( 'Select' ) . " </span> " ;
print " <div dojoType= \" dijit.Menu \" style= \" display: none; \" > " ;
print " <div onclick= \" selectTableRows('prefInactiveFeedList', 'all') \"
dojoType = \ " dijit.MenuItem \" > " . __ ( 'All' ) . " </div> " ;
print " <div onclick= \" selectTableRows('prefInactiveFeedList', 'none') \"
dojoType = \ " dijit.MenuItem \" > " . __ ( 'None' ) . " </div> " ;
print " </div></div> " ;
print " </div> " ; #toolbar
print " <div class= \" inactiveFeedHolder \" > " ;
print " <table width= \" 100% \" cellspacing= \" 0 \" id= \" prefInactiveFeedList \" > " ;
$lnum = 1 ;
2013-04-17 18:12:14 +02:00
while ( $line = $this -> dbh -> fetch_assoc ( $result )) {
2012-09-14 10:30:04 +02:00
$feed_id = $line [ " id " ];
$this_row_id = " id= \" FUPDD- $feed_id\ " " ;
# class needed for selectTableRows()
print " <tr class= \" placeholder \" $this_row_id > " ;
# id needed for selectTableRows()
print " <td width='5%' align='center'><input
onclick = 'toggleSelectRow2(this);' dojoType = \ " dijit.form.CheckBox \"
type = \ " checkbox \" id= \" FUPDC- $feed_id\ " ></ td > " ;
print " <td> " ;
print " <a class= \" visibleLink \" href= \" # \" " .
" title= \" " . __ ( " Click to edit feed " ) . " \" " .
" onclick= \" editFeed( " . $line [ " id " ] . " ) \" > " .
htmlspecialchars ( $line [ " title " ]) . " </a> " ;
print " </td><td class= \" insensitive \" align='right'> " ;
2013-04-17 16:34:18 +02:00
print make_local_datetime ( $line [ 'last_article' ], false );
2012-09-14 10:30:04 +02:00
print " </td> " ;
print " </tr> " ;
++ $lnum ;
}
print " </table> " ;
print " </div> " ;
print " <div class='dlgButtons'> " ;
print " <div style='float : left'> " ;
print " <button dojoType= \" dijit.form.Button \" onclick= \" dijit.byId('inactiveFeedsDlg').removeSelected() \" > "
. __ ( 'Unsubscribe from selected feeds' ) . " </button> " ;
print " </div> " ;
print " <button dojoType= \" dijit.form.Button \" onclick= \" dijit.byId('inactiveFeedsDlg').hide() \" > " .
__ ( 'Close this window' ) . " </button> " ;
print " </div> " ;
}
function feedsWithErrors () {
2013-04-17 18:12:14 +02:00
$result = $this -> dbh -> query ( " SELECT id,title,feed_url,last_error,site_url
2012-09-14 10:30:04 +02:00
FROM ttrss_feeds WHERE last_error != '' AND owner_uid = " . $_SESSION["uid"] );
print " <div dojoType= \" dijit.Toolbar \" > " ;
print " <div dojoType= \" dijit.form.DropDownButton \" > " .
" <span> " . __ ( 'Select' ) . " </span> " ;
print " <div dojoType= \" dijit.Menu \" style= \" display: none; \" > " ;
print " <div onclick= \" selectTableRows('prefErrorFeedList', 'all') \"
dojoType = \ " dijit.MenuItem \" > " . __ ( 'All' ) . " </div> " ;
print " <div onclick= \" selectTableRows('prefErrorFeedList', 'none') \"
dojoType = \ " dijit.MenuItem \" > " . __ ( 'None' ) . " </div> " ;
print " </div></div> " ;
print " </div> " ; #toolbar
print " <div class= \" inactiveFeedHolder \" > " ;
print " <table width= \" 100% \" cellspacing= \" 0 \" id= \" prefErrorFeedList \" > " ;
$lnum = 1 ;
2013-04-17 18:12:14 +02:00
while ( $line = $this -> dbh -> fetch_assoc ( $result )) {
2012-09-14 10:30:04 +02:00
$feed_id = $line [ " id " ];
$this_row_id = " id= \" FERDD- $feed_id\ " " ;
# class needed for selectTableRows()
print " <tr class= \" placeholder \" $this_row_id > " ;
# id needed for selectTableRows()
print " <td width='5%' align='center'><input
onclick = 'toggleSelectRow2(this);' dojoType = \ " dijit.form.CheckBox \"
type = \ " checkbox \" id= \" FERDC- $feed_id\ " ></ td > " ;
print " <td> " ;
print " <a class= \" visibleLink \" href= \" # \" " .
" title= \" " . __ ( " Click to edit feed " ) . " \" " .
" onclick= \" editFeed( " . $line [ " id " ] . " ) \" > " .
htmlspecialchars ( $line [ " title " ]) . " </a>: " ;
print " <span class= \" insensitive \" > " ;
print htmlspecialchars ( $line [ " last_error " ]);
print " </span> " ;
print " </td> " ;
print " </tr> " ;
++ $lnum ;
}
print " </table> " ;
print " </div> " ;
print " <div class='dlgButtons'> " ;
print " <div style='float : left'> " ;
print " <button dojoType= \" dijit.form.Button \" onclick= \" dijit.byId('errorFeedsDlg').removeSelected() \" > "
. __ ( 'Unsubscribe from selected feeds' ) . " </button> " ;
print " </div> " ;
print " <button dojoType= \" dijit.form.Button \" onclick= \" dijit.byId('errorFeedsDlg').hide() \" > " .
__ ( 'Close this window' ) . " </button> " ;
print " </div> " ;
}
2013-01-22 19:32:17 +01:00
/**
* Purge a feed contents , marked articles excepted .
*
* @ param mixed $link The database connection .
* @ param integer $id The id of the feed to purge .
* @ return void
*/
2013-04-17 14:23:15 +02:00
private function clear_feed_articles ( $id ) {
2013-01-22 19:32:17 +01:00
if ( $id != 0 ) {
2013-04-17 18:12:14 +02:00
$result = $this -> dbh -> query ( " DELETE FROM ttrss_user_entries
2013-01-22 19:32:17 +01:00
WHERE feed_id = '$id' AND marked = false AND owner_uid = " . $_SESSION["uid"] );
} else {
2013-04-17 18:12:14 +02:00
$result = $this -> dbh -> query ( " DELETE FROM ttrss_user_entries
2013-01-22 19:32:17 +01:00
WHERE feed_id IS NULL AND marked = false AND owner_uid = " . $_SESSION["uid"] );
}
2013-04-17 18:12:14 +02:00
$result = $this -> dbh -> query ( " DELETE FROM ttrss_entries WHERE
2013-01-22 19:32:17 +01:00
( SELECT COUNT ( int_id ) FROM ttrss_user_entries WHERE ref_id = id ) = 0 " );
2013-04-17 16:34:18 +02:00
ccache_update ( $id , $_SESSION [ 'uid' ]);
2013-01-22 19:32:17 +01:00
} // function clear_feed_articles
2013-04-17 16:34:18 +02:00
private function remove_feed_category ( $id , $owner_uid ) {
2013-01-22 19:38:18 +01:00
2013-04-17 18:12:14 +02:00
$this -> dbh -> query ( " DELETE FROM ttrss_feed_categories
2013-01-22 19:38:18 +01:00
WHERE id = '$id' AND owner_uid = $owner_uid " );
2013-04-17 16:34:18 +02:00
ccache_remove ( $id , $owner_uid , true );
2013-01-22 19:38:18 +01:00
}
2013-04-17 16:34:18 +02:00
static function remove_feed ( $id , $owner_uid ) {
2013-01-22 19:38:18 +01:00
if ( $id > 0 ) {
/* save starred articles in Archived feed */
2013-04-17 16:34:18 +02:00
db_query ( " BEGIN " );
2013-01-22 19:38:18 +01:00
/* prepare feed if necessary */
2013-04-17 16:34:18 +02:00
$result = db_query ( " SELECT feed_url FROM ttrss_feeds WHERE id = $id
2013-03-30 18:45:24 +01:00
AND owner_uid = $owner_uid " );
2013-04-17 16:34:18 +02:00
$feed_url = db_escape_string ( db_fetch_result ( $result , 0 , " feed_url " ));
2013-03-30 18:45:24 +01:00
2013-04-17 16:34:18 +02:00
$result = db_query ( " SELECT id FROM ttrss_archived_feeds
2013-03-30 18:45:24 +01:00
WHERE feed_url = '$feed_url' AND owner_uid = $owner_uid " );
2013-01-22 19:38:18 +01:00
if ( db_num_rows ( $result ) == 0 ) {
2013-04-17 16:34:18 +02:00
$result = db_query ( " SELECT MAX(id) AS id FROM ttrss_archived_feeds " );
2013-04-08 11:58:48 +02:00
$new_feed_id = ( int ) db_fetch_result ( $result , 0 , " id " ) + 1 ;
2013-04-17 16:34:18 +02:00
db_query ( " INSERT INTO ttrss_archived_feeds
2013-01-22 19:38:18 +01:00
( id , owner_uid , title , feed_url , site_url )
2013-04-08 11:58:48 +02:00
SELECT $new_feed_id , owner_uid , title , feed_url , site_url from ttrss_feeds
2013-03-30 18:45:24 +01:00
WHERE id = '$id' " );
2013-04-08 11:58:48 +02:00
$archive_id = $new_feed_id ;
2013-03-30 18:45:24 +01:00
} else {
$archive_id = db_fetch_result ( $result , 0 , " id " );
2013-01-22 19:38:18 +01:00
}
2013-04-17 16:34:18 +02:00
db_query ( " UPDATE ttrss_user_entries SET feed_id = NULL,
2013-03-30 18:45:24 +01:00
orig_feed_id = '$archive_id' WHERE feed_id = '$id' AND
2013-01-22 19:38:18 +01:00
marked = true AND owner_uid = $owner_uid " );
/* Remove access key for the feed */
2013-04-17 16:34:18 +02:00
db_query ( " DELETE FROM ttrss_access_keys WHERE
2013-01-22 19:38:18 +01:00
feed_id = '$id' AND owner_uid = $owner_uid " );
/* remove the feed */
2013-04-17 16:34:18 +02:00
db_query ( " DELETE FROM ttrss_feeds
2013-01-22 19:38:18 +01:00
WHERE id = '$id' AND owner_uid = $owner_uid " );
2013-04-17 16:34:18 +02:00
db_query ( " COMMIT " );
2013-01-22 19:38:18 +01:00
if ( file_exists ( ICONS_DIR . " / $id .ico " )) {
unlink ( ICONS_DIR . " / $id .ico " );
}
2013-04-17 16:34:18 +02:00
ccache_remove ( $id , $owner_uid );
2013-01-22 19:38:18 +01:00
} else {
2013-04-17 16:34:18 +02:00
label_remove ( feed_to_label_id ( $id ), $owner_uid );
//ccache_remove($id, $owner_uid); don't think labels are cached
2013-01-22 19:38:18 +01:00
}
}
2013-01-22 19:32:17 +01:00
2013-04-01 10:36:57 +02:00
function batchSubscribe () {
2013-04-02 12:32:10 +02:00
print " <input dojoType= \" dijit.form.TextBox \" style= \" display : none \" name= \" op \" value= \" pref-feeds \" > " ;
2013-04-01 10:36:57 +02:00
print " <input dojoType= \" dijit.form.TextBox \" style= \" display : none \" name= \" method \" value= \" batchaddfeeds \" > " ;
print " <table width='100%'><tr><td>
" .__( " Add one valid RSS feed per line ( no feed detection is done ) " ). "
</ td >< td align = 'right' > " ;
2013-04-17 16:34:18 +02:00
if ( get_pref ( 'ENABLE_FEED_CATS' )) {
2013-04-01 10:36:57 +02:00
print __ ( 'Place in category:' ) . " " ;
2013-04-17 16:34:18 +02:00
print_feed_cat_select ( " cat " , false , 'dojoType="dijit.form.Select"' );
2013-04-01 10:36:57 +02:00
}
print " </td></tr><tr><td colspan='2'> " ;
print " <textarea
style = 'font-size : 12px; width : 100%; height: 200px;'
placeHolder = \ " " . __ ( " Feeds to subscribe, One per line " ) . " \"
dojoType = \ " dijit.form.SimpleTextarea \" required= \" 1 \" name= \" feeds \" ></textarea> " ;
print " </td></tr><tr><td colspan='2'> " ;
print " <div id='feedDlg_loginContainer' style='display : none'>
" .
" <input dojoType= \" dijit.form.TextBox \" name='login' \"
placeHolder = \ " " . __ ( " Login " ) . " \"
style = \ " width : 10em; \" > " .
" <input
placeHolder = \ " " . __ ( " Password " ) . " \"
dojoType = \ " dijit.form.TextBox \" type='password'
style = \ " width : 10em; \" name='pass' \" > " .
" </div> " ;
print " </td></tr><tr><td colspan='2'> " ;
print " <div style= \" clear : both \" >
< input type = \ " checkbox \" name= \" need_auth \" dojoType= \" dijit.form.CheckBox \" id= \" feedDlg_loginCheck \"
onclick = 'checkboxToggleElement(this, \"feedDlg_loginContainer\")' >
< label for = \ " feedDlg_loginCheck \" > " .
__ ( 'Feeds require authentication.' ) . " </div> " ;
print " </form> " ;
print " </td></tr></table> " ;
print " <div class= \" dlgButtons \" >
< button dojoType = \ " dijit.form.Button \" onclick= \" return dijit.byId('batchSubDlg').execute() \" > " . __ ( 'Subscribe' ) . " </button>
< button dojoType = \ " dijit.form.Button \" onclick= \" return dijit.byId('batchSubDlg').hide() \" > " . __ ( 'Cancel' ) . " </button>
</ div > " ;
}
2013-04-02 12:32:10 +02:00
function batchAddFeeds () {
2013-04-17 18:12:14 +02:00
$cat_id = $this -> dbh -> escape_string ( $_REQUEST [ 'cat' ]);
2013-04-05 07:08:28 +02:00
$feeds = explode ( " \n " , $_REQUEST [ 'feeds' ]);
2013-04-17 18:12:14 +02:00
$login = $this -> dbh -> escape_string ( $_REQUEST [ 'login' ]);
2013-04-13 16:58:09 +02:00
$pass = trim ( $_REQUEST [ 'pass' ]);
2013-04-02 12:32:10 +02:00
foreach ( $feeds as $feed ) {
2013-04-17 18:12:14 +02:00
$feed = $this -> dbh -> escape_string ( trim ( $feed ));
2013-04-02 12:32:10 +02:00
if ( validate_feed_url ( $feed )) {
2013-04-17 18:12:14 +02:00
$this -> dbh -> query ( " BEGIN " );
2013-04-02 12:32:10 +02:00
if ( $cat_id == " 0 " || ! $cat_id ) {
$cat_qpart = " NULL " ;
} else {
$cat_qpart = " ' $cat_id ' " ;
}
2013-04-17 18:12:14 +02:00
$result = $this -> dbh -> query (
2013-04-02 12:32:10 +02:00
" SELECT id FROM ttrss_feeds
WHERE feed_url = '$feed' AND owner_uid = " . $_SESSION["uid"] );
2013-04-13 16:24:27 +02:00
if ( strlen ( FEED_CRYPT_KEY ) > 0 ) {
require_once " crypt.php " ;
$pass = substr ( encrypt_string ( $pass ), 0 , 250 );
$auth_pass_encrypted = 'true' ;
} else {
$auth_pass_encrypted = 'false' ;
}
2013-04-17 18:12:14 +02:00
$pass = $this -> dbh -> escape_string ( $pass );
2013-04-13 16:58:09 +02:00
2013-04-17 18:12:14 +02:00
if ( $this -> dbh -> num_rows ( $result ) == 0 ) {
$result = $this -> dbh -> query (
2013-04-02 12:32:10 +02:00
" INSERT INTO ttrss_feeds
2013-04-13 16:24:27 +02:00
( owner_uid , feed_url , title , cat_id , auth_login , auth_pass , update_method , auth_pass_encrypted )
2013-04-02 12:32:10 +02:00
VALUES ( '".$_SESSION["uid"]."' , '$feed' ,
2013-04-13 16:24:27 +02:00
'[Unknown]' , $cat_qpart , '$login' , '$pass' , 0 , $auth_pass_encrypted ) " );
2013-04-02 12:32:10 +02:00
}
2013-04-17 18:12:14 +02:00
$this -> dbh -> query ( " COMMIT " );
2013-04-02 12:32:10 +02:00
}
}
}
2013-04-01 10:36:57 +02:00
2013-04-02 12:47:43 +02:00
function regenOPMLKey () {
2013-04-17 16:34:18 +02:00
$this -> update_feed_access_key ( 'OPML:Publish' ,
2013-04-02 12:47:43 +02:00
false , $_SESSION [ " uid " ]);
2013-04-17 14:23:15 +02:00
$new_link = Opml :: opml_publish_url ();
2013-04-02 12:47:43 +02:00
print json_encode ( array ( " link " => $new_link ));
}
function regenFeedKey () {
2013-04-17 18:12:14 +02:00
$feed_id = $this -> dbh -> escape_string ( $_REQUEST [ 'id' ]);
$is_cat = $this -> dbh -> escape_string ( $_REQUEST [ 'is_cat' ]) == " true " ;
2013-04-02 12:47:43 +02:00
2013-04-17 16:34:18 +02:00
$new_key = $this -> update_feed_access_key ( $feed_id , $is_cat );
2013-04-02 12:47:43 +02:00
print json_encode ( array ( " link " => $new_key ));
}
2013-04-17 16:34:18 +02:00
private function update_feed_access_key ( $feed_id , $is_cat , $owner_uid = false ) {
2013-04-02 12:47:43 +02:00
if ( ! $owner_uid ) $owner_uid = $_SESSION [ " uid " ];
$sql_is_cat = bool_to_sql_bool ( $is_cat );
2013-04-17 18:12:14 +02:00
$result = $this -> dbh -> query ( " SELECT access_key FROM ttrss_access_keys
2013-04-02 12:47:43 +02:00
WHERE feed_id = '$feed_id' AND is_cat = $sql_is_cat
AND owner_uid = " . $owner_uid );
2013-04-17 18:12:14 +02:00
if ( $this -> dbh -> num_rows ( $result ) == 1 ) {
2015-08-03 18:21:06 +02:00
$key = $this -> dbh -> escape_string ( uniqid_short ());
2013-04-02 12:47:43 +02:00
2013-04-17 18:12:14 +02:00
$this -> dbh -> query ( " UPDATE ttrss_access_keys SET access_key = ' $key '
2013-04-02 12:47:43 +02:00
WHERE feed_id = '$feed_id' AND is_cat = $sql_is_cat
AND owner_uid = " . $owner_uid );
return $key ;
} else {
2013-04-17 16:34:18 +02:00
return get_feed_access_key ( $feed_id , $is_cat , $owner_uid );
2013-04-02 12:47:43 +02:00
}
}
// Silent
function clearKeys () {
2013-04-17 18:12:14 +02:00
$this -> dbh -> query ( " DELETE FROM ttrss_access_keys WHERE
2013-04-02 12:47:43 +02:00
owner_uid = " . $_SESSION["uid"] );
}
2013-06-07 13:31:43 +02:00
private function calculate_children_count ( $cat ) {
$c = 0 ;
foreach ( $cat [ 'items' ] as $child ) {
if ( $child [ 'type' ] == 'category' ) {
$c += $this -> calculate_children_count ( $child );
} else {
$c += 1 ;
}
}
return $c ;
}
2013-04-02 12:47:43 +02:00
2011-12-13 06:29:22 +01:00
}
?>