AntonLV 7 yıl önce
ebeveyn
işleme
d658a638aa

+ 47 - 7
inc/classes/BxDolRelation.php

@@ -9,7 +9,9 @@
 
 class BxDolRelation extends BxDolConnection
 {
+    protected $_sParamDivider;
     protected $_sParamEnabled;
+
     protected $_sPreList;
 
     protected function __construct($aObject)
@@ -18,6 +20,7 @@ class BxDolRelation extends BxDolConnection
 
         $this->_oQuery = new BxDolRelationQuery($aObject);
 
+        $this->_sParamDivider = '_';
         $this->_sParamEnabled = 'sys_relations';
         $this->_sPreList = 'sys_relations';
     }
@@ -184,19 +187,47 @@ class BxDolRelation extends BxDolConnection
         return CHECK_ACTION_RESULT_ALLOWED;
     }
 
+    public function isRelationAvailableFromProfile($sModule)
+    {
+        $sModule .= $this->_sParamDivider;
+
+        $aTypes = $this->getRelationTypes();
+        foreach($aTypes as $sType)
+            if(substr($sType, 0, strlen($sModule)) == $sModule)
+                return true;
+
+        return false;
+    }
+
+    public function isRelationAvailableWithProfile($sModule)
+    {
+        $sModule = $this->_sParamDivider . $sModule;
+
+        $aTypes = $this->getRelationTypes();
+        foreach($aTypes as $sType)
+            if(substr($sType, -strlen($sModule)) == $sModule)
+                return true;
+
+        return false;
+    }
+    
+    public function isRelationAvailableBetweenProfiles($sModuleInitiator, $sModuleContent)
+    {
+        $aTypes = $this->getRelationTypes();
+        if(in_array($sModuleInitiator . $this->_sParamDivider . $sModuleContent, $aTypes))
+            return true;
+
+        return false;
+    }
+
     public function isRelationAvailable($iInitiator, $iContent)
     {
-        $sParam = getParam($this->_sParamEnabled);
         $oInitiator = BxDolProfile::getInstance($iInitiator);
         $oContent = BxDolProfile::getInstance($iContent);
-        if(empty($sParam) || !$oInitiator || !$oContent)
-            return false;
-
-        $aParam = explode(',', $sParam);
-        if(!in_array($oInitiator->getModule() . '_' . $oContent->getModule(), $aParam))
+        if(!$oInitiator || !$oContent)
             return false;
 
-        return true;
+        return $this->isRelationAvailableBetweenProfiles($oInitiator->getModule(), $oContent->getModule());
     }
 
     public function getRelations($iInitiator, $iContent, &$aSuggestions = array())
@@ -234,4 +265,13 @@ class BxDolRelation extends BxDolConnection
 
         return !empty($aRelations[$iValue]) ? $aRelations[$iValue] : _t('_uknown');
     }
+
+    public function getRelationTypes()
+    {
+        $sParam = getParam($this->_sParamEnabled);
+        if(empty($sParam))
+            return array();
+
+        return explode(',', $sParam);
+    }
 }

+ 14 - 3
modules/base/profile/classes/BxBaseModProfileModule.php

@@ -762,7 +762,14 @@ class BxBaseModProfileModule extends BxBaseModGeneralModule implements iBxDolCon
         $CNF = &$this->_oConfig->CNF;
         return isset($CNF['PARAM_ENABLE_ACTIVATION_LETTER']) ? (bool)getParam($CNF['PARAM_ENABLE_ACTIVATION_LETTER']) : true;
     }
-    
+
+    public function serviceIsEnableRelations()
+    {
+        $sModule = $this->_oConfig->getName();
+        $oRelations = BxDolConnection::getObjectInstance('sys_profiles_relations');
+        return $oRelations->isRelationAvailableWithProfile($sModule) || $oRelations->isRelationAvailableFromProfile($sModule);
+    }
+
     /**
      * For internal usage only.
      */
