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