Subversion Repositories eFlore/Applications.del

Rev

Rev 2032 | Rev 2035 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2032 Rev 2034
Line 113... Line 113...
113
		if (isset($this->requete['where']['OR_SOUS_REQUETE']) && count($this->requete['where']['OR_SOUS_REQUETE']) > 0) {
113
		if (isset($this->requete['where']['OR_SOUS_REQUETE']) && count($this->requete['where']['OR_SOUS_REQUETE']) > 0) {
114
			$clauseWhereSousRequete = implode(' OR ', $this->requete['where']['OR_SOUS_REQUETE']);
114
			$clauseWhereSousRequete = implode(' OR ', $this->requete['where']['OR_SOUS_REQUETE']);
115
			$sousRequete = 'di.ce_observation IN '.
115
			$sousRequete = 'di.ce_observation IN '.
116
				"(SELECT id_observation FROM del_observation AS do WHERE $clauseWhereSousRequete ) ";
116
				"(SELECT id_observation FROM del_observation AS do WHERE $clauseWhereSousRequete ) ";
117
			$this->requete['where']['OR'][] = "( $sousRequete )";
117
			$this->requete['where']['OR'][] = "( $sousRequete )";
118
			unset($this->requete['join']['LEFT JOIN del_observation AS do ON (di.ce_observation = do.id_observation) ']);
118
			unset($this->requete['join'][$this->getSqlJointureObs()]);
119
		}
119
		}
Line 120... Line 120...
120
 
120
 
121
		if (isset($this->requete['where']['OR']) && count($this->requete['where']['OR']) > 0) {
121
		if (isset($this->requete['where']['OR']) && count($this->requete['where']['OR']) > 0) {
122
			$this->requete['where']['AND'][] = '('.implode(' OR ', $this->requete['where']['OR']).')';
122
			$this->requete['where']['AND'][] = '('.implode(' OR ', $this->requete['where']['OR']).')';
Line 294... Line 294...
294
 
294
 
295
			$this->ajouterJoinObsSiNecessaire();
295
			$this->ajouterJoinObsSiNecessaire();
296
		}
296
		}
Line 297... Line 297...
297
	}
297
	}
298
	
298
	
299
	private function ajouterContraintePays() {
299
	private function ajouterContraintePays() {
300
		if (isset($this->parametres['masque.pays'])) {
300
		if (isset($this->parametres['masque.pays'])) {
301
			// Attention le standard contient parfois FX pour la france métropolitaine
301
			// Attention le standard contient parfois FX pour la france métropolitaine
302
			// Dans ce cas particulier on cherche donc FR et FX
302
			// Dans ce cas particulier on cherche donc FR et FX
303
			$this->parametres['masque.pays'] = strtoupper($this->parametres['masque.pays']);
303
			$this->parametres['masque.pays'] = strtoupper($this->parametres['masque.pays']);
304
			if(strpos($this->parametres['masque.pays'], 'FR') !== false) {
304
			if(strpos($this->parametres['masque.pays'], 'FR') !== false) {
305
				$this->parametres['masque.pays'] = str_replace('FR', 'FR,FX', $this->parametres['masque.pays']);
305
				$this->parametres['masque.pays'] = str_replace('FR', 'FR,FX', $this->parametres['masque.pays']);
306
			}
306
			}
307
			$pays = explode(',', $this->parametres['masque.pays']);
307
			$pays = explode(',', $this->parametres['masque.pays']);
308
			$pays = implode(',', $this->bdd->proteger($pays));
308
			$pays = implode(',', $this->bdd->proteger($pays));
309
			$this->addWhere('masque.pays', "do.pays IN ($pays)");
309
			$this->addWhere('masque.pays', "do.pays IN ($pays)");
310
	
310
	
311
			$this->ajouterJoinObsSiNecessaire();
311
			$this->ajouterJoinObsSiNecessaire();
Line 312... Line 312...
312
		}
312
		}
313
	}
313
	}
314
 
314
 
Line 380... Line 380...
380
		}
380
		}
381
	}
381
	}
