Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save adrianodias8/9125e94862e93ff61a72140ef9ad01b1 to your computer and use it in GitHub Desktop.

Select an option

Save adrianodias8/9125e94862e93ff61a72140ef9ad01b1 to your computer and use it in GitHub Desktop.
UserSubscriptionsController update()
public function update(Univers $univers, User $user) {
Gate::authorize('user-subscriptions-edit', [$user, $univers]);
$validatedData = $this->validateUpdateRequest();
$subscriptionValid = (int)Code::getCodeByName('Valid', 'code_short', 'Subscription Status')->code_id;
$subscriptionInvalid = (int)Code::getCodeByName('Not Valid', 'code_short', 'Subscription Status')->code_id;
$formatHTML = (int)Code::getCodeByName('HTML', 'code_short', 'SV format')->code_id;
$frequencyOnDemand = (int)Code::getCodeByName('On Demand', 'code_short', 'SV frequency')->code_id;
// $validSubscriptions = $user->subscriptions()->where(['seus_unsubscription_date' => null, 'seus_status' => $subscriptionValid])->get();
// $services = $this->getServices($univers, null, $validSubscriptions);
// $allSubscriptionsInServices = $user->subscriptions()->whereIn('seus_service_id', $services->pluck('serviceID')->toArray())->get();
$validSubscriptions = $user->subscriptions()->where(['seus_unsubscription_date' => null, 'seus_status' => $subscriptionValid])->get()->pluck('pivot');
$services = $this->getServices($univers, null, $validSubscriptions);
$allSubscriptionsInServices = $user->subscriptions()->whereIn('seus_service_id', $services->pluck('serviceID')->toArray())->get()->pluck('pivot');
$sendTo = $this->getUserDetails($user, 'to');
$subscriptionsAdded = false;
$selectedSubscriptions = collect([]);
if(request()->services) {
foreach(request()->services as $nextService) {
$selectedLanguages = request()->get($nextService.'-selectedLanguages'); // There will always be a selected language (as a hidden form field if you only have 0 or 1 languages setup). If multiple langauges are offered, then the validation will ensure at least one is selected.
foreach($selectedLanguages as $nextLanguage) {
if($allSubscriptionsInServices->where('seus_service_id', $nextService)->where('seus_language', $nextLanguage)->isEmpty()) {
$selectedSubscriptions->push(['serviceID' => $nextService, 'language' => $nextLanguage, 'status' => 'new']);
}
else {
$selectedSubscriptions->push(['serviceID' => $nextService, 'language' => $nextLanguage, 'status' => 'existing']);
}
}
}
}
$newSubscriptions = $selectedSubscriptions->where('status', 'new');
$seus_key_hash = md5(microtime().rand());
foreach($allSubscriptionsInServices as $nextSubscription) {
if(is_null($nextSubscription->seus_unsubscription_date)) { // definitive definition of a valid subscription
if($selectedSubscriptions->where('serviceID', $nextSubscription->seus_service_id)->where('language', $nextSubscription->seus_language)->isEmpty()) { // not in the list of services / languages selected by the user, so UNsubscribe
ServiceUser::where(['seus_service_id' => $nextSubscription->seus_service_id, 'seus_language' => $nextSubscription->seus_language])->update(['seus_unsubscription_date' => Carbon::now(), 'seus_unsubscription_by' => auth()->user()->user_id, 'seus_status' => $subscriptionInvalid, 'seus_key' => $seus_key_hash]);
// $particularSubscription->update(['seus_unsubscription_date' => Carbon::now(), 'seus_unsubscription_by' => auth()->user()->user_id, 'seus_status' => $subscriptionInvalid, 'seus_subscription_date' => null, 'seus_subscription_by' => null]);
}
}
else { // definitive definition of an invalid subscription
if($selectedSubscriptions->where('serviceID', $nextSubscription->seus_service_id)->where('language', $nextSubscription->seus_language)->isNotEmpty()) { // in the list of services / languages selected by the user, so REsubscribe
ServiceUser::where(['seus_service_id' => $nextSubscription->seus_service_id, 'seus_language' => $nextSubscription->seus_language])->update(['seus_unsubscription_date' => null, 'seus_unsubscription_by' => null, 'seus_status' => $subscriptionValid, 'seus_key' => $seus_key_hash]);
$subscriptionsAdded = true;
// $particularSubscription->update(['seus_unsubscription_date' => null, 'seus_unsubscription_by' => null, 'seus_status' => $subscriptionValid, 'seus_subscription_date' => Carbon::now(), 'seus_subscription_by' => auth()->user()->user_id]);
}
}
}
foreach($newSubscriptions as $nextSubscription) {
$optionsArray = ['seus_service_id' => $nextSubscription['serviceID']];
$optionsArray['seus_subscription_date'] = Carbon::now();
$optionsArray['seus_status'] = $subscriptionValid;
$optionsArray['seus_format'] = $formatHTML;
$optionsArray['seus_frequency'] = $frequencyOnDemand;
$optionsArray['seus_language'] = $nextSubscription['language'];
$optionsArray['seus_subscription_by'] = auth()->user()->user_id;
$optionsArray['seus_key'] = $seus_key_hash;
$user->subscriptions()->attach([$optionsArray]);
$subscriptionsAdded = true;
}
if(auth()->user()->user_id != $user->user_id && $subscriptionsAdded) {
Mail::to($sendTo)->locale(App::getLocale())->send(new Subscriptions($user, $seus_key_hash, request()->localisation));
}
return redirect(route('user-profile-show', compact(['univers', 'user'])));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment