Merge pull request #539 from MrPetovan/bug/4555-remove-active-users-feature

[communityhome] Remove active users feature
This commit is contained in:
Michael Vogel 2018-03-08 14:19:45 +01:00 committed by GitHub
commit 3268eecd72
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 74 additions and 129 deletions

View file

@ -1,34 +1,17 @@
Community Home Community Home
-------------- --------------
This addon overwrites the default home page shown to not logged users. This addon overwrites the default home page shown to anonymous users.
On sidebar there are the login form, last ten users (if they have On the sidebar there are the login form, last ten users (if they chose
choosed to be in site directory), last ten public photos and last ten to be in the site directory), last ten public photos and last ten
"likes" sent by a site user or about a site user's item "likes" sent by a site user or about a site user's item.
In main content is shown the community stream. This addon doesn't In the main content is shown the community stream. This addon doesn't
honour your community page visibility site setting: the community honor your community page visibility site setting: the community
stream is shown also if you have choose to not show the community page. stream is shown also if you have choose to not show the community page.
If 'home.html' is found in your friendica root, its content is inserted If 'home.html' is found in your friendica root, its content is inserted
before community stream before community stream
Each elements can be show or not. At the moment, there is no admin page By default no features are enabled, you can edit this addon's settings
for settings, so this settings must be added to yout .htconfig.php through the admin panel.
$a->config['communityhome']['showcommunitystream'] = true;
$a->config['communityhome']['showlastlike'] = true;
$a->config['communityhome']['showlastphotos'] = true;
$a->config['communityhome']['showactiveusers'] = true;
$a->config['communityhome']['showlastusers'] = true;
If you don't want to show something, set it to false.
Note:
-----
- Default is "false". With no settings in .htconfig.php, nothing is
shown, except login form and content of 'home.html'
- Active users query can be heavy for db, and on some system don't work

View file