Line 382... Line 382...
382
	
382
	
383
	private function ajouterJoinObsSiNecessaire() {
383
	private function ajouterJoinObsSiNecessaire() {
384
			if ($this->etreAppliImg()) {
384
			if ($this->etreAppliImg()) {
385
				$this->addJoin('INNER JOIN del_observation AS do ON (di.ce_observation = do.id_observation) ');
385
				$this->addJoin($this->getSqlJointureObs());
386
			}
386
			}
-
 
387
	}
-
 
388
	
-
 
389
	private function getSqlJointureObs() {
-
 
390
		return 'INNER JOIN del_observation AS do ON (di.ce_observation = do.id_observation) ';
Line 387... Line 391...
387
	}
391
	}
388
 
392
 
389
	public function ajouterConstrainteAppliObs() {
393
	public function ajouterConstrainteAppliObs() {
390
		$this->ajouterContrainteTagCel();
394
		$this->ajouterContrainteTagCel();
Line 437... Line 441...
437
				// A CONFIRMER : toutes les observations moins les validées et à confirmer
441
				// A CONFIRMER : toutes les observations moins les validées et à confirmer
438
				// i.e. : des observations avec un nom valide, qui ne sont pas à déterminer
442
				// i.e. : des observations avec un nom valide, qui ne sont pas à déterminer
439
				// (ni certitude "aDeterminer" ou "douteuse", ni mot clé),
443
				// (ni certitude "aDeterminer" ou "douteuse", ni mot clé),
440
				// ne possédant pas de proposition officiellement retenue 
444
				// ne possédant pas de proposition officiellement retenue 
441
				// et ayant une proposition initiale totalisant un score de moins de 4 
445
				// et ayant une proposition initiale totalisant un score de moins de 4 
442
				$sous_requete_score_prop_votees = $this->getSousRequeteSommeVotesPropositions();
446
				$sous_requete_score_prop_votees = $this->getSousRequeteSommeVotesPropositions();
443
				$this->addWhere('masque.type', 
447
				$this->addWhere('masque.type', 
444
						'('.
448
						'('.
445
							'do.id_observation IN ('.
449
							'do.id_observation IN ('.
446
								'SELECT dc.ce_observation FROM del_commentaire dc WHERE dc.proposition_retenue = 0'.
450
								'SELECT dc.ce_observation FROM del_commentaire dc WHERE dc.proposition_retenue = 0'.
447
								' AND ( '.
451
								' AND ( '.
448
									'dc.proposition_initiale = 1 '.
452
									'dc.proposition_initiale = 1 '.
449
									'AND dc.nom_sel_nn != 0 '.
453
									'AND dc.nom_sel_nn != 0 '.
450
									'AND dc.nom_sel_nn IS NOT NULL '.
454
									'AND dc.nom_sel_nn IS NOT NULL '.
451
									'AND dc.id_commentaire IN ('.$sous_requete_score_prop_votees.' < 4) '.
455
									'AND dc.id_commentaire IN ('.$sous_requete_score_prop_votees.' < 4) '.
452
								') '.
456
								') '.
453
							') AND do.id_observation NOT IN ('.
457
							') AND do.id_observation NOT IN ('.
454
								'SELECT dc.ce_observation FROM del_commentaire dc '.
458
								'SELECT dc.ce_observation FROM del_commentaire dc '.
455
								'WHERE '.
459
								'WHERE '.
456
								' dc.proposition_retenue = 1'.
460
								' dc.proposition_retenue = 1'.
457
							') '.
461
							') '.
458
							'AND do.certitude != "douteux" AND do.certitude != "aDeterminer" '.
462
							'AND do.certitude != "douteux" AND do.certitude != "aDeterminer" '.
459
							'AND do.mots_cles_texte NOT LIKE "%aDeterminer%" '.
463
							'AND do.mots_cles_texte NOT LIKE "%aDeterminer%" '.
460
							'AND do.nom_sel_nn != 0 '.
464
							'AND do.nom_sel_nn != 0 '.
461
							'AND do.nom_sel_nn IS NOT NULL'.
465
							'AND do.nom_sel_nn IS NOT NULL'.
462
						') '	
466
						') '	
463
					);
467
					);
464
			}	
468
			}	
