Created
August 6, 2020 17:31
-
-
Save adrianodias8/9125e94862e93ff61a72140ef9ad01b1 to your computer and use it in GitHub Desktop.
UserSubscriptionsController update()
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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