82,7 → 82,7 |
// TODO: PHP-x.y, ces variables devrait être des "const" |
static $format_image_possible = array('O','CRX2S','CRS','CXS','CS','XS','S','M','L','XL','X2L','X3L'); |
|
static $tri_possible = array('date_transmission', 'date_observation', 'votes', 'tags'); |
static $tri_possible = array('date_transmission', 'date_observation', 'votes', 'tags', 'points'); |
|
// en plus de ceux dans DelTk |
static $parametres_autorises = array('protocole', 'masque.tag_cel', 'masque.tag_pictoflora', 'masque.milieu'); |
92,7 → 92,7 |
// spécifiques à PictoFlora: |
'format' => 'XL'); |
|
static $default_proto = 3; // proto par défaut: capitalisation d'img (utilisé uniquement pour tri=(tags|votes)) |
static $default_proto = 3; // proto par défaut: capitalisation d'img (utilisé uniquement pour tri=(tags|votes|points)) |
|
static $mappings = array( |
'observations' => array( // v_del_image |
214,6 → 214,16 |
$total = $db->recuperer('SELECT FOUND_ROWS() AS c'); $total = intval($total['c']); |
|
$liaisons = self::chargerImages($db, $idobs); |
|
// debug: infos de score |
/*$infosScore = array(); |
foreach ($idobs_tab as $iot) { |
$infosScore[$iot['id_image']] = array( |
'nb_votes' => $iot['nb_votes'], |
'nb_points' => $iot['nb_points'], |
'moyenne' => $iot['moyenne'] |
); |
}*/ |
/* |
// Q&D |
$images = array(); |
262,6 → 272,11 |
return; |
} |
|
if($p['tri'] == 'points') { // LEFT JOIN sur "dis" ci-dessous |
$req['orderby'] = 'dis.nb_points ' . $p['ordre'] . ', dis.moyenne ' . $p['ordre'] . ', dis.nb_votes ' . $p['ordre']; |
return; |
} |
|
if($p['tri'] == 'tags') { // LEFT JOIN sur "dis" ci-dessous |
$req['orderby'] = 'dis.nb_tags ' . $p['ordre']; |
return; |
274,7 → 289,7 |
|
// tri == 'date_transmission' |
// avant cel:r1860, date_transmission pouvait être NULL |
// or nous voulons de la consistence (notamment pour phpunit) |
// or nous voulons de la cohérence (notamment pour phpunit) |
$req['orderby'] = 'date_transmission ' . $p['ordre'] . ', id_observation ' . $p['ordre']; |
} |
|
318,7 → 333,7 |
3) non-problème: l'ordre des joins est forcé par l'usage de la vue: |
(cel_images/cel_obs_images/cel_obs/del_image_stat) |
Cependant c'est à l'optimiseur de définir son ordre préféré. */ |
if($p['tri'] == 'votes') { |
if($p['tri'] == 'votes' || $p['tri'] == 'points') { |
// $p['protocole'] *est* défini (cf requestFilterParams()) |
// petite optimisation: INNER JOIN si ordre DESC car les 0 à la fin |
if($p['ordre'] == 'desc') { |
458,6 → 473,7 |
static function getIdImages($p, $req, $db) { |
return $db->recupererTous(sprintf( |
'SELECT SQL_CALC_FOUND_ROWS id_image' . |
//', dis.moyenne, dis.nb_points, dis.nb_votes' . // debug |
' FROM v_del_image vdi'. |
' %s' . // LEFT JOIN if any |
' WHERE %s'. // where-clause ou TRUE |
483,11 → 499,12 |
' CONCAT(id_image, "-", id_observation) AS jsonindex,'. |
' %1$s, %2$s FROM v_del_image '. |
' WHERE %3$s'. |
' -- %4$s', |
' ORDER BY %4$s'. // important car MySQL ne conserve par l'ordre du IN() |
' -- %5$s', |
$obs_fields, $image_fields, |
sprintf('id_image IN (%s)', implode(',', $idImg)), |
sprintf('FIELD(id_image, %s)', implode(',', $idImg)), |
__FILE__ . ':' . __LINE__)); |
|
} |
|
/* "masque" ne fait jamais que faire une requête sur la plupart des champs, (presque) tous traités |
580,6 → 597,7 |
'binaire.href' => sprintf($url_pattern, $o['id_image'], $image_format), |
'mots_cles_texte' => @$o['i_mots_cles_texte'], // @, peut avoir été filtré par array_map() ci-dessus |
); |
|
unset($o['id_image'], $o['i_mots_cles_texte'], $o['jsonindex']); |
if(!isset($obs_merged[$id])) $obs_merged[$id] = $image; |
$obs_merged[$id]['observation'] = $o; |
611,7 → 629,7 |
$params['masque.tag_cel'] = $params['masque.tag_pictoflora'] = $params['masque.tag']; |
} |
|
if($p['tri'] == 'votes' || $p['tri'] == 'tags') { |
if($p['tri'] == 'votes' || $p['tri'] == 'tags' || $p['tri'] == 'points') { |
// ces critère de tri des image à privilégier ne s'applique qu'à un protocole donné |
if(!isset($params['protocole']) || !is_numeric($params['protocole'])) |
$p['protocole'] = self::$default_proto; |
644,6 → 662,7 |
} |
|
static function revOrderBy($orderby) { |
// @TODO plutôt 'desc' ? '' : 'desc', non ? |
return $orderby == 'asc' ? 'desc' : 'asc'; |
} |
} |