Subversion Repositories eFlore/Applications.del

Rev

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

Rev 1845 Rev 1863
Line 388... Line 388...
388
	 */
388
	 */
389
	private function ajouterContrainteTri() {
389
	private function ajouterContrainteTri() {
390
		if (isset($this->parametres['tri'])) {
390
		if (isset($this->parametres['tri'])) {
391
			$tri = $this->parametres['tri'];
391
			$tri = $this->parametres['tri'];
Line 392... Line 392...
392
 
392
 
393
			if (isset($this->parametres['protocole'])  && ($tri == 'votes' || $tri == 'points')) {
393
			if (isset($this->parametres['protocole'])  && ($tri == 'moyenne-arithmetique' || $tri == 'points')) {
394
				// $this->parametres['protocole'] *est* défini (cf Outils::filtrerUrlsParams...())
394
				// $this->parametres['protocole'] *est* défini (cf Outils::filtrerUrlsParams...())
395
				$sqlTpl = 'LEFT JOIN del_image_stat dis ON vdi.id_image = dis.ce_image AND dis.ce_protocole = %d';
395
				$sqlTpl = 'LEFT JOIN del_image_stat dis ON vdi.id_image = dis.ce_image AND dis.ce_protocole = %d';
396
				$triSql = sprintf($sqlTpl, $this->parametres['protocole']);
396
				$triSql = sprintf($sqlTpl, $this->parametres['protocole']);
397
				$this->addJoinDis($triSql);
397
				$this->addJoinDis($triSql);
Line 483... Line 483...
483
		return "vdi.id_image IN ($clauseIn)";
483
		return "vdi.id_image IN ($clauseIn)";
484
	}
484
	}
Line 485... Line 485...
485
 
485
 
486
	/**
486
	/**
487
	 * Partie spécifique à PictoFlora:
-
 
488
	 * génération de la clause ORDER BY (génère la valeur de la clef orderby' de $req)
-
 
489
	 * nécessaire ? tableau sprintf(key (tri) => value (ordre), key => value ...).
487
	 * Partie spécifique à PictoFlora:
490
	 * Cependant il est impensable de joindre sur un AVG() des valeurs des votes pour
488
	 * Attention : si le critère de tri n'est pas suffisant, les résultats affichés peuvent varier à chaque appel
491
	 * *chaque* couple (id_image, protocole) de la base afin de trouver les images
-
 
492
	 * les "mieux notées", ou bien les images ayant le "plus de tags" (COUNT())
489
	 * de la même page de résultat de PictoFlora.
493
	 */
490
	 */
494
	public function definirOrdreSqlAppliImg() {
491
	public function definirOrdreSqlAppliImg() {
Line 495... Line -...
495
		$ordre = $this->parametres['ordre'];
-
 
496
 
492
		$ordre = $this->parametres['ordre'];
497
		// parmi self::$tri_possible
493
 
498
		switch ($this->parametres['tri']) {
494
		switch ($this->parametres['tri']) {
499
			case 'votes' :
495
			case 'moyenne-arithmetique' :
500
				$this->addOrderBy("dis.moyenne $ordre, dis.nb_votes $ordre");
496
				$this->addOrderBy("dis.moyenne $ordre, dis.nb_votes $ordre, id_image DESC");
501
				break;
497
				break;
502
			case 'points' :
498
			case 'points' :
503
				$this->addOrderBy("dis.nb_points $ordre, dis.moyenne $ordre, dis.nb_votes $ordre");
499
				$this->addOrderBy("dis.nb_points $ordre, dis.moyenne $ordre, dis.nb_votes $ordre, id_image DESC");
504
				break;
500
				break;
505
			case 'tags' :
501
			case 'tags' :
506
				$this->addOrderBy("dis.nb_tags $ordre");
502
				$this->addOrderBy("dis.nb_tags $ordre, id_image DESC");
507
				break;
503
				break;
508
			case 'date_observation' :
504
			case 'date_observation' :
-
 
505
				$this->addOrderBy("date_observation $ordre, id_observation $ordre");
509
				$this->addOrderBy("date_observation $ordre, id_observation $ordre");
506
				break;
510
				break;
507
			case 'date_transmission' :
511
			default:
508
			default:
512
				$this->addOrderBy("date_transmission $ordre, id_observation $ordre");
509
				$this->addOrderBy("date_transmission $ordre, id_observation $ordre");
Line 581... Line 578...
581
		foreach ($votes as $vote) {
578
		foreach ($votes as $vote) {
582
			$imgId = $vote['image.id'];
579
			$imgId = $vote['image.id'];
583
			$protoId = $vote['protocole.id'];
580
			$protoId = $vote['protocole.id'];
Line 584... Line 581...
584
 
581
 
585
			if (!array_key_exists('protocoles_votes', $images[$imgId]) ||
582
			if (!array_key_exists('protocoles_votes', $images[$imgId]) ||
586
			   !array_key_exists($protoId, $images[$imgId]['protocoles_votes'])) {
583
					!array_key_exists($protoId, $images[$imgId]['protocoles_votes'])) {
587
				// extrait les champs spécifique au protocole (le LEFT JOIN de chargerVotesImage les ramène en doublons
584
				// extrait les champs spécifique au protocole (le LEFT JOIN de chargerVotesImage les ramène en doublons
588
				$protocole = array_intersect_key($vote, array_flip($mappingProtocoles));
585
				$protocole = array_intersect_key($vote, array_flip($mappingProtocoles));
589
				$images[$imgId]['protocoles_votes'][$protoId] = $protocole;
586
				$images[$imgId]['protocoles_votes'][$protoId] = $protocole;