فهرست منبع

Ticket #1128 - Notifications popup.

AntonLV 8 سال پیش
والد
کامیت
79ea9a0b43

+ 20 - 5
modules/base/notifications/classes/BxBaseModNotificationsTemplate.php

@@ -16,18 +16,33 @@ class BxBaseModNotificationsTemplate extends BxBaseModGeneralTemplate
         parent::__construct($oConfig, $oDb);
         parent::__construct($oConfig, $oDb);
     }
     }
 
 
-	public function getCssJs()
+    public function getCss($bDynamic = false)
     {
     {
-        $this->addCss(array(
+        $mixedResult = $this->addCss(array(
             'view.css',
             'view.css',
             'view-media-tablet.css',
             'view-media-tablet.css',
             'view-media-desktop.css',
             'view-media-desktop.css',
-        ));
-        $this->addJs(array(
+        ), $bDynamic);
+
+        if($bDynamic)
+            return $mixedResult; 
+    }
+
+    public function getJs($bDynamic = false)
+    {
+        $mixedResult = $this->addJs(array(
         	'jquery.anim.js',
         	'jquery.anim.js',
             'main.js',
             'main.js',
             'view.js',
             'view.js',
-        ));
+        ), $bDynamic);
+
+        if($bDynamic)
+            return $mixedResult; 
+    }
+
+	public function getCssJs($bDynamic = false)
+    {
+        return $this->getCss($bDynamic) . $this->getJs($bDynamic);
     }
     }
 
 
 	public function getJsCode($sType, $aParams = array(), $bWrap = true)
 	public function getJsCode($sType, $aParams = array(), $bWrap = true)

+ 2 - 1
modules/boonex/notifications/classes/BxNtfsConfig.php

@@ -69,7 +69,8 @@ class BxNtfsConfig extends BxBaseModNotificationsConfig
 
 
     	$sOptionPrefix = $this->getPrefix('option');
     	$sOptionPrefix = $this->getPrefix('option');
     	$this->_aPerPage = array(
     	$this->_aPerPage = array(
-    		'default' => (int)getParam($sOptionPrefix . 'events_per_page')
+    		'default' => (int)getParam($sOptionPrefix . 'events_per_page'),
+    	    'preview' => (int)getParam($sOptionPrefix . 'events_per_preview')
     	);
     	);
 
 
     	$aSettings = array(
     	$aSettings = array(

+ 80 - 0
modules/boonex/notifications/classes/BxNtfsMenuPreview.php

@@ -0,0 +1,80 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Notifications Notifications
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxNtfsMenuPreview extends BxTemplMenuCustom
+{
+    protected $_sModule;
+    protected $_oModule;
+
+    protected $_sTmplContentPreviewItem;
+
+    public function __construct($aObject, $oTemplate = false)
+    {
+        $this->_sModule = 'bx_notifications';
+        $this->_oModule = BxDolModule::getInstance($this->_sModule);
+
+        if(!$oTemplate)
+            $oTemplate = $this->_oModule->_oTemplate;
+
+        parent::__construct($aObject, $oTemplate);
+
+        if(empty($this->_sTmplContentPreviewItem))
+            $this->_sTmplContentPreviewItem = $this->_oTemplate->getHtml('menu_preview_item.html');
+    }
+
+    public function getMenuItems ()
+    {
+        $aItems = parent::getMenuItems();
+        if(empty($aItems) || !is_array($aItems))
+            return MsgBox(_t('_Empty'));
+
+        return $aItems;
+    }
+
+    public function getCode ()
+    {
+        $sCode = parent::getCode();
+        $sCode = $this->_oTemplate->parseHtmlByName('menu_preview.html', array(
+            'content' => $sCode
+        ));
+        $sCode .= $this->_oTemplate->getCss(true);
+
+        return $sCode;
+    }
+
+    protected function getMenuItemsRaw ()
+    {
+        $aItems = $this->_oModule->serviceGetUnreadNotifications();
+        if(empty($aItems) || !is_array($aItems))
+            return array();
+
+        $iItemsMax = $this->_oModule->_oConfig->getPerPage('preview');
+        if(count($aItems) > $iItemsMax)
+            $aItems = array_slice($aItems, 0, $iItemsMax);
+
+        foreach($aItems as $iKey => $aItem) 
+            $aItems[$iKey]['name'] = 'event';
+
+        return array_merge($aItems, $this->_oQuery->getMenuItems());
+    }
+
+    protected function _getMenuItemDefault ($aItem)
+    {
+        return $this->_oTemplate->parseHtmlByContent($this->_sTmplContentPreviewItem, $aItem);
+    }
+
+    protected function _getMenuItemEvent($aItem)
+    {
+        return $this->_oTemplate->getPost($aItem);
+    }
+}
+
+/** @} */

+ 32 - 0
modules/boonex/notifications/classes/BxNtfsModule.php

@@ -126,6 +126,38 @@ class BxNtfsModule extends BxBaseModNotificationsModule
     	return $this->_oDb->getEvents($aParams);
     	return $this->_oDb->getEvents($aParams);
     }
     }
 
 
