Skip to content
Extraits de code Groupes Projets
Valider 0a2400b4 rédigé par cerdic's avatar cerdic
Parcourir les fichiers

permettre aux plugins de gerer eux memes des jointures ou des criteres tordus...

permettre aux plugins de gerer eux memes des jointures ou des criteres tordus pas automatisables par extension de la syntaxe de :
$GLOBALS['exceptions_des_tables']['forms_donnees']['id_mot']=array('spip_forms_donnees_champs', 'valeur', 'forms_index_exception');
-> un troisieme argument optionnel comme nom de fonction qui fait le boulot de index_exception()
$GLOBALS['exceptions_des_jointures']['forms_donnees']['id_mot'] = array('spip_forms_donnees_champs', 'valeur', 'forms_calculer_critere_externe');
-> une dimension intermediaire pour specifier une jointure sur une table uniquement, et un troisieme argument optionnel comme nom de fonction qui fait le boulot a la place de calculer_critere_externe_init()
parent 54a4e651
Branches
Étiquettes
Aucune requête de fusion associée trouvée
......@@ -672,13 +672,21 @@ function calculer_critere_infixe($idb, &$boucles, $crit) {
$val[0] = str_replace('image', 'vignette', $val[0]);
else {
$nom = $table_des_tables[$type];
list($nom, $desc) = trouver_def_table($nom ? $nom : $type, $boucle);
if (@!array_key_exists($col, $desc['field'])) {
if (isset($exceptions_des_jointures[$col]))
// on ignore la table, quel luxe!
list($t, $col) = $exceptions_des_jointures[$col];
$table = calculer_critere_externe_init($boucle, $boucle->jointures, $col, $desc, ($crit->cond OR $op !='='), $t);
$nom = $table_des_tables[$type];
list($nom, $desc) = trouver_def_table($nom ? $nom : $type, $boucle);
if (@!array_key_exists($col, $desc['field'])) {
$calculer_critere_externe = 'calculer_critere_externe_init';
// gestion par les plugins des jointures tordues pas automatiques mais necessaires
if (isset($exceptions_des_jointures[$table][$col])){
if (count($exceptions_des_jointures[$table][$col])==3)
list($t, $col, $calculer_critere_externe) = $exceptions_des_jointures[$table][$col];
else
list($t, $col) = $exceptions_des_jointures[$table][$col];
}
else if (isset($exceptions_des_jointures[$col]))
// on ignore la table, quel luxe!
list($t, $col) = $exceptions_des_jointures[$col];
$table = $calculer_critere_externe($boucle, $boucle->jointures, $col, $desc, ($crit->cond OR $op !='='), $t);
}
}
// ajout pour le cas special d'une condition sur le champ statut:
......
......@@ -154,18 +154,26 @@ function index_exception(&$boucle, $desc, $nom_champ, $excep)
global $tables_des_serveurs_sql;
if (is_array($excep)) {
list($e, $x) = $excep; #PHP4 affecte de gauche a droite
$excep = $x; #PHP5 de droite a gauche !
if (!$t = array_search($e, $boucle->from)) {
$t = 'J' . count($boucle->from);
$boucle->from[$t] = $e;
$j = $tables_des_serveurs_sql[$desc['serveur']][$e];
# essayer ca un jour: list($nom, $j) = trouver_def_table($e, $boucle);
$j = $j['key']['PRIMARY KEY'];
$boucle->where[]= array("'='", "'$boucle->id_table." . "$j'", "'$t.$j'");
}
} else $t = $desc['type'];
// permettre aux plugins de gerer eux meme des jointures derogatoire ingérables
$t = NULL;
if (count($excep)==3){
$index_exception_derogatoire = array_pop($excep);
$t = $index_exception_derogatoire($boucle, $desc, $nom_champ, $excep);
}
if ($t == NULL) {
list($e, $x) = $excep; #PHP4 affecte de gauche a droite
$excep = $x; #PHP5 de droite a gauche !
if (!$t = array_search($e, $boucle->from)) {
$t = 'J' . count($boucle->from);
$boucle->from[$t] = $e;
$j = $tables_des_serveurs_sql[$desc['serveur']][$e];
# essayer ca un jour: list($nom, $j) = trouver_def_table($e, $boucle);
$j = $j['key']['PRIMARY KEY'];
$boucle->where[]= array("'='", "'$boucle->id_table." . "$j'", "'$t.$j'");
}
}
}
else $t = $desc['type'];
// demander a SQL de gerer le synonyme
// ca permet que excep soit dynamique (Cedric, 2/3/06)
if ($excep != $nom_champ) $excep .= ' AS '. $nom_champ;
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter