/** * 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.'); }
public static function find($query) { if (isset($query->first_name) && isset($query->last_name)) { $first = $query->first_name; if (stripos($first, " ") !== false) { $first = explode(" ", $first)[0]; } $query->name = $first . ' ' . $query->last_name; } $reps = Representative::name($query->name)->get()->all(); if (count($reps) == 1) { return $reps[0]; } else { if (count($reps) > 1) { $reps = array_filter($reps, function ($r) use($query) { if (isset($query->division)) { return $query->division == $r->division; } if (isset($query->district) && isset($query->state)) { return $query->district == $r->district && $query->state == $r->state; } }); if (count($reps) === 1) { return array_pop($reps); } } } return null; }