From ddf3589fc5effa9fb28947e200bfe0a310cef88c Mon Sep 17 00:00:00 2001 From: rabuzarus <> Date: Tue, 24 Nov 2015 22:14:26 +0100 Subject: [PATCH] count unread forum items for forumlist widget (ping.php) --- include/forums.php | 28 ++++++++++ js/main.js | 7 +++ mod/ping.php | 15 ++++++ view/global.css | 30 ++++------- view/templates/widget_forumlist.tpl | 37 +++++++------- view/theme/duepuntozero/style.css | 8 ++- view/theme/frost/style.css | 10 ++++ view/theme/quattro/js/quattro.js | 7 +++ view/theme/vier/style.css | 36 ++++++++++--- .../vier/templates/widget_forumlist_right.tpl | 47 +++++++++++++++++ view/theme/vier/theme.php | 51 +++++++++++-------- 11 files changed, 208 insertions(+), 68 deletions(-) create mode 100644 view/theme/vier/templates/widget_forumlist_right.tpl diff --git a/include/forums.php b/include/forums.php index d8da36cc5c..2866d94e3f 100644 --- a/include/forums.php +++ b/include/forums.php @@ -87,6 +87,7 @@ function widget_forumlist($a) { 'url' => $a->get_baseurl() . '/network?f=&cid=' . $contact['id'], 'external_url' => $a->get_baseurl() . '/redir/' . $contact['id'], 'name' => $contact['name'], + 'cid' => $contact['id'], 'micro' => proxy_url($contact['micro'], false, PROXY_SIZE_MICRO), 'id' => ++$id, ); @@ -147,3 +148,30 @@ function forumlist_profile_advanced($uid) { $o .= $forumlist; return $o; } + +/** + * @brief count unread forum items + * + * Count unread items of connected forums and private groups + * + * @return array + * id = contact id + * name = contact name + * count = counted unseen items + * + */ + +function forums_count_unseen() { + $r = q("SELECT `contact`.`id`, `contact`.`name`, COUNT(`item`.`unseen`) AS `count` FROM `item` + INNER JOIN `contact` ON `item`.`contact-id` = `contact`.`id` + WHERE `item`.`uid` = %d AND `item`.`visible` AND NOT `item`.`deleted` + AND `contact`.`network`= 'dfrn' AND (`contact`.`forum` OR `contact`.`prv`) + AND NOT `contact`.`blocked` AND NOT `contact`.`hidden` + AND NOT `contact`.`pending` AND NOT `contact`.`archive` + AND `contact`.`success_update` > `failure_update` + GROUP BY `contact`.`id` ", + intval(local_user()) + ); + + return $r; +} diff --git a/js/main.js b/js/main.js index df454afe1f..f67d7183ce 100644 --- a/js/main.js +++ b/js/main.js @@ -210,6 +210,13 @@ $(".group-"+gid+" .notify").addClass("show").text(gcount); }); + $(".forum-widget-entry .notify").removeClass("show"); + $(data).find("forum").each(function() { + var fid = this.id; + var fcount = this.innerHTML; + $(".forum-"+fid+" .notify").addClass("show").text(fcount); + }); + var eNotif = $(data).find('notif') diff --git a/mod/ping.php b/mod/ping.php index 30b5785aec..9075bd28a7 100644 --- a/mod/ping.php +++ b/mod/ping.php @@ -1,6 +1,7 @@ ' . $sql . ''; $network_group = q($sql, intval(local_user()), intval(local_user())); #echo ''; + + if(intval(feature_enabled(local_user(),'forumlist_widget'))) { + $forums_unseen = forums_count_unseen(); + } } $intros1 = q("SELECT `intro`.`id`, `intro`.`datetime`, @@ -219,6 +225,7 @@ function ping_init(&$a) { $network $home\r\n"; if ($register!=0) echo "$register"; + if ( count($network_group) ) { echo ''; foreach ($network_group as $it) { @@ -227,6 +234,14 @@ function ping_init(&$a) { echo ""; } + if ( count($forums_unseen) ) { + echo ''; + foreach ($forums_unseen as $it) { + echo '' . $it['count'] . ""; + } + echo ""; + } + echo "$all_events $all_events_today $events diff --git a/view/global.css b/view/global.css index 24d0819db5..115fab2711 100644 --- a/view/global.css +++ b/view/global.css @@ -288,28 +288,16 @@ ul.credits li { } /* forumlist widget */ -#hide-forum-list { - opacity: 0.3; - filter:alpha(opacity=30); -} - -#hide-forum-list:hover { - opacity: 1.0; - filter:alpha(opacity=100); -} - - -#forumlist-settings-label, #forumlist-random-label, #forumlist-profile-label, #forumlist-network-label { - float: left; - width: 200px; - margin-bottom: 25px; -} - -#forumlist-max-forumlists, #forumlist-random, #forumlist-profile, #forumlist-network { - float: left; -} - .forumlist-img { height: 20px; width: 20px; + vertical-align: middle; +} + +#forum-widget-collapse { + opacity: 0.3; +} + +#forum-widget-collapse:hover { + opacity: 1.0; } diff --git a/view/templates/widget_forumlist.tpl b/view/templates/widget_forumlist.tpl index 44dcd8f1e8..54d7df82d2 100644 --- a/view/templates/widget_forumlist.tpl +++ b/view/templates/widget_forumlist.tpl @@ -1,45 +1,46 @@

