public function findByUserNameOrCreate($userData)
 {
     $user = SocialUser::where('provider_id', '=', $userData->id)->first();
     if (!$user) {
         $user = SocialUser::create(['provider_id' => $userData->id, 'name' => $userData->name, 'username' => $userData->nickname, 'email' => $userData->email, 'avatar' => $userData->avatar]);
     }
     $this->checkIfUserNeedsUpdating($userData, $user);
     return $user;
 }
 public function RegisterUser()
 {
     $UserData = Input::all();
     $Length = 50;
     $Token = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, $Length);
     $UserData['verify_token'] = $Token;
     $Password_Raw = $this->request->input('password');
     $UserData['password_raw'] = $Password_Raw;
     $UserData['gcm_id'] = '';
     if ($this->request->input('gcm_id')) {
         $Length = 6;
         $OTP = substr(str_shuffle("023456789ABCDEFGHJKLMNOPQRSTUVWXYZ"), 0, $Length);
         $UserData['otp'] = $OTP;
         $UserData['gcm_id'] = $this->request->input('gcm_id');
         MobileUser::create($UserData);
         $PushMessage = "{'Type' : 'OTP', 'Code' : '.{$OTP}.'}";
         $Message = array("price" => urldecode($PushMessage));
         $this->PushNotification($this->request->input('gcm_id'), $Message);
         return 1;
         exit;
     }
     if ($this->request->input('facebook_id')) {
         $validation = Validator::make($UserData, SocialUser::$RegisterRule);
     } else {
         $validation = Validator::make($UserData, User::$RegisterRule);
     }
     if ($validation->passes()) {
         #If the Validation passes
         if ($this->request->input('facebook_id')) {
             $UserData['quickblox_id'] = '';
             SocialUser::create($UserData);
         } else {
             User::create($UserData);
         }
         #Creating the User
         $Email = $this->request->input('email');
         $UserName = $this->request->input('firstname');
         if ($this->request->input('facebook_id')) {
             Mail::send([], array('UserName' => $UserName, 'Email' => $Email, 'Token' => $Token), function ($message) use($UserName, $Email, $Token) {
                 #Getting content from the Mail Template and Triggering the Email to the User with Activation Code
                 $MailContent = MailTemplate::find(2);
                 $MailBody = $MailContent->content;
                 $MailBody = str_replace("{{username}}", $UserName, $MailBody);
                 $MailBody = str_replace("{{link}}", $Token, $MailBody);
                 $message->setBody($MailBody, 'text/html');
                 $message->to($Email);
                 $message->subject($MailContent->subject);
             });
             #Returning Success
             return 'success';
         } else {
             Mail::send([], array('UserName' => $UserName, 'Email' => $Email, 'Token' => $Token), function ($message) use($UserName, $Email, $Token) {
                 #Getting content from the Mail Template and Triggering the Email to the User with Activation Code
                 $MailContent = MailTemplate::find(1);
                 $MailBody = $MailContent->content;
                 $MailBody = str_replace("{{username}}", $UserName, $MailBody);
                 $MailBody = str_replace("{{link}}", $Token, $MailBody);
                 $message->setBody($MailBody, 'text/html');
                 $message->to($Email);
                 $message->subject($MailContent->subject);
             });
             #Returning Success
             return 'success';
         }
     } else {
         #If the Validation fails send the
         return $validation->messages();
     }
 }