]> git.mxchange.org Git - friendica.git/commitdiff
count unread forum items for forumlist widget (ping.php)
authorrabuzarus <>
Tue, 24 Nov 2015 21:14:26 +0000 (22:14 +0100)
committerrabuzarus <>
Tue, 24 Nov 2015 21:14:26 +0000 (22:14 +0100)
include/forums.php
js/main.js
mod/ping.php
view/global.css
view/templates/widget_forumlist.tpl
view/theme/duepuntozero/style.css
view/theme/frost/style.css
view/theme/quattro/js/quattro.js
view/theme/vier/style.css
view/theme/vier/templates/widget_forumlist_right.tpl [new file with mode: 0644]
view/theme/vier/theme.php

index d8da36cc5c694760036980f970c806ae946b9b8c..2866d94e3f8588baa3238b4aaced0b7da70ca792 100644 (file)
@@ -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;
+}
index df454afe1fb8bbccdf1aa86fafe9486917da74c0..f67d7183cedabb5e476e094459c386592a070ff9 100644 (file)
                                $(".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')
 
index 30b5785aeca7d2df4e8524c56c67299e30775627..9075bd28a708421bb27356bf987b5a2012596ba4 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 require_once("include/datetime.php");
 require_once('include/bbcode.php');
+require_once('include/forums.php');
 require_once("mod/proxy.php");
 
 function ping_init(&$a) {
@@ -34,6 +35,7 @@ function ping_init(&$a) {
                $home = 0;
                $network = 0;
                $network_group = array();
+               $forums_unseen = array();
 
                $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`,
@@ -99,6 +101,10 @@ function ping_init(&$a) {
                        #echo '<SQL id="' . intval(local_user()) . '">' . $sql . '</SQL>';
                        $network_group = q($sql, intval(local_user()), intval(local_user()));
                        #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`,
@@ -219,6 +225,7 @@ function ping_init(&$a) {
                                <net>$network</net>
                                <home>$home</home>\r\n";
                if ($register!=0) echo "<register>$register</register>";
+
                if ( count($network_group) ) {
                        echo '<groups>';
                        foreach ($network_group as $it) {
@@ -227,6 +234,14 @@ function ping_init(&$a) {
                        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>
                        <all-events-today>$all_events_today</all-events-today>
                        <events>$events</events>
index 24d0819db5b82d81619351afc04dd1e0b844e2de..115fab27119ca710cabfe615b661204aa27c454f 100644 (file)
@@ -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-img {
+  height: 20px;
+  width: 20px;
+  vertical-align: middle;
 }
 
-#forumlist-max-forumlists, #forumlist-random, #forumlist-profile, #forumlist-network {
-  float: left;
+#forum-widget-collapse {
+  opacity: 0.3;
 }
 
-.forumlist-img {
-  height: 20px;
-  width: 20px;
+#forum-widget-collapse:hover {
+  opacity: 1.0;
 }
index 44dcd8f1e884255b002bb1891248bf97da0b086f..54d7df82d219cdd0da068913dc32626f87210e58 100644 (file)
@@ -1,45 +1,46 @@
 <script>
 
 function showHideForumlist() {
-       if( $("div[id^='forum-widget-entry-extended-']").is(':visible')) {
-               $("div[id^='forum-widget-entry-extended-']").hide();
-               $('#forum-widget-collapse').html(window.showMore);
+       if( $("li[id^='forum-widget-entry-extended-']").is(':visible')) {
+               $("li[id^='forum-widget-entry-extended-']").hide();
+               $("li#forum-widget-collapse").html(window.showMore);
 
        }
        else {
-               $("div[id^='forum-widget-entry-extended-']").show();
-               $('#forum-widget-collapse').html(window.showFewer);
-       }
+               $("li[id^='forum-widget-entry-extended-']").show();
+               $("li#forum-widget-collapse").html(window.showFewer);
        }
+}
 </script>
 
 <div id="forumlist-sidebar" class="widget">
        <h3 id="forumlist">{{$title}}</h3>
 
-       {{foreach $forums as $forum}}
+       <ul id="forumlist-sidbar-ul" role="menu">
+               {{foreach $forums as $forum}}
                {{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">
                                <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>
-               </div>
+               </li>
                {{/if}}
        
                {{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">
                                <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>
-               </div>
+               </li>
                {{/if}}
-       {{/foreach}}
-
-       {{if $total > $visible_forums }}
-       <div id="forum-widget-showmore" class="forum-widget-entry" role="menuitem">
-               <a onclick="showHideForumlist(); return false;" id="forum-widget-collapse" class="forum-widget-link">{{$showmore}}</a>
-       </div>
-       {{/if}}
+               {{/foreach}}
 
+               {{if $total > $visible_forums }}
+               <li onclick="showHideForumlist(); return false;" id="forum-widget-collapse" class="forum-widget-link fakelink tool">{{$showmore}}</li>
+               {{/if}}
+       </ul>
 </div>
index 0198431919bfc9759dcfb1b3a1dc1236532689f7..3e9bed33b3ab0ec6c1a916ab225b2ed00ff83068 100644 (file)
@@ -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;
 }
index 35abed3c5d011d248509b421cbe8128c9eacc58b..5909df23553226028fd6c5702d1eb4fe6acbdbd8 100644 (file)
@@ -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;
 }
index c2573ebd1d5f726cf58e03c2895c7afe28499ca0..259874a299d4fb634852ead2c2fc19dc221bf90b 100644 (file)
@@ -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 ) {
index db96be9fb1c474557b32c173b1240836f38c0160..ecbb2ad96cb8c156305dc69f9476911b71145ad9 100644 (file)
@@ -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 (file)
index 0000000..49e7723
--- /dev/null
@@ -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>
index 3c808b52af0ec8b97203370296b3cf76df26cf0b..789ba1daf1cabdca0567eced5d4ac5f110a7e5b5 100644 (file)
@@ -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 = '
-                               <h3>'.t("Community Pages").'</h3>
-                               <div id="forum-list-right">';
+                       $id = 0;
 
                        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;
                }
        }