Jelajahi Sumber

#4558 - Build-in API support (Set membership)

roman.lesnikov@gmail.com 2 tahun lalu
induk
melakukan
8a964cf3db

+ 17 - 1
modules/base/profile/classes/BxBaseModProfileMenuViewActionsAll.php

@@ -125,7 +125,23 @@ class BxBaseModProfileMenuViewActionsAll extends BxBaseModGeneralMenuViewActions
 
     protected function _getMenuItemProfileSetAclLevel($aItem)
     {
-        return $this->_getMenuItemByNameActions($aItem);
+        $aItem = $this->_getMenuItemByNameActions($aItem);
+        if (!$this->_bIsApi)
+            return $aItem;
+        
+        $aItem['display_type'] = 'callback';
+        $oAcl = BxDolAcl::getInstance();
+        $aAclLevels = $oAcl->getMembershipsBy(array('type' => 'all_active_not_automatic_pair'));
+        $aValues = [];
+        
+        $aProfileAclLevel = $oAcl->getMemberMembershipInfo($this->_oProfile->id());
+        
+		foreach ($aAclLevels as $k => $s){
+            $aValues[] = ['value' => $k, 'label' => _t($s)];
+        }
+        $aItem['content_type'] = 'memberships';
+        $aItem['data'] = ['values' => $aValues, 'profile_id' => $this->_oProfile->id(), 'value' => $aProfileAclLevel['id']];
+        return $aItem;
     }
 
     protected function _getMenuItemView($aItem, $aParams = array())

+ 27 - 0
template/scripts/BxBaseServiceProfiles.php

@@ -918,6 +918,33 @@ class BxBaseServiceProfiles extends BxDol
 
         return $sCode;
     }
+    
+    public function serviceSetMembership($mixedProfileId, $iAclLevelId, $iAclLevelDuration = 0)
+    {
+        if(!is_array($mixedProfileId))
+            $mixedProfileId = array($mixedProfileId);
+
+        $iPerformerId = bx_get_logged_profile_id();
+        $aCheck = checkActionModule($iPerformerId, 'set acl level', 'system', false);
+        if(!isAdmin() && $aCheck[CHECK_ACTION_RESULT] !== CHECK_ACTION_RESULT_ALLOWED)
+            return true;//array('code' => 1, 'msg' => $aCheck[CHECK_ACTION_MESSAGE]);
+
+        $iSet = 0;
+        $oAcl = BxDolAcl::getInstance();
+        foreach($mixedProfileId as $iProfileId) {
+            if(!$oAcl->setMembership($iProfileId, $iAclLevelId, $iAclLevelDuration, true))
+                continue;
+
+            $iSet += 1;
+
+            checkActionModule($iPerformerId, 'set acl level', 'system', true); // perform action
+        }
+
+        if(count($mixedProfileId) != $iSet)
+            return true;//array('code' => 2, 'msg' => _t('_error occured'));
+
+        return true;//$aResult;
+    }
 
     public function serviceBrowseRecommendationsSubscriptions ($iProfileId = 0, $aParams = [])
     {

+ 1 - 0
template/scripts/BxBaseServices.php

@@ -77,6 +77,7 @@ class BxBaseServices extends BxDol implements iBxDolProfileService
             'BrowseRecommendationsFriends' => 'BxBaseServiceProfiles',
             'BrowseRecommendationsSubscriptions' => 'BxBaseServiceProfiles',
             'BrowseFriends' => 'BxBaseServiceProfiles',
+            'SetMembership' => 'BxBaseServiceProfiles',
             'BrowseFriendRequests' => 'BxBaseServiceProfiles',
             'BrowseFriendRequested' => 'BxBaseServiceProfiles',
             'BrowseSubscribedMe' => 'BxBaseServiceProfiles',