/**
  * Create a new user instance after a valid registration.
  *
  * @param  array  $data
  * @return User
  */
 public function create(array $data)
 {
     if (SiteConstants::isManager($data["user_type"])) {
         $userType = BasicSiteRepository::getManagerTypes()[$data["managerType"]];
         return User::create(['username' => $data['username'], 'password' => $data['password'], 'active' => 0, 'user_type' => $userType, 'management_level' => $data['management_level'], 'sport_type' => $data['sport_type'], 'profile_image_path' => $data['profile_image_path'], 'confirmation_token' => bcrypt(time())]);
     } else {
         if (SiteConstants::isTalent($data["user_type"])) {
             return User::create(['username' => $data['username'], 'password' => $data['password'], 'active' => 0, 'user_type' => $data['user_type'], 'management_level' => $data['management_level'], 'sport_type' => $data['sport_type'], 'profile_image_path' => $data['profile_image_path'], 'confirmation_token' => bcrypt(time())]);
         }
     }
 }
 /**
  * Retrieves ManagerProfile Model, and send back to the client
  * @return JSON result
  */
 public function getProfileData()
 {
     $manager = [];
     try {
         $manager = ManagerProfile::where('user_id', '=', session(SiteSessions::USER_ID))->firstOrFail();
         $manager = $manager->toArray();
         $manager_additional_info = User::find(session(SiteSessions::USER_ID));
         //Selecting Required Fields from User table
         $manager = array_merge($manager, ["user_type" => $manager_additional_info->user_type, "sport_type" => $manager_additional_info->sport_type, "management_level" => $manager_additional_info->management_level, "profile_image_path" => $manager_additional_info->profile_image_path]);
     } catch (ModelNotFoundException $e) {
         $this->error_message = "Manager not found";
         $this->updateRequestStatus(RequestStatusEnum::MODEL_NOT_FOUND);
     }
     return $this->sendResponse($manager);
 }
 /**
  * Create a new user instance after a valid registration.
  *
  * @param  array  $data
  * @return User
  */
 public function create(array $data)
 {
     if (SiteConstants::isManager($data["user_type"])) {
         $userType = BasicSiteRepository::getManagerTypes()[$data["managerType"]];
         $user = null;
         $user = DB::transaction(function () use($data, $user, $userType) {
             $user = User::create(['username' => $data['username'], 'password' => $data['password'], 'active' => 0, 'user_type' => $userType, 'management_level' => $data['management_level'], 'sport_type' => $data['sport_type'], 'profile_image_path' => $data['profile_image_path'], 'confirmation_token' => bcrypt(time())]);
             $user->managerProfile()->create(['first_name' => '', 'middle_name' => '', 'last_name' => '']);
             return $user;
         });
         return $user;
     } else {
         if (SiteConstants::isTalent($data["user_type"])) {
             return User::create(['username' => $data['username'], 'password' => $data['password'], 'active' => 0, 'user_type' => $data['user_type'], 'management_level' => $data['management_level'], 'sport_type' => $data['sport_type'], 'profile_image_path' => $data['profile_image_path'], 'confirmation_token' => bcrypt(time())]);
         }
     }
 }
 /**
  * Updating Email or Password of a user as per selected choice of a user
  * @param Request $request
  */
 public function updateGeneralSettings(Request $request)
 {
     $settingType = $request->has("setting_type") ? $request->get("setting_type") : null;
     if ($settingType == null) {
         return redirect()->back()->withErrors(['Setting Type not specified by the user.']);
     }
     switch ($settingType) {
         case UserSettings::GENERAL_TYPE_EMAIL:
             $validator = Validator::make($request->all(), ['email' => 'required|email|unique:users,username']);
             if ($validator->fails()) {
                 return redirect()->back()->with(['setting_type' => UserSettings::GENERAL_TYPE_EMAIL])->withErrors($validator->errors());
             }
             $userProfile = User::find(Session::get(SiteSessions::USER_ID));
             $userProfile->username = $request->get("email");
             $userProfile->save();
             return redirect('settings/general')->with(["setting_type" => UserSettings::GENERAL_TYPE_EMAIL, "general_update_status" => "successful"]);
             break;
         case UserSettings::GENERAL_TYPE_PASSWORD:
             $validator = Validator::make($request->all(), ['password' => 'required|confirmed|min:6']);
             if ($validator->fails()) {
                 return redirect()->back()->with(['setting_type' => UserSettings::GENERAL_TYPE_PASSWORD])->withErrors($validator->errors());
             }
             $userProfile = User::find(Session::get(SiteSessions::USER_ID));
             $userProfile->password = $request->get("password");
             $userProfile->save();
             return redirect('settings/general')->with(["setting_type" => UserSettings::GENERAL_TYPE_PASSWORD, "general_update_status" => "successful"]);
             break;
     }
     return redirect('settings/general')->with(["general_update_status" => "error"]);
 }
 /**
  * Contacting Manager by Talent
  * @param Request $request
  */
 public function contactManager(Request $request)
 {
     $validator = Validator::make($request->all(), ['manager_id' => 'required', 'talent_id' => 'required', 'message' => 'required']);
     if ($validator->fails()) {
         return response()->json(['status' => 'error', 'error_type' => 'ID_MISSING']);
     }
     if (Session::get(SiteSessions::USER_ID) != $request->talent_id) {
         return response()->json(['status' => 'error', 'error_type' => 'TALENT_ID_INVALID']);
     }
     try {
         $user = User::find(Session::get(SiteSessions::USER_ID));
         $manager = ManagersDatabase::find($request->manager_id);
         Event::fire(new SendMail(SendMail::MAIL_TYPE_CONTACT_MANAGER, $manager->email, [], ["manager" => $manager, "talent" => $user, "message" => $request->message]));
         DB::table('managers_contacted')->insert(['user_id' => $request->talent_id, 'manager_id' => $request->manager_id, 'message_to_manager' => $request->message, 'contacted_on' => Carbon::now()]);
     } catch (QueryException $e) {
         return response()->json(['status' => 'error', 'error_type' => 'DATABASE_ERROR']);
     }
     return response()->json(['status' => 'successful']);
 }
 /**
  *Resending confirmation link to the User
  */
 public function resendConfirmationLink()
 {
     $user = User::find(Session::get(SiteSessions::USER_ID));
     $user->confirmation_token = bcrypt(time());
     $user->save();
     Event::fire(new SendMail(SendMail::MAIL_TYPE_USER_CONFIRMATION, $user->username, [], $user));
     Session::flash("resent_confirmation_link", 'successful');
     return redirect('account-not-confirmed');
 }