+    /**
+     * @page service Service Calls
+     * @section bx_notifications Notifications
+     * @subsection bx_notifications-other Other
+     * @subsubsection bx_notifications-get_unread_notifications get_unread_notifications
+     * 
+     * @code bx_srv('bx_notifications', 'get_unread_notifications', [...]); @endcode
+     * 
+     * Get unread notifications.
+     *
+     * @return array with unread notifications.
+     * 
+     * @see BxNtfsModule::serviceGetUnreadNotifications
+     */
+    /** 
+     * @ref bx_notifications-get_unread_notifications "get_unread_notifications"
+     */
+    public function serviceGetUnreadNotifications($iOwnerId = 0)
+    {
+    	if(!$iOwnerId)
+			$iOwnerId = $this->getUserId();
+
+		if(!$iOwnerId)
+			return 0;
+
+		$aParams = $this->_prepareParams(BX_NTFS_TYPE_DEFAULT, $iOwnerId);
+		$aParams['new'] = 1;
+
+		list($aEvent) = $this->_oDb->getEvents($aParams, true);
+		return $aEvent;
+    }
+
     /**
     /**
      * @page service Service Calls
      * @page service Service Calls
      * @section bx_notifications Notifications
      * @section bx_notifications Notifications

+ 5 - 0
modules/boonex/notifications/install/langs/en.xml

@@ -13,8 +13,13 @@
 	<string name="_bx_ntfs_menu_item_title_notifications_all"><![CDATA[All Notifications]]></string>
 	<string name="_bx_ntfs_menu_item_title_notifications_all"><![CDATA[All Notifications]]></string>
     <string name="_bx_ntfs_menu_item_title_system_notifications"><![CDATA[Notifications]]></string>
     <string name="_bx_ntfs_menu_item_title_system_notifications"><![CDATA[Notifications]]></string>
     <string name="_bx_ntfs_menu_item_title_notifications"><![CDATA[Notifications]]></string>
     <string name="_bx_ntfs_menu_item_title_notifications"><![CDATA[Notifications]]></string>
+    <string name="_bx_ntfs_menu_title_preview"><![CDATA[Notifications Preview]]></string>
+    <string name="_bx_ntfs_menu_set_title_preview"><![CDATA[Notifications Preview]]></string>
+    <string name="_bx_ntfs_menu_item_title_system_more"><![CDATA[See all notifications]]></string>
+    <string name="_bx_ntfs_menu_item_title_more"><![CDATA[See all notifications]]></string>
 
 
 	<string name="_bx_ntfs_option_events_per_page"><![CDATA[Number of items per page]]></string>
 	<string name="_bx_ntfs_option_events_per_page"><![CDATA[Number of items per page]]></string>
+	<string name="_bx_ntfs_option_events_per_preview"><![CDATA[Number of items in preview]]></string>
 	<string name="_bx_ntfs_option_events_hide_site"><![CDATA[Onsite notifications]]></string>
 	<string name="_bx_ntfs_option_events_hide_site"><![CDATA[Onsite notifications]]></string>
 	<string name="_bx_ntfs_option_events_hide_email"><![CDATA[Email notifications]]></string>
 	<string name="_bx_ntfs_option_events_hide_email"><![CDATA[Email notifications]]></string>
 	<string name="_bx_ntfs_option_events_hide_push"><![CDATA[Push notifications]]></string>
 	<string name="_bx_ntfs_option_events_hide_push"><![CDATA[Push notifications]]></string>

+ 1 - 1
modules/boonex/notifications/install/sql/disable.sql

@@ -9,7 +9,7 @@ DELETE FROM `sys_pages_blocks` WHERE `module` = @sName;
 -- MENU
 -- MENU
 DELETE FROM `sys_objects_menu` WHERE `module` = @sName;
 DELETE FROM `sys_objects_menu` WHERE `module` = @sName;
 DELETE FROM `sys_menu_sets` WHERE `module` = @sName;
 DELETE FROM `sys_menu_sets` WHERE `module` = @sName;
-DELETE FROM `sys_menu_items` WHERE `module` = @sName OR `set_name` IN('bx_notifications_submenu');
+DELETE FROM `sys_menu_items` WHERE `module` = @sName OR `set_name` IN('bx_notifications_submenu', 'bx_notifications_preview');
 
 
 
 
 -- SETTINGS
 -- SETTINGS

+ 13 - 2
modules/boonex/notifications/install/sql/enable.sql

@@ -25,10 +25,20 @@ INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES
 INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
 INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
 ('bx_notifications_submenu', @sName, 'notifications-all', '_bx_ntfs_menu_item_title_system_notifications_all', '_bx_ntfs_menu_item_title_notifications_all', 'page.php?i=notifications-view', '', '', '', '', 2147483647, 1, 0, 1);
 ('bx_notifications_submenu', @sName, 'notifications-all', '_bx_ntfs_menu_item_title_system_notifications_all', '_bx_ntfs_menu_item_title_notifications_all', 'page.php?i=notifications-view', '', '', '', '', 2147483647, 1, 0, 1);
 
 
+-- MENU: preview popup
+INSERT INTO `sys_objects_menu`(`object`, `title`, `set_name`, `module`, `template_id`, `deletable`, `active`, `override_class_name`, `override_class_file`) VALUES 
+('bx_notifications_preview', '_bx_ntfs_menu_title_preview', 'bx_notifications_preview', @sName, 20, 0, 1, 'BxNtfsMenuPreview', 'modules/boonex/notifications/classes/BxNtfsMenuPreview.php');
+
+INSERT INTO `sys_menu_sets`(`set_name`, `module`, `title`, `deletable`) VALUES 
+('bx_notifications_preview', @sName, '_bx_ntfs_menu_set_title_preview', 0);
+
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+('bx_notifications_preview', @sName, 'more', '_bx_ntfs_menu_item_title_system_more', '_bx_ntfs_menu_item_title_more', 'page.php?i=notifications-view', '', '', '', '', 2147483647, 1, 0, 1);
+
 -- MENU: Notifications
 -- MENU: Notifications
 SET @iMIOrder = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_menu_items` WHERE `set_name` = 'sys_account_notifications' AND `order` < 9999);
 SET @iMIOrder = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_menu_items` WHERE `set_name` = 'sys_account_notifications' AND `order` < 9999);
-INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES
-('sys_account_notifications', @sName, 'notifications-notifications', '_bx_ntfs_menu_item_title_system_notifications', '_bx_ntfs_menu_item_title_notifications', 'page.php?i=notifications-view', '', '', 'bell col-green3', 'a:2:{s:6:"module";s:16:"bx_notifications";s:6:"method";s:28:"get_unread_notifications_num";}', '', 2147483646, 1, 1, @iMIOrder + 1);
+INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `submenu_popup`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES
+('sys_account_notifications', @sName, 'notifications-notifications', '_bx_ntfs_menu_item_title_system_notifications', '_bx_ntfs_menu_item_title_notifications', 'javascript:void(0)', 'bx_menu_slide(''bx_notifications_preview'', this, ''site'', {id:{value:''bx_notifications_preview'', force:1}});', '', 'bell col-green3', 'a:2:{s:6:"module";s:16:"bx_notifications";s:6:"method";s:28:"get_unread_notifications_num";}', 'bx_notifications_preview', '1', 2147483646, 1, 1, @iMIOrder + 1);
 
 
 
 
 -- SETTINGS
 -- SETTINGS
@@ -43,6 +53,7 @@ SET @iCategId = LAST_INSERT_ID();
 
 
 INSERT INTO `sys_options` (`name`, `value`, `category_id`, `caption`, `type`, `check`, `check_params`, `check_error`, `extra`, `order`) VALUES
 INSERT INTO `sys_options` (`name`, `value`, `category_id`, `caption`, `type`, `check`, `check_params`, `check_error`, `extra`, `order`) VALUES
 ('bx_notifications_events_per_page', '12', @iCategId, '_bx_ntfs_option_events_per_page', 'digit', '', '', '', '', 1),
 ('bx_notifications_events_per_page', '12', @iCategId, '_bx_ntfs_option_events_per_page', 'digit', '', '', '', '', 1),
+('bx_notifications_events_per_preview', '6', @iCategId, '_bx_ntfs_option_events_per_preview', 'digit', '', '', '', '', 5),
 ('bx_notifications_events_hide_site', '', @iCategId, '_bx_ntfs_option_events_hide_site', 'rlist', '', '', '', 'a:2:{s:6:"module";s:16:"bx_notifications";s:6:"method";s:21:"get_actions_checklist";}', 10),
 ('bx_notifications_events_hide_site', '', @iCategId, '_bx_ntfs_option_events_hide_site', 'rlist', '', '', '', 'a:2:{s:6:"module";s:16:"bx_notifications";s:6:"method";s:21:"get_actions_checklist";}', 10),
 ('bx_notifications_events_hide_email', '', @iCategId, '_bx_ntfs_option_events_hide_email', 'rlist', '', '', '', 'a:2:{s:6:"module";s:16:"bx_notifications";s:6:"method";s:21:"get_actions_checklist";}', 11),
 ('bx_notifications_events_hide_email', '', @iCategId, '_bx_ntfs_option_events_hide_email', 'rlist', '', '', '', 'a:2:{s:6:"module";s:16:"bx_notifications";s:6:"method";s:21:"get_actions_checklist";}', 11),
 ('bx_notifications_events_hide_push', '', @iCategId, '_bx_ntfs_option_events_hide_push', 'rlist', '', '', '', 'a:2:{s:6:"module";s:16:"bx_notifications";s:6:"method";s:21:"get_actions_checklist";}', 12);
 ('bx_notifications_events_hide_push', '', @iCategId, '_bx_ntfs_option_events_hide_push', 'rlist', '', '', '', 'a:2:{s:6:"module";s:16:"bx_notifications";s:6:"method";s:21:"get_actions_checklist";}', 12);

+ 6 - 0
modules/boonex/notifications/template/css/view.css

@@ -21,4 +21,10 @@ div.bx-ntfs-owner-avatar {
 div.bx-ntfs-empty div.bx-msg-box-container {
 div.bx-ntfs-empty div.bx-msg-box-container {
 	margin-top: 0px;
 	margin-top: 0px;
 	margin-bottom: 0px;
 	margin-bottom: 0px;
+}
+
+/*--- Preview Popup Style ---*/
+.bx-menu-object-bx_notifications_preview .bx-ntfs-preview-item {
+	width: 100%;
+	text-align: center;
 }
 }

