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 @@
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 @@
+
+
+
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 .= '
";
+
+ $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;
}
}