Просмотр исходного кода

Ticket #4998 - Option to disable friendships for particular profile module. Core changes.

AntonLV 1 год назад
Родитель
Сommit
61e59f5259

+ 5 - 0
modules/base/profile/classes/BxBaseModProfileConfig.php

@@ -55,6 +55,11 @@ class BxBaseModProfileConfig extends BxBaseModGeneralConfig
         $this->_aRoles = false;
     }
 
+    public function isFriends()
+    {
+        return ($sKey = 'PARAM_FRIENDS') && (!isset($this->CNF[$sKey]) || getParam($this->CNF[$sKey]) == 'on');
+    }
+
     public function isRoles()
     {
         if($this->_aRoles === false)

+ 29 - 26
modules/base/profile/classes/BxBaseModProfileFormEntry.php

@@ -70,6 +70,9 @@ class BxBaseModProfileFormEntry extends BxBaseModGeneralFormEntry
             $this->aInputs[$sField]['ghost_template'] = '';
         }
 
+        if(($sField = 'friends_count') && isset($this->aInputs[$sField]) && !$this->_oModule->_oConfig->isFriends())
+            unset($this->aInputs[$sField]);
+
         $oAccountProfile = BxDolProfile::getInstanceAccountProfile();
         if ($oAccountProfile)
             $this->_iAccountProfileId = $oAccountProfile->id();
@@ -150,38 +153,38 @@ class BxBaseModProfileFormEntry extends BxBaseModGeneralFormEntry
     
     protected function genCustomViewRowValueFriendsCount($aInput)
     {
-        if (isset($this->_oModule->_oConfig->CNF['URI_VIEW_FRIENDS'])){
-            $oProfile = $this->_oModule->getProfileByCurrentUrl();
-            if ($oProfile){
-                $oConnection = BxDolConnection::getObjectInstance('sys_profiles_friends');
-                $iCount = $oConnection->getConnectedContentCount($oProfile->id(), true);
-                return $this->_oModule->_oTemplate->parseHtmlByName('name_link.html', array(
-                    'href' => bx_absolute_url(BxDolPermalinks::getInstance()->permalink('page.php?i=' . $this->_oModule->_oConfig->CNF['URI_VIEW_FRIENDS'] . '&profile_id=' . $oProfile->id())),
-                    'title' => '',
-                    'content' => $iCount
-                ));
-            }
-        }
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        if(!isset($CNF['URI_VIEW_FRIENDS']))
+            return '';
+
+        if(($oProfile = $this->_oModule->getProfileByCurrentUrl()) !== false)
+            return $this->_oModule->_oTemplate->parseHtmlByName('name_link.html', [
+                'href' => bx_absolute_url(BxDolPermalinks::getInstance()->permalink('page.php?i=' . $CNF['URI_VIEW_FRIENDS'] . '&profile_id=' . $oProfile->id())),
+                'title' => '',
+                'content' => BxDolConnection::getObjectInstance('sys_profiles_friends')->getConnectedContentCount($oProfile->id(), true)
+            ]);
+
         return '';
     }
-    
+
     protected function genCustomViewRowValueFollowersCount($aInput)
     {
-        if (isset($this->_oModule->_oConfig->CNF['URI_VIEW_SUBSCRIPTIONS'])){
-            $oProfile = $this->_oModule->getProfileByCurrentUrl();
-            if ($oProfile){
-                $oConnectionFollow = BxDolConnection::getObjectInstance('sys_profiles_subscriptions');
-                $iCount = $oConnectionFollow->getConnectedInitiatorsCount($oProfile->id());
-                return $this->_oModule->_oTemplate->parseHtmlByName('name_link.html', array(
-                    'href' => bx_absolute_url(BxDolPermalinks::getInstance()->permalink('page.php?i=' . $this->_oModule->_oConfig->CNF['URI_VIEW_SUBSCRIPTIONS'] . '&profile_id=' . $oProfile->id())),
-                    'title' => '',
-                    'content' => $iCount
-                ));
-            }
-        }
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        if(!isset($CNF['URI_VIEW_SUBSCRIPTIONS']))
+            return '';
+
+        if(($oProfile = $this->_oModule->getProfileByCurrentUrl()) !== false)
+            return $this->_oModule->_oTemplate->parseHtmlByName('name_link.html', array(
+                'href' => bx_absolute_url(BxDolPermalinks::getInstance()->permalink('page.php?i=' . $CNF['URI_VIEW_SUBSCRIPTIONS'] . '&profile_id=' . $oProfile->id())),
+                'title' => '',
+                'content' => BxDolConnection::getObjectInstance('sys_profiles_subscriptions')->getConnectedInitiatorsCount($oProfile->id())
+            ));
+
         return '';
     }
