2010-07-16 20:16:50 -04:00
< ? php
function network_init ( & $a ) {
2011-01-20 17:25:44 -05:00
if ( ! local_user ()) {
2011-01-20 18:30:45 -05:00
notice ( t ( 'Permission denied.' ) . EOL );
2011-01-20 17:25:44 -05:00
return ;
}
2011-01-20 14:19:20 -05:00
2011-07-01 09:14:15 -04:00
$group_id = (( $a -> argc > 1 && intval ( $a -> argv [ 1 ])) ? intval ( $a -> argv [ 1 ]) : 0 );
2010-07-25 19:27:22 -04:00
require_once ( 'include/group.php' );
2010-10-31 19:38:22 -04:00
if ( ! x ( $a -> page , 'aside' ))
$a -> page [ 'aside' ] = '' ;
2011-01-19 20:56:36 -05:00
2011-05-26 20:47:33 -04:00
$search = (( x ( $_GET , 'search' )) ? escape_tags ( $_GET [ 'search' ]) : '' );
2011-09-06 03:55:24 -04:00
// We need a better way of managing a growing argument list
2011-09-25 14:20:19 -04:00
// moved into savedsearches()
// $srchurl = '/network'
// . ((x($_GET,'cid')) ? '?cid=' . $_GET['cid'] : '')
// . ((x($_GET,'star')) ? '?star=' . $_GET['star'] : '')
// . ((x($_GET,'bmark')) ? '?bmark=' . $_GET['bmark'] : '');
2011-09-04 20:35:06 -04:00
if ( x ( $_GET , 'save' )) {
$r = q ( " select * from `search` where `uid` = %d and `term` = '%s' limit 1 " ,
intval ( local_user ()),
dbesc ( $search )
);
if ( ! count ( $r )) {
q ( " insert into `search` ( `uid`,`term` ) values ( %d, '%s') " ,
intval ( local_user ()),
dbesc ( $search )
);
}
}
if ( x ( $_GET , 'remove' )) {
q ( " delete from `search` where `uid` = %d and `term` = '%s' limit 1 " ,
intval ( local_user ()),
dbesc ( $search )
);
}
2011-05-26 20:47:33 -04:00
2011-10-10 09:28:34 -04:00
2011-09-25 14:20:19 -04:00
// search terms header
if ( x ( $_GET , 'search' )) {
$a -> page [ 'content' ] .= '<h2>Search Results For: ' . $search . '</h2>' ;
}
2011-07-01 09:14:15 -04:00
$a -> page [ 'aside' ] .= group_side ( 'network' , 'network' , true , $group_id );
2011-09-25 14:20:19 -04:00
// moved to saved searches to have it in the same div
//$a->page['aside'] .= search($search,'netsearch-box',$srchurl,true);
2011-09-04 20:35:06 -04:00
2011-09-25 14:20:19 -04:00
$a -> page [ 'aside' ] .= saved_searches ( $search );
2011-09-04 20:35:06 -04:00
}
2011-09-25 14:20:19 -04:00
function saved_searches ( $search ) {
2011-09-04 20:35:06 -04:00
2011-09-25 14:20:19 -04:00
$srchurl = '/network'
. (( x ( $_GET , 'cid' )) ? '?cid=' . $_GET [ 'cid' ] : '' )
. (( x ( $_GET , 'star' )) ? '?star=' . $_GET [ 'star' ] : '' )
. (( x ( $_GET , 'bmark' )) ? '?bmark=' . $_GET [ 'bmark' ] : '' );
2011-09-04 20:35:06 -04:00
$o = '' ;
$r = q ( " select `term` from `search` WHERE `uid` = %d " ,
intval ( local_user ())
);
2011-11-21 06:34:22 -05:00
$saved = array ();
2011-09-25 14:20:19 -04:00
2011-09-04 20:35:06 -04:00
if ( count ( $r )) {
foreach ( $r as $rr ) {
2011-11-21 06:34:22 -05:00
$saved [] = array (
'term' => $rr [ 'term' ],
'encodedterm' => urlencode ( $rr [ 'term' ]),
'delete' => t ( 'Remove term' ),
'selected' => ( $search == $rr [ 'term' ]),
);
2011-09-04 20:35:06 -04:00
}
}
2011-11-21 06:34:22 -05:00
$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 ,
));
2011-09-04 20:35:06 -04:00
return $o ;
2010-07-16 20:16:50 -04:00
}
2010-09-20 22:34:44 -04:00
function network_content ( & $a , $update = 0 ) {
2010-07-16 20:16:50 -04:00
2011-04-12 20:58:16 -04:00
require_once ( 'include/conversation.php' );
2010-07-16 20:16:50 -04:00
if ( ! local_user ())
2011-01-20 17:25:44 -05:00
return login ( false );
2010-10-31 19:38:22 -04:00
$o = '' ;
2010-07-16 20:16:50 -04:00
2011-10-10 09:28:34 -04:00
// item filter tabs
// TODO: fix this logic, reduce duplication
2011-11-21 06:34:22 -05:00
//$a->page['content'] .= '<div class="tabs-wrapper">';
2011-10-10 09:28:34 -04:00
$starred_active = '' ;
$new_active = '' ;
$bookmarked_active = '' ;
$all_active = '' ;
$search_active = '' ;
if (( $a -> argc > 1 && $a -> argv [ 1 ] === 'new' )
|| ( $a -> argc > 2 && $a -> argv [ 2 ] === 'new' )) {
$new_active = 'active' ;
}
if ( x ( $_GET , 'search' )) {
$search_active = 'active' ;
}
if ( x ( $_GET , 'star' )) {
$starred_active = 'active' ;
}
if ( $_GET [ 'bmark' ]) {
$bookmarked_active = 'active' ;
}
if (( $new_active == '' )
&& ( $starred_active == '' )
&& ( $bookmarked_active == '' )
&& ( $search_active == '' )) {
$all_active = 'active' ;
}
2011-10-17 21:24:23 -04:00
$postord_active = '' ;
if ( $all_active && x ( $_GET , 'order' ) && $_GET [ 'order' ] !== 'comment' ) {
$all_active = '' ;
$postord_active = 'active' ;
}
2011-10-10 09:28:34 -04:00
// tabs
$tabs = array (
array (
2011-10-17 21:24:23 -04:00
'label' => t ( 'Commented Order' ),
2011-10-10 09:28:34 -04:00
'url' => $a -> get_baseurl () . '/' . str_replace ( '/new' , '' , $a -> cmd ) . (( x ( $_GET , 'cid' )) ? '?cid=' . $_GET [ 'cid' ] : '' ),
'sel' => $all_active ,
),
2011-10-17 21:24:23 -04:00
array (
'label' => t ( 'Posted Order' ),
2011-10-19 18:08:16 -04:00
'url' => $a -> get_baseurl () . '/' . str_replace ( '/new' , '' , $a -> cmd ) . '?order=post' . (( x ( $_GET , 'cid' )) ? '&cid=' . $_GET [ 'cid' ] : '' ),
2011-10-17 21:24:23 -04:00
'sel' => $postord_active ,
),
2011-10-10 09:28:34 -04:00
array (
'label' => t ( 'New' ),
'url' => $a -> get_baseurl () . '/' . str_replace ( '/new' , '' , $a -> cmd ) . '/new' . (( x ( $_GET , 'cid' )) ? '/?cid=' . $_GET [ 'cid' ] : '' ),
'sel' => $new_active ,
),
array (
'label' => t ( 'Starred' ),
'url' => $a -> get_baseurl () . '/' . str_replace ( '/new' , '' , $a -> cmd ) . (( x ( $_GET , 'cid' )) ? '/?cid=' . $_GET [ 'cid' ] : '' ) . '&star=1' ,
'sel' => $starred_active ,
),
array (
'label' => t ( 'Bookmarks' ),
'url' => $a -> get_baseurl () . '/' . str_replace ( '/new' , '' , $a -> cmd ) . (( x ( $_GET , 'cid' )) ? '/?cid=' . $_GET [ 'cid' ] : '' ) . '&bmark=1' ,
'sel' => $bookmarked_active ,
),
);
$tpl = get_markup_template ( 'common_tabs.tpl' );
$o .= replace_macros ( $tpl , array ( '$tabs' => $tabs ));
// --- end item filter tabs
2010-07-16 20:16:50 -04:00
$contact_id = $a -> cid ;
2010-07-25 19:27:22 -04:00
$group = 0 ;
2010-07-20 08:21:19 -04:00
2011-02-01 23:23:58 -05:00
$nouveau = false ;
2011-02-17 03:52:26 -05:00
require_once ( 'include/acl_selectors.php' );
2011-02-01 23:23:58 -05:00
2011-09-13 21:40:15 -04:00
$cid = (( x ( $_GET , 'cid' )) ? intval ( $_GET [ 'cid' ]) : 0 );
$star = (( x ( $_GET , 'star' )) ? intval ( $_GET [ 'star' ]) : 0 );
$bmark = (( x ( $_GET , 'bmark' )) ? intval ( $_GET [ 'bmark' ]) : 0 );
$order = (( x ( $_GET , 'order' )) ? notags ( $_GET [ 'order' ]) : 'comment' );
2011-09-23 06:12:31 -04:00
$liked = (( x ( $_GET , 'liked' )) ? intval ( $_GET [ 'liked' ]) : 0 );
2011-04-19 23:50:02 -04:00
2011-02-17 03:40:35 -05:00
if (( $a -> argc > 2 ) && $a -> argv [ 2 ] === 'new' )
$nouveau = true ;
if ( $a -> argc > 1 ) {
if ( $a -> argv [ 1 ] === 'new' )
$nouveau = true ;
else {
$group = intval ( $a -> argv [ 1 ]);
2011-04-19 23:50:02 -04:00
$def_acl = array ( 'allow_gid' => '<' . $group . '>' );
2011-02-17 03:40:35 -05:00
}
2011-02-17 02:05:48 -05:00
}
2011-05-26 20:47:33 -04:00
if ( x ( $_GET , 'search' ))
$nouveau = true ;
2011-04-19 23:50:02 -04:00
if ( $cid )
$def_acl = array ( 'allow_cid' => '<' . intval ( $cid ) . '>' );
2010-07-24 18:21:33 -04:00
if ( ! $update ) {
2011-04-03 23:41:40 -04:00
if ( group ) {
if (( $t = group_public_members ( $group )) && ( ! get_pconfig ( local_user (), 'system' , 'nowarn_insecure' ))) {
2011-05-23 05:39:57 -04:00
notice ( sprintf ( tt ( 'Warning: This group contains %s member from an insecure network.' ,
'Warning: This group contains %s members from an insecure network.' ,
$t ), $t ) . EOL );
2011-04-03 23:41:40 -04:00
notice ( t ( 'Private messages to this group are at risk of public disclosure.' ) . EOL );
}
}
2011-08-17 12:36:24 -04:00
nav_set_selected ( 'network' );
2010-09-19 00:11:18 -04:00
2010-07-26 07:22:19 -04:00
$_SESSION [ 'return_url' ] = $a -> cmd ;
2010-10-18 03:43:49 -04:00
$celeb = ((( $a -> user [ 'page-flags' ] == PAGE_SOAPBOX ) || ( $a -> user [ 'page-flags' ] == PAGE_COMMUNITY )) ? true : false );
2011-04-20 08:48:12 -04:00
$x = array (
'is_owner' => true ,
'allow_location' => $a -> user [ 'allow_location' ],
'default_location' => $a -> user [ 'default_location' ],
'nickname' => $a -> user [ 'nickname' ],
'lockstate' => ((( $group ) || ( is_array ( $a -> user ) && (( strlen ( $a -> user [ 'allow_cid' ])) || ( strlen ( $a -> user [ 'allow_gid' ])) || ( strlen ( $a -> user [ 'deny_cid' ])) || ( strlen ( $a -> user [ 'deny_gid' ]))))) ? 'lock' : 'unlock' ),
'acl' => populate_acl ((( $group || $cid ) ? $def_acl : $a -> user ), $celeb ),
'bang' => (( $group || $cid ) ? '!' : '' ),
'visitor' => 'block' ,
'profile_uid' => local_user ()
);
$o .= status_editor ( $a , $x );
2010-07-16 20:16:50 -04:00
2010-07-24 18:21:33 -04:00
}
2010-07-16 20:16:50 -04:00
2011-05-20 22:28:48 -04:00
// We aren't going to try and figure out at the item, group, and page
// level which items you've seen and which you haven't. If you're looking
// at the top level network page just mark everything seen.
2010-07-25 19:27:22 -04:00
2011-07-03 22:41:04 -04:00
if (( ! $group ) && ( ! $cid ) && ( ! $star )) {
2011-05-20 22:28:48 -04:00
$r = q ( " UPDATE `item` SET `unseen` = 0
WHERE `unseen` = 1 AND `uid` = % d " ,
intval ( $_SESSION [ 'uid' ])
);
}
2010-07-16 20:16:50 -04:00
2010-07-25 19:27:22 -04:00
// 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.
2010-07-24 09:56:02 -04:00
2011-07-03 22:41:04 -04:00
$star_sql = (( $star ) ? " AND `starred` = 1 " : '' );
2011-09-04 22:58:03 -04:00
if ( $bmark )
$star_sql .= " AND `bookmark` = 1 " ;
2011-07-03 22:41:04 -04:00
$sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` $star_sql ) " ;
2010-07-16 20:16:50 -04:00
2010-07-25 19:27:22 -04:00
if ( $group ) {
2010-08-11 04:48:43 -04:00
$r = q ( " SELECT `name`, `id` FROM `group` WHERE `id` = %d AND `uid` = %d LIMIT 1 " ,
2010-07-25 19:27:22 -04:00
intval ( $group ),
intval ( $_SESSION [ 'uid' ])
);
if ( ! count ( $r )) {
2011-02-17 02:10:18 -05:00
if ( $update )
killme ();
2010-08-11 18:40:18 -04:00
notice ( t ( 'No such group' ) . EOL );
2010-07-25 19:27:22 -04:00
goaway ( $a -> get_baseurl () . '/network' );
2011-04-19 23:50:02 -04:00
// NOTREACHED
2010-07-25 19:27:22 -04:00
}
$contacts = expand_groups ( array ( $group ));
2011-01-03 16:53:26 -05:00
if (( is_array ( $contacts )) && count ( $contacts )) {
$contact_str = implode ( ',' , $contacts );
}
else {
$contact_str = ' 0 ' ;
2011-05-23 05:39:57 -04:00
info ( t ( 'Group is empty' ));
2011-01-03 16:53:26 -05:00
}
2011-01-19 20:56:36 -05:00
2011-07-03 22:41:04 -04:00
$sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` $star_sql AND ( `contact-id` IN ( $contact_str ) OR `allow_gid` REGEXP '< " . intval ( $group ) . " >' )) " ;
2011-02-28 05:56:46 -05:00
$o = '<h2>' . t ( 'Group: ' ) . $r [ 0 ][ 'name' ] . '</h2>' . $o ;
2010-07-25 19:27:22 -04:00
}
2011-04-19 23:50:02 -04:00
elseif ( $cid ) {
2011-04-20 00:09:25 -04:00
$r = q ( " SELECT `id`,`name`,`network`,`writable` FROM `contact` WHERE `id` = %d
2011-04-19 23:50:02 -04:00
AND `blocked` = 0 AND `pending` = 0 LIMIT 1 " ,
intval ( $cid )
);
if ( count ( $r )) {
2011-07-03 22:41:04 -04:00
$sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` $star_sql AND `contact-id` IN ( " . intval ( $cid ) . " )) " ;
2011-04-19 23:50:02 -04:00
$o = '<h2>' . t ( 'Contact: ' ) . $r [ 0 ][ 'name' ] . '</h2>' . $o ;
2011-08-27 21:09:43 -04:00
if ( $r [ 0 ][ 'network' ] !== NETWORK_MAIL && $r [ 0 ][ 'network' ] !== NETWORK_DFRN && $r [ 0 ][ 'network' ] !== NETWORK_FACEBOOK && $r [ 0 ][ 'network' ] !== NETWORK_DIASPORA && $r [ 0 ][ 'writable' ] && ( ! get_pconfig ( local_user (), 'system' , 'nowarn_insecure' ))) {
2011-04-20 00:09:25 -04:00
notice ( t ( 'Private messages to this person are at risk of public disclosure.' ) . EOL );
}
2011-04-19 23:50:02 -04:00
}
else {
notice ( t ( 'Invalid contact.' ) . EOL );
goaway ( $a -> get_baseurl () . '/network' );
// NOTREACHED
}
}
2010-07-16 20:16:50 -04:00
2011-10-25 01:07:42 -04:00
if (( ! $group ) && ( ! $cid ) && ( ! $update )) {
2011-01-16 19:40:09 -05:00
$o .= get_birthdays ();
2011-10-25 01:07:42 -04:00
$o .= get_events ();
}
2011-01-16 19:40:09 -05:00
2011-11-24 20:32:45 -05: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 , 'bmark' )) ? '&bmark=' . $_GET [ 'bmark' ] : '' )
. (( x ( $_GET , 'liked' )) ? '&liked=' . $_GET [ 'liked' ] : '' )
. " '; var profile_page = " . $a -> pager [ 'page' ] . " ; </script> \r \n " ;
}
2011-05-04 23:49:11 -04:00
$sql_extra2 = (( $nouveau ) ? '' : " AND `item`.`parent` = `item`.`id` " );
2011-01-16 19:40:09 -05:00
2011-10-24 07:17:46 -04:00
if ( x ( $_GET , 'search' )) {
$search = escape_tags ( $_GET [ 'search' ]);
$sql_extra .= sprintf ( " AND ( `item`.`body` REGEXP '%s' OR `item`.`tag` REGEXP '%s' ) " ,
dbesc ( $search ),
dbesc ( '\\]' . $search . '\\[' )
);
}
2011-05-26 20:47:33 -04:00
2010-07-16 20:16:50 -04:00
$r = q ( " SELECT COUNT(*) AS `total`
FROM `item` LEFT JOIN `contact` ON `contact` . `id` = `item` . `contact-id`
WHERE `item` . `uid` = % d AND `item` . `visible` = 1 AND `item` . `deleted` = 0
2010-07-19 09:58:03 -04:00
AND `contact` . `blocked` = 0 AND `contact` . `pending` = 0
2011-05-04 23:49:11 -04:00
$sql_extra2
2010-07-16 20:16:50 -04:00
$sql_extra " ,
intval ( $_SESSION [ 'uid' ])
);
2011-03-27 22:53:36 -04:00
if ( count ( $r )) {
2010-07-16 20:16:50 -04:00
$a -> set_pager_total ( $r [ 0 ][ 'total' ]);
2011-03-27 22:53:36 -04:00
$a -> set_pager_itemspage ( 40 );
}
2010-07-16 20:16:50 -04:00
2011-01-19 20:56:36 -05:00
if ( $nouveau ) {
2011-03-28 20:24:11 -04:00
// "New Item View" - show all items unthreaded in reverse created date order
2011-01-19 20:56:36 -05:00
$r = q ( " SELECT `item`.*, `item`.`id` AS `item_id`,
2011-04-11 06:22:09 -04:00
`contact` . `name` , `contact` . `photo` , `contact` . `url` , `contact` . `rel` , `contact` . `writable` ,
2011-01-19 21:31:04 -05:00
`contact` . `network` , `contact` . `thumb` , `contact` . `dfrn-id` , `contact` . `self` ,
2011-01-19 20:56:36 -05:00
`contact` . `id` AS `cid` , `contact` . `uid` AS `contact-uid`
FROM `item` , `contact`
WHERE `item` . `uid` = % d AND `item` . `visible` = 1 AND `item` . `deleted` = 0
AND `contact` . `id` = `item` . `contact-id`
AND `contact` . `blocked` = 0 AND `contact` . `pending` = 0
$sql_extra
2011-06-23 20:56:59 -04:00
ORDER BY `item` . `received` DESC LIMIT % d , % d " ,
2011-01-19 20:56:36 -05:00
intval ( $_SESSION [ 'uid' ]),
intval ( $a -> pager [ 'start' ]),
intval ( $a -> pager [ 'itemspage' ])
);
2011-03-31 10:52:51 -04:00
2011-01-19 20:56:36 -05:00
}
else {
2011-03-28 20:24:11 -04:00
// Normal conversation view
2011-03-27 22:53:36 -04:00
2011-09-18 22:04:11 -04:00
if ( $order === 'post' )
$ordering = " `created` " ;
else
$ordering = " `commented` " ;
// Fetch a page full of parent items for this page
$r = q ( " SELECT `item`.`id` AS `item_id`, `contact`.`uid` AS `contact_uid`
FROM `item` LEFT JOIN `contact` ON `contact` . `id` = `item` . `contact-id`
WHERE `item` . `uid` = % d AND `item` . `visible` = 1 AND `item` . `deleted` = 0
AND `contact` . `blocked` = 0 AND `contact` . `pending` = 0
AND `item` . `parent` = `item` . `id`
$sql_extra
ORDER BY `item` . $ordering DESC LIMIT % d , % d " ,
intval ( local_user ()),
intval ( $a -> pager [ 'start' ]),
intval ( $a -> pager [ 'itemspage' ])
);
2011-09-13 08:13:01 -04:00
// Then fetch all the children of the parents that are on this page
2011-09-12 22:42:10 -04:00
2011-09-13 08:13:01 -04:00
$parents_arr = array ();
$parents_str = '' ;
2011-09-12 22:42:10 -04:00
2011-09-13 08:13:01 -04:00
if ( count ( $r )) {
foreach ( $r as $rr )
$parents_arr [] = $rr [ 'item_id' ];
$parents_str = implode ( ', ' , $parents_arr );
2011-09-12 22:42:10 -04:00
2011-09-18 22:04:11 -04:00
$r = q ( " SELECT `item`.*, `item`.`id` AS `item_id`,
`contact` . `name` , `contact` . `photo` , `contact` . `url` , `contact` . `rel` , `contact` . `writable` ,
`contact` . `network` , `contact` . `thumb` , `contact` . `dfrn-id` , `contact` . `self` ,
`contact` . `id` AS `cid` , `contact` . `uid` AS `contact-uid`
FROM `item` , ( SELECT `p` . `id` , `p` . `created` , `p` . `commented` FROM `item` AS `p` WHERE `p` . `parent` = `p` . `id` ) as `parentitem` , `contact`
WHERE `item` . `uid` = % d AND `item` . `visible` = 1 AND `item` . `deleted` = 0
AND `contact` . `id` = `item` . `contact-id`
AND `contact` . `blocked` = 0 AND `contact` . `pending` = 0
AND `item` . `parent` = `parentitem` . `id` AND `item` . `parent` IN ( % s )
$sql_extra
2011-09-23 08:03:12 -04:00
ORDER BY `parentitem` . $ordering DESC , `parentitem` . `id` ASC , `item` . `gravity` ASC , `item` . `created` ASC " ,
2011-09-18 22:04:11 -04:00
intval ( local_user ()),
dbesc ( $parents_str )
);
}
2011-01-19 20:56:36 -05:00
}
2010-07-16 20:16:50 -04:00
2011-04-11 19:15:38 -04:00
// Set this so that the conversation function can find out contact info for our wall-wall items
$a -> page_contact = $a -> contact ;
2011-04-11 00:21:16 -04:00
$mode = (( $nouveau ) ? 'network-new' : 'network' );
2011-03-28 20:24:11 -04:00
2011-04-11 00:21:16 -04:00
$o .= conversation ( $a , $r , $mode , $update );
2010-07-24 18:21:33 -04:00
2011-01-23 17:56:14 -05:00
if ( ! $update ) {
2010-07-24 18:21:33 -04:00
$o .= paginate ( $a );
2011-01-23 17:56:14 -05:00
}
2010-07-24 18:21:33 -04:00
2010-07-16 20:16:50 -04:00
return $o ;
2011-03-30 11:10:14 -04:00
}