From 9fd7bf20943732c0cec16f9e6f6c0772013d6739 Mon Sep 17 00:00:00 2001 From: Fabio Comuni Date: Thu, 7 Jul 2011 14:07:11 +0200 Subject: [PATCH 1/2] Community Home addon --- communityhome/README.md | 11 +++ communityhome/communityhome.css | 21 +++++ communityhome/communityhome.php | 152 +++++++++++++++++++++++++++++++ communityhome/directory_item.tpl | 10 ++ 4 files changed, 194 insertions(+) create mode 100644 communityhome/README.md create mode 100644 communityhome/communityhome.css create mode 100644 communityhome/communityhome.php create mode 100644 communityhome/directory_item.tpl diff --git a/communityhome/README.md b/communityhome/README.md new file mode 100644 index 00000000..3cf610ec --- /dev/null +++ b/communityhome/README.md @@ -0,0 +1,11 @@ +Community Home +-------------- + +This plugin overwrites the default home page shown to not logged users. +On sidebar there are the login form, last ten users (if they have +choosed to be in site directory), last ten public photos and last ten +"likes" sent by a site user or about a site user's item + +In main content is shown the community stream. This plugin doesn't +honour your community page visibility site setting: the community +stream is shown also if you have choose to not show the community page. diff --git a/communityhome/communityhome.css b/communityhome/communityhome.css new file mode 100644 index 00000000..73e7b59f --- /dev/null +++ b/communityhome/communityhome.css @@ -0,0 +1,21 @@ +aside #label-login-name, +aside #login-name, +aside #label-login-password, +aside #login-password { + float: none !important; +} +aside #login-name-end, +aside #login-password-end, +aside #login-extra-end, +aside #login-submit-end, +aside #login-extra-filler { + float: none; height: 5px; + margin: 0px; +} +aside #login-submit-button { margin-left: 100px; } +aside .items-wrapper, +aside #login-extra-links { overflow: auto; width: 100%; } +aside .directory-item { width: 55px; height: 55px; } +aside .directory-photo { margin: 0px; } +aside .directory-photo-img { max-width: 48px; max-height: 48px; } +aside #likes { margin: 0px; padding: 0px; list-style: none; } diff --git a/communityhome/communityhome.php b/communityhome/communityhome.php new file mode 100644 index 00000000..99d507a4 --- /dev/null +++ b/communityhome/communityhome.php @@ -0,0 +1,152 @@ + + */ + + +require_once('mod/community.php'); + + +function communityhome_install() { + register_hook('home_content', 'addon/communityhome/communityhome.php', 'communityhome_home'); + logger("installed communityhome"); +} + +function communityhome_uninstall() { + unregister_hook('home_content', 'addon/communityhome/communityhome.php', 'communityhome_home'); + logger("removed communityhome"); +} + +function communityhome_home(&$a, &$o){ + // custom css + $a->page['htmlhead'] .= ''; + + // login form + $aside .= "

". t('Login'). "

"; + $aside .= login(($a->config['register_policy'] == REGISTER_CLOSED) ? false : true); + + // last 10 users + $aside .= "

". t('Last users'). "

