Do not allow pages > 100
[phinde.git] / www / index.php
index 8bf81479b7cd651cc77230fd93d1ed3e8fe21158..7c4904b4d45a6cac241fd0564d5535df8c213a85 100644 (file)
@@ -15,6 +15,12 @@ if (isset($_GET['page'])) {
     }
     //PEAR Pager begins at 1
     $page = (int)$_GET['page'] - 1;
+
+    if ($page >= 100) {
+        //Elasticsearch by default only allows 100 pages
+        // we do not want exceptions in our logs
+        throw new Exception_Input('List page is too large');
+    }
 }
 
 $perPage = 10;//$GLOBALS['phinde']['perPage'];
@@ -35,11 +41,16 @@ if (preg_match('#site:([^ ]*)#', $query, $matches)) {
     $cleanQuery = $query;
 }
 
-if (isset($_GET['sort']) && $_GET['sort'] == 'date') {
-    $sort = 'date';
-    $baseLink .= '&sort=date';
+if (isset($_GET['sort'])
+    && ($_GET['sort'] === 'date' || $_GET['sort'] === 'score')
+) {
+    $sortMode = $_GET['sort'];
 } else {
-    $sort = '';
+    $sortMode = $GLOBALS['phinde']['defaultSort'];
+}
+$sort = $sortMode;
+if ($sortMode !== $GLOBALS['phinde']['defaultSort']) {
+    $baseLink .= '&sort=' . $sortMode;
 }
 
 $filters = array();
@@ -93,7 +104,7 @@ $timeEnd = microtime(true);
 
 $pager = new Html_Pager(
     $res->hits->total, $perPage, $page + 1,
-    $baseLink
+    buildLink($baseLink, $filters, null, null)
 );
 
 foreach ($res->hits->hits as &$hit) {
@@ -132,10 +143,17 @@ if ($site !== null) {
     $urlNoSite = null;
 }
 
-$urlSortRelevance = buildLink(
-    str_replace('&sort=date', '', $baseLink), $filters, null, null
+$urlSortBase = buildLink(
+    preg_replace('#&sort=[^&]+#', '', $baseLink), $filters, null, null
 );
-$urlSortDate = $urlSortRelevance . '&sort=date';
+$urlSorts = [];
+foreach (['date', 'score'] as $sortMode) {
+    if ($sortMode === $GLOBALS['phinde']['defaultSort']) {
+        $urlSorts[$sortMode] = $urlSortBase;
+    } else {
+        $urlSorts[$sortMode] = $urlSortBase . '&sort=' . $sortMode;
+    }
+}
 
 if (isset($_GET['format']) && $_GET['format'] == 'opensearch') {
     $template = 'opensearch';
@@ -161,9 +179,9 @@ render(
         'activeFilters' => $activeFilters,
         'pager' => $pager,
         'sort' => $sort,
-        'urlSortRelevance' => $urlSortRelevance,
-        'urlSortDate' => $urlSortDate,
+        'urlSorts' => $urlSorts,
         'hitTemplate' => 'search/' . $GLOBALS['phinde']['hitTemplate'],
+        'sidebarinclude' => $GLOBALS['phinde']['sidebarinclude'],
     )
 );
 ?>