Changeset View
Changeset View
Standalone View
Standalone View
src/app/Http/Controllers/API/V4/UsersController.php
Show First 20 Lines • Show All 159 Lines • ▼ Show 20 Lines | public static function statusInfo($user): array | ||||
'user-new' => true, | 'user-new' => true, | ||||
'user-ldap-ready' => $user->isLdapReady(), | 'user-ldap-ready' => $user->isLdapReady(), | ||||
'user-imap-ready' => $user->isImapReady(), | 'user-imap-ready' => $user->isImapReady(), | ||||
] | ] | ||||
); | ); | ||||
// Check if the user is a controller of his wallet | // Check if the user is a controller of his wallet | ||||
$isController = $user->canDelete($user); | $isController = $user->canDelete($user); | ||||
$isDegraded = $user->isDegraded(); | |||||
$hasCustomDomain = $user->wallet()->entitlements() | $hasCustomDomain = $user->wallet()->entitlements() | ||||
->where('entitleable_type', Domain::class) | ->where('entitleable_type', Domain::class) | ||||
->count() > 0; | ->count() > 0; | ||||
// Get user's entitlements titles | // Get user's entitlements titles | ||||
$skus = $user->entitlements()->select('skus.title') | $skus = $user->entitlements()->select('skus.title') | ||||
->join('skus', 'skus.id', '=', 'entitlements.sku_id') | ->join('skus', 'skus.id', '=', 'entitlements.sku_id') | ||||
->get() | ->get() | ||||
▲ Show 20 Lines • Show All 120 Lines • ▼ Show 20 Lines | public function update(Request $request, $id) | ||||
// Entitlements, only controller can do that | // Entitlements, only controller can do that | ||||
if ($request->skus !== null && !$current_user->canDelete($user)) { | if ($request->skus !== null && !$current_user->canDelete($user)) { | ||||
return $this->errorResponse(422, "You have no permission to change entitlements"); | return $this->errorResponse(422, "You have no permission to change entitlements"); | ||||
} | } | ||||
DB::beginTransaction(); | DB::beginTransaction(); | ||||
$this->updateEntitlements($user, $request->skus); | SkusController::updateEntitlements($user, $request->skus); | ||||
if (!empty($settings)) { | if (!empty($settings)) { | ||||
$user->setSettings($settings); | $user->setSettings($settings); | ||||
} | } | ||||
if (!empty($request->password)) { | if (!empty($request->password)) { | ||||
$user->password = $request->password; | $user->password = $request->password; | ||||
$user->save(); | $user->save(); | ||||
Show All 16 Lines | public function update(Request $request, $id) | ||||
if ($user->id == $current_user->id) { | if ($user->id == $current_user->id) { | ||||
$response['statusInfo'] = self::statusInfo($user); | $response['statusInfo'] = self::statusInfo($user); | ||||
} | } | ||||
return response()->json($response); | return response()->json($response); | ||||
} | } | ||||
/** | /** | ||||
* Update user entitlements. | |||||
* | |||||
* @param \App\User $user The user | |||||
* @param array $rSkus List of SKU IDs requested for the user in the form [id=>qty] | |||||
*/ | |||||
protected function updateEntitlements(User $user, $rSkus) | |||||
{ | |||||
if (!is_array($rSkus)) { | |||||
return; | |||||
} | |||||
// list of skus, [id=>obj] | |||||
$skus = Sku::withEnvTenantContext()->get()->mapWithKeys( | |||||
function ($sku) { | |||||
return [$sku->id => $sku]; | |||||
} | |||||
); | |||||
// existing entitlement's SKUs | |||||
$eSkus = []; | |||||
$user->entitlements()->groupBy('sku_id') | |||||
->selectRaw('count(*) as total, sku_id')->each( | |||||
function ($e) use (&$eSkus) { | |||||
$eSkus[$e->sku_id] = $e->total; | |||||
} | |||||
); | |||||
foreach ($skus as $skuID => $sku) { | |||||
$e = array_key_exists($skuID, $eSkus) ? $eSkus[$skuID] : 0; | |||||
$r = array_key_exists($skuID, $rSkus) ? $rSkus[$skuID] : 0; | |||||
if ($sku->handler_class == \App\Handlers\Mailbox::class) { | |||||
if ($r != 1) { | |||||
throw new \Exception("Invalid quantity of mailboxes"); | |||||
} | |||||
} | |||||
if ($e > $r) { | |||||
// remove those entitled more than existing | |||||
$user->removeSku($sku, ($e - $r)); | |||||
} elseif ($e < $r) { | |||||
// add those requested more than entitled | |||||
$user->assignSku($sku, ($r - $e)); | |||||
} | |||||
} | |||||
} | |||||
/** | |||||
* Create a response data array for specified user. | * Create a response data array for specified user. | ||||
* | * | ||||
* @param \App\User $user User object | * @param \App\User $user User object | ||||
* | * | ||||
* @return array Response data | * @return array Response data | ||||
*/ | */ | ||||
public static function userResponse(User $user): array | public static function userResponse(User $user): array | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 374 Lines • Show Last 20 Lines |