Changeset View
Changeset View
Standalone View
Standalone View
src/app/Http/Controllers/API/V4/UsersController.php
Show First 20 Lines • Show All 296 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 |