Merge pull request #2095 from rabuzarus/unread_forums

count unread forum items for forumlist widget (ping.php)
This commit is contained in:
Michael Vogel 2015-11-27 16:28:21 +01:00
commit 9c37fc320e
11 changed files with 208 additions and 68 deletions

View file

@ -87,6 +87,7 @@ function widget_forumlist($a) {
'url' => $a->get_baseurl() . '/network?f=&cid=' . $contact['id'], 'url' => $a->get_baseurl() . '/network?f=&cid=' . $contact['id'],
'external_url' => $a->get_baseurl() . '/redir/' . $contact['id'], 'external_url' => $a->get_baseurl() . '/redir/' . $contact['id'],
'name' => $contact['name'], 'name' => $contact['name'],
'cid' => $contact['id'],
'micro' => proxy_url($contact['micro'], false, PROXY_SIZE_MICRO), 'micro' => proxy_url($contact['micro'], false, PROXY_SIZE_MICRO),
'id' => ++$id, 'id' => ++$id,
); );
@ -147,3 +148,30 @@ function forumlist_profile_advanced($uid) {
$o .= $forumlist; $o .= $forumlist;
return $o; return $o;
} }
/**
* @brief count unread forum items
*
* Count unread items of connected forums and private groups
*
* @return array
* 'id' => contact id
* 'name' => contact/forum name
* 'count' => counted unseen forum 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;
}

View file

@ -210,6 +210,13 @@
$(".group-"+gid+" .notify").addClass("show").text(gcount); $(".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') var eNotif = $(data).find('notif')

View file

@ -1,6 +1,7 @@
<?php <?php
require_once("include/datetime.php"); require_once("include/datetime.php");
require_once('include/bbcode.php'); require_once('include/bbcode.php');
require_once('include/forums.php');
require_once("mod/proxy.php"); require_once("mod/proxy.php");
function ping_init(&$a) { function ping_init(&$a) {
@ -34,6 +35,7 @@ function ping_init(&$a) {
$home = 0; $home = 0;
$network = 0; $network = 0;
$network_group = array(); $network_group = array();
$forums_unseen = array();
$r = q("SELECT `item`.`id`,`item`.`parent`, `item`.`verb`, `item`.`wall`, `item`.`author-name`, $r = q("SELECT `item`.`id`,`item`.`parent`, `item`.`verb`, `item`.`wall`, `item`.`author-name`,
`item`.`contact-id`, `item`.`author-link`, `item`.`author-avatar`, `item`.`created`, `item`.`object`, `item`.`contact-id`, `item`.`author-link`, `item`.`author-avatar`, `item`.`created`, `item`.`object`,
@ -100,6 +102,10 @@ function ping_init(&$a) {
#echo '<SQL id="' . intval(local_user()) . '">' . $sql . '</SQL>'; #echo '<SQL id="' . intval(local_user()) . '">' . $sql . '</SQL>';
$network_group = q($sql, intval(local_user()), intval(local_user())); $network_group = q($sql, intval(local_user()), intval(local_user()));
#echo '<COUNT R="' . count($network_group) . '"/>'; #echo '<COUNT R="' . count($network_group) . '"/>';
if(intval(feature_enabled(local_user(),'forumlist_widget'))) {
$forums_unseen = forums_count_unseen();
}
} }
$intros1 = q("SELECT `intro`.`id`, `intro`.`datetime`, $intros1 = q("SELECT `intro`.`id`, `intro`.`datetime`,
@ -220,6 +226,7 @@ function ping_init(&$a) {
<net>$network</net> <net>$network</net>
<home>$home</home>\r\n"; <home>$home</home>\r\n";
if ($register!=0) echo "<register>$register</register>"; if ($register!=0) echo "<register>$register</register>";
if ( count($network_group) ) { if ( count($network_group) ) {
echo '<groups>'; echo '<groups>';
foreach ($network_group as $it) { foreach ($network_group as $it) {
@ -228,6 +235,14 @@ function ping_init(&$a) {
echo "</groups>"; echo "</groups>";
} }
if ( count($forums_unseen) ) {
echo '<forums>';
foreach ($forums_unseen as $it) {
echo '<forum id="' . $it['id'] . '">' . $it['count'] . "</forum>";
}
echo "</forums>";
}
echo "<all-events>$all_events</all-events> echo "<all-events>$all_events</all-events>
<all-events-today>$all_events_today</all-events-today> <all-events-today>$all_events_today</all-events-today>
<events>$events</events> <events>$events</events>

View file

@ -288,28 +288,16 @@ ul.credits li {
} }
/* forumlist widget */ /* 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 { .forumlist-img {
height: 20px; height: 20px;
width: 20px; width: 20px;
vertical-align: middle;
}
#forum-widget-collapse {
opacity: 0.3;
}
#forum-widget-collapse:hover {
opacity: 1.0;
} }

View file

@ -1,45 +1,46 @@
<script> <script>
function showHideForumlist() { function showHideForumlist() {
if( $("div[id^='forum-widget-entry-extended-']").is(':visible')) { if( $("li[id^='forum-widget-entry-extended-']").is(':visible')) {
$("div[id^='forum-widget-entry-extended-']").hide(); $("li[id^='forum-widget-entry-extended-']").hide();
$('#forum-widget-collapse').html(window.showMore); $("li#forum-widget-collapse").html(window.showMore);
} }
else { else {
$("div[id^='forum-widget-entry-extended-']").show(); $("li[id^='forum-widget-entry-extended-']").show();
$('#forum-widget-collapse').html(window.showFewer); $("li#forum-widget-collapse").html(window.showFewer);
}
} }
}
</script> </script>
<div id="forumlist-sidebar" class="widget"> <div id="forumlist-sidebar" class="widget">
<h3 id="forumlist">{{$title}}</h3> <h3 id="forumlist">{{$title}}</h3>
<ul id="forumlist-sidbar-ul" role="menu">
{{foreach $forums as $forum}} {{foreach $forums as $forum}}
{{if $forum.id <= $visible_forums}} {{if $forum.id <= $visible_forums}}
<div class="forum-widget-entry" id="forum-widget-entry-{{$forum.id}}" role="menuitem"> <li class="forum-widget-entry forum-{{$forum.cid}}" id="forum-widget-entry-{{$forum.id}}" role="menuitem">
<span class="notify badge pull-right"></span>
<a href="{{$forum.external_url}}" title="{{$forum.link_desc}}" class="label sparkle" target="_blank"> <a href="{{$forum.external_url}}" title="{{$forum.link_desc}}" class="label sparkle" target="_blank">
<img class="forumlist-img" src="{{$forum.micro}}" alt="{{$forum.link_desc}}" /> <img class="forumlist-img" src="{{$forum.micro}}" alt="{{$forum.link_desc}}" />
</a> </a>
<a class="forum-widget-link" id="forum-widget-link-{{$forum.id}}" href="{{$forum.url}}" >{{$forum.name}}</a> <a class="forum-widget-link" id="forum-widget-link-{{$forum.id}}" href="{{$forum.url}}" >{{$forum.name}}</a>
</div> </li>
{{/if}} {{/if}}
{{if $forum.id > $visible_forums}} {{if $forum.id > $visible_forums}}
<div class="forum-widget-entry" id="forum-widget-entry-extended-{{$forum.id}}" role="menuitem" style="display: none;"> <li class="forum-widget-entry forum-{{$forum.cid}}" id="forum-widget-entry-extended-{{$forum.id}}" role="menuitem" style="display: none;">
<span class="notify badge pull-right"></span>
<a href="{{$forum.external_url}}" title="{{$forum.link_desc}}" class="label sparkle" target="_blank"> <a href="{{$forum.external_url}}" title="{{$forum.link_desc}}" class="label sparkle" target="_blank">
<img class="forumlist-img" src="{{$forum.micro}}" alt="{{$forum.link_desc}}" /> <img class="forumlist-img" src="{{$forum.micro}}" alt="{{$forum.link_desc}}" />
</a> </a>
<a class="forum-widget-link" id="forum-widget-link-{{$forum.id}}" href="{{$forum.url}}" >{{$forum.name}}</a> <a class="forum-widget-link" id="forum-widget-link-{{$forum.id}}" href="{{$forum.url}}" >{{$forum.name}}</a>
</div> </li>
{{/if}} {{/if}}
{{/foreach}} {{/foreach}}
{{if $total > $visible_forums }} {{if $total > $visible_forums }}
<div id="forum-widget-showmore" class="forum-widget-entry" role="menuitem"> <li onclick="showHideForumlist(); return false;" id="forum-widget-collapse" class="forum-widget-link fakelink tool">{{$showmore}}</li>
<a onclick="showHideForumlist(); return false;" id="forum-widget-collapse" class="forum-widget-link">{{$showmore}}</a>
</div>
{{/if}} {{/if}}
</ul>
</div> </div>

View file

@ -2039,7 +2039,7 @@ a.mail-list-link {
#sidebar-group-list ul { #sidebar-group-list ul {
list-style-type: none; list-style-type: none;
} }
.sidebar-group-li .notify { .sidebar-group-li .notify, .forum-widget-entry .notify {
display: none; display: none;
font-size: 9px; font-size: 9px;
border: 1px solid rgb(221, 221, 221); border: 1px solid rgb(221, 221, 221);
@ -2047,7 +2047,7 @@ a.mail-list-link {
float: right; float: right;
background-color: #BABDB6; background-color: #BABDB6;
} }
.sidebar-group-li .notify.show { .sidebar-group-li .notify.show, .forum-widget-entry .notify.show {
display: block; display: block;
} }
@ -2061,6 +2061,10 @@ a.mail-list-link {
margin-top: 10px; margin-top: 10px;
} }
#forumlist-sidebar ul {
list-style: none;
}
.nets-ul, .fileas-ul, .categories-ul, .datebrowse-ul { .nets-ul, .fileas-ul, .categories-ul, .datebrowse-ul {
list-style-type: none; list-style-type: none;
} }

View file

@ -2357,6 +2357,16 @@ a.mail-list-link {
margin-top: 10px; 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 { .nets-ul, .fileas-ul, .categories-ul, .datebrowse-ul {
list-style-type: none; list-style-type: none;
} }

View file

@ -11,6 +11,13 @@ $(document).ready(function(){
$(".group-"+gid+" .notify").addClass("on").text(gcount); $(".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); console.log(intro,mail);
if (notifCount > 0 ) { if (notifCount > 0 ) {

View file

@ -343,6 +343,22 @@ code {
margin-top: 20px; margin-top: 20px;
max-width: 640px; 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 { #panel {
position: absolute; position: absolute;
width: 10em; width: 10em;
@ -386,7 +402,7 @@ code {
.tool a { .tool a {
/* color: #000; */ /* 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: underline; */
text-decoration: none; text-decoration: none;
color: black; color: black;
@ -400,8 +416,8 @@ code {
opacity: 1; opacity: 1;
} }
.sidebar-group-li:hover, #sidebar-new-group:hover, #hide-forum-list: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 div:hover, #forum-list-right div: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 { .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: #ddd; */
/* background-color: #e5e5e5; */ /* background-color: #e5e5e5; */
@ -420,7 +436,7 @@ code {
font-weight: bold; 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 { .side-link, #peoplefind-desc, #connect-desc, .nets-all, .admin.link, #message-new {
padding-left: 10px; padding-left: 10px;
padding-top: 3px; padding-top: 3px;
@ -440,6 +456,14 @@ code {
padding-right: 5px; 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 { a.nets-link, .side-link a, #sidebar-new-group a, a.savedsearchterm, a.fileas-link, aside h4 a, right_aside h4 a {
display: block; display: block;
color: #737373; color: #737373;
@ -467,11 +491,11 @@ a.sidebar-group-element {
color: black; 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; color: #737373;
} }
#forumlist-sidebar, #forum-list-right { #forumlist-sidebar, #forumlist-sidebar-right {
margin-top: 2px; margin-top: 2px;
} }

View file

@ -0,0 +1,47 @@
<script>
function showHideForumlist() {
if( $("li[id^='forum-widget-entry-extended-']").is(':visible')) {
$("li[id^='forum-widget-entry-extended-']").hide();
$("li#forum-widget-collapse").html(window.showMore);
}
else {
$("li[id^='forum-widget-entry-extended-']").show();
$("li#forum-widget-collapse").html(window.showFewer);
}
}
</script>
<div id="forumlist-sidebar-right" class="widget">
<h3 id="forumlist">{{$title}}</h3>
<ul id="forumlist-sidbar-ul" role="menu">
{{foreach $forums as $forum}}
{{if $forum.id <= $visible_forums}}
<li class="forum-widget-entry forum-{{$forum.cid}}" id="forum-widget-entry-{{$forum.id}}" role="menuitem">
<a href="{{$forum.external_url}}" title="{{$forum.link_desc}}" class="label sparkle" target="_blank">
<img class="forumlist-img" src="{{$forum.micro}}" alt="{{$forum.link_desc}}" />
</a>
<a class="forum-widget-link" id="forum-widget-link-{{$forum.id}}" href="{{$forum.url}}" >{{$forum.name}}</a>
<span class="notify badge pull-right"></span>
</li>
{{/if}}
{{if $forum.id > $visible_forums}}
<li class="forum-widget-entry forum-{{$forum.cid}}" id="forum-widget-entry-extended-{{$forum.id}}" role="menuitem" style="display: none;">
<a href="{{$forum.external_url}}" title="{{$forum.link_desc}}" class="label sparkle" target="_blank">
<img class="forumlist-img" src="{{$forum.micro}}" alt="{{$forum.link_desc}}" />
</a>
<a class="forum-widget-link" id="forum-widget-link-{{$forum.id}}" href="{{$forum.url}}" >{{$forum.name}}</a>
<span class="notify padge pull-right"></span>
</li>
{{/if}}
{{/foreach}}
{{if $total > $visible_forums }}
<li onclick="showHideForumlist(); return false;" id="forum-widget-collapse" class="forum-widget-link tool fakelink">{{$showmore}}</li>
{{/if}}
</ul>
</div>

View file

@ -220,35 +220,44 @@ function vier_community_info() {
//Community_Pages at right_aside //Community_Pages at right_aside
if($show_pages AND local_user()) { if($show_pages AND local_user()) {
$pagelist = array(); require_once('include/forums.php');
$contacts = q("SELECT `id`, `url`, `name`, `micro` FROM `contact` //sort by last updated item
WHERE `network`= '%s' AND `uid` = %d AND (`forum` OR `prv`) AND $lastitem = true;
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']));
$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 if(count($contacts)) {
foreach($contacts as $contact) {
$pageD[] = array("url"=>$contact["url"], "name"=>$contact["name"], "id"=>$contact["id"], "micro"=>$contact['micro']);
};
$contacts = $pageD; $id = 0;
if ($contacts) {
$page = '
<h3>'.t("Community Pages").'</h3>
<div id="forum-list-right">';
foreach($contacts as $contact) { foreach($contacts as $contact) {
$page .= '<div role="menuitem"><a href="' . $a->get_baseurl() . '/redir/' . $contact["id"] . '" title="'.t('External link to forum').'" class="label sparkle" target="_blank"><img class="forumlist-img" height="20" width="20" src="' . $contact['micro'] .'" alt="'.t('External link to forum').'" /></a> <a href="' . $a->get_baseurl() . '/network?f=&cid=' . $contact['id'] . '" >' . $contact["name"]."</a></div>";
$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 .= '</div>';
$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; $aside['$page'] = $page;
} }
} }