Line 465... Line 469...
465
 
469
 
466
			if ($this->etreAppliImg()) {
-
 
467
				$this->addJoin('LEFT JOIN del_observation AS do ON (di.ce_observation = do.id_observation) ');
-
 
468
			}
470
			$this->ajouterJoinObsSiNecessaire();
469
		}
471
		}
Line 470... Line 472...
470
	}
472
	}
471
	
473
	
472
	private function getSousRequeteSommeVotesPropositions() {
474
	private function getSousRequeteSommeVotesPropositions() {
473
		// ATTENTION : un vote identifié compte 3 votes anonymes (dans les deux sens)
475
		// ATTENTION : un vote identifié compte 3 votes anonymes (dans les deux sens)
474
		return  'SELECT ce_proposition '.
476
		return  'SELECT ce_proposition '.
475
				'FROM del_commentaire_vote dcv '.
477
				'FROM del_commentaire_vote dcv '.
476
				'GROUP BY ce_proposition HAVING '.
478
				'GROUP BY ce_proposition HAVING '.
477
				'SUM(CASE '.
479
				'SUM(CASE '.
478
				'	WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP \'^-?[0-9]+$\' != 0 THEN 3 '.
480
				'	WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP \'^-?[0-9]+$\' != 0 THEN 3 '.
479
				'	WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP \'^-?[0-9]+$\' != 0 THEN -3 '.
481
				'	WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP \'^-?[0-9]+$\' != 0 THEN -3 '.
480
				'	WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP \'^-?[0-9]+$\' = 0 THEN 1 '.
482
				'	WHEN valeur = 1 AND dcv.ce_utilisateur REGEXP \'^-?[0-9]+$\' = 0 THEN 1 '.
481
				'	WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP \'^-?[0-9]+$\' = 0 THEN -1 '.
483
				'	WHEN valeur = 0 AND dcv.ce_utilisateur REGEXP \'^-?[0-9]+$\' = 0 THEN -1 '.
482
				'END '.
484
				'END '.
Line 483... Line 485...
483
			') ';
485
			') ';
484
	}
486
	}
Line 494... Line 496...
494
		if (isset($this->parametres['masque.milieu'])) {
496
		if (isset($this->parametres['masque.milieu'])) {
495
			$milieu = $this->parametres['masque.milieu'];
497
			$milieu = $this->parametres['masque.milieu'];
496
			$milieuMotif = $this->bdd->proteger("%$milieu%");
498
			$milieuMotif = $this->bdd->proteger("%$milieu%");
497
			$this->addWhere('masque.milieu', "do.milieu LIKE $milieuMotif");
499
			$this->addWhere('masque.milieu', "do.milieu LIKE $milieuMotif");
Line 498... Line 500...
498
 
500
 
499
			if ($this->etreAppliImg()) {
-
 
500
				$this->addJoin('LEFT JOIN del_observation AS do ON (di.ce_observation = do.id_observation) ');
-
 
501
			}
501
			$this->ajouterJoinObsSiNecessaire();
502
		}
502
		}
Line 503... Line 503...
503
	}
503
	}
504
 
504
 
Line 555... Line 555...
555
 
555
 
556
				if ($this->etreAppliObs()) {
556
				if ($this->etreAppliObs()) {
557
					$this->addJoin('LEFT JOIN del_image AS di ON (di.ce_observation = do.id_observation) ');
557
					$this->addJoin('LEFT JOIN del_image AS di ON (di.ce_observation = do.id_observation) ');
558
				}
558
				}
559
			}
559
			}
560
			if ($this->etreAppliImg()) {
-
 
561
				$this->addJoin('LEFT JOIN del_observation AS do ON (di.ce_observation = do.id_observation) ');
-
 
562
			}
560
			$this->ajouterJoinObsSiNecessaire();
563
		}
561
		}
Line 564... Line 562...
564
	}
562
	}
565
 
