On peut maintenant personaliser cette fonction pour chaque type d'objet avec une fonction quete_logo_{type}_dist() ou quete_logo_{type}
Ces fonctions personalisees ont la meme signature que la fonction generique quete_logo.
Elles peuvent permettre d'introduire une logique metier propre a chaque site sans modifier les squelettes.
Ex : aller chercher l'image jointe avec telle propriete si disponible, sinon le logo d'origine
La perenite de cela s'arretera probablement a la refonte de la gestion des logos, mais ca peut servir d'ici la
- encoding (utf8)
- eof_ending (saut le ligne en fin de fichier)
- elseif (pas else if)
- function_call_space (espaces sur fonctions)
- function_declaration (pareil)
- function_typehint_space (pareil)
- ajouter une class spip_logo_(left|right|center|top|bottom) correspondant au parametre d'alignement demande dans la balise #LOGO{}
- quand align est left ou right, ne pas utiliser l'attribut align deprecie mais un style float inline a la place
- enrichir le retour de quete_logo pour un usage plus simple
+ PHPDoc
Je profite de cette écriture massive pour normaliser quelque chose de trompeur lorsqu'on compare deux versions, savoir l'usage de " ou ' dans le premier argument de define et defined. Comme les chaînes entre apostrophes sont plus rapidement analysées que celles entre guillemets, je choisis l'apostrophe.
Dépot obtenu avec le script Shell:
{{{
a=$(find . -name "*.php" |grep -v extensions/ | grep -v /config/ | grep -v index.php | grep -v public.php | grep -v prive.php )
echo -n "Fichiers: "
echo $a|wc -w
for i in $a
do
sed -f ~/Sites/spip/spip.sed $i > /tmp/f.php
if diff -q $i /tmp/f.php
then
:
else
diff $i /tmp/f.php
# echo $i; php /tmp/f.php
# mv /tmp/f.php $i
fi
done
}}}
et le script Sed:
{{{
s/Copyright (c) 2001-20../Copyright (c) 2001-2011/
s,\(if [(]!*\)*\(defined* *[(]\)"\([^"]*\)"\(.*\);[[:space:]]*[#/]*.*$,\1\2'\3'\4;,
}}}
On ajoute un parametre optionnel a la balise qui peut avoir 4 valeurs possibles :
#LOGO_DOCUMENT{icone} renverra toujours l'icone du type de document
#LOGO_DOCUMENT{apercu} renverra l'apercu d'une image ou l'icone (mais pas la vignette telechargee si il y en a une)
#LOGO_DOCUMENT{vignette} renverra la vignette telechargee si il y en a une, ou rien
#LOGO_DOCUMENT{auto} correspond au fonctionnement par defaut, sans l'argument.
Cet argument peut avoir n'importe quelle place dans la liste des arguments
Jeu de test :
<BOUCLE_doc(DOCUMENTS){id_article}{doublons}>
<h1>DOCUMENT #ID_DOCUMENT</h1>
LOGO_DOCUMENT|URL_ARTICLE
[(#LOGO_DOCUMENT|#URL_ARTICLE)]
<br>
LOGO_DOCUMENT|right
[(#LOGO_DOCUMENT|right)]
<br>
LOGO_DOCUMENT|fichier
[(#LOGO_DOCUMENT|fichier)]
<br>
LOGO_DOCUMENT|lien
[(#LOGO_DOCUMENT|lien)]
<br>
LOGO_DOCUMENT|fichier|strtoupper
[(#LOGO_DOCUMENT|fichier|strtoupper)]
<br>
LOGO_DOCUMENT{icone}
[(#LOGO_DOCUMENT{icone})]
<br>
LOGO_DOCUMENT{vignette}
[(#LOGO_DOCUMENT{vignette}|sinon{'pas de vignette'})]
<br>
LOGO_DOCUMENT{apercu}
[(#LOGO_DOCUMENT{apercu})]
<br>
LOGO_DOCUMENT{auto}
[(#LOGO_DOCUMENT{auto})]
<br>
LOGO_DOCUMENT||image_sepia
[(#LOGO_DOCUMENT||image_sepia)]
<br><br><br><br>
LOGO_DOCUMENT{16,50}|URL_ARTICLE
[(#LOGO_DOCUMENT{16,50}|#URL_ARTICLE)]
<br>
LOGO_DOCUMENT{16,50}|right
[(#LOGO_DOCUMENT{16,50}|right)]
<br>
LOGO_DOCUMENT{16,50}|fichier
[(#LOGO_DOCUMENT{16,50}|fichier)]
<br>
LOGO_DOCUMENT{16,50}|lien
[(#LOGO_DOCUMENT{16,50}|lien)]
<br>
LOGO_DOCUMENT{16,50}|fichier|strtoupper
[(#LOGO_DOCUMENT{16,50}|fichier|strtoupper)]
<br>
LOGO_DOCUMENT{16,50}||image_sepia
[(#LOGO_DOCUMENT{16,50}||image_sepia)]
<br>
LOGO_DOCUMENT{icone,16,50}
[(#LOGO_DOCUMENT{icone,16,50})]
<br>
LOGO_DOCUMENT{vignette,16,50}
[(#LOGO_DOCUMENT{vignette,16,50}|sinon{'pas de vignette'})]
<br>
LOGO_DOCUMENT{apercu,16,50}
[(#LOGO_DOCUMENT{apercu,16,50})]
<br>
LOGO_DOCUMENT{auto,16,50}
[(#LOGO_DOCUMENT{auto,16,50})]
<br>
LOGO_DOCUMENT{apercu,16,50,right}
[(#LOGO_DOCUMENT{apercu,16,50,right})]
<br>
</BOUCLE_doc>
Les anciennes écritures restent comprises mais doivent être considérées comme obsolètes. Une écriture théoriquement possible mais vraisemblablement pas utilisée est néanmoins totalement exclue à présent (savoir {{{#LOGO_ARTICLE|f}}} où {{{f}}} ne contiendrait pas le caractère # mais donnerait on ne sais comment une URL).
Test (en plus de squelette-dist, remis d'équerre):
<BOUCLE_doc(DOCUMENTS){id_article}>
[(#LOGO_DOCUMENT{43,left,66})]
LOGO_DOCUMENT{# URL_ARTICLE,77,bottom,67}
[(#LOGO_DOCUMENT{#URL_ARTICLE,,bottom,77,67})]
<br>
LOGO_DOCUMENT**
[(#LOGO_DOCUMENT**)]
<br>
LOGO_DOCUMENT|lien
[(#LOGO_DOCUMENT|lien)]
<br>
LOGO_DOCUMENT*
[(#LOGO_DOCUMENT*)]
<br>
LOGO_DOCUMENT{12,13}||trim{f}}
[(#LOGO_DOCUMENT{12,13}||trim{f})]
<br>
LOGO_DOCUMENT{left,bottom,right}
[(#LOGO_DOCUMENT{left,bottom,right})]
</BOUCLE_doc>
Tout ce qui est calculable à la compilation l'est effectivement, ce qui allège le code produit. Conséquence, les fonctions {{{affiche_logos, calcule_logo_document, calcule_logo}}} n'ont plus les mêmes signatures, on en profite pour les nommer plus rationnellement, voire les faire disparaître. La production du code HTML est enfin rejetée en dehors du compilateur proprement dit, la fonction {{{balise_LOGO__dist}}} d'une part, et dans {{{inc/documents}}}. Ce n'est pas encore facilement surchargeable, mais on s'en approche.
Test (sur un article avec logo):
{{{
<BOUCLE_doc(DOCUMENTS){id_article}{doublons}>
<h1>DOCUMENT #ID_DOCUMENT</h1>
LOGO_DOCUMENT|URL_ARTICLE
[(#LOGO_DOCUMENT|#URL_ARTICLE)]
<br>
LOGO_DOCUMENT|right
[(#LOGO_DOCUMENT|right)]
<br>
LOGO_DOCUMENT|fichier
[(#LOGO_DOCUMENT|fichier)]
<br>
LOGO_DOCUMENT|lien
[(#LOGO_DOCUMENT|lien)]
<br>
LOGO_DOCUMENT|fichier|strtoupper
[(#LOGO_DOCUMENT|fichier|strtoupper)]
<br>
LOGO_DOCUMENT||image_sepia
[(#LOGO_DOCUMENT||image_sepia)]
<br><br><br><br>
LOGO_DOCUMENT{200,50}|URL_ARTICLE
[(#LOGO_DOCUMENT{200,50}|#URL_ARTICLE)]
<br>
LOGO_DOCUMENT{200,50}|right
[(#LOGO_DOCUMENT{200,50}|right)]
<br>
LOGO_DOCUMENT{200,50}|fichier
[(#LOGO_DOCUMENT{200,50}|fichier)]
<br>
LOGO_DOCUMENT{200,50}|lien
[(#LOGO_DOCUMENT{200,50}|lien)]
<br>
LOGO_DOCUMENT{200,50}|fichier|strtoupper
[(#LOGO_DOCUMENT{200,50}|fichier|strtoupper)]
<br>
LOGO_DOCUMENT{200,50}||image_sepia
[(#LOGO_DOCUMENT{200,50}||image_sepia)]
</BOUCLE_doc>
}}}
La fabrication des URL publiques des entités a toujours été modulable, mais pas dans un même processus, ce qui posait deux limitations:
- la production de ces URLs publiques à partir de l'espace privé oblige à passer par un script de redirection, couteux, obscur et peu extensible;
- dans le cas du multi-site, impossible d'avoir autant de nommages différents que de sites, les fonctions produisant les URLs portant le même nom dans tous les système de nommage.
Cette restriction est à présent levée, apparamment sans problème de compatibilité:
Les fonctions {{{generer_url_{article, auteur, breve, mot, rubique, site} }}} sont déclarées obsolètes et remplacées par:
{{{ function generer_url_entite($id='', $entite='', $args='', $ancre='', prive='', $type='') }}}
un appel comme {{{ generer_url_article(id, arg, ancre) }}} s'écrit à présent {{{{ generer_url_entite(id, 'article', arg, ancre) }}}. Cette transformation étant prise en charge par {{{vieilles_def.php}}}, tandis que le code de SPIP a déjà évacué ces appels.
Le 5e argument permet de forcer la production d'une URL de lecture alors qu'on est dans l'espace d'écriture et inversement. Le 6e argument permet de forcer l'utilisation d'un jeu d'URL différent de celui spécifié par la meta {{{type_urls}}}. Ces argument rend superflu la fonction {{{charger_generer_url}}} qui disparait complètement.
La fonction {{{generer_url_entite}}} ne fait que lire le fichier X ainsi spécifier puis passe la main soit aux fonctions {{{generer_url_ecrire_article}}} etc dans le cas des URLs en écriture, soit sinon à la fonction {{{urls_}}}X{{{_dist}}}. Celle-ci a un double rôle: si son deuxième argument est numérique (ou une chaîne interprétable ainsi) elle produit l'URL de l'entité SQL ainsi désignée, à sa manière (propre, arbo, html...); si son deuxième argument est une chaîne, c'est une URL à partir de laquelle la fonction retrouve la table SQL et le numéro de l'entité (comme auparavant).
Pour ceux qui ont des jeux de fonctions {{{generer_url_...}}} personnels, il est normalement pas nécessaire de le réécrire pour en disposer, mais c'est préférable pour qu'il puisse co-exister avec les autres au besoin.
A noter qu'on ne peut actuellement faire co-exister Propre et Arbo car elles déclarent le même pipeline ({{{creer_chaine_url}}}), il faudrait revoir ce code.
Je laisse en test un moment avant de basculer sur la branche 2, d'autant qu'il faudrait statuer sur le fichier {{{tourner}}} qui au bord du fork.
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.
Différences avec les versions précédentes:
* (bug de PCRE) les notes nommées {{{ [[<*> ...}}} ne peuvent plus contenir d'espaces entre les deux crochets et le chevron;
* les fonctions redéfinissables {{{avant_propre}}} et {{{apres_propre}}} sont évacuées, faisant double emploi avec les pipelines {{{pre_propre}}} et {{{post_propre}}}.
* surtout: le pipeline {{{pre_propre}}} recevra un texte où les raccourcis de liens ({{{ [->art1] }}} etc) seront déjà expansés.
Test:
{{{
Doc 2239 centré
<doc2239|center>
Je mets 2 fois un raccourci de glossaire
[?SPIP] [?SPIP]
puis un [raccourci->art1]
et un autre, automatique, [->art3634].
Suivre la note
[[elle est terminée par un [raccourci->art1]]].
Un moment de poésie.
<poesie>
un
haiku
sur
2 lignes
</poesie>
Elle préfère parler d'un {accroissement de la dispersionsalariale} [[
[{Perspectives économiques}->http://www.oecd.org/document/4/0,3343,fr_2649_201185_20347588_1_1_1_1,00.html]
- Vol. 2007-1, n¡~81, mai 2007, p. ~184. ]]
Elle aussi préfère parler d'un {accroissement de la dispersion salariale}
mais sur une seule ligne [[ [{Perspectives économiques}->http://www.oecd.org/document/4/0,3343,fr_2649_201185_20347588_1_1_1_1,00.html]
- Vol. 2007-1, n¡~81, mai 2007, p. ~184. ]].
Une Juliette [[<*> sans numéro.]].
}}}