@@ -1235,9 +1242,13 @@ class BxBaseModProfileModule extends BxBaseModGeneralModule implements iBxDolCon
 
     public function checkAllowedRelationsView (&$aDataEntry, $isPerformAction = false)
     {
-        $CNF = &$this->_oConfig->CNF;
-
         $sResult = _t('_sys_txt_access_denied');
+
+        $sModule = $this->_oConfig->getName();
+        $oRelations = BxDolConnection::getObjectInstance('sys_profiles_relations');
+        if(!$oRelations->isRelationAvailableWithProfile($sModule) && !$oRelations->isRelationAvailableFromProfile($sModule))
+            return $sResult;
+
         if(empty($aDataEntry) || !is_array($aDataEntry))
             return $sResult;
 

+ 3 - 3
modules/boonex/organizations/install/sql/enable.sql

@@ -388,9 +388,9 @@ INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `titl
 
 -- MENU: notifications menu in account popup
 SET @iNotifMenuOrder = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_menu_items` WHERE `set_name` = 'sys_account_notifications' AND `active` = 1 AND `order` < 9999 ORDER BY `order` DESC LIMIT 1);
-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', 'bx_organizations', 'notifications-friend-requests', '_bx_orgs_menu_item_title_system_friends', '_bx_orgs_menu_item_title_friends', 'page.php?i=organization-profile-friends&profile_id={member_id}', '', '', 'group col-red2', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:31:"get_unconfirmed_connections_num";s:6:"params";a:1:{i:0;s:20:"sys_profiles_friends";}s:5:"class";s:23:"TemplServiceConnections";}', '', 2147483646, 1, 0, @iNotifMenuOrder + 1),
-('sys_account_notifications', 'bx_organizations', 'notifications-relation-requests', '_bx_orgs_menu_item_title_system_relations', '_bx_orgs_menu_item_title_relations', 'page.php?i=organization-profile-relations&profile_id={member_id}', '', '', 'sync col-blue3', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:31:"get_unconfirmed_connections_num";s:6:"params";a:1:{i:0;s:22:"sys_profiles_relations";}s:5:"class";s:23:"TemplServiceConnections";}', '', 2147483646, 1, 0, @iNotifMenuOrder + 2);
+INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `visible_for_levels`, `visibility_custom`, `active`, `copyable`, `order`) VALUES
+('sys_account_notifications', 'bx_organizations', 'notifications-friend-requests', '_bx_orgs_menu_item_title_system_friends', '_bx_orgs_menu_item_title_friends', 'page.php?i=organization-profile-friends&profile_id={member_id}', '', '', 'group col-red2', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:31:"get_unconfirmed_connections_num";s:6:"params";a:1:{i:0;s:20:"sys_profiles_friends";}s:5:"class";s:23:"TemplServiceConnections";}', '', 2147483646, '', 1, 0, @iNotifMenuOrder + 1),
+('sys_account_notifications', 'bx_organizations', 'notifications-relation-requests', '_bx_orgs_menu_item_title_system_relations', '_bx_orgs_menu_item_title_relations', 'page.php?i=organization-profile-relations&profile_id={member_id}', '', '', 'sync col-blue3', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:31:"get_unconfirmed_connections_num";s:6:"params";a:1:{i:0;s:22:"sys_profiles_relations";}s:5:"class";s:23:"TemplServiceConnections";}', '', 2147483646, 'a:2:{s:6:"module";s:16:"bx_organizations";s:6:"method";s:19:"is_enable_relations";}', 1, 0, @iNotifMenuOrder + 2);
 
 -- MENU: profile stats
 SET @iNotifMenuOrder = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_menu_items` WHERE `set_name` = 'sys_profile_stats' AND `active` = 1 LIMIT 1);

+ 3 - 3
modules/boonex/persons/install/sql/enable.sql

@@ -338,9 +338,9 @@ INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `titl
 
 -- MENU: notifications menu in account popup
 SET @iNotifMenuOrder = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_menu_items` WHERE `set_name` = 'sys_account_notifications' AND `active` = 1 AND `order` < 9999 ORDER BY `order` DESC LIMIT 1);
-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', 'bx_persons', 'notifications-friend-requests', '_bx_persons_menu_item_title_system_friends', '_bx_persons_menu_item_title_friends', 'page.php?i=persons-profile-friends&profile_id={member_id}', '', '', 'users col-blue3', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:31:"get_unconfirmed_connections_num";s:6:"params";a:1:{i:0;s:20:"sys_profiles_friends";}s:5:"class";s:23:"TemplServiceConnections";}', '', 2147483646, 1, 0, @iNotifMenuOrder + 1),
-('sys_account_notifications', 'bx_persons', 'notifications-relation-requests', '_bx_persons_menu_item_title_system_relations', '_bx_persons_menu_item_title_relations', 'page.php?i=persons-profile-relations&profile_id={member_id}', '', '', 'sync col-blue3', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:31:"get_unconfirmed_connections_num";s:6:"params";a:1:{i:0;s:22:"sys_profiles_relations";}s:5:"class";s:23:"TemplServiceConnections";}', '', 2147483646, 1, 0, @iNotifMenuOrder + 2);
+INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `visible_for_levels`, `visibility_custom`, `active`, `copyable`, `order`) VALUES
+('sys_account_notifications', 'bx_persons', 'notifications-friend-requests', '_bx_persons_menu_item_title_system_friends', '_bx_persons_menu_item_title_friends', 'page.php?i=persons-profile-friends&profile_id={member_id}', '', '', 'users col-blue3', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:31:"get_unconfirmed_connections_num";s:6:"params";a:1:{i:0;s:20:"sys_profiles_friends";}s:5:"class";s:23:"TemplServiceConnections";}', '', 2147483646, '', 1, 0, @iNotifMenuOrder + 1),
+('sys_account_notifications', 'bx_persons', 'notifications-relation-requests', '_bx_persons_menu_item_title_system_relations', '_bx_persons_menu_item_title_relations', 'page.php?i=persons-profile-relations&profile_id={member_id}', '', '', 'sync col-blue3', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:31:"get_unconfirmed_connections_num";s:6:"params";a:1:{i:0;s:22:"sys_profiles_relations";}s:5:"class";s:23:"TemplServiceConnections";}', '', 2147483646, 'a:2:{s:6:"module";s:10:"bx_persons";s:6:"method";s:19:"is_enable_relations";}', 1, 0, @iNotifMenuOrder + 2);
 
 -- MENU: profile stats
 SET @iNotifMenuOrder = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_menu_items` WHERE `set_name` = 'sys_profile_stats' AND `active` = 1 LIMIT 1);

