2011-07-05 03:57:07 +00:00
< ? php
2016-02-07 14:11:34 +00:00
2017-04-30 04:07:00 +00:00
use Friendica\App ;
2017-04-30 04:01:26 +00:00
use Friendica\Core\Config ;
2017-11-08 03:57:46 +00:00
use Friendica\Database\DBM ;
2017-03-26 05:29:24 +00:00
2017-01-09 12:12:54 +00:00
function community_init ( App $a ) {
2016-12-20 10:56:34 +00:00
if ( ! local_user ()) {
2011-10-12 02:27:58 +00:00
unset ( $_SESSION [ 'theme' ]);
2012-09-06 23:24:34 +00:00
unset ( $_SESSION [ 'mobile-theme' ]);
}
2016-02-05 20:52:39 +00:00
}
2011-10-12 02:27:58 +00:00
2017-01-09 12:12:54 +00:00
function community_content ( App $a , $update = 0 ) {
2011-07-05 03:57:07 +00:00
$o = '' ;
2017-03-26 05:29:24 +00:00
if (( Config :: get ( 'system' , 'block_public' )) && ( ! local_user ()) && ( ! remote_user ())) {
2011-07-05 03:57:07 +00:00
notice ( t ( 'Public access denied.' ) . EOL );
return ;
}
2017-03-26 05:29:24 +00:00
if ( Config :: get ( 'system' , 'community_page_style' ) == CP_NO_COMMUNITY_PAGE ) {
2011-07-05 03:57:07 +00:00
notice ( t ( 'Not available.' ) . EOL );
return ;
}
require_once ( " include/bbcode.php " );
require_once ( 'include/security.php' );
require_once ( 'include/conversation.php' );
2017-03-26 05:29:24 +00:00
if ( ! $update ) {
2011-08-17 16:36:24 +00:00
nav_set_selected ( 'community' );
2011-07-05 03:57:07 +00:00
}
2017-03-26 05:29:24 +00:00
if ( x ( $a -> data , 'search' )) {
2011-07-05 03:57:07 +00:00
$search = notags ( trim ( $a -> data [ 'search' ]));
2017-03-26 05:29:24 +00:00
} else {
2011-07-05 03:57:07 +00:00
$search = (( x ( $_GET , 'search' )) ? notags ( trim ( rawurldecode ( $_GET [ 'search' ]))) : '' );
2017-03-26 05:29:24 +00:00
}
2011-07-05 03:57:07 +00:00
// Here is the way permissions work in this module...
2012-03-20 21:55:18 +00:00
// Only public posts can be shown
2011-07-05 03:57:07 +00:00
// OR your own posts if you are a logged in member
2014-07-10 21:13:50 +00:00
$r = community_getitems ( $a -> pager [ 'start' ], $a -> pager [ 'itemspage' ]);
2011-07-05 03:57:07 +00:00
2017-11-08 03:57:46 +00:00
if ( ! DBM :: is_result ( $r )) {
2012-07-14 18:21:58 +00:00
info ( t ( 'No results.' ) . EOL );
return $o ;
}
2017-03-26 05:29:24 +00:00
$maxpostperauthor = Config :: get ( 'system' , 'max_author_posts_community_page' );
2014-06-10 18:21:43 +00:00
if ( $maxpostperauthor != 0 ) {
2014-07-10 21:13:50 +00:00
$count = 1 ;
2014-06-10 18:21:43 +00:00
$previousauthor = " " ;
$numposts = 0 ;
$s = array ();
2014-07-10 21:13:50 +00:00
do {
foreach ( $r AS $row => $item ) {
2017-03-26 05:29:24 +00:00
if ( $previousauthor == $item [ " author-link " ]) {
2014-07-10 21:13:50 +00:00
++ $numposts ;
2017-03-26 05:29:24 +00:00
} else {
2014-07-10 21:13:50 +00:00
$numposts = 0 ;
2017-03-26 05:29:24 +00:00
}
2014-07-10 21:13:50 +00:00
$previousauthor = $item [ " author-link " ];
2014-06-10 18:21:43 +00:00
2017-06-08 02:00:59 +00:00
if (( $numposts < $maxpostperauthor ) && ( sizeof ( $s ) < $a -> pager [ 'itemspage' ])) {
2014-07-10 21:13:50 +00:00
$s [] = $item ;
2017-03-26 05:29:24 +00:00
}
2014-07-10 21:13:50 +00:00
}
2017-03-26 05:29:24 +00:00
if (( sizeof ( $s ) < $a -> pager [ 'itemspage' ])) {
2014-07-10 21:13:50 +00:00
$r = community_getitems ( $a -> pager [ 'start' ] + ( $count * $a -> pager [ 'itemspage' ]), $a -> pager [ 'itemspage' ]);
2017-03-26 05:29:24 +00:00
}
2017-06-08 02:00:59 +00:00
} while (( sizeof ( $s ) < $a -> pager [ 'itemspage' ]) && ( ++ $count < 50 ) && ( sizeof ( $r ) > 0 ));
2017-03-26 05:29:24 +00:00
} else {
2014-06-10 18:21:43 +00:00
$s = $r ;
2017-03-26 05:29:24 +00:00
}
2011-07-05 03:57:07 +00:00
// we behave the same in message lists as the search module
2017-03-13 05:57:37 +00:00
$o .= conversation ( $a , $s , 'community' , $update );
2011-07-05 03:57:07 +00:00
2017-11-10 19:25:17 +00:00
$o .= alt_pager ( $a , count ( $r ));
2011-07-05 03:57:07 +00:00
2017-11-10 19:57:02 +00:00
$t = get_markup_template ( " community.tpl " );
2017-11-10 19:25:17 +00:00
return replace_macros ( $t , array (
'$content' => $o ,
'$header' => t ( " Community " ),
'$show_global_community_hint' => ( Config :: get ( 'system' , 'community_page_style' ) == CP_GLOBAL_COMMUNITY && Config :: get ( 'system' , 'show_global_community_hint' )),
2017-11-10 21:00:39 +00:00
'$global_community_hint' => t ( " This community stream shows all public posts received by this node. They may not reflect the opinions of this node’ s users. " )
2017-11-10 19:25:17 +00:00
));
2011-07-05 03:57:07 +00:00
}
2014-07-10 21:13:50 +00:00
function community_getitems ( $start , $itemspage ) {
2017-03-26 05:29:24 +00:00
if ( Config :: get ( 'system' , 'community_page_style' ) == CP_GLOBAL_COMMUNITY ) {
2014-12-21 10:02:31 +00:00
return ( community_getpublicitems ( $start , $itemspage ));
2017-03-26 05:29:24 +00:00
}
2017-08-11 08:04:01 +00:00
$r = dba :: p ( " SELECT " . item_fieldlists () . " FROM `thread`
2016-06-12 19:04:55 +00:00
INNER JOIN `user` ON `user` . `uid` = `thread` . `uid` AND NOT `user` . `hidewall`
2014-07-10 21:13:50 +00:00
INNER JOIN `item` ON `item` . `id` = `thread` . `iid`
AND `item` . `allow_cid` = '' AND `item` . `allow_gid` = ''
2017-08-11 08:04:01 +00:00
AND `item` . `deny_cid` = '' AND `item` . `deny_gid` = '' " .
item_joins () . " AND `contact`.`self`
2016-06-12 19:04:55 +00:00
WHERE `thread` . `visible` AND NOT `thread` . `deleted` AND NOT `thread` . `moderated`
AND NOT `thread` . `private` AND `thread` . `wall`
2017-08-11 08:04:01 +00:00
ORDER BY `thread` . `received` DESC LIMIT " .intval( $start ). " , " .intval( $itemspage )
2014-07-10 21:13:50 +00:00
);
2017-08-11 08:04:01 +00:00
return dba :: inArray ( $r );
2014-07-10 21:13:50 +00:00
}
2014-12-21 10:02:31 +00:00
function community_getpublicitems ( $start , $itemspage ) {
2017-08-11 08:04:01 +00:00
$r = dba :: p ( " SELECT " . item_fieldlists () . " FROM `thread`
INNER JOIN `item` ON `item` . `id` = `thread` . `iid` " .item_joins().
" WHERE `thread`.`uid` = 0 AND `verb` = ?
2017-12-23 07:33:51 +00:00
ORDER BY `thread` . `commented` DESC LIMIT " .intval( $start ). " , " .intval( $itemspage ),
2017-08-11 08:04:01 +00:00
ACTIVITY_POST
2014-12-21 10:02:31 +00:00
);
2017-12-23 07:33:51 +00:00
while ( $rr = dba :: fetch ( $r )) {
if ( ! in_array ( $rr [ 'item_id' ], $parents_arr )) {
$parents_arr [] = $rr [ 'item_id' ];
}
}
dba :: close ();
$max_comments = Config :: get ( " system " , " max_comments " , 100 );
$items = array ();
foreach ( $parents_arr AS $parents ) {
$thread_items = dba :: p ( item_query () . " AND `item`.`uid` = 0
AND `item` . `parent` = ?
ORDER BY `item` . `commented` DESC LIMIT " .intval( $max_comments + 1),
$parents
);
if ( DBM :: is_result ( $thread_items )) {
$items = array_merge ( $items , dba :: inArray ( $thread_items ));
}
}
$items = conv_sort ( $items , " `commented` " );
return $items ;
2014-12-21 10:02:31 +00:00
}