Hello all
Bon je viens de passer quelques heures sur un bug méchant entre ces 3 protagonistes...
Dans une boucle documents classique :
<BOUCLE_docs(DOCUMENT){id_article}>
<h1 class="#EDIT{titre}">#TITRE</h1>
</BOUCLE_doc>
Le problème :
en administrateur restreint sur un de ses articles, spip retourne l'erreur :
pip_documents_donnees WHERE id_document=3974
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM `devemotionps`.spip_documents_donnees WHERE id_document=3974' at line 1
qui est due à la balise #EDIT{titre}
La raison pour cela vient de la méthode d'autorisation ligne 226 de inc/autoriser :
function autoriser_document_modifier_dist($faire, $type, $id, $qui, $opt){
Pour faire bref :
- ligne 243 : $id_table = id_table_objet($type);
est incapable de trouver la table spip_documents_donnee car il cherche en somme spip_documents_forms_donnee (un problème qui vient du nom de la table très certainement)
Donc en gros j'ai modifiée la fonction ainsi que j'ai placée dans mes_fonctions.php :
function autoriser_document_modifier($faire, $type, $id, $qui, $opt){
static $m = array();
if ($qui['statut'] == '0minirezo'
AND !$qui['restreint'])
return true;
if (!isset($m[$id])) {
$interdit = false;
$vu = true;
include_spip('public/interfaces');
$jointures = array_diff(
$GLOBALS['tables_jointures']['spip_documents'],
array('types_documents', 'mots')
);
foreach($jointures as $j) {
$type = preg_replace(',s?_?documents?_?|s$,', '', $j);
if($type == 'donnee'){
$type = 'forms_donnee';
}
$id_table = id_table_objet($type);
spip_log('$j = '.$j.' $type = '.$type.' $id_table = '.$id_table, 'autoriser');
$s = sql_select("$id_table", "spip_$j", "id_document=".sql_quote($id));
while ($t = sql_fetch($s)) {
spip_log($t);
if (autoriser('modifier', $type, $t[$id_table], $qui, $opt)) {
$vu = true;
}
else {
$interdit = true;
break 2;
}
}
}
$m[$id] = ($vu && !$interdit);
}
return $m[$id];
}
Cela résoud le problème cité ci dessus par contre je ne sais pas si les documents associés marchent avec Forms&tables
++
Q.