+ 2 - 0
modules/boonex/notifications/template/menu_preview.html

@@ -0,0 +1,2 @@
+<div class="bx-def-font-h1 bx-def-padding-sec-bottom"><bx_text:_bx_ntfs_menu_item_title_notifications /></div>
+__content__

+ 5 - 0
modules/boonex/notifications/template/menu_preview_item.html

@@ -0,0 +1,5 @@
+<span class="bx-ntfs-preview-item bx-def-margin-sec-topbottom">
+    <a href="__link__" target="__target__" onclick="__onclick__" title="__title_attr__">
+        <bx_if:title>__title__</bx_if:title>
+    </a>
+</span>

+ 5 - 0
modules/boonex/russian/data/langs/bx_notifications/ru.xml

@@ -13,8 +13,13 @@
 	<string name="_bx_ntfs_menu_item_title_notifications_all"><![CDATA[Все уведомления]]></string>
 	<string name="_bx_ntfs_menu_item_title_notifications_all"><![CDATA[Все уведомления]]></string>
     <string name="_bx_ntfs_menu_item_title_system_notifications"><![CDATA[Уведомления]]></string>
     <string name="_bx_ntfs_menu_item_title_system_notifications"><![CDATA[Уведомления]]></string>
     <string name="_bx_ntfs_menu_item_title_notifications"><![CDATA[Уведомления]]></string>
     <string name="_bx_ntfs_menu_item_title_notifications"><![CDATA[Уведомления]]></string>
