Browse Source

Anomalie #444: Err. 500 SearchElement: Tag strict ?

Sevajol Bastien 12 years ago
parent
commit
5f94151cbd

+ 20 - 5
src/Muzich/CoreBundle/Searcher/ElementSearcherQueryBuilder.php View File

@@ -239,7 +239,7 @@ class ElementSearcherQueryBuilder
239 239
       ."having count(distinct et.tag_id) = ".count($tags);
240 240
       $rsm = new \Doctrine\ORM\Query\ResultSetMapping;
241 241
       $rsm->addScalarResult('element_id', 'element_id');
242
-      
242
+   
243 243
       $strict_element_ids_result = $this->em
244 244
         ->createNativeQuery($sql, $rsm)
245 245
         //->setParameter('ids', $tag_ids)
@@ -260,7 +260,7 @@ class ElementSearcherQueryBuilder
260 260
       // Ce else palie au bug du au cas ou $strict_element_ids est egal a array();
261 261
       else
262 262
       {
263
-        $this->query_ids->andWhere('1 == 2');
263
+        return false;
264 264
       }
265 265
     }
266 266
   }
@@ -307,7 +307,10 @@ class ElementSearcherQueryBuilder
307 307
     // Pour les demandes de "more" ou "nouveaux" elements.
308 308
     $this->buildLimits();
309 309
     // Si on recherche les tags de manière stricte
310
-    $this->buildStrict();
310
+    if ($this->buildStrict() === false)
311
+    {
312
+      return false;
313
+    }
311 314
     // Si on recherche des partages en demande de tags
312 315
     $this->buildNeedTags();
313 316
     
@@ -329,17 +332,29 @@ class ElementSearcherQueryBuilder
329 332
         ."possédant déjà une liste d'ids");
330 333
     }
331 334
     
332
-    $this->proceedIdsQuery($disable_limit);
335
+    if ($this->proceedIdsQuery($disable_limit) === false)
336
+    {
337
+      return false;
338
+    }
339
+    
333 340
     return $this->query_ids->getQuery();
334 341
   }
335 342
   
336 343
   protected function proceedElementsQuery()
337 344
   {
345
+    
338 346
     // On récupère les ids d'éléments
339 347
     if (!$this->es->hasIds())
340 348
     {
349
+      
350
+      if (($ids_query = $this->getIdsQuery()) === false)
351
+      {
352
+        return false;
353
+      }
354
+      
341 355
       // On va récupérer les ids en base en fonction des paramètres
342
-      $q_ids = $this->getIdsQuery()->getArrayResult();
356
+      $q_ids = $ids_query->getArrayResult();
357
+     
343 358
       $element_ids = array();
344 359
       if (count($q_ids))
345 360
       {

+ 62 - 45
src/Muzich/CoreBundle/Tests/Searcher/ElementSearcherTest.php View File

@@ -7,51 +7,51 @@ use Muzich\CoreBundle\Searcher\ElementSearcher;
7 7
 
8 8
 class ElementSearcherTest extends UnitTest
9 9
 {  
10
-//  public function testInit()
11
-//  {
12
-//    $es = new ElementSearcher();
13
-//    $es->init($ia = array(
14
-//        'network'   => ElementSearcher::NETWORK_PERSONAL, 
15
-//        'tags'      => array(1 => '', 2 => '', 6 => ''), 
16
-//        'count'     => 20, 
17
-//        'user_id'   => 185, 
18
-//        'group_id'  => null, 
19
-//        'favorite'  => false,
20
-//        'ids'       => null,
21
-//        'ids_display' => null,
22
-//        'tag_strict' => false,
23
-//        'string'     => null
24
-//    ));
25
-//
26
-//    $this->assertEquals($ia, $es->getParams());
27
-//  }
28
-//  
29
-//  public function testUpdate()
30
-//  {
31
-//    $es = new ElementSearcher();
32
-//    $es->init($ia = array(
33
-//        'network'   => ElementSearcher::NETWORK_PERSONAL, 
34
-//        'tags'      => array(1 => '', 2 => '', 6 => ''), 
35
-//        'count'     => 20, 
36
-//        'user_id'   => 185, 
37
-//        'group_id'  => null, 
38
-//        'favorite'  => false
39
-//    ));
40
-//    $es->init($ua = array(
41
-//        'network'   => ElementSearcher::NETWORK_PUBLIC, 
42
-//        'tags'      => array(5 => '', 8 => '', 123 => ''), 
43
-//        'count'     => 21, 
44
-//        'user_id'   => 115, 
45
-//        'group_id'  => null, 
46
-//        'favorite'  => false,
47
-//        'ids'       => null,
48
-//        'ids_display' => null,
49
-//        'tag_strict' => false,
50
-//        'string'     => null
51
-//    ));
52
-//
53
-//    $this->assertEquals($ua, $es->getParams());
54
-//  }
10
+  public function testInit()
11
+  {
12
+    $es = new ElementSearcher();
13
+    $es->init($ia = array(
14
+        'network'   => ElementSearcher::NETWORK_PERSONAL, 
15
+        'tags'      => array(1 => '', 2 => '', 6 => ''), 
16
+        'count'     => 20, 
17
+        'user_id'   => 185, 
18
+        'group_id'  => null, 
19
+        'favorite'  => false,
20
+        'ids'       => null,
21
+        'ids_display' => null,
22
+        'tag_strict' => false,
23
+        'string'     => null
24
+    ));
25
+
26
+    $this->assertEquals($ia, $es->getParams());
27
+  }
28
+  
29
+  public function testUpdate()
30
+  {
31
+    $es = new ElementSearcher();
32
+    $es->init($ia = array(
33
+        'network'   => ElementSearcher::NETWORK_PERSONAL, 
34
+        'tags'      => array(1 => '', 2 => '', 6 => ''), 
35
+        'count'     => 20, 
36
+        'user_id'   => 185, 
37
+        'group_id'  => null, 
38
+        'favorite'  => false
39
+    ));
40
+    $es->init($ua = array(
41
+        'network'   => ElementSearcher::NETWORK_PUBLIC, 
42
+        'tags'      => array(5 => '', 8 => '', 123 => ''), 
43
+        'count'     => 21, 
44
+        'user_id'   => 115, 
45
+        'group_id'  => null, 
46
+        'favorite'  => false,
47
+        'ids'       => null,
48
+        'ids_display' => null,
49
+        'tag_strict' => false,
50
+        'string'     => null
51
+    ));
52
+
53
+    $this->assertEquals($ua, $es->getParams());
54
+  }
55 55
   
56 56
   protected function checkElementSearchResults($es_results, $array_names)
57 57
   {
@@ -406,6 +406,23 @@ class ElementSearcherTest extends UnitTest
406 406
       )
407 407
     );
408 408
     
409
+    $es = new ElementSearcher();
410
+    $es->init(array(
411
+      'network'   => ElementSearcher::NETWORK_PUBLIC,
412
+      'tags'      => array(
413
+        $metal->getId()      => 'Metal', 
414
+        $hardcore->getId()   => 'Hardcore',
415
+        $tribe->getId()      => 'Tribe'
416
+      ),
417
+      'count'      => 5,
418
+      'tag_strict' => true
419
+    ));
420
+    
421
+    $this->checkElementSearchResults(
422
+      $es->getElements($r, $bux->getId()), 
423
+      array()
424
+    );
425
+    
409 426
   }
410 427
   
411 428
 }