+ 1 - 2
template/scripts/BxBaseMenuAccountNotifications.php

@@ -58,8 +58,7 @@ class BxBaseMenuAccountNotifications extends BxTemplMenu
      */
     protected function _isVisible ($a)
     {
-        // default visible settings
-        if (!BxDolAcl::getInstance()->isMemberLevelInSet($a['visible_for_levels']))
+        if(!parent::_isVisible($a))
             return false;
 
         switch ($a['name']) {

+ 6 - 0
template/scripts/BxBaseServiceConnections.php

@@ -215,6 +215,9 @@ class BxBaseServiceConnections extends BxDol
         if(empty($aProfile) || !is_array($aProfile))
             return false;
 
+        if(!BxDolConnection::getObjectInstance('sys_profiles_relations')->isRelationAvailableFromProfile($aProfile['type']))
+            return false;
+
         $oGrid = BxDolGrid::getObjectInstance('sys_grid_relations');
         if (!$oGrid)
             return false;
@@ -242,6 +245,9 @@ class BxBaseServiceConnections extends BxDol
         if(empty($aProfile) || !is_array($aProfile))
             return false;
 
+        if(!BxDolConnection::getObjectInstance('sys_profiles_relations')->isRelationAvailableWithProfile($aProfile['type']))
+            return false;
+
         $oGrid = BxDolGrid::getObjectInstance('sys_grid_related_me');
         if(!$oGrid)
             return false;