2012-06-15 00:46:58 +00:00
< ? php
2012-07-23 12:15:06 +00:00
require_once ( 'include/items.php' );
2012-06-15 00:46:58 +00:00
function network_init ( & $a ) {
if ( ! local_user ()) {
notice ( t ( 'Permission denied.' ) . EOL );
return ;
}
2013-07-08 00:22:40 +00:00
$channel = $a -> get_channel ();
2013-07-17 09:01:35 +00:00
$a -> profile_uid = local_user ();
2013-07-08 00:22:40 +00:00
head_set_icon ( $channel [ 'xchan_photo_s' ]);
2012-06-15 00:46:58 +00:00
$is_a_date_query = false ;
if ( $a -> argc > 1 ) {
for ( $x = 1 ; $x < $a -> argc ; $x ++ ) {
if ( is_a_date_arg ( $a -> argv [ $x ])) {
$is_a_date_query = true ;
break ;
}
}
}
2012-06-15 07:18:42 +00:00
// convert query string to array and remove first element (wich is friendica args)
$query_array = array ();
parse_str ( $a -> query_string , $query_array );
array_shift ( $query_array );
2012-06-15 00:46:58 +00:00
// fetch last used tab and redirect if needed
$sel_tabs = network_query_get_sel_tab ( $a );
$last_sel_tabs = get_pconfig ( local_user (), 'network.view' , 'tab.selected' );
if ( is_array ( $last_sel_tabs )){
$tab_urls = array (
2012-06-15 07:18:42 +00:00
'/network?f=&order=comment' , //all
2012-06-15 00:46:58 +00:00
'/network?f=&order=post' , //postord
'/network?f=&conv=1' , //conv
'/network/new' , //new
'/network?f=&star=1' , //starred
'/network?f=&spam=1' , //spam
);
// redirect if current selected tab is 'no_active' and
// last selected tab is _not_ 'all_active'.
// and this isn't a date query
if ( $sel_tabs [ 0 ] == 'active' && $last_sel_tabs [ 0 ] != 'active' && ( ! $is_a_date_query )) {
$k = array_search ( 'active' , $last_sel_tabs );
2012-06-15 07:18:42 +00:00
// merge tab querystring with request querystring
$dest_qa = array ();
list ( $dest_url , $dest_qs ) = explode ( " ? " , $tab_urls [ $k ]);
parse_str ( $dest_qs , $dest_qa );
$dest_qa = array_merge ( $query_array , $dest_qa );
$dest_qs = build_querystring ( $dest_qa );
// groups filter is in form of "network/nnn". Add it to $dest_url, if it's possible
if ( $a -> argc == 2 && is_numeric ( $a -> argv [ 1 ]) && strpos ( $dest_url , " / " , 1 ) === false ){
$dest_url .= " / " . $a -> argv [ 1 ];
}
2012-07-24 00:35:58 +00:00
// goaway($a->get_baseurl() . $dest_url."?".$dest_qs);
2012-06-15 00:46:58 +00:00
}
}
2012-07-24 00:35:58 +00:00
$group_id = (( x ( $_GET , 'gid' )) ? intval ( $_GET [ 'gid' ]) : 0 );
2012-06-15 00:46:58 +00:00
require_once ( 'include/group.php' );
require_once ( 'include/contact_widgets.php' );
require_once ( 'include/items.php' );
if ( ! x ( $a -> page , 'aside' ))
$a -> page [ 'aside' ] = '' ;
2012-07-12 00:54:00 +00:00
$search = (( x ( $_GET , 'search' )) ? $_GET [ 'search' ] : '' );
2012-06-15 00:46:58 +00:00
if ( x ( $_GET , 'save' )) {
2012-07-12 00:54:00 +00:00
$r = q ( " select * from `term` where `uid` = %d and `type` = %d and `term` = '%s' limit 1 " ,
2012-06-15 00:46:58 +00:00
intval ( local_user ()),
2012-07-12 00:54:00 +00:00
intval ( TERM_SAVEDSEARCH ),
2012-06-15 00:46:58 +00:00
dbesc ( $search )
);
if ( ! count ( $r )) {
2012-07-12 00:54:00 +00:00
q ( " insert into `term` ( `uid`,`type`,`term` ) values ( %d, %d, '%s') " ,
2012-06-15 00:46:58 +00:00
intval ( local_user ()),
2012-07-12 00:54:00 +00:00
intval ( TERM_SAVEDSEARCH ),
2012-06-15 00:46:58 +00:00
dbesc ( $search )
);
}
}
if ( x ( $_GET , 'remove' )) {
2012-07-12 00:54:00 +00:00
q ( " delete from `term` where `uid` = %d and `type` = %d and `term` = '%s' limit 1 " ,
2012-06-15 00:46:58 +00:00
intval ( local_user ()),
2012-07-12 00:54:00 +00:00
intval ( TERM_SAVEDSEARCH ),
2012-06-15 00:46:58 +00:00
dbesc ( $search )
);
}
$a -> page [ 'aside' ] .= group_side ( 'network' , 'network' , true , $group_id );
$a -> page [ 'aside' ] .= posted_date_widget ( $a -> get_baseurl () . '/network' , local_user (), false );
2012-07-21 10:48:59 +00:00
2012-06-15 00:46:58 +00:00
$a -> page [ 'aside' ] .= saved_searches ( $search );
$a -> page [ 'aside' ] .= fileas_widget ( $a -> get_baseurl ( true ) . '/network' ,( x ( $_GET , 'file' ) ? $_GET [ 'file' ] : '' ));
}
function saved_searches ( $search ) {
2012-11-03 23:40:05 +00:00
if ( ! feature_enabled ( local_user (), 'savedsearch' ))
return '' ;
2012-06-15 00:46:58 +00:00
$a = get_app ();
$srchurl = '/network?f='
. (( x ( $_GET , 'cid' )) ? '&cid=' . $_GET [ 'cid' ] : '' )
. (( x ( $_GET , 'star' )) ? '&star=' . $_GET [ 'star' ] : '' )
. (( x ( $_GET , 'conv' )) ? '&conv=' . $_GET [ 'conv' ] : '' )
. (( x ( $_GET , 'cmin' )) ? '&cmin=' . $_GET [ 'cmin' ] : '' )
. (( x ( $_GET , 'cmax' )) ? '&cmax=' . $_GET [ 'cmax' ] : '' )
. (( x ( $_GET , 'file' )) ? '&file=' . $_GET [ 'file' ] : '' );
;
$o = '' ;
2012-07-12 00:54:00 +00:00
$r = q ( " select `tid`,`term` from `term` WHERE `uid` = %d and `type` = %d " ,
intval ( local_user ()),
intval ( TERM_SAVEDSEARCH )
2012-06-15 00:46:58 +00:00
);
$saved = array ();
if ( count ( $r )) {
foreach ( $r as $rr ) {
$saved [] = array (
2012-07-12 00:54:00 +00:00
'id' => $rr [ 'tid' ],
2012-06-15 00:46:58 +00:00
'term' => $rr [ 'term' ],
2012-07-12 00:54:00 +00:00
'displayterm' => htmlspecialchars ( $rr [ 'term' ]),
2012-06-15 00:46:58 +00:00
'encodedterm' => urlencode ( $rr [ 'term' ]),
'delete' => t ( 'Remove term' ),
'selected' => ( $search == $rr [ 'term' ]),
);
}
}
$tpl = get_markup_template ( " saved_searches_aside.tpl " );
$o = replace_macros ( $tpl , array (
'$title' => t ( 'Saved Searches' ),
'$add' => t ( 'add' ),
'$searchbox' => search ( $search , 'netsearch-box' , $srchurl , true ),
'$saved' => $saved ,
));
return $o ;
}
/**
* Return selected tab from query
*
* urls -> returns
* '/network' => $no_active = 'active'
* '/network?f=&order=comment' => $comment_active = 'active'
* '/network?f=&order=post' => $postord_active = 'active'
* '/network?f=&conv=1' , => $conv_active = 'active'
* '/network/new' , => $new_active = 'active'
* '/network?f=&star=1' , => $starred_active = 'active'
* '/network?f=&spam=1' , => $spam_active = 'active'
*
2012-07-08 10:38:10 +00:00
* @ return Array ( $no_active , $comment_active , $postord_active , $conv_active , $new_active , $starred_active , $spam_active );
2012-06-15 00:46:58 +00:00
*/
function network_query_get_sel_tab ( $a ) {
$no_active = '' ;
$starred_active = '' ;
$new_active = '' ;
$all_active = '' ;
$search_active = '' ;
$conv_active = '' ;
$spam_active = '' ;
$postord_active = '' ;
2012-07-24 00:35:58 +00:00
if ( x ( $_GET , 'new' )) {
$new_active = 'active' ;
2012-06-15 00:46:58 +00:00
}
if ( x ( $_GET , 'search' )) {
$search_active = 'active' ;
}
if ( x ( $_GET , 'star' )) {
$starred_active = 'active' ;
}
if ( x ( $_GET , 'conv' )) {
$conv_active = 'active' ;
}
if ( x ( $_GET , 'spam' )) {
$spam_active = 'active' ;
}
if (( $new_active == '' )
&& ( $starred_active == '' )
&& ( $conv_active == '' )
&& ( $search_active == '' )
&& ( $spam_active == '' )) {
$no_active = 'active' ;
}
if ( $no_active == 'active' && x ( $_GET , 'order' )) {
switch ( $_GET [ 'order' ]){
case 'post' : $postord_active = 'active' ; $no_active = '' ; break ;
case 'comment' : $all_active = 'active' ; $no_active = '' ; break ;
}
}
2012-07-08 10:38:10 +00:00
return array ( $no_active , $all_active , $postord_active , $conv_active , $new_active , $starred_active , $spam_active );
2012-06-15 00:46:58 +00:00
}
2012-07-25 05:06:21 +00:00
function network_content ( & $a , $update = 0 , $load = false ) {
2012-06-15 00:46:58 +00:00
require_once ( 'include/conversation.php' );
if ( ! local_user ()) {
$_SESSION [ 'return_url' ] = $a -> query_string ;
return login ( false );
}
2013-01-10 07:07:13 +00:00
2012-06-15 00:46:58 +00:00
$arr = array ( 'query' => $a -> query_string );
call_hooks ( 'network_content_init' , $arr );
2013-01-10 07:07:13 +00:00
$channel = $a -> get_channel ();
2012-06-15 00:46:58 +00:00
$datequery = $datequery2 = '' ;
$group = 0 ;
$nouveau = false ;
2012-07-24 00:35:58 +00:00
$datequery = (( x ( $_GET , 'dend' ) && is_a_date_arg ( $_GET [ 'dend' ])) ? notags ( $_GET [ 'dend' ]) : '' );
$datequery2 = (( x ( $_GET , 'dbegin' ) && is_a_date_arg ( $_GET [ 'dbegin' ])) ? notags ( $_GET [ 'dbegin' ]) : '' );
$nouveau = (( x ( $_GET , 'new' )) ? intval ( $_GET [ 'new' ]) : 0 );
$gid = (( x ( $_GET , 'gid' )) ? intval ( $_GET [ 'gid' ]) : 0 );
2012-06-15 00:46:58 +00:00
2012-07-24 00:35:58 +00:00
if ( $datequery )
$_GET [ 'order' ] = 'post' ;
if ( $gid ) {
$group = $gid ;
$def_acl = array ( 'allow_gid' => '<' . $group . '>' );
}
2012-06-15 00:46:58 +00:00
$o = '' ;
// item filter tabs
// TODO: fix this logic, reduce duplication
//$a->page['content'] .= '<div class="tabs-wrapper">';
2012-10-23 02:57:55 +00:00
list ( $no_active , $all_active , $postord_active , $conv_active , $new_active , $starred_active , $spam_active ) = network_query_get_sel_tab ( $a );
2012-06-15 00:46:58 +00:00
// if no tabs are selected, defaults to comments
if ( $no_active == 'active' ) $all_active = 'active' ;
//echo "<pre>"; var_dump($no_active, $all_active, $postord_active, $conv_active, $new_active, $starred_active, $bookmarked_active, $spam_active); killme();
$cmd = (( $datequery ) ? '' : $a -> cmd );
$len_naked_cmd = strlen ( str_replace ( '/new' , '' , $cmd ));
// tabs
$tabs = array (
array (
'label' => t ( 'Commented Order' ),
2012-07-24 00:35:58 +00:00
'url' => $a -> get_baseurl ( true ) . '/' . $cmd . '?f=&order=comment' . (( x ( $_GET , 'cid' )) ? '&cid=' . $_GET [ 'cid' ] : '' ),
2012-06-15 00:46:58 +00:00
'sel' => $all_active ,
'title' => t ( 'Sort by Comment Date' ),
),
array (
'label' => t ( 'Posted Order' ),
2012-07-24 00:35:58 +00:00
'url' => $a -> get_baseurl ( true ) . '/' . $cmd . '?f=&order=post' . (( x ( $_GET , 'cid' )) ? '&cid=' . $_GET [ 'cid' ] : '' ),
2012-06-15 00:46:58 +00:00
'sel' => $postord_active ,
'title' => t ( 'Sort by Post Date' ),
),
array (
'label' => t ( 'Personal' ),
2012-07-24 00:35:58 +00:00
'url' => $a -> get_baseurl ( true ) . '/' . $cmd . (( x ( $_GET , 'cid' )) ? '/?f=&cid=' . $_GET [ 'cid' ] : '' ) . '&conv=1' ,
2012-06-15 00:46:58 +00:00
'sel' => $conv_active ,
'title' => t ( 'Posts that mention or involve you' ),
),
array (
'label' => t ( 'New' ),
2012-07-24 00:35:58 +00:00
'url' => $a -> get_baseurl ( true ) . '/' . $cmd . (( x ( $_GET , 'cid' )) ? '/?f=&cid=' . $_GET [ 'cid' ] : '' ) . '&new=1' ,
2012-06-15 00:46:58 +00:00
'sel' => $new_active ,
'title' => t ( 'Activity Stream - by date' ),
),
2012-11-09 07:04:34 +00:00
);
if ( feature_enabled ( local_user (), 'star_posts' ))
$tabs [] = array (
2012-06-15 00:46:58 +00:00
'label' => t ( 'Starred' ),
2012-07-24 00:35:58 +00:00
'url' => $a -> get_baseurl ( true ) . '/' . $cmd . (( x ( $_GET , 'cid' )) ? '/?f=&cid=' . $_GET [ 'cid' ] : '' ) . '&star=1' ,
2012-06-15 00:46:58 +00:00
'sel' => $starred_active ,
'title' => t ( 'Favourite Posts' ),
2012-11-09 07:04:34 +00:00
);
// Not yet implemented
if ( feature_enabled ( local_user (), 'spam_filter' ))
$tabs [] = array (
'label' => t ( 'Spam' ),
'url' => $a -> get_baseurl ( true ) . '/network?f=&spam=1' ,
'sel' => $spam_active ,
'title' => t ( 'Posts flagged as SPAM' ),
);
2012-06-15 00:46:58 +00:00
// save selected tab, but only if not in search or file mode
if ( ! x ( $_GET , 'search' ) && ! x ( $_GET , 'file' )) {
set_pconfig ( local_user (), 'network.view' , 'tab.selected' , array ( $all_active , $postord_active , $conv_active , $new_active , $starred_active , $bookmarked_active , $spam_active ) );
}
$contact_id = $a -> cid ;
require_once ( 'include/acl_selectors.php' );
$cid = (( x ( $_GET , 'cid' )) ? intval ( $_GET [ 'cid' ]) : 0 );
$star = (( x ( $_GET , 'star' )) ? intval ( $_GET [ 'star' ]) : 0 );
$order = (( x ( $_GET , 'order' )) ? notags ( $_GET [ 'order' ]) : 'comment' );
$liked = (( x ( $_GET , 'liked' )) ? intval ( $_GET [ 'liked' ]) : 0 );
$conv = (( x ( $_GET , 'conv' )) ? intval ( $_GET [ 'conv' ]) : 0 );
$spam = (( x ( $_GET , 'spam' )) ? intval ( $_GET [ 'spam' ]) : 0 );
$cmin = (( x ( $_GET , 'cmin' )) ? intval ( $_GET [ 'cmin' ]) : 0 );
$cmax = (( x ( $_GET , 'cmax' )) ? intval ( $_GET [ 'cmax' ]) : 99 );
$file = (( x ( $_GET , 'file' )) ? $_GET [ 'file' ] : '' );
if ( x ( $_GET , 'search' ) || x ( $_GET , 'file' ))
$nouveau = true ;
if ( $cid )
$def_acl = array ( 'allow_cid' => '<' . intval ( $cid ) . '>' );
if ( ! $update ) {
2012-07-19 08:43:23 +00:00
2012-11-29 03:23:39 +00:00
if ( feature_enabled ( local_user (), 'affinity' )) {
$tpl = get_markup_template ( 'main_slider.tpl' );
2013-03-21 22:41:00 +00:00
$x = replace_macros ( $tpl , array (
2012-11-29 03:23:39 +00:00
'$val' => intval ( $cmin ) . ';' . intval ( $cmax ),
'$refresh' => t ( 'Refresh' ),
'$me' => t ( 'Me' ),
'$intimate' => t ( 'Best Friends' ),
'$friends' => t ( 'Friends' ),
'$coworkers' => t ( 'Co-workers' ),
'$oldfriends' => t ( 'Former Friends' ),
'$acquaintances' => t ( 'Acquaintances' ),
'$world' => t ( 'Everybody' )
));
2013-03-21 22:41:00 +00:00
$arr = array ( 'html' => $x );
call_hooks ( 'main_slider' , $arr );
$o .= $arr [ 'html' ];
2012-11-29 03:23:39 +00:00
}
2012-07-19 08:43:23 +00:00
2012-11-29 03:23:39 +00:00
$arr = array ( 'tabs' => $tabs );
call_hooks ( 'network_tabs' , $arr );
2012-07-19 10:59:32 +00:00
2012-11-29 03:23:39 +00:00
$o .= replace_macros ( get_markup_template ( 'common_tabs.tpl' ), array ( '$tabs' => $arr [ 'tabs' ]));
2012-07-19 10:59:32 +00:00
2012-11-29 03:23:39 +00:00
// --- end item filter tabs
2012-07-19 10:59:32 +00:00
2012-07-19 08:43:23 +00:00
// search terms header
if ( $search )
$o .= '<h2>' . t ( 'Search Results For:' ) . ' ' . htmlspecialchars ( $search ) . '</h2>' ;
2012-06-15 00:46:58 +00:00
nav_set_selected ( 'network' );
2013-08-28 05:30:06 +00:00
$celeb = false ;
2012-06-15 00:46:58 +00:00
$x = array (
'is_owner' => true ,
2013-05-29 00:16:16 +00:00
'allow_location' => (( intval ( get_pconfig ( $channel [ 'channel_id' ], 'system' , 'use_browser_location' ))) ? '1' : '' ),
2013-02-01 07:56:46 +00:00
'default_location' => $channel [ 'channel_location' ],
'nickname' => $channel [ 'channel_address' ],
'lockstate' => (( $group || $cid || $channel [ 'channel_allow_cid' ] || $channel [ 'channel_allow_gid' ] || $channel [ 'channel_deny_cid' ] || $channel [ 'channel_deny_gid' ]) ? 'lock' : 'unlock' ),
// FIXME
'acl' => populate_acl ((( $group || $cid || $nets ) ? $def_acl : $channel ), $celeb ),
2012-07-21 10:48:59 +00:00
'bang' => (( $group || $cid ) ? '!' : '' ),
2012-06-15 00:46:58 +00:00
'visitor' => 'block' ,
'profile_uid' => local_user ()
);
$o .= status_editor ( $a , $x );
}
// We don't have to deal with ACL's on this page. You're looking at everything
// that belongs to you, hence you can see all of it. We will filter by group if
// desired.
2012-10-29 09:41:25 +00:00
$sql_options = (( $star )
? " and (item_flags & " . intval ( ITEM_STARRED ) . " ) "
: '' );
2012-06-15 00:46:58 +00:00
2012-07-21 10:48:59 +00:00
$sql_nets = '' ;
2012-10-29 09:41:25 +00:00
$sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE (item_flags & " . intval ( ITEM_THREAD_TOP ) . " ) $sql_options ) " ;
2012-06-15 00:46:58 +00:00
if ( $group ) {
2013-05-23 05:48:48 +00:00
$r = q ( " SELECT * FROM `group` WHERE id = %d AND uid = %d LIMIT 1 " ,
intval ( $group ),
intval ( local_user ())
);
if ( ! $r ) {
2012-06-15 00:46:58 +00:00
if ( $update )
killme ();
notice ( t ( 'No such group' ) . EOL );
goaway ( $a -> get_baseurl ( true ) . '/network' );
// NOTREACHED
}
2013-05-23 05:48:48 +00:00
$contacts = expand_groups ( array ( $arr [ 'group' ]));
if (( is_array ( $contacts )) && count ( $contacts )) {
$contact_str = implode ( ',' , $contacts );
}
else {
$contact_str = ' 0 ' ;
info ( t ( 'Group is empty' ));
}
$sql_extra = " AND item.parent IN ( SELECT DISTINCT parent FROM item WHERE true $sql_options AND ( author_xchan IN ( $contact_str ) OR owner_xchan in ( $contact_str ) or allow_gid like ' " . protect_sprintf ( '%<' . dbesc ( $r [ 0 ][ 'hash' ]) . '>%' ) . " ' ) and item_restrict = 0 ) " ;
}
2012-06-15 00:46:58 +00:00
elseif ( $cid ) {
2013-05-23 05:48:48 +00:00
$r = q ( " SELECT * from abook where abook_id = %d and abook_channel = %d and not ( abook_flags & " . intval ( ABOOK_FLAG_BLOCKED ) . " ) limit 1 " ,
intval ( $cid ),
intval ( local_user ())
);
if ( $r ) {
2013-06-28 04:40:56 +00:00
$sql_extra = " AND item.parent IN ( SELECT DISTINCT parent FROM item WHERE true $sql_options AND uid = " . intval ( local_user ()) . " AND ( author_xchan = ' " . dbesc ( $r [ 0 ][ 'abook_xchan' ]) . " ' or owner_xchan = ' " . dbesc ( $r [ 0 ][ 'abook_xchan' ]) . " ' ) and item_restrict = 0 ) " ;
2012-06-15 00:46:58 +00:00
$o = '<h2>' . t ( 'Contact: ' ) . $r [ 0 ][ 'name' ] . '</h2>' . $o ;
2013-05-23 05:48:48 +00:00
}
else {
2012-06-15 00:46:58 +00:00
notice ( t ( 'Invalid contact.' ) . EOL );
goaway ( $a -> get_baseurl ( true ) . '/network' );
2013-05-23 05:48:48 +00:00
}
2012-06-15 00:46:58 +00:00
}
if ( ! $update ) {
// The special div is needed for liveUpdate to kick in for this page.
// We only launch liveUpdate if you aren't filtering in some incompatible
// way and also you aren't writing a comment (discovered in javascript).
$o .= '<div id="live-network"></div>' . " \r \n " ;
$o .= " <script> var profile_uid = " . $_SESSION [ 'uid' ]
. " ; var netargs = ' " . substr ( $a -> cmd , 8 )
. '?f='
. (( x ( $_GET , 'cid' )) ? '&cid=' . $_GET [ 'cid' ] : '' )
. (( x ( $_GET , 'search' )) ? '&search=' . $_GET [ 'search' ] : '' )
. (( x ( $_GET , 'star' )) ? '&star=' . $_GET [ 'star' ] : '' )
. (( x ( $_GET , 'order' )) ? '&order=' . $_GET [ 'order' ] : '' )
. (( x ( $_GET , 'liked' )) ? '&liked=' . $_GET [ 'liked' ] : '' )
. (( x ( $_GET , 'conv' )) ? '&conv=' . $_GET [ 'conv' ] : '' )
. (( x ( $_GET , 'spam' )) ? '&spam=' . $_GET [ 'spam' ] : '' )
. (( x ( $_GET , 'cmin' )) ? '&cmin=' . $_GET [ 'cmin' ] : '' )
. (( x ( $_GET , 'cmax' )) ? '&cmax=' . $_GET [ 'cmax' ] : '' )
. (( x ( $_GET , 'file' )) ? '&file=' . $_GET [ 'file' ] : '' )
2012-07-19 06:11:20 +00:00
. " '; var profile_page = " . $a -> pager [ 'page' ] . " ;</script> " ;
2012-07-17 09:11:20 +00:00
2012-12-13 12:06:56 +00:00
$a -> page [ 'htmlhead' ] .= replace_macros ( get_markup_template ( " build_query.tpl " ), array (
'$baseurl' => z_root (),
2012-12-14 09:02:03 +00:00
'$pgtype' => 'network' ,
2012-12-13 12:06:56 +00:00
'$uid' => (( local_user ()) ? local_user () : '0' ),
'$gid' => (( $gid ) ? $gid : '0' ),
'$cid' => (( $cid ) ? $cid : '0' ),
'$cmin' => (( $cmin ) ? $cmin : '0' ),
'$cmax' => (( $cmax ) ? $cmax : '0' ),
'$star' => (( $star ) ? $star : '0' ),
'$liked' => (( $liked ) ? $liked : '0' ),
'$conv' => (( $conv ) ? $conv : '0' ),
'$spam' => (( $spam ) ? $spam : '0' ),
'$nouveau' => (( $nouveau ) ? $nouveau : '0' ),
'$wall' => '0' ,
'$page' => (( $a -> pager [ 'page' ] != 1 ) ? $a -> pager [ 'page' ] : 1 ),
'$search' => $search ,
'$order' => $order ,
'$file' => $file ,
2012-12-16 10:07:16 +00:00
'$cats' => '' ,
2012-12-13 12:06:56 +00:00
'$dend' => $datequery ,
2013-03-25 20:01:48 +00:00
'$mid' => '' ,
2012-12-13 12:06:56 +00:00
'$dbegin' => $datequery2
));
2012-06-15 00:46:58 +00:00
}
$sql_extra3 = '' ;
if ( $datequery ) {
$sql_extra3 .= protect_sprintf ( sprintf ( " AND item.created <= '%s' " , dbesc ( datetime_convert ( date_default_timezone_get (), '' , $datequery ))));
}
if ( $datequery2 ) {
$sql_extra3 .= protect_sprintf ( sprintf ( " AND item.created >= '%s' " , dbesc ( datetime_convert ( date_default_timezone_get (), '' , $datequery2 ))));
}
$sql_extra2 = (( $nouveau ) ? '' : " AND `item`.`parent` = `item`.`id` " );
$sql_extra3 = (( $nouveau ) ? '' : $sql_extra3 );
if ( x ( $_GET , 'search' )) {
$search = escape_tags ( $_GET [ 'search' ]);
2012-07-17 04:07:59 +00:00
if ( strpos ( $search , '#' ) === 0 )
$sql_extra .= term_query ( 'item' , substr ( $search , 1 ), TERM_HASHTAG );
else
$sql_extra .= sprintf ( " AND `item`.`body` like '%s' " ,
dbesc ( protect_sprintf ( '%' . $search . '%' ))
2012-06-15 00:46:58 +00:00
);
}
2012-07-17 04:07:59 +00:00
2012-06-15 00:46:58 +00:00
if ( strlen ( $file )) {
2012-07-17 04:07:59 +00:00
$sql_extra .= term_query ( 'item' , $file , TERM_FILE );
2012-06-15 00:46:58 +00:00
}
if ( $conv ) {
2013-01-13 03:05:14 +00:00
$sql_extra .= sprintf ( " AND parent IN (SELECT distinct(parent) from item where ( author_xchan like '%s' or ( item_flags & %d ))) " ,
2013-01-10 07:07:13 +00:00
dbesc ( protect_sprintf ( $channel [ 'channel_hash' ])),
2013-01-13 03:05:14 +00:00
intval ( ITEM_MENTIONSME )
2012-07-17 04:07:59 +00:00
);
2012-06-15 00:46:58 +00:00
}
2012-07-25 05:06:21 +00:00
if ( $update && ! $load ) {
2012-06-15 00:46:58 +00:00
// only setup pagination on initial page view
$pager_sql = '' ;
}
else {
2012-12-17 04:20:29 +00:00
$itemspage = get_pconfig ( local_user (), 'system' , 'itemspage' );
2013-02-11 01:10:58 +00:00
$a -> set_pager_itemspage ((( intval ( $itemspage )) ? $itemspage : 20 ));
2012-07-17 02:39:13 +00:00
$pager_sql = sprintf ( " LIMIT %d, %d " , intval ( $a -> pager [ 'start' ]), intval ( $a -> pager [ 'itemspage' ]));
2012-06-15 00:46:58 +00:00
}
2012-07-19 08:43:23 +00:00
if (( $cmin != 0 ) || ( $cmax != 99 )) {
2012-10-30 03:47:56 +00:00
// Not everybody who shows up in the network stream will be in your address book.
// By default those that aren't are assumed to have closeness = 99; but this isn't
// recorded anywhere. So if cmax is 99, we'll open the search up to anybody in
// the stream with a NULL address book entry.
2012-10-29 09:41:25 +00:00
2012-10-30 03:47:56 +00:00
$sql_nets .= " AND " ;
2012-10-29 09:41:25 +00:00
if ( $cmax == 99 )
2012-10-30 03:47:56 +00:00
$sql_nets .= " ( " ;
$sql_nets .= " ( abook.abook_closeness >= " . intval ( $cmin ) . " " ;
$sql_nets .= " AND abook.abook_closeness <= " . intval ( $cmax ) . " ) " ;
if ( $cmax == 99 )
$sql_nets .= " OR abook.abook_closeness IS NULL ) " ;
2012-10-29 09:41:25 +00:00
2012-07-19 08:43:23 +00:00
}
2013-01-05 03:32:49 +00:00
$simple_update = (( $update ) ? " and ( item.item_flags & " . intval ( ITEM_UNSEEN ) . " ) " : '' );
2012-07-25 05:06:21 +00:00
if ( $load )
$simple_update = '' ;
2012-06-15 00:46:58 +00:00
2012-07-26 05:55:43 +00:00
$start = dba_timer ();
2012-07-25 05:06:21 +00:00
if ( $nouveau && $load ) {
2012-06-15 00:46:58 +00:00
// "New Item View" - show all items unthreaded in reverse created date order
2012-10-09 01:40:30 +00:00
$items = q ( " SELECT `item`.*, `item`.`id` AS `item_id` FROM `item`
2012-10-08 01:44:06 +00:00
WHERE `item` . `uid` = % d AND item_restrict = 0
2012-06-15 00:46:58 +00:00
$simple_update
$sql_extra $sql_nets
ORDER BY `item` . `received` DESC $pager_sql " ,
intval ( $_SESSION [ 'uid' ])
);
2012-10-09 01:40:30 +00:00
2012-07-17 12:30:32 +00:00
require_once ( 'include/items.php' );
2012-10-09 01:40:30 +00:00
xchan_query ( $items );
2013-02-11 08:20:14 +00:00
$items = fetch_post_tags ( $items , true );
2012-06-15 00:46:58 +00:00
}
2013-01-05 03:24:17 +00:00
elseif ( $update ) {
2012-07-26 05:55:43 +00:00
2012-06-15 00:46:58 +00:00
// Normal conversation view
if ( $order === 'post' )
$ordering = " `created` " ;
else
$ordering = " `commented` " ;
2013-01-05 03:24:17 +00:00
if ( $load ) {
2012-10-30 03:47:56 +00:00
2013-01-05 03:24:17 +00:00
// Fetch a page full of parent items for this page
2013-01-26 00:18:35 +00:00
2013-02-05 01:46:04 +00:00
$r = q ( " SELECT distinct item.id AS item_id FROM item
2012-10-29 09:41:25 +00:00
left join abook on item . author_xchan = abook . abook_xchan
2012-10-30 03:47:56 +00:00
WHERE item . uid = % d AND item . item_restrict = 0
2013-01-05 03:24:17 +00:00
AND item . parent = item . id
2012-10-30 03:47:56 +00:00
and (( abook . abook_flags & % d ) = 0 or abook . abook_flags is null )
2013-01-05 03:24:17 +00:00
$sql_extra3 $sql_extra $sql_nets
ORDER BY item . $ordering DESC $pager_sql " ,
2012-10-30 03:47:56 +00:00
intval ( local_user ()),
intval ( ABOOK_FLAG_BLOCKED )
2012-06-15 00:46:58 +00:00
);
2013-01-26 00:18:35 +00:00
2012-10-09 01:40:30 +00:00
}
2012-06-15 00:46:58 +00:00
else {
2013-01-05 03:24:17 +00:00
// update
$r = q ( " SELECT item.parent AS item_id FROM item
2012-10-29 09:41:25 +00:00
left join abook on item . author_xchan = abook . abook_xchan
2013-01-05 03:24:17 +00:00
WHERE item . uid = % d AND item . item_restrict = 0 $simple_update
2012-10-30 03:47:56 +00:00
and (( abook . abook_flags & % d ) = 0 or abook . abook_flags is null )
2013-01-05 03:24:17 +00:00
$sql_extra3 $sql_extra $sql_nets " ,
2012-10-30 03:47:56 +00:00
intval ( local_user ()),
intval ( ABOOK_FLAG_BLOCKED )
2012-06-15 00:46:58 +00:00
);
2013-01-05 03:32:49 +00:00
2012-06-15 00:46:58 +00:00
}
2013-01-05 03:26:53 +00:00
2013-02-09 10:46:50 +00:00
$first = dba_timer ();
2012-10-30 03:47:56 +00:00
2012-06-15 00:46:58 +00:00
// Then fetch all the children of the parents that are on this page
2013-01-05 03:24:17 +00:00
if ( $r ) {
2012-08-30 06:03:03 +00:00
$parents_str = ids_to_querystr ( $r , 'item_id' );
2012-06-15 00:46:58 +00:00
2012-10-08 04:44:11 +00:00
$items = q ( " SELECT `item`.*, `item`.`id` AS `item_id` FROM `item`
2012-10-08 01:44:06 +00:00
WHERE `item` . `uid` = % d AND `item` . `item_restrict` = 0
2012-06-15 00:46:58 +00:00
AND `item` . `parent` IN ( % s )
$sql_extra " ,
intval ( local_user ()),
dbesc ( $parents_str )
);
2013-02-09 10:46:50 +00:00
$second = dba_timer ();
2012-10-08 04:44:11 +00:00
xchan_query ( $items );
2013-02-09 10:46:50 +00:00
$third = dba_timer ();
2013-02-11 08:20:14 +00:00
$items = fetch_post_tags ( $items , true );
2012-07-10 05:08:25 +00:00
2013-02-09 10:46:50 +00:00
$fourth = dba_timer ();
2012-07-11 02:28:02 +00:00
$items = conv_sort ( $items , $ordering );
2012-07-10 05:08:25 +00:00
2013-02-09 10:46:50 +00:00
2013-01-05 03:24:17 +00:00
//logger('items: ' . print_r($items,true));
2012-06-15 00:46:58 +00:00
2013-01-05 03:24:17 +00:00
}
else {
2012-06-15 00:46:58 +00:00
$items = array ();
}
2013-02-04 04:39:43 +00:00
if ( $parents_str )
$update_unseen = ' AND parent IN ( ' . dbesc ( $parents_str ) . ' )' ;
2012-06-15 00:46:58 +00:00
}
2013-02-08 11:26:10 +00:00
// logger('items: ' . count($items));
2012-06-15 00:46:58 +00:00
2013-02-04 04:39:43 +00:00
if ( $update_unseen )
2012-10-29 05:08:08 +00:00
$r = q ( " UPDATE `item` SET item_flags = ( item_flags ^ %d)
2013-02-04 04:39:43 +00:00
WHERE ( item_flags & % d ) AND `uid` = % d $update_unseen " ,
2012-10-08 01:44:06 +00:00
intval ( ITEM_UNSEEN ),
intval ( ITEM_UNSEEN ),
2012-06-15 00:46:58 +00:00
intval ( local_user ())
);
$mode = (( $nouveau ) ? 'network-new' : 'network' );
2013-02-09 10:46:50 +00:00
$fifth = dba_timer ();
2012-07-26 05:55:43 +00:00
2012-07-26 01:57:04 +00:00
$o .= conversation ( $a , $items , $mode , $update , 'client' );
2012-06-15 00:46:58 +00:00
2013-02-09 10:46:50 +00:00
$sixth = dba_timer ();
2012-07-26 05:55:43 +00:00
2012-08-30 06:03:03 +00:00
if ( ! $update )
2012-07-17 02:39:13 +00:00
$o .= alt_pager ( $a , count ( $items ));
2012-06-15 00:46:58 +00:00
2013-02-09 10:46:50 +00:00
if ( $load ) {
2013-07-23 02:59:18 +00:00
logger ( 'mod_network: load: ' . count ( $items ) . ' items' , LOGGER_DATA );
2013-02-09 10:46:50 +00:00
profiler ( $start , $first , 'network parents' );
profiler ( $first , $second , 'network children' );
profiler ( $second , $third , 'network authors' );
profiler ( $third , $fourth , 'network tags' );
profiler ( $fourth , $fifth , 'network sort' );
profiler ( $fifth , $sixth , 'network render' );
profiler ( $start , $sixth , 'network total' );
2013-02-09 10:56:45 +00:00
profiler ( 1 , 1 , '-- ' . count ( $items ));
2013-02-09 10:46:50 +00:00
}
2012-07-26 05:55:43 +00:00
2012-06-15 00:46:58 +00:00
return $o ;
}