]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - actions/noticesearch.php
Add escaping of /.
[quix0rs-gnu-social.git] / actions / noticesearch.php
index eb4a072defc73de18ba1d9a5425c7d4beed80ded..d996998fc6026328cc6a8271756393203b2202fa 100644 (file)
@@ -114,20 +114,26 @@ class NoticesearchAction extends SearchAction
             $cnt = $notice->find();
         }
         if ($cnt === 0) {
-            $this->element('p', 'error', _('No results'));
+            $this->element('p', 'error', _('No results.'));
+
+            $this->searchSuggestions($q);
+            if (common_logged_in()) {
+                $message = sprintf(_('Be the first to [post on this topic](%%%%action.newnotice%%%%?status_textarea=%s)!'), urlencode($q));
+            }
+            else {
+                $message = sprintf(_('Why not [register an account](%%%%action.register%%%%) and be the first to  [post on this topic](%%%%action.newnotice%%%%?status_textarea=%s)!'), urlencode($q));
+            }
+
+            $this->elementStart('div', 'guide');
+            $this->raw(common_markup_to_html($message));
+            $this->elementEnd('div');
             return;
         }
         $terms = preg_split('/[\s,]+/', $q);
         $nl = new SearchNoticeList($notice, $this, $terms);
-
         $cnt = $nl->show();
-
-        $this->pagination($this->page > 1, $cnt > NOTICES_PER_PAGE,
-                          $this->page, 'noticesearch', array('q' => $q));
-    }
-    function isReadOnly()
-    {
-        return true;
+        $this->pagination($page > 1, $cnt > NOTICES_PER_PAGE,
+                          $page, 'noticesearch', array('q' => $q));
     }
 }
 
@@ -178,11 +184,13 @@ class SearchNoticeListItem extends NoticeListItem {
     function highlight($text, $terms)
     {
         /* Highligh search terms */
-        $pattern = '/('.implode('|', array_map('htmlspecialchars', $terms)).')/i';
+        $options = implode('|', array_map('preg_quote', array_map('htmlspecialchars', $terms),
+                                                            array_fill(0, sizeof($terms), '/')));
+        $pattern = "/($options)/i";
         $result  = preg_replace($pattern, '<strong>\\1</strong>', $text);
 
         /* Remove highlighting from inside links, loop incase multiple highlights in links */
-        $pattern = '/(href="[^"]*)<strong>('.implode('|', array_map('htmlspecialchars', $terms)).')<\/strong>([^"]*")/iU';
+        $pattern = '/(href="[^"]*)<strong>('.$options.')<\/strong>([^"]*")/iU';
         do {
             $result = preg_replace($pattern, '\\1\\2\\3', $result, -1, $count);
         } while ($count);