Browse Source

update dropdown notifications - refs #2681

Alex Aragón 6 years ago
parent
commit
27cdd8072c

+ 10 - 0
assets/css/scss/_topbar.scss

@@ -253,6 +253,16 @@
     .preview-thumbnail{
       color: #ffffff;
       position: relative;
+      .preview-icon{
+        width: 40px;
+        height: 40px;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        padding: 6px;
+        text-align: center;
+        border-radius: 100%;
+      }
       img {
         width: 36px;
         height: 36px;

+ 18 - 0
main/inc/ajax/message.ajax.php

@@ -13,6 +13,24 @@ require_once __DIR__.'/../global.inc.php';
 $action = $_GET['a'];
 
 switch ($action) {
+    case 'get_notifications_inbox':
+        $userId = api_get_user_id();
+        $listInbox = [];
+        if (api_get_setting('allow_message_tool') == 'true') {
+            $list = MessageManager::getNumberOfMessages(true, true);
+            foreach ($list as $row){
+                $user = api_get_user_info($row['user_sender_id']);
+                $temp['title'] = $row['title'];
+                $temp['date'] = $row['send_date'];
+                $temp['fullname'] = $user['complete_name'];
+                $temp['email'] = $user['email'];
+                $temp['url'] = api_get_path(WEB_PATH). 'main/messages/view_message.php?id='.$row['id'];
+                $listInbox[] = $temp;
+            }
+        }
+        header("Content-type:application/json");
+        echo json_encode($listInbox);
+        break;
     case 'get_notifications_friends':
         $userId = api_get_user_id();
         $listInvitations = [];

+ 23 - 12
main/inc/lib/message.lib.php

@@ -51,15 +51,17 @@ class MessageManager
      *
      * @param bool $unread
      *
+     * @param bool $listRead
      * @return int
      */
-    public static function getNumberOfMessages($unread = false)
+    public static function getNumberOfMessages($unread = false, $listRead = false)
     {
         $table = Database::get_main_table(TABLE_MESSAGE);
+        $list = null;
         if ($unread) {
-            $condition_msg_status = ' msg_status = '.MESSAGE_STATUS_UNREAD.' ';
+            $condition_msg_status = ' msg_status = ' . MESSAGE_STATUS_UNREAD . ' ';
         } else {
-            $condition_msg_status = ' msg_status IN('.MESSAGE_STATUS_NEW.','.MESSAGE_STATUS_UNREAD.') ';
+            $condition_msg_status = ' msg_status IN(' . MESSAGE_STATUS_NEW . ',' . MESSAGE_STATUS_UNREAD . ') ';
         }
 
         $keyword = Session::read('message_search_keyword');
@@ -68,18 +70,27 @@ class MessageManager
             $keyword = Database::escape_string($keyword);
             $keywordCondition = " AND (title like '%$keyword%' OR content LIKE '%$keyword%') ";
         }
-
-        $sql = "SELECT COUNT(id) as number_messages
-                FROM $table
-                WHERE $condition_msg_status AND
-                    user_receiver_id=".api_get_user_id()."
+        if ($listRead) {
+            $sql = "SELECT * ";
+        } else {
+            $sql = "SELECT COUNT(id) as number_messages ";
+        }
+        $sql .= " FROM $table
+                  WHERE $condition_msg_status AND
+                    user_receiver_id=" . api_get_user_id() . "
                     $keywordCondition
                 ";
         $result = Database::query($sql);
-        $result = Database::fetch_array($result);
-
-        if ($result) {
-            return (int) $result['number_messages'];
+        if ($listRead) {
+            while ($row = Database::fetch_array($result, 'ASSOC')) {
+                $list[] = $row;
+            }
+            return $list;
+        } else {
+            $count = Database::fetch_array($result);
+            if ($result) {
+                return (int)$count['number_messages'];
+            }
         }
 
         return 0;

+ 2 - 1
main/inc/lib/social.lib.php

@@ -400,6 +400,7 @@ class SocialManager extends UserManager
      *
      * @param int $userId
      *
+     * @param $limit
      * @return array
      */
     public static function get_list_invitation_of_friends_by_user_id($userId, $limit)
@@ -416,7 +417,7 @@ class SocialManager extends UserManager
                 WHERE
                     user_receiver_id = '.$userId.' AND
                     msg_status = '.MESSAGE_STATUS_INVITATION_PENDING;
-        if ($limit) {
+        if ($limit > 0) {
             $sql .= ' LIMIT '.$limit;
         }
         $res = Database::query($sql);

+ 1 - 1
main/social/invitations.php

@@ -89,7 +89,7 @@ $social_menu_block = SocialManager::show_social_menu('invitations');
 $socialInvitationsBlock = '<div id="id_response" align="center"></div>';
 
 $user_id = api_get_user_id();
-$list_get_invitation = SocialManager::get_list_invitation_of_friends_by_user_id($user_id);
+$list_get_invitation = SocialManager::get_list_invitation_of_friends_by_user_id($user_id,0);
 $list_get_invitation_sent = SocialManager::get_list_invitation_sent_by_user_id($user_id);
 $pending_invitations = $userGroupModel->get_groups_by_user(
     $user_id,

+ 1 - 1
src/ThemeBundle/Resources/views/Layout/base-layout.html.twig

@@ -35,7 +35,7 @@
         const loader = document.getElementById('loader');
         setTimeout(() => {
             loader.classList.add('fadeOut');
-        }, 1000);
+        }, 100);
     });
 </script>
 

+ 40 - 6
src/ThemeBundle/Resources/views/Layout/topbar.html.twig

@@ -96,13 +96,12 @@
                     }
                     if(countInbox != 0){
                         $("#notifications-inbox").removeClass('d-none');
-                        $("#notifications-inbox").append(countFriends);
+                        $("#notifications-inbox").append(countInbox);
                     }
                 }
             );
 
