ce qui la rend extensible et utilisable par les plugins pour tout type d'objet
l'upgrade devrait se faire a partir de la table spip_documents_liens precedente ou des anciennes tables spip_documents_xxx selon le point de depart
il est maintenant possible de personaliser le rendu des objets par rubrique,
le formulaire de saisie des objets par rubrique
et donc les groupes de mots cles utilises par rubrique,
a l'aide de la fonction
autoriser_xxx_editermots($faire,$quoi,$id,$qui,$opts)
$opts recoit l'id_groupe du groupe de mot concerne, et les champs connus de ce groupe au moment de l'appel
par defaut la fonction ne fait que verifier la coherence du statut de l'auteur avec les droits necessaire pour ce groupe
{{{
<?php error_reporting(E_ALL); $x = "2345"; echo $x'id_document'] ?>
}}}
ne déclenche aucun avertissement et affiche tranquilement "2".
Une bardée d'indéfinis en moins, qui étaient sans grandes conséquences.
permettre a un plugin qui veut realiser une action
normalement interdite a l'utilisateur connecte
d'accorder temporairement (sur le hit ou meme moins)
une exception sans pour autant surcharger la fonction.
Utile par exemple pour creer un article et le publier avec l'api articles_set
sans pour autant bypasser les autorisations dans l'espace prive
Une exception se delivre avec la syntaxe
autoriser_exception('publierdans','rubrique',3);
et peut s'annuler aussitot l'action faite avec
autoriser_exception('publierdans','rubrique',3,false);
"
Le changement de stratégie sur la protection des documents rebondit encore.
Si un modèle a besoin d'incruster un document dont il ne connait que l'URL, le site exécutant la fonction copie_locale va échouer sur son propre appel car un serveur n'est pas son propre client. On repère donc la situation suffisamment en amont pour pouvoir faire sauter la auto-protection.
Par ailleurs, le filtre d'incrustation d'un CSV admet aussi la tabulation comme séparateur de colonne, et le {{{^M}}} comme unique séparateur de ligne (j'espère que le nombre de tableurs qui réinventent le RFC de CSV est strictement inférieur à mon nombre de collègues, je commence à en douter).
Précision sur [11111]: le raccourci pour Caption est {{{||}}} qu'il faut écrire entre triple accolade sur le Wiki de Trac.
Mais [10998] pose un autre problème: le code compilé des balises #URL_* sur base externe ne permet plus d'accéder à un document du site distant puisque ce script refuse à présent toute demande non émise par son espace privé.
Du coup, on introduit _DIR_IMG comme nouvelle meta, permettant de demander à un site distant le répertoire de ses documents. Le code compilé des balises #URL_* l'utilise pour produire la bonne URL. Evidemment si un .htaccess est présent, cette URL conduira à un 403.
A moyen terme, cette meta devrait permettre de résoudre le problème de l'accès aux vignettes et logos du site distant.
En prévision des portages utilisant cette réprésentation, l'interface s'enrichit de la fonction {{{sql_quote}}}, qui s'ajoute à celles définies dans [10707] [10667], [10433], [10131], [10146], [10154] et [10113]
{{{
quote => fonction d'abstraction de la citation d'une constante SQL
}}}
Pour MySQL et PG, cette fonction est donc équivalente à {{{_q()}}} qui reste disponible, mais doit être considérée comme obsolète. Le présent dépôt a été obtenu par le script ci-dessous, dont on peut faire usage pour ses extensions personnelles:
{{{
for i in $(grep -l '_q(' [bigpeau]*/*p)
do
sed 's/_q(/sql_quote(/g' $i > x
mv x $i
done
}}}
Un ajustement manuel a été nécessaire pour le critère "=", le compilateur testant si le code qu'il a produit contient la fonction de citation.
La Regexp précédent était trop restrictive dans sa manière d'exclure les requêtes avec GROUP BY, ORDER BY et LIMIT.
Dépot obtenu par:
{{{
for i in $(grep -l 'spip_query..SELECT.*FROM.*WHERE[^YT]*;' [a-i]*/*php)
do
# Pour la clause DISTINCT, laisser intact pour le moment.
sed 's/spip_query..SELECT *\([^D]*[^ ]\) *FROM *\(.*[^ ]\) *WHERE *\([^YT]*;\)$/sql_select("\1", "\2", "\3/;s/ "" *\.//;s/ch(sql_select\(.*\));/sel\1;/' $i > x
echo $i
mv x $i
done
}}}
et une suppressions manuelle de lourdeurs syntaxiques résultantes, et ajout d'une Include.
Pas d'intervention sur le fichier inc/meta: au test, include manquant. À controler.
Dépot obtenu par:
{{{
for i in $(grep -l 'spip_query..SELECT.*FROM.*WHERE[^A-Z]*;$' [a-i]*/*php)
do
# Pour la clause DISTINCT, laisser intact pour le moment.
sed 's/spip_query..SELECT *\([^D]*[^ ]\) *FROM *\(.*[^ ]\) *WHERE *\([^A-Z]*;\)$/sql_select("\1", "\2", "\3/;s/ "" *\.//;s/ch(sql_select\(.*\));/sel\1;/' $i > x
echo $i
mv x $i
done
#}}}
et deux suppressions manuelles de lourdeurs syntaxiques résultantes.
Pas d'intervention sur le fichier inc/meta: au test, include manquant. À controler.
- factorisation de code
- introduction d'un pipeline pour le calcul du texte
- gestion des caracteres non latins (arabe etc)
- possibilite de chiper une vieille URL d'article pour l'affecter a un autre article (ou a une rubrique, pourquoi pas)
- fonction d'autorisation specifique
- retour aux urls sans ',id' quand c'est possible
- debugs divers et varies
En conséquence, l'annonce de [9852] est modifiée: '''spip_fetch_array''' est remplacée par '''sql_fetch'''. Rien de modifié en revanche en ce qui concerne le fait que spip_fetch_array avec un deuxième argument égal à SPIP_NUM n'a pas d'équivalent et doit être réécrit si on éviter le recours à vieilles_def.php.
Dépot obtenu par le script suivant:
{{{
grep -v '// http://doc.spip.org/@spip_abstract_' base/abstract_sql.php > b
mv b base/abstract_sql.php
for i in $(grep -l "spip_abstract_" */*p|grep -v vieilles_def)
do
sed "s/spip_abstract_/sql_/g" $i > x; mv x $i
done
}}}
et intervention manuelle sur vieilles_def.php.
Ce dépot résulte donc du retrait des deux définitions de '''spip_fetch_array''' présentes dans source:spip/ecrire/base/db_mysql.php et source:spip/ecrire/base/db_pg.php (qui peuvent donc être chargés simultanément à présent si nécessaire) et de l'application du script suivant dans le répertoire '''ecrire''':
{{{
for i in $(grep -l spip_fetch_array */*p|grep -v vieilles_def)
do
sed s/spip_fetch_array/spip_abstract_fetch/g $i > x
mv x $i
done
}}}
Pour y remédier, la statique est reportée dans la fonction liste_rubriques_auteur qui admet un 2e argument optionnel forçant son recalcul pour cet auteur.
Aussi dans ce dépot: allègement du code des puces, par evacuation de acces_restreint_rubrique.
* la configuration initiale met presque toutes les fonctionnalites a 'non', notamment les documents, les breves et les sites, mais aussi le surtitre, le sous-titre etc
* l'upload ftp ne se justifie que pour les documents : je le retire des logos et des images (code pas tout a fait mort, en cas de regret)
* on peut avoir aucun logo, ou seulement un logo, ou le logo+survol (#940)
* on peut desormais desactiver le texte des articles (suite de #809, [8860])
Ce dépot installe une réécriture du noyau rationalisant la gestion des statuts, dans la mesure où la compatibilité avec les versions précédentes le permet. Le principe est que Spip connait les noms des statuts fondamentaux Admin (0minirezo) et Rédacteur (1comite), et des statuts transitoires Nouveau et Poubelle, et assimile toute autre valeur dans le champ statut comme étant un statut de visiteur (donc de droits minimums). La création de nouveaux auteurs accepte des statuts de libellé nouveaux, pour autant que SQL le permette (le test est que $statut == addslashes($statut)). En particulier, on peut utiliser des variantes du squelette formulaires/login_forum dans lequel le paramètre "mode" du script "inscription" a une valeur autre que "6forum", par exemple le numéro du forum si l'on souhaite structurer les groupes de visiteurs sur la base des forums qui les ont attiré sur le site.
Une fois qu'un statut a été introduit dans la table des auteurs, il est proposé dans le menu des statuts affectable à un auteur. Le mode de tri par statut est à présent actif sur la page des visiteurs pour tenir compte de cette nouvelle situation. Toutefois les icones seront les memes (à améliorer).
Les occurrences de "6forum" ont donc été évacuées du code de SPIP, hormis les cas nécessaires à la compatibilité (cette fonctionnalité n'amène aucun dysfonctionnement pour les sites qui ne l'utiliseront pas). Incidemment, le paramètre "statut" du script "auteurs" admet en argument non plus seulement un statut mais éventuellement une liste de statuts séparés par des virgules, et admet un "!" au début pour signifier une négation.
En outre, il existe à présent une fonction "avoir_visiteurs" regroupant tous les cas où cette information est nécessaire, ce qui auparavant était réalisé de manière pas toujours cohérente voire fausse (il y aura de ce fait des réponses légèrement différentes d'auparavant sur des cas limites).
c'est donc maintenant autoriser_$type_$faire, qui peut donc etre definie dans
autoriser/type/faire.php
Si autoriser_$type_$faire n'existe pas, on cherche autoriser_$type, puis autoriser_$faire, puis autoriser_defaut