Browse Source

Allow +/-/" usage in search queries, fixes #376

Jordi Boggiano 10 years ago
parent
commit
821eb0794f

+ 5 - 0
src/Packagist/WebBundle/Controller/WebController.php

@@ -287,6 +287,11 @@ class WebController extends Controller
                 $form->bind($req);
                 if ($form->isValid()) {
                     $escapedQuery = $select->getHelper()->escapeTerm($form->getData()->getQuery());
+                    $escapedQuery = preg_replace('/(^| )\\\\-/', '$1-', $escapedQuery);
+                    if ((substr_count($escapedQuery, '"') % 2) == 0) {
+                        $escapedQuery = str_replace('\\"', '"', $escapedQuery);
+                    }
+                    $escapedQuery = str_replace('\\+', '+', $escapedQuery);
                     $select->setQuery($escapedQuery);
                 }
             }

+ 2 - 2
src/Packagist/WebBundle/Resources/public/js/search.js

@@ -49,9 +49,9 @@
 
         if (window.history.pushState) {
             if (previousQuery === undefined) {
-                window.history.pushState(null, "Search", "/search/?q=" + $('input[type="search"]', form).val());
+                window.history.pushState(null, "Search", "/search/?q=" + encodeURIComponent($('input[type="search"]', form).val()));
             } else {
-                window.history.replaceState(null, "Search", "/search/?q=" + $('input[type="search"]', form).val());
+                window.history.replaceState(null, "Search", "/search/?q=" + encodeURIComponent($('input[type="search"]', form).val()));
             }
         }
 

+ 1 - 1
src/Packagist/WebBundle/Resources/views/layout.html.twig

@@ -119,7 +119,7 @@
         <script src="{{ asset('js/libs/humane.min.js?v=2') }}"></script>
         <script src="{{ asset('js/libs/ZeroClipboard.min.js') }}"></script>
         <script src="{{ asset('bundles/packagistweb/js/layout.js?v=2') }}"></script>
-        <script src="{{ asset('bundles/packagistweb/js/search.js?v=4')}}"></script>
+        <script src="{{ asset('bundles/packagistweb/js/search.js?v=5')}}"></script>
 
         {% if not app.debug and google_analytics.ga_key %}
             <script>