PageRenderTime 96ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/app/Http/Controllers/HomeController.php

https://bitbucket.org/JRlalamors/hbh
PHP | 381 lines | 242 code | 77 blank | 62 comment | 38 complexity | 98cafadfc15c3e34b1c75841c2ee8373 MD5 | raw file
Possible License(s): MIT, Apache-2.0
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Model\Activity;
  4. use App\User;
  5. use Carbon\Carbon;
  6. use App\Model\Agent;
  7. use App\Model\Listing;
  8. use App\Model\Customer;
  9. use App\Mail\RequestCall;
  10. use App\Mail\RequestContact;
  11. use Illuminate\Http\Request;
  12. use App\Mail\CustomerSignup;
  13. use Illuminate\Support\Facades\Mail;
  14. use Illuminate\Support\Facades\Auth;
  15. use Illuminate\Support\Facades\Validator;
  16. class HomeController extends Controller
  17. {
  18. /**
  19. * Create a new controller instance.
  20. *
  21. * @return void
  22. */
  23. public function __construct()
  24. {
  25. //$this->middleware('auth');
  26. }
  27. /**
  28. * Show the application dashboard.
  29. *
  30. * @return \Illuminate\Http\Response
  31. */
  32. public function userLogin()
  33. {
  34. if( Auth::user() ) {
  35. return redirect('/');
  36. }
  37. else {
  38. return view('auth.login');
  39. }
  40. }
  41. public function adminLogin()
  42. {
  43. $admin = true;
  44. return view('auth.admin.login');
  45. }
  46. public function home()
  47. {
  48. $title = 'Find Top Real Estate Agents Near Me at Home By Home';
  49. $description = 'Home By Home helps home buyers and home sellers find the right real estate agent at the right price.';
  50. return view('index', compact('title', 'description'));
  51. }
  52. public function about()
  53. {
  54. return view('about');
  55. }
  56. public function terms()
  57. {
  58. return view('terms');
  59. }
  60. public function privacy()
  61. {
  62. return view('privacy');
  63. }
  64. public function resources()
  65. {
  66. return view('resources');
  67. }
  68. public function contact()
  69. {
  70. return view('contact');
  71. }
  72. public function findAgent()
  73. {
  74. $agents = Agent::all();
  75. return view('find-agent', compact('agents'));
  76. }
  77. /*
  78. * Registration
  79. **/
  80. public function register() {
  81. $title = 'Find A Real Estate Agent Near Me | Home By Home';
  82. $description = 'Find a top real estate agent or realtor near me at HomeByHome.com';
  83. return view('register', compact('title', 'description'));
  84. }
  85. public function getForms(Request $request)
  86. {
  87. if ($request->type == 'seller') {
  88. return view('partials.form-seller');
  89. } else {
  90. return view('partials.form-buyer');
  91. }
  92. }
  93. public function validateForm(Request $request)
  94. {
  95. $user = new User;
  96. $customer = new Customer;
  97. $list = new Listing;
  98. // validating user
  99. if( array_key_exists('first_name', $request->all()) || $request->has('first_name') || array_key_exists('last_name', $request->all()) || $request->has('last_name') || array_key_exists('email', $request->all()) || $request->has('email') || array_key_exists('password', $request->all()) || $request->has('password') )
  100. {
  101. $user->fill($request->all());
  102. $user->phone_num = preg_replace(array('/\+/', '/\(/', '/\)/', '/\s/', '/\./', '/\-/', '/[a-zA-Z]/'), array(''), $request->phone_num);
  103. $user->password = $request->password ? bcrypt($request->password) : null;
  104. $user->isValid();
  105. }
  106. // validating list
  107. $list->fill($request->all());
  108. //$list->until = with(new Carbon($request->until))->format('o-m-d');
  109. $list->closed_deal = 0;
  110. $errorMessages = [
  111. 'sq_feet_max.greater_than_field' => 'The square feet max field must be higher than square feet min field.'
  112. ];
  113. $reqArray = [];
  114. $validateArr = [];
  115. if( array_key_exists('zip_postal', $request->all()) || $request->has('zip_postal') ) {
  116. $reqArray['zip_postal'] = $request->zip_postal;
  117. $errorMessages['zip_postal.required'] = 'Location is required.';
  118. $validateArr['zip_postal'] = 'required|numeric|min:5';
  119. }
  120. if( array_key_exists('budget', $request->all()) || $request->has('budget') ) {
  121. $reqArray['budget'] = preg_replace(array('/\,/', '/\$/'), array(''), $request->budget);
  122. $validateArr['budget'] = 'required'; // |numeric
  123. $reqArray['text_budget'] = $request->budget; //preg_replace(array('/\,/', '/\$/'), array(''), )
  124. $validateArr['text_budget'] = 'required'; // |numeric
  125. }
  126. /*if( (array_key_exists('sq_feet_min', $request->all()) || $request->has('sq_feet_min')) && (array_key_exists('sq_feet_max', $request->all()) || $request->has('sq_feet_max')) ) {
  127. $reqArray['sq_feet_min'] = $request->sq_feet_min;
  128. $reqArray['sq_feet_max'] = $request->sq_feet_max;
  129. if( $request->list_type == 'seller' )
  130. {
  131. $validateArr['sq_feet_max'] = 'required|numeric';
  132. } else {
  133. $validateArr['sq_feet_min'] = 'required_with:sq_feet_max|numeric';
  134. $validateArr['sq_feet_max'] = 'required_with:sq_feet_min|numeric|greater_than_field:sq_feet_min';
  135. }
  136. }*/
  137. /*if( array_key_exists('bedrooms', $request->all()) || $request->has('bedrooms') ) {
  138. $reqArray['bedrooms'] = $request->bedrooms;
  139. $validateArr['bedrooms'] = 'required';
  140. }
  141. if( array_key_exists('bathrooms', $request->all()) || $request->has('bathrooms') ) {
  142. $reqArray['bathrooms'] = $request->bathrooms;
  143. $validateArr['bathrooms'] = 'required';
  144. }*/
  145. if( array_key_exists('until', $request->all()) || $request->has('until') ) {
  146. /*$reqArray['until'] = $request->until;
  147. $validateArr['until'] = 'required'; //|date*/
  148. $reqArray['text_until'] = $request->until;
  149. $validateArr['text_until'] = 'required'; //|date
  150. }
  151. $validateList = Validator::make($reqArray, $validateArr, $errorMessages);
  152. $validateList->fails();
  153. $errors = $user->getErrors()->merge($customer->getErrors());
  154. if( $validateList->errors()->count() > 0 )
  155. {
  156. $errors = $validateList->errors()->merge($errors);
  157. }
  158. if( count( $errors ) > 0 ) {
  159. return response( $errors );
  160. }
  161. return response('validated');
  162. }
  163. public function storeRegistration(Request $request)
  164. {
  165. // create models
  166. $user = new User;
  167. $customer = new Customer;
  168. $list = new Listing;
  169. // create new user
  170. $user->fill($request->all());
  171. $user->phone_num = preg_replace(array('/\+/', '/\(/', '/\)/', '/\s/', '/\./', '/\-/', '/[a-zA-Z]/'), array(''), $request->phone_num);
  172. $user->password = bcrypt( $request->password );
  173. $user->role_id = 0;
  174. // register as a customer
  175. $customer->fill($request->all());
  176. $customer->status_to_lender = $request->has('status_to_lender') ? $request->status_to_lender : 'not-yet';
  177. // Add List
  178. $list->fill($request->all());
  179. //$list->until = $until;
  180. $list->text_until = $request->until;
  181. $list->budget = (int) preg_replace(array('/\,/', '/\$/'), array(''), $request->numeric_budget);
  182. $list->text_budget = $request->list_type == 'seller' ? $request->budget : '$' . number_format($request->budget, 0);
  183. $list->closed_deal = 0;
  184. $errorMessages = [
  185. 'sq_feet_max.greater_than_field' => 'The square feet max field must be higher than square feet min field.'
  186. ];
  187. if( $request->list_type == 'seller' ) {
  188. $list->city = $request->city;
  189. $list->state = $request->state;
  190. $list->other_data = json_encode(array('street_address' => $request->street_address, 'unit_no' => $request->unit_no));
  191. // validating rules
  192. $validateList = Validator::make($request->all(), [
  193. 'list_type' => 'required',
  194. 'property_type_id' => 'required',
  195. //city' => 'required',
  196. //'state' => 'required',
  197. 'zip_postal' => 'required|numeric|min:5',
  198. //'sq_feet_max' => 'required:numeric',
  199. //'bedrooms' => 'required',
  200. //'bathrooms' => 'required',
  201. //'until' => 'required', // |date
  202. 'budget' => 'required' // |numeric
  203. ], $errorMessages);
  204. }
  205. else {
  206. // validating rules
  207. $validateList = Validator::make($request->all(), [
  208. 'list_type' => 'required',
  209. 'property_type_id' => 'required',
  210. 'zip_postal' => 'required|numeric|min:5',
  211. //'sq_feet_min' => 'required_with:sq_feet_max|numeric',
  212. //'sq_feet_max' => 'required_with:sq_feet_min|numeric|greater_than_field:sq_feet_min',
  213. //'bedrooms' => 'required',
  214. //'bathrooms' => 'required',
  215. //'until' => 'required', //|date
  216. 'budget' => 'required' //|numeric
  217. ], $errorMessages);
  218. }
  219. $user->isValid();
  220. $customer->isValid();
  221. $validateList->fails();
  222. $errors = $user->getErrors()->merge($validateList->errors()->all());
  223. $errors = $customer->getErrors()->merge($errors);
  224. // Check models
  225. if( count($errors) == 0 ) {
  226. $user->save();
  227. $customer->user_id = $user->id;
  228. $customer->save();
  229. $list->customer_id = $customer->id;
  230. $list->save();
  231. $activity = new Activity;
  232. $action = $user->name . ' registered';
  233. $activity->addActivity($customer->asUser->id, $action);
  234. $message = 'added';
  235. } else {
  236. $messages = $errors->all();
  237. return response()->json(compact('messages'));
  238. }
  239. return response()->json(compact('message', 'user'));
  240. }
  241. public function success(User $user = null) {
  242. if( $user )
  243. {
  244. Auth::login($user, true);
  245. if( $user->isAgent() )
  246. {
  247. return view('register-success');
  248. // return redirect()->route('agent.account');
  249. } else {
  250. return view('register-user-success');
  251. // return redirect()->route('customer.account');
  252. }
  253. }
  254. return view('register-success');
  255. }
  256. public function fbRegister(User $user)
  257. {
  258. $customer = new Customer;
  259. $customer->user_id = $user->id;
  260. $customer->status_to_lender = 'not-yet';
  261. if( $customer->save() )
  262. {
  263. Auth::login($user, true);
  264. return redirect()->route('customer.account');
  265. }
  266. }
  267. // email
  268. public function requestCall(Request $request)
  269. {
  270. $errorMessages = [];
  271. $validate = Validator::make($request->all(), [
  272. 'email' => 'required|email',
  273. 'phone' => 'required|numeric'
  274. ], $errorMessages);
  275. if( count( $validate->errors() ) == 0 )
  276. {
  277. Mail::to([config('homebyhome.contact_email'), config('homebyhome.contact_email_2')])->cc(config('app.contact_sytian'))->send(new RequestCall($request->name, $request->email, $request->phone));
  278. return redirect()->back()
  279. ->withSuccess('Your request has been received.');
  280. } else {
  281. $errors = $validate->errors();
  282. return redirect()->back()->withErrors($errors);
  283. }
  284. }
  285. public function contactUs(Request $request)
  286. {
  287. $errorMessages = [];
  288. $request->phone = (int) preg_replace(array('/\+/', '/\(/', '/\)/', '/\s/', '/\./', '/\-/', '/[a-zA-Z]/'), array(''), $request->phone);
  289. $validate = Validator::make($request->all(), [
  290. 'email' => 'required|email',
  291. 'phone' => 'required'
  292. ], $errorMessages);
  293. if( count( $validate->errors() ) == 0 )
  294. {
  295. Mail::to(config('app.contact_email'))->cc(config('app.contact_sytian'))->send(new RequestContact($request->first_name, $request->last_name, $request->email, $request->company, $request->phone, $request->question_comment));
  296. return redirect()->back()->withSuccess('Your request has been sent.');
  297. } else {
  298. $errors = $validate->errors();
  299. return redirect()->back()->withErrors($errors);
  300. }
  301. }
  302. }