public function searchTag(Application $app, Request $request) { $term = trim(strtolower($request->query->get('term'))); $res = []; if ($term) { $provider = new TagProvider(); foreach ($provider->getLookupTable() as $namespace => $tags) { $ns = strpos($namespace, $term); foreach ($tags as $tagname => $datas) { if ($ns === false && strpos($tagname, $term) === false) { continue; } $res[] = ['id' => $namespace . '/' . $tagname, 'label' => $datas['namespace'] . ' / ' . $datas['tagname'], 'value' => $datas['namespace'] . ':' . $datas['tagname']]; } } } return $app->json($res); }
public function searchTag(Request $request) { $term = str_replace(['/', ':', '.'], ' ', strtolower($request->query->get('term'))); $res = []; $term = explode(' ', $term, 2); if (($term[0] = trim($term[0])) != '') { if (($nparts = count($term)) == 2) { $term[1] = trim($term[1]); } $provider = new TagProvider(); foreach ($provider->getLookupTable() as $namespace => $tags) { $match_ns = strpos($namespace, $term[0]) !== false; if ($nparts == 2 && !$match_ns) { // with "abc:xyz", "abc" MUST match the namespace continue; } foreach ($tags as $tagname => $datas) { if ($nparts == 1) { // "abc" can match the namespace OR the tagname $match = $match_ns || strpos($tagname, $term[0]) !== false; } else { // match "abc:xyz" against namespace (already true) AND tagname $match = $term[1] == '' || strpos($tagname, $term[1]) !== false; } if ($match) { $res[] = ['id' => $namespace . '/' . $tagname, 'label' => $datas['namespace'] . ' / ' . $datas['tagname'], 'value' => $datas['namespace'] . ':' . $datas['tagname']]; } } } } return $this->app->json($res); }