/**
  * Get the validation rules that apply to the request.
  *
  * @return array
  */
 public function rules()
 {
     $allowedSubscriptions = Subscription::lists('slug')->all();
     $allowedStatus = array_keys(User::getStatusLabel());
     $routeName = $this->route()->getName();
     $rules = ['email' => 'required|email|max:255', 'password' => 'confirmed|min:6', 'status' => 'required|in:' . implode(',', $allowedStatus), 'profile.first_name' => 'required|min:2', 'profile.last_name' => 'min:2', 'profile.mobile_phone_number' => 'required|min:5', 'profile.profile_picture' => 'image|max:500', 'profile.address' => 'required', 'profile.province' => 'required|not_in:0', 'profile.city' => 'required|not_in:0', 'profile.subdistrict' => 'required|not_in:0', 'profile.postal_code' => ''];
     if ($this->get('role') != 'agent') {
         //$rules['username'] .= '|required';
     }
     if (in_array($routeName, ['admin.member.store', 'admin.member.update'])) {
         $rules['profile.extendedProfile.property_to_sell'] = 'required';
         $rules['profile.extendedProfile.property_to_let'] = 'required';
         $rules['profile.extendedProfile.referral_source'] = 'required';
     }
     if ($this->route()->hasParameter('id')) {
         $member = User::findOrFail($this->route('id'));
         //$rules['username'] = $rules['username'].'|unique:users,username,'.$member->id;
         $rules['email'] = $rules['email'] . '|unique:users,email,' . $member->id;
     } else {
         $rules['password'] = $rules['password'] . '|required';
         //$rules['username'] = $rules['username'].'|unique:users';
         $rules['email'] = $rules['email'] . '|unique:users';
     }
     foreach ($this->input('subscriptions', []) as $idx => $submittedSubscription) {
         $rules['subscriptions.' . $idx] = 'in:' . implode(',', $allowedSubscriptions);
     }
     return $rules;
 }
 public function update(UserFormRequest $request, $id)
 {
     $user = User::findOrFail($id);
     $user->load(['profile', 'profile.extendedProfile']);
     $user->username = $request->input('username');
     $user->status = $request->input('status');
     $user->email = $request->input('email');
     if ($request->input('remove_profile_picture') == 1) {
         $user->profile->removeProfilePicture();
     }
     if ($request->hasFile('profile.profile_picture') && $request->file('profile.profile_picture')->isValid()) {
         $user->profile->profile_picture = $user->profile->saveProfilePicture($request->file('profile.profile_picture'));
     }
     if ($request->has('password')) {
         $user->password = bcrypt($request->input('password'));
     }
     $user->profile->fill($request->input('profile'));
     $user->profile->extendedProfile->fill($request->input('profile.extendedProfile'));
     $user->push();
     $subscriptions = [];
     foreach ($request->input('subscriptions', []) as $subscriptionSlug) {
         $subscriptions[] = Subscription::findBySlug($subscriptionSlug)->id;
     }
     $user->subscriptions()->sync($subscriptions);
     return redirect($request->get('backUrl', route('admin.member.index')))->with('messages', [$user->getName() . ' has been updated.']);
 }
 protected function findOrCreateUser($socialUser)
 {
     $authUser = User::where('facebook_id', $socialUser->getId())->orWhere('email', $socialUser->getEmail())->first();
     if ($authUser) {
         return $authUser;
     }
     $user = User::create(['email' => $socialUser->getEmail(), 'facebook_id' => $socialUser->getId()]);
     $user->assignRole('authenticated_user');
     //Set Name
     $exploded = explode(' ', $socialUser->getName());
     $profile = new Profile();
     $profile->first_name = $exploded[0];
     unset($exploded[0]);
     if (isset($exploded[1])) {
         $profile->last_name = implode(' ', $exploded);
     }
     $profile->user()->associate($user);
     /*
     if(!empty($data['profile']['profile_picture']) && $data['profile']['profile_picture']->isValid()){
         $profile->profile_picture = $profile->saveProfilePicture($data['profile']['profile_picture']);
     }
     */
     $profile->profile_picture = $profile->saveRemoteProfilePicture($socialUser->getAvatar());
     $profile->save();
     $extendedProfile = new ExtendedProfile();
     $profile->extendedProfile()->save($extendedProfile);
     $subscriptions = Subscription::all()->pluck('id')->all();
     $user->subscriptions()->sync($subscriptions);
     return $user;
 }
 protected function update(array $data)
 {
     $user = Auth::user();
     if (!empty($data['password'])) {
         $user->password = bcrypt($data['password']);
     }
     $user->email = $data['email'];
     $user->save();
     $user->profile->fill($data['profile']);
     if (!empty($data['profile']['profile_picture']) && $data['profile']['profile_picture']->isValid()) {
         $user->profile->profile_picture = $user->profile->saveProfilePicture($data['profile']['profile_picture']);
     }
     $user->profile->save();
     $user->profile->extendedProfile->fill($data['profile']['extendedProfile']);
     $user->profile->extendedProfile->save();
     $subscriptions = [];
     foreach ($data['subscriptions'] as $subscriptionSlug) {
         $subscriptions[] = Subscription::findBySlug($subscriptionSlug)->id;
     }
     $user->subscriptions()->sync($subscriptions);
     return $user;
 }