Sfoglia il codice sorgente

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

Sevajol Bastien 12 anni fa
parent
commit
5f94151cbd

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

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

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

7
 
7
 
8
 class ElementSearcherTest extends UnitTest
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
   protected function checkElementSearchResults($es_results, $array_names)
56
   protected function checkElementSearchResults($es_results, $array_names)
57
   {
57
   {
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
 }