83,6 → 83,12 |
$erreurs[] = '- le type de tri demandé est incorrect, les valeurs possibles sont '.$tris_possibles.' ;'; |
} |
|
if(isset($this->parametres['tri']) && $this->parametres['tri'] == "votes") { |
if(!isset($this->parametres['protocole']) || !is_numeric($this->parametres['protocole'])) { |
$erreurs[] = '- Le paramètre protocole est obligatoire en cas de tri par vote et doit être un entier ;'; |
} |
} |
|
$directions_tri = array('asc', 'desc'); |
if(isset($this->parametres['ordre']) && !in_array($this->parametres['ordre'], $directions_tri)) { |
$erreurs[] = '- la direction du tri demandé est incorrecte, les valeurs supportées sont asc ou desc ;'; |
374,7 → 380,13 |
* */ |
private function chargerLiaisons() { |
|
$requeteLiaisons = 'SELECT DISTINCT SQL_CALC_FOUND_ROWS * '. |
// Attention le LEFT JOIN est indispensable pour ramener les images n'ayant pas de votes |
// en cas de tri par votes |
$requeteLiaisons = 'SELECT DISTINCT SQL_CALC_FOUND_ROWS di.*, doi.*, du.*, dob.* '. |
($this->doitJoindreTableVotes() ? |
', IF(dvote.ce_protocole = '.$this->parametres['protocole'].', SUM(dvote.valeur), 0) as total_votes ' : |
'' |
). |
'FROM '.$this->gestionBdd->formaterTable('del_obs_image', 'doi'). |
'INNER JOIN del_image di '. |
'ON doi.id_image = di.id_image '. |
381,16 → 393,28 |
'INNER JOIN del_observation dob '. |
'ON doi.id_observation = dob.id_observation '. |
'INNER JOIN del_utilisateur du '. |
'ON du.id_utilisateur = di.ce_utilisateur'; |
'ON du.id_utilisateur = di.ce_utilisateur '. |
($this->doitJoindreTableVotes() ? |
'LEFT JOIN del_image_vote dvote '. |
'ON doi.id_image = dvote.ce_image AND dvote.ce_protocole = '.$this->parametres['protocole'] : |
'' |
); |
$requeteLiaisons .= $this->chargerClauseWhere(); |
$requeteLiaisons .= $this->getTri(); |
$requeteLiaisons .= $this->gestionBdd->getLimitSql(); |
|
return $this->bdd->recupererTous($requeteLiaisons); |
} |
|
private function doitJoindreTableVotes() { |
return ($this->tri == 'votes'); |
} |
|
private function getTri() { |
$order = ''; |
if($this->tri != 'vote') { |
if($this->doitJoindreTableVotes()) { |
$order = ' GROUP BY dvote.ce_image, dob.id_observation ORDER BY total_votes '.$this->directionTri.', date_transmission desc '; |
} else { |
$order = ' ORDER BY '.$this->tri.' '.$this->directionTri.' '; |
} |
return $order; |