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;
|