+    <string name="_bx_ntfs_menu_title_preview"><![CDATA[Уведомления - Пред просмотр]]></string>
+    <string name="_bx_ntfs_menu_set_title_preview"><![CDATA[Уведомления - Пред просмотр]]></string>
+    <string name="_bx_ntfs_menu_item_title_system_more"><![CDATA[Смотреть все уведомления]]></string>
+    <string name="_bx_ntfs_menu_item_title_more"><![CDATA[Смотреть все уведомления]]></string>
 
 
 	<string name="_bx_ntfs_option_events_per_page"><![CDATA[Количество элементов на странице]]></string>
 	<string name="_bx_ntfs_option_events_per_page"><![CDATA[Количество элементов на странице]]></string>
+	<string name="_bx_ntfs_option_events_per_preview"><![CDATA[Количество элементов в пред просмотре]]></string>
 	<string name="_bx_ntfs_option_events_hide_site"><![CDATA[Уведомления на сайте]]></string>
 	<string name="_bx_ntfs_option_events_hide_site"><![CDATA[Уведомления на сайте]]></string>
 	<string name="_bx_ntfs_option_events_hide_email"><![CDATA[Уведомления через имейл]]></string>
 	<string name="_bx_ntfs_option_events_hide_email"><![CDATA[Уведомления через имейл]]></string>
 	<string name="_bx_ntfs_option_events_hide_push"><![CDATA[Push-уведомления]]></string>
 	<string name="_bx_ntfs_option_events_hide_push"><![CDATA[Push-уведомления]]></string>

+ 3 - 2
modules/boonex/timeline/classes/BxTimelineTemplate.php

@@ -27,9 +27,9 @@ class BxTimelineTemplate extends BxBaseModNotificationsTemplate
         $this->_bShowTimelineDividers = false;
         $this->_bShowTimelineDividers = false;
     }
     }
 
 
-    public function getCssJs()
+    public function getCssJs($bDynamic = false)
     {
     {
-    	parent::getCssJs();
+    	parent::getCssJs($bDynamic);
 
 
         $this->addCss(array(
         $this->addCss(array(
         	BX_DIRECTORY_PATH_PLUGINS_PUBLIC . 'flickity/|flickity.css',
         	BX_DIRECTORY_PATH_PLUGINS_PUBLIC . 'flickity/|flickity.css',
@@ -38,6 +38,7 @@ class BxTimelineTemplate extends BxBaseModNotificationsTemplate
             'post.css',
             'post.css',
             'repost.css',
             'repost.css',
         ));
         ));
+
         $this->addJs(array(
         $this->addJs(array(
             'jquery-ui/jquery-ui.custom.min.js',
             'jquery-ui/jquery-ui.custom.min.js',
             'jquery.form.min.js',
             'jquery.form.min.js',