public function update()

in app/Http/Controllers/ContactsController.php [369:447]


    public function update(Request $request, Contact $contact)
    {
        // process birthday dates
        // TODO: remove this part entirely when we redo this whole SpecialDate
        // thing
        if ($request->input('birthdate') == 'exact') {
            $birthdate = $request->input('birthdayDate');
            $birthdate = DateHelper::parseDate($birthdate);
            $day = $birthdate->day;
            $month = $birthdate->month;
            $year = $birthdate->year;
        } else {
            $day = $request->input('day');
            $month = $request->input('month');
            $year = $request->input('year');
        }
        $is_deceased_date_known = false;
        if ($request->input('is_deceased_date_known') === 'true' && $request->input('deceased_date')) {
            $is_deceased_date_known = true;
            $deceased_date = $request->input('deceased_date');
            $deceased_date = DateHelper::parseDate($deceased_date);
            $deceased_date_day = $deceased_date->day;
            $deceased_date_month = $deceased_date->month;
            $deceased_date_year = $deceased_date->year;
        } else {
            $deceased_date_day = $deceased_date_month = $deceased_date_year = null;
        }
        if (! empty($request->input('is_deceased'))) {
            //if the contact has died, disable StayInTouch
            $contact->updateStayInTouchFrequency(0);
            $contact->setStayInTouchTriggerDate(0);
        }

        $data = [
            'account_id' => auth()->user()->account_id,
            'contact_id' => $contact->id,
            'first_name' => $request->input('firstname'),
            'middle_name' => $request->input('middlename', null),
            'last_name' => $request->input('lastname', null),
            'nickname' => $request->input('nickname', null),
            'gender_id' => $request->input('gender'),
            'description' => $request->input('description', null),
            'is_birthdate_known' => ! empty($request->input('birthdate')) && $request->input('birthdate') !== 'unknown',
            'birthdate_day' => $day,
            'birthdate_month' => $month,
            'birthdate_year' => $year,
            'birthdate_is_age_based' => $request->input('birthdate') === 'approximate',
            'birthdate_age' => $request->input('age'),
            'birthdate_add_reminder' => ! empty($request->input('addReminder')),
            'is_deceased' => ! empty($request->input('is_deceased')),
            'is_deceased_date_known' => $is_deceased_date_known,
            'deceased_date_day' => $deceased_date_day,
            'deceased_date_month' => $deceased_date_month,
            'deceased_date_year' => $deceased_date_year,
            'deceased_date_add_reminder' => ! empty($request->input('add_reminder_deceased')),
        ];

        $contact = app(UpdateContact::class)->execute($data);

        if ($request->file('avatar') != '') {
            if ($contact->has_avatar) {
                try {
                    $contact->deleteAvatars();
                } catch (\Exception $e) {
                    Log::warning(__CLASS__.' update: Failed to delete avatars', [
                        'contact' => $contact,
                        'exception' => $e,
                    ]);
                }
            }
            $contact->has_avatar = true;
            $contact->avatar_location = config('filesystems.default');
            $contact->avatar_file_name = $request->avatar->storePublicly('avatars', $contact->avatar_location);
            $contact->save();
        }

        return redirect()->route('people.show', $contact)
            ->with('success', trans('people.information_edit_success'));
    }