Changeset View
Changeset View
Standalone View
Standalone View
src/app/Http/Controllers/API/V4/SkusController.php
Show First 20 Lines • Show All 125 Lines • ▼ Show 20 Lines | class SkusController extends ResourceController | ||||
* @param ?\App\Wallet $wallet The target wallet | * @param ?\App\Wallet $wallet The target wallet | ||||
*/ | */ | ||||
public static function updateEntitlements($object, $rSkus, $wallet = null): void | public static function updateEntitlements($object, $rSkus, $wallet = null): void | ||||
{ | { | ||||
if (!is_array($rSkus)) { | if (!is_array($rSkus)) { | ||||
return; | return; | ||||
} | } | ||||
// list of skus, [id=>obj] | if (!\config('app.with_subscriptions')) { | ||||
$skus = Sku::withEnvTenantContext()->get()->mapWithKeys( | throw new \Exception("Subscriptions disabled"); | ||||
} | |||||
// available SKUs, [id => obj] | |||||
$skus = Sku::withObjectTenantContext($object)->get()->mapWithKeys( | |||||
function ($sku) { | function ($sku) { | ||||
return [$sku->id => $sku]; | return [$sku->id => $sku]; | ||||
} | } | ||||
); | ); | ||||
// existing entitlement's SKUs | // existing object SKUs, [id => total] | ||||
$eSkus = []; | $eSkus = $object->entitlements()->groupBy('sku_id')->selectRaw('count(*) as total, sku_id')->get()->mapWithKeys( | ||||
function ($e) { | |||||
$object->entitlements()->groupBy('sku_id') | return [$e->sku_id => $e->total]; | ||||
->selectRaw('count(*) as total, sku_id')->each( | |||||
function ($e) use (&$eSkus) { | |||||
$eSkus[$e->sku_id] = $e->total; | |||||
} | } | ||||
); | )->all(); | ||||
// compare current and requested state and apply changes (add/remove entitlements) | |||||
foreach ($skus as $skuID => $sku) { | foreach ($skus as $skuID => $sku) { | ||||
$e = array_key_exists($skuID, $eSkus) ? $eSkus[$skuID] : 0; | $e = array_key_exists($skuID, $eSkus) ? $eSkus[$skuID] : 0; | ||||
$r = array_key_exists($skuID, $rSkus) ? $rSkus[$skuID] : 0; | $r = array_key_exists($skuID, $rSkus) ? $rSkus[$skuID] : 0; | ||||
if (!class_exists($sku->handler_class) || !is_a($object, $sku->handler_class::entitleableClass())) { | if (!class_exists($sku->handler_class) || !is_a($object, $sku->handler_class::entitleableClass())) { | ||||
continue; | continue; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 48 Lines • Show Last 20 Lines |