-            $('#list_notifications').on('click', e => {
-
+            $('#list_notifications_friends').on('click', e => {
                 const $listFriends = $('#list_friends .content');
                 let $html;
                 $.get(
@@ -123,6 +122,30 @@
                     }
                 );
             });
+
+            $('#list_notifications_inbox').on('click', e => {
+                const $listInbox = $('#list_inbox .content');
+                let $html;
+                $.get(
+                    '{{ url('legacy_main', { name : 'inc/ajax/message.ajax.php'}) }}',
+                    {'a': 'get_notifications_inbox'},
+                    function (data) {
+                        $listInbox.empty();
+                        for (let i in data){
+                            $html =  '<div class="dropdown-divider"></div>';
+                            $html += '<a class="dropdown-item preview-item" href="'+data[i].url+'">';
+                            $html += '<div class="preview-thumbnail"><div class="preview-icon bg-info">';
+                            $html += '<i class="far fa-envelope"></i>';
+                            $html += '</div></div>';
+                            $html += '<div class="preview-item-content flex-grow">';
+                            $html += '<h6 class="preview-subject">' + data[i].fullname + '<span class="date-ago float-right">'+data[i].date+'</span></h6>';
+                            $html += '<p class="preview-text">' + data[i].title + '</p>';
+                            $html += '</div></a>';
+                            $listInbox.append($html);
+                        }
+                    }
+                );
+            });
         });
     </script>
     <div class="header navbar">
@@ -159,7 +182,7 @@
 
                 <li class="notifications dropdown">
                     <span id="notifications-social" class="counter d-none"></span>
-                    <a id="list_notifications" href="#" class="dropdown-toggle no-after" data-toggle="dropdown">
+                    <a id="list_notifications_friends" href="#" class="dropdown-toggle no-after" data-toggle="dropdown">
                         <i class="far fa-bell"></i>
                     </a>
 
@@ -171,16 +194,27 @@
                             <span class="badge badge-pill badge-warning float-right">View all</span>
                         </a>
                         <div class="content">
-
+                            <div class="spinner"></div>
                         </div>
                     </ul>
 
                 </li>
                 <li class="notifications">
                     <span id="notifications-inbox" class="counter d-none"></span>
-                    <a href="{{ url('legacy_main', { 'name' : 'messages/inbox.php' }) }}" class="no-after">
+                    <a id="list_notifications_inbox" href="#" class="dropdown-toggle no-after" data-toggle="dropdown">
                         <i class="far fa-envelope"></i>
                     </a>
+                    <ul id="list_inbox" class="dropdown-menu ">
+                        <a class="dropdown-item">
+                            <p id="notifications_text" class="mb-0 font-weight-normal float-left">
+                                Recent messages
+                            </p>
+                            <span class="badge badge-pill badge-warning float-right">View all</span>
+                        </a>
+                        <div class="content">
+                            <div class="spinner"></div>
+                        </div>
+                    </ul>
                 </li>
 
                 <li class="dropdown">