/** * Store a newly created resource in storage. * * @return Response */ public function store() { // VALIDATORS // Validate type $rules = array('type' => array('required', 'in:project,map')); $messages = array('type.required' => 'NO_TYPE'); $validator = \Validator::make(\Input::all(), $rules, $messages); if ($validator->fails()) { return response()->json(array('error' => true, 'validator' => $validator->messages()), 500); } // TODO: Validate project_id + email // Validate email + duplicate if (\Input::get('type') == 'project') { $confirm_token = md5(\Input::get('project_id') . \Input::get('email')); } else { $confirm_token = md5(\Input::get('bounds') . \Input::get('email')); } $data = \Input::all(); $data = array_add($data, 'confirm_token', $confirm_token); $rules = array('email' => array('required', 'email'), 'confirm_token' => 'unique:subscriptions'); $messages = array('email.required' => 'NO_EMAIL', 'email.email' => 'NOT_EMAIL', 'confirm_token.unique' => 'DUPLICATE'); $validator = \Validator::make($data, $rules, $messages); if ($validator->fails()) { return response()->json(array('error' => true, 'validator' => $validator->messages()), 500); } // Validate bounds if (\Input::get('type') == 'map') { $bounds = explode(",", \Input::get('bounds')); if (count($bounds) != 4 || !\Input::has('bounds')) { return response()->json(array('error' => true, 'validator' => 'BOUNDS_ERROR'), 500); } } // SUBSCRIBE User::firstOrCreate(array('email' => \Input::get('email'))); $user = User::where('email', \Input::get('email'))->first(); $subscription = new Subscription(); $subscription->user_id = $user->id; $subscription->confirm_token = $confirm_token; $subscription->geojson = \Input::get('geojson'); if (\Input::get('type') == 'project') { $subscription->project_id = \Input::get('project_id'); } elseif (\Input::get('type') == 'map') { $subscription->sw_lat = $bounds[0]; $subscription->sw_lng = $bounds[1]; $subscription->ne_lat = $bounds[2]; $subscription->ne_lng = $bounds[3]; $subscription->bounds = \Input::get('bounds'); $subscription->center = \Input::get('center'); $subscription->zoom = \Input::get('zoom'); } $subscription->save(); $user->increment('subscriptions'); return response()->json(array('error' => false, 'subscription' => $subscription->toArray(), 'status' => 'OK'), 200); }