/** * General string query (not zip or lat/lng) - could be address, city, state, or name * @param string $query text input from homepage * @return json */ public function query($query) { $res = new \stdClass(); //check if query is a state $state = Location::isState($query); if (null !== $state) { $res->reps = Representative::state($state)->get()->all(); $res->location = (object) ['state' => $state, 'state_name' => Location::states[$state]]; $res->reps[] = Representative::where('office', 'President')->first(); usort($res->reps, 'rankSort'); return response()->json($res); } //if query has number try address if (preg_match('/[0-9,]/', $query)) { $address = $this->address($query); if (isset($address->getData()->status) && $address->getData()->status == "error") { return $this->error($address->getData()->message); } if (count($address->getData()->reps) > 0) { return $address; } } //if query doesnt have number try name $reps = Representative::name($query)->orderBy('name')->get()->all(); if (count($reps) > 0) { $res->reps = $reps; return response()->json($res); } //if no name, or state, try address $address = $this->address($query); if (isset($address->getData()->reps) && count($address->getData()->reps) > 0) { return $address; } return $this->error('No results.'); }