/** * Update the specified resource in storage. * * @param int $id * @return Response */ public function update(Request $request, $id) { //validation rules $this->validate($request, array('name' => 'required', 'surname' => 'required', 'address' => 'required')); /* @var array $params */ $params = Input::get(); //phone numbers from request $formNumbers = $params['number']; /* * get contact model and associated phone numbers * @var Illuminate\Database\Eloquent\Model $contact * @var $contactNumbers */ $contact = Contacts::findOrNew($id); $contactNumbers = Numbers::whereContactId($id)->get(); //set values on contact $contact->name = $params['name']; $contact->surname = $params['surname']; $contact->address = $params['address']; if ($request->file('image')) { $thumb_dir = DESTINATION_PATH . THUMB_PATH; $img_dir = DESTINATION_PATH . IMG_PATH; //manage filename $extension = $request->file('image')->getClientOriginalExtension(); $fileName = time() . '_' . rand(11111, 99999) . '.' . $extension; $image = $request->file('image'); //resize images for thumbnails $thumb = \Intervention\Image\Facades\Image::make($image)->fit(120, 120)->save($thumb_dir . "/" . $fileName); //resize images for thumbnails $img = \Intervention\Image\Facades\Image::make($image)->fit(280, 320)->save($img_dir . "/" . $fileName); //store image on server $request->file('image')->move(DESTINATION_PATH, $fileName); $contact->photo = $fileName; } $contact->save(); /* * managing associated phone numbers * 1. if numbers from request < of contact numbers, delete the other ones * 2. otherwise, foreach request number, check existence in contact, then save it */ if (sizeof($formNumbers) < sizeof($contactNumbers)) { foreach ($contactNumbers as $contactNumber) { if (!in_array($contactNumber['number'], $formNumbers)) { //delete Numbers::whereId($contactNumber['id'])->delete(); } } } else { foreach ($formNumbers as $number) { if (!in_array($number, $contactNumbers->toArray())) { //new associated phone number $brandNewNumber = Numbers::firstOrCreate(['number' => $number, 'contact_id' => $contact->id]); $brandNewNumber->save(); } } } return redirect('/')->with(array('contact' => $contact)); }