
Recherche avancée
Autres articles (97)
-
Personnaliser en ajoutant son logo, sa bannière ou son image de fond
5 septembre 2013, parCertains thèmes prennent en compte trois éléments de personnalisation : l’ajout d’un logo ; l’ajout d’une bannière l’ajout d’une image de fond ;
-
Ecrire une actualité
21 juin 2013, parPrésentez les changements dans votre MédiaSPIP ou les actualités de vos projets sur votre MédiaSPIP grâce à la rubrique actualités.
Dans le thème par défaut spipeo de MédiaSPIP, les actualités sont affichées en bas de la page principale sous les éditoriaux.
Vous pouvez personnaliser le formulaire de création d’une actualité.
Formulaire de création d’une actualité Dans le cas d’un document de type actualité, les champs proposés par défaut sont : Date de publication ( personnaliser la date de publication ) (...) -
Publier sur MédiaSpip
13 juin 2013Puis-je poster des contenus à partir d’une tablette Ipad ?
Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir
Sur d’autres sites (5585)
-
Evolution #4102 : Ordre des inclures dans cache/charger_plugins_options.php
26 février 2018, par RastaPopoulos ♥TL ;DR : problème résolu, c’est le plugin Albums qui ne fait pas bien les choses + mais un pipeline à l’initialisation est forcément utile et j’en ai déjà eu besoin.
@azerttyu Mais non, on ne doit surtout pas changer l’ordre des fichiers, il y a des milliers (et peut-être même des milliards :p) de cas dans la nature qui se basent tous sur le fait que l’ordre logique est le même que partout ailleurs, celui de l’ordre des pipelines et celui de l’ordre de toutes les surcharges de fichiers dans SPIP, càd l’ordre du PATH. D’une ce serait incohérent mais surtout c’est pas un nouveau truc ajouté, là on parle des options.php déjà utilisé partout, donc non on ne doit rien changer à l’ordre actuel.
Si ya un truc qui doit changer c’est sur un ajout, pas sur un truc méga utilisé partout.
Dans tous les cas, comme dit marcimat, faire de la config avec des define() c’est vraiment pas super, et encore plus définir des define() dans le options.php du plugin qui en a besoin ! Après le problème c’est quand le define() est justement utilisé directement dans ce options.php… Mais s’il ne l’est pas, le define() doit être défini dans le inc/truc, action/truc, etc, ce qui permet bien à d’autres de le définir en amont dans leur options.php.
D’ailleurs placido a donné des exemples précis, en parlant du plugin Album. Est-ce que celui-ci utilise ces deux define() dans le code de son options.php ? Si ce n’est pas le cas c’est lui qui doit être modifié pour définir ces variables ailleurs.
La réponse est là :
https://zone.spip.org/trac/spip-zone/browser/_plugins_/albums/trunk/albums_options.phpComme vous le voyez, AUCUNE de ces variables n’est utilisée à cette endroit là. Donc c’est le plugin Albums qui ne fait pas bien les choses. Il faut absolument déplacer l’ensemble de ces variables dans les fichiers où elles sont vraiment utilisés.
Et du coup c’est fini, problème résolu, c’est le plugin source qui était en problème, et une fois corrigé placido n’a plus de problème à définir ces valeurs avant.
Les cas où des define() sont définis ET utilisés directement dans le options.php sont méga méga rares, et je crois même qu’il n’y a que Bonux qui fait ça, pour la prévisu temporaire :
https://zone.spip.org/trac/spip-zone/browser/_plugins_/spip-bonux-3/spip_bonux_options.php#L25
(et ça m’avait bien saoulé pour le surcharger, j’avais fini par le définir dans les mes_options.php du projet alors que je ne l’utilise jamais et que je voulais le faire dans le plugin de mon projet)(Par ailleurs, dans tous les cas ce serait bien qu’il y ait un pipeline/trigger au tout début de SPIP, j’avais déjà eu le besoin pour faire des choses avant la connexion/cookie etc, pour connecter les gens par Facebook ou autre truc extérieur au tout démarrage, et pour le moment j’avais dû le faire dans mon action PHP à moi, au lieu de pouvoir le faire dans un truc générique qui aurait valu pour n’importe quel hit PHP, et du coup j’ai jamais pu en faire un plugin générique. Mais faudrait peut-être faire un ticket dédié pour demander cet ajout.)
-
Evolution #4427 (En cours) : Permettre (via une constante) de passer de 65 536 à 4096 le nombre ma...
24 janvier 2020, par - EquipementBonjour,
Concernant le cache de second niveau de SPIP, c’est-à-dire celui qui contient le résultat du calcul des squelettes :Jusqu’à la branche 3.0 de SPIP la taille maximum du cache était par défaut de 10 Mo.
A partir de la branche 3.1 de SPIP, le nombre maximal de fichier dans le cache est de 65 536 (et il n’y a plus de limite sur la taille du cache).
Sur un cas réel, le cache a atteint 2 Go (soit une moyenne de 31 Ko par fichier).
Certains hébergeurs ont un quota sur la taille, mais également sur le nombre d’inodes.
Dans un cas réel, des sites ont ainsi atteint le quota d’inodes, ce qui empêchait l’accès à l’espace privé des sites (cf. contrib.spip.net/Plugins-Giseh#comment502510).Remarque : L’expérience montre que le passage d’un robot, qui n’est pas identifié par SPIP, peut suffit à garnir le cache. Or la liste des robots détectés par SPIP ne sera jamais exhaustive. Par ailleurs, pour certains robots (aspirateurs de sites ou autre) il est possible de modifier leur user-agent.
Aussi, je propose que, via l’ajout d’une constante dans le fichier mes_options, il soit possible de fixer le nombre maximal de fichier dans le cache à 4096 (au lieu de 65 536). Cette approche, par constante optionnelle, évite d’impacter les sites qui veulent conserver la limite de 65 536 fichiers.
En pratique, il s’agit d’offrir la possibilité de mettre dans le fichier mes_options la constante suivante :
- <span class="CodeRay"><span class="predefined">define</span>(<span class="string"><span class="delimiter">'</span><span class="content">_CACHE_MAX_4096_FILES</span><span class="delimiter">'</span></span>,<span class="predefined-constant">true</span>) ;
- </span>
et de prendre en compte cette constante dans le fichier ecrire/public/cacher.php de la manière suivante :
- <span class="CodeRay"><span class="keyword">function</span> <span class="function">ecrire_cache</span>(<span class="local-variable">$nom_cache</span>, <span class="local-variable">$valeur</span>) {
- <span class="comment">// $d = substr($nom_cache, 0, 2);</span>
- <span class="comment">// $u = substr($nom_cache, 2, 2);</span>
- <span class="local-variable">$longueur_d</span> = <span class="integer">2</span>;
- <span class="keyword">if</span> (<span class="predefined">defined</span>(<span class="string"><span class="delimiter">'</span><span class="content">_CACHE_MAX_4096_FILES</span><span class="delimiter">'</span></span>) <span class="keyword">AND</span> _CACHE_MAX_4096_FILES){
- <span class="local-variable">$longueur_d</span> = <span class="integer">1</span>;
- }
- <span class="local-variable">$d</span> = <span class="predefined">substr</span>(<span class="local-variable">$nom_cache</span>, <span class="integer">0</span>, <span class="local-variable">$longueur_d</span>);
- <span class="local-variable">$u</span> = <span class="predefined">substr</span>(<span class="local-variable">$nom_cache</span>, <span class="local-variable">$longueur_d</span>, <span class="integer">2</span>);
- <span class="local-variable">$rep</span> = _DIR_CACHE;
- <span class="local-variable">$rep</span> = sous_repertoire(<span class="local-variable">$rep</span>, <span class="string"><span class="delimiter">'</span><span class="delimiter">'</span></span>, <span class="predefined-constant">false</span>, <span class="predefined-constant">true</span>);
- <span class="local-variable">$rep</span> = sous_repertoire(<span class="local-variable">$rep</span>, <span class="local-variable">$d</span>, <span class="predefined-constant">false</span>, <span class="predefined-constant">true</span>);
- <span class="keyword">return</span> ecrire_fichier(<span class="local-variable">$rep</span> . <span class="local-variable">$u</span> . <span class="string"><span class="delimiter">"</span><span class="content">.cache</span><span class="delimiter">"</span></span>, <span class="predefined">serialize</span>(<span class="predefined">array</span>(<span class="string"><span class="delimiter">"</span><span class="content">nom_cache</span><span class="delimiter">"</span></span> => <span class="local-variable">$nom_cache</span>, <span class="string"><span class="delimiter">"</span><span class="content">valeur</span><span class="delimiter">"</span></span> => <span class="local-variable">$valeur</span>)));
- }
- <span class="keyword">function</span> <span class="function">lire_cache</span>(<span class="local-variable">$nom_cache</span>) {
- <span class="comment">// $d = substr($nom_cache, 0, 2);</span>
- <span class="comment">// $u = substr($nom_cache, 2, 2);</span>
- <span class="local-variable">$longueur_d</span> = <span class="integer">2</span>;
- <span class="keyword">if</span> (<span class="predefined">defined</span>(<span class="string"><span class="delimiter">'</span><span class="content">_CACHE_MAX_4096_FILES</span><span class="delimiter">'</span></span>) <span class="keyword">AND</span> _CACHE_MAX_4096_FILES){
- <span class="local-variable">$longueur_d</span> = <span class="integer">1</span>;
- }
- <span class="local-variable">$d</span> = <span class="predefined">substr</span>(<span class="local-variable">$nom_cache</span>, <span class="integer">0</span>, <span class="local-variable">$longueur_d</span>);
- <span class="local-variable">$u</span> = <span class="predefined">substr</span>(<span class="local-variable">$nom_cache</span>, <span class="local-variable">$longueur_d</span>, <span class="integer">2</span>);
- <span class="keyword">if</span> (<span class="predefined">file_exists</span>(<span class="local-variable">$f</span> = _DIR_CACHE . <span class="string"><span class="delimiter">"</span><span class="local-variable">$d</span><span class="content">/</span><span class="local-variable">$u</span><span class="content">.cache</span><span class="delimiter">"</span></span>)
- <span class="keyword">and</span> lire_fichier(<span class="local-variable">$f</span>, <span class="local-variable">$tmp</span>)
- <span class="keyword">and</span> <span class="local-variable">$tmp</span> = <span class="predefined">unserialize</span>(<span class="local-variable">$tmp</span>)
- <span class="keyword">and</span> <span class="local-variable">$tmp</span>[<span class="string"><span class="delimiter">'</span><span class="content">nom_cache</span><span class="delimiter">'</span></span>] == <span class="local-variable">$nom_cache</span>
- <span class="keyword">and</span> <span class="predefined">isset</span>(<span class="local-variable">$tmp</span>[<span class="string"><span class="delimiter">'</span><span class="content">valeur</span><span class="delimiter">'</span></span>])
- ) {
- <span class="keyword">return</span> <span class="local-variable">$tmp</span>[<span class="string"><span class="delimiter">'</span><span class="content">valeur</span><span class="delimiter">'</span></span>];
- }
- <span class="keyword">return</span> <span class="predefined-constant">false</span>;
- }
- </span>
Cordialement
Equipement -
Anomalie #3035 (Nouveau) : Association de mots-clés et autorisation
6 août 2013, par Joseph LarmarangeCréation d’un ticket suite à http://permalink.gmane.org/gmane.comp.web.spip.devel/64550
Cas de figure :
- des groupes de mots-clés pour lesquels les rédacteurs ont les droits pour ajouter un mot clé de ces groupes.
- un rédacteur qui visualise un article dont il n’est pas l’auteur et par conséquent pour lequel il n’a pas les droits d’ajouter ou de supprimer un mot-clé.Néanmoins, ce rédacteur va voir la liste des mots-clés associés à cet article, avec un lien pour supprimer les mots-clés en question, un lien ’Ajouter des mots-clés’ lui permettant de charger le formulaire d’ajout de mot-clé.
Si ce rédacteur décide de faire l’une de ces actions (ajout ou suppression), le bloc va se recharger, l’action ne sera pas exécutée et il n’y aura aucun message d’erreur, par exemple pour avertir que l’on n’a pas les droits nécessaires. On a donc une incohérence de l’interface.
En investigant, j’aperçois plusieurs points qui font défaut.
En premier lieu, la fonction autoriser_associermots_dist() regarde simplement si un auteur à le droit en général d’associer des mots-clés d’un groupe en fonction de son statut (admin ou rédacteur) mais ne prends pas en compte si l’individu a le droit de modifier l’objet en question.
Le formulaire EDITER_LIENS du core regarde dans sa fonction charger l’autorisation associerobjets (donc associermots dans notre cas de figure) pour savoir si le formulaire est editable ou non. Dans sa fonction traiter, le formulaire regarde simplement si l’individu a le droit de modifier l’objet en question ou non (mais ne revérifie pas qu’il a les droits d’associer l’objet en question). Par ailleurs, si on n’a pas les droits requis, la fonction traiter ne renvoie pas de message d’erreur.
Le squelette prive/objets/liste/mots_lies.html ne tient compte ni de #ENVeditable ni d’une quelconque autorisation pour afficher ou non un lien de suppression d’un mot-clé.
La fonction autoriser_groupemots_afficherselecteurmots_dist renvoie toujours true.
Propositions d’évolution
- Faire évoluer l’autorisation associermots pour qu’elle vérifie également, si un $id_objet est passé, que l’invidu a les droits de modifier l’objet en question. Cela permettra que la propriété editable soit correctement renseignée dans le formulaire d’ajout de mot-clé. Par ailleurs, pour les plugins ayant besoin de savoir si quelqu’un a le droit d’associer un mot-clé, cela fera une seule auorisation à vérifier (le problème s’est posé avec coche_mots).
- La fonction traiter de éditer_liens devrait dépendre de associermot (il faut vérifier que cela n’a pas d’incidence pour les autres tables de liens) et non des droits de modification d’un objet. Ces droits peuvent être différents dans un contexte d’autorisations personnalisées.
- Cette même fonction traiter doit renvoyer un message d’erreur si on n’a pas les droits suffisants.
- Le squelette prive/objets/liste/mots_lies.html doit vérifier l’autorisation associermots pour afficher un lien de suppression d’un mot-clé.
- Par cohérence, la fonction autoriser_groupemots_afficherselecteurmots_dist est modifiée pour renvoyer, par défaut, le résultat de l’autorisation associermots.