function processWS() { if (empty($_GET['ws']) || empty($_GET['term'])) { return; } $term = $_GET['term']; $LINKSDB = new linkdb(isLoggedIn() || $GLOBALS['config']['OPEN_SHAARLI']); // Read links from database (and filter private links if used it not logged in). header('Content-Type: application/json; charset=utf-8'); // Search in tags (case insentitive, cumulative search) if ($_GET['ws'] == 'tags') { $tags = explode(' ', str_replace(',', ' ', $term)); $last = array_pop($tags); // Get the last term ("a b c d" ==> "a b c", "d") $addtags = ''; if ($tags) { $addtags = implode(' ', $tags) . ' '; } // We will pre-pend previous tags $suggested = array(); /* To speed up things, we store list of tags in session */ if (empty($_SESSION['tags'])) { $_SESSION['tags'] = $LINKSDB->allTags(); } foreach ($_SESSION['tags'] as $key => $value) { if (startsWith($key, $last, $case = false) && !in_array($key, $tags)) { $suggested[$addtags . $key . ' '] = 0; } } echo json_encode(array_keys($suggested)); exit; } // Search a single tag (case sentitive, single tag search) if ($_GET['ws'] == 'singletag') { /* To speed up things, we store list of tags in session */ if (empty($_SESSION['tags'])) { $_SESSION['tags'] = $LINKSDB->allTags(); } foreach ($_SESSION['tags'] as $key => $value) { if (startsWith($key, $term, $case = true)) { $suggested[$key] = 0; } } echo json_encode(array_keys($suggested)); exit; } }