126,17 → 126,19 |
// en cas d'accès HTTP |
if(array_key_exists('QUERY_STRING', $_SERVER)) { |
self::requestParse($uri, $params); |
} |
// en cas d'accès phpunit |
else { |
} else {// en cas d'accès phpunit |
$uri = $ressources; |
} |
|
// renvoie du plain/text d'aide (cf fin de programme) |
if(count($uri) == 1 && $uri[0] == 'aide') return self::aide(); |
if (count($uri) == 1 && $uri[0] == 'aide') { |
return self::aide(); |
} |
|
|
if(is_null($parametres)) $parametres = Array(); |
if (is_null($parametres)) { |
$parametres = Array(); |
} |
$params = self::requestFilterParams($parametres); |
// les contraintes liées aux ids (passés comme composants d'URL) |
// sont ajoutées aux params [sans être accepté comme paramètre d'URL] |
168,7 → 170,9 |
$clef_index = $params['retour.indexBy'] == 'coste' ? 'coste:nn' : 'bdtfx:nn'; |
$res2 = array(); |
foreach($res as $v) { |
if(!$v[$clef_index]) throw new Exception('format error: index NULL, use retour.indexBy=coste', 409); |
if (!$v[$clef_index]) { |
throw new Exception('format error: index NULL, use retour.indexBy=coste', 409); |
} |
$res2[$v[$clef_index]] = $v; |
} |
|
175,7 → 179,8 |
// l'appelant s'occupera du json_encode() |
// même si ça démange d'exit'er ici |
header("Content-Type: application/json; charset=utf-8"); |
return array('entete' => array('depart' => $params['navigation.depart'], |
return array('entete' => array( |
'depart' => $params['navigation.depart'], |
'limite' => $params['navigation.limite'], |
'total' => count($res2), |
'match' => $matches), |
197,18 → 202,17 |
|
// joins: |
$other_join = self::sqlAddJoins($params, $champs_valides_non_formattes); |
$req = sprintf(<<<EOF |
SELECT SQL_CALC_FOUND_ROWS %s |
FROM tb_eflore.coste_v2_00 c |
LEFT JOIN tela_prod_wikini.florecoste_pages dsc ON c.page_wiki_dsc = dsc.tag AND dsc.latest = 'Y' |
LEFT JOIN tela_prod_wikini.florecoste_pages cle ON c.page_wiki_cle = cle.tag AND cle.latest = 'Y' |
%s |
WHERE %s ORDER BY c.num_nom LIMIT %u, %u -- %s |
EOF |
, |
$requete_tpl = "SELECT SQL_CALC_FOUND_ROWS %s". |
"FROM tb_eflore.coste_v2_00 c ". |
" LEFT JOIN tela_prod_wikini.florecoste_pages dsc ON c.page_wiki_dsc = dsc.tag AND dsc.latest = 'Y' ". |
" LEFT JOIN tela_prod_wikini.florecoste_pages cle ON c.page_wiki_cle = cle.tag AND cle.latest = 'Y' ". |
" %s ". |
"WHERE %s ORDER BY c.num_nom LIMIT %u, %u -- %s "; |
$req = sprintf($requete_tpl, |
$champs_valides, // dans le SELECT (parmi champs coste_v2_00) |
// autre join, si nécessaire |
$other_join ? $other_join : '', |
|
// where |
$constraints ? implode(' AND ', $constraints) : '1', |
|
220,9 → 224,6 |
return $req; |
} |
|
|
|
|
// SQL helpers |
// le préfix de coste_v2_00 est "c" |
// le préfix de florecoste_pages sur la description est est "dsc" |
230,15 → 231,16 |
static function sqlAddConstraint($params, $db) { |
$stack = array(); |
if(!empty($params['masque.ns'])) { |
if($params['recherche'] == 'etendue') |
if ($params['recherche'] == 'etendue') { |
$stack[] = 'c.nom_sci LIKE ' . $db->proteger('%' . trim($params['masque.ns']) . '%'); |
elseif($params['recherche'] == 'floue') |
} elseif($params['recherche'] == 'floue') { |
$stack[] = sprintf(self::$soundex_scheme, |
'c.nom_sci', |
$db->proteger('%' . trim($params['masque.ns']) . '%')); |
else |
} else { |
$stack[] = 'c.nom_sci = ' . $db->proteger(trim($params['masque.ns'])); |
} |
} |
|
// le masque sur texte est toujours un LIKE() "étendue", sauf si "floue" spécifié |
if(!empty($params['masque.txt'])) { |
290,7 → 292,9 |
$o_stack[] = sprintf("c.flore_bdtfx_nn IN (%s)", implode(',', $params['_ids']['bdtfx'])); |
} |
} |
if($o_stack) $stack[] = '(' . implode(' OR ', $o_stack) . ')'; |
if ($o_stack) { |
$stack[] = '(' . implode(' OR ', $o_stack) . ')'; |
} |
|
return $stack; |
} |
305,8 → 309,7 |
$c = self::addSQLToFieldSynonym(explode(',', $champs)); |
if(isset($c['*'])) { |
$t = array_diff_key(self::$allow_champs, array_flip(self::$special_champs)); |
} |
else { |
} else { |
// just loop below |
$t = $c; |
} |
394,27 → 397,32 |
// renvoie FALSE ou NULL si absent ou invalide |
$p['navigation.limite'] = filter_var(@$params['navigation.limite'], |
FILTER_VALIDATE_INT, |
array('options' => array('default' => NULL, |
array('options' => array( |
'default' => NULL, |
'min_range' => 1, |
'max_range' => _COSTE_TEXTE_MAX_RESULT_LIMIT))); |
$p['navigation.depart'] = filter_var(@$params['navigation.depart'], |
FILTER_VALIDATE_INT, |
array('options' => array('default' => NULL, |
array('options' => array( |
'default' => NULL, |
'min_range' => 0, |
'max_range' => _COSTE_TEXTE_MAX_COSTE_NN))); |
$p['masque.page'] = filter_var(@$params['masque.page'], |
FILTER_VALIDATE_INT, |
array('options' => array('default' => NULL, |
array('options' => array( |
'default' => NULL, |
'min_range' => 0, |
'max_range' => _COSTE_TEXTE_MAX_COSTE_PAGE))); |
$p['masque.tome'] = filter_var(@$params['masque.tome'], |
FILTER_VALIDATE_INT, |
array('options' => array('default' => NULL, |
array('options' => array( |
'default' => NULL, |
'min_range' => 0, |
'max_range' => _COSTE_TEXTE_MAX_COSTE_TOME))); |
$p['masque.nt'] = filter_var(@$params['masque.nt'], |
FILTER_VALIDATE_INT, |
array('options' => array('default' => NULL, |
array('options' => array( |
'default' => NULL, |
'min_range' => 0, |
'max_range' => _COSTE_TEXTE_MAX_BDTFX_NT))); |
|