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