- suppleer la balise #INSERT_HEAD si absente, lors de l'affichage final (moins rapide dans ce cas, desactivable par $GLOBALS['desactiver_insert_head_defaut']=true; pour les bricoleurs
- detecter une double #INSERT_HEAD lorsqu'on est admin (cela pouvant encore arriver si la balise est dans 2 squelettes differents :( )
Un vidage de cache est indispensable !!!
Lors de l'upgrade de la base, les metas liees au serveur ou au systeme de fichier sont positionnees a non (non importable)
Les autres sont a oui par defaut
Le mecanisme est generique est pourra etre applique a n'importe quelle table
"
1. accéler la recherche quand on les utilise
2. prévenir le compilateur que les couples de ces tables sont uniques.
et à présent:
3. empecher automatiquement les doublons lors d'une fusion entre une sauvegarde et la base courante.
recalculer à chaque fois. Du coup on supprime le champ id_auteur de cette table, car il ne peut plus servir à rien.
En fait cette table mémorise différentes requetes qui ne sont pas si nombreuses, on pourrait les coder dans un tableau PHP statique et id_ajax_fonc n'en serait plus que l'index, ça éviterait les appels à SQL.
Suite à quelques essais (pas toujours réussis il est vrai) et échanges divers, l'installation de Spip, notamment en mutualisé, repose à présent sur les symboles suivants:
- plusieurs constantes _DIR_* au début de inc_version définissent les répertoires où se trouvent les sources, considérées comme inaccessibles en écriture car partageable par plusieurs sites.
- ensuite, plusieurs constantes _NOM_* définissent le nom (relatif) des fichiers et répertoires propres et indispensables à chaque site utilisant Spip, savoir
define('_NOM_CONFIG', 'mes_options');
define('_NOM_TEMPORAIRES_INACCESSIBLES', "tmp/");
define('_NOM_TEMPORAIRES_ACCESSIBLES', "var/");
define('_NOM_PERMANENTS_INACCESSIBLES', "etc/");
define('_NOM_PERMANENTS_ACCESSIBLES', "IMG/");
var/ comportant les images réduites créé dynamiquement
tmp/ jouant le role d'ecrire/data et comportant egalement CACHE/
etc/ jouant le role de ecrire/ en tant que repertoire accessible en écriture.
- inc_version ne définit plus de fontions, mais charge immédiatement inc/utils qui à l'inverse ne fait que définir des fonctions.
- inc_version charge ensuite le fichier ecrire/mes_options.php (pour compatibilité) ou etc/mes_options (préférable aujourd'hui);
- enfin, il appelle la fonction d'initialisation ainsi:
@spip_initialisation(
(_DIR_RACINE . _NOM_PERMANENTS_INACCESSIBLES),
(_DIR_RACINE . _NOM_PERMANENTS_ACCESSIBLES),
(_DIR_RACINE . _NOM_TEMPORAIRES_INACCESSIBLES),
(_DIR_RACINE . _NOM_TEMPORAIRES_ACCESSIBLES)
);
ce qui va définir les 4 répertoires accessibles en écriture à la racine du site, et initialiser toutes les autres constantes (notamment _SPIP_CHMOD).
- toutefois l'inclusion de mes_options peut neutraliser cet appel soit partiellement (en définissant quelques unes des constantes normalement définies par spip_initialisation qui ne pourra plus agir dessus) soit totalement (en appelant lui-meme spip_initialisation avec d'autres arguments que ceux ci-dessus).
Une application typique est de mettre dans ecrire/mes_options.php (ou etc/mes_otpions.php) les lignes suivantes:
define('_SPIP_CHMOD', 0770);
if ( preg_match(',/([a-zA-Z0-9_-]*)[/?],',$_SERVER['REQUEST_URI'],$r)) {
if (is_dir($e = _DIR_RACINE . 'Ajouts/' . $r[1]. '/')) {
$cookie_prefix = $table_prefix = $r[1];
define('_SPIP_PATH',
_DIR_RACINE . 'Ajouts/' . $table_prefix . '/:' .
_DIR_RACINE.':'.
_DIR_RACINE .'dist/:' .
_DIR_RESTREINT);
spip_initialisation(
($e . _NOM_PERMANENTS_INACCESSIBLES),
($e . _NOM_PERMANENTS_ACCESSIBLES),
($e . _NOM_TEMPORAIRES_INACCESSIBLES),
($e . _NOM_TEMPORAIRES_ACCESSIBLES)
);
if (is_readable($e .= _NOM_CONFIG . '.php')) include($e);
}
}
La première ligne réduit l'accès aux répertoires et fichiers créés par le serveur http à ce seul serveur.
A partir de l'URL du script appelé, les lignes suivantes déduisent un nom qui doit etre le nom d'un sous-répertoire Ajouts dans l'installation de Spip. L'exécution de ce script commence donc par déclarer les 4 sous-répertoires spécifiques au site, ainsi que le préfixe de ses table SQL. Au cas où existerait un fichier etc/mes_options pour ce site spécifique, celui est également chargé.
L'utilisation des constantes _NOM_* permet donc de disposer d'un ensemble de répertoires et fichiers qui n'ont meme pas à savoir s'ils utilisent une installation mutualisée ou non de Spip.
ATTENTION: il faut bien voir que les fonctions de inc/utils ne seront vraiment utilisables qu'après appel de spip_initialisation, car les constantes qu'elles utilisent (_DIR_TMP, _DIR_IMG etc) ne sont pas encore définies à l'entrée de mes_options (c'est justement ce qui permet de les personnaliser).
Ce qui marche mieux pour le surcharger dans mes_options.php, et c'est inc_version.php qui lui donne une valeur par défaut, le cas échéant. Ce fichier est crée pour une nouvelle installation. Sur une mise à jour, il ne se passe rien, on fait du 777 comme avant.
config/ abrite donc potentiellement deux fichiers, ça prend son sens maintenant :)... et on pourrait imaginer que ldap soit indépendant de la même manière... mais rien ne presse...
ça règle un soucis de création du cache en fichier plat aussi (cf. #635)
_DIR_CHMOD, s'appelle maintenant _SPIP_CHMOD et est calculée à l'installation de spip. On colle la constante dans le fichier de connection.
On ajoute le répertoire tmp_img/ qui servira de base aux données volatiles mais devant être accessible via http. C'est là qu'on calculera tous les images réduites, (à tester)
On en profite pour faire une très légère toilette au page d'installation. C'est pas encore fantastik ;)
TODO: la vérification des sous-répertoires de tmp/ en écriture, voire, leur création à la volée
exemples :
[texte|en->http://voyez-moi-ca.com/] donne un hreflang='en' (syntaxe du plugin hreflang)
[texte|infobulle{en}->lien] donne un hreflang='en' et un title='infobulle' (syntaxe de la barre typo compliquee)
du coup je degage le pipeline traiter_lien
- le php est echappe sous une forme sympa avec highlight_string (y compris dans les forums)
- le javascript est echappe differemment selon un reglage global (parano = partout, ok = nulle part, par defaut = affiche en rouge dans l'espace prive)
- dans les forums, le jvascript est toujours echappe/affiche