Éviter de planter lorsque la recherche par mots-clés a une syntaxe incorrecte.
[auf_savoirs_en_partage_django.git] / auf_savoirs_en_partage / savoirs / models.py
index b7b8031..5575740 100644 (file)
@@ -18,7 +18,7 @@ from django.db import models
 from django.db.models import Q, Max
 from django.db.models.signals import pre_delete
 from django.utils.encoding import smart_unicode
-from djangosphinx.models import SphinxQuerySet
+from djangosphinx.models import SphinxQuerySet, SearchError
 from savoirs.globals import META
 from settings import CALENDRIER_URL, SITE_ROOT_URL
 
@@ -75,6 +75,22 @@ class SEPSphinxQuerySet(SphinxQuerySet, RandomQuerySetMixin):
            tous les champs."""
         return self.search('"%s"' % region.nom)
 
+    def _get_sphinx_results(self):
+        try:
+            return SphinxQuerySet._get_sphinx_results(self)
+        except SearchError:
+            # Essayons d'enlever les caractères qui peuvent poser problème.
+            for c in '|!@()~/<=^$':
+                self._query = self._query.replace(c, ' ')
+            try:
+                return SphinxQuerySet._get_sphinx_results(self)
+            except SearchError:
+                # Ça ne marche toujours pas. Enlevons les guillemets et les
+                # tirets.
+                for c in '"-':
+                    self._query = self._query.replace(c, ' ')
+                return SphinxQuerySet._get_sphinx_results(self)
+
 class SEPManager(models.Manager):
     """Lorsque les méthodes ``search``, ``filter_region`` et
        ``filter_discipline`` sont appelées sur ce manager, le query set