@ -1,40 +1,45 @@
<?php <?php
/** /**
* Name: Community home * Name: Community home
* Description: Show last community activity in homepage * Description: Show last community activity in homepage
* Version: 2.0 * Version: 2.0
* Author: Fabio Comuni <http://kirgroup.com/profile/fabrixxm> * Author: Fabio Comuni <http://kirgroup.com/profile/fabrixxm>
* Status: Unsupported
*/ */
use Friendica\App;
use Friendica\Core\Addon; use Friendica\Core\Addon;
use Friendica\Core\Config; use Friendica\Core\Config;
use Friendica\Core\L10n; use Friendica\Core\L10n;
use Friendica\Module\Login; use Friendica\Module\Login;
require_once('mod/community.php'); require_once 'mod/community.php';
function communityhome_install()
function communityhome_install() { {
Addon::registerHook('home_content', 'addon/communityhome/communityhome.php', 'communityhome_home'); Addon::registerHook('home_content', 'addon/communityhome/communityhome.php', 'communityhome_home');
logger("installed communityhome"); logger("installed communityhome");
} }
function communityhome_uninstall() { function communityhome_uninstall()
{
Addon::unregisterHook('home_content', 'addon/communityhome/communityhome.php', 'communityhome_home'); Addon::unregisterHook('home_content', 'addon/communityhome/communityhome.php', 'communityhome_home');
logger("removed communityhome"); logger("removed communityhome");
} }
function communityhome_getopts() { function communityhome_getopts()
{
return [ return [
'hidelogin'=>L10n::t('Hide login form'), 'hidelogin' => L10n::t('Hide login form'),
'showlastusers'=>L10n::t('Show last new users'), 'showlastusers' => L10n::t('Show last new users'),
'showactiveusers'=>L10n::t('Show last active users'), 'showlastphotos' => L10n::t('Show last photos'),
'showlastphotos'=>L10n::t('Show last photos'), 'showlastlike' => L10n::t('Show last liked items'),
'showlastlike'=>L10n::t('Show last liked items'), 'showcommunitystream' => L10n::t('Show community stream')
'showcommunitystream'=>L10n::t('Show community stream')
]; ];
} }
function communityhome_addon_admin(&$a, &$o) function communityhome_addon_admin(App $a, &$o)
{ {
$tpl = get_markup_template('settings.tpl', 'addon/communityhome/'); $tpl = get_markup_template('settings.tpl', 'addon/communityhome/');
@ -45,37 +50,37 @@ function communityhome_addon_admin(&$a, &$o)
]; ];
foreach ($opts as $k => $v) { foreach ($opts as $k => $v) {
$ctx['fields'][] = ['communityhome_'.$k, $v, Config::get('communityhome', $k)]; $ctx['fields'][] = ['communityhome_' . $k, $v, Config::get('communityhome', $k)];
} }
$o = replace_macros($tpl, $ctx); $o = replace_macros($tpl, $ctx);
} }
function communityhome_addon_admin_post(&$a, &$b) function communityhome_addon_admin_post(App $a)
{ {
if (x($_POST, 'communityhome-submit')) { if (x($_POST, 'communityhome-submit')) {
$opts = communityhome_getopts(); $opts = communityhome_getopts();
foreach ($opts as $k => $v) { foreach ($opts as $k => $v) {
Config::set('communityhome', $k, x($_POST, 'communityhome_'.$k)); Config::set('communityhome', $k, x($_POST, 'communityhome_' . $k));
} }
} }
} }
function communityhome_home(App $a, &$o)
function communityhome_home(&$a, &$o){ {
// custom css // custom css
$a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="'.$a->get_baseurl().'/addon/communityhome/communityhome.css" media="all" />'; $a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . $a->get_baseurl() . '/addon/communityhome/communityhome.css" media="all" />';
if (!Config::get('communityhome','hidelogin')){ if (!Config::get('communityhome', 'hidelogin')) {
$aside = [ $aside = [
'$tab_1' => L10n::t('Login'), '$tab_1' => L10n::t('Login'),
'$tab_2' => L10n::t('OpenID'), '$tab_2' => L10n::t('OpenID'),
'$noOid' => Config::get('system','no_openid'), '$noOid' => Config::get('system', 'no_openid'),
]; ];
// login form // login form
$aside['$login_title'] = L10n::t('Login'); $aside['$login_title'] = L10n::t('Login');
$aside['$login_form'] = Login::form($a->query_string, $a->config['register_policy'] == REGISTER_CLOSED ? false : true); $aside['$login_form'] = Login::form($a->query_string, $a->config['register_policy'] == REGISTER_CLOSED ? false : true);
} else { } else {
$aside = [ $aside = [
//'$tab_1' => L10n::t('Login'), //'$tab_1' => L10n::t('Login'),
//'$tab_2' => L10n::t('OpenID'), //'$tab_2' => L10n::t('OpenID'),
@ -84,26 +89,26 @@ function communityhome_home(&$a, &$o){
} }
// last 12 users // last 12 users
if (Config::get('communityhome','showlastusers')){ if (Config::get('communityhome', 'showlastusers')) {
$aside['$lastusers_title'] = L10n::t('Latest users'); $aside['$lastusers_title'] = L10n::t('Latest users');
$aside['$lastusers_items'] = []; $aside['$lastusers_items'] = [];
$sql_extra = ""; $sql_extra = "";
$publish = (Config::get('system','publish_all') ? '' : " AND `publish` = 1 " ); $publish = (Config::get('system', 'publish_all') ? '' : " AND `publish` = 1 " );
$order = " ORDER BY `register_date` DESC "; $order = " ORDER BY `register_date` DESC ";
$r = q("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname` $r = q("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname`
FROM `profile` LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid` FROM `profile` LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid`
WHERE `is-default` = 1 $publish AND `user`.`blocked` = 0 $sql_extra $order LIMIT %d , %d ", WHERE `is-default` = 1 $publish AND `user`.`blocked` = 0 $sql_extra $order LIMIT %d, %d ",
0, 0,
12 12
); );
# $tpl = file_get_contents( dirname(__file__).'/directory_item.tpl'); # $tpl = file_get_contents( dirname(__file__).'/directory_item.tpl');
$tpl = get_markup_template( 'directory_item.tpl', 'addon/communityhome/' ); $tpl = get_markup_template('directory_item.tpl', 'addon/communityhome/');
if(count($r)) { if (count($r)) {
$photo = 'thumb'; $photo = 'thumb';
foreach($r as $rr) { foreach ($r as $rr) {
$profile_link = $a->get_baseurl() . '/profile/' . ((strlen($rr['nickname'])) ? $rr['nickname'] : $rr['profile_uid']); $profile_link = $a->get_baseurl() . '/profile/' . ((strlen($rr['nickname'])) ? $rr['nickname'] : $rr['profile_uid']);
$entry = replace_macros($tpl,[ $entry = replace_macros($tpl, [
'$id' => $rr['id'], '$id' => $rr['id'],
'$profile_link' => $profile_link, '$profile_link' => $profile_link,
'$photo' => $rr[$photo], '$photo' => $rr[$photo],
@ -113,41 +118,9 @@ function communityhome_home(&$a, &$o){
} }
} }
} }
// 12 most active users (by posts and contacts)
// this query don't work on some mysql versions
if (Config::get('communityhome','showactiveusers')){
$r = q("SELECT `uni`.`contacts`,`uni`.`items`, `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname` FROM
(SELECT COUNT(*) as `contacts`, `uid` FROM `contact` WHERE `self`=0 GROUP BY `uid`) AS `con`,
(SELECT COUNT(*) as `items`, `uid` FROM `item` WHERE `item`.`changed` > DATE(NOW() - INTERVAL 1 MONTH) AND `item`.`wall` = 1 GROUP BY `uid`) AS `ite`,
(
SELECT `contacts`,`items`,`ite`.`uid` FROM `con` RIGHT OUTER JOIN `ite` ON `con`.`uid`=`ite`.`uid`
UNION ALL
SELECT `contacts`,`items`,`con`.`uid` FROM `con` LEFT OUTER JOIN `ite` ON `con`.`uid`=`ite`.`uid`
) AS `uni`, `user`, `profile`
WHERE `uni`.`uid`=`user`.`uid`
AND `uni`.`uid`=`profile`.`uid` AND `profile`.`publish`=1
GROUP BY `uid`
ORDER BY `items` DESC,`contacts` DESC
LIMIT 0,10");
if($r && count($r)) {
$aside['$activeusers_title'] = L10n::t('Most active users');
$aside['$activeusers_items'] = [];
$photo = 'thumb';
foreach($r as $rr) {
$profile_link = $a->get_baseurl() . '/profile/' . ((strlen($rr['nickname'])) ? $rr['nickname'] : $rr['profile_uid']);
$entry = replace_macros($tpl,[
'$id' => $rr['id'],
'$profile_link' => $profile_link,
'$photo' => $rr[$photo],
'$photo_user' => sprintf("%s (%s posts, %s contacts)",$rr['name'], ($rr['items']?$rr['items']:'0'), ($rr['contacts']?$rr['contacts']:'0'))
]);
$aside['$activeusers_items'][] = $entry;
}
}
}
// last 12 photos // last 12 photos
if (Config::get('communityhome','showlastphotos')){ if (Config::get('communityhome', 'showlastphotos')) {
$aside['$photos_title'] = L10n::t('Latest photos'); $aside['$photos_title'] = L10n::t('Latest photos');
$aside['$photos_items'] = []; $aside['$photos_items'] = [];
$r = q("SELECT `photo`.`id`, `photo`.`resource-id`, `photo`.`scale`, `photo`.`desc`, `user`.`nickname`, `user`.`username` FROM $r = q("SELECT `photo`.`id`, `photo`.`resource-id`, `photo`.`scale`, `photo`.`desc`, `user`.`nickname`, `user`.`username` FROM
@ -161,19 +134,19 @@ function communityhome_home(&$a, &$o){
AND `user`.`hidewall` = 0 AND `user`.`hidewall` = 0
ORDER BY `photo`.`edited` DESC ORDER BY `photo`.`edited` DESC
LIMIT 0, 12", LIMIT 0, 12",
dbesc(L10n::t('Contact Photos')), dbesc(L10n::t('Contact Photos')),
dbesc(L10n::t('Profile Photos')) dbesc(L10n::t('Profile Photos'))
); );
if(count($r)) { if (count($r)) {
# $tpl = file_get_contents( dirname(__file__).'/directory_item.tpl'); # $tpl = file_get_contents( dirname(__file__).'/directory_item.tpl');
$tpl = get_markup_template( 'directory_item.tpl', 'addon/communityhome/' ); $tpl = get_markup_template('directory_item.tpl', 'addon/communityhome/');
foreach($r as $rr) { foreach ($r as $rr) {
$photo_page = $a->get_baseurl() . '/photos/' . $rr['nickname'] . '/image/' . $rr['resource-id']; $photo_page = $a->get_baseurl() . '/photos/' . $rr['nickname'] . '/image/' . $rr['resource-id'];
$photo_url = $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['scale'] .'.jpg'; $photo_url = $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['scale'] . '.jpg';
$entry = replace_macros($tpl,[ $entry = replace_macros($tpl, [
'$id' => $rr['id'], '$id' => $rr['id'],
'$profile_link' => $photo_page, '$profile_link' => $photo_page,
'$photo' => $photo_url, '$photo' => $photo_url,
@ -187,7 +160,7 @@ function communityhome_home(&$a, &$o){
} }
// last 10 liked items // last 10 liked items
if (Config::get('communityhome','showlastlike')){ if (Config::get('communityhome', 'showlastlike')) {
$aside['$like_title'] = L10n::t('Latest likes'); $aside['$like_title'] = L10n::t('Latest likes');
$aside['$like_items'] = []; $aside['$like_items'] = [];
$r = q("SELECT `T1`.`created`, `T1`.`liker`, `T1`.`liker-link`, `item`.* FROM $r = q("SELECT `T1`.`created`, `T1`.`liker`, `T1`.`liker-link`, `item`.* FROM
@ -198,17 +171,18 @@ function communityhome_home(&$a, &$o){
GROUP BY `uri` GROUP BY `uri`
ORDER BY `T1`.`created` DESC ORDER BY `T1`.`created` DESC
LIMIT 0,10", LIMIT 0,10",
$a->get_baseurl(),$a->get_baseurl() $a->get_baseurl(),
); $a->get_baseurl()
);
foreach ($r as $rr) { foreach ($r as $rr) {
$author = '<a href="' . $rr['liker-link'] . '">' . $rr['liker'] . '</a>'; $author = '<a href="' . $rr['liker-link'] . '">' . $rr['liker'] . '</a>';
$objauthor = '<a href="' . $rr['author-link'] . '">' . $rr['author-name'] . '</a>'; $objauthor = '<a href="' . $rr['author-link'] . '">' . $rr['author-name'] . '</a>';
//var_dump($rr['verb'],$rr['object-type']); killme(); //var_dump($rr['verb'],$rr['object-type']); killme();
switch($rr['verb']){ switch ($rr['verb']) {
case 'http://activitystrea.ms/schema/1.0/post': case 'http://activitystrea.ms/schema/1.0/post':
switch ($rr['object-type']){ switch ($rr['object-type']) {
case 'http://activitystrea.ms/schema/1.0/event': case 'http://activitystrea.ms/schema/1.0/event':
$post_type = L10n::t('event'); $post_type = L10n::t('event');
break; break;
@ -217,9 +191,10 @@ function communityhome_home(&$a, &$o){
} }
break; break;
default: default:
if ($rr['resource-id']){ if ($rr['resource-id']) {
$post_type = L10n::t('photo'); $post_type = L10n::t('photo');
$m=[]; preg_match("/\[url=([^]]*)\]/", $rr['body'], $m); $m = [];
preg_match("/\[url=([^]]*)\]/", $rr['body'], $m);
$rr['plink'] = $m[1]; $rr['plink'] = $m[1];
} else { } else {
$post_type = L10n::t('status'); $post_type = L10n::t('status');
@ -228,7 +203,6 @@ function communityhome_home(&$a, &$o){
$plink = '<a href="' . $rr['plink'] . '">' . $post_type . '</a>'; $plink = '<a href="' . $rr['plink'] . '">' . $post_type . '</a>';
$aside['$like_items'][] = L10n::t('%1$s likes %2$s\'s %3$s', $author, $objauthor, $plink); $aside['$like_items'][] = L10n::t('%1$s likes %2$s\'s %3$s', $author, $objauthor, $plink);
} }
} }
@ -236,19 +210,16 @@ function communityhome_home(&$a, &$o){
$tpl = get_markup_template('communityhome.tpl', 'addon/communityhome/'); $tpl = get_markup_template('communityhome.tpl', 'addon/communityhome/');
$a->page['aside'] = replace_macros($tpl, $aside); $a->page['aside'] = replace_macros($tpl, $aside);
$o = '<h1>' . ((x($a->config,'sitename')) ? L10n::t("Welcome to %s", $a->config['sitename']) : "" ) . '</h1>'; $o = '<h1>' . ((x($a->config, 'sitename')) ? L10n::t("Welcome to %s", $a->config['sitename']) : "" ) . '</h1>';
if(file_exists('home.html')) if (file_exists('home.html')) $o = file_get_contents('home.html');
$o = file_get_contents('home.html');
if (Config::get('communityhome','showcommunitystream')){ if (Config::get('communityhome', 'showcommunitystream')) {
$oldset = Config::get('system','community_page_style'); $oldset = Config::get('system', 'community_page_style');
if ($oldset == CP_NO_COMMUNITY_PAGE) if ($oldset == CP_NO_COMMUNITY_PAGE) Config::set('system', 'community_page_style', CP_USERS_ON_SERVER);
Config::set('system','community_page_style', CP_USERS_ON_SERVER);
$o .= community_content($a,1); $o .= community_content($a, 1);
if ($oldset == CP_NO_COMMUNITY_PAGE) if ($oldset == CP_NO_COMMUNITY_PAGE) Config::set('system', 'community_page_style', $oldset);
Config::set('system','community_page_style', $oldset);
} }
} }

View file

@ -15,9 +15,9 @@
$("#tab_1").removeClass("active"); $("#tab_1").removeClass("active");
e.preventDefault(); e.preventDefault();
return false; return false;
}); });
}); });
</script> </script>
{{if $noOid}} {{if $noOid}}
@ -41,15 +41,6 @@
{{/if}} {{/if}}
{{if $activeusers_title}}
<h3>{{$activeusers_title}}</h3>
<div class='items-wrapper'>
{{foreach $activeusers_items as $i}}
{{$i}}
{{/foreach}}
</div>
{{/if}}
{{if $photos_title}} {{if $photos_title}}
<h3>{{$photos_title}}</h3> <h3>{{$photos_title}}</h3>
<div class='items-wrapper'> <div class='items-wrapper'>