public function postRegister()
 {
     try {
         $jCryption = new JCryption();
         $data = json_decode(\Input::get('data'), true);
         parse_str($jCryption->decrypt(session('jkey'), $data), $output);
         if (!isset($output['terms'])) {
             throw new \Exception("You need to agree to the terms and conditions.", 1);
             return;
         }
         $group = \User::findGroupByName('Contractor');
         $user = \User::register(['email' => $output['email'], 'first_name' => $output['first_name'], 'last_name' => $output['last_name'], 'password' => $output['password'], 'activated' => true]);
         $user->addGroup($group);
         $cData = ['user_id' => $user->id, 'address' => $output['address'], 'phone' => $output['phone'], 'image' => null];
         $contractor = \Contractor::register($cData);
         $mailData = ['layout' => 'emails.welcome', 'data' => ['user' => $user], 'subject' => 'Welcome to Programme Chameleon', 'from_email' => '*****@*****.**', 'to_email' => $user->email];
         if (env('APP_ENV') === 'production') {
             $job = (new EmailJob($mailData))->onQueue('email-queue');
             $this->dispatch($job);
         } else {
             // for devs only
             \Mail::send($mailData['layout'], $mailData['data'], function ($message) use($mailData) {
                 $message->from($mailData['from_email'], 'Programme Chameleon Mailing Service');
                 $message->to($mailData['to_email'])->subject($mailData['subject']);
             });
         }
         return \Response::json(['type' => 'success', 'message' => 'Successfully registered. You can login <a href="' . route('front.login') . '">here</a>']);
     } catch (\Exception $e) {
         if (isset($user)) {
             $user->delete();
         }
         if (isset($contractor)) {
             $contractor->delete();
         }
         return \Response::json(['type' => 'danger', 'message' => $e->getMessage()]);
     }
 }