{{$title}}

- {{foreach $forums as $forum}} +
diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css index 0198431919..3e9bed33b3 100644 --- a/view/theme/duepuntozero/style.css +++ b/view/theme/duepuntozero/style.css @@ -2039,7 +2039,7 @@ a.mail-list-link { #sidebar-group-list ul { list-style-type: none; } -.sidebar-group-li .notify { +.sidebar-group-li .notify, .forum-widget-entry .notify { display: none; font-size: 9px; border: 1px solid rgb(221, 221, 221); @@ -2047,7 +2047,7 @@ a.mail-list-link { float: right; background-color: #BABDB6; } -.sidebar-group-li .notify.show { +.sidebar-group-li .notify.show, .forum-widget-entry .notify.show { display: block; } @@ -2061,6 +2061,10 @@ a.mail-list-link { margin-top: 10px; } +#forumlist-sidebar ul { + list-style: none; +} + .nets-ul, .fileas-ul, .categories-ul, .datebrowse-ul { list-style-type: none; } diff --git a/view/theme/frost/style.css b/view/theme/frost/style.css index 35abed3c5d..5909df2355 100644 --- a/view/theme/frost/style.css +++ b/view/theme/frost/style.css @@ -2357,6 +2357,16 @@ a.mail-list-link { margin-top: 10px; } +#forumlist-sidebar ul { + list-style: none; +} + +.forumlist-img { + height: 20px; + width: 20px; + vertical-align: middle; +} + .nets-ul, .fileas-ul, .categories-ul, .datebrowse-ul { list-style-type: none; } diff --git a/view/theme/quattro/js/quattro.js b/view/theme/quattro/js/quattro.js index c2573ebd1d..259874a299 100644 --- a/view/theme/quattro/js/quattro.js +++ b/view/theme/quattro/js/quattro.js @@ -11,6 +11,13 @@ $(document).ready(function(){ $(".group-"+gid+" .notify").addClass("on").text(gcount); }); + $(".forum-widget-entry .notify").removeClass("on"); + $(data).find("forum").each(function() { + var fid = this.id; + var fcount = this.innerHTML; + $(".forum-"+fid+" .notify").addClass("on").text(fcount); + }); + console.log(intro,mail); if (notifCount > 0 ) { diff --git a/view/theme/vier/style.css b/view/theme/vier/style.css index db96be9fb1..ecbb2ad96c 100644 --- a/view/theme/vier/style.css +++ b/view/theme/vier/style.css @@ -343,6 +343,22 @@ code { margin-top: 20px; max-width: 640px; } +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: 700; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + /* background-color: #737373*/; + background-color: #36C; + border-radius: 4px; + opacity: 0.3; +} #panel { position: absolute; width: 10em; @@ -386,7 +402,7 @@ code { .tool a { /* color: #000; */ } -.tool a:hover, .widget a:hover, #nets-sidear a:hover, #hide-forum-list:hover, .admin.link a:hover, aside h4 a:hover, right_aside h4 a:hover { +.tool a:hover, .widget a:hover, #nets-sidear a:hover, #forum-widget-collapse:hover, .admin.link a:hover, aside h4 a:hover, right_aside h4 a:hover { /* text-decoration: underline; */ text-decoration: none; color: black; @@ -400,8 +416,8 @@ code { opacity: 1; } -.sidebar-group-li:hover, #sidebar-new-group:hover, #hide-forum-list:hover, -#sidebar-ungrouped:hover, .side-link:hover, .nets-ul li:hover, #forumlist-sidebar div:hover, #forum-list-right div:hover, +.sidebar-group-li:hover, #sidebar-new-group:hover, #forum-widget-collapse:hover, +#sidebar-ungrouped:hover, .side-link:hover, .nets-ul li:hover, #forumlist-sidebar li:hover, #forumlist-sidebar-right li:hover, .nets-all:hover, .saved-search-li:hover, li.tool:hover, .admin.link:hover, aside h4 a:hover, right_aside h4 a:hover, #message-new:hover { /* background-color: #ddd; */ /* background-color: #e5e5e5; */ @@ -420,7 +436,7 @@ code { font-weight: bold; } -#forum-widget-showmore, #sidebar-new-group, #hide-forum-list, #forum-list-right, #sidebar-ungrouped, +#forum-widget-showmore, #sidebar-new-group, #forum-widget-collapse, #forumlist-rsidebar-right, #sidebar-ungrouped, .side-link, #peoplefind-desc, #connect-desc, .nets-all, .admin.link, #message-new { padding-left: 10px; padding-top: 3px; @@ -440,6 +456,14 @@ code { padding-right: 5px; } +#forumlist-sidebar .notify, #forumlist-sidebar-right .notify { + display: none; +} + +#forumlist-sidebar .notify.show, #forumlist-sidebar-right .notify.show { + display: inline-block; +} + a.nets-link, .side-link a, #sidebar-new-group a, a.savedsearchterm, a.fileas-link, aside h4 a, right_aside h4 a { display: block; color: #737373; @@ -467,11 +491,11 @@ a.sidebar-group-element { color: black; } -#forumlist-sidebar a, #forum-list-right a, .tool a, .admin.link a { +#forumlist-sidebar a, #forumlist-sidebar-right a, .tool a, .admin.link a { color: #737373; } -#forumlist-sidebar, #forum-list-right { +#forumlist-sidebar, #forumlist-sidebar-right { margin-top: 2px; } diff --git a/view/theme/vier/templates/widget_forumlist_right.tpl b/view/theme/vier/templates/widget_forumlist_right.tpl new file mode 100644 index 0000000000..49e7723e8e --- /dev/null +++ b/view/theme/vier/templates/widget_forumlist_right.tpl @@ -0,0 +1,47 @@ + + +
+

{{$title}}

+ + + +
diff --git a/view/theme/vier/theme.php b/view/theme/vier/theme.php index 3c808b52af..789ba1daf1 100644 --- a/view/theme/vier/theme.php +++ b/view/theme/vier/theme.php @@ -220,35 +220,44 @@ function vier_community_info() { //Community_Pages at right_aside if($show_pages AND local_user()) { - $pagelist = array(); + require_once('include/forums.php'); - $contacts = q("SELECT `id`, `url`, `name`, `micro` FROM `contact` - WHERE `network`= '%s' AND `uid` = %d AND (`forum` OR `prv`) AND - NOT `hidden` AND NOT `blocked` AND - NOT `archive` AND NOT `pending` AND - `success_update` > `failure_update` - ORDER BY `name` ASC", - dbesc(NETWORK_DFRN), intval($a->user['uid'])); + //sort by last updated item + $lastitem = true; - $pageD = array(); + $contacts = get_forumlist($a->user['uid'],true,$lastitem, true); + $total = count($contacts); + $visible_forums = 10; - // Look if the profile is a community page - foreach($contacts as $contact) { - $pageD[] = array("url"=>$contact["url"], "name"=>$contact["name"], "id"=>$contact["id"], "micro"=>$contact['micro']); - }; + if(count($contacts)) { - $contacts = $pageD; - - if ($contacts) { - $page = ' -

'.t("Community Pages").'

-
'; + $id = 0; foreach($contacts as $contact) { - $page .= '
'.t('External link to forum').' ' . $contact["name"]."
"; + + $entry = array( + 'url' => $a->get_baseurl() . '/network?f=&cid=' . $contact['id'], + 'external_url' => $a->get_baseurl() . '/redir/' . $contact['id'], + 'name' => $contact['name'], + 'cid' => $contact['id'], + 'micro' => proxy_url($contact['micro'], false, PROXY_SIZE_MICRO), + 'id' => ++$id, + ); + $entries[] = $entry; } - $page .= '
'; + + $tpl = get_markup_template('widget_forumlist_right.tpl'); + + $page .= replace_macros($tpl,array( + '$title' => t('Forums'), + '$forums' => $entries, + '$link_desc' => t('External link to forum'), + '$total' => $total, + '$visible_forums' => $visible_forums, + '$showmore' => t('show more'), + )); + $aside['$page'] = $page; } }