Browse Source

#100 - Accounts manager: Don't allow to delete your own Operator account.

AntonLV 11 years ago
parent
commit
3d71b39bbb

+ 4 - 1
modules/base/general/classes/BxBaseModGeneralGridAdministration.php

@@ -79,7 +79,10 @@ class BxBaseModGeneralGridAdministration extends BxTemplGrid
     	$sMenuName = $this->_oModule->_oConfig->CNF['OBJECT_MENU_MANAGE_TOOLS'];
 
     	bx_import('BxDolMenu');
-    	$sMenu = BxDolMenu::getObjectInstance($sMenuName)->getCode();
+    	$oMenu = BxDolMenu::getObjectInstance($sMenuName);
+    	$oMenu->setContentId($aRow['id']);
+
+    	$sMenu = $oMenu->getCode();
     	if(empty($sMenu))
     		return '';
 

+ 9 - 3
modules/base/general/classes/BxBaseModGeneralMenuManageTools.php

@@ -17,6 +17,7 @@ bx_import('BxTemplMenu');
 class BxBaseModGeneralMenuManageTools extends BxTemplMenu
 {
 	protected $_oModule;
+	protected $_iContentId;
 
     public function __construct($aObject, $oTemplate = false)
     {
@@ -25,15 +26,20 @@ class BxBaseModGeneralMenuManageTools extends BxTemplMenu
         bx_import('BxDolModule');
         $this->_oModule = BxDolModule::getInstance($this->MODULE);
 
-        $iContentId = 0;
+        $this->_iContentId = 0;
         if(bx_get('content_id') !== false)
-        	$iContentId = (int)bx_get('content_id');
+        	$this->_iContentId = (int)bx_get('content_id');
 
 		$this->addMarkers(array(
 			'js_object' => $this->_oModule->_oConfig->getJsObject('manage_tools'),
-			'content_id' => $iContentId
+			'content_id' => $this->_iContentId
 		));
     }
+
+    public function setContentId($iContentId)
+    {
+    	$this->_iContentId = (int)$iContentId;
+    }
 }
 
 /** @} */

+ 1 - 1
modules/boonex/accounts/classes/BxAccntGridAdministration.php

@@ -109,7 +109,7 @@ class BxAccntGridAdministration extends BxBaseModProfileGridAdministration
 	protected function _getContentInfo($iId)
     {
     	bx_import('BxDolAccount');
-    	return BxDolAccount::getInstance($iId)->getInfo();
+    	return BxDolAccountQuery::getInstance()->getInfoById($iId);
     }
 
 	protected function _doDelete($iId, $aParams = array())

+ 2 - 0
modules/boonex/accounts/classes/BxAccntGridModeration.php

@@ -17,6 +17,8 @@ class BxAccntGridModeration extends BxAccntGridAdministration
     {
     	$this->MODULE = 'bx_accounts';
         parent::__construct ($aOptions, $oTemplate);
+
+        $this->_sManageType = 'moderation';
     }
 }
 

+ 29 - 0
modules/boonex/accounts/classes/BxAccntMenuManageTools.php

@@ -22,6 +22,35 @@ class BxAccntMenuManageTools extends BxBaseModGeneralMenuManageTools
         $this->MODULE = 'bx_accounts';
         parent::__construct($aObject, $oTemplate);
     }
+
+    /**
+     * Check if menu items is visible.
+     * @param $a menu item array
+     * @return boolean
+     */
+    protected function _isVisible ($a)
+    {
+        if(!parent::_isVisible($a))
+            return false;
+
+        bx_import('BxDolAccountQuery');
+        $aDataEntry = BxDolAccountQuery::getInstance()->getInfoById($this->_iContentId);
+        if(empty($aDataEntry) || !is_array($aDataEntry))
+        	return false;
+
+        $sCheckFuncName = '';
+        switch ($a['name']) {
+            case 'delete':
+            case 'delete-with-content':
+                $sCheckFuncName = 'checkAllowedDelete';
+                break;
+        }
+
+        if(!$sCheckFuncName || !method_exists($this->_oModule, $sCheckFuncName))
+            return true;
+
+        return $this->_oModule->{$sCheckFuncName}($aDataEntry) === CHECK_ACTION_RESULT_ALLOWED;
+    }
 }
 
 /** @} */

+ 6 - 3
modules/boonex/accounts/classes/BxAccntModule.php

@@ -38,12 +38,15 @@ class BxAccntModule extends BxBaseModGeneralModule
 
     public function checkAllowedDelete(&$aDataEntry, $isPerformAction = false)
     {
+    	if(isAdmin() && (int)$aDataEntry['id'] == getLoggedId())
+    		return _t('_sys_txt_access_denied');
+
         // check ACL
         $aCheck = checkActionModule($this->_iProfileId, 'delete account', 'system', $isPerformAction);
-        if($aCheck[CHECK_ACTION_RESULT] === CHECK_ACTION_RESULT_ALLOWED)
-            return CHECK_ACTION_RESULT_ALLOWED;
+        if($aCheck[CHECK_ACTION_RESULT] != CHECK_ACTION_RESULT_ALLOWED)
+            return $aCheck[CHECK_ACTION_MESSAGE];
 
-        return _t('_sys_txt_access_denied');
+        return CHECK_ACTION_RESULT_ALLOWED;
     }
 }