-    
+
     private function genCustomViewRowValueProfileEmailOrIp($aInput)
     {
         $CNF = &$this->_oModule->_oConfig->CNF;

+ 1 - 1
modules/base/profile/classes/BxBaseModProfileMenuSnippetMeta.php

@@ -90,7 +90,7 @@ class BxBaseModProfileMenuSnippetMeta extends BxBaseModGeneralMenuSnippetMeta
 
     protected function _getMenuItemFriends($aItem)
     {
-        if(!$this->_isVisibleInContext($aItem))
+        if(!$this->_oModule->_oConfig->isFriends() || !$this->_isVisibleInContext($aItem))
             return false;
 
         if(!$this->_bContentPublic || !$this->_oContentProfile)

+ 1 - 1
modules/base/profile/classes/BxBaseModProfileMenuViewMeta.php

@@ -107,7 +107,7 @@ class BxBaseModProfileMenuViewMeta extends BxTemplMenuUnitMeta
     {
         $CNF = &$this->_oModule->_oConfig->CNF;
 
-        if(!$this->_bContentPublic || !$this->_oContentProfile)
+        if(!$this->_oModule->_oConfig->isFriends() || !$this->_bContentPublic || !$this->_oContentProfile)
             return false;
         
         $oConnection = BxDolConnection::getObjectInstance('sys_profiles_friends');

+ 30 - 0
modules/base/profile/classes/BxBaseModProfileModule.php

@@ -109,6 +109,7 @@ class BxBaseModProfileModule extends BxBaseModGeneralModule implements iBxDolCon
             'BrowseTopProfiles' => '',
             'BrowseOnlineProfiles' => '',
             'BrowseConnections' => '',
+            'BrowseConnectionsEverywhere' => '',
             'BrowseByAcl' => '',
         ));
     }
@@ -1205,6 +1206,9 @@ class BxBaseModProfileModule extends BxBaseModGeneralModule implements iBxDolCon
 
     public function serviceProfileFriends ($iContentId = 0)
     {
+        if(!$this->_oConfig->isFriends())
+            return false;
+
         $mixedContent = $this->_getContent($iContentId);
         if($mixedContent === false)
             return false;
@@ -1221,6 +1225,9 @@ class BxBaseModProfileModule extends BxBaseModGeneralModule implements iBxDolCon
 
     public function serviceProfileFriendsMutual ($iContentId = 0)
     {
+        if(!$this->_oConfig->isFriends())
+            return false;
+
         $mixedContent = $this->_getContent($iContentId);
         if($mixedContent === false)
             return false;
@@ -1326,6 +1333,11 @@ class BxBaseModProfileModule extends BxBaseModGeneralModule implements iBxDolCon
         return isset($CNF['PARAM_ENABLE_ACTIVATION_LETTER']) ? (bool)getParam($CNF['PARAM_ENABLE_ACTIVATION_LETTER']) : true;
     }
 
+    public function serviceIsEnableFriends()
+    {
+        return $this->_oConfig->isFriends();
+    }
+
     public function serviceIsEnableRelations()
     {
         if(!BxDolRelation::isEnabled())
@@ -1900,11 +1912,26 @@ class BxBaseModProfileModule extends BxBaseModGeneralModule implements iBxDolCon
         return $this->checkAllowedContact($aDataEntry, $isPerformAction);
     }
 
+    public function checkAllowedFriendsView (&$aDataEntry, $isPerformAction = false)
+    {
+        $sResult = _t('_sys_txt_access_denied');
+        if(!$this->_oConfig->isFriends())
+            return $sResult;
+
+        if(empty($aDataEntry) || !is_array($aDataEntry))
+            return $sResult;
+
+        return CHECK_ACTION_RESULT_ALLOWED;
+    }
+
     /**
      * @return CHECK_ACTION_RESULT_ALLOWED if access is granted or error message if access is forbidden.
      */
     public function checkAllowedFriendAdd (&$aDataEntry, $isPerformAction = false)
     {
+        if(!$this->_oConfig->isFriends() || ($oProfile = BxDolProfile::getInstance($this->_iProfileId)) === false || !bx_srv($oProfile->getModule(), 'is_enable_friends'))
+            return _t('_sys_txt_access_denied');
+
         return $this->_checkAllowedConnect ($aDataEntry, $isPerformAction, ['sys_profiles_friends', 'checkAllowedAddConnection'], false, false);
     }
 
@@ -1913,6 +1940,9 @@ class BxBaseModProfileModule extends BxBaseModGeneralModule implements iBxDolCon
      */
     public function checkAllowedFriendRemove (&$aDataEntry, $isPerformAction = false)
     {
+        if(!$this->_oConfig->isFriends() || ($oProfile = BxDolProfile::getInstance($this->_iProfileId)) === false || !bx_srv($oProfile->getModule(), 'is_enable_friends'))
+            return _t('_sys_txt_access_denied');
+
         if (CHECK_ACTION_RESULT_ALLOWED === $this->_checkAllowedConnect ($aDataEntry, $isPerformAction, ['sys_profiles_friends', 'checkAllowedRemoveConnection'], false, true, true))
             return CHECK_ACTION_RESULT_ALLOWED;
 

+ 3 - 1
template/scripts/BxBasePage.php

@@ -682,7 +682,9 @@ class BxBasePage extends BxDolPage
                 $sSample = _t($_sSample);
                 if(strcmp($_sSample, $sSample) == 0)
                     $sSample = _t('_Context');
-                        
+
+                
+                
                 $a['context'] = [
                     'list' => $aContexts,
                     'current' => $aCurrent,