AntonLV 9 лет назад
Родитель
Сommit
c13e1ee3c4

+ 13 - 2
inc/classes/BxDolLiveUpdates.php

@@ -19,6 +19,8 @@ class BxDolLiveUpdates extends BxDolFactory implements iBxDolSingleton
     protected $_aSystems;
     protected $_aSystemsActive;
 
+    protected $_iProfileId;
+
     protected $_iInterval;
 
 	protected $_iCacheTTL;  
@@ -31,18 +33,27 @@ class BxDolLiveUpdates extends BxDolFactory implements iBxDolSingleton
     {
         parent::__construct();
 
+        /**
+         * Note. Currently Live Updates are associated with profiles (Profile ID) and therefore they are used for logged in members only.
+         * If it's needed Session ID can be used instead of Profile ID. In this case Live Updates can be used for visitors too. Don't forget
+         * to update BxBaseLiveUpdates::init if Session ID will be used.
+         */
+        $this->_iProfileId = (int)bx_get_logged_profile_id();
+        if(!$this->_iProfileId)
+            return;
+
         $this->_oQuery = new BxDolLiveUpdatesQuery();
 
         $this->_iInterval = (int)$this->_oQuery->getParam('sys_live_updates_interval');
 
         $this->_iCacheTTL = 86400;
-        $this->_sCacheKey = 'sys_live_updates_' . bx_get_logged_profile_id();
+        $this->_sCacheKey = 'sys_live_updates_' . $this->_iProfileId;
 
         $this->_sJsClass = 'BxDolLiveUpdates';
     	$this->_sJsObject = 'oLiveUpdates';
 
-    	$this->_aSystemsActive = array();
     	$this->_aSystems = $this->_getCachedSystems();
+    	$this->_aSystemsActive = array_keys($this->_aSystems);
     }
 
     /**

+ 26 - 0
inc/js/functions.js

@@ -492,6 +492,32 @@ function bx_menu_slide_close_all_opened () {
     });
 }
 
+/*
+ * Note. oData.count_old and oData.count_new are also available and can be checked or used in notification popup.  
+ */
+function bx_menu_show_live_update(oData) {
+	//--- Update Child Menu Item
+	if(oData.mi_child) {
+		var oMenuItem = $('.bx-menu-object-' + oData.mi_child.menu_object + ' .bx-menu-item-' + oData.mi_child.menu_item);
+		var oMenuItemAddon = oMenuItem.find('.bx-menu-item-addon');
+
+		if(oMenuItemAddon.length > 0)
+			oMenuItemAddon.html(oData.count_new);
+		else
+			oMenuItem.append(oData.code.replace('{count}', oData.count_new));
+	}
+
+	//--- Update Parent Menu Item
+	if(oData.mi_parent) {
+		var oMenuItem = $('.bx-menu-object-' + oData.mi_parent.menu_object + ' #bx-menu-toolbar-item-' + oData.mi_parent.menu_item);
+		var oMenuItemAddon = oMenuItem.find('.bx-menu-item-addon');
+
+		if(oMenuItemAddon.length > 0)
+			oMenuItemAddon.html(parseInt(oMenuItemAddon.html()) + (oData.count_new - oData.count_old));
+		else
+			oMenuItem.append(oData.code.replace('{count}', oData.count_new));
+	}
+}
 /**
  * Set ACL level for specified profile
  * @param iProfileId - profile id to set acl level for

+ 1 - 1
modules/boonex/decorous/data/template/system/menu_toolbar.html

@@ -1,7 +1,7 @@
 <ul class="bx-menu-toolbar bx-menu-object-__object__">
     <bx_repeat:menu_items>
         <li id="bx-menu-toolbar-item-__name__" class="bx-menu-toolbar-item __class_add__">
-            <a href="__link__" target="__target__" onclick="__onclick__" class="bx-def-font-contrasted"><bx_if:title><span class="bx-menu-toolbar-item-title bx-def-margin-sec-leftright">__title__</span></bx_if:title><bx_if:icon><i class="sys-icon __icon__ bx-def-margin-sec-leftright"></i></bx_if:icon><bx_if:icon-a><i class="sys-icon-a" data-rotate="down" data-icon="__icon-a__" data-color="#fff"></i></bx_if:icon-a><bx_if:image><img class="bx-def-thumb bx-def-thumb-size bx-def-margin-sec-leftright" src="__icon_url__" /></bx_if:image><bx_if:addon><span class="bx-menu-toolbar-item-addon bx-def-unit-alert-middle bg-col-red2">__addon__</span></bx_if:addon></a>
+            <a href="__link__" target="__target__" onclick="__onclick__" class="bx-def-font-contrasted"><bx_if:title><span class="bx-menu-toolbar-item-title bx-def-margin-sec-leftright">__title__</span></bx_if:title><bx_if:icon><i class="sys-icon __icon__ bx-def-margin-sec-leftright"></i></bx_if:icon><bx_if:icon-a><i class="sys-icon-a" data-rotate="down" data-icon="__icon-a__" data-color="#fff"></i></bx_if:icon-a><bx_if:image><img class="bx-def-thumb bx-def-thumb-size bx-def-margin-sec-leftright" src="__icon_url__" /></bx_if:image><bx_if:addon><span class="bx-menu-item-addon bx-def-unit-alert-middle bg-col-red2">__addon__</span></bx_if:addon></a>
         </li>
     </bx_repeat:menu_items>
 </ul>

+ 1 - 1
modules/boonex/protean/data/template/system/menu_toolbar.html

@@ -1,7 +1,7 @@
 <ul class="bx-menu-toolbar bx-menu-object-__object__">
     <bx_repeat:menu_items>
         <li id="bx-menu-toolbar-item-__name__" class="bx-menu-toolbar-item __class_add__">
-            <a href="__link__" target="__target__" onclick="__onclick__" class="bx-def-font-contrasted"><bx_if:title><span class="bx-menu-toolbar-item-title bx-def-margin-sec-leftright">__title__</span></bx_if:title><bx_if:icon><i class="sys-icon __icon__ bx-def-margin-sec-leftright"></i></bx_if:icon><bx_if:icon-a><i class="sys-icon-a" data-rotate="down" data-icon="__icon-a__" data-color="#fff"></i></bx_if:icon-a><bx_if:image><img class="bx-def-thumb bx-def-thumb-size bx-def-margin-sec-leftright" src="__icon_url__" /></bx_if:image><bx_if:addon><span class="bx-menu-toolbar-item-addon bx-def-unit-alert-middle bg-col-red2">__addon__</span></bx_if:addon></a>
+            <a href="__link__" target="__target__" onclick="__onclick__" class="bx-def-font-contrasted"><bx_if:title><span class="bx-menu-toolbar-item-title bx-def-margin-sec-leftright">__title__</span></bx_if:title><bx_if:icon><i class="sys-icon __icon__ bx-def-margin-sec-leftright"></i></bx_if:icon><bx_if:icon-a><i class="sys-icon-a" data-rotate="down" data-icon="__icon-a__" data-color="#fff"></i></bx_if:icon-a><bx_if:image><img class="bx-def-thumb bx-def-thumb-size bx-def-margin-sec-leftright" src="__icon_url__" /></bx_if:image><bx_if:addon><span class="bx-menu-item-addon bx-def-unit-alert-middle bg-col-red2">__addon__</span></bx_if:addon></a>
         </li>
     </bx_repeat:menu_items>
 </ul>

+ 2 - 2
template/menu_account_notifications.html

@@ -1,10 +1,10 @@
 <ul class="bx-menu-notif bx-menu-object-__object__ bx-clearfix">
     <bx_repeat:menu_items>
-        <li class="bx-def-border-bottom bx-def-padding-sec-top bx-def-padding-sec-bottom __class_add__">
+        <li class="bx-menu-item-__name__ bx-def-border-bottom bx-def-padding-sec-top bx-def-padding-sec-bottom __class_add__">
             <bx_if:icon><i class="sys-icon __icon__"></i></bx_if:icon>
             <bx_if:image><img style="background-image:url(__icon_url__)" src="<bx_icon_url:spacer.gif />" /></bx_if:image>
             <a href="__link__" target="__target__" onclick="__onclick__"><span>__title__</span></a>
-            <bx_if:addon><span class="bx-def-unit-alert-middle bg-col-red2">__addon__</span></bx_if:addon>
+            <bx_if:addon>__addonf__</bx_if:addon>
         </li>
     </bx_repeat:menu_items>
 </ul>

+ 1 - 0
template/menu_item_addon.html

@@ -0,0 +1 @@
+<span class="bx-menu-item-addon bx-def-unit-alert-middle bg-col-red2">__content__</span>

+ 1 - 1
template/menu_toolbar.html

@@ -1,7 +1,7 @@
 <ul class="bx-menu-toolbar bx-menu-object-__object__">
     <bx_repeat:menu_items>
         <li id="bx-menu-toolbar-item-__name__" class="bx-menu-toolbar-item bx-def-color-bg-hl-hover __class_add__">
-            <a href="__link__" target="__target__" onclick="__onclick__" class="bx-def-font-contrasted"><bx_if:title><span class="bx-menu-toolbar-item-title bx-def-margin-sec-leftright">__title__</span></bx_if:title><bx_if:icon><i class="sys-icon __icon__ bx-def-margin-sec-leftright"></i></bx_if:icon><bx_if:icon-a><i class="sys-icon-a" data-rotate="down" data-icon="__icon-a__" data-color="#fff"></i></bx_if:icon-a><bx_if:image><img class="bx-def-thumb bx-def-thumb-size bx-def-margin-sec-leftright" src="__icon_url__" /></bx_if:image><bx_if:addon><span class="bx-menu-toolbar-item-addon bx-def-unit-alert-middle bg-col-red2">__addon__</span></bx_if:addon></a>
+            <a href="__link__" target="__target__" onclick="__onclick__" class="bx-def-font-contrasted"><bx_if:title><span class="bx-menu-toolbar-item-title bx-def-margin-sec-leftright">__title__</span></bx_if:title><bx_if:icon><i class="sys-icon __icon__ bx-def-margin-sec-leftright"></i></bx_if:icon><bx_if:icon-a><i class="sys-icon-a" data-rotate="down" data-icon="__icon-a__" data-color="#fff"></i></bx_if:icon-a><bx_if:image><img class="bx-def-thumb bx-def-thumb-size bx-def-margin-sec-leftright" src="__icon_url__" /></bx_if:image><bx_if:addon><span class="bx-menu-item-addon bx-def-unit-alert-middle bg-col-red2">__addon__</span></bx_if:addon></a>
         </li>
     </bx_repeat:menu_items>
 </ul>

+ 3 - 0
template/scripts/BxBaseLiveUpdates.php

@@ -19,6 +19,9 @@ class BxBaseLiveUpdates extends BxDolLiveUpdates
 
 	public function init($aParams = array())
     {
+        if(!$this->_iProfileId)
+            return '';
+
         $aParams = array_merge(array(
         	'sActionsUrl' => BX_DOL_URL_ROOT . 'live_updates.php',
         	'sObjName' => $this->_sJsObject,

+ 8 - 1
template/scripts/BxBaseMenu.php

@@ -139,7 +139,7 @@ class BxBaseMenu extends BxDolMenu
 		);
 		$a['bx_if:addon'] = array (
 			'condition' => (bool)$mixedAddon,
-			'content' => array('addon' => $mixedAddon),
+			'content' => $this->_getTmplVarsAddon($mixedAddon, $a)
 		);
 
 		foreach ($this->_aOptionalParams as $sName => $sDefaultValue)
@@ -188,6 +188,13 @@ class BxBaseMenu extends BxDolMenu
         $this->_oTemplate->addCss('menu.css');
     }
 
+	protected function _getTmplVarsAddon($mixedAddon, $aMenuItem) 
+	{
+	    return array(
+	    	'addon' => $mixedAddon,
+	        'addonf' => ''
+	    );
+	}
 }
 
 /** @} */

+ 11 - 0
template/scripts/BxBaseMenuAccountNotifications.php

@@ -61,6 +61,17 @@ class BxBaseMenuAccountNotifications extends BxTemplMenu
 
         return true;
     }
+
+    protected function _getTmplVarsAddon($mixedAddon, $aMenuItem)
+    {
+        return array(
+            'addon' => $mixedAddon,
+            'addonf' => $this->_oTemplate->parseHtmlByName('menu_item_addon.html', array(
+		        'content' => $mixedAddon
+		    ))
+			
+        );
+    }
 }
 
 /** @} */