rework crawler; add atom link extraction
[phinde.git] / www / index.php
index 0412f8284c947863cc465d22592ca323ac486470..6f4ec8fd15f0286b535dd0ba9208060ceec307a5 100644 (file)
@@ -4,7 +4,7 @@ namespace phinde;
 require 'www-header.php';
 
 if (!isset($_GET['q'])) {
-    exit('no query');
+    $_GET['q'] = '';
 }
 
 $query = $_GET['q'];
@@ -17,9 +17,23 @@ if (isset($_GET['page'])) {
     $page = (int)$_GET['page'] - 1;
 }
 $perPage = 10;//$GLOBALS['phinde']['perPage'];
-
+$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;
+}
+
 $filters = array();
 if (isset($_GET['filter'])) {
     $allowedFilter = array('domain', 'language', 'tags', 'term');
@@ -54,7 +68,6 @@ function buildLink($baseLink, $filters, $addFilterType, $addFilterValue)
     return $baseLink;
 }
 
-$site = null;
 if (preg_match('#site:([^ ]*)#', $query, $matches)) {
     $site = $matches[1];
     $cleanQuery = trim(str_replace('site:' . $site, '', $query));
@@ -77,7 +90,8 @@ $pager = new Html_Pager(
 
 foreach ($res->hits->hits as &$hit) {
     $doc = $hit->_source;
-    if ($doc->title == '') {
+    if (!isset($doc->title) || $doc->title == '') {
+        $doc->title = '(no title)';
         $doc->htmlTitle = '(no title)';
     }
     if (isset($hit->highlight->title[0])) {
@@ -104,14 +118,21 @@ foreach ($res->aggregations as $key => &$aggregation) {
     }
 }
 
+if ($site !== null) {
+    $urlNoSite = buildLink('?q=' . urlencode($cleanQuery), $filters, null, null);
+} else {
+    $urlNoSite = null;
+}
+
 render(
     'search',
     array(
-        'queryTime' => round($timeEnd - $timeBegin, 2) . 'ms',
+        'queryTime' => round($timeEnd - $timeBegin, 2) . 's',
         'query' => $query,
         'cleanQuery' => $cleanQuery,
         'urlNoSite' => $urlNoSite,
         'site' => $site,
+        'siteParam' => $siteParam,
         'hitcount' => $res->hits->total,
         'hits' => $res->hits->hits,
         'aggregations' => $res->aggregations,