563
 
Line 577... Line 575...
577
						'WHERE actif = 1 '.
575
						'WHERE actif = 1 '.
578
						'GROUP BY ce_image '.
576
						'GROUP BY ce_image '.
579
						"HAVING GROUP_CONCAT(DISTINCT tag_normalise ORDER BY tag_normalise) REGEXP $tagsMotif ";
577
						"HAVING GROUP_CONCAT(DISTINCT tag_normalise ORDER BY tag_normalise) REGEXP $tagsMotif ";
580
				}
578
				}
581
			} else {
579
			} else {
582
				// Si un seul tag est demandé il se trouve dans le OR
580
				// Si un seul tag est demandé il se trouve dans le OR dans le cas de la recherche
-
 
581
				// spécifique et dans le AND dans le cas de la recherche générale
-
 
582
				// WTF?
-
 
583
				$tag = "";
-
 
584
				if(isset($this->parametres['masque.tag_del']['OR'][0])) {
583
				$tag = $this->parametres['masque.tag_del']['OR'][0];
585
					$tag = $this->parametres['masque.tag_del']['OR'][0];
-
 
586
				} else if(isset($this->parametres['masque.tag_del']['AND'][0])) {
-
 
587
					$tag = $this->parametres['masque.tag_del']['AND'][0];
-
 
588
				}
-
 
589
				
584
				$sousRequete = 'SELECT ce_image '.
590
				$sousRequete = 'SELECT ce_image '.
585
						'FROM del_image_tag '.
591
						'FROM del_image_tag '.
586
						'WHERE actif = 1 '.
592
						'WHERE actif = 1 '.
587
						'AND tag_normalise LIKE '.$this->bdd->proteger($tag.'%');
593
						'AND tag_normalise LIKE '.$this->bdd->proteger($tag.'%');
588
			}
594
			}
Line 593... Line 599...
593
	
599
	
594
	private function getNombreDeTags() {
600
	private function getNombreDeTags() {
595
		$somme = 0;
601
		$somme = 0;
596
		if (isset($this->parametres['masque.tag_del']['AND'])) {
602
		if (isset($this->parametres['masque.tag_del']['AND'])) {
597
			$somme = count($this->parametres['masque.tag_del']['AND']);
603
			$somme = count($this->parametres['masque.tag_del']['AND']);
598
		} else {
604
		} else {
599
			$somme = count($this->parametres['masque.tag_del']['OR']);
605
			$somme = count($this->parametres['masque.tag_del']['OR']);
600
		}
606
		}
601
		return $somme;
607
		return $somme;
Line 602... Line 608...
602
	}
608
	}
Line 651... Line 657...
651
		$tri = isset($this->parametres['tri']) ? $this->parametres['tri'] : '';
657
		$tri = isset($this->parametres['tri']) ? $this->parametres['tri'] : '';
652
			switch ($tri) {
658
			switch ($tri) {
653
			case 'date_observation' :
659
			case 'date_observation' :
654
				$this->addOrderBy("date_observation $ordre, id_observation $ordre");
660
				$this->addOrderBy("date_observation $ordre, id_observation $ordre");
655
				break;			
661
				break;			
656
			case 'nb_commentaires' :
662
			case 'nb_commentaires' :
657
				$sql_nb_comms = '(SELECT COUNT(id_commentaire) FROM del_commentaire AS dc WHERE ce_observation = id_observation)';
663
				$sql_nb_comms = '(SELECT COUNT(id_commentaire) FROM del_commentaire AS dc WHERE ce_observation = id_observation)';
658
				$this->addOrderBy("$sql_nb_comms $ordre, id_observation $ordre");
664
				$this->addOrderBy("$sql_nb_comms $ordre, id_observation $ordre");
659
				break;
665
				break;
660
			case 'date_transmission' :
666
			case 'date_transmission' :
661
			default:
667
			default:
662
				$this->addOrderBy("do.date_transmission $ordre, id_observation $ordre");
668
				$this->addOrderBy("do.date_transmission $ordre, id_observation $ordre");
663
		}
669
		}