"; + $sql_extra = ""; + $publish = (get_config('system','publish_all') ? '' : " AND `publish` = 1 " ); + $order = " ORDER BY `register_date` DESC "; + + $r = q("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname`, `user`.`timezone` + 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 ", + 0, + 10 + ); + $aside .= "
"; + if(count($r)) { + + $tpl = file_get_contents( dirname(__file__).'/directory_item.tpl'); + + $photo = 'thumb'; + + foreach($r as $rr) { + $profile_link = $a->get_baseurl() . '/profile/' . ((strlen($rr['nickname'])) ? $rr['nickname'] : $rr['profile_uid']); + + $entry = replace_macros($tpl,array( + '$id' => $rr['id'], + '$profile-link' => $profile_link, + '$photo' => $rr[$photo], + '$alt-text' => $rr['name'], + )); + + $aside .= $entry; + + } + } + $aside .= "
"; + + // last 10 photos + $aside .= "

". t('Last photos'). "

"; + $r = q("SELECT `photo`.`id`, `photo`.`resource-id`, `photo`.`scale`, `photo`.`desc`, `user`.`nickname`, `user`.`username` FROM + (SELECT `resource-id`, MAX(`scale`) as maxscale FROM `photo` + WHERE `profile`=0 AND `height` NOT IN ( 175, 80, 48) + AND `allow_cid`='' AND `allow_gid`='' AND `deny_cid`='' AND `deny_gid`='' GROUP BY `resource-id`) AS `t1` + INNER JOIN `photo` ON `photo`.`resource-id`=`t1`.`resource-id` AND `photo`.`scale` = `t1`.`maxscale`, + `user` + WHERE `user`.`uid` = `photo`.`uid` + AND `user`.`blockwall`=0 + ORDER BY `photo`.`edited` DESC + LIMIT 0, 10"); + + $aside .= "
"; + if(count($r)) { + $tpl = file_get_contents( dirname(__file__).'/directory_item.tpl'); + foreach($r as $rr) { + $photo_page = $a->get_baseurl() . '/photos/' . $rr['nickname'] . '/image/' . $rr['resource-id']; + $photo_url = $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['scale'] .'.jpg'; + + $entry = replace_macros($tpl,array( + '$id' => $rr['id'], + '$profile-link' => $photo_page, + '$photo' => $photo_url, + '$alt-text' => $rr['username']." : ".$rr['desc'], + )); + + $aside .= $entry; + } + } + $aside .= "
"; + + // last 10 liked items + $aside .= "

". t('Last likes'). "

"; + $r = q("SELECT `T1`.`created`, `T1`.`liker`, `T1`.`liker-link`, `item`.* FROM + (SELECT `parent-uri`, `created`, `author-name` AS `liker`,`author-link` AS `liker-link` + FROM `item` WHERE `verb`='http://activitystrea.ms/schema/1.0/like' GROUP BY `parent-uri` ORDER BY `created` DESC) AS T1 + INNER JOIN `item` ON `item`.`uri`=`T1`.`parent-uri` + WHERE `T1`.`liker-link` LIKE '%s%%' OR `item`.`author-link` LIKE '%s%%' + GROUP BY `uri` + ORDER BY `T1`.`created` DESC + LIMIT 0,10", + $a->get_baseurl(),$a->get_baseurl() + ); + + $aside .= ""; + + + $a->page['aside'] = $aside; + + $o = '

' . ((x($a->config,'sitename')) ? sprintf( t("Welcome to %s") ,$a->config['sitename']) : "" ) . '

'; + + $oldset = get_config('system','no_community_page'); + set_config('system','no_community_page', false); + $o .= community_content($a,1); + set_config('system','no_community_page', $oldset); +} diff --git a/communityhome/directory_item.tpl b/communityhome/directory_item.tpl new file mode 100644 index 00000000..db1936e4 --- /dev/null +++ b/communityhome/directory_item.tpl @@ -0,0 +1,10 @@ + +
+
+
+ + $alt-text + +
+
+
From d01eb2c5f59f3797e0fadffc750f35d18dd77d7c Mon Sep 17 00:00:00 2001 From: Fabio Comuni Date: Thu, 7 Jul 2011 17:08:05 +0200 Subject: [PATCH 2/2] add "most active users" --- communityhome/communityhome.css | 2 +- communityhome/communityhome.php | 56 +++++++++++++++++++++++++-------- 2 files changed, 44 insertions(+), 14 deletions(-) diff --git a/communityhome/communityhome.css b/communityhome/communityhome.css index 73e7b59f..a031e176 100644 --- a/communityhome/communityhome.css +++ b/communityhome/communityhome.css @@ -15,7 +15,7 @@ aside #login-extra-filler { aside #login-submit-button { margin-left: 100px; } aside .items-wrapper, aside #login-extra-links { overflow: auto; width: 100%; } -aside .directory-item { width: 55px; height: 55px; } +aside .directory-item { width: 55px; height: 55px; vertical-align: center; text-align: center; } aside .directory-photo { margin: 0px; } aside .directory-photo-img { max-width: 48px; max-height: 48px; } aside #likes { margin: 0px; padding: 0px; list-style: none; } diff --git a/communityhome/communityhome.php b/communityhome/communityhome.php index 99d507a4..8020d82b 100644 --- a/communityhome/communityhome.php +++ b/communityhome/communityhome.php @@ -28,53 +28,83 @@ function communityhome_home(&$a, &$o){ $aside .= "

". t('Login'). "

"; $aside .= login(($a->config['register_policy'] == REGISTER_CLOSED) ? false : true); - // last 10 users + // last 12 users $aside .= "

". t('Last users'). "

"; $sql_extra = ""; $publish = (get_config('system','publish_all') ? '' : " AND `publish` = 1 " ); $order = " ORDER BY `register_date` DESC "; - $r = q("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname`, `user`.`timezone` + $r = q("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname` 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 ", 0, - 10 + 12 ); $aside .= "
"; + $tpl = file_get_contents( dirname(__file__).'/directory_item.tpl'); if(count($r)) { - - $tpl = file_get_contents( dirname(__file__).'/directory_item.tpl'); - $photo = 'thumb'; - foreach($r as $rr) { $profile_link = $a->get_baseurl() . '/profile/' . ((strlen($rr['nickname'])) ? $rr['nickname'] : $rr['profile_uid']); - $entry = replace_macros($tpl,array( '$id' => $rr['id'], '$profile-link' => $profile_link, '$photo' => $rr[$photo], '$alt-text' => $rr['name'], )); - $aside .= $entry; - } } $aside .= "
"; - // last 10 photos + // 12 most active users (by posts and contacts) + // this query don't work on some mysql versions + $r = q("SELECT `uni`.`contacts`,`uni`.`items`, `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname` FROM + (SELECT COUNT(`id`) as `contacts`, `uid` FROM `contact` WHERE `self`=0 GROUP BY `uid`) AS `con`, + (SELECT COUNT(`id`) 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 .= "

". t('Most active users'). "

"; + $aside .= "
"; + + $photo = 'thumb'; + foreach($r as $rr) { + $profile_link = $a->get_baseurl() . '/profile/' . ((strlen($rr['nickname'])) ? $rr['nickname'] : $rr['profile_uid']); + $entry = replace_macros($tpl,array( + '$id' => $rr['id'], + '$profile-link' => $profile_link, + '$photo' => $rr[$photo], + '$alt-text' => sprintf("%s (%s posts, %s contacts)",$rr['name'], ($rr['items']?$rr['items']:'0'), ($rr['contacts']?$rr['contacts']:'0')) + )); + $aside .= $entry; + } + $aside .= "
"; + } + + // last 12 photos $aside .= "

". t('Last photos'). "

"; $r = q("SELECT `photo`.`id`, `photo`.`resource-id`, `photo`.`scale`, `photo`.`desc`, `user`.`nickname`, `user`.`username` FROM (SELECT `resource-id`, MAX(`scale`) as maxscale FROM `photo` - WHERE `profile`=0 AND `height` NOT IN ( 175, 80, 48) + WHERE `profile`=0 AND `contact-id`=0 AND `album` NOT IN ('Contact Photos', '%s', 'Profile Photos', '%s') AND `allow_cid`='' AND `allow_gid`='' AND `deny_cid`='' AND `deny_gid`='' GROUP BY `resource-id`) AS `t1` INNER JOIN `photo` ON `photo`.`resource-id`=`t1`.`resource-id` AND `photo`.`scale` = `t1`.`maxscale`, `user` WHERE `user`.`uid` = `photo`.`uid` AND `user`.`blockwall`=0 ORDER BY `photo`.`edited` DESC - LIMIT 0, 10"); + LIMIT 0, 12", + dbesc(t('Contact Photos')), + dbesc(t('Profile Photos')) + ); $aside .= "
"; if(count($r)) {