+$site = null;
+$siteParam = false;
+$baseLink = '?q=' . urlencode($query);
+
+if (preg_match('#site:([^ ]*)#', $query, $matches)) {
+ $site = $matches[1];
+ $cleanQuery = trim(str_replace('site:' . $site, '', $query));
+ $site = Helper::noSchema($site);
+} else if (isset($_GET['site']) && trim(isset($_GET['site'])) != '') {
+ $site = trim($_GET['site']);
+ $siteParam = true;
+ $cleanQuery = $query;
+ $baseLink .= '&site=' . urlencode($site);
+} else {
+ $cleanQuery = $query;
+}
+
+if (isset($_GET['sort']) && $_GET['sort'] == 'date') {
+ $sort = 'date';
+ $baseLink .= '&sort=date';
+} else {
+ $sort = '';
+}
+
+$filters = array();
+if (isset($_GET['filter'])) {
+ $allowedFilter = array('domain', 'language', 'tags', 'term');
+ foreach ($_GET['filter'] as $type => $value) {
+ if (in_array($type, $allowedFilter)) {
+ $filters[$type] = filter_var($value, FILTER_SANITIZE_STRING);
+ }
+ }
+}
+$activeFilters = array();
+foreach ($filters as $type => $value) {
+ $activeFilters[$type] = array(
+ 'label' => $value,
+ 'removeUrl' => buildLink($baseLink, $filters, $type, null),
+ );
+}
+
+function buildLink($baseLink, $filters, $addFilterType, $addFilterValue)
+{
+ if ($addFilterValue === null) {
+ if (array_key_exists($addFilterType, $filters)) {
+ unset($filters[$addFilterType]);
+ }
+ } else {
+ $filters[$addFilterType] = $addFilterValue;
+ }
+
+ $params = http_build_query(array('filter' => $filters));
+ if (strlen($params)) {
+ return $baseLink . '&' . $params;
+ }
+ return $baseLink;
+}