--- /dev/null
+#!/bin/sh
+#
+# Ce script a pour objectif de mettre à jour un spip en protégeant les chemins
+# variables.
+#
+# TODO: vérifier les vérsions, et ne faire la maj que si nécessaire
+
+set -e
+
+BASE_DIR="$(readlink -e "$(dirname "$0")/..")"
+TMP_DIR="$(mktemp -d)"
+NEW_SPIP_DIR="$TMP_DIR/spip"
+CUR_SPIP_DIR="$BASE_DIR/www"
+EXCLUDED= \
+
+cmd() {
+ notice " * running cmd:" "$@"
+ "$@" || { notice " ! command failed ret=$?" ; exit 1 ; }
+}
+
+notice() {
+ if [ "$LOGLVL" -gt 0 ]
+ then
+ echo "$@"
+ fi
+}
+
+cleanup() {
+ [ ! -d "$TMP_DIR" ] || cmd rm -rf "$TMP_DIR"
+}
+
+trap cleanup INT QUIT STOP TERM KILL EXIT
+
+# Traitement des arguments
+SOURCE=""
+LOGLVL=1
+while [ $# -gt 0 ]
+do
+ case "$1" in
+ -s|--source)
+ shift
+ SOURCE="$1"
+ ;;
+ -v|--verbose)
+ LOGLVL=2
+ ;;
+ -q|--quiet)
+ LOGLVL=0
+ ;;
+ esac
+ shift
+done
+
+if [ ! "$SOURCE" ]
+then
+ # Par default on prend la branche 3.0
+ SOURCE="http://files.spip.org/spip/archives/SPIP-v2-1.25.zip"
+fi
+
+cmd wget \
+ $( [ "$LOGLVL" -gt 1 ] || echo -n '-q') \
+ "$SOURCE" -O "$TMP_DIR/spip.zip"
+
+cmd unzip \
+ $( [ "$LOGLVL" -gt 1 ] || echo -n '-q') \
+ ${VERBOSE:+-q} "$TMP_DIR/spip.zip" -d "$TMP_DIR"
+
+[ -d "$CUR_SPIP_DIR" ] || cmd mkdir -p "$CUR_SPIP_DIR"
+
+cmd rsync -a --delete \
+ --exclude /IMG/ \
+ --exclude /config/chmod.php \
+ --exclude /config/connect.php \
+ --exclude /config/mes_options.php \
+ --exclude /lib/ \
+ --exclude /local/ \
+ --exclude /plugins/ \
+ --exclude /squelettes/ \
+ --exclude /themes/ \
+ --exclude /tmp/ \
+ "$NEW_SPIP_DIR/" \
+ "$CUR_SPIP_DIR/"
+
+for SPECIAL_DIR in\
+ IMG\
+ config\
+ local\
+ tmp
+do
+ install -d -m 777 "$CUR_SPIP_DIR/$SPECIAL_DIR"
+done
+
+SPIP-Core spip-2.1.24 -> spip-2.1.25 19 janvier 2014
+-------------------------------------------------------------
+r20969 | guytarr | (ven. 15 nov. 2013) | oubli problematique de r17980 dans r20926 : ne pas envoyer X-Spip-Cache:0 (erational)resout #3094
+r20972 | denisb | (ven. 15 nov. 2013) | filtres.php, editer_auteur.php, inscription.php : Ă©viter un xss sur le nom (signature) d'un auteur (report de r20532).
+r20993 | esj | (sam. 23 nov. 2013) | Dans le critere agenda, le premier argument était traité trop à l'arrach: * on imposait qu'il soit littéral, * mais on ne vérifiait pas que c'était bien un champ de la table SQL.A présent on accepte que cet argument soit calculé, et on vérifie dans les deux cas qu'il s'agit bien d'un champ de la table. Sinon, on signale une erreur dès la compilation pour le premier cas, mais pour le second on prend arbitrairement le premier champ (c'est une erreur de l'internaute, pas de l'auteur du squelette).
+r21015 | esj | (mer. 27 nov. 2013) | Des indéfinis dans une boucle, c'est le commit de répétitions ?
+r21018 | denisb | (mer. 27 nov. 2013) | ecrire/inc/filtres.php : modification de la fonction de filtrage du nom/signature. on introduit la constante _TAGS_LOGIN (vide par défaut, définissable dans mes_options.php) qui liste les tags html acceptables en plus de <multi> .
+r21020 | esj | (mer. 27 nov. 2013) | Quand on tente de créer un mot de même titre qu'un mot existant, il est pénible que le message d'avertissement ne donne pas le lien vers celui-ci. On le rajoute, et comme il peut y en avoir plusieurs, on met en bulle tous leurs ID.
+r21021 | esj | (sam. 30 nov. 2013) | Dans le code PostGres, une utilisation de strpos sans vérifier que son 2e arg est non vide. Résoud le 2e pb de #3100.
+r21026 | esj | (mar. 03 déc. 2013) | Certaines des pages d'installation de la connexion Ldap avaient le focus sur le bouton de soumission et d'autes non. On unifie.
+r21031 | esj | (mar. 03 déc. 2013) | Complément à r20277, sur le paramétrage de l'export de la base SQL. La fonction recevant en argument une Row, le nom de la table et de la clé primaire reçoit à présent comme argument supplémentaire le nom de la base, c'est utile parfois. Rien de changé pour l'export habituel vers un ficher XML.
+r21034 | denisb | (sam. 07 déc. 2013) | ecrire/inc/filtres.php : _TAGS_LOGIN la mal nommée est rebaptisée _TAGS_NOM_AUTEUR (RastaPopoulos.)
+r21084 | fil | (dim. 22 déc. 2013) | report en 2.1 de la machinerie _PREVIEW_TOKEN
+r21094 | denisb | (mar. 31 déc. 2013) | ecrire/inc/getdocument.php : compatibilité pcre 8.34 (php 5.5). le tiret pour ne pas être considéré comme marque d'intervalle dans une classe de caractères doit être placé soit au début, soit à la fin de l'énumération. report de r21091.
+r21097 | denisb | (mer. 01 janv. 2014) | bonne année 2014 !
+
+SPIP-plugins-dist spip-2.1.24 -> spip-2.1.25 19 janvier 2014
+-------------------------------------------------------------
+r79784 | denisb | (mer. 01 janv. 2014) | feliĉan novan jaron 2014 !
+
+
+
+SPIP-Core spip-2.1.22 -> spip-2.1.23 27 mai 2013
+-------------------------------------------------------------
+
+r20560 | cedric | (ven. 24 mai 2013) | suite à r20552 #FORMULAIRE_INSCRIPTION sans argument utilisé dans la page sommaire de squelettes-dist n'était plus fonctionnel.On rétablit le meilleur choix possible (1comite ou 6forum) au niveau de la fonction de la balise dans ce cas particulier (et on enleve la valeur par defaut sur la page identifiants car elle n'est pas equivalente)
+r20564 | ben | (ven. 24 mai 2013) | changelog spip 2.1.22
+r20591 | cedric | (sam. 25 mai 2013) | Report de r20576 : amelioration de r20562 : si le mode n'est pas fourni, on teste 1comite puis 6forum et on renvoit celui qui est autorise.Evite la duplication de code (Emmanuel)
+r20594 | esj | (dim. 26 mai 2013) | Retour sur r19989, correction des arguments des chaînes de langue lorsqu'il s'agit de balise: non seulement on admet des arguments à cette balise, mais à présent aussi des filtres. Ainsi on permet ici ce qu'on permet dans les arguments d'Inclure. Il suffisait de ne pas refuser le caractère "|" entre les signes "=" et "," (ce qui ne servait à rien), puis d'appliquer un code éprouvé.
+r20598 | ben | (lun. 27 mai 2013) | 2.1.23
+
+
+SPIP-Core spip-2.1.21 -> spip-2.1.22 24 mai 2013
+-------------------------------------------------------------
+r20438 | esj | (mar. 23 avril 2013) | La saleté annoncée par 14467 quant au passage en minuscule du nom du fichier de connexion avait été nettoyée par r16365, mais il restait 2 cas non vus: sql_showbase et sql_showtable. On applique les mêmes corrections ce qui fait disparaitre les messagess d'erreurs SQL dans les logs. Mais ces 2 blocs de code identiques ne sont peut-être plus nécessaires, car trouver_table s'est beaucoup amélioré depuis leur introduction en r10113 et r10371. Dans le doute, je les laisse maintenant qu'ils sont corrigés.
+r20445 | denisb | (ven. 26 avril 2013) | ajouter_documents.php : corrige le bug qui remplaçait les '1' du nom des fichiers par un espace (http://permalink.gmane.org/gmane.comp.web.spip.user/181328)
+r20455 | esj | (sam. 27 avril 2013) | Le déclenchement de la prévisualisation était mal situé, car en amont des exécutions éventuelles de code PHP présents dans le code compilé du squelette.C'était déjà peu jouable pour la prévisualisation HTML, franchement inutilisablepour une prévisualisation PDF (voir notamment le"plugin spipdf":http://contrib.spip.net/spiPDF-v0-2-1-generer-des-contenus-sur-mesure-en-PDFqui oblige à dédoubler tous les squelettes faute de pouvoir faire ça).On déplace donc un peu en aval ce déclenchement, et on confie le comportementstandard à une fonction surchargeable: "public_previsualisation".Comme exemple d'utilisation avec la lib mpdf (à installer)rajouter dans squelettes-dist/formulaires/administration.htmlle bouton suivant :<pre><code class='html'>[<a class="spip-admin-boutons" href="(#VAL{lib/mpdf}|is_dir|?{#SELF} |parametre_url_nonvide{var_mode,preview} |parametre_url_nonvide{pdf,1})">PDF</a>]</code></pre>et définir dans mes_fontions.php<pre><code class='php'>function public_previsualisation($page){ if (!_request('pdf') OR !is_readable($f = _DIR_RACINE . 'lib/mpdf/mpdf.php')) return public_previsualisation_dist($page); include_once($f); $f = str_replace(' ', '_', $GLOBALS['meta']['nom_site']) . '.pdf'; $GLOBALS['flag_preserver'] = true; $page['entetes']['Content-Type'] = "application/pdf"; $page['entetes']['Content-Disposition'] = "attachment; filename=$f"; $mpdf = new mPDF($GLOBALS['meta']['charset']); $mpdf->WriteHTML($page['texte']); $page['texte'] = $mpdf->Output('', 'S'); return $page;}function parametre_url_nonvide($url, $c, $v=NULL, $sep='&') { return !$url ? '' : parametre_url($url, $c, $v, $sep);}</code></pre>
+r20462 | esj | (lun. 29 avril 2013) | Le paramètre optionnel "public", forçant la construction d'URL dans l'espace public, apparu dans generer_action_auteur lors de r12798 et r13014, doit être aussi proposé dans la redirige_action_auteur qui appelle celle-ci, autrement ça oblige à la réécrire à chaque fois.
+r20463 | esj | (lun. 29 avril 2013) | Complément à r20462: évidemment du coup l'URL de l'adresse de retour doit aussi prendre en compte dans quel espace elle sera activée.
+r20483 | fil | (dim. 05 mai 2013) | si un login n'existe pas, plutot que de piocher les infos sur un autre login (au risque de fournir la photo d'un auteur sans lien lorsqu'on se trompe dans son email), inventer une reponse credible a base de secret_du_site(), de la date du jour, et du login
+r20485 | denisb | (lun. 06 mai 2013) | chercher_rubrique.php : accessibilité ; ajouter un alt explicite sur la loupe qui affiche la liste des rubriques ; ajout de la chaîne de langue correspondante (report de r20484)
+r20487 | fil | (lun. 06 mai 2013) | ajouter un debug utile dans log/mysql-slow.log ; avec {{{define('_DEBUG_SLOW_QUERIES', true);}}} dans mes_options (a ajouter un plugin dev j'imagine ?)
+r20491 | denisb | (mar. 07 mai 2013) | suite de r20485 : soyons plus générique, le sélecteur peut servir pour autre chose que des rubriques.
+r20511 | cedric | (sam. 11 mai 2013) | Ferme #2889 : forcer la date du jour quand on a pas reussi a lire la date d'un item
+r20524 | cedric | (jeu. 16 mai 2013) | Ferme #2999 : dans le core on definit _IS_BOT en fallback si l'ecran de securite n'est pas present. Pour cela il faut le faire après l'inclusion ! (on n'avait raté ça car on utilise généralement l'écran en php_auto_append)
+r20527 | denisb | (ven. 17 mai 2013) | prive/formulaires/login.html : ajout de la variable lang dans le lien vers le formulaire de rappel du mot de passe. report de r20525
+r20541 | cedric | (mer. 22 mai 2013) | Inscription d'un auteur : le commentaire dit "Si mode inconnu laisser faire, c'est une extension non std", mais passer quand meme par une autorisation, qui par défaut sera a false (puisque l'auteur est non connu, donc non identifié, il n'a aucun droit par defaut).Il suffit que autoriser("inscrireauteur","xxx") renvoie true pour permettre l'inscription d'un auteur avec le statut xxx
+r20552 | esj | (jeu. 23 mai 2013) | Retour sur r20451, révision des autorisations d'inscriptions. La fonction tester_config devient un appel à une fonction surchargeable autoriser_inscrire prenant en argument le type d'inscription et éventuellement l'ID d'une rubrique. Par défaut cette fonction n'accepte que les types 6forum et 1comite, et ignore la rubrique.
+r20555 | cedric | (ven. 24 mai 2013) | Suite de r20552 et r20541 : on nomme l'autorisation autoriser('inscrireauteur',$mode,$id_rubrique) pour plus de lisibilite et eviter toute collision avec un autre type d'inscription
+r20558 | ben | (ven. 24 mai 2013) | SPIP 2.1.22
+r20560 | cedric | (ven. 24 mai 2013) | suite à r20552 #FORMULAIRE_INSCRIPTION sans argument utilisé dans la page sommaire de squelettes-dist n'était plus fonctionnel.On rétablit le meilleur choix possible (1comite ou 6forum) au niveau de la fonction de la balise dans ce cas particulier (et on enleve la valeur par defaut sur la page identifiants car elle n'est pas equivalente)
+
+
+
+SPIP-Core spip-2.1.20 -> spip-2.1.21 21 avril 2013
+-------------------------------------------------------------
+r20332 | esj | (lun. 18 mars 2013) | Tres vieux bug dans l'export partiel de base: le commentaire ci-dessous modifié disait bien qu'il fallait veiller à avoir la table des documents liés aux articles avant la table des documents. Cet avertissement a été ignoré à un moment, probablement quand on est passé à une table des liens générique. De fait, l'export partiel avait toujours une liste de documents vide.
+r20334 | b_b | (mar. 19 mars 2013) | Ferme #2961 : cacher le bouton de la page d'admin des plugins avec du js et non des css
+r20343 | esj | (jeu. 21 mars 2013) | Affichage du bloc de document: lorsqu'un nom est trop long, il déborde du cadre et s'affiche sur le formulaire de saisie à côté. C'est particulièrement le cas pour les documents distants. Comme ce nom est répété en bas du document, on affiche que le domaine de l'URL en haut. Quant au nom en bas dont seul le début et la fin sont écrits lorsqu'il est trop long, il vaut mieux écrire un début plus long et pas la fin, puisque celle-ci est l'extension du fichier, information déjà donnée 2 fois par le type de document et son logo.
+r20350 | marcimat | (ven. 22 mars 2013) | Report de 71003 : Validité XHTML, suite de r70994 qui ne convenait pas ! (freebsnet)
+r20386 | esj | (ven. 29 mars 2013) | Je serai surpris que l'accessibilité recommande que le lien vers un article, au lieu d'être limité à son titre, engloble un icône qui n'a rien à voir mais possède un autre "title" que le descriptif de l'article, le logo de l'article déporté par un Float, avec visuellement parfois entre le titre et logo le nom de la langue qui n'est pas cliquable, et le mot "pétition" qui est clicable mais pour un autre lien. Ouf. On limite au seul titre de l'article.
+r20387 | esj | (ven. 29 mars 2013) | Distinguer le titre '0' d'un titre vide (Fil).
+r20396 | esj | (dim. 31 mars 2013) | Lorsque le chemin à un document (notamment un distant) dépasse 255 caractères, le dire et refuser de le charger, plutôt que de le mettre en base avec un nom tronqué qui ne sert qu'à tromper l'utilisateur.
+r20403 | b_b | (mer. 03 avril 2013) | syntaxe actualisée pour #LOGO_
+r20407 | esj | (lun. 08 avril 2013) | Deux problèmes dans le squelette du calendrier privé, avec conséquence: * quelques chaînes n'étaient pas soumises au filtre encodant les entités XML (que ICS ne connait pas), c'était très laid; * les URL avaient le caractère & encodé sous forme d'entité XML, ce qui les rendaient inopérantes sous ICS.Le dernier point a nécessité d'aligner la balise URL_ECRIRE sur URL_PAGE: si elles ont un étoile, & ne sont pas encodées.
+r20409 | b_b | (mar. 09 avril 2013) | report de r2043 : On remplace thumbshots.com qui demande maintenant une inscription par apercite.fr. On supprime aussi girafa qui a disparu depuis longtemps.
+r20418 | esj | (mar. 16 avril 2013) | Lorsque l'algorithme de mot ressemblant ne trouve rien, remettre la saisie dans l'attribut "value" pour pouvoir rejouer rapidement le formulaire d'ajout d'auteur après correction.
+
+SPIP-plugins-dist spip-2.1.20 -> spip-2.1.21 21 avril 2013
+-------------------------------------------------------------
+r71028 | suske | (sam. 23 mars 2013) | S'il vous plait (http://comments.gmane.org/gmane.comp.web.spip.zone/31692)
+
+
+
+SPIP-Core spip-2.1.19 -> spip-2.1.20 18 mars 2013
+-------------------------------------------------------------
+
+r19920 | ben | (lun. 17 sept. 2012) | préparons gentillement la version suivante
+r19989 | esj | (jeu. 01 nov. 2012) | Le phrasé des arguments d'une chaîne de langue dans un squelette était à l'ouest lorsque la valeur d'un argument était une balise à plusieurs arguments. Dans certains cas ça produisait même une fausse erreur de filtre indéfini. Exemple d'écriture possible à présent (cf. plugin Associaspip):<:asso:config_aide_pc_ressources{url=#URL_ECRIRE{'edit_plan', retour=configurer_association&champ=pc_ressources}}:>
+r19992 | esj | (lun. 05 nov. 2012) | Amélioration de la présentation des résultats du validateur en boucle.
+r20016 | esj | (dim. 18 nov. 2012) | Eviter des warnings.
+r20019 | esj | (mar. 20 nov. 2012) | Eviter des nombres dans le Group-By en PG (Lesage & Cohen)
+r20035 | esj | (mer. 05 déc. 2012) | Suite de r19989 sur les arguments d'une chaîne de langue dans un squelette. Le cas d'un argument sans nom, comme <:foo{=val1,arg=val2}:>, n'était pas dénoncé par le phraseur comme un erreur, mais était silencieusement éliminé ultérieurement par le compilateur (et le décompilateur).Comme, de plus, la syntaxe des chaînes de langues dans un squelette ne fournit pas la possibilité d'avoir une chaîne de langue calculée, alors que la fonction _T sous-jacente le permet, on utilise cette syntaxe ignorée pour introduire cette possibilité. Ainsi, la syntaxe:<pre><:foo:{=#ENV{titre},x=2}:></pre>sera compilée en<pre>_T('foo:' . $Pile[0]['titre'], array('x' => 2))</pre>et de même pour n'importe quelle expression figurant après "{=".Cette possibilité évite l'artifice d'utiliser obscurément _T en filtre,comme cela se fait plus de 2000 fois sur SPIP-Zone.Langonet peut ainsi repérer ces chaînes auparavant indétectables.
+r20036 | esj | (jeu. 06 déc. 2012) | Accessibilité et validité: donner des libellés différents pour des liens différents, et ne pas utiliser "rel" à contre-emploi (voir les valeurs possibles dans http://www.w3.org/TR/html401/types.html#type-links).
+r20045 | esj | (mar. 11 déc. 2012) | Remaniement du code produisant l'en-tête HTML de l'espace privé, afin de pouvoir en changer le DOCTYPE sans avoir à tout réécrire pour respecter celui-ci. Pour ce faire: * la fonction produisant les gadgets est éclatée en plusieurs afin de remplacer aisément ceux qui ne vont pas; * html_lang_attributes admet un argument optionnel demandant ou non l'attribut "dir"; * le code Javascript écrit en dur dans la page HTML migre dans le fichier gadget.js dont il appelait déjà une fonction, et est remplacé par un unique appel de fonction; * les fonctions envoi_link et debut_javascript admettent un argument optionnel supplémentaire, code Javascript à insérer à la fin de celui produit, ce qui permet de fusionner les deux balises scripts existant auparavant.A noter que la concacténation automatique en un seul des fichiers JS des attributs "src" des balises "script" fait l'hypothèse que le code JS des autres balises scripts n'influent pas sur les fichiers JS auparavant chargés après celles-ci, puisque la concaténation fait qu'il sont chargés désormais avant. L'hypothèse est juste à l'heure actuelle et c'est tant mieux, mais les plugins doivent savoir qu'il faut la respecter.Au passage, à une certaine époque tous les scripts de l'espace privé étaient valide XHTML strict, 21 ne le sont plus à présent, il faudra y revenir.
+r20047 | esj | (mar. 11 déc. 2012) | Le validateur intégré n'avait notoirement jamais su traiter complètement les squlettes internes. C'était en particulier le cas des squelettes de prive/exec, qu'on arrive à traiter correctement à présent. Pour les autres, c'est toujours le problème de fabriquer automatiquement un contexte plausible pour un squelette donné, ce n'est pas trivial.
+r20052 | esj | (ven. 14 déc. 2012) | Invalidité XHTML dans le fichier de langue français. On fait comment pour reperter dans les autres ?
+r20053 | esj | (sam. 15 déc. 2012) | Invalidité XHTML dans les fichiers de langue, et parfois même inconformité XML. Ca montre au passage que mettre dans les fichiers de langue est à éviter: le risque d'éliminer une balise lors d'une traduction est trop grand. Ou alors il faut que trad-lang le vérifie avant d'accepter d'enregistrer.
+r20054 | esj | (lun. 17 déc. 2012) | Validateur intégré: même quand on ne l'utilise pas en boucle, se rabattre sur la fonction suffixée "_args" quand l'exécution de la fonction préfixée "exec_" ramène un message d'erreur fabriqué par Minipres. Et inclure dans le titre de la page le nom de ce qu'on essaye de valider, c'est mieux pour l'historique du navigateur.
+r20055 | esj | (mar. 18 déc. 2012) | Accès aux documents protégés, retour sur r13924: ne pas envoyer le "Content-Disposition: attachment; filename=..." Pour tous les documents réputés "embed" pas seulement les images comme auparavant pose problème pour certains cas: ça marche pour Flash et PDF, mais pas pour le mp4, et le document est du coup créé sous le nom "spip.php" avec un contenu qui n'est pas du PHP mais du mp4 ce qui le rend inutilisable si on ne le renomme pas manuellement. Pour éviter ça, on envoie un "Content-Disposition: inline; filename=...".Mais d'après:http://greenbytes.de/tech/tc2231il n'y a que Firefox qui en tient compte. Examen fait, Safari 5.1.7 a progressé depuis la publication de cette page, espérons que les autres aussi.
+r20056 | gilles | (mar. 18 déc. 2012) | Eviter des warnings inutiles (un file_exists() avant le filemtime serait peut-etre une meilleure option)for file in `fgrep -R filemtime * | grep -v '@filemtime' | grep -v svn | awk -F: '{print $1}' |uniq`; do sed -i 's/filemtime/@filemtime/' $file ; done
+r20057 | gilles | (mar. 18 déc. 2012) | revert du commit 20056 (mega Oups')
+r20058 | gilles | (mar. 18 déc. 2012) | file_exists() avant filemtime() -- lorsque le controle n'avait pas ete fait avant (sans bug cette-fois ci --je touche du bois)
+r20060 | esj | (mar. 18 déc. 2012) | Encore Revert autour de r20058 pour le validateur intégré: le file_exists a été fait pour find_in_path pour le cas SYSTEM, et pour le cas PUBLIC l'absence de fichier est normale, puisque c'est une URL."
+r20063 | esj | (mer. 19 déc. 2012) | Invalidité XHTML strict dans les fichiers de langue.
+r20064 | esj | (mer. 19 déc. 2012) | Invaldité XHTML dans les Exec, et éviter au validateur intégré de provoquer des warnings lorsque la fonction "_args" attend beaucoup d'arguments.
+r20065 | fil | (jeu. 27 déc. 2012) | image/jpg est parfois envoye par des serveurs mal programmes (http://www.cairn.info/loadimg.php?FILE=EG/EG_393/EG_393_0197/fullEG_id9782701156200_pu2010-03s_sa02_art02_img001.jpg)
+r20096 | fil | (sam. 12 janv. 2013) | affiner le bookmarklet pour ne plus exploser les accents dans les URLs de wikipedia (ou ailleurs)
+r20097 | fil | (sam. 12 janv. 2013) | annule [20096]
+r20103 | fil | (ven. 18 janv. 2013) | ne pas copier directement le fichier distant a sa destination, sinon un autre processus concurrent peut croire qu'il est present et le traiter (ca donne des images incompletes si on applique un filtre de reduction 'trop tot')
+r20104 | fil | (sam. 19 janv. 2013) | une strategie un peu meilleure : lock/rename
+r20115 | fil | (mar. 22 janv. 2013) | fusion des inc/distant de la branche 2.1 et de la branche 3 ; ca permet de revenir sur [20104], sur la branche 2.1, qui etait un peu buggue, et surtout deja regle sur le trunk (spip3) en [19461]au passage, ca reporte aussi [19231] (documents proteges, faussement distants) sur le trunka noter : les modifications d'espaces et de tabulations, bien que effectivement ameliorant le source, produisent de nombreux diffs 'muets' qu'il a fallu verifier un par un... au final une perte de temps desagreable
+r20162 | fil | (mar. 19 févr. 2013) | si on met une etoile dans un mot de recherche, surligner les mots trouves sans etoile
+r20199 | fil | (mer. 27 févr. 2013) | quand on passe par un GET on a des chances d'obtenir la ressource complete, il ne faut donc pas se limiter a 1Mo dans ce cas, mais a _COPIE_LOCALE_MAX_SIZE
+r20200 | esj | (mer. 27 févr. 2013) | Complément à r12071 repérant les colonnes numériques dans une table HTML: on ne reconnaissait pas ".9" comme étant un nombre, et il ne faut pas qu'une cellule vide invalide le statut numérique de toute une colonne.
+r20201 | fil | (mer. 27 févr. 2013) | retour sur [20199] : pour ne pas exploser la memoire, il faut une autre approche du problemeici, on evite d'enregistrer le fichier en local s'il est incomplet
+r20209 | denisb | (jeu. 28 févr. 2013) | Complément à r20200 : reconnaître comme numérique tout contenu de type 123 ; -123 ; + 123 ; 12 345 ; 12.34 ; 123,4
+r20229 | esj | (sam. 02 mars 2013) | Lorsque r10917 a deplacé la déclaration de bases externes des scripts d'installation vers un onglet activable ultérieurement, on n'a pas remplacé FILE_CONNECT_TMP par FILE_CONNECT (i.e. le fichier de connexion) pour repérer quelle est la base courante, ce qui fait que celle-ci était proposée comme base externe; pas grave, mais pas malin.Quant à la fonction analyse_fichier_connection, lui faire retourner tous les arguments de l'appel de la fonction connexion, pas seulement les 5 premiers: ça permet de savoir quel est le prefixe de table.
+r20255 | esj | (dim. 10 mars 2013) | Conformité XML: éviter 2 occurrences d'un même attribut.
+r20276 | esj | (mar. 12 mars 2013) | r17431 a ajouté des ` autour du nom des tables dans les requêtes SQL Drop et Repair, avec pour conséquence que le préfixe "spip_" n'était plus remplacé dans "traite_query" car la RegExp n'en tenait pas compte. Je ne comprends pas vraiment l'intérêt de ça puisque pour les autres requêtes cet ajout n'est pas fait (il ne l'est que sur le nom de la base). Comme ça doit servir à qqch je ne defais pas r17431, je me contente de mettre ` que si le nom de table n'est pas alphanumérique: avec un nom pareil, il y a de bonnes chances que ça ne commence pas par "spip_", mais cette hétérogénéité est regrettable.
+r20277 | esj | (mar. 12 mars 2013) | un bug et un manque dans l'export et l'import partiels de base: * l'import partiel étant géré par une meta spécifique au demandeur, il n'est pas impossible que plusieurs imports soient demandés simultanément, ce qui exige que la table de translation des numéros des objets soit spécifique au demandeur. Le nom de cette table est donc suffixé par l'id_auteur du demandeur. * les fonctions d'export étaient limitées à une transcription en XML des tables de la base, il n'était donc pas possible d'exporter les tables des bases déclarées externes, et pour en faire autre chose qu'un fichier XML. Ces fonctions sont donc réécrites pour prendre comme arguments supplémentaires optionnels la base concernée et la fonction de transcription. Ces deux arguments peuvent être donnés à la query-string du script export_all mais aucun formulaire ne les fournit en standard. Bien utilisés, ils peuvent provoquer directement une opération d'import-export (au plutôt d'export-import), chaque Row de la base exportée (au niveau de la fonction build_while) étant transmis à une fonction appelant une variante de import_insere en premiere passe, puis import_translate dans la 2e passe.
+r20278 | esj | (mar. 12 mars 2013) | Complement pour 20277: cette ligne avait malencontreusement disparue.
+r20304 | esj | (ven. 15 mars 2013) | Eviter une ecriture disque pour un log qui n'apprend rien.
+r20308 | esj | (sam. 16 mars 2013) | Un bug potentiel dans l'import partiel: un champ id_parent ne doit pas toujours être renuméroté comme étant un id_rubrique, ce n'est pas vrai en particulier dans la table spip_forum (qui actuellement n'est pas importée, le bug n'est donc perceptible que dans d'éventuelles surcharges de ce code qui l'importeraient). Au passage cela montre qu'il y a une typologie implicite dans les tables de SPIP, fondé sur le nom des champs. Les deux champs id_parent devraient s'appeler id_rubrique_parent et id_forum_parent; on arrive à lever l'ambiguité à l'aide de la description de la table, mais ce n'est pas généralisable.Du coup, il faut pouvoir surcharger toutes ces fonctions, aussi on remplace "function_exists" par "charger_fonction". Et quand elles sont absentes, ne le signaler qu'une fois.
+r20309 | esj | (sam. 16 mars 2013) | Import partiel: les champs id_vignette sont des références aux clés primaires id_document. Cf http://thread.gmane.org/gmane.comp.web.spip.zone/31355 et http://zone.spip.org/trac/spip-zone/browser/_plugins_/assemblage/trunk/inc/assemblage.php?rev=70785 par Nicolas Dorigny.
+r20323 | esj | (lun. 18 mars 2013) | A défaut d'avoir fait ça au solstice d'hiver, faisons-le à l'équinoxe du printemps (même si ça ne fera pas venir celui-ci plus vite).
+
+SPIP-plugins-dist spip-2.1.19 -> spip-2.1.20 18 mars 2013
+-------------------------------------------------------------
+
+r67199 | b_b | (sam. 27 oct. 2012) | report de r67198 : réparer generer_url_forum_dist() qui ne renvoyait rien vu qu'on ne lui passait pas le bon argument
+r67738 | cedric | (jeu. 15 nov. 2012) | Report de r67734 : La suppression a tort du retour ligne qui suit les commentaires // provoque un bug quand celui ci est en fin d'une ligne sans point-virgule, ce qui est une pratique courante dans les js de Bootstrap (hugues)
+r69328 | jack31 | (jeu. 24 janv. 2013) | On est en 2013 !
+r69336 | jack31 | (jeu. 24 janv. 2013) |
+r69338 | jack31 | (jeu. 24 janv. 2013) |
+
+
+plugins 2.1.13->2.1.14 (22/04/2012)
+----------------------------------------
+r61251 | kent1 | 2012-05-13 12:08:13|Pas besoin de ces logs intempestifs
+
+Core 2.1.13->2.1.14 (14/05/2012)
+--------------------------------
+
+r19298 | cedric | 2012-04-23 17:47:02| Comme r19253 mais compatible PHP 4
+r19308 | b_b | 2012-04-25 18:31:10| suivre les changements dans les paramètres du callback success de jquery.form suite à r18809
+r19309 | b_b | 2012-04-25 19:33:47| oubli dans r19308 pour les zip à déballer
+r19322 | esj | 2012-04-27 18:29:54| Régression de SPIP 2 par rapport à SPIP 1.9: la boucle syndic_article (et aussi certains cas pour la boucle Auteur) était compilée avec un Group By inutile, particulièrement mal venu à cause d'un bug de certaines versions de MYSQL. Bug [http://comments.gmane.org/gmane.comp.web.spip.devel/46063 signalé sur spip-dev] il y a déjà longtemps, et relancé par Sebastien Rebaudo.
+r19330 | esj | 2012-04-30 11:11:41| Certaines instllations de PostGres ne considère pas le backslash comme un caratère d'échappement dans une chaîne, il ne faut donc pas utiliser "addslashes" mais pg_escape_string. La présente correction n'est toutefois pas tout à faite suffisante, à cause de la fonction _q qui n'est toujours pas intégrée à l'interface SPIP/SQL, mais il n'est même pas sûr que le cas problématique puisse émerger.
+r19333 | cedric | 2012-04-30 17:28:42| Report de r19331 : Evitons aux pirates schizophrènes de se faire du mal
+r19334 | denisb | 2012-04-30 22:05:19| inc/ajouter_documents.php : on retrouve la fonctionnalité de titrage automatique des fichiers extraits de l'upload d'un zip.
+r19358 | marcimat | 2012-05-11 15:45:10| Report de r19256 (Éviter une erreur en PHP 5.4)
+r19364 | fil | 2012-05-14 10:12:12| un son n'a pas de #HAUTEUR /#LARGEUR naturelle : fournir des valeurs par defaut permettant de voir le player
+r19365 | fil | 2012-05-14 10:13:46| d'autres cas ou il ne faut pas ajouter d'insecable
+r19366 | fil | 2012-05-14 10:14:43| savoir appliquer les filtres d'images sur les img src=data:...base64
+r19367 | fil | 2012-05-14 10:16:51| sur un fichier vide ou inexistant, taille en octet renvoie une chaine vide plutot que '0 octets'
+r19368 | fil | 2012-05-14 10:17:41| detection un peu plus laxiste des blocs echappes
+
+
+plugins 2.1.12->2.1.13 (22/04/2012)
+----------------------------------------
+r56754 | b_b | 2012-01-07 20:13:34 +0100 (sam. 07 janv. 2012) | 2 lignesorthographe
+r56755 | b_b | 2012-01-07 20:18:06 +0100 (sam. 07 janv. 2012) | 2 lignesne plus perdre la position du scroll dans les textarea des crayons :)
+r59043 | fil | 2012-03-03 23:23:43 +0100 (sam. 03 mars 2012) | 1 ligneautoriser les iframe de l'oembed youtube (pour pouvoir les utiliser dans les forums avec le plugin oembed)
+r59045 | fil | 2012-03-03 23:41:53 +0100 (sam. 03 mars 2012) | 1 lignevimeo... ca risque d'etre long cette affaire...
+
+Core 2.1.12->2.1.13 (22/04/2012)
+--------------------------------
+r18747 | b_b | 2011-11-19 13:06:42 +0100 (sam. 19 nov. 2011) | attribut_html pour l'attribut value des formulaires
+r18776 | denisb | 2011-12-07 09:22:03 +0100 (mer. 07 déc. 2011) | ecrire/exec/aide_index.php : protéger les caractères spéciaux des titres de paragraphe.
+r18784 | cy_altern@yahoo.fr | 2011-12-09 13:56:45 +0100 (ven. 09 déc. 2011) | report de http://zone.spip.org/trac/spip-zone/changeset/55295 en 2.1
+r18792 | cy_altern@yahoo.fr | 2011-12-09 18:43:23 +0100 (ven. 09 déc. 2011) | report de http://zone.spip.org/trac/spip-zone/changeset/55304 en 2.1
+r18809 | b_b | 2011-12-14 14:52:46 +0100 (mer. 14 déc. 2011) | report de r18808 : maj de jquery form en 2.94 (règle un bug sous ie7 entre autres)
+r18818 | denisb | 2011-12-17 14:32:05 +0100 (sam. 17 déc. 2011) | éviter un open redirect sur le logout.
+r18827 | marcimat | 2011-12-19 14:26:08 +0100 (lun. 19 déc. 2011) | Une coquille enpêchait l'affichage du lien "suivant" lorsqu'on était sur l'avant dernier élément (choupito, b_b)
+r18829 | cedric | 2011-12-19 14:54:31 +0100 (lun. 19 déc. 2011) | SQLite :- implementation erronee de TO_DAYS qui doit compter le nombre de jour depuis 0000-00-00 et non le nombre de jour depuis le debut de l'année. Provoquait l'envoi intempestif du mail de nouveautés- simplifier la fonction LEAST qui peut s'appuyer sur le min() de PHP
+r18846 | marcimat | 2011-12-26 10:57:56 +0100 (lun. 26 déc. 2011) | Report de r18841 (RealEt)
+r18919 | ben | 2012-01-17 10:15:58 +0100 (mar. 17 janv. 2012) | Happy New Year ... on ne sait jamais si on ressort une version de secu sur la branche 1.9.2 2.0 ou 2.1 les dates seront bonnes
+r18920 | b_b | 2012-01-17 11:38:05 +0100 (mar. 17 janv. 2012) | ferme #2491 : afficher le formulaire d'édition de mot déplié s'il y a une erreur de doublon sur le titre
+r18925 | esj | 2012-01-21 09:48:15 +0100 (sam. 21 janv. 2012) | Trois bugs: * un include manquant pour ask_php_auth (et un redondant) dans les forums; * remettre le formulaire de recherche d'un auteur si envoi précédent vide (jjméric); * le zoom avec affichage d'heures du calendrie ne marchait plus dans certains cas.
+r18943 | esj | 2012-01-31 08:37:48 +0100 (mar. 31 janv. 2012) | Chaîne de langue non traduite depuis la refonte de l'authentification par r14581 et r14594.
+r18946 | fil | 2012-01-31 13:27:10 +0100 (mar. 31 janv. 2012) | ajout du format epub (closes #2514 joachim sene);
+r18947 | fil | 2012-01-31 13:30:37 +0100 (mar. 31 janv. 2012) | oups
+r18948 | cedric | 2012-01-31 14:47:43 +0100 (mar. 31 janv. 2012) | renumeroter l'upgrade de r18946 pour eviter la collision d'upgrade avec la branche SPIP 3
+r18952 | esj | 2012-01-31 23:30:44 +0100 (mar. 31 janv. 2012) | Pouvoir appeler la fonction Bouton_spip_rss en lui précisant l'info-bulle, et évacuation de code mort autour de son appel. Au passage, on voit ici que la fonction http_img_pack devrait être évacuée au profit d'une utilisation systématique de background-image dans les CSS: les icones n'ont rien à faire dans le code PHP.
+r18953 | denisb | 2012-02-01 00:13:41 +0100 (mer. 01 févr. 2012) | ecrire/inc/auth.php : on écrit dans #SESSION{en_ligne} date et heure de connexion.
+r18954 | denisb | 2012-02-01 08:46:46 +0100 (mer. 01 févr. 2012) | revert de r18953 qui cassait plus qu'il ne réparait...
+r18958 | kent1 | 2012-02-01 18:16:43 +0100 (mer. 01 févr. 2012) | la vignette epub
+r18961 | denisb | 2012-02-02 17:04:00 +0100 (jeu. 02 févr. 2012) | ecrire/inc/auth.php : on force l'écriture de 'en_ligne' dans le fichier de session pour pouvoir récupérer #SESSION{en_ligne} dans un squelette. sinon, la valeur dans le fichier reste à zéro et écrase la globale.
+r18967 | b_b | 2012-02-07 18:06:33 +0100 (mar. 07 févr. 2012) | éviter une XSS sur l'aide en ligne (Silvère Cainaud)
+r18970 | esj | 2012-02-08 14:49:51 +0100 (mer. 08 févr. 2012) | Isoler dans une fonction ce bout de code bien utile pour attacher un lien à une date.
+r18973 | kent1 | 2012-02-10 15:29:40 +0100 (ven. 10 févr. 2012) | deux vignettes pour :-* ogv (pas terrible, juste une reprise des autres types video);-* webm (pas terrible non plus, basé sur le template pour videos + une partie du logo de webm);
+r18982 | esj | 2012-02-14 18:01:58 +0100 (mar. 14 févr. 2012) | Bug dans la balise PARAMETRES_FORUM: dans le cas où elle figurait dans la partie alternative d'une boucle, elle ne repérait dans quelle autre boucle elle figurait, et se croyait donc au premier niveau du squelette, sans pouvoir préciser son type de forum.
+r19022 | cam.lafit@azerttyu.net | 2012-02-24 14:31:35 +0100 (ven. 24 févr. 2012) | Déclarer explictement la requete SQL pour un subselect * l'api SQL ne traduit pas le bon préfixe dans un SUBSELECT * On calcule donc la bonne requete SQL à fournirVoir le ticket #2493
+r19023 | esj | 2012-02-24 16:37:00 +0100 (ven. 24 févr. 2012) | Lorsque r11084 a pu étendre #URL_PAGE aux bases externes, il l'a fait avec la restriction que cela ne pouvait concerner qu'une base sous SPIP. C'est un excès de prudence hérité des #URL_ARTICLE etc: cette balise a justement pour rôle de créer des URLs arbitraires non nécessairement homonyme d'une table dans la base.
+r19024 | cedric | 2012-02-24 22:42:53 +0100 (ven. 24 févr. 2012) | Retour sur r19022 qui ne corrigeait pas vraiment #2493 car sql_get_select ne transpose pas le prefixe. On decompose la requete en deux pour corriger le bug initial. Ferme #2493
+r19026 | esj | 2012-02-24 23:31:15 +0100 (ven. 24 févr. 2012) | Quand on appelle la page privé de gestion des pétitions avec un id_signature en argument (lien issu du moteur de recherche), ne pas oublier de le rajouter dans le lien vers l'autre onglet.
+r19027 | esj | 2012-02-26 00:18:17 +0100 (dim. 26 févr. 2012) | 1Trois petits bugs liés à la gestion des pétitions: * le moteur de recherche compte sur l'existence de la puce de signature, on la crée; * afficher_objet supposait l'existence de signature-24.gif, on donne un équivalent; * quand on appele le script de gestion de signature avec un argument id_signature, ne pas choisir le statut par défaut mais celui de la signature désignée, sinon le moteur de recherche (qui produit un tel appel) semble parler d'un signature inexistante.Ces bugs ont été trouvés suite à la mise en ligne de:http://appel-enseignement-sup-et-recherche.fr/qui implicitement explique pourquoi je ne peux plus participer à SPIP autant qu'avant 2007. J'invite la communauté SPIP à soutenir cette protestation.
+r19028 | esj | 2012-02-26 19:14:57 +0100 (dim. 26 févr. 2012) | Aussi bizarre que cela puisse paraître j'ai eu:Fatal error: Call to undefined function securiser_redirect_action() in ... ecrire/action/logout.php on line 22lors de la restauration d'une base.
+r19029 | esj | 2012-02-26 19:23:27 +0100 (dim. 26 févr. 2012) | Complément à r19027: si on appelle controle_petition avec id_signature, ne pas redonner cet argument dans l'URL de l'autre onglet car depuis r19207 il n'y a forcément rien avec un tel argument. Autant redonner accès à la liste de toutes les signatures.
+r19030 | fil | 2012-02-26 19:50:16 +0100 (dim. 26 févr. 2012) | dans l'espace prive montrer les sauts de ligne
+r19031 | esj | 2012-02-26 22:15:32 +0100 (dim. 26 févr. 2012) | Curieusement SPIP gérait bien les accès concurrents de deux confirmation de signatures pour la même adresse, mais ne supprimait pas toutes les autres attentes de validation pour cette même adresse.
+r19033 | esj | 2012-02-27 09:09:16 +0100 (lun. 27 févr. 2012) | Le nombre de signature en attente lors d'une pétition atteint des niveaux désormais élevés, sans doute à cause des faux positifs des anti-spams. Il n'est plus possible de cliquer sur les boutons de relance individuelle vu le niveau atteint, on rajoute un bouton général de relance.
+r19034 | esj | 2012-02-27 09:27:24 +0100 (lun. 27 févr. 2012) | Complément à r19033: limiter la relance aux attentes de plus d'un jour, c'est plus raisonnable;
+r19036 | esj | 2012-02-27 14:44:23 +0100 (lun. 27 févr. 2012) | Complément à r19033: le lien "mailto" dans la liste des signatures à relancer fourni à présent le sujet et le corps du message auquel le signataire n'a pas répondu, comportant en particulier le lien provoquant la confirmation. Cet ajout permet d'éditer le message à envoyer quand il est clair que le pb vient d'une adresse mail mal écrite quoique valide. Ce lien n'apparaît que pour les modérateurs de la pétition évidemment.
+r19037 | esj | 2012-02-27 22:47:04 +0100 (lun. 27 févr. 2012) | Augmenter de 4 pixels la taille de la dernière colonne de presenter_liste, sion les numéros d'objet à 4 chiffres ne tiennent pas sur la ligne.
+r19038 | esj | 2012-02-28 11:47:04 +0100 (mar. 28 févr. 2012) | Complétement à r19033: mettre dans les logs le nombre de signatures relancées plutôt que de répondre par une page blanche (mais ce serait mieux de donner l'info dans la page).
+r19039 | fil | 2012-02-29 10:43:57 +0100 (mer. 29 févr. 2012) | revert du patch css pour les BR, on va faire ca en html
+r19040 | esj | 2012-02-29 19:42:14 +0100 (mer. 29 févr. 2012) | Dans le CSV des signatures d'une pétition, donner tous les champs (bizarre que je n'ai pas tout mis à la création de ça en r11119: il suffit de les supprimer avec le tableur si vraiment on n'en veut pas).
+r19048 | esj | 2012-03-02 16:34:35 +0100 (ven. 02 mars 2012) | La prise en compte de https par r11120 dans récupérer page ne tenait pas compte du cas du proxy.
+r19054 | b_b | 2012-03-03 12:29:58 +0100 (sam. 03 mars 2012) | report de 19052 sans oups : un admin ne doit pas pouvoir modifier un webmestre s'il ne l'est pas lui mĂŞme
+r19055 | esj | 2012-03-03 12:54:42 +0100 (sam. 03 mars 2012) | CSV des signatures: il y en a qui écrivent n'importe quoi. Filtrons les enttités HTML et les points-virgules.
+r19060 | esj | 2012-03-04 09:20:34 +0100 (dim. 04 mars 2012) | Contrôle des pétitions. Un complément à r19027 encore meilleur que r19029: les deux onglets doivent être actifs en cas de visualisation d'une signature unique.
+r19066 | esj | 2012-03-05 14:39:33 +0100 (lun. 05 mars 2012) | Gestion des pétitions: dans la page d'accueil de toutes les pétitions, afficher le score des 10 plus signées.
+r19072 | fil | 2012-03-06 12:29:47 +0100 (mar. 06 mars 2012) | prendre la css dans prive de maniere a pouvoir la vider dans le public (ce que fait basecss) sans detruire l'espace prive
+r19077 | b_b | 2012-03-07 19:39:13 +0100 (mer. 07 mars 2012) | Exclure les éventuels quotes du nom du zip lorsqu'on tente de le récupérer à partir de Content-Disposition: attachment; filename=Note that the filename is surrounded by double quotes, per RFC 2231. This allows for the use of extended characters within the filename (i.e., international characters, though at present Internet Explorer does not support this internationalization).An unfortunately large number of web servers instead do not include the enclosing quotes around the filenamehttp://kb.mozillazine.org/Filenames_with_spaces_are_truncated_upon_download
+r19086 | esj | 2012-03-09 08:57:35 +0100 (ven. 09 mars 2012) | Le filtre associé au modèle de type MIME text ne doit pas utiliser echapper_tag mais substituer explicitement & > et <.
+r19087 | fil | 2012-03-09 11:05:59 +0100 (ven. 09 mars 2012) | mettre en cache le resultat du ping pour ne pas le repeter a chaque fois qu'on veut tester une URL ne precisant pas son extension
+r19088 | kent1 | 2012-03-09 19:48:30 +0100 (ven. 09 mars 2012) | La chaine de langue "nouvel_auteur" n'existe pas..."item_nouvel_auteur" si...
+r19094 | esj | 2012-03-12 14:26:28 +0100 (lun. 12 mars 2012) | Lorsqu'on envoie un fichier nommé "Makefile", SPIP corrige le manque d'extension en rajoutant ".bin", car les navigateurs ont indiqué un mime-type "application/octet-stream". Cela est dû a fait que le mime-type text/x-makefile existe mais n'a pas d'extension associée (".mk" parfois utilisée n'est pas officielle). On rajoute d'autorité l'extension ".txt" pour permettre l'ouverture par un éditeur de texte lorsqu'un visiteur récupère le fichier. On traite aussi ce cas particulier au niveau des entrées du répertoire upload, car c'est justement lors du chargement de tout un répertoire qu'on a le plus de chance de rencontrer un tel fichier.
+r19095 | esj | 2012-03-12 17:59:40 +0100 (lun. 12 mars 2012) | De cette fonction de 400 lignes, extrayons les 10 lignes calculant le titre du document ajouté, afin de pouvoir programmer des remplacements de documents.
+r19101 | esj | 2012-03-15 14:48:26 +0100 (jeu. 15 mars 2012) | Complément à r19095: extrayons 1 plutôt que 10 de la fonction de 400 ligns, pour donner l'information que le document sera ou non inclus en Zip. Par ailleurs, tenir compte du cas Makefile aussi ici, et forcer le titre au besoin.
+r19158 | esj | 2012-03-26 17:47:55 +0200 (lun. 26 mars 2012) | Avant d'importer un document distant, copie_locale teste si l'URL est l'application du script acceder_document sur un document en fait local, dont elle renvoie alors le Path. Mais tester par une RegExp en dur dans le code ne permet pas aux sites jouant avec les Virtual Host d'être repérés dans tous les cas. On fait de cette RegExp une constante PHP afin de permettre sa redéfinition.
+r19162 | esj | 2012-03-27 13:51:19 +0200 (mar. 27 mars 2012) | Complément à r19158 sur les URL de documents distants en fait locaux: acceder_document doit accepter soit le path initial soit son propre appel dessus. Du coup on isole dans une fonction le code produisant l'URL de ces action. Par ailleurs il restait un commentaire destiné à une ancienne version, c'était trompeur.
+r19202 | cedric | 2012-04-04 15:22:00 +0200 (mer. 04 avril 2012) | PHP 5.4 : mysql_list_dbs deprecie, on remplace a minima
+r19203 | cedric | 2012-04-04 15:30:37 +0200 (mer. 04 avril 2012) | indentation
+r19204 | cedric | 2012-04-04 15:37:40 +0200 (mer. 04 avril 2012) | #2615 : PHP 5.4 attention au passage par reference dans array_pop, array_shift et reset.mysql_list_dbs est deprecie
+r19205 | cedric | 2012-04-04 15:41:22 +0200 (mer. 04 avril 2012) | #2615 PHP 5.4 attention aux Illegal offset string
+r19207 | esj | 2012-04-05 14:23:28 +0200 (jeu. 05 avril 2012) | Afficher le lien vers l'article dans la page de contrôle des pétitions (qui devrait passer au singulier dans ce cas là d'ailleurs).
+r19228 | marcimat | 2012-04-10 12:04:00 +0200 (mar. 10 avril 2012) | Report de c19227 (autoriser webmestre et PHP 5.4)
+r19231 | esj | 2012-04-10 19:21:16 +0200 (mar. 10 avril 2012) | Complément à r19158 sur le calcul du Path d'un document faussement distant: * accepter les variations http/https pour que ça marche dans un espace privé protégé par https * tenir compte du paramètre $force (mais est-ce vraiment utile ?)
+r19233 | marcimat | 2012-04-10 22:16:20 +0200 (mar. 10 avril 2012) | Report de z19232 : Lorsqu'un squelette est introuvable, Ă©viter une erreur de PHP 5.4
+r19240 | esj | 2012-04-12 10:32:59 +0200 (jeu. 12 avril 2012) | Retour sur r19086 pour le filtre des types MIME text: str_replace ne faisant pas les substitutions en parallèle, leur ordre est significatif.
+r19243 | esj | 2012-04-13 07:31:40 +0200 (ven. 13 avril 2012) | r10136 n'aurait pas dĂ» refuser d'appliquer URL_ACTION_AUTEUR Ă une base externe, la raison de le faire pour les autres balises URL_XXX n'Ă©tant pas valable (Benjamin Tricault).
+r19247 | esj | 2012-04-15 17:10:04 +0200 (dim. 15 avril 2012) | Dans la page des statistiques d'une pétition, ne compter que les signatures validées.
+r19252 | esj | 2012-04-16 20:16:15 +0200 (lun. 16 avril 2012) | XSS dans l'espace privé (Christophe Imberti)
+r19253 | esj | 2012-04-16 20:17:23 +0200 (lun. 16 avril 2012) | XSS via une en-tĂŞte HTTP (Antoine Cervoise)
+
Core 2.1.11->2.1.12 (16/10/2011)
+
r18562 | ben | 2011-09-22 22:39:46 | changelog 2.1.11
r18580 | denisb | 2011-09-26 08:18:59 | traduire.php : caster la globale détruite plus haut pour php5 plus rigoureux que son ancêtre.
r18582 | fil | 2011-09-27 10:07:59 | tiens les documents ne passaient pas par les pipelines pre_insertion / post_insertion
+++ /dev/null
-<?php
-
-// {traduction}
-// http://www.spip.net/@traduction
-// (id_trad>0 AND id_trad=id_trad(precedent))
-// OR id_article=id_article(precedent)
-function critere_traduction($idb, &$boucles, $param, $not) {
- $boucle = &$boucles[$idb];
-
- // cas des rubriques : on va chercher toutes les rubriques contenant
- // des trads *publiees* de nos articles *publies*
- if ($boucle->id_table == 'rubriques') {
- if ($param == 'traduction') {
- $boucle->from[] = "spip_articles AS source";
- $boucle->from[] = "spip_articles AS dest";
- $boucle->group = "rubriques.id_rubrique";
- $boucle->where[] = "((source.id_trad=dest.id_trad
- AND source.statut='publie'
- AND dest.statut='publie'
- AND rubriques.id_rubrique = source.id_rubrique
- AND dest.id_rubrique = '\"."
- . calculer_argument_precedent($idb, 'id_rubrique',
- $boucles)
- . ".\"') OR (rubriques.id_rubrique = '\"."
- . calculer_argument_precedent($idb, 'id_rubrique',
- $boucles)
- . ".\"'))
- ";
- return;
- } else
- erreur_squelette(_T('zbug_info_erreur_squelette'), $param);
- }
-
- // cas normal (articles) : la table possede un champ id_trad
- if ($param == 'traduction') {
- $boucle->where[] = "((".$boucle->id_table.".id_trad > 0 AND "
- . $boucle->id_table.".id_trad ='\"."
- . calculer_argument_precedent($idb, 'id_trad',
- $boucles)
- . ".\"')
- OR
- (" . $boucle->id_table.".".$boucle->primary." ='\"."
- . calculer_argument_precedent($idb, $boucle->primary,
- $boucles)
- . ".\"'))";
- } else
- erreur_squelette(_T('zbug_info_erreur_squelette'), $param);
-}
-
-?>
\ No newline at end of file
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
include_spip('inc/headers');
-// acces aux documents joints securise
-// verifie soit que le demandeur est authentifie
-// soit que le document est publie, c'est-a-dire
+// acces aux documents joints securises
+// verifie que le document est publie, c'est-a-dire
// joint a au moins 1 article, breve ou rubrique publie
// http://doc.spip.org/@action_acceder_document_dist
else if (!file_exists($file) OR !is_readable($file)) {
$status = 404;
} else {
- $where = "documents.fichier=".sql_quote(set_spip_doc($file))
- . ($arg ? " AND documents.id_document=".intval($arg): '');
+ $path = set_spip_doc($file);
+ $path2 = generer_acceder_document($f, $arg);
+ $where = "(documents.fichier=".sql_quote($path)
+ . ' OR documents.fichier=' . sql_quote($path2) . ')'
+ . ($arg ? (" AND documents.id_document=".intval($arg)) : '');
$doc = sql_fetsel("documents.id_document, documents.titre, documents.fichier, types.mime_type, types.inclus, documents.extension", "spip_documents AS documents LEFT JOIN spip_types_documents AS types ON documents.extension=types.extension",$where);
if (!$doc) {
default:
header("Content-Type: ". $doc['mime_type']);
- // pour les images ne pas passer en attachment
- // sinon, lorsqu'on pointe directement sur leur adresse,
- // le navigateur les downloade au lieu de les afficher
+ // Si le fichier a un titre avec extension,
+ // ou si c'est un nom bien connu d'Unix, le prendre
+ // sinon l'ignorer car certains navigateurs pataugent
- if ($doc['inclus']=='non') {
+ $f = basename($file);
+ if (isset($doc['titre'])
+ AND (preg_match('/^\w+[.]\w+$/', $doc['titre']) OR $doc['titre'] == 'Makefile'))
+ $f = $doc['titre'];
- // Si le fichier a un titre avec extension,
- // ou si c'est un nom bien connu d'Unix, le prendre
- // sinon l'ignorer car certains navigateurs pataugent
+ $f = "filename=\"$f\"";
- $f = basename($file);
- if (isset($doc['titre'])
- AND (preg_match('/^\w+[.]\w+$/', $doc['titre']) OR $doc['titre'] == 'Makefile'))
- $f = $doc['titre'];
+ // Pour les document affichables par les navigateurs,
+ // ne pas envoyer "Content-Disposition: attachment" sinon
+ // le navigateur cree un fichier au lieu de l'afficher.
+ // Mais la propriete "affichable" n'est pas toujours devinable,
+ // il faut quand meme donner un nom au fichier eventuel.
+ // Celui-ci est malheureusement souvent ignore, cf
+ // http://greenbytes.de/tech/tc2231/
- // ce content-type est necessaire pour eviter des corruptions de zip dans ie6
- header('Content-Type: application/octet-stream');
+ if ($doc['inclus']!=='non') {
+ header("Content-Disposition: inline; $f");
+ } else {
+
+ header("Content-Disposition: attachment; $f;");
- header("Content-Disposition: attachment; filename=\"$f\";");
+ // ce content-type est necessaire
+ // pour eviter des corruptions de zip dans ie6
+ header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: binary");
// fix for IE catching or PHP bug issue
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
if (preg_match(",^Content-Type:\s*application/zip$,Uims",$head))
$extension = "zip";
- elseif (preg_match(",^Content-Disposition:\s*attachment;\s*filename=(.*)$,Uims",$head,$m)){
+ elseif (preg_match(',^Content-Disposition:\s*attachment;\s*filename="?([^"]+)"?$,Uims',$head,$m)){
$f = $m[1];
if (pathinfo($f, PATHINFO_EXTENSION)=="zip"){
$fichier = (_request('fichier')?
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
# renvoyer un formulaire de choix
redirige_par_entete("$redirect&cherche_auteur=$cherche&ids=" . join(',',$res) . $ancre);
- } else {
- include_spip('inc/actions');
- ajax_retour("action_editer_auteur: $arg faux");exit;
- }
+ } else redirige_par_entete("$redirect&ids=-1");
} else spip_log("action_editer_auteur: $arg pas compris");
}
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
- if (!preg_match(",^(-?\d+)$,", $arg, $r)) {
+ if (!preg_match(",^(-?\d+)(A?)$,", $arg, $r)) {
spip_log("action_editer_signature_dist $arg pas compris");
} else action_editer_signatures_post($r);
}
// http://doc.spip.org/@action_editer_signatures_post
function action_editer_signatures_post($r)
{
- $id = intval($r[1]);
+ $id = $id_article = intval($r[1]);
+ if ($r[2] == 'A')
+ $id = 0;
+ else $id_article = 0;
if ($id < 0){
$id = 0 - $id;
sql_updateq("spip_signatures", array("date_time" => date('Y-m-d H:i:s')), "id_signature=$id");
$id = 0;
}
-
+ } elseif ($id_article) {
+ action_editer_signatures_relance($id_article);
}
// Invalider les pages ayant trait aux petitions
- if ($id) {
- include_spip('inc/invalideur');
+ if (!$id_article AND $id) {
$id_article = sql_getfetsel("id_article", "spip_signatures", "id_signature=$id");
- suivre_invalideur("id='varia/pet$id_article'");
+ if ($id_article) {
+ include_spip('inc/invalideur');
+ suivre_invalideur("id='varia/pet$id_article'");
+ }
}
# cette requete devrait figurer dans l'optimisation
sql_delete("spip_signatures", "NOT (statut='publie' OR statut='poubelle') AND date_time<DATE_SUB(NOW(),INTERVAL 10 DAY)");
}
+
+// Relance toutes les signatures en attente
+
+function action_editer_signatures_relance($id_article)
+{
+ include_spip('formulaires/signature');
+ include_spip('inc/texte');
+ $url = generer_url_entite_absolue($id_article, 'article','','',true);
+ list($titre, $url) = signature_langue($id_article, $url);
+
+ $envoyer_mail = charger_fonction('envoyer_mail','inc');
+
+ $query = sql_select('*', 'spip_signatures', "id_article=$id_article AND NOT (statut='publie' OR statut='poubelle') AND date_time < DATE_SUB(NOW(), INTERVAL 1 DAY)", 'ad_email');
+ $n = 0;
+ while ($r = sql_fetch($query)) {
+ list($sujet, $corps) = signature_demande_confirmation($id_article, $url, $r['nom_email'], $r['nom_site'], $r['url_site'], $r['message'], $titre, $r['statut']);
+ if ($envoyer_mail($mail, $sujet, $corps)) $n++;
+ }
+ spip_log("$n signatures relancees pour $titre");
+}
?>
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
- @list(, $gz, $archive, $rub, $version) = explode(',', $arg);
+ @list(, , $archive, $rub) = explode(',', $arg);
$meta = base_dump_meta_name($rub);
+ $file = ramasse_parties($rub, $archive, $meta);
+ $size = !$file ? 0 : @(!file_exists($file) ? 0 : filesize($file));
+ $metatable = $meta . '_tables';
+ $tables = isset($GLOBALS['meta'][$metatable])?unserialize($GLOBALS['meta'][$metatable]):array();
+ effacer_meta($metatable);
+ effacer_meta($meta);
+ utiliser_langue_visiteur();
+ if (!$size)
+ $corps = _T('avis_erreur_sauvegarde', array('type'=>'.', 'id_objet'=>'. .'));
+ else {
+ $corps = export_all_report_size($file, $rub, $size, generer_url_ecrire())
+ . export_all_report_tables($tables);
+ }
+ include_spip('inc/minipres');
+ echo minipres(_T('info_sauvegarde'), $corps);
+}
+
+function export_all_rename($nom, $subdir)
+{
+ $dir = dirname($subdir);
+ $dest = $dir . '/' . $nom;
+ if (file_exists($dest)) {
+ $n = 1;
+ while (@file_exists($new = "$dir/$n-$nom")) $n++;
+ spip_log("renomme vieux $dest en $new");
+ @rename($dest, $new);
+ }
+ return $dest;
+}
+
+// Concatenation des tranches
+
+// http://doc.spip.org/@ramasse_parties
+function ramasse_parties($rub, $archive, $meta)
+{
$dir = base_dump_dir($meta);
- $file = $dir . $archive;
+ $files = preg_files($dir . $archive . ".part_[0-9]+_[0-9]+[.gz]?");
+ if (!$files) return false;
+ $ok = true;
+ $files_o = array();
+ $but = export_all_rename($archive, $dir);
+ // creer l'en tete du fichier
+ ecrire_fichier($but, export_entete(_VERSION_ARCHIVE),false);
+ foreach($files as $f) {
+ $contenu = "";
+ if (lire_fichier ($f, $contenu)) {
+ if (!ecrire_fichier($but,$contenu,false,false))
+ { $ok = false; break;}
+ }
+ spip_unlink($f);
+ $files_o[]=$f;
+ }
+ ecrire_fichier($but, export_enpied(),false,false);
+ spip_unlink($dir);
+ spip_log("concatenation " . join(' ', $files_o));
+ return $ok ? $but : false;
+}
- utiliser_langue_visiteur();
- export_all_fin($file, $meta, $rub);
+function export_all_end($meta, $archive){
+ $dir = base_dump_dir($meta);
+ $file = $dir . $archive;
}
-// http://doc.spip.org/@export_all_fin
-function export_all_fin($file, $meta, $rub)
+// http://doc.spip.org/@export_entete
+function export_entete($version_archive)
{
- global $spip_lang_left,$spip_lang_right;
+ return
+"<" . "?xml version=\"1.0\" encoding=\"".
+$GLOBALS['meta']['charset']."\"?".">\n" .
+"<SPIP
+ version=\"" . $GLOBALS['spip_version_affichee'] . "\"
+ version_base=\"" . $GLOBALS['spip_version_base'] . "\"
+ version_archive=\"" . $version_archive . "\"
+ adresse_site=\"" . $GLOBALS['meta']["adresse_site"] . "\"
+ dir_img=\"" . _DIR_IMG . "\"
+ dir_logos=\"" . _DIR_LOGOS . "\"
+>\n";
+}
- $metatable = $meta . '_tables';
- $tables_sauvegardees = isset($GLOBALS['meta'][$metatable])?unserialize($GLOBALS['meta'][$metatable]):array();
- effacer_meta($meta);
- effacer_meta($metatable);
- $size = @(!file_exists($file) ? 0 : filesize($file));
+// production de l'en-pied du fichier d'archive
+// http://doc.spip.org/@export_enpied
+function export_enpied () { return "</SPIP>\n";}
+
+function export_all_report_size($dest, $rub, $size, $retour)
+{
+ global $spip_lang_left,$spip_lang_right;
- if (!$size) {
- $corps = _T('avis_erreur_sauvegarde', array('type'=>'.', 'id_objet'=>'. .'));
-
- } else {
- $subdir = dirname($file);
- $dir = dirname($subdir);
- $nom = basename($file);
- $dest = $dir . '/' . $nom;
- if (file_exists($dest)) {
- $n = 1;
- while (@file_exists($new = "$dir/$n-$nom")) $n++;
- @rename($dest, $new);
- }
- if (@rename($file, $dest)) {
- spip_unlink($subdir);
- spip_log("$file renomme en $dir/$nom");
- }
// ne pas effrayer inutilement: il peut y avoir moins de fichiers
// qu'annonce' si certains etaient vides
- $n = _T('taille_octets', array('taille' => number_format($size, 0, ' ', ' ')));
+ $n = _T('taille_octets', array('taille' => number_format($size, 0, ' ', ' ')));
// cette chaine est a refaire car il y a double ambiguite:
// - si plusieurs SPIP dans une base SQL (cf table_prefix)
// - si on exporte seulement une rubrique
# _T('info_sauvegarde_reussi_02',
- if ($rub) {
+ if ($rub) {
$titre = sql_getfetsel('titre', 'spip_rubriques', "id_rubrique=$rub");
$titre = _T('info_sauvegarde_rubrique_reussi',
- array('archive' => ':<br /><b>'.joli_repertoire("$dir/$nom")."</b> ($n)", 'titre' => "<b>$titre</b>"));
- }
- else
+ array('archive' => ':<br /><b>'.joli_repertoire($dest)."</b> ($n)", 'titre' => "<b>$titre</b>"));
+ } else
$titre = _T('info_sauvegarde_reussi_02',
- array('archive' => ':<br /><b>'.joli_repertoire("$dir/$nom")."</b> ($n)"));
+ array('archive' => ':<br /><b>'.joli_repertoire($dest)."</b> ($n)"));
- $corps = "<p style='text-align: $spip_lang_left'>".
+ include_spip('inc/filtres');
+ return "<p style='text-align: $spip_lang_left'>".
$titre .
- " <a href='" . generer_url_ecrire() . "'>".
+ " <a href='" . $retour . "'>".
_T('info_sauvegarde_reussi_03')
. "</a> "
._T('info_sauvegarde_reussi_04')
- . "</p>\n";
-
- include_spip('inc/filtres');
- $corps .= "<div style='text-align: $spip_lang_right'>"
- . bouton_action(_T("retour"), generer_url_ecrire())
- . "</div>";
-
- // afficher la liste des tables qu'on a sauvegarde
- sort($tables_sauvegardees);
- $n = floor(count($tables_sauvegardees)/2);
- $corps .= "<div style='width:49%;float:left;'><ul><li>" . join('</li><li>', array_slice($tables_sauvegardees,0,$n)) . "</li></ul></div>"
- . "<div style='width:49%;float:left;'><ul><li>" . join('</li><li>', array_slice($tables_sauvegardees,$n)) . "</li></ul></div>"
- . "<div class='nettoyeur'></div>";
- }
- include_spip('inc/minipres');
- echo minipres(_T('info_sauvegarde'), $corps);
- exit;
+ . "</p>\n"
+ . "<div style='text-align: $spip_lang_right'>"
+ . bouton_action(_T("retour"), $retour)
+ . "</div>" ;
}
-
+function export_all_report_tables($tables_sauvegardees)
+{
+ sort($tables_sauvegardees);
+ $n = floor(count($tables_sauvegardees)/2);
+
+ return "<div style='width:49%;float:left;'><ul><li>"
+ . join('</li><li>', array_slice($tables_sauvegardees,0,$n))
+ . "</li></ul></div>"
+ . "<div style='width:49%;float:left;'><ul><li>"
+ . join('</li><li>', array_slice($tables_sauvegardees,$n))
+ . "</li></ul></div>"
+ . "<div class='nettoyeur'></div>";
+}
?>
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
include_spip('action/editer_auteur');
$c = array(
- array('statut'=>$statut,'id_parent'=>intval(_request('id_parent')),'restreintes'=>_request('restreintes'))
+ 'statut'=>$statut,'id_parent'=>intval(_request('id_parent')),'restreintes'=>_request('restreintes')
);
instituer_auteur($id_auteur, $c);
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
if (!defined('_ECRIRE_INC_VERSION')) return;
include_spip('inc/cookie');
+include_spip('public/aiguiller');
-// http://doc.spip.org/@action_logout_dist
+/**
+ * Se deloger
+ * Pour eviter les CSRF on passe par une etape de confirmation si pas de jeton,
+ * avec un autosubmit js pour ne pas compliquer l'experience utilisateur
+ *
+ * http://doc.spip.org/@action_logout_dist
+ *
+ */
function action_logout_dist()
{
- global $visiteur_session, $ignore_auth_http;
$logout =_request('logout');
$url = _request('url');
- // cas particulier, logout dans l'espace public
- if ($logout == 'public' AND !$url)
- $url = url_de_base();
-
- // seul le loge peut se deloger (mais id_auteur peut valoir 0 apres une restauration avortee)
- if (is_numeric($visiteur_session['id_auteur'])) {
- include_spip('inc/auth');
- auth_trace($visiteur_session, '0000-00-00 00:00:00');
- // le logout explicite vaut destruction de toutes les sessions
- if (isset($_COOKIE['spip_session'])) {
+ // seul le loge peut se deloger
+ // (mais id_auteur peut valoir 0 apres une restauration avortee)
+ if (isset($GLOBALS['visiteur_session']['id_auteur'])
+ AND is_numeric($GLOBALS['visiteur_session']['id_auteur'])
+ // des sessions anonymes avec id_auteur=0 existent,
+ // mais elles n'ont pas de statut : verifier ca aussi
+ AND isset($GLOBALS['visiteur_session']['statut'])) {
+ // relancer si pas de jeton
+ if (!action_logout_secu($logout, $url, _request('jeton'))) {
+ return; // page submit retournee
+ } elseif (isset($_COOKIE['spip_session'])) {
+ // le logout explicite vaut destruction de toutes les sessions
+
$session = charger_fonction('session', 'inc');
- $session($visiteur_session['id_auteur']);
+ $session($GLOBALS['visiteur_session']['id_auteur']);
spip_setcookie('spip_session', $_COOKIE['spip_session'], time()-3600);
}
- // si authentification http, et que la personne est loge,
- // pour se deconnecter, il faut proposer un nouveau formulaire de connexion http
- if (isset($_SERVER['PHP_AUTH_USER']) AND !$ignore_auth_http AND $GLOBALS['auth_can_disconnect']) {
- ask_php_auth(_T('login_deconnexion_ok'),
- _T('login_verifiez_navigateur'),
- _T('login_retour_public'),
- "redirect=". _DIR_RESTREINT_ABS,
- _T('login_test_navigateur'),
- true);
-
- }
+ include_spip('inc/auth');
+ auth_trace($GLOBALS['visiteur_session'],'0000-00-00 00:00:00');
}
-
- // Rediriger en contrant le cache navigateur (Safari3)
+ // Action terminee (ou non faite si pas les droits) on redirige.
+ // Cas particulier, logout dans l'espace public
+ $url = securiser_redirect_action($url);
+ if ($logout == 'public' AND !$url)
+ $url = url_de_base();
include_spip('inc/headers');
redirige_par_entete($url
+ // contrer le cache navigateur (Safari3)
? parametre_url($url, 'var_hasard', uniqid(rand()), '&')
: generer_url_public('login'));
}
+/**
+ * Verifier un jeton si present, ou envoyer une page le produisant
+ * @param string $logout
+ * @param string $url
+ * @param string $jeton
+ * @return boolean
+ */
+
+function action_logout_secu($logout, $url, $jeton)
+{
+ if ($jeton AND verifier_jeton_logout($jeton,$GLOBALS['visiteur_session']))
+ return true;
+ $jeton = generer_jeton_logout($GLOBALS['visiteur_session']);
+ $action = generer_url_action("logout","jeton=$jeton");
+ $action = parametre_url($action,'logout',$logout);
+ $action = parametre_url($action,'url',$url);
+ include_spip("inc/minipres");
+ include_spip("inc/filtres");
+ $texte = bouton_action(_T('spip:icone_deconnecter'),$action);
+ $texte = "<div class='boutons'>$texte</div>";
+ $texte .= '<script type="text/javascript">document.write("<style>body{visibility:hidden;}</style>");window.document.forms[0].submit();</script>';
+ echo minipres(_T('spip:icone_deconnecter'),$texte,'',true);
+ return false;
+}
+
+/**
+ * Generer un jeton de logout personnel et ephemere
+ * @param array $session
+ * @param null|string $alea
+ * @return string
+ */
+function generer_jeton_logout($session,$alea=null){
+ if (is_null($alea)){
+ if (!isset($GLOBALS['meta']['alea_ephemere'])){
+ include_spip('base/abstract_sql');
+ $GLOBALS['meta']['alea_ephemere'] = sql_getfetsel('valeur', 'spip_meta', "nom='alea_ephemere'");
+ }
+ $alea = $GLOBALS['meta']['alea_ephemere'];
+ }
+
+ $jeton = md5($session['date_session']
+ .$session['id_auteur']
+ .$session['statut']
+ .$alea
+ );
+ return $jeton;
+}
+
+/**
+ * Verifier que le jeton de logout est bon
+ * il faut verifier avec alea_ephemere_ancien si pas bon avec alea_ephemere
+ * pour gerer le cas de la rotation d'alea
+ * @param string $jeton
+ * @param array $session
+ * @return bool
+ */
+function verifier_jeton_logout($jeton,$session){
+ if (generer_jeton_logout($session)===$jeton)
+ return true;
+ if (!isset($GLOBALS['meta']['alea_ephemere_ancien'])){
+ include_spip('base/abstract_sql');
+ $GLOBALS['meta']['alea_ephemere_ancien'] = sql_getfetsel('valeur', 'spip_meta', "nom='alea_ephemere_ancien'");
+ }
+ if (generer_jeton_logout($session,$GLOBALS['meta']['alea_ephemere_ancien'])===$jeton)
+ return true;
+ return false;
+}
+
?>
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2010 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
function action_redirect_dist()
{
$type = _request('type');
- if (!preg_match('/^\w+$/', $type)) return;
+ $id = intval(_request('id'));
+
if ($m = _request('var_mode')) {
$GLOBALS['var_urls'] = true; // forcer la mise a jour de l'url de cet objet !
- $m = 'var_mode='.urlencode($m);
}
- $h = generer_url_entite_absolue(intval(_request('id')), $type, $m, '', true);
+
+ if (preg_match('/^\w+$/', $type)) {
+ $h = generer_url_entite_absolue($id, $type, '', '', true);
+ }
+ else if ($page = _request('page')
+ AND preg_match('/^\w+$/', $page)) {
+ $h = generer_url_public($page, '', true);
+ }
+ else return;
+
+ if ($m > '')
+ $h = parametre_url($h, 'var_mode', $m);
+
+ if ($m == 'preview'
+ AND defined('_PREVIEW_TOKEN')
+ AND _PREVIEW_TOKEN
+ AND autoriser('previsualiser')
+ AND $aut = $GLOBALS['visiteur_session']['id_auteur'] ) {
+ include_spip('inc/securiser_action');
+ $token = _action_auteur('previsualiser', $aut, null, 'alea_ephemere');
+ $h = parametre_url($h, 'var_previewtoken', "$aut*$token");
+ }
+
$status = '302';
if (_request('status') AND _request('status')=='301')
$status = '301';
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
{
list(,,$id_rubrique) = $r;
sql_delete("spip_rubriques", "id_rubrique=$id_rubrique");
+ sql_delete("spip_mots_rubriques", "id_rubrique=$id_rubrique");
// Les admin restreints qui n'administraient que cette rubrique
// deviennent redacteurs
// (il y a sans doute moyen de faire ca avec un having)
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
$npad = $npad/$this->bytesString;
$length = count($ords);
$ords[] = 0x80; // append the "1" bit followed by 7 0's
- $ords = array_pad($ords,ceil(($length+32/$this->bytesString)/$npad)*$npad-32/$this->bytesString,0);
+ $pad = ceil(($length+32/$this->bytesString)/$npad)*$npad-32/$this->bytesString;
+ $ords = array_pad($ords,$pad,0);
+
+ $pad *= $this->bytesString;
+ $bin = array_pad(array(), $pad>>5, 0);
$mask = (1 << $this->bytesString) - 1;
- for($i = 0; $i < count($ords) * $this->bytesString; $i += $this->bytesString)
+ for($i = 0; $i < $pad ; $i += $this->bytesString)
$bin[$i>>5] |= ($ords[$i / $this->bytesString] & $mask) << (24 - $i%32);
$bin[] = $length*$this->bytesString;
return $bin;
$split_length = abs($split_length);
if (($split_length == 0) || ($strlen == 0)) {
- $result = false;
+ return false;
} elseif ($split_length >= $strlen) {
- $result[] = $string;
+ return array($string);
} else {
$length = $split_length;
-
+ $result = array();
for ($i = 0; $i < $strlen; $i++)
{
$i = (($sign < 0) ? $i + $length : $i);
? ($strlen - ($i + 1))
: $split_length;
}
+ return $result;
}
-
- return $result;
}
}
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// login et mot de passe
if (strlen($new_login)){
if (strlen($new_login) < _LOGIN_TROP_COURT)
- return 'info_login_trop_court';
+ return _T('info_login_trop_court');
else {
$n = sql_countsel('spip_auteurs', "login=" . sql_quote($new_login) . " AND id_auteur!=".intval($id_auteur)." AND statut!='5poubelle'",'','',$serveur);
if ($n)
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// http://doc.spip.org/@balise_FORMULAIRE_INSCRIPTION_stat
function balise_FORMULAIRE_INSCRIPTION_stat($args, $context_compil) {
list($mode, $focus, $id) = $args;
+
$mode = tester_config($id, $mode);
return $mode ? array($mode, $focus, $id) : '';
}
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2010 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2010 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
$s = !$p->id_boucle ? '' : $p->boucles[$p->id_boucle]->sql_serveur;
if ($s) {
- if (!$GLOBALS['connexions'][strtolower($s)]['spip_connect_version']) {
- $code = "404";
- } else {
- // si une fonction de generation des url a ete definie pour ce connect l'utiliser
- // elle devra aussi traiter le cas derogatoire type=page
- if (function_exists($f = 'generer_generer_url_'.$s)){
+ // si une fonction de generation des url a ete definie pour ce connect l'utiliser
+ // elle devra aussi traiter le cas derogatoire type=page
+ if (function_exists($f = 'generer_generer_url_'.$s)){
if ($args) $code .= ", $args";
$code = $f('page', $code, $s);
return $p;
- }
- $s = 'connect=' . addslashes($s);
- $args = $args ? "$args . '&$s'" : "'$s'";
}
+ $s = 'connect=' . addslashes($s);
+ $args = $args ? "$args . '&$s'" : "'$s'";
}
if (!$code) {
$noentities = $p->etoile ? "'&'" : '';
//
// #URL_ECRIRE{naviguer} -> ecrire/?exec=naviguer
-//
+// #URL_ECRIRE* meme chose, mais sans convertir les & en &
// http://doc.spip.org/@balise_URL_ECRIRE_dist
function balise_URL_ECRIRE_dist($p) {
$fonc = $code;
else {$code = "(\$f = $code)"; $fonc = '$f';}
$args = interprete_argument_balise(2,$p);
- if ($args != "''" && $args!==NULL)
- $fonc .= ',' . $args;
+ if ($args === NULL) $args = "''";
+ $noentities = $p->etoile ? ", true" : '';
+ if (($args != "''") OR $noentities)
+ $fonc .= ",$args$noentities";
}
$p->code = 'generer_url_ecrire(' . $fonc .')';
if ($code)
function balise_URL_ACTION_AUTEUR_dist($p) {
$p->descr['session'] = true;
- if ($p->boucles[$p->id_boucle]->sql_serveur) {
- $p->code = 'generer_url_public("404")';
- return $p;
+ $script = interprete_argument_balise(1,$p);
+ if (!$script OR $script == "''") {
+ $msg = array('zbug_balise_sans_argument',
+ array('balise' => ' URL_ACTION_AUTEUR'));
+ erreur_squelette($msg, $p);
+ } else {
+ $args = interprete_argument_balise(2,$p);
+ if (!$args) $args = "''";
+ $redirect = interprete_argument_balise(3,$p);
+ // cas d'un appel (squelette) avec '' comme valeur de redirection
+ if ($redirect == "''")
+ $redirect = "";
+ if ($redirect)
+ $redirect = ",$redirect";
+ $p->code = "generer_action_auteur($script,$args$redirect)";
}
-
- $p->code = interprete_argument_balise(1,$p);
- $args = interprete_argument_balise(2,$p);
- if ($args != "''" && $args!==NULL)
- $p->code .= ",".$args;
- $redirect = interprete_argument_balise(3,$p);
- if ($redirect != "''" && $redirect!==NULL)
- $p->code .= ",".$redirect;
-
- $p->code = "generer_action_auteur(" . $p->code . ")";
$p->interdire_scripts = false;
return $p;
}
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
function sql_showbase($spip=NULL, $serveur='', $option=true)
{
if ($spip == NULL){
- $connexion = $GLOBALS['connexions'][$serveur ? $serveur : 0];
+ $connexion = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
$spip = $connexion['prefixe'] . '\_%';
}
function sql_showtable($table, $table_spip = false, $serveur='', $option=true)
{
if ($table_spip){
- $connexion = $GLOBALS['connexions'][$serveur ? $serveur : 0];
+ $connexion = $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
$prefixe = $connexion['prefixe'];
$vraie_table = preg_replace('/^spip/', $prefixe, $table);
} else $vraie_table = $table;
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
if (!isset($GLOBALS['db_ok'])) {
// fera mieux la prochaine fois
if ($install) return false;
- if ($f AND $readable)
- spip_log("spip_connect: fichier de connexion '$f' OK.");
- else
- spip_log("spip_connect: fichier de connexion '$f' non trouve");
- spip_log("spip_connect: echec connexion ou serveur $index mal defini dans '$f'.");
+ spip_log("spip_connect: serveur $index mal defini dans '$f'. spip_connect_version: " . @$GLOBALS['spip_connect_version']);
// ne plus reessayer si ce n'est pas l'install
return $connexions[$index]=false;
}
return '';
}
+/**
+ * Echapper les textes entre ' ' ou " " d'une requete SQL
+ * avant son pre-traitement
+ * On renvoi la query sans textes et les textes separes, dans
+ * leur ordre d'apparition dans la query
+ *
+ * @param string $query
+ * @return array
+ */
+function query_echappe_textes($query){
+ static $codeEchappements = array("''"=>"\x1@##@\x1", "\'"=>"\x2@##@\x2", "\\\""=>"\x3@##@\x3");
+ $query = str_replace(array_keys($codeEchappements), array_values($codeEchappements), $query);
+ if (preg_match_all("/((['])[^']*(\\2))|(([\"])[^\"]*(\\5))/S",$query,$textes)){
+ $textes = reset($textes); // indice 0 du match
+ switch(count($textes)){
+ case 0:$replace=array();break;
+ case 1:$replace=array('%1$s');break;
+ case 2:$replace=array('%1$s','%2$s');break;
+ case 3:$replace=array('%1$s','%2$s','%3$s');break;
+ case 4:$replace=array('%1$s','%2$s','%3$s','%4$s');break;
+ case 5:$replace=array('%1$s','%2$s','%3$s','%4$s','%5$s');break;
+ default:
+ $replace = range(1,count($textes));
+ $replace = '%'.implode('$s,%',$replace).'$s';
+ $replace = explode(',',$replace);
+ break;
+ }
+ $query = str_replace($textes,$replace,$query);
+ }
+ else
+ $textes = array();
+
+ return array($query, $textes);
+}
+
+/**
+ * Reinjecter les textes d'une requete SQL a leur place initiale,
+ * apres traitement de la requete
+ *
+ * @param string $query
+ * @param array $textes
+ * @return string
+ */
+function query_reinjecte_textes($query, $textes){
+ static $codeEchappements = array("''"=>"\x1@##@\x1", "\'"=>"\x2@##@\x2", "\\\""=>"\x3@##@\x3");
+ # debug de la substitution
+ #if (($c1=substr_count($query,"%"))!=($c2=count($textes))){
+ # spip_log("$c1 ::". $query,"tradquery"._LOG_ERREUR);
+ # spip_log("$c2 ::". var_export($textes,1),"tradquery"._LOG_ERREUR);
+ # spip_log("ini ::". $qi,"tradquery"._LOG_ERREUR);
+ #}
+ switch (count($textes)){
+ case 0:break;
+ case 1:$query=sprintf($query,$textes[0]);break;
+ case 2:$query=sprintf($query,$textes[0],$textes[1]);break;
+ case 3:$query=sprintf($query,$textes[0],$textes[1],$textes[2]);break;
+ case 4:$query=sprintf($query,$textes[0],$textes[1],$textes[2],$textes[3]);break;
+ case 5:$query=sprintf($query,$textes[0],$textes[1],$textes[2],$textes[3],$textes[4]);break;
+ default:
+ array_unshift($textes,$query);
+ $query = call_user_func_array('sprintf',$textes);
+ break;
+ }
+
+ $query = str_replace(array_values($codeEchappements), array_keys($codeEchappements), $query);
+
+ return $query;
+}
+
// Pour compatibilite. Ne plus utiliser.
// http://doc.spip.org/@spip_query
function spip_query($query, $serveur='') {
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
include_spip('inc/rubriques');
calculer_rubriques();
if (!$res) ecrire_acces(); // Mise a jour du fichier htpasswd
- // revenir a l'accueil pour finir
- affiche_progression_javascript('100 %', 0);
+ affiche_progression_javascript('100 %', 0, '', $request['retour']);
}
// http://doc.spip.org/@import_all_milieu
effacer_meta('vieille_version_installee');
effacer_meta('restauration_status_tables');
effacer_meta('restauration_recopie_tables');
- if ($request['insertion'] == 'passe2')
- sql_drop_table("spip_translate");
-
+ if ($request['insertion'] == 'passe2') {
+ spip_log("destruction des translations " . _SPIP_TRANSLATE);
+ sql_drop_table(_SPIP_TRANSLATE);
+ }
}
?>
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
if (isset($tables_auxiliaires['spip_' .$nom])) {
$nom_sql = 'spip_' . $nom;
$fdesc = &$tables_auxiliaires[$nom_sql];
- } # table locale a cote de SPIP, comme non SPIP:
+ } else { # table locale a cote de SPIP, comme non SPIP:
+ $fdesc = array();
+ }
}
// faut il interpreter le prefixe 'spip_' ?
// S'il n'y a pas de key (cas d'une VIEW),
// on va inventer une PRIMARY KEY en prenant le premier champ
// de la table
- if (!$desc['key'])
- $desc['key']['PRIMARY KEY'] = array_shift(array_keys($desc['field']));
+ if (!$desc['key']){
+ $p = array_keys($desc['field']);
+ $desc['key']['PRIMARY KEY'] = array_shift($p);
+ }
$desc['table']= $nom_sql;
$desc['connexion']= $serveur;
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// Multimedia (peuvent utiliser le tag <embed>)
$tables_sequences = array(
+ 'aac' => 'Advanced Audio Coding',
+ 'ac3' => 'AC-3 Compressed Audio',
+ 'aifc' => 'Compressed AIFF Audio',
'aiff' => 'AIFF',
+ 'amr' => 'Adaptive Multi-Rate Audio',
'anx' => 'Annodex',
+ 'ape' => 'Monkey\'s Audio File',
'axa' => 'Annodex Audio',
'axv' => 'Annodex Video',
'asf' => 'Windows Media',
'f4v' => 'Video for Adobe Flash Player',
'flac' => 'Free Lossless Audio Codec',
'flv' => 'Flash Video',
+ 'm2p' => 'MPEG-PS',
+ 'm2ts' => 'BDAV MPEG-2 Transport Stream',
+ 'm4r' => 'iPhone Ringtone',
'm4v' => 'MPEG4 Video',
'm4a' => 'MPEG4 Audio',
'm4b' => 'MPEG4 Audio',
'mp4' => 'MPEG4',
'mpc' => 'Musepack',
'mpg' => 'MPEG',
+ 'mts' => 'AVCHD MPEG-2 transport stream',
'oga' => 'Ogg Audio',
'ogg' => 'Ogg Vorbis',
'ogv' => 'Ogg Video',
'rm' => 'RealAudio',
'spx' => 'Ogg Speex',
'svg' => 'Scalable Vector Graphics',
+ 'svgz' => 'Compressed Scalable Vector Graphic',
'swf' => 'Flash',
+ 'ts' => 'MPEG transport stream',
'wav' => 'WAV',
'webm' => 'WebM',
- 'wmv' => 'Windows Media',
+ 'wma' => 'Windows Media Audio',
+ 'wmv' => 'Windows Media Video',
+ 'y4m' => 'YUV4MPEG2',
+ '3ga' => '3GP Audio File',
'3gp' => '3rd Generation Partnership Project'
);
// Documents varies
$tables_documents = array(
+ '7z' => '7 Zip',
'abw' => 'Abiword',
'ai' => 'Adobe Illustrator',
+ 'asx' => 'Advanced Stream Redirector',
+ 'bib' => 'BibTeX',
'bz2' => 'BZip',
'bin' => 'Binary Data',
'blend' => 'Blender',
'c' => 'C source',
'cls' => 'LaTeX Class',
+ 'csl' => 'Citation Style Language',
'css' => 'Cascading Style Sheet',
'csv' => 'Comma Separated Values',
'deb' => 'Debian',
'doc' => 'Word',
+ 'dot' => 'Word Template',
'djvu' => 'DjVu',
'dvi' => 'LaTeX DVI',
+ 'emf' => 'Enhanced Metafile',
+ 'enl' => 'EndNote Library',
+ 'ens' => 'EndNote Style',
+ 'epub' => 'ePub',
'eps' => 'PostScript',
+ 'gpx' => 'GPS eXchange Format',
'gz' => 'GZ',
'h' => 'C header',
'html' => 'HTML',
+ 'jar' => 'Java Archive',
'kml' => 'Keyhole Markup Language',
'kmz' => 'Google Earth Placemark File',
- 'm4u' => 'MPEG4 playliste',
+ 'lyx' => 'Lyx file',
+ 'mathml' => 'MathML',
+ 'm3u' => 'M3U Playlist',
+ 'm3u8' => 'M3U8 Playlist',
+ 'm4u' => 'MPEG4 Playlist',
'pas' => 'Pascal',
'pdf' => 'PDF',
'pgn' => 'Portable Game Notation',
+ 'pls' => 'Playlist',
+ 'pot' => 'PowerPoint Template',
'ppt' => 'PowerPoint',
'ps' => 'PostScript',
'psd' => 'Photoshop',
+ 'rar' => 'WinRAR',
+ 'rdf' => 'Resource Description Framework',
+ 'ris' => 'RIS',
'rpm' => 'RedHat/Mandrake/SuSE',
'rtf' => 'RTF',
- 'sdd' => 'StarOffice',
- 'sdw' => 'StarOffice',
+ 'sdc' => 'StarOffice Spreadsheet',
+ 'sdd' => 'StarOffice Presentation',
+ 'sdw' => 'StarOffice Writer document',
'sit' => 'Stuffit',
+ 'sla' => 'Scribus',
+ 'srt' => 'SubRip Subtitle',
+ 'ssa' => 'SubStation Alpha Subtitle',
'sty' => 'LaTeX Style Sheet',
'sxc' => 'OpenOffice.org Calc',
'sxi' => 'OpenOffice.org Impress',
'torrent' => 'BitTorrent',
'ttf' => 'TTF Font',
'txt' => 'texte',
+ 'usf' => 'Universal Subtitle Format',
'xcf' => 'GIMP multi-layer',
'xspf' => 'XSPF',
'xls' => 'Excel',
+ 'xlt' => 'Excel Template',
'xml' => 'XML',
+ 'wmf' => 'Windows Metafile',
+ 'wpl' => 'Windows Media Player Playlist',
+ 'yaml' => 'YAML',
'zip' => 'Zip',
// open document format
'tif' => 'image/tiff',
// Multimedia (peuvent utiliser le tag <embed>)
+ 'aac' => 'audio/mp4a-latm',
+ 'ac3' => 'audio/x-aac',
+ 'aifc' => 'audio/x-aifc',
'aiff' => 'audio/x-aiff',
+ 'amr' => 'audio/amr',
+ 'ape' => 'audio/x-monkeys-audio',
'asf' => 'video/x-ms-asf',
'avi' => 'video/x-msvideo',
'anx' => 'application/annodex',
'f4v' => 'video/mp4',
'flac' => 'audio/x-flac',
'flv' => 'video/x-flv',
+ 'm2p' => 'video/MP2P',
+ 'm2ts' => 'video/MP2T',
'm4a' => 'audio/mp4a-latm',
'm4b' => 'audio/mp4a-latm',
'm4p' => 'audio/mp4a-latm',
+ 'm4r' => 'audio/aac',
'm4u' => 'video/vnd.mpegurl',
'm4v' => 'video/x-m4v',
'mid' => 'audio/midi',
'mp3' => 'audio/mpeg',
'mp4' => 'application/mp4',
'mpc' => 'audio/x-musepack',
+ 'mts' => 'video/MP2T',
'mpg' => 'video/mpeg',
'oga' => 'audio/ogg',
'ogg' => 'audio/ogg',
'rm' => 'audio/x-pn-realaudio',
'spx' => 'audio/ogg',
'svg' => 'image/svg+xml',
+ 'svgz' => 'image/svg+xml',
'swf' => 'application/x-shockwave-flash',
+ 'ts' => 'video/MP2T',
'wav' => 'audio/x-wav',
'webm' => 'video/webm',
+ 'wma' => 'audio/x-ms-wma',
'wmv' => 'video/x-ms-wmv',
+ 'y4m' => 'video/x-raw-yuv',
+ '3ga' => 'audio/3ga',
'3gp' => 'video/3gpp',
// Documents varies
+ '7z' => 'application/x-7z-compressed',
'ai' => 'application/illustrator',
'abw' => 'application/abiword',
+ 'asx' => 'video/x-ms-asf',
+ 'bib' => 'application/x-bibtex',
'bin' => 'application/octet-stream', # le tout-venant
'blend' => 'application/x-blender',
'bz2' => 'application/x-bzip2',
'c' => 'text/x-csrc',
+ 'csl' => 'application/xml',
'css' => 'text/css',
'csv' => 'text/csv',
'deb' => 'application/x-debian-package',
'doc' => 'application/msword',
+ 'dot' => 'application/msword',
'djvu' => 'image/vnd.djvu',
'dvi' => 'application/x-dvi',
+ 'emf' => 'image/x-emf',
+ 'enl' => 'application/octet-stream',
+ 'ens' => 'application/octet-stream',
'eps' => 'application/postscript',
+ 'epub' => 'application/epub+zip', // pas enregistre par IANA
+ 'gpx' => 'application/gpx+xml', // pas enregistre par IANA
'gz' => 'application/x-gzip',
'h' => 'text/x-chdr',
'html' => 'text/html',
+ 'jar' => 'application/java-archive',
'kml' => 'application/vnd.google-earth.kml+xml',
'kmz' => 'application/vnd.google-earth.kmz',
+ 'lyx' => 'application/x-lyx',
+ 'm3u' => 'text/plain',
+ 'm3u8' => 'text/plain',
+ 'mathml' => 'application/mathml+xml',
'pas' => 'text/x-pascal',
'pdf' => 'application/pdf',
'pgn' => 'application/x-chess-pgn',
- 'ppt' => 'application/vnd.ms-powerpoint',
+ 'pls' => 'text/plain',
+ 'ppt' => 'application/vnd.ms-powerpoint',
+ 'pot' => 'application/vnd.ms-powerpoint',
'ps' => 'application/postscript',
'psd' => 'image/x-photoshop', // pas enregistre par IANA
+ 'rar' => 'application/x-rar-compressed',
+ 'rdf' => 'application/rdf+xml',
+ 'ris' => 'application/x-research-info-systems',
'rpm' => 'application/x-redhat-package-manager',
'rtf' => 'application/rtf',
+ 'sdc' => 'application/vnd.stardivision.calc',
'sdd' => 'application/vnd.stardivision.impress',
'sdw' => 'application/vnd.stardivision.writer',
'sit' => 'application/x-stuffit',
+ 'sla' => 'application/x-scribus',
+ 'srt' => 'text/plain',
+ 'ssa' => 'text/plain',
'sxc' => 'application/vnd.sun.xml.calc',
'sxi' => 'application/vnd.sun.xml.impress',
'sxw' => 'application/vnd.sun.xml.writer',
'torrent' => 'application/x-bittorrent',
'ttf' => 'application/x-font-ttf',
'txt' => 'text/plain',
+ 'usf' => 'application/xml',
'xcf' => 'application/x-xcf',
'xls' => 'application/vnd.ms-excel',
+ 'xlt' => 'application/vnd.ms-excel',
'xspf' => 'application/xspf+xml',
'xml' => 'application/xml',
+ 'wmf' => 'image/x-emf',
+ 'wpl' => 'application/vnd.ms-wpl',
+ 'yaml' => 'text/yaml',
'zip' => 'application/zip',
// Open Document format
'application/x-ogg' => 'application/ogg',
'video/mp4' => 'application/mp4',
'video/flv' => 'video/x-flv',
- 'audio/3gpp' => 'video/3gpp'
+ 'audio/3gpp' => 'video/3gpp',
+ 'image/jpg' => 'image/jpeg'
);
?>
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// http://doc.spip.org/@autres_bases
function autres_bases()
{
- $tables = bases_referencees(_FILE_CONNECT_TMP);
+ $tables = bases_referencees(_FILE_CONNECT);
if ($tables)
$tables = "<br /><br /><fieldset style='margin-bottom: 10px;'>"
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
_T('plugins_actif_aucun')
)."</h3>";
- $sub = "\n<div class='boutons' style='display:none;'>"
+ $sub = "\n<div class='boutons'>"
. "<input type='submit' class='submit save' value='"._T('bouton_enregistrer')
."' />"
. "</div>";
echo http_script("
jQuery(function(){
+ jQuery('#plugins .boutons').hide();
jQuery('.plugins li.item a[rel=info]').click(function(){
var li = jQuery(this).parents('li').eq(0);
var prefix = li.find('input.checkbox').attr('name');
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
if (!autoriser('sauvegarder')){
include_spip('inc/minipres');
echo minipres();
- } else {
+ } else exec_admin_tech_args(options_avancees_dump());
+}
+
+function exec_admin_tech_args($tables)
+{
$commencer_page = charger_fonction('commencer_page', 'inc');
echo $commencer_page(_T('titre_admin_tech'), "configuration", "base");
// Sauvegarde de la base
//
- echo debut_cadre_trait_couleur('',true,'',_T('texte_sauvegarde'),'sauvegarder');
-
// a passer en fonction
if (substr(_DIR_IMG, 0, strlen(_DIR_RACINE)) === _DIR_RACINE)
$dir_img = substr(_DIR_IMG,strlen(_DIR_RACINE));
)) .
"</p>";
+ $file = nom_fichier_dump();
+
$chercher_rubrique = charger_fonction('chercher_rubrique', 'inc');
- $form = $chercher_rubrique(0, 'rubrique', !$GLOBALS['connect_toutes_rubriques'], 0, 'admin_tech');
+ $form = $chercher_rubrique(0, $GLOBALS['connect_id_rubrique'] ? 'breve' : 'rubrique', $GLOBALS['connect_id_rubrique'], 0, 'admin_tech');
if ($form) {
+ if (preg_match('@^<select([^>]*)>(\s*<option[^>]*)>([^[<]+)(.*)$@s', $form, $r)) {
+ if (!strpos($r[2], 'selected='))
+ $r[2] .= " selected='selected'";
+ $form = "<select onchange='x=this.options[this.options.selectedIndex].firstChild.data.match(/\w+/); findObj_forcer(\"znom_sauvegarde\").value=x[0]; findObj_forcer(\"nom_sauvegarde\").value=x[0];'" . $r[1] . '>' . $r[2] . '>' . $r[3] . $r[4];
+ if ($GLOBALS['connect_id_rubrique'])
+ $file = trim($r[3]);
+ } elseif (preg_match('@^<input[^>]*>([^[<]+)@', $form, $r))
+ if ($GLOBALS['connect_id_rubrique'])
+ $file = trim($r[1]);
+
$res .= "\n<label for='id_parent'>" .
_T('texte_admin_tech_04') .
- "</label><br /><br />" .
- $form . '<br />';
+ "</label><br /><br />\n" .
+ $form . '<br /><br />';
}
- $file = nom_fichier_dump();
+
$nom = "\n<input name='nom_sauvegarde' id='nom_sauvegarde' size='40' value='$file' />";
$znom = "\n<input name='znom_sauvegarde' id='znom_sauvegarde' size='40' value='$file' />";
_T('bouton_radio_sauvegarde_non_compressee', array('fichier'=>'')) .
'</label><br /><b>' .
$dir_dump .
- "</b>$nom<b>.xml</b></li></ul>\n"
- . "\n<input type='hidden' name='reinstall' value='non' />";
+ "</b>$nom<b>.xml</b></li></ul>\n" .
+ "\n<input type='hidden' name='reinstall' value='non' />";
+
+ if (!$GLOBALS['connect_toutes_rubriques'])
+ foreach($tables as $k => $v)
+ if (!strpos($v, 'checked')) unset($tables[$k]);
+
+ $bloc = "<h3>"._T('install_tables_base')."</h3>" .
+ "\n<ol style='spip'><li>\n" .
+ join("</li>\n<li>", $tables) .
+ "</li></ol>\n";
- $res .= options_avancees_dump();
- echo
- generer_form_ecrire('export_all', $res, '', _T('texte_sauvegarde_base')),
+ $bloc = block_parfois_visible('export_tables', _T('info_options_avancees'), $bloc, '', false);
+
+ echo
+ debut_cadre_trait_couleur('',true,'',_T('texte_sauvegarde'),'sauvegarder'),
+ generer_form_ecrire('export_all', $res . $bloc, '', _T('texte_sauvegarde_base')),
fin_cadre_trait_couleur(true);
//
echo "<br />";
echo fin_gauche(), fin_page();
- }
}
function admin_sauvegardes($dir_dump, $tri)
function options_avancees_dump(){
list($tables,) = base_liste_table_for_dump(lister_tables_noexport());
- $plie = _T('info_options_avancees');
- $res = controle_tables_en_base('export', $tables);
- $res = "<h3>"._T('install_tables_base')."</h3>"
- . "\n<ol style='spip'><li>\n" .
- join("</li>\n<li>", $res) .
- "</li></ol>\n";
-
- $res = block_parfois_visible('export_tables', $plie, $res, '', false);
- return $res;
+ return controle_tables_en_base('export', $tables);
}
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2010 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
function help_section($aide, $contenu, $prof=2)
{
$maxprof = ($prof >=2) ? "12" : "1";
- $r = "@<h$prof" . '(?: class="spip")?' . '>\s*' . $aide
+ $r = "@<h$prof" . '(?: class="spip")?' . '>\s*' . preg_quote($aide)
."\s*(?:/.+?)?</h$prof>(.*?)<(?:(?:h[$maxprof])|/body)@ism";
if (preg_match($r, $contenu, $m))
global $help_server;
if (!is_array($help_server)) $help_server = array($help_server);
if (!preg_match(_HELP_PLACE_IMG, _request('img'), $r)) {
- aide_index_frame(_request('var_lang_r'),
- _request('lang_r'),
- _request('frame'),
- strtr(_request('aide'),'<>"\'', '____'),
- $help_server);
+ aide_index_frame(
+ preg_replace(',[^\w-]+,', '', _request('var_lang_r')),
+ preg_replace(',[^\w-]+,', '', _request('lang_r')),
+ _request('frame'),
+ strtr(_request('aide'),'<>"\'', '____'),
+ $help_server);
} else {
list (,$server, $cache, $rep, $lang, $file, $ext) = $r;
if ($rep=="IMG" AND $lang=="cache"
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
aide ("suiviforum"),
"</p>";
- $img = http_img_pack('feed.png', 'RSS', '', 'RSS');
$url = bouton_spip_rss('forums_public', array("id_article" => $id_article));
echo "<div style='text-align: $spip_lang_right;'>", $url, "</div>";
echo "<td>" . http_img_pack('rien.gif', " ", "width='10'") ."</td>\n";
echo "<td style='width: 100%'>";
echo _T('texte_messages_publics');
- echo "<a href='$url'>".gros_titre($titre,'', false)."</a>";
+ echo gros_titre("<a href='$url'>$titre</a>",'', false);
echo "</td></tr></table>";
}
?>
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
lettres_d_auteurs(requete_auteurs($tri, $statut, $recherche), $debut, MAX_AUTEURS_PAR_PAGE, $tri);
- $recherche = auteurs_tranches(afficher_n_auteurs($auteurs), $debut, $lettre, $tri, $statut, MAX_AUTEURS_PAR_PAGE, $nombre_auteurs,$cherche);
+
+ $arg = ($statut ? ("&statut=" .urlencode($statut)) : '')
+ . ($cherche ? ("&recherche=" . urlencode($cherche)) : '');
+
+ $recherche = auteurs_tranches(afficher_n_auteurs($auteurs), $debut, $lettre, $tri, $statut, MAX_AUTEURS_PAR_PAGE, $nombre_auteurs, $arg);
if ($cherche){
+ $cherche = htmlspecialchars($cherche);
if (count($auteurs))
$recherche = "<h3>". _T('info_resultat_recherche')." «$cherche»</h3>" . $recherche;
else
$visiteurs ? _T('info_visiteurs') : _T('info_auteurs'),
"auteurs","redacteurs");
- echo bandeau_auteurs($tri, $visiteurs);
+ echo bandeau_auteurs($visiteurs);
echo $trouve, "<div class='nettoyeur'></div>";
}
// http://doc.spip.org/@bandeau_auteurs
-function bandeau_auteurs($tri, $visiteurs)
+function bandeau_auteurs($visiteurs)
{
- global $connect_id_auteur, $connect_statut, $connect_toutes_rubriques;
+ global $connect_id_auteur;
$ret = debut_gauche("auteurs",true) . debut_boite_info(true);
else
$ret .= "\n<p class='arial1'>"._T('info_gauche_auteurs'). '</p>';
- if ($connect_statut == '0minirezo')
+ if (autoriser('voir', 'auteur'))
$ret .= "\n<p class='arial1'>". _T('info_gauche_auteurs_exterieurs') . '</p>';
$ret .= fin_boite_info(true);
$ret .= pipeline('affiche_gauche',array('args'=>array('exec'=>'auteurs'),'data'=>''));
- if ($connect_statut == '0minirezo') {
+ if (autoriser('voir', 'auteur')) {
- if ($connect_toutes_rubriques)
+ if (autoriser('creer', 'auteur'))
$res = icone_horizontale(_T('icone_creer_nouvel_auteur'), generer_url_ecrire("auteur_infos", 'new=oui'), "auteur-24.gif", "creer.gif", false);
else $res = '';
}
// http://doc.spip.org/@auteurs_tranches
-function auteurs_tranches($auteurs, $debut, $lettre, $tri, $statut, $max_par_page, $nombre_auteurs, $cherche='')
+function auteurs_tranches($auteurs, $debut, $lettre, $tri, $statut, $max_par_page, $nombre_auteurs, $arg='')
{
global $spip_lang_right;
- $arg = ($statut ? ("&statut=" .urlencode($statut)) : '')
- . ($cherche ? ("&recherche=" . urlencode($cherche)) : '');
-
$res ="\n<tr class='titrem'>"
. "\n<th style='width: 20px'>";
// http://doc.spip.org/@requete_auteurs
function requete_auteurs($tri, $statut, $recherche=NULL)
{
- global $connect_statut, $spip_lang, $connect_id_auteur;
+ global $connect_id_auteur;
- //
- // Construire la requete
- //
-
// si on n'est pas minirezo, ignorer les auteurs sans article
// sauf les admins, toujours visibles.
// limiter les statuts affiches
- if ($connect_statut == '0minirezo') {
+ if (autoriser('voir', 'auteur')) {
if ($statut[0]=='!') {
$statut = substr($statut,1); $not = "NOT";
} else $not = '';
$visit = !statut_min_redac($statut);
$statut = preg_split('/\W+/', $statut);
- $sql_visible = sql_in("aut.statut", $statut, $not);
+ $where = sql_in("aut.statut", $statut, $not);
} else {
- $sql_visible = "(
+ $where = "(
aut.statut = '0minirezo'
OR aut.id_auteur=$connect_id_auteur
OR " . sql_in('art.statut', array('prop', 'publie'))
. ')';
$visit = false;
}
+ if ($recherche) $where .= " AND $recherche" ;
+ return requete_auteurs_tri($tri, $where, $visit);
+}
+
+function requete_auteurs_tri($tri, $where, $visit=false)
+{
+ global $spip_lang;
$sql_sel = '';
$join = $visit ?
""
:
- (strpos($sql_visible,'art.statut')?("LEFT JOIN spip_auteurs_articles AS lien ON aut.id_auteur=lien.id_auteur" . " LEFT JOIN spip_articles AS art ON (lien.id_article = art.id_article)"):"");
+ (strpos($where,'art.statut')?("LEFT JOIN spip_auteurs_articles AS lien ON aut.id_auteur=lien.id_auteur" . " LEFT JOIN spip_articles AS art ON (lien.id_article = art.id_article)"):"");
// tri
switch ($tri) {
$join = $visit ?
"LEFT JOIN spip_forum AS lien ON aut.id_auteur=lien.id_auteur"
: ("LEFT JOIN spip_auteurs_articles AS lien ON aut.id_auteur=lien.id_auteur"
- . (strpos($sql_visible,'art.statut')?" LEFT JOIN spip_articles AS art ON (lien.id_article = art.id_article)":""));
+ . (strpos($where,'art.statut')?" LEFT JOIN spip_articles AS art ON (lien.id_article = art.id_article)":""));
break;
case 'site':
"UPPER(aut.nom) AS unom",
$sql_sel),array('',null)),
'FROM' => "spip_auteurs AS aut $join",
- 'WHERE' => $sql_visible . ($recherche
- ? " AND $recherche"
- : ''),
+ 'WHERE' => $where,
'GROUP BY' => "aut.statut, aut.nom_site, aut.nom, aut.id_auteur",
'ORDER BY' => $sql_order);
}
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
$statut = $row['statut'];
if ($forum_stat == "prive" OR $forum_stat == "privoff") {
return array('pref' => _T('item_reponse_article'),
- 'url' => generer_url_ecrire("articles","id_article=$id_article"),
+ 'url' => generer_url_ecrire("articles#poster_forum_prive-$id_forum","id_article=$id_article"),
'type' => 'id_article',
'valeur' => $id_article,
'titre' => $titre);
if ($forum_notes = safehtml(calculer_notes()))
$suite .= "<div class='notes controle'>".justifier(safehtml($forum_notes))."</div>";
- if (strlen($forum_url_site) > 10 AND strlen($forum_nom_site) > 3)
+ if (strlen($forum_url_site) > 10 AND strlen($forum_nom_site) >= 3)
$suite .= "\n<div style='text-align: left' class='serif'><b><a href='$forum_url_site'>$forum_nom_site</a></b></div>";
return "\n<div><br /><a id='forum$id_forum'></a></div>" .
} else {
if (!preg_match('/^\w+$/', $type)) $type = 'public';
- $formulaire_recherche = formulaire_recherche("controle_forum","<input type='hidden' name='type' value='$type' />");
-
list($from,$where) = critere_statut_controle_forum($type, $id_rubrique, $recherche);
+ exec_controle_forum_args2($id_rubrique, $type, $debut, $pas, $enplus, $recherche, $from, $where, intval(_request('debut_id_forum')));
+ }
+}
+
+function exec_controle_forum_args2($id_rubrique, $type, $debut, $pas, $enplus, $recherche, $from, $where, $debut_id_forum)
+{
// Si un id_controle_forum est demande, on adapte le debut
- if ($debut_id_forum = intval(_request('debut_id_forum'))
+ if ($debut_id_forum
AND (NULL !== ($d = sql_getfetsel('date_heure', 'spip_forum', "id_forum=$debut_id_forum")))) {
$debut = sql_countsel($from, $where . (" AND F.date_heure > '$d'"));
}
if (_AJAX) {
ajax_retour($res);
} else {
- $ancre = 'controle_forum';
- $res = "<div id='$ancre' class='serif2'>$res</div>";
-
pipeline('exec_init',array('args'=>array('exec'=>'controle_forum', 'type'=>$type),'data'=>''));
-
$commencer_page = charger_fonction('commencer_page', 'inc');
echo $commencer_page(_T('titre_page_forum_suivi'), "forum", "forum-controle");
echo creer_colonne_droite('', true);
echo pipeline('affiche_droite',array('args'=>array('exec'=>'controle_forum', 'type'=>$type),'data'=>''));
-
echo debut_droite('', true);
echo pipeline('affiche_milieu',array('args'=>array('exec'=>'controle_forum', 'type'=>$type),'data'=>''));
- echo $formulaire_recherche . "<div class='nettoyeur'></div>";
- echo $res;
+ echo formulaire_recherche("controle_forum","<input type='hidden' name='type' value='$type' />");
+ echo "<div class='nettoyeur'></div>";
+ echo "<div id='controle_forum' class='serif2'>", $res, "</div>";
echo fin_gauche(), fin_page();
}
- }
}
?>
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
function exec_controle_petition_args($id_article, $type, $date, $debut, $id_signature, $pas=NULL)
{
if ($id_signature) {
- $id_article = sql_getfetsel("id_article", "spip_signatures", "id_signature=$id_signature");
+ $r = sql_fetsel("id_article, statut", "spip_signatures", "id_signature=$id_signature");
+ $id_article = $r['id_article'];
+ $s = $r['statut'];
+ $type = ($s=='publie' OR $s=='poubelle') ? 'public' : 'interne';
$where = '(id_signature=' . sql_quote($id_signature) . ') AND ';
} else $where = '';
if ($id_article AND !($titre = sql_getfetsel("titre", "spip_articles", "id_article=$id_article"))) {
include_spip('inc/minipres');
echo minipres(_T('public:aucun_article'));
- } else controle_petition_args($id_article, $type, $date, $debut, $titre, $where, $pas);
+ } else controle_petition_args($id_article, $type, $date, $debut, $titre, $where, $pas, $id_signature);
}
-function controle_petition_args($id_article, $type, $date, $debut, $titre, $where, $pas)
+function controle_petition_args($id_article, $type, $date, $debut, $titre, $where, $pas, $id_signature=0)
{
if (!preg_match('/^\w+$/',$type)) $type = 'public';
if ($id_article) $where .= "id_article=$id_article AND ";
$res = $signatures('controle_petition', $id_article, $debut, $pas, $where, $order, $type);
if (_AJAX) {
- ajax_retour($res);
+ ajax_retour($res);
} else {
-
- if (autoriser('modererpetition')
- OR (
- $id_article > 0
- AND autoriser('modererpetition', 'article', $id_article)
- ))
- $ong = controle_petition_onglet($id_article, $debut, $type);
- else {
- $type = 'public';
- $ong = '';
- }
- controle_petition_page($id_article, $titre, $ong, $res);
+ $count = ($type != 'interne') ? 0 : sql_countsel("spip_signatures", $where);
+ controle_petition_page($id_article, $titre, $id_signature ? '' : $type, $res, $count);
}
}
// http://doc.spip.org/@controle_petition_page
-function controle_petition_page($id_article, $titre, $ong, $corps)
+function controle_petition_page($id_article, $titre, $type, $corps, $count)
{
- if ($id_article) {
- $a = generer_url_ecrire("statistiques_visites","id_article=$id_article");
- $rac = "<br /><br /><br /><br /><br />" .
- bloc_des_raccourcis(icone_horizontale(_T('icone_statistiques_visites'),$a, "statistiques-24.gif","rien.gif", false));
-
- $titre = "<a href='" .
+ $args = array();
+ $rac = '';
+
+ if (!(autoriser('modererpetition')
+ OR (
+ $id_article > 0
+ AND autoriser('modererpetition', 'article', $id_article)
+ ))) {
+ $ong = '';
+ } else {
+ $ong = controle_petition_onglet($id_article, $debut, $type, '');
+ if ($id_article) {
+ $h = generer_url_ecrire("statistiques_visites","id_article=$id_article");
+ $rac = icone_horizontale(_T('icone_statistiques_visites'), $h, "statistiques-24.gif","rien.gif", false);
+ if ($type !== 'public') {
+
+ $h = redirige_action_auteur('editer_signatures', $id_article . 'A', 'controle_petition', "id_article=$id_article&type=interne");
+ $rac .= icone_horizontale(_T('icone_relancer_signataire') . " ($count)", $h, "envoi-message-24.gif","rien.gif", false);
+ }
+ $rac = bloc_des_raccourcis($rac);
+ $titre = "<a href='" .
generer_url_entite($id_article,'article') .
"'>" .
typo($titre) .
$id_article .
")</span>";
- if (!sql_countsel('spip_petitions', "id_article=$id_article"))
- $titre .= '<br >' . _T('info_petition_close');
+ if (!sql_countsel('spip_petitions', "id_article=$id_article"))
+ $titre .= '<br >' . _T('info_petition_close');
+
+ $args = array('id_article' => $id_article);
+ } else {
+
+ $q = sql_select('A.titre, A.date, A.id_article, count(*) AS n',
+ 'spip_signatures AS S LEFT JOIN spip_articles AS A ON A.id_article=S.id_article',
+ '',
+ 'A.id_article',
+ 'n desc',
+ "0,10");
+ while ($r = sql_fetch($q)) {
+ $id = $r['id_article'];
+ $h = generer_url_entite($id, 'article');
+ $title = affdate_jourcourt($r['date']) . "\n" .$r['titre'];
+ $rac .= "<li><a href='$h' title=\"" . attribut_html($title). '">' . _T('info_numero_abbreviation') . " $id" . '</a> : '. $r['n'] . ' ' . _T('signatures') . "</li>";
+ }
+ if ($rac) $rac = "<ul>$rac</ul>";
+ $rac = debut_cadre_enfonce('',true)
+ . "\n<div style='font-size: x-small' class='verdana1'><b>"
+ ._T('public:articles_populaires')
+ ."</b>"
+ . $rac
+ . "</div>"
+ . fin_cadre_enfonce(true);
- $args = array('id_article' => $id_article);
- } else {
- $args = array();
- $rac = $titre = '';
+ }
+ $rac = "<br /><br /><br /><br /><br />" . $rac;
}
-
$head = _T('titre_page_controle_petition');
$idom = "editer_signature-" . $id_article;
$commencer_page = charger_fonction('commencer_page', 'inc');
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* - on renvoie
* vers action=export_all pour afficher le resume
*
+ * Deux parametres sont geres mais non disponibles en standard;
+ * $serveur : nom d'une base externe qu'on veut exporter
+ * $save : fonction creant la sauvegarde (defaut: inc_export_xml)
*/
include_spip('inc/presentation');
// http://doc.spip.org/@exec_export_all_dist
function exec_export_all_dist(){
- $rub = intval(_request('id_parent'));
- $meta = base_dump_meta_name($rub);
+ exec_export_all_init(intval(_request('id_parent')),
+ _request('gz'),
+ _request('export'),
+ preg_replace('@[^\d\w-_]@', '_', _request('serveur')),
+ preg_replace('@[^\d\w-_]@', '_', _request('save')));
+}
+function exec_export_all_init($rub, $gz, $tables, $serveur='', $save=''){
+ $meta = base_dump_meta_name($rub);
+ utiliser_langue_visiteur();
if (!isset($GLOBALS['meta'][$meta])){
// c'est un demarrage en arrivee directe depuis exec=admin_tech
// on initialise (mais si c'est le validateur, ne rien faire)
if ($GLOBALS['exec'] == 'valider_xml') return;
- exec_export_all_args($meta, $rub, _request('gz'));
+ $archive = exec_export_all_args($rub, $gz);
+ $tables = export_all_start($meta, $archive, $rub, $tables);
+ $v = array($gz, $archive, $rub, $tables, 1, 0, $serveur, $save);
+ ecrire_meta($meta, serialize($v), 'non');
+ // rub=$rub sert AUSSI a distinguer cette redirection
+ // d'avec l'appel initial sinon FireFox croit malin
+ // d'optimiser la redirection
+ $url = generer_url_ecrire('export_all',"rub=$rub", true);
+ } else {
+ // appels suivants
+ $export = charger_fonction('export', 'inc');
+ $arg = $export($meta);
+ // Si retour de $export c'est fini; dernier appel pour ramasser
+ // et produire l'en tete du fichier a partir de l'espace public
+ $url = generer_action_auteur("export_all",$arg,'',true, true, true);
}
-
- $export = charger_fonction('export', 'inc');
- $arg = $export($meta);
- @list(, $gz, $archive, $rub, $version) = explode(',', $arg);
-
- // quand on sort de $export c'est qu'on a fini
- export_all_end($meta,$archive);
-
include_spip('inc/headers');
- redirige_par_entete(generer_action_auteur("export_all",$arg,'',true, true));
-
+ redirige_par_entete($url);
}
-// L'en tete du fichier doit etre cree a partir de l'espace public
-// Ici on construit la liste des tables pour confirmation.
-// Envoi automatique en cas d'inaction (sauf si appel incorrect $nom=NULL)
-
-function exec_export_all_args($meta, $rub, $gz){
+function exec_export_all_args($rub, $gz){
$gz = $gz ? '.gz' : '';
$nom = $gz
: _request('nom_sauvegarde');
if (!preg_match(',^[\w_][\w_.]*$,', $nom)) $nom = 'dump';
- $archive = $nom . '.xml' . $gz;
-
- // si pas de tables listees en post, utiliser la liste par defaut
- if (!$tables = _request('export'))
- list($tables,) = base_liste_table_for_dump(lister_tables_noexport());
-
- export_all_start($meta, $gz, $archive, $rub, _VERSION_ARCHIVE, $tables);
-
+ return $nom . '.xml' . $gz;
}
+// Ici on construit la liste des tables pour confirmation.
-function export_all_start($meta, $gz, $archive, $rub, $version, $tables){
-
- // determine upload va aussi initialiser l'index "restreint"
- $maindir = determine_upload();
- if (!$GLOBALS['visiteur_session']['restreint'])
- $maindir = _DIR_DUMP;
- $dir = sous_repertoire($maindir, $meta);
- $file = $dir . $archive;
+function export_all_start($meta, $archive, $rub, $tables){
- utiliser_langue_visiteur();
+ // si pas de tables listees en post, utiliser la liste par defaut
+ if (!$tables)
+ list($tables,) = base_liste_table_for_dump(lister_tables_noexport());
// en mode partiel, commencer par les articles et les rubriques
// pour savoir quelles parties des autres tables sont a sauver
unset($tables[$t]);
array_unshift($tables, 'spip_articles');
}
+ if ($t = array_search('spip_documents', $tables)) {
+ unset($tables[$t]);
+ array_push($tables, 'spip_documents');
+ }
}
- // creer l'en tete du fichier et retourner dans l'espace prive
- ecrire_fichier($file, export_entete($version),false);
- $v = serialize(array($gz, $archive, $rub, $tables, 1, 0));
- ecrire_meta($meta, $v, 'non');
- include_spip('inc/headers');
- // rub=$rub sert AUSSI a distinguer cette redirection
- // d'avec l'appel initial sinon FireFox croit malin
- // d'optimiser la redirection
- redirige_url_ecrire('export_all',"rub=$rub");
-
-
-}
-
-function export_all_end($meta, $archive){
- $dir = base_dump_dir($meta);
- $file = $dir . $archive;
- ecrire_fichier($file, export_enpied(),false,false);
+ return $tables;
}
-// http://doc.spip.org/@export_entete
-function export_entete($version_archive)
-{
- return
-"<" . "?xml version=\"1.0\" encoding=\"".
-$GLOBALS['meta']['charset']."\"?".">\n" .
-"<SPIP
- version=\"" . $GLOBALS['spip_version_affichee'] . "\"
- version_base=\"" . $GLOBALS['spip_version_base'] . "\"
- version_archive=\"" . $version_archive . "\"
- adresse_site=\"" . $GLOBALS['meta']["adresse_site"] . "\"
- dir_img=\"" . _DIR_IMG . "\"
- dir_logos=\"" . _DIR_LOGOS . "\"
->\n";
-}
-
-
-// production de l'entete du fichier d'archive
-// http://doc.spip.org/@export_enpied
-function export_enpied () { return "</SPIP>\n";}
-
?>
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
*/
function exec_fond_dist(){
+ exec_fond_args(_request('exec'));
+}
+
+function exec_fond_args($exec){
+
+ $fond = trim(recuperer_fond("prive/exec/$exec", $_REQUEST));
// pas d'autorisation
- // c'est au fond de les gerer avec #AUTORISER, et de renvoyer un fond vide le cas echeant
+ // c'est au fond de les gerer avec #AUTORISER,
+ // et de renvoyer un fond vide le cas echeant
// qui declenchera un minipres acces interdit
- $exec = _request('exec');
- $fond = trim(recuperer_fond("prive/exec/$exec",$_REQUEST));
if (!$fond) {
include_spip('inc/minipres');
echo minipres();
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
*
*/
-
// Restauration d'une base. Comme ca peut etre interrompu pour cause
// de Timeout, un javascript relance automatiquement (cf inc/import.php)
// Comme il peut relancer une action qui vient de se terminer,
// http://doc.spip.org/@exec_import_all_dist
function exec_import_all_dist()
{
+ // permettre l'appel en GET
+ if (!$_POST) $_POST = $_GET;
$archive=_request('archive');
if (!strlen($archive)) {
$_POST['archive'] = $archive = _request('archive_perso');
}
+ exec_import_all_args($archive);
+}
- // si on arrive ici en debut d'operation
+function exec_import_all_args($archive)
+{
if ($archive) {
+ // On arrive ici en debut d'operation
+ // Est-ce une fusion ou un ecrasement ?
+ $insert = _request('insertion');
+ if (!$insert AND !autoriser('detruire'))
+ export_all_abort();
$dir = import_queldir();
$_POST['dir'] = $dir;
// voir si un message d'avertissement est necessaire
$commentaire = verifier_sauvegarde($dir . $archive);
-
- // est-ce une fusion de base au lieu d'un ecrasement ?
- $insert = _request('insertion');
- }
- // sinon, si on a bien la meta qui donne l'etat d'avancement
- // on est en cours d'operation
- elseif (isset($GLOBALS['meta']['import_all'])) {
- $request = @unserialize($GLOBALS['meta']['import_all']);
+ } else {
+ // sinon, si on a bien la meta qui donne l'etat d'avancement
+ // on est en cours d'operation
// Tester si l'archive est toujous la:
// ca sert pour forcer a sortir d'une restauration inachevee
- if (is_readable($request['dir'] . $request['archive'])) {
+
+ if (!isset($GLOBALS['meta']['import_all'])
+ OR (!$request = @unserialize($GLOBALS['meta']['import_all']))
+ OR (!is_readable($request['dir'] . $request['archive']))) {
+ // on ne sait pas quoi importer, il faut sortir de la
+ export_all_abort();
+ }
$archive = $request['archive'];
$insert = $request['insertion'];
$commentaire = '';
- }
}
-
- if ($archive) {
- // il faut changer cette chaine depuis qu'on fait aussi de la fusion
- // _T('info_restauration_sauvegarde',
- $action = _T($insert
+ $action = _T($insert
? 'info_restauration_sauvegarde_insert'
: 'info_restauration_sauvegarde',
array('archive' => $archive));
- $admin = charger_fonction('admin', 'inc');
- echo $admin('import_all', $action, $commentaire, !$insert);
- }
- // on ne sait pas quoi importer, il faut sortir de la
- // sauf s'il s'agit du validateur (a ameliorer)
- elseif (_request('exec') <> 'valider_xml') {
- include_spip('base/import_all');
- import_all_fin(array());
- include_spip('inc/import');
- detruit_restaurateur();
- effacer_meta('admin');
- // et verifier la session
- include_spip('inc/auth');
- if (!$auteur = auth_retrouver_login($GLOBALS['visiteur_session']['login'])
- OR $auteur['id_auteur']!=$GLOBALS['visiteur_session']['id_auteur'])
+ $admin = charger_fonction('admin', 'inc');
+ echo $admin('import_all', $action, $commentaire, !$insert);
+}
+
+function export_all_abort()
+{
+ // evacuer la fausse erreur du cas du validateur en boucle.
+ if (_request('exec') == 'valider_xml') return;
+ include_spip('base/import_all');
+ import_all_fin(array());
+ include_spip('inc/import');
+ detruit_restaurateur();
+ effacer_meta('admin');
+ // et verifier la session
+ include_spip('inc/auth');
+ $login = auth_retrouver_login($GLOBALS['visiteur_session']['login']);
+ $id_auteur = sql_getfetsel('id_auteur', 'spip_auteurs', 'login=' . sql_quote($login));
+ if ($GLOBALS['visiteur_session']['id_auteur'] != $id_auteur)
auth_deloger();
- else
+ else
redirige_url_ecrire();
- }
}
// http://doc.spip.org/@import_queldir
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2010 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// http://doc.spip.org/@afficher_site
function afficher_site($id_syndic, $id_rubrique, $nom_site, $row){
- global $spip_lang_left,
-$spip_lang_right;
+ global $spip_lang_right;
$cherche_mot = _request('cherche_mot');
$select_groupe = _request('select_groupe');
$id_secteur = $row["id_secteur"];
$url_site = $row["url_site"];
$url_syndic = $row["url_syndic"];
- $descriptif = $row["descriptif"];
$syndication = $row["syndication"];
$statut = $row["statut"];
$date_heure = $row["date"];
$date_syndic = $row['date_syndic'];
- $mod = $row['moderation'];
- $extra=$row["extra"];
$flag_administrable = autoriser('modifier','site',$id_syndic);
$flag_editable = ($flag_administrable OR ($GLOBALS['meta']["proposer_sites"] > 0 AND ($statut == 'prop')));
$moderation = $row['moderation'];
if ($moderation != 'oui') $moderation='non';
- $res = '';
- $res .= "<div style='text-align: ".$GLOBALS['spip_lang_left']."'>".
+ $res = "<div style='text-align: ".$GLOBALS['spip_lang_left']."'>".
_T('syndic_choix_moderation')
. "<div style='padding-$spip_lang_left: 40px;'>"
. afficher_choix('moderation', $moderation,
if (!preg_match(',^\s*select: (.*),', $row['url_syndic'], $regs))
return '';
- $url_site = $row["url_site"];
- $descriptif = $row["descriptif"];
- $statut = $row["statut"];
-
- $date_heure = $row["date"];
- $date_syndic = $row['date_syndic'];
- $mod = $row['moderation'];
- $extra=$row["extra"];
-
$res = "";
foreach (array('id_rubrique', 'nom_site', 'url_site', 'descriptif', 'statut') as $var) {
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
$result = sql_select("lang, SUM(".$critere.") AS cnt", "spip_articles", "statut='publie' ", "lang");
- echo "\n<table cellpadding='2' cellspacing='0' border='0' width='100%' style='border: 1px solid #aaaaaa;'>";
$ifond = 1;
-
$visites_abs = 0;
+ $res = '';
while ($row = sql_fetch($result)) {
$lang = $row['lang'];
$couleur="eeeeee";
}
- echo "\n<tr style='background-color: $couleur'>";
+ $res .= "\n<tr style='background-color: $couleur'>";
$dir=lang_dir($lang,'',' dir="rtl"');
- echo "<td style='width: 100%; border-bottom: 1px solid #cccccc;'><span class='verdana2'$dir><span style='float: $spip_lang_right;'>$pourcent%</span>".traduire_nom_langue($lang)."</span></td>";
+ $res .= "<td style='width: 100%; border-bottom: 1px solid #cccccc;'><span class='verdana2'$dir><span style='float: $spip_lang_right;'>$pourcent%</span>".traduire_nom_langue($lang)."</span></td>";
- echo "<td style='border-bottom: 1px solid #cccccc;'>";
- echo "\n<table cellpadding='0' cellspacing='0' border='0' width='".($taille+5)."'>";
- echo "\n<tr><td style='align:$spip_lang_right; background-color: #eeeeee; border: 1px solid #999999; white-space: nowrap;'>";
- if ($visites_abs > 0) echo "<img src='" . chemin_image('rien.gif') . "' width='$visites_abs' height='8' alt=' ' />";
- if ($visites>0) echo "<img src='" . chemin_image('rien.gif') . "' class='couleur_langue' style='border: 0px;' width='$visites' height='8' alt=' ' />";
- echo "</td></tr></table>\n";
+ $res .= "<td style='border-bottom: 1px solid #cccccc;'>";
+ $res .= "\n<table cellpadding='0' cellspacing='0' border='0' width='".($taille+5)."'>";
+ $res .= "\n<tr><td style='align:$spip_lang_right; background-color: #eeeeee; border: 1px solid #999999; white-space: nowrap;'>";
+ if ($visites_abs > 0) $res .= "<img src='" . chemin_image('rien.gif') . "' width='$visites_abs' height='8' alt=' ' />";
+ if ($visites>0) $res .= "<img src='" . chemin_image('rien.gif') . "' class='couleur_langue' style='border: 0px;' width='$visites' height='8' alt=' ' />";
+ $res .= "</td></tr></table>\n";
- echo "</td>";
- echo "</tr>";
+ $res .= "</td>";
+ $res .= "</tr>";
$visites_abs += $visites;
}
}
- echo "</table>\n";
+ if ($res)
+ echo "\n<table cellpadding='2' cellspacing='0' border='0' width='100%' style='border: 1px solid #aaaaaa;'>", $res, "</table>\n";
//echo "<p><span class='verdana1 spip_medium'>"._T('texte_signification')."</span>";
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
echo join("</li><li>\n", $res);
echo "</li></ul>";
echo $plus;
+ echo "</div><br />";
}
- echo "</div><br />";
echo fin_gauche(), fin_page();
}
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// http://doc.spip.org/@valider_xml_ok
function valider_xml_ok($url, $req_ext, $limit, $rec)
{
- $url = urldecode($url);
+ $url = urldecode(trim($url));
$rec = !$rec ? false : array();
if (!$limit) $limit = 200;
$titre = _T('analyse_xml');
$texte = $bandeau = $err = '';
} else {
include_spip('inc/distant');
-
if (is_dir($url)) {
$dir = (substr($url,-1,1) === '/') ? $url : "$url/";
$ext = !preg_match('/^[.*\w]+$/', $req_ext) ? 'php' : $req_ext;
}
if ($files) {
$res = valider_dir($files, $ext, $url);
- list($err, $res) = valider_resultats($res, $ext === 'html');
- $err = ' (' . $err . '/' . count($files) .')';
+ $mode = (($ext === 'html') AND substr_count($dir, '/') <= 1);
+ list($err, $terr, $res) = valider_resultats($res, $mode);
+ $err = '<br /><h2>' . $terr . " " . _T('erreur_texte') . " ($err/" . count($files) .')</h2>';
+ $res = $err . $res;
} else {
$res = _T('texte_vide');
$err = '';
}
- $bandeau = $dir . '*' . $ext . $err;
+ $bandeau = $dir . '*' . $ext ;
} else {
if (preg_match('@^((?:[.]/)?[^?]*)[?]([0-9a-z_]+)=([^&]*)(.*)$@', $url, $r)) {
list(,$server, $dir, $script, $args) = $r;
$transformer_xml = charger_fonction('valider', 'xml');
$onfocus = "this.value='" . addslashes($url) . "';";
if (preg_match(',^[a-z][0-9a-z_]*$,i', $url)) {
- $res = $transformer_xml(charger_fonction($url, $dir), $args);
- $url_aff = valider_pseudo_url($dir, $script);
+ if (($dir=='exec') AND (tester_url_ecrire($url) == 'fond')) {
+ include_spip('exec/fond');
+ $args = array($url, array());
+ $url = 'fond_args';
+ }
+ $res = valider_script($transformer_xml, $script, $dir, $ext, $args);
+ $url_aff = $res[3];
} else {
$res = $transformer_xml(recuperer_page($url));
$url_aff = entites_html($url);
list($texte, $err) = emboite_texte($res);
}
else {
- $err = '<h3>' . _T('spip_conforme_dtd') . '</h3>';
+ $err = '<h3>' . _T('spip_conforme_dtd') . '</h3>x';
list($texte, ) = emboite_texte($res);
}
$bandeau = "<a href='$url_aff'>$url</a>";
}
}
-
+ $titre .= ' ' . $url_aff;
$commencer_page = charger_fonction('commencer_page', 'inc');
$debut = $commencer_page($titre);
$jq = http_script("", 'jquery.js');
$onfocus = '<input type="text" size="70" value="' .$url_aff .'" name="var_url" id="var_url" onfocus="'.$onfocus . '" />';
$onfocus = generer_form_ecrire('valider_xml', $onfocus, " method='get'");
- echo "<h1>", $titre, '<br>', $bandeau, '</h1>',
+ echo "<h1>", $titre, '<br />', $bandeau, '</h1>',
"<div style='text-align: center'>", $onfocus, "</div>",
$res,
fin_page();
// http://doc.spip.org/@valider_resultats
function valider_resultats($res, $mode)
{
- $i = $j = 0;
+ $i = $j = $k = 0;
$table = '';
rsort($res);
foreach($res as $l) {
$err = (!intval($nb)) ? '' :
($erreurs[0][0] . ' ' . _T('ligne') . ' ' .
$erreurs[0][1] .($nb==1? '': ' ...'));
- if ($err) $j++;
+ if ($err) {$j++; $k+= $nb;}
$h = $mode
? ($appel . '&var_mode=debug&var_mode_affiche=validation')
: generer_url_ecrire('valider_xml', "var_url=" . urlencode($appel));
. "<td style='text-align: right$color'>$texte</td>"
. "<td style='text-align: right'>$temps</td>"
. "<td style='text-align: left'>$err</td>"
- . "<td>$script</td>"
- . "<td><a href='$h'>$appel</a></td>";
+ . "<td><a href='$h' title='$appel'>$script</a></td>";
}
- return array($j, "<table class='spip'>"
+
+ return array($j, $k, "<table class='spip' width='95%'>"
. "<tr><th>"
. _T('erreur_texte')
. "</th><th>"
. "</th><th>"
. _T('zbug_profile', array('time' =>''))
. "</th><th>"
- . _T('message')
- . "</th><th>Page</th><th>args"
+ . _T('public:message')
+ . "</th><th>"
+ . _T('ecrire:info_url')
. "</th></tr>"
. $table
- . "</table>");
+ . "</table>");
}
// http://doc.spip.org/@valider_script
-function valider_script($transformer_xml, $script, $dir, $ext)
+function valider_script($transformer_xml, $script, $dir, $ext, $args=true)
{
$script = basename($script, '.php');
$dir = basename($dir);
$f = charger_fonction($script, $dir, true);
// ne pas se controler soi-meme ni l'index du repertoire ni un fichier annexe
+
if ($script == _request('exec') OR $script=='index' OR !$f)
- return array('/', 0, '', $script,'');
+ return array(0, array(), $script,'');
- list($texte, $err) = $transformer_xml($f, true);
+ list($texte, $err) = $transformer_xml($f, $args);
$appel = '';
// s'il y a l'attribut minipres, le test est non significatif
- // le script necessite peut-etre des arguments, on lui en donne,
- // en appelant la fonction _args associee si elle existe
- // Si ca ne marche toujours pas, les arguments n'Ă©taient pas bons
- // ou c'est une authentification pour action d'administration;
- // tant pis, on signale le cas par un resultat negatif
-
- if (strpos($texte, "id='minipres'")) {
- if (!$g = charger_fonction($script . '_args', $dir, true)) {
- $res = 0 - strlen($res);
- } else {
- $args = array(1, 'id_article', 1);
- list($texte, $err) = $transformer_xml($g, $args);
- $appel = 'id_article=1&type=id_article&id=1';
- if (strpos($texte, "id='minipres'")) {
- $res = 0 - strlen($texte);
- } else $res = strlen($texte);
- }
- } else $res = strlen($texte);
+ // le script necessite peut-etre des arguments.
+ // On regarde alors s'il existe une fonction de meme nom
+ // mais avec "_args" au bout:
+ // elle est censee recevoir les valeurs de $_REQUEST et ne pas faire
+ // les controles d'autorisation (fait par la fonction principale)
+ // Si ou on l'appelle avec des arguments arbitraires;
+ // si nouvel echec on abandonne:
+ // que faire contre l'absence de reflexivite et de typage de ce fichu PHP
+ if (strpos($texte, "id='minipres'")
+ AND ($g = charger_fonction($script . '_args', $dir, true))) {
+ $args = array(1, 'id_article', 1, 0);
+ list($texte, $err) = $transformer_xml($g, $args);
+ $appel = 'id_article=1&type=id_article&id=1';
+ }
$appel = valider_pseudo_url($dir, $script, $appel);
- return array(count($err), $res, $err, $script, $appel);
+ return array($texte, $err, $script, $appel);
}
// http://doc.spip.org/@valider_pseudo_url
{
if (!lire_fichier ($file, $text)) return array('/', '/', $file,'');
if (!strpos($text, 'DOCTYPE')) {
- preg_match(",Content[-]Type: *\w+/(\S)+,", $text, $r);
+ preg_match(",Content[-]Type:\s*[^/]+/([^ ;]+),", $text, $r);
if ($r[1] === 'css' OR $r[1] === 'plain')
- return array('/', 'DOCTYPE?', $file,'');
+ return array(0, array(), $file,'');
}
if ($ext != 'html') {
$script = $file;
} else {
$script = basename($file,'.html');
- // pas de validation solitaire pour les squelettes internes, a revoir.
+ // les squelettes en sous-repertoire sont problematiques,
+ // traitons au moins le cas prive/exec
if (substr_count($dir, '/') <= 1) {
$url = generer_url_public($script, $contexte);
- } else $url = '';
+ } else $url = valider_pseudo_url(basename($dir), basename($file, '.html'), $contexte);
$composer = charger_fonction('composer', 'public');
list($skel_nom, $skel_code) = $composer($text, 'html', 'html', $file);
spip_log("compilation de $file en " . strlen($skel_code) . " octets de nom $skel_nom");
- if (!$skel_nom) return array('/', '/', $file,'');
+ if (!$skel_nom) return array('/', 0, $file,'');
$contexte = valider_contexte($skel_code, $file);
$page = $skel_nom(array('cache'=>''), array($contexte));
}
list($texte, $err) = $transformer_xml($page['texte']);
- $res = strlen($texte);
- return array(count($err), $res, $err, $script, $url);
+ return array($texte, $err, $script, $url);
}
// Analyser le code pour construire un contexte plausible complet
$res = array();
$transformer_xml = charger_fonction('valider', 'xml');
$valideur = $ext=='php' ? 'valider_script' : 'valider_skel' ;
+ include_spip('public/assembler');
foreach($files as $f) {
spip_timer($f);
$val = $valideur($transformer_xml, $f, $dir, $ext);
+ // Ne pas saturer la memoire, donner juste la taille de la page
+ // avec un nombre negatif quand c'est un message d'erreur
+ if (is_string($val[0])) {
+ $n = strlen($val[0]);
+ $val[0] = strpos($val[0], "id='minipres'") ? (0-$n):$n;
+ }
$n = spip_timer($f);
$val[]= $n;
+ array_unshift($val, count($val[1]));
spip_log("validation de $f en $n secondes");
$res[]= $val;
}
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
}
// http://doc.spip.org/@redirige_action_auteur
-function redirige_action_auteur($action, $arg, $ret, $gra='', $mode=false, $atts='') {
+function redirige_action_auteur($action, $arg, $ret, $gra='', $mode=false, $atts='', $public=false) {
- $r = _DIR_RESTREINT . generer_url_ecrire($ret, $gra, true, true);
+ $r = ($public ? _DIR_RESTREINT_ABS : _DIR_RESTREINT) .
+ generer_url_ecrire($ret, $gra, true, true);
- return generer_action_auteur($action, $arg, $r, $mode, $atts);
+ return generer_action_auteur($action, $arg, $r, $mode, $atts, $public);
}
// http://doc.spip.org/@redirige_action_post
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
include_spip('inc/filtres');
foreach($_POST as $n => $c) {
if (($n != 'fichier') AND !is_array($c))
- $suite .= "\n<input type='hidden' name='$n' value='" .
+ $suite .= "\n<input type='hidden' name='".htmlspecialchars($n)."' value='" .
entites_html($c) .
"' />";
}
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// http://doc.spip.org/@icone_table
function icone_table($type){
- $derog = array('document'=> 'doc-24.gif', 'mot'=>'mot-cle-24.gif','syndic_article'=>'site-24.gif', 'message' => 'messagerie-24.gif', 'groupes_mot'=>'mot-cle-24.gif');
+ $derog = array('document'=> 'doc-24.gif', 'mot'=>'mot-cle-24.gif','syndic_article'=>'site-24.gif', 'message' => 'messagerie-24.gif', 'groupes_mot'=>'mot-cle-24.gif', 'signature' => 'suivi-petition-24.gif');
if (isset($derog[$type]))
return $derog[$type];
return "$type-24.gif";
$presenter_liste = charger_fonction('presenter_liste', 'inc');
$tmp_var = 't_' . substr(md5(join('', $requete)), 0, 4);
- $styles = array(array('arial11', 7), array('arial11'), array('arial1'), array('arial1'), array('arial1 centered', 100), array('arial1', 38));
+ $styles = array(array('arial11', 7), array('arial11'), array('arial1'), array('arial1'), array('arial1 centered', 100), array('arial1', 42));
$tableau = array(); // ne sert pas ici
return $presenter_liste($requete, $skel, $tableau, $arg, $force, $styles, $tmp_var, $titre, icone_table($type));
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/// ceux-ci apparaissent TOUJOURS dans cet ordre
define('DEFAUT_D_ECHELLE',120); # 1 pixel = 2 minutes
+define('DEFAUT_DECALE', 4); # marge gauche en EM
+define('DEFAUT_TAILLE_HEURE', 0.7); # marge gauche en EM
define('DEFAUT_PARTIE_M', "matin");
define('DEFAUT_PARTIE_S', "soir");
return $script . $finurl;
}
+function calendrier_args_time($time, $script, $type, $fin='')
+{
+ if (!is_numeric($time)) $time = strtotime($time);
+ $jour = date("d",$time);
+ $mois = date("m",$time);
+ $annee = date("Y",$time);
+
+ return calendrier_args_date($script, $annee, $mois, $jour, $type, $fin);
+}
+
/// utilise la precedente pour produire une balise A avec tous les accessoires
// http://doc.spip.org/@calendrier_href
: '';
}
$d = mktime (1,1,1, $mois, $jour, $annee);
- $jour = date("d",$d);
- $mois = date("m",$d);
- $annee = date("Y",$d);
-
- $h = calendrier_args_date($script, $annee, $mois, $jour, $type, $fin);
- $url = $h . ($ancre ? "#$ancre" : '');
+ $url = calendrier_args_time($d, $script, $type, $fin) . ($ancre ? "#$ancre" : '');
$c = ($class ? " class=\"$class\"" : '');
if ($img) $clic = http_img_pack($img, ($alt ? $alt : $titre), $c);
}
}
$fond .= $ligne ? "bordure_$spip_lang_right" :'bordure_double';
- $ligne .= "\n<td class='$fond'>$res</td>";
+ $d = sprintf('D%4d-%02d-%02d', $annee_en_cours,$mois_en_cours,$jour);
+ $ligne .= "\n<td id='$d' class='$fond'>$res</td>";
}
return $total . ($ligne ? "\n<tr>$ligne</tr>" : '');
}
$evenements[$d] = !$evenements[$d] ? $r : array_merge($evenements[$d], $r);
$evt = http_calendrier_mois_sept($annee, $mois, $init, $init+ 6, $evenements, $script, $finurl, $ancre);
}
- } else $evt = "<tr><td>$evt</td></tr>";
+ } else $evt = "<tr><td >$evt</td></tr>";
$id = ($ancre ? $ancre : 'agenda') . "-nav";
$total = '';
for ($j=$jour; $j<$jour+7;$j++){
- $v = mktime(0,0,0,$mois, $j, $annee);
- $v = http_calendrier_ics($annee, $mois, $j, $echelle, $partie_cal, $largeur, $evt, '', ( (date("w",$v)==0 && test_espace_prive()) ?
+ $d = mktime(0,0,0,$mois, $j, $annee);
+ $v = http_calendrier_ics($annee, $mois, $j, $echelle, $partie_cal, $largeur, $evt, '', ( (date("w",$d)==0 && test_espace_prive()) ?
" jour_dimanche" :
- ((date("Ymd", $v) == $today) ?
+ ((date("Ymd", $d) == $today) ?
" jour_encours" :
" jour_gris") ) ) ;
- $total .= "\n<td>$v</td>";
+ $d = sprintf('D%4d-%02d-%02d', $annee,$mois,$j);
+ $total .= "\n<td id='$d'>$v</td>";
}
return "\n<tr class='heure'>$total</tr>";
}
$mil = http_calendrier_sept_un($annee, $mois, $jour, $evenements, $script, '', $ancre);
$droite = (!test_espace_prive() ? "" :http_calendrier_sept_un($annee, $mois, $jour+1,$evenements, $script, '', $ancre));
}
-
+ $d = sprintf('D%4d-%02d-%02d', $annee,$mois,$jour);
if (!test_espace_prive())
- return "<tr class='calendrier-3jours'><td colspan='5'>$mil</td></tr>";
- $gauche = !$gauche ? "<td colspan='3'>" : "<td>$gauche</td><td></td><td>";
+ return "<tr class='calendrier-3jours'><td id='$d' colspan='5'>$mil</td></tr>";
+ $gauche = !$gauche ? "<td colspan='3' id='$d'>" : "<td>$gauche</td><td></td><td id='$d'>";
return "<tr class='calendrier-3jours'>$gauche$mil</td><td></td><td>$droite</td></tr>";
}
function http_calendrier_ics($annee, $mois, $jour, $echelle, $partie_cal, $largeur, $evt, $style='', $class='') {
global $spip_lang_left;
- if (is_array($GLOBALS['calendrier_partie'][$partie_cal]))
- list($debut, $fin) = $GLOBALS['calendrier_partie'][$partie_cal];
- elseif (preg_match('/^(\d+)\D(\d+)$/', $partie_cal, $m))
- list(,$debut, $fin) = $m;
+ if (is_array($GLOBALS['calendrier_partie'][$partie_cal])) {
+ $debut = $GLOBALS['calendrier_partie'][$partie_cal]['debut'];
+ $fin = $GLOBALS['calendrier_partie'][$partie_cal]['fin'];
+ } elseif (preg_match('/^(\d+)\D(\d+)$/', $partie_cal, $m))
+ list(,$debut, $fin) = $m;
else {
$debut = 7;
$fin =21;
}
-
+
if ($echelle==0) $echelle = DEFAUT_D_ECHELLE;
list($dimheure, $dimjour, $fontsize, $padding) =
calendrier_echelle($debut, $fin, $echelle);
- $size = sprintf("%0.2f", 0.7+(10/$echelle));
+ $size = sprintf("%0.2f", DEFAUT_TAILLE_HEURE+(10/$echelle));
$style .= "height:${dimjour}px;font-size:${size}em;";
$date = date("Ymd", mktime(0,0,0,$mois, $jour, $annee));
$hauteur = calendrier_height ("$heure_debut:$minutes_debut", "$heure_fin:$minutes_fin", $debut, $fin, $dimheure, $dimjour);
if ($bas_prec >= $haut) $decale += 1;
- else $decale = ($echelle >= 120) ? 4 : 3;
+ else $decale = DEFAUT_DECALE -
+ (($echelle >= DEFAUT_D_ECHELLE) ? 0 : 1);
if ($bas > $bas_prec) $bas_prec = $bas;
$colors = $evenement['CATEGORIES'];
$sum .= "\n<span class='calendrier-attendee $colors'>$perso</span>";
$sum = pipeline('agenda_rendu_evenement',array('args'=>array('evenement'=>$evenement,'type'=>'ics'),'data'=>$sum));
- $width = ($largeur - 2 * ($padding+1));
+ $width = $largeur - ($padding<<1) - DEFAUT_DECALE;
$fontsize = sprintf("%0.2f", 1+(10/$echelle));
$style = "z-index:${i};${spip_lang_left}:${decale}em;top:${haut}px;height:${hauteur}px;width:${width}px;font-size:${fontsize}em;padding:${padding}px;$bordure";
$total .= "\n<div class='$colors calendrier-evt' style='$style'
return "\n<div class='calendrier-arial10 calendrier-evenement $opacity'>$sum\n</div>\n";
}
-/// Gestion du sous-tableau ATTENDEE.
-/// dans les version anterieures, ce n'etait pas un tableau
+/// Gestion du champ ATTENDEE.
+/// On admet un ID ou un mail, ou un tableau de ces choses.
+/// Si c'est un ID, on va chercher le mail dans la table des auteurs,
+/// a defaut le nom.
+/// Dans les deux cas, si on a bien un mail, on place le pseudo-protocole mailto
function construire_personne_ics($personnes)
{
- $r = is_array($personnes) ? $personnes : array($personnes);
- foreach ($r as $k => $p) {
- if ($a = email_valide($p) AND preg_match('/^[^@]+/', $a, $m))
- $r[$k] = "<a href='mailto:$a'>".preg_replace('/[.]/', ' ', $m[0]). "</a>";
- }
- return join(' ', $r);
+ $r = is_array($personnes) ? $personnes : array($personnes);
+ foreach ($r as $k => $p) {
+ if (!is_numeric($p)) {
+ $mail = email_valide($p);
+ if (preg_match('/^[^@]+/', $mail, $m))
+ $r[$k] = preg_replace('/[.]/', ' ', $m[0]);
+ } else {
+ $m = sql_fetsel("email, nom", 'spip_auteurs', "id_auteur=$p");
+ if ($m) {
+ $mail = $m['email'];
+ $r[$k] = $m['nom'] ? $m['nom'] : ($mail ? $mail : $p);
+ }
+ }
+ if ($mail)
+ $r[$k] = "<a href='mailto:$mail'>" . $r[$k] . "</a>";
+ }
+ return join(' ', $r);
}
/// fabrique un agenda sur 3 mois.
$cat = 'calendrier-couleur12';
else {
$cat = 'calendrier-couleur9';
- $auteurs = array_map('array_shift', sql_allfetsel("nom", "spip_auteurs AS A LEFT JOIN spip_auteurs_messages AS L ON L.id_auteur=A.id_auteur", "(L.id_message=$id_message AND (A.id_auteur!=$connect_id_auteur))"));
+ $auteurs = array_map('array_shift', sql_allfetsel('id_auteur', 'spip_auteurs_messages', "id_message=$id_message AND id_auteur!=$connect_id_auteur"));
}
}
}
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
return aider_icone(generer_url_ecrire("aide_index", $args));
}
-function aider_icone($url)
+function aider_icone($url, $clic= '')
{
global $spip_lang, $spip_lang_rtl;
- $t = _T('titre_image_aide');
-
+ if (!$clic) {
+ $t = _T('titre_image_aide');
+ $clic = http_img_pack("aide-12".aide_lang_dir($spip_lang,$spip_lang_rtl).".png",
+ _T('info_image_aide'),
+ " title=\"$t\" class='aide'");
+ }
return "\n <a class='aide'\nhref='"
. $url
. "'\nonclick=\"javascript:window.open(this.href,"
. "'spip_aide', "
. "'scrollbars=yes, resizable=yes, width=740, height=580'); "
. "return false;\">"
- . http_img_pack("aide-12".aide_lang_dir($spip_lang,$spip_lang_rtl).".png",
- _T('info_image_aide'),
- " title=\"$t\" class='aide'")
+ . $clic
. "</a>";
}
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// Documents distants : pas trop de verifications bloquantes, mais un test
// via une requete HEAD pour savoir si la ressource existe (non 404), si le
// content-type est connu, et si possible recuperer la taille, voire plus.
+
if ($mode == 'distant') {
include_spip('inc/distant');
if ($a = recuperer_infos_distantes($source)) {
// - interdit a l'upload ?
// - quelle extension dans spip_types_documents ?
// - est-ce "inclus" comme une image ?
+ list($nom_envoye, $ext, $titre, $inclus) = corriger_extension_et_nom($nom_envoye, $titrer);
- preg_match(",^(.*)\.([^.]+)$,", $nom_envoye, $match);
- @list(,$titre,$ext) = $match;
- // securite : pas de . en dehors de celui separant l'extension
- // sinon il est possible d'injecter du php dans un toto.php.txt
- $nom_envoye = str_replace('.','-',$titre).'.'.$ext;
- if ($titrer) {
- $titre = preg_replace(',[[:punct:][:space:]]+,u', ' ', $titre);
- } else $titre = '';
- $ext = corriger_extension(strtolower($ext));
-
- $row = sql_fetsel("inclus", "spip_types_documents", "extension=" . sql_quote($ext) . " AND upload='oui'");
-
- if ($row) {
- $type_inclus_image = ($row['inclus'] == 'image');
+ if ($inclus !== false) {
+ $type_inclus_image = ($inclus == 'image');
$fichier = copier_document($ext, $nom_envoye, $source);
} else {
)
);
+ if (strlen($a['fichier']) > 255) {
+ spip_log("Upload avec nom > 255 : " . $a['fichier']);
+ return;
+ }
$id = sql_insertq("spip_documents", $a);
pipeline('post_insertion',
return array($width, $height);
}
+// Regexp synthetisant un titre a partir d'un nom de fichier.
+// Exemple: squelette-de-Mozart-vers-5-ans.jpg => squelette de Mozart vers 5 ans
+define('_REGEXP_TITRER_DOCUMENT', ',[[:punct:][:space:]]+,u');
+
+function corriger_extension_et_nom($nom, $titrer=false)
+{
+ preg_match(",^(.*)\.([^.]+)$,", $nom, $match);
+ @list(,$titre,$ext) = $match;
+ // les navigateur devraient savoir que ceci est mime-type text
+ if (!$ext AND (strtolower($nom) === 'makefile'))
+ $ext = 'txt';
+ // securite : pas de . en dehors de celui separant l'extension
+ // sinon il est possible d'injecter du php dans un toto.php.txt
+ else $nom = str_replace('.','-',$titre).'.'.$ext;
+
+ if ($titrer) {
+ $titre = is_string($titre) ? $titre : preg_replace("%".$titre."%", ' ', $titre ? $titre : $nom);
+ } else $titre = '';
+ $ext = corriger_extension(strtolower($ext));
+ $row = sql_fetsel("inclus", "spip_types_documents", "extension=" . sql_quote($ext) . " AND upload='oui'");
+ return array($nom, $ext, $titre, $row ? $row['inclus'] : false);
+}
+
//
// Corrige l'extension du fichier dans quelques cas particuliers
// (a passer dans ecrire/base/typedoc)
return 'jpg';
case 'tiff':
return 'tif';
+ case 'aif':
+ return 'aiff';
case 'mpeg':
return 'mpg';
default:
function fixer_extension_document($doc) {
$extension = '';
$name = $doc['name'];
- if (preg_match(',[.]([^.]+)$,', $name, $r)
+ if (preg_match(',\.([^.]+)$,', $name, $r)
AND $t = sql_fetsel("extension", "spip_types_documents",
"extension=" . sql_quote(corriger_extension($r[1])))) {
$extension = $t['extension'];
- $name = preg_replace(',[.][^.]*$,', '', $doc['name']).'.'.$extension;
- }
- else if ($t = sql_fetsel("extension", "spip_types_documents",
- "mime_type=" . sql_quote($doc['type']))) {
- $extension = $t['extension'];
- $name = preg_replace(',[.][^.]*$,', '', $doc['name']).'.'.$extension;
+ $name = preg_replace(',\.[^.]*$,', '', $doc['name']).'.'.$extension;
+ } else {
+ // les navigateur devraient savoir que ceci est mime-type text
+ if (strtolower($name) === 'makefile') $doc['type'] = 'txt';
+ if ($t = sql_getfetsel("extension", "spip_types_documents",
+ "mime_type=" . sql_quote($doc['type']))) {
+ $name = preg_replace(',\.[^.]*$,', '', $doc['name']).'.'.$t;
+ }
}
-
return array($extension,$name);
}
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
$contexte = array(
'icone_retour'=>($retour)?icone_inline(_T('icone_retour'),$retour,"auteur-24.gif","rien.gif",$GLOBALS['spip_lang_left'],false,($editer&$redirect)?"":" onclick=\"jQuery('#auteur_infos_edit').hide();jQuery('#auteur-voir').show();return false;\""):"",
'redirect'=>$redirect?rawurldecode($redirect):generer_url_ecrire('auteur_infos','id_auteur='.$id_auteur, '&',true),
- 'titre'=>($auteur['nom']?$auteur['nom']:_T('nouvel_auteur')),
+ 'titre'=>($auteur['nom']?$auteur['nom']:_T('item_nouvel_auteur')),
'new'=>$new == "oui"?$new:$id_auteur,
'config_fonc'=>'auteurs_edit_config',
'lier_id_article' => $id_article,
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
{
if ($statut != 'nouveau') return $statut;
include_spip('inc/filtres');
- if (!($s = tester_config('', $bio))) return $statut;
+ include_spip('inc/autoriser');
+ if (!autoriser('inscrireauteur', $bio)) return $statut; //i.e. "nouveau"
include_spip('action/editer_auteur');
- instituer_auteur($id_auteur,array('statut'=> $s));
+ instituer_auteur($id_auteur,array('statut'=> $bio));
include_spip('inc/modifier');
revision_auteur($id_auteur, array('bio'=>''));
include_spip('inc/session');
- session_set('statut',$s);
- return $s;
+ session_set('statut',$bio);
+ return $bio;
}
// Fonction d'authentification. Retourne:
$connect_login = $row['login'];
$connect_statut = acces_statut($connect_id_auteur, $row['statut'], $row['bio']);
+ // on force l'Ă©criture de cette info dans le fichier de session
+ // pour pouvoir récupérer #SESSION{en_ligne} dans les squelettes
+ session_set('en_ligne', $row['en_ligne']);
$GLOBALS['visiteur_session'] = array_merge((array)$GLOBALS['visiteur_session'], $row);
$r = @unserialize($row['prefs']);
* @param <type> $re
* @param <type> $lien
*/
-function ask_php_auth($pb, $raison, $retour, $url='', $re='', $lien='') {
+function ask_php_auth($pb, $raison, $retour='', $url='', $re='', $lien='') {
@Header("WWW-Authenticate: Basic realm=\"espace prive\"");
@Header("HTTP/1.0 401 Unauthorized");
$ici = generer_url_ecrire();
+ $retour = $retour?$retour:_T('icone_retour');
echo "<b>$pb</b><p>$raison</p>[<a href='$ici'>$retour</a>] ";
if ($url) {
echo "[<a href='", generer_url_action('cookie',"essai_auth_http=oui&$url"), "'>$re</a>]";
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// http://doc.spip.org/@autoriser_previsualiser_dist
function autoriser_previsualiser_dist($faire, $type, $id, $qui, $opt) {
- return strpos($GLOBALS['meta']['preview'], ",". $qui['statut'] .",")
- !==false;
+
+ // Le visiteur a-t-il un statut prevu par la config ?
+ if (strpos($GLOBALS['meta']['preview'], ",". $qui['statut'] .",")
+ !==false)
+ return true;
+
+ // Sinon, on regarde s'il a un jeton (var_token) et on lui pose
+ // le cas echeant une session contenant l'autorisation
+ // de l'utilisateur ayant produit le jeton
+ if ($token = _request('var_previewtoken')) {
+ include_spip('inc/session');
+ session_set('previewtoken', $token);
+ }
+
+ // A-t-on un token valable ?
+ if (is_array($GLOBALS['visiteur_session'])
+ AND $token = session_get('previewtoken')
+ AND preg_match('/^(\d+)\*(.*)$/', $token, $r)
+ AND $action = 'previsualiser'
+ AND (include_spip('inc/securiser_action'))
+ AND (
+ $r[2] == _action_auteur($action, $r[1], null, 'alea_ephemere')
+ OR $r[2] == _action_auteur($action, $r[1], null, 'alea_ephemere_ancien')
+ )) {
+ return true;
+ }
+
+ return false;
}
function autoriser_dater_dist($faire, $type, $id, $qui, $opt) {
AND !$qui['restreint'];
}
+function autoriser_auteur_creer_dist($faire, $type, $id, $qui, $opt) {
+ return
+ $qui['statut'] == '0minirezo'
+ AND !$qui['restreint'];
+}
+
// Autoriser a modifier un groupe de mots $id
// y compris en ajoutant/modifiant les mots lui appartenant
// http://doc.spip.org/@autoriser_groupemots_modifier_dist
// ou si les webmestres sont fixes par constante (securite)
elseif ($opt['webmestre'] AND (defined('_ID_WEBMESTRES') OR !autoriser('webmestre')))
return false;
- // et toucher au statut d'un webmestre si il ne l'est pas lui meme
- elseif ($opt['statut'] AND autoriser('webmestre','',0,$id) AND !autoriser('webmestre'))
+ // et modifier un webmestre si il ne l'est pas lui meme
+ elseif (intval($id) AND autoriser('webmestre','',0,$id) AND !autoriser('webmestre'))
return false;
else
return true;
// http://doc.spip.org/@autoriser_rubrique_editermots_dist
function autoriser_rubrique_editermots_dist($faire,$quoi,$id,$qui,$opts){
// on recupere les champs du groupe s'ils ne sont pas passes en opt
- $droit = substr($GLOBALS['visiteur_session']['statut'],1);
if (!isset($opts['groupe_champs'])){
if (!$id_groupe = $opts['id_groupe'])
return false;
include_spip('base/abstract_sql');
$opts['groupe_champs'] = sql_fetsel("*", "spip_groupes_mots", "id_groupe=".intval($id_groupe));
}
- $droit = $opts['groupe_champs'][$droit];
return
- ($droit == 'oui')
+ ($opts['groupe_champs'][substr($qui['statut'],1)] == 'oui')
AND
// on verifie que l'objet demande est bien dans les tables liees
in_array(
return $droit;
}
+// Autorisation des inscriptions libres
+// a l'aide de la liste globale des statuts (tableau mode => nom du mode)
+
+// http://doc.spip.org/@tester_config
+function autoriser_inscrireauteur($faire, $quoi, $id, $qui, $opt){
+
+ switch (array_search($quoi, $GLOBALS['liste_des_statuts'])) {
+
+ case 'info_redacteurs' :
+ return ($GLOBALS['meta']['accepter_inscriptions'] == 'oui');
+
+ case 'info_visiteurs' :
+ return ($GLOBALS['meta']['accepter_visiteurs'] == 'oui' OR $GLOBALS['meta']['forums_publics'] == 'abo');
+
+ default:
+ return false;
+ }
+}
+
// Deux fonctions sans surprise pour permettre les tests
// Dire toujours OK
// http://doc.spip.org/@autoriser_ok_dist
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
AND array_values($paths[$i]) == array($total))
$i++;
- $racine = $i
- ? array_pop(array_keys($paths[$i-1])).'/'
- : '';
+ $racine = '';
+ if ($i){
+ $racine = array_keys($paths[$i-1]);
+ $racine = array_pop($racine).'/';
+ }
$quoi['remove'] = $racine;
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// $idem : en mode rubrique = la rubrique soi-meme
// http://doc.spip.org/@inc_chercher_rubrique_dist
function inc_chercher_rubrique_dist ($id_rubrique, $type, $restreint, $idem=0, $do='aff') {
- if (sql_countsel('spip_rubriques')<1)
+ $n = sql_countsel('spip_rubriques');
+ if ($n < 1)
return '';
// Mode sans Ajax :
// - soit parce qu'il y a peu de rubriques
if (_SPIP_AJAX < 1
OR $type == 'breve'
- OR sql_countsel('spip_rubriques') < _SPIP_SELECT_RUBRIQUES)
+ OR $n < _SPIP_SELECT_RUBRIQUES)
return selecteur_rubrique_html($id_rubrique, $type, $restreint, $idem);
else return selecteur_rubrique_ajax($id_rubrique, $type, $restreint, $idem, $do);
// http://doc.spip.org/@style_menu_rubriques
function style_menu_rubriques($i) {
- global $browser_name, $browser_version, $spip_lang_left;
+ global $browser_name, $spip_lang_left;
$espace = '';
if (preg_match(",mozilla,i", $browser_name)) {
//
include_spip('base/abstract_sql');
- $q = sql_select("id_rubrique, id_parent, titre, statut, lang, langue_choisie", "spip_rubriques", ($type == 'breve' ? ' id_parent=0 ' : ''), '', "0+titre,titre");
+ $where = array();
+ if ($type == 'breve')
+ $where[]= ' id_parent=0 ';
+ if (is_array($restreint) AND $restreint)
+ $where[]= sql_in('id_rubrique', $restreint);
+
+ $q = sql_select("id_rubrique, id_parent, titre, statut, lang, langue_choisie", "spip_rubriques", join(' AND ', $where), '', "0+titre,titre");
while ($r = sql_fetch($q)) {
if (autoriser('voir','rubrique',$r['id_rubrique'])){
// titre largeur maxi a 50
$titre .= ' ['.traduire_nom_langue($r['lang']).']';
$data[$r['id_rubrique']] = $titre;
$enfants[$r['id_parent']][] = $r['id_rubrique'];
- if ($id_rubrique == $r['id_rubrique']) $id_parent = $r['id_parent'];
}
}
// http://doc.spip.org/@selecteur_rubrique_ajax
function selecteur_rubrique_ajax($id_rubrique, $type, $restreint, $idem=0, $do) {
- ## $restreint indique qu'il faut limiter les rubriques affichees
- ## aux rubriques editables par l'admin restreint... or, ca ne marche pas.
+ ## $restreint, si c'est un tableau, limite les rubriques selectionnables
## Pour la version HTML c'est bon (cf. ci-dessus), mais pour l'ajax...
## je laisse ca aux specialistes de l'ajax & des admins restreints
## note : toutefois c'est juste un pb d'interface, car question securite
. $url
. "', this.parentNode.nextSibling, this.nextSibling,'',event)\"><img src='"
. chemin_image($icone)
- . "'\nstyle='vertical-align: middle;' alt=' ' /></a><img src='"
+ . "'\nstyle='vertical-align: middle;' alt='"._T('titre_image_selecteur')."' /></a><img src='"
. chemin_image('searching.gif')
. "' id='img_"
. $idom
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// http://doc.spip.org/@inc_commencer_page_dist
function inc_commencer_page_dist($titre = "", $rubrique = "accueil", $sous_rubrique = "accueil", $id_rubrique = "",$menu=true,$minipres=false, $alertes = true) {
- global $spip_ecran;
global $connect_id_auteur;
include_spip('inc/headers');
if (!$nom_site_spip = textebrut(typo($GLOBALS['meta']["nom_site"])))
$nom_site_spip= _T('info_mon_site_spip');
+ // Pour corriger la position des sous-menus principaux
+ // (quand intitules sur 2 lignes)
+
+ $js = repercuter_gadgets($id_rubrique);
$head = "<title>["
. $nom_site_spip
. "] " . textebrut(typo($titre)) . "</title>\n"
. (($c = $GLOBALS['meta']['charset']) ?
"; charset=$c" : '')
. "' />\n"
- . envoi_link($nom_site_spip,$minipres);
-
- // anciennement verifForm
- // et corriger position des sous-menus principaux (quand intitules sur 2 lignes)
- $head .= '
- <script type="text/javascript"><!--
- function calculer_top_bandeau_sec() {
-
- var hauteur_max = 0;
- var hauteur_bouton = 0;
-
- $(".boutons_admin a.boutons_admin .icon_texte").each(function(){
- hauteur_bouton = parseInt($(this).height());
- if (hauteur_bouton > hauteur_max) hauteur_max = hauteur_bouton;
- });
- $(".boutons_admin a.boutons_admin .icon_texte").height(hauteur_max);
- }
-
- $(document).ready(function(){
- verifForm();
- calculer_top_bandeau_sec();
- $("#page,#bandeau-principal")
- .mouseover(function(){
- if (typeof(window["changestyle"])!=="undefined") window.changestyle("garder-recherche");
- });
- '
- .
- repercuter_gadgets($id_rubrique)
- .'
- });
- // --></script>
- ';
+ . envoi_link($nom_site_spip,$minipres, $js);
return _DOCTYPE_ECRIRE
. html_lang_attributes()
// couleurs
$couleurs = charger_fonction('couleurs', 'inc');
- $items .= "<div id='preferences_couleurs' title='" . attribut_html(_T('titre_changer_couleur_interface')) . "'>";
+ $items .= "<div id='preferences_couleurs'>";
$items .= $couleurs() . "</div>";
$items .= "</div></li>";
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
'activer_statistiques' => 'non',
'activer_captures_referers' => 'non',
- 'documents_article' => 'non',
+ 'documents_article' => 'oui',
'documents_rubrique' => 'non',
'documents_date' => 'non',
'syndication_integrale' => 'oui',
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
'<a href="'
. generer_action_auteur('preferer',"couleur:$key",$ret)
. '"'
- . ' rel="'.generer_url_public('style_prive','ltr='
+
+ . ' title="'.generer_url_public('style_prive','ltr='
. $GLOBALS['spip_lang_left'] . '&'
. inc_couleurs_dist($key)).'"'
. $evt
.'>'
. http_img_pack("rien.gif",
- _T('choix_couleur_interface') . $key,
- "width='8' height='8' style='margin: 1px; background-color: " . $val['couleur_claire'] . ";'")
+ $key,
+ "width='8' height='8' style='margin: 1px; background-color: " . $val['couleur_claire'] . ";'",
+ _T('titre_changer_couleur_interface') . " $key"
+)
. "</a>";
}
$('head>link#cssprivee')
.clone()
.removeAttr('id')
- .attr('href', $(this).attr('rel'))
+ .attr('href', $(this).attr('title'))
.appendTo($('head'));
$.get($(this).attr('href'));
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
if (!defined('_INC_DISTANT_VERSION_HTTP')) define('_INC_DISTANT_VERSION_HTTP', "HTTP/1.0");
if (!defined('_INC_DISTANT_CONTENT_ENCODING')) define('_INC_DISTANT_CONTENT_ENCODING', "gzip");
-if (!defined('_INC_DISTANT_USER_AGENT')) define('_INC_DISTANT_USER_AGENT', 'SPIP-' .$GLOBALS['spip_version_affichee']. " (" .$GLOBALS['home_server']. ")");
+if (!defined('_INC_DISTANT_USER_AGENT')) define('_INC_DISTANT_USER_AGENT', 'SPIP-' . $GLOBALS['spip_version_affichee'] . " (" . $GLOBALS['home_server'] . ")");
-//@define('_COPIE_LOCALE_MAX_SIZE',2097152); // poids (inc/utils l'a fait)
-//
-// Cree au besoin la copie locale d'un fichier distant
-// mode = 'test' - ne faire que tester
-// mode = 'auto' - charger au besoin
-// mode = 'modif' - Si deja present, ne charger que si If-Modified-Since
-// mode = 'force' - charger toujours (mettre a jour)
-//
-// Prend en argument un chemin relatif au rep racine, ou une URL
-// Renvoie un chemin relatif au rep racine, ou false
-//
-// http://doc.spip.org/@copie_locale
-function copie_locale($source, $mode='auto') {
+define('_REGEXP_COPIE_LOCALE', ',' .
+ preg_replace('@^https?:@', 'https?:', $GLOBALS['meta']['adresse_site'])
+ . "/?spip.php[?]action=acceder_document.*file=(.*)$,");
- // si c'est la protection de soi-meme
- $reg = ',' . $GLOBALS['meta']['adresse_site']
- . "/?spip.php[?]action=acceder_document.*file=(.*)$,";
+//@define('_COPIE_LOCALE_MAX_SIZE',2097152); // poids (inc/utils l'a fait)
- if (preg_match($reg, $source, $local)) return substr(_DIR_IMG,strlen(_DIR_RACINE)) . urldecode($local[1]);
+/**
+ * Cree au besoin la copie locale d'un fichier distant
+ *
+ *
+ * Prend en argument un chemin relatif au rep racine, ou une URL
+ * Renvoie un chemin relatif au rep racine, ou false
+ *
+ * http://doc.spip.org/@copie_locale
+ *
+ * @param $source
+ * @param string $mode
+ * 'test' - ne faire que tester
+ * 'auto' - charger au besoin
+ * 'modif' - Si deja present, ne charger que si If-Modified-Since
+ * 'force' - charger toujours (mettre a jour)
+ * @param string $local
+ * permet de specifier le nom du fichier local (stockage d'un cache par exemple, et non document IMG)
+ * @return bool|string
+ */
+function copie_locale($source, $mode='auto') {
+ // si c'est la protection de soi-meme, retourner le path
+ if ($mode !== 'force' AND preg_match(_REGEXP_COPIE_LOCALE, $source, $local)) {
+ $source = substr(_DIR_IMG,strlen(_DIR_RACINE)) . urldecode($local[1]);
+ return @file_exists($source) ? $source : false;
+ }
$local = fichier_copie_locale($source);
$localrac = _DIR_RACINE.$local;
$t = ($mode=='force') ? false : @file_exists($localrac);
// test d'existence du fichier
- if ($mode == 'test') return $t ? $local : '';
+ if ($mode=='test') return $t ? $local : '';
// si $local = '' c'est un fichier refuse par fichier_copie_locale(),
// par exemple un fichier qui ne figure pas dans nos documents ;
if (!$local) return false;
// sinon voir si on doit/peut le telecharger
- if ($local == $source OR !preg_match(',^\w+://,', $source))
+ if ($local==$source OR !preg_match(',^\w+://,', $source))
return $local;
- if ($mode=='modif' OR !$t) {
- $res = recuperer_page($source, $localrac,false,_COPIE_LOCALE_MAX_SIZE, '','',false, $t ? filemtime($localrac) : '');
+ if ($mode=='modif' OR !$t){
+ // passer par un fichier temporaire unique pour gerer les echecs en cours de recuperation
+ // et des eventuelles recuperations concurantes
+ include_spip("inc/acces");
+ $localractmp = "$localrac.".creer_uniqid().".tmp";
+ $res = recuperer_page($source, $localractmp, false, _COPIE_LOCALE_MAX_SIZE, '', '', false, $t ? filemtime($localrac) : '');
+ if ($res) {
+ // si OK on supprime l'ancien fichier et on renomme
+ spip_log("copie_locale : recuperation $source sur $localractmp taille $res OK, renommage en $localrac");
+ spip_unlink($localrac);
+ @rename($localractmp, $localrac);
+ } else {
+ // sinon on supprime le fichier temporaire qui a echoue et qui est sans doute corrompu...
+ spip_log("copie_locale : Echec recuperation $source sur $localractmp, fichier supprime",_LOG_INFO_IMPORTANTE);
+ spip_unlink($localractmp);
+ }
if (!$res) return $t ? $local : false;
-# spip_log ('ecrire copie locale '.$localrac." taille $res");
-
+
// pour une eventuelle indexation
pipeline('post_edition',
- array(
- 'args' => array(
- 'operation' => 'copie_locale',
- 'source' => $source,
- 'fichier' => $local
- ),
- 'data' => null
- )
- );
+ array(
+ 'args' => array(
+ 'operation' => 'copie_locale',
+ 'source' => $source,
+ 'fichier' => $local
+ ),
+ 'data' => null
+ )
+ );
}
return $local;
$donnees = str_replace("\r\n","\n",$donnees);
$donnees = str_replace("\r","\n",$donnees);
// un double retour a la ligne signifie la fin de l'entete et le debut des donnees
- $p = strpos($donnees,"\n\n");
- if ($p!==FALSE){
- $entete = str_replace("\n","\r\n",substr($donnees,0,$p+1));
- $donnees = substr($donnees,$p+2);
- }
- $chaine = str_replace("\n","\r\n",$donnees);
- }
- else {
- /* boundary automatique */
- // Si on a plus de 500 octects de donnees, on "boundarise"
- if($boundary === '') {
- $taille = 0;
- foreach ($donnees as $cle => $valeur) {
- if (is_array($valeur)) {
- foreach ($valeur as $val2) {
- $taille += strlen($val2);
- }
- } else {
- // faut-il utiliser spip_strlen() dans inc/charsets ?
- $taille += strlen($valeur);
- }
- }
- if($taille>500) {
- $boundary = substr(md5(rand().'spip'), 0, 8);
- }
- }
-
- if(is_string($boundary) and strlen($boundary)) {
+ $p = strpos($donnees, "\n\n");
+ if ($p!==FALSE){
+ $entete = str_replace("\n", "\r\n", substr($donnees, 0, $p+1));
+ $donnees = substr($donnees, $p+2);
+ }
+ $chaine = str_replace("\n", "\r\n", $donnees);
+ }
+ else {
+ /* boundary automatique */
+ // Si on a plus de 500 octects de donnees, on "boundarise"
+ if ($boundary===''){
+ $taille = 0;
+ foreach ($donnees as $cle => $valeur){
+ if (is_array($valeur)){
+ foreach ($valeur as $val2){
+ $taille += strlen($val2);
+ }
+ } else {
+ // faut-il utiliser spip_strlen() dans inc/charsets ?
+ $taille += strlen($valeur);
+ }
+ }
+ if ($taille>500){
+ $boundary = substr(md5(rand() . 'spip'), 0, 8);
+ }
+ }
+
+ if (is_string($boundary) and strlen($boundary)){
// fabrique une chaine HTTP pour un POST avec boundary
$entete = "Content-Type: multipart/form-data; boundary=$boundary\r\n";
$chaine = '';
$chaine = $donnees;
}
}
- }
+ }
return array($entete, $chaine);
}
// dans lequel on ecrit directement la page
// * si c'est true/null ca correspond a une demande d'encodage/charset
// http://doc.spip.org/@recuperer_page
-function recuperer_page($url, $trans=false, $get_headers=false,
- $taille_max = null, $datas='', $boundary='', $refuser_gz = false,
- $date_verif = '', $uri_referer = '') {
+function recuperer_page($url, $trans = false, $get_headers = false,
+ $taille_max = null, $datas = '', $boundary = '', $refuser_gz = false,
+ $date_verif = '', $uri_referer = ''){
$gz = false;
// $copy = copier le fichier ?
- $copy = (is_string($trans) AND strlen($trans) > 5); // eviter "false" :-)
+ $copy = (is_string($trans) AND strlen($trans)>5); // eviter "false" :-)
if (is_null($taille_max))
$taille_max = $copy ? _COPIE_LOCALE_MAX_SIZE : 1048576;
// Accepter les URLs au format feed:// ou qui ont oublie le http://
$url = preg_replace(',^feed://,i', 'http://', $url);
- if (!preg_match(',^[a-z]+://,i', $url)) $url = 'http://'.$url;
+ if (!preg_match(',^[a-z]+://,i', $url)) $url = 'http://' . $url;
- if ($taille_max == 0)
+ if ($taille_max==0)
$get = 'HEAD';
else
$get = 'GET';
if (!empty($datas)) {
$get = 'POST';
list($type, $postdata) = prepare_donnees_post($datas, $boundary);
- $datas = $type . 'Content-Length: '.strlen($postdata)."\r\n\r\n".$postdata;
+ $datas = $type . 'Content-Length: ' . strlen($postdata) . "\r\n\r\n" . $postdata;
}
// dix tentatives maximum en cas d'entetes 301...
- for ($i=0;$i<10;$i++) {
+ for ($i = 0; $i<10; $i++){
$url = recuperer_lapage($url, $trans, $get, $taille_max, $datas, $refuser_gz, $date_verif, $uri_referer);
if (!$url) return false;
- if (is_array($url)) {
+ if (is_array($url)){
list($headers, $result) = $url;
- return ($get_headers ? $headers."\n" : '').$result;
+ return ($get_headers ? $headers . "\n" : '') . $result;
} else spip_log("recuperer page recommence sur $url");
}
}
// si $trans est null -> on ne veut que les headers
// si $trans est une chaine, c'est un nom de fichier pour ecrire directement dedans
// http://doc.spip.org/@recuperer_lapage
-function recuperer_lapage($url, $trans=false, $get='GET', $taille_max = 1048576, $datas='', $refuser_gz = false, $date_verif = '', $uri_referer = '')
-{
+function recuperer_lapage($url, $trans = false, $get = 'GET', $taille_max = 1048576, $datas = '', $refuser_gz = false, $date_verif = '', $uri_referer = ''){
// $copy = copier le fichier ?
- $copy = (is_string($trans) AND strlen($trans) > 5); // eviter "false" :-)
+ $copy = (is_string($trans) AND strlen($trans)>5); // eviter "false" :-)
// si on ecrit directement dans un fichier, pour ne pas manipuler
// en memoire refuser gz
// ouvrir la connexion et envoyer la requete et ses en-tetes
list($f, $fopen) = init_http($get, $url, $refuser_gz, $uri_referer, $datas, _INC_DISTANT_VERSION_HTTP, $date_verif);
- if (!$f) {
+ if (!$f){
spip_log("ECHEC init_http $url");
return false;
}
$headers = '';
else {
$headers = recuperer_entetes($f, $date_verif);
- if (is_numeric($headers)) {
+ if (is_numeric($headers)){
fclose($f);
// Chinoisierie inexplicable pour contrer
// les actions liberticides de l'empire du milieu
- if ($headers) {
+ if ($headers){
spip_log("HTTP status $headers pour $url");
return false;
- } elseif ($result = @file_get_contents($url))
- return array('', $result);
- else return false;
+ }
+ elseif ($result = @file_get_contents($url))
+ return array('', $result);
+ else
+ return false;
}
- if (!is_array($headers)) { // cas Location
+ if (!is_array($headers)){ // cas Location
fclose($f);
include_spip('inc/filtres');
return suivre_lien($url, $headers);
$headers = join('', $headers);
}
- if ($trans === NULL) return array($headers, '');
+ if ($trans===NULL) return array($headers, '');
// s'il faut deballer, le faire via un fichier temporaire
// sinon la memoire explose pour les gros flux
$gz = preg_match(",\bContent-Encoding: .*gzip,is", $headers) ?
- (_DIR_TMP.md5(uniqid(mt_rand())).'.tmp.gz') : '';
-
+ (_DIR_TMP . md5(uniqid(mt_rand())) . '.tmp.gz') : '';
+
# spip_log("entete ($trans $copy $gz)\n$headers");
$result = recuperer_body($f, $taille_max, $gz ? $gz : ($copy ? $trans : ''));
fclose($f);
- if (!$result) return array($headers, $result);
+ if (!$result)
+ return array($headers, $result);
// Decompresser au besoin
- if ($gz) {
+ if ($gz){
$result = join('', gzfile($gz));
supprimer_fichier($gz);
}
// Faut-il l'importer dans notre charset local ?
- if ($trans === true) {
+ if ($trans===true){
include_spip('inc/charsets');
- $result = transcoder_page ($result, $headers);
+ $result = transcoder_page($result, $headers);
}
return array($headers, $result);
}
// http://doc.spip.org/@recuperer_body
-function recuperer_body($f, $taille_max=1048576, $fichier='')
-{
+function recuperer_body($f, $taille_max = 1048576, $fichier = ''){
$taille = 0;
$result = '';
+ $fp = false;
if ($fichier){
- $fp = spip_fopen_lock($fichier, 'w',LOCK_EX);
- if (!$fp) return false;
+ $fp = spip_fopen_lock($fichier, 'w', LOCK_EX);
+ if (!$fp)
+ return false;
$result = 0; // on renvoie la taille du fichier
}
while (!feof($f) AND $taille<$taille_max){
$res = fread($f, 16384);
$taille += strlen($res);
if ($fp){
- fwrite($fp,$res);
+ fwrite($fp, $res);
$result = $taille;
}
else
// le tableau des entetes dans tous les autres cas
// http://doc.spip.org/@recuperer_entetes
-function recuperer_entetes($f, $date_verif='')
-{
+function recuperer_entetes($f, $date_verif = ''){
$s = @trim(fgets($f, 16384));
- if (!preg_match(',^HTTP/[0-9]+\.[0-9]+ ([0-9]+),', $s, $r)) {
+ if (!preg_match(',^HTTP/[0-9]+\.[0-9]+ ([0-9]+),', $s, $r)){
return 0;
}
$status = intval($r[1]);
$headers = array();
$not_modif = $location = false;
- while ($s = trim(fgets($f, 16384))) {
- $headers[]= $s."\n";
+ while ($s = trim(fgets($f, 16384))){
+ $headers[] = $s . "\n";
preg_match(',^([^:]*): *(.*)$,i', $s, $r);
- list(,$d, $v) = $r;
- if (strtolower(trim($d)) == 'location' AND $status >= 300 AND $status < 400) {
+ list(, $d, $v) = $r;
+ if (strtolower(trim($d))=='location' AND $status>=300 AND $status<400){
$location = $v;
}
- elseif ($date_verif AND ($d == 'Last-Modified')) {
- if ($date_verif>=strtotime($v)) {
+ elseif ($date_verif AND ($d=='Last-Modified')) {
+ if ($date_verif>=strtotime($v)){
//Cas ou la page distante n'a pas bouge depuis
//la derniere visite
$not_modif = true;
}
}
- if ($location) return $location;
- if ($status != 200 or $not_modif) return $status;
+ if ($location)
+ return $location;
+ if ($status!=200 or $not_modif)
+ return $status;
return $headers;
}
// mais la tout de suite je ne trouve pas l'idee, etant donne les limitations
// des filesystems
// http://doc.spip.org/@nom_fichier_copie_locale
-function nom_fichier_copie_locale($source, $extension) {
-
- include_spip('inc/getdocument');
+function nom_fichier_copie_locale($source, $extension){
+ if (version_compare($spip_version_branche,"3.0.0") < 0)
+ include_spip('inc/getdocument');
+ else
+ include_spip('inc/documents');
$d = creer_repertoire_documents('distant'); # IMG/distant/
$d = sous_repertoire($d, $extension); # IMG/distant/pdf/
// on se place tout le temps comme si on etait a la racine
if (_DIR_RACINE)
- $d = preg_replace(',^'.preg_quote(_DIR_RACINE).',', '', $d);
+ $d = preg_replace(',^' . preg_quote(_DIR_RACINE) . ',', '', $d);
$m = md5($source);
return $d
- . substr(preg_replace(',[^\w-],', '', basename($source)).'-'.$m,0,12)
- . substr($m,0,4)
- . ".$extension";
+ . substr(preg_replace(',[^\w-],', '', basename($source)) . '-' . $m, 0, 12)
+ . substr($m, 0, 4)
+ . ".$extension";
}
//
// Donne le nom de la copie locale de la source
//
// http://doc.spip.org/@fichier_copie_locale
-function fichier_copie_locale($source) {
+function fichier_copie_locale($source){
// Si c'est deja local pas de souci
- if (!preg_match(',^\w+://,', $source)) {
+ if (!preg_match(',^\w+://,', $source)){
if (_DIR_RACINE)
- $source = preg_replace(',^'.preg_quote(_DIR_RACINE).',', '', $source);
+ $source = preg_replace(',^' . preg_quote(_DIR_RACINE) . ',', '', $source);
return $source;
}
-
+
// optimisation : on regarde si on peut deviner l'extension dans l'url et si le fichier
// a deja ete copie en local avec cette extension
// dans ce cas elle est fiable, pas la peine de requeter en base
$path_parts = pathinfo($source);
$ext = $path_parts ? $path_parts['extension'] : '';
if ($ext
- AND preg_match(',^\w+$,',$ext) // pas de php?truc=1&...
- AND $f=nom_fichier_copie_locale($source, $ext)
- AND file_exists(_DIR_RACINE . $f))
- return $f;
-
+ AND preg_match(',^\w+$,', $ext) // pas de php?truc=1&...
+ AND $f = nom_fichier_copie_locale($source, $ext)
+ AND file_exists(_DIR_RACINE . $f)
+ )
+ return $f;
+
// Si c'est deja dans la table des documents,
// ramener le nom de sa copie potentielle
$ext = $path_parts ? $path_parts['extension'] : '';
- if ($ext AND sql_getfetsel("extension", "spip_types_documents", "extension=".sql_quote($ext))) {
+ if ($ext AND sql_getfetsel("extension", "spip_types_documents", "extension=" . sql_quote($ext))){
$f = nom_fichier_copie_locale($source, $ext);
- if (file_exists(_DIR_RACINE . $f))
- return $f;
+ if (file_exists(_DIR_RACINE . $f))
+ return $f;
}
+
// Ping pour voir si son extension est connue et autorisee
- $path_parts = recuperer_infos_distantes($source,0,false) ;
+ // avec mise en cache du resultat du ping
+
+ $cache = sous_repertoire(_DIR_CACHE, 'rid') . md5($source);
+ if (!@file_exists($cache)
+ OR !$path_parts = @unserialize(spip_file_get_contents($cache))
+ OR _request('var_mode')=='recalcul'
+ ){
+ $path_parts = recuperer_infos_distantes($source, 0, false);
+ ecrire_fichier($cache, serialize($path_parts));
+ }
$ext = $path_parts ? $path_parts['extension'] : '';
- if ($ext AND sql_getfetsel("extension", "spip_types_documents", "extension=".sql_quote($ext))) {
+ if ($ext AND sql_getfetsel("extension", "spip_types_documents", "extension=" . sql_quote($ext))){
return nom_fichier_copie_locale($source, $ext);
}
spip_log("pas de copie locale pour $source");
#$a['fichier'] = chaine
// http://doc.spip.org/@recuperer_infos_distantes
-function recuperer_infos_distantes($source, $max=0, $charger_si_petite_image = true) {
+function recuperer_infos_distantes($source, $max = 0, $charger_si_petite_image = true){
# charger les alias des types mime
include_spip('base/typedoc');
// On va directement charger le debut des images et des fichiers html,
// de maniere a attrapper le maximum d'infos (titre, taille, etc). Si
// ca echoue l'utilisateur devra les entrer...
- if ($headers = recuperer_page($source, false, true, $max, '', '', true)) {
+ if ($headers = recuperer_page($source, false, true, $max, '', '', true)){
list($headers, $a['body']) = preg_split(',\n\n,', $headers, 2);
if (preg_match(",\nContent-Type: *([^[:space:];]*),i", "\n$headers", $regs))
// ce qu'il sert ; on va tenter de detecter via l'extension de l'url
// ou le Content-Disposition: attachment; filename=...
$t = null;
- if (in_array($mime_type,array('text/plain','','application/octet-stream'))){
+ if (in_array($mime_type, array('text/plain', '', 'application/octet-stream'))){
if (!$t
- AND preg_match(',\.([a-z0-9]+)(\?.*)?$,', $source, $rext)) {
- $t = sql_fetsel("extension", "spip_types_documents", "extension=" . sql_quote($rext[1]));
+ AND preg_match(',\.([a-z0-9]+)(\?.*)?$,i', $source, $rext)
+ ){
+ $t = sql_fetsel("extension", "spip_types_documents", "extension=" . sql_quote($rext[1],'','text'));
}
if (!$t
- AND preg_match(",^Content-Disposition:\s*attachment;\s*filename=(.*)$,Uims",$headers,$m)
- AND preg_match(',\.([a-z0-9]+)(\?.*)?$,', $m[1], $rext)){
- $t = sql_fetsel("extension", "spip_types_documents", "extension=" . sql_quote($rext[1]));
+ AND preg_match(",^Content-Disposition:\s*attachment;\s*filename=(.*)$,Uims", $headers, $m)
+ AND preg_match(',\.([a-z0-9]+)(\?.*)?$,i', $m[1], $rext)
+ ){
+ $t = sql_fetsel("extension", "spip_types_documents", "extension=" . sql_quote($rext[1],'','text'));
}
}
// Toujours rien ? (ex: audio/x-ogg au lieu de application/ogg)
// On essaie de nouveau avec l'extension
if (!$t
- AND $mime_type != 'text/plain'
- AND preg_match(',\.([a-z0-9]+)(\?.*)?$,', $source, $rext)) {
- $t = sql_fetsel("extension", "spip_types_documents", "extension=" . sql_quote($rext[1]));
+ AND $mime_type!='text/plain'
+ AND preg_match(',\.([a-z0-9]+)(\?.*)?$,i', $source, $rext)
+ ){
+ $t = sql_fetsel("extension", "spip_types_documents", "extension=" . sql_quote($rext[1],'','text')); # eviter xxx.3 => 3gp (> SPIP 3)
}
- if ($t) {
- spip_log("mime-type $mime_type ok, extension ".$t['extension']);
+ if ($t){
+ spip_log("mime-type $mime_type ok, extension " . $t['extension']);
$a['extension'] = $t['extension'];
} else {
# par defaut on retombe sur '.bin' si c'est autorise
}
if (preg_match(",\nContent-Length: *([^[:space:]]*),i",
- "\n$headers", $regs))
+ "\n$headers", $regs)
+ )
$a['taille'] = intval($regs[1]);
}
// Echec avec HEAD, on tente avec GET
- if (!$a AND !$max) {
+ if (!$a AND !$max){
spip_log("tenter GET $source");
$a = recuperer_infos_distantes($source, 1024*1024);
}
// S'il s'agit d'une image pas trop grosse ou d'un fichier html, on va aller
// recharger le document en GET et recuperer des donnees supplementaires...
- if (preg_match(',^image/(jpeg|gif|png|swf),', $mime_type)) {
- if ($max == 0
- AND $a['taille'] < 1024*1024
- AND (strpos($GLOBALS['meta']['formats_graphiques'],$a['extension'])!==false)
- AND $charger_si_petite_image) {
+ if (preg_match(',^image/(jpeg|gif|png|swf),', $mime_type)){
+ if ($max==0
+ AND $a['taille']<1024*1024
+ AND (strpos($GLOBALS['meta']['formats_graphiques'], $a['extension'])!==false)
+ AND $charger_si_petite_image
+ ){
$a = recuperer_infos_distantes($source, 1024*1024);
}
- else if ($a['body']) {
+ else if ($a['body']
+ AND $a['taille'] < 1024*1024
+ ) {
$a['fichier'] = _DIR_RACINE . nom_fichier_copie_locale($source, $a['extension']);
ecrire_fichier($a['fichier'], $a['body']);
$size_image = @getimagesize($a['fichier']);
// Fichier swf, si on n'a pas la taille, on va mettre 425x350 par defaut
// ce sera mieux que 0x0
- if ($a['extension'] == 'swf'
- AND !$a['largeur']) {
+ if ($a AND $a['extension']=='swf'
+ AND !$a['largeur']
+ ){
$a['largeur'] = 425;
$a['hauteur'] = 350;
}
- if ($mime_type == 'text/html') {
+ if ($mime_type=='text/html'){
include_spip('inc/filtres');
$page = recuperer_page($source, true, false, 1024*1024);
- if(preg_match(',<title>(.*?)</title>,ims', $page, $regs))
+ if (preg_match(',<title>(.*?)</title>,ims', $page, $regs))
$a['titre'] = corriger_caracteres(trim($regs[1]));
- if (!$a['taille']) $a['taille'] = strlen($page); # a peu pres
+ if (!$a['taille']) $a['taille'] = strlen($page); # a peu pres
}
return $a;
}
-// http://doc.spip.org/@need_proxy
-function need_proxy($host)
-{
- $http_proxy = @$GLOBALS['meta']["http_proxy"];
- $http_noproxy = @$GLOBALS['meta']["http_noproxy"];
-
- $domain = substr($host,strpos($host,'.'));
+/**
+ * Tester si un host peut etre recuperer directement ou doit passer par un proxy
+ * on peut passer en parametre le proxy et la liste des host exclus,
+ * pour les besoins des tests, lors de la configuration
+ *
+ * @param string $host
+ * @param string $http_proxy
+ * @param string $http_noproxy
+ * @return string
+ */
+function need_proxy($host, $http_proxy = null, $http_noproxy = null){
+ if (is_null($http_proxy))
+ $http_proxy = @$GLOBALS['meta']["http_proxy"];
+ if (is_null($http_noproxy))
+ $http_noproxy = @$GLOBALS['meta']["http_noproxy"];
+
+ $domain = substr($host, strpos($host, '.'));
return ($http_proxy
- AND (strpos(" $http_noproxy ", " $host ") === false
- AND (strpos(" $http_noproxy ", " $domain ") === false)))
- ? $http_proxy : '';
+ AND (strpos(" $http_noproxy ", " $host ")===false
+ AND (strpos(" $http_noproxy ", " $domain ")===false)))
+ ? $http_proxy : '';
}
//
// retourne le descripteur sur lequel lire la reponse
//
// http://doc.spip.org/@init_http
-function init_http($method, $url, $refuse_gz=false, $referer = '', $datas="", $vers="HTTP/1.0", $date='') {
- $user = $via_proxy = $proxy_user = '';
+function init_http($method, $url, $refuse_gz = false, $referer = '', $datas = "", $vers = "HTTP/1.0", $date = ''){
+ $user = $via_proxy = $proxy_user = '';
$fopen = false;
$t = @parse_url($url);
$host = $t['host'];
- if ($t['scheme'] == 'http') {
- $scheme = 'http'; $noproxy = '';
- } elseif ($t['scheme'] == 'https') {
- $scheme = 'ssl'; $noproxy = 'ssl://';
+ if ($t['scheme']=='http'){
+ $scheme = 'http';
+ $noproxy = '';
+ } elseif ($t['scheme']=='https') {
+ $scheme = 'ssl';
+ $noproxy = 'ssl://';
if (!isset($t['port']) || !($port = $t['port'])) $t['port'] = 443;
}
else {
- $scheme = $t['scheme']; $noproxy = $scheme.'://';
+ $scheme = $t['scheme'];
+ $noproxy = $scheme . '://';
}
if (isset($t['user']))
$user = array($t['user'], $t['pass']);
if (!isset($t['port']) || !($port = $t['port'])) $port = 80;
if (!isset($t['path']) || !($path = $t['path'])) $path = "/";
- if (@$t['query']) $path .= "?" .$t['query'];
+ if (@$t['query']) $path .= "?" . $t['query'];
$f = lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $refuse_gz, $referer, $datas, $vers, $date);
- if (!$f) {
- // fallback : fopen
- if (!_request('tester_proxy')) {
+ if (!$f){
+ // fallback : fopen
+ if (!_request('tester_proxy')){
$f = @fopen($url, "rb");
spip_log("connexion vers $url par simple fopen");
$fopen = true;
- } else $f = false;// echec total
+ }
+ else
+ $f = false;
+ // echec total
}
return array($f, $fopen);
}
// http://doc.spip.org/@lance_requete
-function lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $refuse_gz=false, $referer = '', $datas="", $vers="HTTP/1.0", $date='') {
+function lance_requete($method, $scheme, $user, $host, $path, $port, $noproxy, $refuse_gz = false, $referer = '', $datas = "", $vers = "HTTP/1.0", $date = ''){
$proxy_user = '';
$http_proxy = need_proxy($host);
- if ($user) $user = urlencode($user[0]).":".urlencode($user[1]);
+ if ($user) $user = urlencode($user[0]) . ":" . urlencode($user[1]);
- if ($http_proxy) {
- $path = "$scheme://"
+ if ($http_proxy){
+ $path = (($scheme=='ssl') ? 'https://' : "$scheme://")
. (!$user ? '' : "$user@")
- . "$host" . (($port != 80) ? ":$port" : "") . $path;
+ . "$host" . (($port!=80) ? ":$port" : "") . $path;
$t2 = @parse_url($http_proxy);
$first_host = $t2['host'];
if (!($port = $t2['port'])) $port = 80;
if ($t2['user'])
$proxy_user = base64_encode($t2['user'] . ":" . $t2['pass']);
- } else $first_host = $noproxy.$host;
+ }
+ else
+ $first_host = $noproxy . $host;
$f = @fsockopen($first_host, $port);
spip_log("Recuperer $path sur $first_host:$port par $f");
$site = $GLOBALS['meta']["adresse_site"];
$req = "$method $path $vers\r\n"
- . "Host: $host\r\n"
- . "User-Agent: " . _INC_DISTANT_USER_AGENT . "\r\n"
- . ($refuse_gz ? '' : ("Accept-Encoding: " . _INC_DISTANT_CONTENT_ENCODING . "\r\n"))
- . (!$site ? '' : "Referer: $site/$referer\r\n")
- . (!$date ? '' : "If-Modified-Since: " . (gmdate("D, d M Y H:i:s", $date) ." GMT\r\n"))
- . (!$user ? '' : ("Authorization: Basic " . base64_encode($user) ."\r\n"))
- . (!$proxy_user ? '' : "Proxy-Authorization: Basic $proxy_user\r\n")
- . (!strpos($vers, '1.1') ? '' : "Keep-Alive: 300\r\nConnection: keep-alive\r\n");
+ . "Host: $host\r\n"
+ . "User-Agent: " . _INC_DISTANT_USER_AGENT . "\r\n"
+ . ($refuse_gz ? '' : ("Accept-Encoding: " . _INC_DISTANT_CONTENT_ENCODING . "\r\n"))
+ . (!$site ? '' : "Referer: $site/$referer\r\n")
+ . (!$date ? '' : "If-Modified-Since: " . (gmdate("D, d M Y H:i:s", $date) . " GMT\r\n"))
+ . (!$user ? '' : ("Authorization: Basic " . base64_encode($user) . "\r\n"))
+ . (!$proxy_user ? '' : "Proxy-Authorization: Basic $proxy_user\r\n")
+ . (!strpos($vers, '1.1') ? '' : "Keep-Alive: 300\r\nConnection: keep-alive\r\n");
# spip_log("Requete\n$req");
fputs($f, $req);
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
if ($r AND $r !== 'htaccess') return get_spip_doc($f);
+ return generer_acceder_document($f, $id_document, $args, $ancre);
+}
+
+// cette action doit etre publique !
+function generer_acceder_document($file, $id_document, $args='', $ancre='')
+{
include_spip('inc/securiser_action');
- // cette action doit etre publique !
return generer_url_action('acceder_document',
$args . ($args ? "&" : '')
. 'arg='.$id_document
. ($ancre ? "&ancre=$ancre" : '')
- . '&cle=' . calculer_cle_action($id_document.','.$f)
- . '&file=' . rawurlencode($f)
+ . '&cle=' . calculer_cle_action($id_document.','.$file)
+ . '&file=' . rawurlencode($file)
,false,true);
}
}
}
- $cadre = lignes_longues(typo($titre ? $titre : basename($fichier)), 20);
+ if ($titre)
+ $cadre = $titre;
+ elseif (!$distant)
+ $cadre = basename($fichier);
+ else {
+ preg_match('@^[^/]*/*([^/]*)@', $fichier, $cadre);
+ $cadre = $cadre[1];
+ }
+ $cadre = lignes_longues($cadre, 20);
// encapsuler chaque document dans un container pour permettre son remplacement en ajax
return '<div>'
. debut_cadre($style, $icone, '', $cadre, "document$id_document")
( _T('info_document').' '.majuscules($extension)))
. "</div>"))
. $apercu
- . "\n<div style='padding:2px; ' class='arial1 spip_xx-small'>"
+ . "\n<div style='padding:2px;' class='arial1 spip_xx-small'>"
. $raccourci
. "</div>\n"
. $legender($id_document, $document, $script, $type, $id, "document$id_document", $deplier)
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// http://doc.spip.org/@signale_edition
function signale_edition ($id, $auteur, $type='article') {
$edition = lire_tableau_edition();
- if ($id_a = $auteur['id_auteur'])
+ if (isset($auteur['id_auteur']) and $id_a = $auteur['id_auteur'])
$nom = $auteur['nom'];
else
$nom = $id_a = $GLOBALS['ip'];
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
$aff_les_auteurs = afficher_auteurs_objet($type, $id, $flag, '', $script_edit_objet, $arg_ajax);
if ($flag) {
- $futurs = ajouter_auteurs_objet($type, $id, '',$script_edit_objet, $arg_ajax);
+ $futurs = ajouter_auteurs_objet($type, $id, '',$script_edit_objet, $arg_ajax, $cherche_auteur);
} else $futurs = '';
$ldap = isset($GLOBALS['meta']['ldap_statut_import']) ?
}
// http://doc.spip.org/@ajouter_auteurs_objet
-function ajouter_auteurs_objet($type, $id, $cond_les_auteurs,$script_edit, $arg_ajax)
+function ajouter_auteurs_objet($type, $id, $cond_les_auteurs,$script_edit, $arg_ajax, $valeur='')
{
if (!$determiner_non_auteurs = charger_fonction('determiner_non_auteurs_'.$type,'inc',true))
$determiner_non_auteurs = 'determiner_non_auteurs';
$sel = "$text<select name='$new' id='$new' size='1' style='width:150px;' onchange=\"$js\">$all</select>";
$clic = _T('bouton_ajouter');
} else if ((_SPIP_AJAX < 1) OR ($all >= _SPIP_SELECT_MAX_AUTEURS)) {
- $sel = "$text <input type='text' name='cherche_auteur' id='$new' onclick=\"$js\" value='' size='20' />";
+ $sel = "$text <input type='text' name='cherche_auteur' id='$new' onclick=\"$js\" value=\"" . entites_html($valeur) . "\" size='20' />";
$clic = _T('bouton_chercher');
} else {
$sel = selecteur_auteur_ajax($type, $id, $js, $text, $idom);
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
if (count($les_mots)>= 3) {
$ok = true;
foreach ($id_groupes_vus as $id_groupe)
- $ok &= autoriser('editermots', $objet, $id_objet, null,
- array('id_groupe'=>$id_groupe,'groupe_champs'=>$row));
+ if (!autoriser('editermots', $objet, $id_objet, null,
+ array('id_groupe'=>$id_groupe))) {
+ $ok = false;
+ break;
+ }
if ($ok)
$res .= "<div style='text-align: right' class='arial1'>"
. ajax_action_auteur('editer_mots', "$id_objet,-1,$table,$table_id,$objet", $url_base, "$table_id=$id_objet", array(_T('info_retirer_mots'),''),"&id_objet=$id_objet&objet=$objet")
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
define('_EXPORT_TRANCHES_LIMITE', 200);
define('_EXTENSION_PARTIES', '.gz');
-// http://doc.spip.org/@exec_export_all_args
function inc_export_dist($meta)
{
if (!isset($GLOBALS['meta'][$meta])) {
include_spip('inc/minipres');
echo minipres();
+ } else {
+ while (true) {
+ $val = unserialize($GLOBALS['meta'][$meta]);
+ if ($dir = export_repertoire($meta, $val))
+ export_trace($val, $dir, $meta);
+ else break;
+ }
+ list($gz, $archive, $rub,,,,$serveur,$save) = $val;
+ // retour a exec_export_all qui renverra sur action_export_all
+ return "end,$gz,$archive,$rub,$serveur,$save";
}
- else {
- $start = false;
- list($gz, $archive, $rub, $tables_for_dump, $etape_actuelle, $sous_etape) =
- unserialize($GLOBALS['meta'][$meta]);
-
- // determine upload va aussi initialiser l'index "restreint"
- $maindir = determine_upload();
- if (!$GLOBALS['visiteur_session']['restreint'])
- $maindir = _DIR_DUMP;
- $dir = sous_repertoire($maindir, $meta);
- $file = $dir . $archive;
- $metatable = $meta . '_tables';
+}
- // Reperer une situation anormale (echec reprise sur interruption)
- if (!$etape_actuelle AND !$sous_etape) {
- $l = preg_files($file . ".part_[0-9]+_[0-9]+");
- if ($l) {
- spip_log("menage d'une sauvegarde inachevee: " . join(',', $l));
- foreach($l as $dummy) spip_unlink($dummy);
- }
- $start = true; // utilise pour faire un premier hit moitie moins long
- $tables_sauvegardees = array();
- } else $tables_sauvegardees = isset($GLOBALS['meta'][$metatable])?unserialize($GLOBALS['meta'][$metatable]):array();
-
- // concatenation des fichiers crees a l'appel precedent
- ramasse_parties($dir, $archive);
- $all = count($tables_for_dump);
- if ($etape_actuelle > $all OR !$all){
- return "end,$gz,$archive,$rub"; // c'est fini !
- }
+// calcule le repertoire de la sauvegarde
+// et le nettoie au premier appel.
+// Aux suivants, retourne le nom du repertoire ou rien si c'est fini.
- include_spip('inc/minipres');
- @ini_set("zlib.output_compression","0"); // pour permettre l'affichage au fur et a mesure
+function export_repertoire($meta, $val_meta)
+{
+ list(, $archive, , $tables, $etape, $sous_etape, , $save) = $val_meta;
+ if (!function_exists('inc_export_' . ($save ? $save : 'xml'))) {
+ spip_log("fonction inc_export_$save indisponible");
+ return false;
+ }
+ $dir = base_dump_dir($meta);
- echo ( install_debut_html(_T('info_sauvegarde') . " ($all)"));
+ // Reperer une situation anormale (echec reprise sur interruption)
+ if (($etape == 1) AND !$sous_etape) {
+ $file = $dir . $archive;
+ $l = preg_files($file . ".part_[0-9]+_[0-9]+");
+ if ($l) {
+ spip_log("menage d'une sauvegarde inachevee: " . join(',', $l));
+ foreach($l as $dummy) spip_unlink($dummy);
+ }
+ }
+ $all = count($tables);
+ return ($etape > $all OR !$all) ? false : $dir;
+}
+
+function export_trace($val_meta, $dir, $meta)
+{
+ list($gz, $archive, $rub, $tables_for_dump, $etape_actuelle, $sous_etape, $serveur, $save) = $val_meta;
+ include_spip('inc/minipres');
+ // pour permettre l'affichage au fur et a mesure
+ @ini_set("zlib.output_compression","0");
- if (!($timeout = ini_get('max_execution_time')*1000));
- $timeout = 30000; // parions sur une valeur tellement courante ...
+ if (!($timeout = ini_get('max_execution_time')*1000));
+ $timeout = 30000; // parions sur une valeur tellement courante ...
// le premier hit est moitie moins long car seulement une phase d'ecriture de morceaux
// sans ramassage
// sinon grosse ecriture au 1er hit, puis gros rammassage au deuxieme avec petite ecriture,... ca oscille
- if ($start) $timeout = round($timeout/2);
+ if (!$etape_actuelle AND !$sous_etape) {
+ $timeout = round($timeout/2);
+ $tables_sauvegardees = array();
+ } else {
+ $metatable = $meta . '_tables';
+ $tables_sauvegardees = isset($GLOBALS['meta'][$metatable])?unserialize($GLOBALS['meta'][$metatable]):array();
+ }
// Les sauvegardes partielles prennent le temps d'indiquer les logos
// Instancier une fois pour toutes, car on va boucler un max.
// On complete jusqu'au secteur pour resituer dans l'arborescence)
- if ($rub) {
- $GLOBALS['chercher_logo'] = charger_fonction('chercher_logo', 'inc',true);
- $les_rubriques = complete_fils(array($rub));
- $les_meres = complete_secteurs(array($rub));
- } else {
- $GLOBALS['chercher_logo'] = false;
- $les_rubriques = $les_meres = '';
- }
+ if ($rub) {
+ $GLOBALS['chercher_logo'] = charger_fonction('chercher_logo', 'inc',true);
+ $les_rubriques = complete_fils(array($rub), $serveur);
+ $les_meres = complete_secteurs(array($rub), $serveur);
+ } else {
+ $GLOBALS['chercher_logo'] = false;
+ $les_rubriques = $les_meres = '';
+ }
// script de rechargement auto sur timeout
- $redirect = generer_url_ecrire("export_all");
- echo http_script("window.setTimeout('location.href=\"".$redirect."\";',$timeout)");
-
- echo "<div style='text-align: left'>\n";
- $etape = 1;
- foreach($tables_for_dump as $table){
- if ($etape_actuelle > $etape) {
- // sauter les deja faits, mais rappeler qu'ils sont fait
- echo ( "\n<br /><strong>".$etape. '. '."</strong>". $tables_sauvegardees[$table]);
- }
+ $redirect = generer_url_ecrire("export_all");
+ $all = count($tables_for_dump);
+ echo ( install_debut_html(_T('info_sauvegarde') . " ($all)"));
+ echo http_script("window.setTimeout('location.href=\"".$redirect."\";',$timeout)");
+
+ echo "<div style='text-align: left'>\n";
+ $etape = 1;
+ foreach($tables_for_dump as $table){
+ if ($etape_actuelle > $etape) {
+ // sauter les deja faits, mais rappeler qu'ils sont fait
+ echo ( "\n<br /><strong>".$etape. '. '."</strong>". $tables_sauvegardees[$table]);
+ }
+ else {
+ echo ( "\n<br /><strong>".$etape. '. '. $table."</strong> ");
+ $r = sql_countsel($table, array(), array(), array(), $serveur);
+ flush();
+ if (!$r) $r = ( _T('texte_vide'));
else {
- echo ( "\n<br /><strong>".$etape. '. '. $table."</strong> ");
- $r = sql_countsel($table);
- flush();
- if (!$r) $r = ( _T('texte_vide'));
- else {
$f = $dir . $archive . '.part_' . sprintf('%03d',$etape);
$r = export_objets($table, $sous_etape, $r, $f, $les_rubriques, $les_meres, $meta);
$r += $sous_etape*_EXPORT_TRANCHES_LIMITE;
// info pas fiable si interruption+partiel
if ($rub AND $etape_actuelle > 1) $r = ">= $r";
- }
- echo " $r";
- flush();
- $sous_etape = 0;
- // on utilise l'index comme ca c'est pas grave si on ecrit plusieurs fois la meme
- $tables_sauvegardees[$table] = "$table ($r)";
- ecrire_meta($metatable, serialize($tables_sauvegardees),'non');
}
- $etape++;
- $v = serialize(array($gz, $archive, $rub, $tables_for_dump, $etape,$sous_etape));
- ecrire_meta($meta, $v,'non');
+ echo " $r";
+ flush();
+ $sous_etape = 0;
+ // on utilise l'index comme ca c'est pas grave si on ecrit plusieurs fois la meme
+ $tables_sauvegardees[$table] = "$table ($r)";
+ ecrire_meta($meta . '_tables', serialize($tables_sauvegardees),'non');
}
- echo ( "</div>\n");
- // si Javascript est dispo, anticiper le Time-out
- echo ("<script language=\"JavaScript\" type=\"text/javascript\">window.setTimeout('location.href=\"$redirect\";',0);</script>\n");
- echo (install_fin_html());
- flush();
+ $etape++;
+ $v = serialize(array($gz, $archive, $rub, $tables_for_dump, $etape,$sous_etape, $serveur, $save));
+ ecrire_meta($meta, $v,'non');
}
+ echo ( "</div>\n");
+ // si Javascript est dispo, anticiper le Time-out
+ echo ("<script language=\"JavaScript\" type=\"text/javascript\">window.setTimeout('location.href=\"$redirect\";',0);</script>\n");
+ echo (install_fin_html());
+ flush();
}
-
// http://doc.spip.org/@complete_secteurs
-function complete_secteurs($les_rubriques)
+function complete_secteurs($les_rubriques, $serveur='')
{
$res = array();
foreach($les_rubriques as $r) {
do {
- $r = sql_getfetsel("id_parent", "spip_rubriques", "id_rubrique=$r");
+ $r = sql_getfetsel("id_parent", "spip_rubriques", "id_rubrique=$r", array(), array(), '', array(), $serveur);
if ($r) {
if ((isset($les_rubriques[$r])) OR isset($res[$r]))
$r = false;
}
// http://doc.spip.org/@complete_fils
-function complete_fils($rubriques)
+function complete_fils($rubriques, $serveur='')
{
$r = $rubriques;
do {
- $q = sql_select("id_rubrique", "spip_rubriques", "id_parent IN (".join(',',$r).")");
+ $q = sql_select("id_rubrique", "spip_rubriques", "id_parent IN (".join(',',$r).")", array(), array(), '', array(), $serveur);
$r = array();
- while ($row = sql_fetch($q)) {
+ while ($row = sql_fetch($q, $serveur)) {
$r[]= $rubriques[] = $row['id_rubrique'];
}
} while ($r);
return $rubriques;
}
-// Concatenation des tranches
-// Il faudrait ouvrir une seule fois le fichier, et d'abord sous un autre nom
-// et sans detruire les tranches: au final renommage+destruction massive pour
-// prevenir autant que possible un Time-out.
-
-// http://doc.spip.org/@ramasse_parties
-function ramasse_parties($dir, $archive)
-{
- $files = preg_files($dir . $archive . ".part_[0-9]+_[0-9]+[.gz]?");
-
- $ok = true;
- $files_o = array();
- $but = $dir . $archive;
- foreach($files as $f) {
- $contenu = "";
- if (lire_fichier ($f, $contenu)) {
- if (!ecrire_fichier($but,$contenu,false,false))
- { $ok = false; break;}
- }
- spip_unlink($f);
- $files_o[]=$f;
- }
- return $ok ? $files_o : false;
-}
-
//
// Exportation de table SQL au format xml
// La constante ci-dessus determine la taille des tranches,
$debut = $cpt * _EXPORT_TRANCHES_LIMITE;
$effectifs = 0;
+ $v = unserialize($GLOBALS['meta'][$meta]);
while (1){ // on ne connait pas le nb de paquets d'avance
$cpt++;
- $tranche = build_while($debut, $table, $prim, $les_rubriques, $les_meres);
+ $tranche = build_while($debut, $table, $prim, $les_rubriques, $les_meres, $v[7], $v[6]);
// attention: vide ne suffit pas a sortir
// car les sauvegardes partielles peuvent parcourir
// une table dont la portion qui les concerne sera vide..
if ($tranche) {
// on ecrit dans un fichier generique
// puis on le renomme pour avoir une operation atomique
- ecrire_fichier ($temp, join('', $tranche));
- $f = $filetable . sprintf('_%04d',$cpt) . _EXTENSION_PARTIES;
- // le fichier destination peut deja exister
- // si on sort d'un timeout entre le rename et le ecrire_meta
- if (file_exists($f)) spip_unlink($f);
- rename($temp, $f);
- $effectifs += count($tranche);
+ if (is_array($tranche)) {
+ ecrire_fichier ($temp, join('', $tranche));
+ $f = $filetable . sprintf('_%04d',$cpt) . _EXTENSION_PARTIES;
+ // le fichier destination peut deja exister
+ // si on sort d'un timeout entre le rename et le ecrire_meta
+ if (file_exists($f)) spip_unlink($f);
+ rename($temp, $f);
+ $tranche = count($tranche);
+ }
+ $effectifs += $tranche;
}
// incrementer le numero de sous-etape
// au cas ou une interruption interviendrait
- $v = unserialize($GLOBALS['meta'][$meta]);
$v[5]++;
ecrire_meta($meta, serialize($v));
$debut += _EXPORT_TRANCHES_LIMITE;
if ($debut >= $total) {break;}
/* pour tester la robustesse de la reprise sur interruption
- decommenter ce qui suit.
+ decommenter ce qui suit.
if ($cpt && 1) {
spip_log("force interrup $s");
include_spip('inc/headers');
echo(". ");
flush();
}
-
return $effectifs;
}
-
-// Construit la version xml des champs d'une table
-
+// sauvegarde d'une table par ordre croissant de la cle primaire simple
+// sinon les sequences PG seront pertubees a la restauration
+// (a ameliorer)
+// Retourne un tableau de chaines, d'autant d'element que de Row
+// ou leur nombre, selon la fonction utilisee
// http://doc.spip.org/@build_while
-function build_while($debut, $table, $prim, $les_rubriques, $les_meres) {
- global $chercher_logo ;
+function build_while($debut, $table, $prim, $les_rubriques, $les_meres, $save='', $serveur='') {
- // sauver par ordre croissant les tables avec cles primaires simples
- // sinon les sequences PG seront pertubees a la restauration
- // (a ameliorer)
- $result = sql_select('*', $table, '', '', $prim, "$debut," . _EXPORT_TRANCHES_LIMITE);
+ $result = sql_select('*', $table, '', '', $prim, "$debut," . _EXPORT_TRANCHES_LIMITE, array(), $serveur);
+ $i = 0;
$res = array();
- while ($row = sql_fetch($result)) {
- if (export_select($row, $les_rubriques, $les_meres)) {
- $attributs = "";
- if ($chercher_logo) {
- if ($logo = $chercher_logo($row[$prim], $prim, 'on'))
- $attributs .= ' on="' . $logo[3] . '"';
- if ($logo = $chercher_logo($row[$prim], $prim, 'off'))
- $attributs .= ' off="' . $logo[3] . '"';
- }
-
- $string = "<$table$attributs>\n";
- foreach ($row as $k => $v) {
- $string .= "<$k>" . text_to_xml($v) . "</$k>\n";
- }
- $string .= "</$table>\n\n";
- $res[]= $string;
+ $save = 'inc_export_' . ($save ? $save : 'xml');
+ while ($r = sql_fetch($result, $serveur)) {
+ if (export_select($r, $les_rubriques, $les_meres)) {
+ if ($s = $save($r, $table, $prim, $serveur)) $res[]=$s; else $i++;
}
}
- sql_free($result);
- return $res;
+ sql_free($result, $serveur);
+ return $res ? $res : $i;
+}
+
+// Construit la version xml des champs d'une table
+function inc_export_xml($row, $table, $prim, $serveur) {
+ global $chercher_logo ;
+ if ($chercher_logo) {
+ $on = $chercher_logo($row[$prim], $prim, 'on');
+ $off = $chercher_logo($row[$prim], $prim, 'off');
+ } else $on = $off = "";
+ foreach ($row as $k => $v) {
+ $row[$k] = "<$k>" . text_to_xml($v) . "</$k>";
+ }
+ return "<$table"
+ . ($on ? " on='$on[3]'" : '')
+ . ($off ? " off='$off[3]'" : '')
+ . ">\n"
+ . join("\n", $row)
+ . "\n</$table>\n\n";
}
// dit si Row est exportable,
// en particulier quand on se restreint a certaines rubriques
-// Attention, la table articles doit etre au debut
-// et la table document_articles avant la table documents
-// (faudrait blinder, c'est un bug potentiel)
+// La table des documents doit etre apres celle des liens de doc
+// elle-meme apres celle des objets auxquels elle lie ces documents.
// http://doc.spip.org/@export_select
function export_select($row, $les_rubriques, $les_meres) {
if (isset($row['impt']) AND $row['impt'] !='oui') return false;
if (!$les_rubriques) return true;
- // numero de rubrique non determinant pour les forums (0 ďż˝ 99%)
+ // numero de rubrique non determinant pour les forums (0 a 99%)
if (isset($row['id_rubrique']) AND $row['id_rubrique']) {
if (in_array($row['id_rubrique'], $les_rubriques)) {
if (isset($row['id_article']))
// Conversion texte -> xml (ajout d'entites)
// http://doc.spip.org/@text_to_xml
function text_to_xml($string) {
- return str_replace(array('&','<','>'), array('&','<','>'), $string);
+ static $old = array('&','<','>');
+ static $new = array('&','<','>');
+ return str_replace($old, $new, $string);
}
?>
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// "127.4 ko" ou "3.1 Mo"
// http://doc.spip.org/@taille_en_octets
function taille_en_octets ($taille) {
+ if ($taille < 1) return '';
if ($taille < 1024) {$taille = _T('taille_octets', array('taille' => $taille));}
else if ($taille < 1024*1024) {
$taille = _T('taille_ko', array('taille' => ((floor($taille / 102.4))/10)));
function vider_url($url, $entites = true) {
# un message pour abs_url
$GLOBALS['mode_abs_url'] = 'url';
-
$url = trim($url);
- if (preg_match(",^(http:?/?/?|mailto:?)$,iS", $url))
- return '';
-
- if ($entites) $url = entites_html($url);
-
- return $url;
+ $r = ",^(?:" . _PROTOCOLES_STD . '):?/?/?$,iS';
+ return preg_match($r, $url) ?'': ($entites ? entites_html($url) : $url);
}
// Extraire une date de n'importe quel champ (a completer...)
return inserer_attribut($balise, $attribut, '', false, true);
}
-
-// Un filtre pour determiner le nom du mode des librement inscrits,
-// a l'aide de la liste globale des statuts (tableau mode => nom du mode)
-// Utile pour le formulaire d'inscription.
-// Si un mode est fourni, verifier que la configuration l'accepte.
-// Si mode inconnu laisser faire, c'est une extension non std
-// mais verifier que la syntaxe est compatible avec SQL
-
// http://doc.spip.org/@tester_config
function tester_config($id, $mode='') {
+ include_spip('inc/autoriser');
+ if ($mode)
+ return autoriser('inscrireauteur', $mode, $id) ? $mode : '';
+ elseif (
+ autoriser('inscrireauteur', $mode = "1comite", $id)
+ OR autoriser('inscrireauteur', $mode = "6forum", $id))
+ return $mode;
- $s = array_search($mode, $GLOBALS['liste_des_statuts']);
- switch ($s) {
-
- case 'info_redacteurs' :
- return (($GLOBALS['meta']['accepter_inscriptions'] == 'oui') ? $mode : '');
-
- case 'info_visiteurs' :
- return (($GLOBALS['meta']['accepter_visiteurs'] == 'oui' OR $GLOBALS['meta']['forums_publics'] == 'abo') ? $mode : '');
-
- default:
- if ($mode AND $mode == addslashes($mode))
- return $mode;
- if ($GLOBALS['meta']["accepter_inscriptions"] == "oui")
- return $GLOBALS['liste_des_statuts']['info_redacteurs'];
- if ($GLOBALS['meta']["accepter_visiteurs"] == "oui")
- return $GLOBALS['liste_des_statuts']['info_visiteurs'];
- return '';
- }
+ return '';
}
//
return ($mod?$nb%$mod:0)+$add;
}
+/**
+ * VĂ©rifie qu'un nom (d'auteur) ne comporte pas d'autres tags que <multi>
+ * et ceux volontairement spécifiés dans la constante
+ *
+ * @param string $nom
+ * Nom (signature) proposé
+ * @return bool
+ * - false si pas conforme,
+ * - true sinon
+**/
+function nom_acceptable($nom) {
+ if (!is_string($nom)) {
+ return false;
+ }
+ if (!defined('_TAGS_NOM_AUTEUR')) define('_TAGS_NOM_AUTEUR','');
+ $tags_acceptes = array_unique(explode(',', 'multi,' . _TAGS_NOM_AUTEUR));
+ foreach($tags_acceptes as $tag) {
+ if (strlen($tag)) {
+ $remp1[] = '<'.trim($tag).'>';
+ $remp1[] = '</'.trim($tag).'>';
+ $remp2[] = '\x60'.trim($tag).'\x61';
+ $remp2[] = '\x60/'.trim($tag).'\x61';
+ }
+ }
+ $v_nom = str_replace($remp2, $remp1, supprimer_tags(str_replace($remp1, $remp2, $nom)));
+ return str_replace('<', '<', $v_nom) == $nom;
+}
// Verifier la conformite d'une ou plusieurs adresses email
// retourne false ou la normalisation de la derniere adresse donnee
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
$source = $img;
$img = "<img src='$source' />";
}
+ # gerer img src="data:....base64"
+ else if (preg_match('@^data:image/(jpe?g|png|gif);base64,(.*)$@isS', $source, $regs)) {
+ $local = sous_repertoire(_DIR_VAR,'image-data').md5($regs[2]).'.'.str_replace('jpeg', 'jpg', $regs[1]);
+ if (!file_exists($local)) {
+ ecrire_fichier($local, base64_decode($regs[2]));
+ }
+ $source = $local;
+ $img = inserer_attribut($img, 'src', $source);
+ # eviter les mauvaises surprises lors de conversions de format
+ $img = inserer_attribut($img, 'width', '');
+ $img = inserer_attribut($img, 'height', '');
+ }
// les protocoles web prennent au moins 3 lettres
if (preg_match(';^(\w{3,7}://);', $source)){
if (@file_exists($f = $fichier)){
list ($ret["hauteur"],$ret["largeur"]) = taille_image($img);
- $date_src = @filemtime($f);
+ $date_src = filemtime($f);
}
elseif (@file_exists($f = "$fichier.src")
AND lire_fichier($f,$valeurs)
if (@file_exists($valeurs['fichier_dest'])){
// dans tous les cas mettre a jour la taille de l'image finale
list ($valeurs["hauteur_dest"],$valeurs["largeur_dest"]) = taille_image($valeurs['fichier_dest']);
- $valeurs['date'] = @filemtime($valeurs['fichier_dest']); // pour la retrouver apres disparition
+ $valeurs['date'] = filemtime($valeurs['fichier_dest']); // pour la retrouver apres disparition
ecrire_fichier($valeurs['fichier_dest'].'.src',serialize($valeurs),true);
}
}
// Transforme une image a palette indexee (256 couleurs max) en "vraies" couleurs RGB
+// Existe seulement pour compatibilite avec PHP < 5.5
// http://doc.spip.org/@imagepalettetotruecolor
+if (!function_exists("imagepalettetotruecolor")) {
function imagepalettetotruecolor(&$img) {
if ($img AND !imageistruecolor($img) AND function_exists('imagecreatetruecolor')) {
$w = imagesx($img);
$img = $img1;
}
}
+}
// http://doc.spip.org/@image_tag_changer_taille
function _image_tag_changer_taille($tag,$width,$height,$style=false){
$retour['fichier'] = $vignette;
$retour['format'] = $format;
- $retour['date'] = @filemtime($vignette);
+ $retour['date'] = (file_exists($vignette)) ? filemtime($vignette) : 0;
// renvoyer l'image
return $retour;
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// http://doc.spip.org/@filtre_text_txt_dist
function filtre_text_dist($t) {
- return '<pre>' . echapper_tags($t) . '</pre>';
+ static $t1 = array('&', '<', '>');
+ static $t2 = array('&', '<', '>');
+ return '<pre>' . str_replace($t1, $t2, $t) . '</pre>';
}
// http://doc.spip.org/@filtre_text_csv_dist
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// inspire (de loin) par PEAR:NetURL:resolvePath
//
// http://doc.spip.org/@resolve_path
-function resolve_path($url) {
- list($url, $query) = explode('?', $url,2);
- while (preg_match(',/\.?/,', $url, $regs) # supprime // et /./
+function resolve_path($url_o) {
+ preg_match('@^([^?]*)(.*)$@', $url_o, $regs);
+ list(,$url, $query) = $regs;
+ while (preg_match(',/\.?/,', $url, $regs) # supprime // et /./
OR preg_match(',/[^/]*/\.\./,S', $url, $regs) # supprime /toto/../
- OR preg_match(',^/\.\./,S', $url, $regs)) # supprime les /../ du haut
+ OR preg_match(',^/\.\./,S', $url, $regs)) # supprime les /../ du haut
$url = str_replace($regs[0], '/', $url);
- if ($query)
- $url .= '?'.$query;
-
- return '/'.preg_replace(',^/,S', '', $url);
+ return '/'.preg_replace(',^/,S', '', $url . $query);
}
//
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
spip_fclose_unlock($fp);
}
- // liberer le verrou et fermer le fichier
+ // liberer le verrou et fermer le fichier
@chmod($fichier, _SPIP_CHMOD & 0666);
- if ($ok) return $ok;
+ if ($ok) {
+ if (!defined('_OPCACHE_BUG') AND function_exists('opcache_invalidate'))
+ opcache_invalidate($fichier, true);
+ return $ok;
+ }
}
include_spip('inc/autoriser');
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
if ($logo = $chercher_logo($id_article, 'id_article', 'on')) {
list($fid, $dir, $nom, $format) = $logo;
include_spip('inc/filtres_images_mini');
- $logo = image_reduire("<img src='$fid' alt='' />", 26, 20);
- }
+ $logo = "<span style='float: $spip_lang_right; margin-top: -2px; margin-bottom: -2px;'>" .
+ image_reduire("<img src='$fid' alt='' />", 26, 20) .
+ "</span>";
+ } else $logo = '';
} else $logo ='';
- $titre = sinon($row['titre'], _T('ecrire:info_sans_titre'));
+ $titre = supprime_img($row['titre'],'');
$id_rubrique = $row['id_rubrique'];
$date = $row['date'];
$statut = $row['statut'];
$descriptif = $row['descriptif'];
- $lang_dir = lang_dir(($lang = $row['lang']) ? changer_typo($lang):'');
-
- $lien = "<div>"
+ $lang = $row['lang'];
+ $dir = "dir='" . lang_dir($lang ? changer_typo($lang) : '') . "'";
+ if ($lang AND $afficher_langue AND $lang != $GLOBALS['meta']['langue_site'])
+ $lang = " <span class='spip_xx-small' style='color: #666666' "
+ . $dir
+ . '>('
+ . traduire_nom_langue($lang)
+ . ')</span>';
+ else $lang = '';
+
+ $arg = "id_article=$id_article";
+ $url_a = generer_url_ecrire("articles", $arg);
+ if (!$row['petition'])
+ $petition = '';
+ else
+ $petition = " <a href='" . generer_url_ecrire('controle_petition', $arg) . "' class='spip_xx-small' style='color: red'>"._T('lien_petitions') . "</a>";
+
+ $lien = "<div>"
+ . $logo
+ . (acces_restreint_rubrique($id_rubrique) ? $img_admin : '')
. "<a href='"
- . generer_url_ecrire("articles","id_article=$id_article")
+ . $url_a
. "'"
- . (!$descriptif ? '' :
- (' title="'.attribut_html(typo($descriptif)).'"'))
- . " dir='$lang_dir'>"
- . (!$logo ? '' :
- ("<span style='float: $spip_lang_right; margin-top: -2px; margin-bottom: -2px;'>" . $logo . "</span>"))
- . (acces_restreint_rubrique($id_rubrique) ? $img_admin : '')
- . typo(supprime_img($titre,''))
- . (!($afficher_langue AND $lang != $GLOBALS['meta']['langue_site'] AND strlen($lang)) ? '' :
- (" <span class='spip_xx-small' style='color: #666666' dir='$lang_dir'>(".traduire_nom_langue($lang).")</span>"))
- . (!$row['petition'] ? '' :
- ("</a> <a href='" . generer_url_ecrire('controle_petition', "id_article=$id_article") . "' class='spip_xx-small' style='color: red'>"._T('lien_petitions')))
+ . (!$descriptif ? '': (' title="'.attribut_html(typo($descriptif)).'"'))
+ . " $dir>"
+ . typo(strlen($titre) ? $titre : _T('ecrire:info_sans_titre'))
. "</a>"
+ . $lang
+ . $petition
. "</div>";
if ($spip_display == 4) return array($lien);
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
if (!defined('_ECRIRE_INC_VERSION')) return;
include_spip('inc/forum');
include_spip('inc/filtres');
-include_spip('inc/actions');
+include_spip('inc/auth'); // pour ask_php_auth
// Ce fichier est inclus par dist/formulaires/forum.php
if ($afficher_texte AND forum_insert_noprevisu()) {
return false;
}
-
if (array_reduce($_POST, 'reduce_strlen', (20 * 1024)) < 0) {
ask_php_auth(_T('forum_message_trop_long'),
_T('forum_cliquer_retour',
array('retour_forum' => $retour)));
}
-
// Entrer le message dans la base
$id_message = sql_insertq('spip_forum', array(
'date_heure'=> date('Y-m-d H:i:s'),
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// 2. Au survol, sera execute un script en Ajax menu_{gadget}.php
//
-
// http://doc.spip.org/@bandeau_gadgets
function bandeau_gadgets($largeur, $options, $id_rubrique) {
- global $connect_id_auteur, $spip_lang_rtl, $spip_lang, $spip_lang_left, $spip_lang_right, $spip_ecran;
+
+ return "<div id='bandeau-gadgets'>" .
+ "\n<div style='width:{$largeur}px' class='centered'>" .
+ "\n<div style='position: relative; z-index: 1000; height:1%'>" .
+ bandeau_gadget_menu_rubriques() .
+ bandeau_gadget_navigation_rapide($id_rubrique) .
+ bandeau_gadget_recherche() .
+ (($GLOBALS['meta']['messagerie_agenda'] != 'non')
+ ? bandeau_gadget_agenda_messagerie() : '') .
+ bandeau_gadget_suivi_activite () .
+ // -------- Affichage de droite ----------
+ bandeau_gadget_deconnection() .
+ bandeau_gadget_couleurs() .
+ "</div></div></div>\n";
+}
- $bandeau = "<div id='bandeau-gadgets'>".
- "\n<div style='width:{$largeur}px' class='centered'>\n<div style='position: relative; z-index: 1000; height:1%'>"
+function bandeau_gadget_menu_rubriques()
+{
+ global $spip_lang_left;
- // GADGET Menu rubriques
- . "\n<div id='bandeautoutsite' class='bandeau bandeau_couleur_sous' style='text-align:$spip_lang_left;$spip_lang_left: 0px;'>"
+ return
+ "\n<div id='bandeautoutsite' class='bandeau bandeau_couleur_sous' style='text-align:$spip_lang_left;$spip_lang_left: 0px;'>"
. "<a href='"
. generer_url_ecrire("articles_tous")
. "' class='lien_sous'"
. "</a>"
. "\n<div id='gadget-rubriques'></div>"
. "</div>";
- // FIN GADGET Menu rubriques
+} // FIN GADGET Menu rubriques
+function bandeau_gadget_navigation_rapide($id_rubrique)
+{
+ global $spip_lang_left;
- // GADGET Navigation rapide
- $bandeau .= "<div id='bandeaunavrapide' class='bandeau bandeau_couleur_sous' style='text-align:$spip_lang_left;$spip_lang_left: 30px;'>"
- . "<a href='" . generer_url_ecrire("brouteur", ($id_rubrique ? "id_rubrique=$id_rubrique" : '')) . "' class='lien_sous'>" . _T('icone_brouteur') . "</a>"
+ return
+ "<div id='bandeaunavrapide' class='bandeau bandeau_couleur_sous' style='text-align:$spip_lang_left;$spip_lang_left: 30px;'>"
+ . "<a href='" . generer_url_ecrire("brouteur", ($id_rubrique ? "id_rubrique=$id_rubrique" : '')) . "' class='lien_sous'>"
+ . _T('icone_brouteur')
+ . "</a>"
. "\n<div id='gadget-navigation'></div>\n"
. "</div>\n";
- // FIN GADGET Navigation rapide
+} // FIN GADGET Navigation rapide
+
+function bandeau_gadget_recherche()
+{
+ global $spip_lang_left;
- // GADGET Recherche
$r = _T('info_rechercher');
- $bandeau .= "\n<div id='bandeaurecherche' class='bandeau bandeau_couleur_sous' style='text-align:$spip_lang_left;$spip_lang_left: 60px;'>"
+
+ return "\n<div id='bandeaurecherche' class='bandeau bandeau_couleur_sous' style='text-align:$spip_lang_left;$spip_lang_left: 60px;'>"
. generer_form_ecrire('recherche',
("<input type='text' size='10' value='$r' name='recherche' class='formo' accesskey='r' id='form_recherche' style='width: 140px;' />"),
" method='get' style='margin: 0px; position: relative;'")
. "</div>";
- // FIN GADGET recherche
+} // FIN GADGET recherche
+
- // messagerie et agenda
- if ($GLOBALS['meta']['messagerie_agenda'] != 'non') {
- // GADGET Agenda
- $bandeau .= "<div id='bandeauagenda' class='bandeau bandeau_couleur_sous' style='text-align:$spip_lang_left;$spip_lang_left: 100px;'>"
+function bandeau_gadget_agenda_messagerie()
+{
+ global $spip_lang_left;
+
+ return "<div id='bandeauagenda' class='bandeau bandeau_couleur_sous' style='text-align:$spip_lang_left;$spip_lang_left: 100px;'>"
. "<a href='" . generer_url_ecrire("calendrier","type=semaine") . "' class='lien_sous'>"
. _T('icone_agenda')
. "</a>"
. "\n<div id='gadget-agenda'></div>\n"
- . "</div>\n";
+ . "</div>\n"
// FIN GADGET Agenda
// GADGET Messagerie
- $gadget = '';
- $gadget .= "<div id='bandeaumessagerie' class='bandeau bandeau_couleur_sous' style='text-align:$spip_lang_left;$spip_lang_left: 130px;'>";
- $gadget .= "<a href='" . generer_url_ecrire("messagerie") . "' class='lien_sous'>";
- $gadget .= _T('icone_messagerie_personnelle');
- $gadget .= "</a>";
- $gadget .= "\n<div id='gadget-messagerie'></div>\n";
- $gadget .= "</div>";
- $bandeau .= $gadget;
+ . "<div id='bandeaumessagerie' class='bandeau bandeau_couleur_sous' style='text-align:$spip_lang_left;$spip_lang_left: 130px;'>"
+ . "<a href='" . generer_url_ecrire("messagerie") . "' class='lien_sous'>"
+ . _T('icone_messagerie_personnelle')
+ . "</a>"
+ . "\n<div id='gadget-messagerie'></div>\n"
+ . "</div>";
+
+} // FIN GADGET Messagerie
- // FIN GADGET Messagerie
- }
+function bandeau_gadget_suivi_activite ()
+{
+ global $spip_lang_left;
- // Suivi activite
- $bandeau .= "<div id='bandeausynchro' class='bandeau bandeau_couleur_sous' style='$spip_lang_left: 160px;'>"
+ return
+ "<div id='bandeausynchro' class='bandeau bandeau_couleur_sous' style='$spip_lang_left: 160px;'>"
. "<a href='" . generer_url_ecrire("synchro") . "' class='lien_sous'>"
. _T('icone_suivi_activite')
. "</a>"
. "</a>"
. "</div>";
*/
-
- //
- // -------- Affichage de droite ----------
-
- // Deconnection
- $bandeau .= "\n<div class='bandeau bandeau_couleur_sous' id='bandeaudeconnecter' style='$spip_lang_right: 0px;'>";
- $bandeau .= "<a href='" . generer_url_action("logout","logout=prive") . "' class='lien_sous'>"._T('icone_deconnecter')."</a>".aide("deconnect");
- $bandeau .= "</div>";
-
+}
+
+function bandeau_gadget_deconnection()
+{
+ global $spip_lang_right;
+
+ return
+ "\n<div class='bandeau bandeau_couleur_sous' id='bandeaudeconnecter' style='$spip_lang_right: 0px;'>"
+ . "<a href='"
+ . generer_url_action("logout","logout=prive")
+ . "' class='lien_sous'>"._T('icone_deconnecter')."</a>"
+ . aide("deconnect")
+ . "</div>";
+}
+
+function bandeau_gadget_couleurs()
+{
+ global $spip_ecran, $spip_lang, $spip_lang_rtl, $spip_lang_left, $spip_lang_right;
$decal = 0;
$decal = $decal + 150;
- $bandeau .= "\n<div id='bandeauinterface' class='bandeau bandeau_couleur_sous' style='$spip_lang_right: ".$decal."px; text-align: $spip_lang_right; white-space: nowrap;'>";
+ $bandeau = "\n<div id='bandeauinterface' class='bandeau bandeau_couleur_sous' style='$spip_lang_right: ".$decal."px; text-align: $spip_lang_right; white-space: nowrap;'>";
// couleurs
// $couleurs = charger_fonction('couleurs', 'inc');
. lien_change_var (generer_action_auteur('preferer',"display:1", $self),'','', '1,0,18,15', _T('lien_afficher_texte_seul'))
. lien_change_var (generer_action_auteur('preferer',"display:2", $self),'','', '19,0,40,15', _T('lien_afficher_texte_icones'))
. lien_change_var (generer_action_auteur('preferer',"display:3", $self),'','', '41,0,59,15', _T('lien_afficher_icones_seuls'))
- . "\n</map></div>";
+ . "\n</map></div>";
+
$bandeau .= "<div id='preferences_menu'>"
. http_img_pack("choix-layout$spip_lang_rtl".($spip_lang=='he'?'_he':'').".gif", _T('choix_interface'), " style='vertical-align: middle' width='59' height='15' usemap='#map_layout'")
. http_img_pack("rien.gif", "", "width='10' height='1'")
. "</div>";
- // ecran
+ // ecran
if ($spip_ecran == "large")
$bandeau .= "<div id='preferences_ecran'><a href='".generer_action_auteur('preferer',"spip_ecran:etroit", $self)."' class='lien_sous'>"._T('info_petit_ecran')."</a>/<b>"._T('info_grand_ecran')."</b></div>";
else
$bandeau .= "<div id='preferences_ecran'><b>"._T('info_petit_ecran')."</b>/<a href='".generer_action_auteur('preferer',"spip_ecran:large", $self)."' class='lien_sous'>"._T('info_grand_ecran')."</a></div>";
$bandeau .= "</div>";
-
-
- $bandeau .= "</div>";
- $bandeau .= "</div>\n";
-
-
- $bandeau .= '</div>';
return $bandeau;
}
// comme on cache fortement ce menu,
// son url change en fonction de sa date de modif
- $toutsite = "./?exec=menu_rubriques\\x26date=" . $GLOBALS['meta']['date_calcul_rubriques'];
- $navrapide = "./?exec=menu_navigation\\x26id_rubrique=$id_rubrique";
- $agenda = "./?exec=menu_agenda";
- return
-
- "\ninit_gadgets('$toutsite','$navrapide','$agenda','"
- .str_replace('</', '<\\/', addslashes(strtr(gadget_messagerie(),"\n\r"," ")))
- ."');\n";
+ $d = isset($GLOBALS['meta']['date_calcul_rubriques'])
+ ? $GLOBALS['meta']['date_calcul_rubriques'] : 0;
+
+ $args = join("',\n'", array(
+ "./?exec=menu_rubriques\\x26date=$d",
+ "./?exec=menu_navigation\\x26id_rubrique=$id_rubrique",
+ "./?exec=menu_agenda",
+ str_replace('</', '<\\/', addslashes(strtr(gadget_messagerie(),"\n\r"," ")))));
+ return "\$(document).ready(function(){init_bandeau_gadgets('$args')});";
}
?>
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
$orig = preg_replace(',\.\.+,', '.', $orig); // pas de .. dans le nom du doc
$dir = creer_repertoire_documents($ext);
- $dest = preg_replace("/[^._=-\w\d]+/", "_",
+ $dest = preg_replace("/[^.=\w-]+/", "_",
translitteration(preg_replace("/\.([^.]+)$/", "",
preg_replace("/<[^>]*>/", '', basename($orig)))));
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// http://doc.spip.org/@affiche_progression_javascript
-function affiche_progression_javascript($abs_pos,$size, $table="") {
+function affiche_progression_javascript($abs_pos,$size, $table="", $retour='') {
include_spip('inc/charsets');
echo "\n<script type='text/javascript'><!--\n";
echo "document.progression.recharge.value='".str_replace("'", "\\'", unicode_to_javascript(html2unicode(_T('avis_erreur').": $x")))." ';\n";
}
else {
+ if (!$retour) $retour = self();
echo "document.progression.recharge.value='".str_replace("'", "\\'", unicode_to_javascript(html2unicode(_T('info_fini'))))."';\n";
- echo "window.setTimeout('location.href=\"".self()."\";',0);";
+ echo "window.setTimeout('location.href=\"$retour\";',0);";
}
}
else {
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
if (!defined('_ECRIRE_INC_VERSION')) return;
+
// http://doc.spip.org/@insere_1_init
function insere_1_init($request) {
// table des translations
- $field = array(
- "type" => "VARCHAR(16) NOT NULL",
- "ajout" => "integer NOT NULL", // en fait booleen
- "titre" => "text NOT NULL",
- "id_old" => "bigint (21) DEFAULT '0' NOT NULL",
- "id_new" => "bigint (21) DEFAULT '0' NOT NULL");
-
- $key = array(
- "PRIMARY KEY" => "id_old, id_new, type",
- "KEY id_old" => "id_old");
-
- $v = sql_create('spip_translate', $field, $key, true);
+ $res = insere_1bis_init($request);
+ $desc = $GLOBALS['tables_principales'][_SPIP_TRANSLATE];
+ $v = sql_create(_SPIP_TRANSLATE, $desc['field'], $desc['key'], true);
if (!$v) {
spip_log("echec de la creation de la table de fusion");
return false;
}
// au cas ou la derniere fois ce serait terminee anormalement
- sql_delete("spip_translate");
- // pour PG
- $GLOBALS['tables_principales']['spip_translate'] =
- array('field' => $field, 'key' => $key);
- return insere_1bis_init($request);
+ $d = sql_delete(_SPIP_TRANSLATE);
+ spip_log("init " . _SPIP_TRANSLATE . " : $d");
+ return $res;
}
// http://doc.spip.org/@insere_1bis_init
-function insere_1bis_init($request) {
+function insere_1bis_init($request='') {
// l'insertion porte sur les tables principales ...
$t = array_keys($GLOBALS['tables_principales']);
unset($t[array_search('spip_forum', $t)]);
unset($t[array_search('spip_syndic', $t)]);
unset($t[array_search('spip_signatures', $t)]);
+
+ $field = array(
+ "type" => "VARCHAR(16) NOT NULL",
+ "ajout" => "integer NOT NULL", // en fait booleen
+ "titre" => "text NOT NULL",
+ "id_old" => "bigint (21) DEFAULT '0' NOT NULL",
+ "id_new" => "bigint (21) DEFAULT '0' NOT NULL");
+
+ $key = array(
+ "PRIMARY KEY" => "id_old, id_new, type",
+ "KEY id_old" => "id_old");
+
+ define('_SPIP_TRANSLATE',
+ 'spip_translate_' . $GLOBALS['visiteur_session']['id_auteur']);
+
+ // Pour que trouver_base ne fasse pas des siennes
+ // mais evidemment elle n'est pas a transferer!
+ $GLOBALS['tables_principales'][_SPIP_TRANSLATE] =
+ array('field' => $field, 'key' => $key);
+
return $t;
}
include_spip('inc/chercher_logo'); // pour les noms des logos
include_spip('inc/distant'); // pour recuperer les logos
- $q = sql_select('*', "spip_translate");
+ $q = sql_select('*', _SPIP_TRANSLATE);
$trans = array();
while ($r = sql_fetch($q)) {
$trans[$r['type']][$r['id_old']] = array($r['id_new'], $r['titre'], $r['ajout']);
}
+ $r = '';
+ foreach ($trans as $k =>$v) $r .= " $k: " . count($v);
+ spip_log( count($trans) . " types d'objets a transferer: $r");
return $trans;
}
// reserver une place dans les tables principales si nouveau
$ajout = 0;
- if ((!function_exists($f = 'import_identifie_' . $type_id))
+ if ((!($f = charger_fonction('identifie_' . $type_id, 'import', true)))
OR (!($n = $f($values, $table, $desc, $request)))) {
// pas d'importation de types_doc (a revoir)
if ($table == 'spip_types_documents') return;
if (is_array($n))
list($id, $titre) = $n;
else {$id = $n; $titre = "";}
- sql_insertq('spip_translate', array(
+ sql_insertq(_SPIP_TRANSLATE, array(
'id_old' => $values[$type_id],
'id_new' => $id,
'titre' => $titre,
// http://doc.spip.org/@import_translate
function import_translate($values, $table, $desc, $request, $atts) {
- if (!function_exists($f = 'import_translate_' . $table))
- $f = 'import_translate_std';
+ if (!($f = charger_fonction('translate_' . $table, 'import', true)))
+ $f = charger_fonction('translate_std', 'import');
$f($values, $table, $desc, $request, $atts);
}
// Insertion avec renumerotation, y compris des raccourcis.
// http://doc.spip.org/@import_translate_std
-function import_translate_std($values, $table, $desc, $request, $atts) {
+function import_translate_std_dist($values, $table, $desc, $request, $atts) {
foreach ($values as $k => $v) {
- if ($k=='id_parent' OR $k=='id_secteur')
- $type = 'id_rubrique';
- else $type = $k;
-
- $values[$k]= importe_raccourci(importe_translate_maj($type, $v));
+ switch($k) {
+ case 'id_secteur': $type = 'id_rubrique'; break;
+ case 'id_thread': $type = 'id_forum'; break;
+ case 'id_vignette': $type = 'id_document'; break;
+ case 'id_parent': $type =
+ isset($values['id_forum']) ? 'id_forum' : 'id_rubrique'; break;
+ default: $type = $k;
+ }
+ $values[$k]= importe_raccourci(importe_translate_maj($type, $v));
}
import_inserer_translate($values, $table, $desc, $request, $atts);
}
// http://doc.spip.org/@import_translate_spip_articles
-function import_translate_spip_articles($values, $table, $desc, $request, $atts) {
+function import_translate_spip_articles_dist($values, $table, $desc, $request, $atts) {
$v = $values['chapo'];
if ($v[0]=='=' AND preg_match(_RACCOURCI_CHAPO, substr($v,1)))
$values['chapo'] = '=[->' . substr($v,1) . ']';
if ($request['statut'] == 'on' AND $values['statut'] == 'publie')
$values['statut'] = 'prop';
- import_translate_std($values, $table, $desc, $request, $atts);
+ import_translate_std_dist($values, $table, $desc, $request, $atts);
}
// http://doc.spip.org/@import_translate_spip_breves
-function import_translate_spip_breves($values, $table, $desc, $request, $atts) {
+function import_translate_spip_breves_dist($values, $table, $desc, $request, $atts) {
if ($request['statut'] == 'on' AND $values['statut'] == 'publie')
$values['statut'] = 'prop';
- import_translate_std($values, $table, $desc, $request, $atts);
+ import_translate_std_dist($values, $table, $desc, $request, $atts);
}
// Les doc importes deviennent distants, a fortiori s'ils etaient deja
// Gerer les vieilles sauvegardes oĂą le Path etait en dur
// http://doc.spip.org/@import_translate_spip_documents
-function import_translate_spip_documents($values, $table, $desc, $request, $atts) {
+function import_translate_spip_documents_dist($values, $table, $desc, $request, $atts) {
if ($values['distant'] === 'oui') {
$url = '';
import_inserer_translate($values, $table, $desc, $request, $atts);
}
-function import_translate_spip_documents_liens($values, $table, $desc, $request, $atts) {
+function import_translate_spip_documents_liens_dist($values, $table, $desc, $request, $atts) {
$values['id_document']= (importe_translate_maj('id_document', $values['id_document']));
$values['id_objet']= (importe_translate_maj('id_' .$values['objet'], $values['id_objet']));
function importe_translate_maj($k, $v)
{
global $trans;
+ static $err = array();
if (!(isset($trans[$k]) AND isset($trans[$k][$v]))) return $v;
list($g, $titre, $ajout) = $trans[$k][$v];
if ($g <= 0) {
- $f = 'import_identifie_parent_' . $k;
- if (function_exists($f)) {
+ if (($f = charger_fonction('identifie_parent_' . $k, 'import', true))){
$g = $f($g, $titre, $v);
if ($g > 0)
// memoriser qu'on insere
$trans[$k][$v][2]=1;
else $g = (0-$g);
$trans[$k][$v][0] = $g;
- } else spip_log("$f manquante");
+ } else {
+ if (!isset($err[$f])) spip_log("$f manquante");
+ $err[$f] = true;
+ }
}
return $g;
}
// s'ils ont meme taille et meme nom et que le present n'est pas detruit
// Et ne pas importer les incoherences (docs sans extension)
// http://doc.spip.org/@import_identifie_id_document
-function import_identifie_id_document($values, $table, $desc, $request) {
+function import_identifie_id_document_dist($values, $table, $desc, $request) {
if (!$values['extension']) return false;
$t = $values['taille'];
$f = $values['fichier'];
// s'ils ont meme extension et meme titre
// Sinon il ne sera PAS importe
// http://doc.spip.org/@import_identifie_id_type
-function import_identifie_id_type($values, $table, $desc, $request) {
+function import_identifie_id_type_dist($values, $table, $desc, $request) {
$e = $values['extension'];
$t = $values['titre'];
$r = sql_fetsel("id_type AS id, titre", "spip_types_documents", "extension=" . sql_quote($e) . " AND titre=" . sql_quote($t));
// deux groupes de mots ne peuvent avoir le meme titre ==> identification
// http://doc.spip.org/@import_identifie_id_groupe
-function import_identifie_id_groupe($values, $table, $desc, $request) {
+function import_identifie_id_groupe_dist($values, $table, $desc, $request) {
$r = sql_fetsel("id_groupe AS id, titre", "spip_groupes_mots", "titre=" . sql_quote($values['titre']));
return $r ? array($r['id'], $r['titre']) : false;
}
// pour un mot le titre est insuffisant, il faut aussi l'identite du groupe.
// Memoriser ces 2 infos et le signaler a import_translate grace a 1 negatif
// http://doc.spip.org/@import_identifie_id_mot
-function import_identifie_id_mot($values, $table, $desc, $request) {
+function import_identifie_id_mot_dist($values, $table, $desc, $request) {
return array((0 - $values['id_groupe']), $values['titre']);
}
// Passe 2: mot de meme titre et de meme groupe ==> identification
// http://doc.spip.org/@import_identifie_parent_id_mot
-function import_identifie_parent_id_mot($id_groupe, $titre, $v)
+function import_identifie_parent_id_mot_dist($id_groupe, $titre, $v)
{
global $trans;
$titre = sql_quote($titre);
if ($r) return (0 - $r['id_mot']);
}
if ($r = sql_insertq('spip_mots'))
- sql_replace('spip_translate', array(
+ sql_replace(_SPIP_TRANSLATE, array(
'id_old' => $v,
'id_new' => $r,
'titre' => $titre,
'type' => 'id_mot',
- 'ajout' => 1));
+ 'ajout' => 1),
+ $GLOBALS['tables_principales'][_SPIP_TRANSLATE]);
else spip_log("Impossible d'inserer dans spip_mots");
return $r;
}
// idem pour les articles
// http://doc.spip.org/@import_identifie_id_article
-function import_identifie_id_article($values, $table, $desc, $request) {
+function import_identifie_id_article_dist($values, $table, $desc, $request) {
return array((0 - $values['id_rubrique']), $values['titre']);
}
// Passe 2 des articles comme pour les mots
// http://doc.spip.org/@import_identifie_parent_id_article
-function import_identifie_parent_id_article($id_parent, $titre, $v)
+function import_identifie_parent_id_article_dist($id_parent, $titre, $v)
{
$id_parent = importe_translate_maj('id_rubrique', (0 - $id_parent));
if ($r) return (0 - $r['id_article']);
if ($r = sql_insertq('spip_articles'))
- sql_replace('spip_translate', array(
+ sql_replace(_SPIP_TRANSLATE, array(
'id_old' => $v,
'id_new' => $r,
'titre' => $titre,
'type' => 'id_article',
'ajout' => 1),
- $GLOBALS['tables_principales']['spip_translate']
+ $GLOBALS['tables_principales'][_SPIP_TRANSLATE]
);
else spip_log("Impossible d'inserer dans spip_articles");
return $r;
// idem pour les breves
// http://doc.spip.org/@import_identifie_id_breve
-function import_identifie_id_breve($values, $table, $desc, $request) {
+function import_identifie_id_breve_dist($values, $table, $desc, $request) {
return array((0 - $values['id_rubrique']), $values['titre']);
}
// Passe 2 des breves comme pour les mots
// http://doc.spip.org/@import_identifie_parent_id_breve
-function import_identifie_parent_id_breve($id_parent, $titre, $v)
+function import_identifie_parent_id_breve_dist($id_parent, $titre, $v)
{
$id_parent = importe_translate_maj('id_rubrique', (0 - $id_parent));
if ($r) return (0 - $r['id_breve']);
if ($r = sql_insertq('spip_breves'))
- sql_replace('spip_translate', array(
+ sql_replace(_SPIP_TRANSLATE, array(
'id_old' => $v,
'id_new' => $r,
'titre' => $titre,
'type' => 'id_breve',
'ajout' => 1),
- $GLOBALS['tables_principales']['spip_translate']
+ $GLOBALS['tables_principales'][_SPIP_TRANSLATE]
);
else spip_log("Impossible d'inserer dans spip_breves");
return $r;
// pour une rubrique le titre est insuffisant, il faut l'identite du parent
// Memoriser ces 2 infos et le signaler a import_translate grace a 1 negatif
// http://doc.spip.org/@import_identifie_id_rubrique
-function import_identifie_id_rubrique($values, $table, $desc, $request) {
+function import_identifie_id_rubrique_dist($values, $table, $desc, $request) {
return array((0 - $values['id_parent']), $values['titre']);
}
// Passe 2 des rubriques, renumerotation en cascade.
// rubrique de meme titre et de meme parent ==> identification
// http://doc.spip.org/@import_identifie_parent_id_rubrique
-function import_identifie_parent_id_rubrique($id_parent, $titre, $v)
+function import_identifie_parent_id_rubrique_dist($id_parent, $titre, $v)
{
global $trans;
if (isset($trans['id_rubrique'])) {
else {
// premiere occurrence du parent
$pitre = $trans['id_rubrique'][$id_parent][1];
- $n = import_identifie_parent_id_rubrique($gparent, $pitre, $id_parent);
+ $n = import_identifie_parent_id_rubrique_dist($gparent, $pitre, $id_parent);
$trans['id_rubrique'][$id_parent][0] = ($n>0) ? $n: (0-$n);
// parent tout neuf,
// pas la peine de chercher un titre homonyme
// http://doc.spip.org/@import_alloue_id_rubrique
function import_alloue_id_rubrique($id_parent, $titre, $v) {
- if ($r = sql_insertq('spip_rubriques', array('titre' => $titre, id_parent => $id_parent)))
- sql_replace('spip_translate', array(
+ if ($r = sql_insertq('spip_rubriques', array('titre' => $titre, 'id_parent' => $id_parent)))
+ sql_replace(_SPIP_TRANSLATE, array(
'id_old' => $v,
'id_new' => $r,
'titre' => $titre,
'type' => 'id_rubrique',
'ajout' => 1),
- $GLOBALS['tables_principales']['spip_translate']);
+ $GLOBALS['tables_principales'][_SPIP_TRANSLATE]);
else spip_log("Impossible d'inserer dans spip_rubriques");
return $r;
}
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
array_shift($regs);
return $regs;
} else {
- $arg = '\s*\'([^\']*)\'\s*,';
- if (preg_match("#spip_connect_db\($arg$arg$arg$arg\s*'([^']*)'\s*(?:,\s*'([^']*))?#", $s, $regs)) {
+ $ar = '\s*\'([^\']*)\'';
+ $r = '\s*,' . $ar;
+ $r = "#spip_connect_db[(]$ar$r$r$r$r(?:$r(?:$r(?:$r)?)?)?#";
+ if (preg_match($r, $s, $regs)) {
$regs[2] = $regs[1] . (!$regs[2] ? '' : ":$port_db;");
array_shift($regs);
array_shift($regs);
}
}
spip_log("$file n'est pas un fichier de connexion");
- return '';
+ return array();
}
// http://doc.spip.org/@bases_referencees
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
foreach ($fichiers as $f) {
$f = preg_replace(",^$dir,",'',$f);
- if (preg_match(",\.([^.]+)$,", $f, $match)) {
+ if (!preg_match(",\.([^.]+)$,", $f, $match))
+ if (strtolower($f) === 'makefile') $match = array(0,'txt');
+ if ($match) {
$ext = strtolower($match[1]);
if (!isset($exts[$ext])) {
include_spip('inc/ajouter_documents');
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
}
// http://doc.spip.org/@html_lang_attributes
-function html_lang_attributes()
+function html_lang_attributes($dir=true)
{
+ if ($dir)
+ $dir = " dir='" . ($GLOBALS['spip_lang_rtl'] ? 'rtl' : 'ltr') . "'";
+
return "<html lang='"
. $GLOBALS['spip_lang']
- . "' dir='"
- . ($GLOBALS['spip_lang_rtl'] ? 'rtl' : 'ltr')
- . "'>\n" ;
+ . "'"
+ . $dir
+ . ">\n" ;
}
init_langues();
utiliser_langue_site();
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
{
$titre = $document['titre'];
$entete = basename($document['fichier']);
- if (($n=strlen($entete)) > 20)
- $entete = substr($entete, 0, 7)."...".substr($entete, $n-7, $n);
+ if (strlen($entete) > 20)
+ $entete = substr($entete, 0, 20)."...";
if (strlen($titre))
$entete = "<strong>". lignes_longues(typo($titre),25) . "</strong>";
return sinon($entete,_T('info_sans_titre'));
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
$class = "spip_mail";
elseif (preg_match('/^<html>/',$texte)) # cf traiter_lien_explicite
$class = "spip_url spip_out";
- elseif (!$class) $class = "spip_out"; # si pas spip_in|spip_glossaire
+ elseif (!$class) {
+ # spip_out sur les URLs externes
+ if (preg_match(',^\w+://,iS', $lien)
+ AND strncasecmp($lien, url_de_base(), strlen(url_de_base()))
+ )
+ $class = "spip_out"; # si pas spip_in|spip_glossaire
+ }
// Si l'objet n'est pas de la langue courante, on ajoute hreflang
if (!$hlang AND $lang!==$GLOBALS['spip_lang'])
$lang = ($hlang ? " hreflang='$hlang'" : '');
- if ($title) $title = ' title="'.texte_backend($title).'"';
+ if ($title)
+ $title = ' title="'.texte_backend($title).'"';
+ else
+ $title = ''; // $title peut etre 'false'
// rel=external pour les liens externes
if (preg_match(',^https?://,S', $lien)
// http://doc.spip.org/@traiter_raccourci_lien_atts
function traiter_raccourci_lien_atts($texte) {
- $bulle = $hlang = '';
+ $bulle = $hlang = false;
// title et hreflang donnes par le raccourci ?
if (preg_match(_RACCOURCI_ATTRIBUTS, $texte, $m)) {
return $r ? $r : traiter_lien_explicite($ref, $texte, $pour, $connect);
}
-define('_EXTRAIRE_LIEN', ",^\s*(http:?/?/?|mailto:?)\s*$,iS");
+define('_EXTRAIRE_LIEN', ',^\s*(?:' . _PROTOCOLES_STD . '):?/?/?\s*$,iS');
// http://doc.spip.org/@traiter_lien_explicite
function traiter_lien_explicite ($ref, $texte='', $pour='url', $connect='')
// dans le cas d'un lien vers un doc, ajouter le type='mime/type'
if ($type == 'document'
- AND $mime = sql_getfetsel('mime_type', 'spip_types_documents',
- "extension IN (SELECT extension FROM spip_documents where id_document =".sql_quote($id).")",
- '','','','',$connect)
+ AND $extension = sql_getfetsel("extension","spip_documents", " id_document =".sql_quote($id), '', '', '', '', $connect)
+ AND $mime = sql_getfetsel('mime_type', 'spip_types_documents',"extension=".sql_quote($extension),'','','','',$connect)
)
$r['mime'] = $mime;
$gloss = $m[1] ? ('#' . $m[1]) : '';
$t = $r[1] . $r[2] . $r[5];
list($t, $bulle, $hlang) = traiter_raccourci_lien_atts($t);
+ if ($bulle===false) $bulle = $m[1];
$t = unicode2charset(charset2unicode($t), 'utf-8');
$ref = $lien("glose$_n$gloss", $t, 'spip_glossaire', $bulle, $hlang);
$texte = str_replace($regs[0], $ref, $texte);
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
return $url;
}
-?>
\ No newline at end of file
+?>
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// The use of this software is at the risk of the user.
//
// --------------------------------------------------------------------------------
-// $Id: pclzip.php 14957 2010-01-22 17:10:56Z esj@rezo.net $
+// $Id: pclzip.php 20057 2012-12-18 12:35:40Z gilles.vincent@gmail.com $
// --------------------------------------------------------------------------------
// ----- Constants
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// http://doc.spip.org/@debut_cadre
function debut_cadre($style, $icone = "", $fonction = "", $titre = "", $id="", $class="", $padding=true) {
- global $spip_display, $spip_lang_left;
+ global $spip_display;
static $accesskey = 97; // a
//zoom:1 fixes all expanding blocks in IE, see authors block in articles.php
//being not standard, next step can be putting this kind of hacks in a different stylesheet
//visible to IE only using conditional comments.
- $style_cadre = " style='";
- if ($spip_display != 1 AND $spip_display != 4 AND strlen($icone) > 1) {
- $style_gauche = "padding-$spip_lang_left: 38px;";
- $style_cadre .= "'";
- } else {
- $style_cadre .= "'";
- $style_gauche = '';
- }
-
// accesskey pour accessibilite espace prive
if ($accesskey <= 122) // z
{
. ($id?"id='$id' ":"")
."class='cadre cadre-$style"
. ($class?" $class":"")
- ."'$style_cadre>";
+ ."'>";
if ($spip_display != 1 AND $spip_display != 4 AND strlen($icone) > 1) {
if ($fonction) {
// http://doc.spip.org/@envoi_link
-function envoi_link($nom_site_spip, $minipres=false) {
+function envoi_link($nom_site_spip, $minipres=false, $js='') {
global $spip_display, $spip_lang;
$paramcss = parametres_css_prive();
// CSS de secours en cas de non fonct de la suivante
$res = '<link rel="stylesheet" type="text/css" href="'
- . url_absolue(find_in_path('style_prive_defaut.css'))
+ . url_absolue(find_in_path('prive/style_prive_defaut.css'))
. '" id="cssprivee" />' . "\n"
// CSS calendrier
. url_absolue(find_in_path('agenda.css')) .'" />' . "\n"
: '')
- // CSS imprimante (masque des trucs, a completer)
+ // CSS des raccourcis
. '<link rel="stylesheet" type="text/css" href="'
- . url_absolue(find_in_path('spip_style.css'))
+ . url_absolue(find_in_path('prive/spip_style.css'))
. '" media="all" />' . "\n"
// CSS imprimante (masque des trucs, a completer)
. '<link rel="stylesheet" type="text/css" href="'
- . url_absolue(find_in_path('spip_style_print.css'))
+ . url_absolue(find_in_path('prive/spip_style_print.css'))
. '" media="print" />' . "\n"
// CSS "visible au chargement" differente selon js actif ou non
. '<link rel="stylesheet" type="text/css" href="'
- . url_absolue(find_in_path('spip_style_'
+ . url_absolue(find_in_path('prive/spip_style_'
. (_SPIP_AJAX ? 'invisible' : 'visible')
. '.css'))
.'" />' . "\n"
// CSS optionelle minipres
. ($minipres?'<link rel="stylesheet" type="text/css" href="'
- . url_absolue(find_in_path('minipres.css')).'" />' . "\n":"");
+ . url_absolue(find_in_path('prive/minipres.css')).'" />' . "\n":"");
$favicon = find_in_path('spip.ico');
. url_absolue($favicon)
. "\" type='image/x-icon' />\n";
- $js = debut_javascript();
+ $js = debut_javascript($js);
if ($spip_display == 4) return $res . $js;
}
// http://doc.spip.org/@debut_javascript
-function debut_javascript()
+function debut_javascript($fin='')
{
global $spip_lang_left, $browser_name, $browser_version;
include_spip('inc/charsets');
if (!defined('_LARGEUR_ICONES_BANDEAU'))
include_spip('inc/bandeau');
- return
- // envoi le fichier JS de config si browser ok.
- $GLOBALS['browser_layer'] .
- http_script(
- ((isset($_COOKIE['spip_accepte_ajax']) && $_COOKIE['spip_accepte_ajax'] >= 1)
+
+ $inline = ((isset($_COOKIE['spip_accepte_ajax']) && $_COOKIE['spip_accepte_ajax'] >= 1)
? ''
: "jQuery.ajax({'url':'$testeur'});") .
(_OUTILS_DEVELOPPEURS ?"var _OUTILS_DEVELOPPEURS=true;":"") .
($browser_version >= 6))) ? 1 : 0) .
"\nvar confirm_changer_statut = '" .
unicode_to_javascript(addslashes(html2unicode(_T("confirm_changer_statut")))) .
- "';\n") .
- //plugin needed to fix the select showing through the submenus o IE6
- (($browser_name == "MSIE" && $browser_version <= 6) ? http_script('', 'bgiframe.js'):'' ) .
- http_script('', 'presentation.js') .
- http_script('', 'gadgets.js');
+ "';\n";
+ return
+ // envoi le fichier JS de config si browser ok.
+ $GLOBALS['browser_layer'] .
+ //plugin needed to fix the select showing through the submenus o IE6
+ (($browser_name == "MSIE" && $browser_version <= 6) ? http_script('', 'bgiframe.js'):'' ) .
+ http_script('', 'presentation.js') .
+ http_script('', 'gadgets.js') .
+ http_script($inline . $fin);
}
// Fonctions onglets
}
// http://doc.spip.org/@bouton_spip_rss
-function bouton_spip_rss($op, $args=array(), $lang='') {
+function bouton_spip_rss($op, $args=array(), $lang='', $title='RSS') {
global $spip_lang_right;
include_spip('inc/acces');
- $clic = http_img_pack('feed.png', 'RSS', '', 'RSS');
+ $clic = http_img_pack('feed.png', 'RSS', '', $title);
$args = param_low_sec($op, $args, $lang, 'rss');
$url = generer_url_public('rss', $args);
return "<a style='float: $spip_lang_right;' href='$url'>$clic</a>";
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
return "<img src='" . chemin_image("attachment.gif") . "' alt='' />";
}
+function puce_statut_signature_dist($id, $statut, $id_rubrique, $type, $ajax='') {
+ return "<img src='" . chemin_image("visit-12.gif") . "' alt='' />";
+}
+
// http://doc.spip.org/@puce_statut_auteur_dist
// Hack de compatibilite: les appels directs ont un $type != 'auteur'
// si l'auteur ne peut pas se connecter
// http://doc.spip.org/@puce_statut_site_dist
function puce_statut_site_dist($id, $statut, $id_rubrique, $type, $ajax=''){
+ global $lang_objet;
static $coord = array('publie' => 1,
'prop' => 0,
'refuse' => 2,
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
$path = $url['path'];
} else $query = $host = $path ='';
- // Cette fonction affecte directement les variables selon la query-string !
- parse_str($query);
+ // construire un array des variables directement depuis la query-string
+ parse_str($query, $Tquery);
$keywords = '';
$found = false;
if (strpos($arr_engines[$cnt][1],'=')!==false) {
- // Fonctionnement simple: la variable existe
+ // Fonctionnement simple: la variable existe dans l'array
$v = str_replace('=', '', $arr_engines[$cnt][1]);
- $keywords = isset($$v)?$$v:"";
+ $keywords = isset($Tquery[$v]) ? $Tquery[$v]: "";
// Si on a defini le nom de la variable en expression reguliere, chercher la bonne variable
if (! strlen($keywords) > 0) {
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
$opt .= " value='$val'>"._T($desc)."</option>";
}
-
$nb_forums = sql_countsel("spip_forum", "id_article=$id_article AND statut IN ('publie', 'off', 'prop', 'spam')");
if ($nb_forums) {
"",
false
);
- } else
- $res = '';
+ } elseif ($statut_forum != 'non')
+ $res = bouton_spip_rss('forums_public', array("id_article" => $id_article));
$res .= "\n\t<label for='change_accepter_forum'>"
. _T('info_fonctionnement_forum') ."</label>"
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
while ($row = sql_fetch($r))
sql_update("spip_syndic", array("id_secteur" => $row['secteur']), "id_syndic=".$row['id']);
+ // reparer les mots
+ $r = sql_select('id_rubrique', 'spip_mots_rubriques','', 'id_rubrique');
+ while ($row = sql_fetch($r)) {
+ $w = "id_rubrique=" . $row['id_rubrique'];
+ if (!sql_fetsel(1, 'spip_rubriques', $w)) {
+ $n = sql_delete('spip_mots_rubriques', $w);
+ spip_log("nettoyage $w $n");
+ }
+ }
// avertir les plugins qui peuvent faire leur mises a jour egalement
pipeline('trig_propager_les_secteurs','');
}
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
time() + $duree
);
spip_log("ajoute session $fichier_session cookie $duree");
+
+ // purger au passage les vieux fichiers de session
+ supprimer_sessions(-1);
+
return $_COOKIE['spip_session'];
}
}
// Lire une valeur dans la session SPIP
// http://doc.spip.org/@session_get
function session_get($nom) {
- return $GLOBALS['visiteur_session'][$nom];
+ return isset($GLOBALS['visiteur_session'][$nom]) ? $GLOBALS['visiteur_session'][$nom] : null;
}
// Quand on modifie une fiche auteur on appelle cette fonction qui va
$GLOBALS['visiteur_session'] = $sauve;
// si c'est le meme, rafraichir les valeurs
- if ($auteur['id_auteur'] == $sauve['id_auteur'])
+ if (isset($sauve['id_auteur']) and $auteur['id_auteur'] == $sauve['id_auteur'])
verifier_session();
}
if (!preg_match(",^\D*(\d+)_\w{32}\.php[3]?$,", $e, $r))
continue;
$f = _DIR_SESSIONS . $e;
- if (($id_auteur AND ($r[1] == $id_auteur))
- OR ($t > filemtime($f))) {
+ if (file_exists($f) AND (($id_auteur AND ($r[1] == $id_auteur))
+ OR ($t > filemtime($f)))) {
spip_unlink($f);
$i++;
}
verifier_session();
spip_unlink(fichier_session('alea_ephemere', true));
}
- spip_log("destruction des $i fichiers de session de $id_auteur et 0");
+ if ($i) spip_log("destruction des $i fichiers de session de $id_auteur et 0");
// forcer le recalcul de la session courante
spip_session(true);
}
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
if (!$nom_site) $nom_site = _T('info_site');
$res .= "<div class='site'><span class='spip_x-small'>"._T('info_site_web')."</span> <a href='$url_site'>$nom_site</a></div>\n";
}
- if ($ad_email) {
- $res .= "<div class='ad_email'><span class='spip_x-small'>"
- ._T('info_adresse_email')
- ."</span> "
- . (!email_valide($ad_email)
- ? $ad_email :
- ("<a href='mailto:" . attribut_html($ad_email) . "'>$ad_email</a>"))
- . "</div>\n";
- }
+
+ if ($ad_email) $res .= signatures_edit_mail($id_article, $ad_email, $row);
$res .= "<div class='texte'>" . message_de_signature($row) . "</div>";
. $h2
. "'>"
. typo($titre_a)
- . "</a><a ' class='reponse_a' style='float: $spip_lang_right; padding-$spip_lang_left: 4px;' href='$href' title='$id_rubrique'>"
+ . "</a><a class='reponse_a' style='float: $spip_lang_right; padding-$spip_lang_left: 4px;' href='$href' title='$id_rubrique'>"
. typo($titre_r)
. " </a></div>";
}
return $res;
}
+
+function signatures_edit_mail($id_article, $ad_email, $row) {
+
+ $email = attribut_html($ad_email);
+ if (email_valide($ad_email)) {
+ if ($row['statut'] != 'publie'
+ AND autoriser('modererpetition', 'article', $id_article)) {
+ include_spip('formulaires/signature');
+ $url = generer_url_entite_absolue($id_article, 'article','','',true);
+ list($titre, $url) = signature_langue($id_article, $url);
+
+ list($sujet, $corps) = signature_demande_confirmation($id_article, $url, $row['nom_email'], $row['nom_site'], $row['url_site'], $row['message'], $titre, $row['statut']);
+
+ include_spip('inc/filtres');
+ $sujet = rawurlencode(filtrer_entites($sujet));
+ $corps = rawurlencode(filtrer_entites($corps));
+ $corps = "?subject=$sujet&body=$corps";
+ } else $corps = '';
+ $email = "<a href=\"mailto:$ad_email$corps\">$email</a>";
+ }
+ return "<div class='ad_email'><span class='spip_x-small'>"
+ ._T('info_adresse_email')
+ ."</span> "
+ . $email
+ . "</div>\n";
+
+}
?>
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// http://doc.spip.org/@statistiques_signatures_dist
function statistiques_signatures_dist($duree, $interval, $type, $id_article, $serveur)
{
- $where = "id_article=$id_article";
+ $where = "id_article=$id_article AND statut='publie'";
$total = sql_countsel("spip_signatures", $where);
if (!$total) return '';
$order = 'date_time';
if ($duree)
- $where .= " AND $order > DATE_SUB(".sql_quote(date('Y-m-d H:i:s')).",INTERVAL $duree $type)";
+ $where2 = "$where AND $order > DATE_SUB(".sql_quote(date('Y-m-d H:i:s')).",INTERVAL $duree $type)";
- $log = statistiques_collecte_date('COUNT(*)', "(FLOOR(UNIX_TIMESTAMP($order) / $interval) * $interval)", 'spip_signatures', $where, $serveur);
+ $log = statistiques_collecte_date('COUNT(*)', "(FLOOR(UNIX_TIMESTAMP($order) / $interval) * $interval)", 'spip_signatures', $where2, $serveur);
$script = generer_url_ecrire('controle_petition', "id_article=$id_article");
if (count($log) > 1) {
- $res = statistiques_tous($log, $id_article, "spip_signatures", "id_article=$id_article", "date_time", $serveur, $duree, $interval, $total, 0, '', array(), $script);
+ $res = statistiques_tous($log, $id_article, "spip_signatures", $where, "date_time", $serveur, $duree, $interval, $total, 0, '', array(), $script);
$res = gros_titre(_T('titre_page_statistiques_signatures_jour'),'', false) . cadre_stat($res, 'spip_signatures', $id_article);
} else $res = '';
$mois = statistiques_collecte_date( "COUNT(*)",
"DATE_FORMAT(date_time,'%Y%m')",
"spip_signatures",
- "date_time > DATE_SUB(".sql_quote(date('Y-m-d H:i:s')).",INTERVAL 2700 DAY)"
- . (" AND id_article=$id_article"),
+ "$where AND date_time > DATE_SUB(".sql_quote(date('Y-m-d H:i:s')).",INTERVAL 2700 DAY)",
$serveur);
return "<br />"
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
include_spip('inc/charsets');
if(!is_utf8($surcharge_surligne)) $surcharge_surligne = utf8_encode($surcharge_surligne);
}
+ $surcharge_surligne = preg_replace(',\*$,', '', trim($surcharge_surligne)); # supprimer un * final
}
foreach($surlignejs_engines as $engine)
if($surcharge_surligne || (preg_match($engine[0],$ref) && preg_match($engine[1],$ref))) {
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// (note: ca pourrait etre defini site par site, mais ca risque d'etre
// plus lourd que vraiment utile)
if ($GLOBALS['controler_dates_rss']) {
- if ($la_date > time() + 48 * 3600)
+ if (!$la_date
+ OR $la_date > time() + 48 * 3600)
$la_date = time();
}
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
if (strpos($letexte,"base64$source")) {
# spip_log(htmlspecialchars($letexte)); ## pour les curieux
if (strpos($letexte,"<")!==false AND
- preg_match_all(',<(span|div) class=[\'"]base64'.$source.'[\'"]\s(.*)>\s*</\1>,UmsS',
+ preg_match_all(',<(span|div)\sclass=[\'"]base64'.$source.'[\'"]\s(.*)>\s*</\1>,UmsS',
$letexte, $regs, PREG_SET_ORDER)) {
foreach ($regs as $reg) {
$rempl = base64_decode(extraire_attribut($reg[0], 'title'));
if ( $offset<$length
&& ($p_tag_ouvrant = strpos($texte,'<',$offset))!==NULL){
$p_tag_fermant = strpos($texte,'>',$offset);
- if ($p_tag_fermant<$p_tag_ouvrant)
+ if ($p_tag_fermant && ($p_tag_fermant<$p_tag_ouvrant))
$offset = $p_tag_fermant+1; // prolonger la coupe jusqu'au tag fermant suivant eventuel
}
$texte = substr($texte, 0, $offset); /* eviter de travailler sur 10ko pour extraire 150 caracteres */
// Tableaux
//
+define('_RACCOURCI_CAPTION', ',^\|\|([^|]*)(\|(.*))?$,sS');
define('_RACCOURCI_TH_SPAN', '\s*(?:{{[^{}]+}}\s*)?|<');
+define('_RACCOURCI_THEAD', true);
// http://doc.spip.org/@traiter_tableau
function traiter_tableau($bloc) {
// Traiter chaque ligne
$reg_line1 = ',^(\|(' . _RACCOURCI_TH_SPAN . '))+$,sS';
$reg_line_all = ',^' . _RACCOURCI_TH_SPAN . '$,sS';
+ $num_cols = 0;
foreach ($regs[1] as $ligne) {
$l ++;
// Gestion de la premiere ligne :
- if ($l == 1) {
+ if (($l == 1) AND preg_match(_RACCOURCI_CAPTION, rtrim($ligne,'|'), $cap)) {
// - <caption> et summary dans la premiere ligne :
// || caption | summary || (|summary est optionnel)
- if (preg_match(',^\|\|([^|]*)(\|(.*))?$,sS', rtrim($ligne,'|'), $cap)) {
- $l = 0;
- if ($caption = trim($cap[1]))
- $debut_table .= "<caption>".$caption."</caption>\n";
+ $l = 0;
+ if ($caption = trim($cap[1]))
+ $debut_table .= "<caption>".$caption."</caption>\n";
$summary = ' summary="'.entites_html(trim($cap[3])).'"';
- }
- // - <thead> sous la forme |{{titre}}|{{titre}}|
- // Attention thead oblige a avoir tbody
- else if (preg_match($reg_line1, $ligne)) {
- preg_match_all('/\|([^|]*)/S', $ligne, $cols);
+ } else {
+ // - <th> sous la forme |{{titre}}|{{titre}}|
+ if (preg_match($reg_line1, $ligne)) {
+ preg_match_all('/\|([^|]*)/S', $ligne, $cols);
$ligne='';$cols= $cols[1];
$colspan=1;
- for($c=count($cols)-1; $c>=0; $c--) {
+ $num_cols = count($cols);
+ for($c=$num_cols-1; $c>=0; $c--) {
$attr='';
if($cols[$c]=='<') {
$colspan++;
} else {
- if($colspan>1) {
+ if ($colspan>1) {
$attr= " colspan='$colspan'";
$colspan=1;
}
$ligne= "<th scope='col'$attr>$cols[$c]</th>$ligne";
}
}
-
- $debut_table .= "<thead><tr class='row_first'>".
- $ligne."</tr></thead>\n";
- $l = 0;
- }
- }
-
- // Sinon ligne normale
- if ($l) {
+ $lignes[] = $ligne;
+ } else {
+ // Sinon ligne normale
// Gerer les listes a puce dans les cellules
if (strpos($ligne,"\n-*")!==false OR strpos($ligne,"\n-#")!==false)
$ligne = traiter_listes($ligne);
// tout mettre dans un tableau 2d
preg_match_all('/\|([^|]*)/S', $ligne, $cols);
$lignes[]= $cols[1];
+ }
}
}
// du nombre de colonnes dans la premiere ligne.
// Reperer egalement les colonnes numeriques pour les cadrer a droite
$rowspans = $numeric = array();
- $n = count($lignes[0]);
+ $n = $num_cols ? $num_cols : count($lignes[0]);
$k = count($lignes);
// distinguer les colonnes numeriques a point ou a virgule,
// pour les alignements eventuels sur "," ou "."
$align = true;
for ($j=0;$j<$k;$j++) $rowspans[$j][$i] = 1;
for ($j=0;$j<$k;$j++) {
+ if (!is_array($lignes[$j])) continue; // cas du th
$cell = trim($lignes[$j][$i]);
if (preg_match($reg_line_all, $cell)) {
- if (!preg_match('/^\d+([.,]?)\d*$/', $cell, $r))
+ if (!preg_match('/^[+-]?(?:\s|\d)*([.,]?)\d*$/', $cell, $r))
{ $align = ''; break;}
else if ($r[1]) $align = $r[1];
}
for($l=count($lignes)-1; $l>=0; $l--) {
$cols= $lignes[$l];
- $colspan=1;
- $ligne='';
-
- for($c=count($cols)-1; $c>=0; $c--) {
+ if (!is_array($cols)) {
+ $class = 'first';
+ $ligne = $cols;
+ } else {
+ $ligne='';
+ $colspan=1;
+ $class = alterner($l+1, 'even', 'odd');
+ for($c=count($cols)-1; $c>=0; $c--) {
$attr= $numeric[$c];
$cell = trim($cols[$c]);
if($cell=='<') {
}
$ligne= "\n<td".$attr.'>'.$cols[$c].'</td>'.$ligne;
}
+ }
}
-
- // ligne complete
- $class = alterner($l+1, 'even', 'odd');
$html = "<tr class='row_$class'>$ligne</tr>\n$html";
}
+ if (_RACCOURCI_THEAD
+ AND preg_match("@^(<tr class='row_first'.*?</tr>)(.*)$@s", $html, $m))
+ $html = "<thead>$m[1]</thead>\n<tbody>$m[2]</tbody>\n";
+
return "\n\n<table".$GLOBALS['class_spip_plus'].$summary.">\n"
. $debut_table
- . "<tbody>\n"
. $html
- . "</tbody>\n"
. "</table>\n\n";
}
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
function spip_touch($fichier, $duree=0, $touch=true) {
if ($duree) {
clearstatcache();
- if ((@$f=filemtime($fichier)) AND ($f >= time() - $duree))
+ if (file_exists($fichier) AND ($f=filemtime($fichier)) AND ($f >= time() - $duree))
return false;
}
if ($touch!==false) {
function generer_form_ecrire($script, $corps, $atts='', $submit='') {
global $spip_lang_right;
- $script1 = array_shift(explode('&', $script));
+ $script1 = explode('&', $script);
+ $script1 = array_shift($script1);
return "<form action='"
. ($script ? generer_url_ecrire($script) : '')
. "<input type='hidden' name='exec' value='$script1' />"
. $corps
. (!$submit ? '' :
- ("<div style='text-align: $spip_lang_right'><input type='submit' value=\"".entites_html($submit)."\" /></div>"))
+ ("<div style='text-align: $spip_lang_right'><input type='submit' value=\"".attribut_html($submit)."\" /></div>"))
. "</div></form>\n";
}
if ($too_late++) return;
// taille mini des login
- define('_LOGIN_TROP_COURT', 4);
+ if (!defined('_LOGIN_TROP_COURT')) define('_LOGIN_TROP_COURT', 4);
// la taille maxi des logos (0 : pas de limite)
- define('_LOGO_MAX_SIZE', 0); # poids en ko
- define('_LOGO_MAX_WIDTH', 0); # largeur en pixels
- define('_LOGO_MAX_HEIGHT', 0); # hauteur en pixels
+ if (!defined('_LOGO_MAX_SIZE')) define('_LOGO_MAX_SIZE', 0); # poids en ko
+ if (!defined('_LOGO_MAX_WIDTH')) define('_LOGO_MAX_WIDTH', 0); # largeur en pixels
+ if (!defined('_LOGO_MAX_HEIGHT')) define('_LOGO_MAX_HEIGHT', 0); # hauteur en pixels
- define('_DOC_MAX_SIZE', 0); # poids en ko
+ if (!defined('_DOC_MAX_SIZE')) define('_DOC_MAX_SIZE', 0); # poids en ko
- define('_IMG_MAX_SIZE', 0); # poids en ko
- define('_IMG_MAX_WIDTH', 0); # largeur en pixels
- define('_IMG_MAX_HEIGHT', 0); # hauteur en pixels
+ if (!defined('_IMG_MAX_SIZE')) define('_IMG_MAX_SIZE', 0); # poids en ko
+ if (!defined('_IMG_MAX_WIDTH')) define('_IMG_MAX_WIDTH', 0); # largeur en pixels
+ if (!defined('_IMG_MAX_HEIGHT')) define('_IMG_MAX_HEIGHT', 0); # hauteur en pixels
- define('_COPIE_LOCALE_MAX_SIZE',16777216); // poids en octet
+ if (!defined('_COPIE_LOCALE_MAX_SIZE')) define('_COPIE_LOCALE_MAX_SIZE',16777216); // poids en octet
// qq chaines standard
- define('_ACCESS_FILE_NAME', '.htaccess');
- define('_AUTH_USER_FILE', '.htpasswd');
- define('_SPIP_DUMP', 'dump@nom_site@@stamp@.xml');
- define('_CACHE_RUBRIQUES', _DIR_TMP.'menu-rubriques-cache.txt');
- define('_CACHE_RUBRIQUES_MAX', 500);
+ if (!defined('_ACCESS_FILE_NAME')) define('_ACCESS_FILE_NAME', '.htaccess');
+ if (!defined('_AUTH_USER_FILE')) define('_AUTH_USER_FILE', '.htpasswd');
+ if (!defined('_SPIP_DUMP')) define('_SPIP_DUMP', 'dump@nom_site@@stamp@.xml');
+ if (!defined('_CACHE_RUBRIQUES')) define('_CACHE_RUBRIQUES', _DIR_TMP.'menu-rubriques-cache.txt');
+ if (!defined('_CACHE_RUBRIQUES_MAX')) define('_CACHE_RUBRIQUES_MAX', 500);
- define('_EXTENSION_SQUELETTES', 'html');
+ if (!defined('_EXTENSION_SQUELETTES')) define('_EXTENSION_SQUELETTES', 'html');
- define('_DOCTYPE_ECRIRE',
+ if (!defined('_DOCTYPE_ECRIRE')) define('_DOCTYPE_ECRIRE',
// "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>\n");
//"<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>\n");
"<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>\n");
// "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1 //EN' 'http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd'>\n");
- define('_DOCTYPE_AIDE',
+ if (!defined('_DOCTYPE_AIDE')) define('_DOCTYPE_AIDE',
"<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Frameset//EN' 'http://www.w3.org/TR/1999/REC-html401-19991224/frameset.dtd'>");
// L'adresse de base du site ; on peut mettre '' si la racine est geree par
// le script de l'espace public, alias index.php
- define('_SPIP_SCRIPT', 'spip.php');
+ if (!defined('_SPIP_SCRIPT')) define('_SPIP_SCRIPT', 'spip.php');
// argument page, personalisable en cas de conflit avec un autre script
- define('_SPIP_PAGE', 'page');
+ if (!defined('_SPIP_PAGE')) define('_SPIP_PAGE', 'page');
// le script de l'espace prive
// Mettre a "index.php" si DirectoryIndex ne le fait pas ou pb connexes:
// les anciens IIS n'acceptent pas les POST sur ecrire/ (#419)
// meme pb sur thttpd cf. http://forum.spip.org/fr_184153.html
- define('_SPIP_ECRIRE_SCRIPT', // true ? #decommenter ici et commenter la
+ if (!defined('_SPIP_ECRIRE_SCRIPT')) define('_SPIP_ECRIRE_SCRIPT', // true ? #decommenter ici et commenter la
preg_match(',IIS|thttpd,',$_SERVER['SERVER_SOFTWARE']) ?
'index.php' : '');
# nombre de pixels maxi pour calcul de la vignette avec gd
# au dela de 5500000 on considere que php n'est pas limite en memoire pour cette operation
# les configurations limitees en memoire ont un seuil plutot vers 1MPixel
- define('_IMG_GD_MAX_PIXELS', (isset($GLOBALS['meta']['max_taille_vignettes'])&&$GLOBALS['meta']['max_taille_vignettes']<5500000)?$GLOBALS['meta']['max_taille_vignettes']:0);
- define('_IMG_GD_QUALITE', 85);
+ if (!defined('_IMG_GD_MAX_PIXELS')) define('_IMG_GD_MAX_PIXELS', (isset($GLOBALS['meta']['max_taille_vignettes'])&&$GLOBALS['meta']['max_taille_vignettes']<5500000)?$GLOBALS['meta']['max_taille_vignettes']:0);
+ if (!defined('_IMG_GD_QUALITE')) define('_IMG_GD_QUALITE', 85);
if (!defined('_MEMORY_LIMIT_MIN')) define('_MEMORY_LIMIT_MIN', 16);
// si on est dans l'espace prive et si le besoin est superieur a 8Mo (qui est vraiment le standard)
else
define('_INTERDIRE_COMPACTE_HEAD_ECRIRE',true); // evite une page blanche car on ne saura pas calculer la css dans ce hit
}
+ // Protocoles a normaliser dans les chaines de langues
+ if (!defined('_PROTOCOLES_STD'))
+ define('_PROTOCOLES_STD', 'http|https|ftp|mailto|webcal');
init_var_mode();
}
if ($page === '') {
$c = isset($options['compil']) ? $options['compil'] :'';
$a = array('fichier'=>$fond.'.'._EXTENSION_SQUELETTES);
- erreur_squelette(_T('info_erreur_squelette2', $a), $c);
+ $erreur = _T('info_erreur_squelette2', $a); // squelette introuvable
+ erreur_squelette($erreur, $c);
+ // eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4
+ $page = array('texte' => '', 'erreur' => $erreur);
}
-
+
if (isset($options['ajax'])AND $options['ajax']){
include_spip('inc/filtres');
$page['texte'] = encoder_contexte_ajax(array_merge($contexte,array('fond'=>$f)),'',$page['texte']);
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
# le nom du repertoire des fichiers Permanents Accessibles par http://
define('_NOM_PERMANENTS_ACCESSIBLES', "IMG/");
-/*
- * detecteur de robot d'indexation
- * utilise en divers endroits, centralise ici
- */
-if (!defined('_IS_BOT'))
- define('_IS_BOT',
- isset($_SERVER['HTTP_USER_AGENT'])
- AND preg_match(',bot|slurp|crawler|spider|webvac|yandex,i',
- $_SERVER['HTTP_USER_AGENT'])
- );
-
-
// Le nom du fichier de personnalisation
define('_NOM_CONFIG', 'mes_options');
include $f;
+/*
+ * detecteur de robot d'indexation
+ * utilise en divers endroits, centralise ici
+ */
+if (!defined('_IS_BOT'))
+ define('_IS_BOT',
+ isset($_SERVER['HTTP_USER_AGENT'])
+ AND preg_match(',bot|slurp|crawler|spider|webvac|yandex,i',
+ $_SERVER['HTTP_USER_AGENT'])
+ );
+
+
//
// *** Parametrage par defaut de SPIP ***
//
// Vignettes de previsulation des referers
// dans les statistiques
-// 3 de trouves, possibilite de switcher
-// - Thumbshots.org: le moins instrusif, quand il n'a pas, il renvoit un pixel vide
-// - Girafa semble le plus complet, bicoz renvoit toujours la page d'accueil; mais avertissement si pas de preview
+// 2 de trouves, possibilite de switcher
// - Alexa, equivalent Thumbshots, avec vignettes beaucoup plus grandes mais avertissement si pas de preview
// Pour Alexa, penser a indiquer l'url du site dans l'id.
// Dans Alexa, si on supprimer size=small, alors vignettes tres grandes
-$source_vignettes = "http://open.thumbshots.org/image.pxf?url=http://";
-// $source_vignettes = "http://msnsearch.srv.girafa.com/srv/i?s=MSNSEARCH&r=http://";
+// - apercite.fr : on conserve exactement la même expression pour insérer l'url du site
+$source_vignettes = "http://www.apercite.fr/api/apercite/120x90/oui/oui/http://";
// $source_vignettes = "http://pthumbnails.alexa.com/image_server.cgi?id=www.monsite.net&size=small&url=http://";
$formats_logos = array ('gif', 'jpg', 'png');
// numero de branche, utilise par les plugins
// pour specifier les versions de SPIP necessaire
// il faut s'en tenir a un nombre de decimales fixe ex : 2.0.0, 2.0.0-dev, 2.0.0-beta, 2.0.0-beta2
-$spip_version_branche = "2.1.12";
+$spip_version_branche = "2.1.25";
// version des signatures de fonctions PHP
// (= numero SVN de leur derniere modif cassant la compatibilite et/ou necessitant un recalcul des squelettes)
$spip_version_code = 15375;
// version de la base SQL (= numero SVN de sa derniere modif, a verifier dans le fichier ecrire/maj/sv10000.php)
-$spip_version_base = 15828;
+$spip_version_base = 15830;
// version de l'interface a la base
$spip_sql_version = 1;
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2010 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
? _INSTALL_PASS_LDAP
: '';
- echo install_debut_html();
+ echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"');
echo info_etape(_T('titre_connexion_ldap'),info_progression_etape(1,'etape_ldap','install/'), _T('entree_informations_connexion_ldap'));
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
? _INSTALL_BASE_LDAP
: "ou=users, dc=mon-domaine, dc=com";
- echo install_debut_html();
+ echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"');
echo info_etape(_T('info_chemin_acces_1'),info_progression_etape(3,'etape_ldap','install/')),_T('info_chemin_acces_2');
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
$base_ldap_text = _request('base_ldap_text');
if (!$base_ldap) $base_ldap = $base_ldap_text;
- echo install_debut_html();
+ echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"');
$ldap_link = ldap_connect($adresse_ldap, $port_ldap);
@ldap_bind($ldap_link, $login_ldap, $pass_ldap);
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
'info_question_inscription_nouveaux_redacteurs' => '¿Aceutes les inscripciones de nuevos redactores dende\'l
sitiu públicu? Si aceutes, los visitantes podrán inscribise
dende un formulariu automatizáu y tendrán accesu a l\'espaciu priváu pa
- proponer artículos propios. <blockquote><i>Tres de la fase d\'inscripción,
+ proponer artículos propios. <blockquote><div><i>Tres de la fase d\'inscripción,
los usuarios reciben un corréu electrónicu automáticu
que-yos da los códigos d\'accesu al sitiu priváu. Dellos
agospiadores desactiven l\'unvíu d\'e-mails dende los sos
sirvidores: nesti casu, la inscripción automática ye
- imposible.</i></blockquote>',
+ imposible.</i></div></blockquote>',
'info_question_mots_cles' => '¿Quies utilizar les pallabres-clave nesti sitiu?',
'info_question_proposer_site' => '¿Quién pue proponer sitios referenciaos?',
'info_question_utilisation_moteur_recherche' => '¿Quies utilizar el motor de restolar integráu con SPIP?
'texte_sur_titre' => 'Antetítulu',
'texte_syndication' => 'Ye posible recuperar automaticamente, cuando un sitiu web lo permite,
la llista de les novedáes. Para esto, hai que activar la sindicación.
- <blockquote><i>Dellos agospiadores web desactiven esta función;
+ <blockquote><div><i>Dellos agospiadores web desactiven esta función;
si ye\'l casu, nun vas poder usar la sindicación de conteníos
- dende\'l to sitiu web.</i></blockquote>',
+ dende\'l to sitiu web.</i></div></blockquote>',
'texte_table_ok' => ': esta tabla ta bién.',
'texte_tables_indexation_vides' => 'Les tables d\'indexación del motor tan vacíes.',
'texte_tentative_recuperation' => 'Intentu d\'igua',
'info_question_inscription_nouveaux_redacteurs' => 'Позволявате ли регистрацията на нови редактори от
публикувания сайт. Ако сте съгласни, посетителите трябва да се
регистрират през автоматичната форма, за да имат достъп до личната зона и
- да предложат свои собствени статии. <blockquote><i>По време на регистрацията
+ да предложат свои собствени статии. <blockquote><div><i>По време на регистрацията
потребителите получават автоматично
съобщение с код за достъп до личната зона. Някои
доставчици спират съобщения, изпратени
до техни сървъри: в този случай автоматичната регистрация
- не би могла да се осъществи.', # MODIF
+ не би могла да се осъществи.</i></div></blockquote>', # MODIF
'info_question_mots_cles' => 'Желаете ли да използвате ключови думи в сайта?',
'info_question_proposer_site' => 'Кой може да предложи свързани сайтове?',
'info_question_utilisation_moteur_recherche' => 'Желаете ли да използвате търсещата машина под СПИП?
'texte_sur_titre' => 'Челно заглавие',
'texte_syndication' => 'Ако сайтът го позволява, възможно е автоматично да възстановява
списъка с най-новия материал. За да постигнете това, нужно е да активирате обединяване.
- <blockquote><i>Някои доставчици деактивират тази функция;
+ <blockquote><div><i>Някои доставчици деактивират тази функция;
ако случаят е този, няма да можете да използвате обединяването на съдържание
- от Вашия сайт.</i></blockquote>', # MODIF
+ от Вашия сайт.</i></div></blockquote>', # MODIF
'texte_table_ok' => ' : тази таблица е добра.',
'texte_tables_indexation_vides' => 'Таблиците с индекси на търсачката са празни.',
'texte_tentative_recuperation' => 'Опит за поправка',
'info_question_inscription_nouveaux_redacteurs' => 'Hag aotren a rit e c\'hellfe skridaozerien nevez en em enrollañ adalek al lec\'hienn foran ?
Ma asantit e c\'hello ar weladennerien en em enskrivañ adalek ur furmskrid emgefreek,
ha gouest e vint neuze da dizhout al lodenn brevez evit kinnig o fennadoù dezho o-unan.
- <blockquote><i>Da vare an enrollañ e vez kaset ur postel emgefreek d\'ar skridaozerien
+ <blockquote><div><i>Da vare an enrollañ e vez kaset ur postel emgefreek d\'ar skridaozerien
ennañ ar c\'hodoù da c\'hallout dont tre el lec\'hienn.
Gant herberc\'herien zo e vez difennet kas postelioù adalek o servijerioù,
- en degouezh-se ne vo ket posupl en em enrollañ ent emgefre.</i></blockquote>',
+ en degouezh-se ne vo ket posupl en em enrollañ ent emgefre.</i></div></blockquote>',
'info_question_mots_cles' => 'Ha c\'hoant hoc\'h eus ober gant ar gerioù-stur war ho lec\'hienn ?',
'info_question_proposer_site' => 'Piv a c\'hall kinnig lec\'hiennoù menegeret ?',
'info_question_utilisation_moteur_recherche' => 'Ha c\'hoant hoc\'h eus da ober gant lusker enklask diabarzh SPIP ?
'texte_sur_titre' => 'Ustitl',
'texte_syndication' => 'Pa vez aotreet gant ul lec\'hienn Web eo posupl adtapout en un doare emgefre roll an nevezinti.
Evit se eo dav gweredekaat ar sindikadur.
- <blockquote><i>Herberc\'hierien a ziweredeka an arc\'hwel-se ;
- neuze n\'hallit ket implijout ar sindikadur adalek ho lec\'hienn.</i></blockquote>',
+ <blockquote><div><i>Herberc\'hierien a ziweredeka an arc\'hwel-se ;
+ neuze n\'hallit ket implijout ar sindikadur adalek ho lec\'hienn.</i></div></blockquote>',
'texte_table_ok' => ': kudenn ebet gant an daolenn-mañ.',
'texte_tables_indexation_vides' => 'Goullo eo taolennoù menegeriñ al lusker.',
'texte_tentative_recuperation' => 'Taol-esa evit ratreañ',
'info_question_activer_compactage_js' => 'Souhaitez-vous activer le compactage des scripts (javascript) ?', # NEW
'info_question_activer_compresseur' => 'Voulez-vous activer la compression du flux HTTP ?', # NEW
'info_question_gerer_statistiques' => 'Treba li vasa stranica uredjivati statistike posjeta?',
-'info_question_inscription_nouveaux_redacteurs' => 'Da li prihvatate upisivanje novih urednika u javnom prostoru stranice? Ako prihvatate, posjetioci ce se moci registrovati putem automatskog formulara, a zatim ce moci pristupiti privatnom prostoru i predlagati svoje clanke. <blockquote><i>Tokom faze upisivanja, korisnici ce primiti automatski e-mail sa kodom za pristup u privatnu stranicu. Neki kompjuteri sprecavaju slanje mailova putem njihovih servera: u tom slucaju ce automatsko upisivanje biti nemoguce.', # MODIF
+'info_question_inscription_nouveaux_redacteurs' => 'Da li prihvatate upisivanje novih urednika u javnom prostoru stranice? Ako prihvatate, posjetioci ce se moci registrovati putem automatskog formulara, a zatim ce moci pristupiti privatnom prostoru i predlagati svoje clanke. <blockquote><div><i>Tokom faze upisivanja, korisnici ce primiti automatski e-mail sa kodom za pristup u privatnu stranicu. Neki kompjuteri sprecavaju slanje mailova putem njihovih servera: u tom slucaju ce automatsko upisivanje biti nemoguce.</i></div></blockquote>', # MODIF
'info_question_mots_cles' => 'Zelite li koristiti kljucne rijeci na vasoj stranici?',
'info_question_proposer_site' => 'Ko moze predloziti preporucene stranice?',
'info_question_utilisation_moteur_recherche' => 'Zelite li koristiti motor pretrage koji je integrisan u SPIP? (dezaktiviranje ove opcije ubrzava funkcionisanje sistema.)',
'texte_statut_refuses' => 'odbijeni',
'texte_suppression_fichiers' => 'Koristite se ovom komandom da biste sve prisutne dokumente u SPIP kes. To omogucuje npr. izazivanje preracunavanja svih strana, u slucaju da ste izveli vazne izmjene grafizma ili strukture stranice.',
'texte_sur_titre' => 'Nadnaslov',
-'texte_syndication' => 'Moguce je automatsko otkrivanje spiska novosti, ako web stranica to dozvoljava. Zato trebate aktivirati sindikaciju\\tab <blockquote><i>Odredjeni hosting servisi dezaktiviraju tu funkciju; u tom slucaju ne mozete koristiti sindikaciju sadrzaja na vasoj stranici.</i></blockquote>', # MODIF
+'texte_syndication' => 'Moguce je automatsko otkrivanje spiska novosti, ako web stranica to dozvoljava. Zato trebate aktivirati sindikaciju\\tab <blockquote><div><i>Odredjeni hosting servisi dezaktiviraju tu funkciju; u tom slucaju ne mozete koristiti sindikaciju sadrzaja na vasoj stranici.</i></div></blockquote>', # MODIF
'texte_table_ok' => ':ova tabela je OK.',
'texte_tables_indexation_vides' => 'Tabele indeksacije motora su prazne.',
'texte_tentative_recuperation' => 'Pokusaj popravke',
'info_question_activer_compresseur' => 'Voleu activar la compressió del flux HTTP?',
'info_question_gerer_statistiques' => 'El vostre lloc ha de gestionar les estadístiques de les visites?',
'info_question_inscription_nouveaux_redacteurs' => 'Accepteu les inscripcions de nous redactors a partir del lloc públic? Si ho accepteu, els visitants es podran inscriure
- mitjançant un formulari automatitzat i llavors accediran a l\'espai privat per proposar els seus propis articles.<blockquote><i>Durant el procés d\'inscripció, els usuaris reben un correu electrònic automàtic en el que se\'ls dóna els seus codis d\'accés al lloc privat. Alguns proveïdors d\'hostatge desactiven l\'enviament de correus electrònics des dels seus servidors: en aquest
- cas, la inscripció automàtica és impossible.</i></blockquote>',
+ mitjançant un formulari automatitzat i llavors accediran a l\'espai privat per proposar els seus propis articles.<blockquote><div><i>Durant el procés d\'inscripció, els usuaris reben un correu electrònic automàtic en el que se\'ls dóna els seus codis d\'accés al lloc privat. Alguns proveïdors d\'hostatge desactiven l\'enviament de correus electrònics des dels seus servidors: en aquest
+ cas, la inscripció automàtica és impossible.</i></div></blockquote>',
'info_question_mots_cles' => 'Voleu utilitzar les paraules clau en la vostra web ?',
'info_question_proposer_site' => 'Qui pot proposar llocs referenciats?',
'info_question_utilisation_moteur_recherche' => 'Voleu fer servir el motor de cerca integrat a l\'SPIP?
fet modificacions importants gràficament o estructurals del lloc web.',
'texte_sur_titre' => 'Sobretítol',
'texte_syndication' => 'És possible recuperar automàticament, quan el lloc Web ho permet, la llista de novetats. Per això, heu d\'activar la sindicació.
-<blockquote><i>Alguns proveïdors d\'hostatge desactiven aquesta funcionalitat; en aquest cas, no podreu utilitzar la sindicació de contingut des del vostre lloc.</i></blockquote>',
+<blockquote><div><i>Alguns proveïdors d\'hostatge desactiven aquesta funcionalitat; en aquest cas, no podreu utilitzar la sindicació de contingut des del vostre lloc.</i></div></blockquote>',
'texte_table_ok' => ': aquesta taula està OK.',
'texte_tables_indexation_vides' => 'Les taules d\'indexació del motor estan buides.',
'texte_tentative_recuperation' => 'Intent de reparació',
'info_question_inscription_nouveaux_redacteurs' => 'Indik si ou laksèp linskrisyon bann nouvo lotèr dopwi lo sit piblik ? Si
ou vé, bann lotèr i poura inskri azot èk lo formulèr otomatik. Zot i poura akosté
sir figirwèb privé é propoz zot prop zartik minm.
-<blockquote><i>Dan moman linskrisyon, bann zitilizatèr i giny inn limèl otomatikman. Limèl-la i donn azot bann kod lakostaz sir figirwèb privé. Nana désertin zéberzèr
-sak i dégrèn lanvwa bann limèl sir zot bann servèr : dann kala, linskrisyon otomatik li lé pa posib', # MODIF
+<blockquote><div><i>Dan moman linskrisyon, bann zitilizatèr i giny inn limèl otomatikman. Limèl-la i donn azot bann kod lakostaz sir figirwèb privé. Nana désertin zéberzèr
+sak i dégrèn lanvwa bann limèl sir zot bann servèr : dann kala, linskrisyon otomatik li lé pa posib</i></div></blockquote>', # MODIF
'info_question_mots_cles' => 'Anserv bann molaklé sir out sitwèb ?',
'info_question_proposer_site' => 'Kisa i pé propoz bann sit référansé ?',
'info_question_utilisation_moteur_recherche' => 'Indik si ou vé ansèrv lo rodèr-dodan SPIP
'texte_suppression_fichiers' => 'Anserv lakomand-la pou dégrèn tout bann fisyé sir lo kas SPIP. Sa lé itil, pa égsanp, pou fors larkalkil do tout bann pazwèb si lo sit, kank ou la fé bann sanzman inportan dann grafism ou dann lastriktir lo sit.',
'texte_sur_titre' => 'Sirtitr',
'texte_syndication' => 'Lé posib rékupèr la list bann nouvelté otomatikman, sir désertin sit : ifo pou sa-la fé zwé lasindikasyon
-<blockquote><i>Néna désertin zéberzèr sak i dégrèn lafonksyon-la ;
+<blockquote><div><i>Néna désertin zéberzèr sak i dégrèn lafonksyon-la ;
dann ka-la ou sra pa pou itiliz lasindikasyon d-kontnu
-dopwi out pro sit sa-minm.</i></blockquote>', # MODIF
+dopwi out pro sit sa-minm.</i></div></blockquote>', # MODIF
'texte_table_ok' => ': tab-la lé OK.',
'texte_tables_indexation_vides' => 'Bann tab lé vid (pou lindèksasyon lo rodèr).',
'texte_tentative_recuperation' => 'Esèy inn aranzman',
'info_question_inscription_nouveaux_redacteurs' => 'Aksepte ounon pa aksepte w tout enskripsyon nouvo redaktè sou lespas piblik sit-la ?
Si wi ka aksepte, vizité yo ke enskri azot depi
yon fòmilè, pou zot ke sere laksé nan espas privé pou zot kapab pwopoze
- zot pwop atik yo a y mèm. <blockquote><i>Kann moun-la zot ap enskri azot,
+ zot pwop atik yo a y mèm. <blockquote><div><i>Kann moun-la zot ap enskri azot,
y reswa yon limèl otomatik
ki bay azottout kod laksé sou sit privé. Kèk
lébèjè ka enpeche lanvwa tout limèl depi zot sèvè :
alò, lenskrisyon otomatik ke
- inposib.', # MODIF
+ inposib.</i></div></blockquote>', # MODIF
'info_question_mots_cles' => 'Eske w vle itilize mokle yo nan sitwèb w ?',
'info_question_proposer_site' => 'Kimoun kapab pwopoze kèk sit referansé ?',
'info_question_utilisation_moteur_recherche' => 'Eske w vle itilize motè pou chèche de SPIP ?
'texte_sur_titre' => 'Sir-tit',
'texte_syndication' => 'Kank sitweb-la li pèmè bagay-sa-a, se posib pran otomatikman lis tout nouvèlté ali.
Fòk w aktive sendikasyon an.
- <blockquote><i>Tansyon kèk zébèrjè, zot ka dézaktiv fonksyonalité-a ;
+ <blockquote><div><i>Tansyon kèk zébèrjè, zot ka dézaktiv fonksyonalité-a ;
akoz bagay-la, inposib pran sendikasyon-an depi sit aou
-.</i></blockquote>', # MODIF
+.</i></div></blockquote>', # MODIF
'texte_table_ok' => ': tab-la se bon.',
'texte_tables_indexation_vides' => 'Tab pou indeksayon motè se vid.',
'texte_tentative_recuperation' => 'Esey aranjé',
'info_question_inscription_nouveaux_redacteurs' => 'Mohou se noví redaktoři přihlašovat z veřejné části webu?
Pokud ano, návštěvníci se mohou přihlašovat pomocí automatického formuláře
a získají přístup do privátní části. Budou tak moci navrhovat své vlastní
- články. <blockquote><i>Při přihlášení
+ články. <blockquote><div><i>Při přihlášení
obdrží uživatelé automatický email
s uvedením přístupových údajů k privátní části.
Někteří poskytovatelé prostoru pro web odesílání emailů ze svých serverů
vypínají. Automatické přihlášení je v takovém případě
- nemožné.', # MODIF
+ nemožné.</i></div></blockquote>', # MODIF
'info_question_mots_cles' => 'Chcete na vašem webu používat klíčová slova?',
'info_question_proposer_site' => 'Kdo může navrhovat odkazy na weby?',
'info_question_utilisation_moteur_recherche' => 'Chcete používat vyhledávač, který je součástí systému SPIP?
'texte_sur_titre' => 'Podtitul',
'texte_syndication' => 'Pokud to web umožňuje, můžete automaticky získat seznam na něm zveřejněných
novinek. K tomu je nutno zapnout syndikaci.
- <blockquote><i>Někteří poskytovatelé webového prostoru tuto funkcni vypínají.
- V takovém případě nemůžete syndikaci ze svého webu použít.</i></blockquote>', # MODIF
+ <blockquote><div><i>Někteří poskytovatelé webového prostoru tuto funkcni vypínají.
+ V takovém případě nemůžete syndikaci ze svého webu použít.</i></div></blockquote>', # MODIF
'texte_table_ok' => ': tato tabulka je v pořádku.',
'texte_tables_indexation_vides' => 'Tabulky indexů vyhledávače jsou prázdné.',
'texte_tentative_recuperation' => 'Pokus o opravu',
'info_question_inscription_nouveaux_redacteurs' => 'Vil du tillade, at nye redaktører tilmelder sig
på det offentligt tilgængelige websted? Ja betyder, at besøgende kan tilmelde sig på en automatisk dannet formular,
og derefter få adgang til det private område, hvor de kan vedligeholde deres egne artikler.
- <blockquote><i>Under tilmeldingen modtager brugerne en automatisk dannet e-mail med deres adgangskode til det
+ <blockquote><div><i>Under tilmeldingen modtager brugerne en automatisk dannet e-mail med deres adgangskode til det
private websted. Nogle webhoteller tillader ikke at der sendes e-mails fra deres servere. I så fald kan automatisk
- tilmelding ikke finde sted.', # MODIF
+ tilmelding ikke finde sted.</i></div></blockquote>', # MODIF
'info_question_mots_cles' => 'Ønsker du at bruge nøgleord på webstedet?',
'info_question_proposer_site' => 'Hvem kan foreslå henvisninger til websteder?',
'info_question_utilisation_moteur_recherche' => 'Ønsker du at anvende den søgefunktion, der findes i SPIP?
'texte_sur_titre' => 'Hovedoverskrift',
'texte_syndication' => 'Hvis webstedet tillader det, er det muligt automatisk at hente en oversigt over det
seneste materiale. For at gøre dette, skal du igangsætte syndikering.
- <blockquote><i>Nogle webhoteller tillader ikke denne funktion.
- I så fald kan du ikke foretage indholdssyndikering fra dit websted.</i></blockquote>', # MODIF
+ <blockquote><div><i>Nogle webhoteller tillader ikke denne funktion.
+ I så fald kan du ikke foretage indholdssyndikering fra dit websted.</i></div></blockquote>', # MODIF
'texte_table_ok' => ': denne tabel er OK.',
'texte_tables_indexation_vides' => 'Søgefunktionens indekstabeller er tomme.',
'texte_tentative_recuperation' => 'Reparationsforsøg',
'info_question_inscription_nouveaux_redacteurs' => 'Möchten Sie, dass sich neue Redakteure vom öffentlichen Bereich
aus anmelden können? Wenn Sie es wollen, können sich Besucher über ein automatisch
erstelltes Formular anmelden und Artikel vorschlagen.
- <blockquote><i>Nach der Anmeldung erhalten die neuen Redakteure automatisch
+ <blockquote><div><i>Nach der Anmeldung erhalten die neuen Redakteure automatisch
eine E-Mail mit ihren Zugangsdaten. Manche Webhoster unterbinden den Mailversand
von ihren Webservern aus.
- In diesem Fall funktioniert die automatische Anmeldung nicht.',
+ In diesem Fall funktioniert die automatische Anmeldung nicht.</i></div></blockquote>',
'info_question_mots_cles' => 'Möchten Sie Schlagworte für Ihre Website verwenden?',
'info_question_proposer_site' => 'Wer darf Websites zur Verlinkung vorschlagen?',
'info_question_utilisation_moteur_recherche' => 'Wollen Sie die integrierte Suchfunktion von SPIP verwenden? (ohne Suchfunktion wird Ihr System schneller.)',
'texte_suppression_fichiers' => 'Benutzen Sie diesen Befehl, um alle Dateien aus dem Zwischenspeicher von SPIP zu löschen. Damit können Sie eine erneute Berechnung aller Seiten erzwingen, wenn Sie z.B. wesentliche Änderungen am Inhalt und Layout Ihrer Site gemacht haben. ',
'texte_sur_titre' => 'Einleitender Titel',
'texte_syndication' => 'Manche Websites ermöglichen den automatischen Abruf einer Liste von neuen Artikeln. Um diese Daten nutzen zu können, müssen Sie die Syndikation aktivieren.
- <blockquote><i>Manche Provider unterbinden die Nutzung dieser Funktion. Dann können Sie keine syndizierten Inhalte nutzen.</i></blockquote>',
+ <blockquote><div><i>Manche Provider unterbinden die Nutzung dieser Funktion. Dann können Sie keine syndizierten Inhalte nutzen.</i></div></blockquote>',
'texte_table_ok' => ': Tabelle OK.',
'texte_tables_indexation_vides' => 'Indextabellen der Suchmaschine sind leer.',
'texte_tentative_recuperation' => 'Reparaturversuch',
'info_question_inscription_nouveaux_redacteurs' => 'Do you wish to allow the new editors to register
from the public site? If you agree to this, visitors will be able to register
using an automatic form, and then access the private area to
- tender their own articles. <blockquote><i>During the registration process,
+ tender their own articles. <blockquote><div><i>During the registration process,
users receive an automatic email
giving them their access code to the private area. Some
service providers disallow the sending of email from their
servers: in that case, automated registration cannot be
- implemented.</i></blockquote>',
+ implemented.</i></div></blockquote>',
'info_question_mots_cles' => 'Do you wish to use keywords in your site?',
'info_question_proposer_site' => 'Who can propose referenced sites?',
'info_question_utilisation_moteur_recherche' => 'Do you wish to use the search engine integrated to SPIP?
'texte_sur_titre' => 'Top title',
'texte_syndication' => 'If a site allows it, it is possible to retrieve automatically
the list of its latest material. To achieve this, you must activate the syndication.
- <blockquote><i>Some hosts disable this function;
+ <blockquote><div><i>Some hosts disable this function;
in this case, you cannot use the content syndication
- from your site.</i></blockquote>',
+ from your site.</i></div></blockquote>',
'texte_table_ok' => ': this table is OK.',
'texte_tables_indexation_vides' => 'Indexing tables of the engine are empty.',
'texte_tentative_recuperation' => 'Repairing attempt',
'info_question_inscription_nouveaux_redacteurs' => 'Ĉu vi akceptas la registriĝadon de novaj redaktantoj ekde
la publika spaco ? Se vi akceptas tion, la vizitantoj povos registriĝi
per aŭtomata aliĝilo kaj tiam aliros al la privata spaco por
- proponi siajn proprajn artikolojn. <blockquote><i>Dum la aliĝo,
+ proponi siajn proprajn artikolojn. <blockquote><div><i>Dum la aliĝo,
la uzantoj ricevos aŭtomate senditan retmesaĝon kun siaj
alir-kodoj al la privata spaco. Iuj
retejgastigantoj malaktivigas la sendadon de retleteroj el siaj
- serviloj : tiukaze la aŭtomata aliĝo ne eblos.', # MODIF
+ serviloj : tiukaze la aŭtomata aliĝo ne eblos.</i></div></blockquote>', # MODIF
'info_question_mots_cles' => 'Ĉu vi deziras uzi ŝlosilvortojn ĉe via retejo ?',
'info_question_proposer_site' => 'Kiu povas proponi referencigitajn retejojn ?',
'info_question_utilisation_moteur_recherche' => 'Ĉu vi deziras uzi la SPIP-internan serĉilon ?
'texte_sur_titre' => 'Surtitolo',
'texte_syndication' => 'Eblas elpreni aŭtomate la liston de novaĵoj de iu retejo,
se tiu retejo tion permesas. Por tio, vi devas aktivigi la abonrilaton.
- <blockquote><i>Iuj retgastigantoj malaktivigas tiun funkcion ;
+ <blockquote><div><i>Iuj retgastigantoj malaktivigas tiun funkcion ;
tiukaze vi ne povas abonligi la enhavon
- ekde via retejo.</i></blockquote>', # MODIF
+ ekde via retejo.</i></div></blockquote>', # MODIF
'texte_table_ok' => ': tiu tabelo estas en ordo.',
'texte_tables_indexation_vides' => 'La indeksaj tabeloj de la serĉilo estas malplenaj.',
'texte_tentative_recuperation' => 'Ripar-provo',
'info_question_activer_compactage_js' => '¿Desea activar la compresión de los scripts (javascript) ?',
'info_question_activer_compresseur' => '¿Desea activar la compresión del flujo HTTP ?',
'info_question_gerer_statistiques' => '¿Deseas que tu sitio gestione las estadísticas de las visitas?',
-'info_question_inscription_nouveaux_redacteurs' => '¿Se aceptan inscripciones de nuevas redactoras y redactores a partir del sitio público? Si se acepta, las personas que visitan el sitio podrán inscribirse desde un formulario automatizado y accederán entonces al espacio privado para proponer sus propios artículos. <blockquote><i>Durante la fase de inscripción, reciben un correo electrónico automático que les indica sus códigos de acceso al sitio privado. Ciertos proveedores de hospedaje desactivan el envío de correos electrónicos desde sus servidores: en tal caso, se hace imposible la inscripción automática. ',
+'info_question_inscription_nouveaux_redacteurs' => '¿Se aceptan inscripciones de nuevas redactoras y redactores a partir del sitio público? Si se acepta, las personas que visitan el sitio podrán inscribirse desde un formulario automatizado y accederán entonces al espacio privado para proponer sus propios artículos. <blockquote><div><i>Durante la fase de inscripción, reciben un correo electrónico automático que les indica sus códigos de acceso al sitio privado. Ciertos proveedores de hospedaje desactivan el envío de correos electrónicos desde sus servidores: en tal caso, se hace imposible la inscripción automática.</i></div></blockquote>',
'info_question_mots_cles' => '¿Deseas utilizar las palabras clave en tu sitio?',
'info_question_proposer_site' => '¿Quién puede proponer los sitios referenciados?',
'info_question_utilisation_moteur_recherche' => '¿Deseas utilizar el motor de búsqueda integrado de SPIP? (desactivarlo agiliza el sitio)',
'texte_sur_titre' => 'Antetítulo',
'texte_syndication' => 'Es posible recuperar automáticamente, cuando un sitio Web lo permite,
la lista de novedades. Para ello, debes activar la sindicación.
-<blockquote><i>Algunos proveedores de hospedaje desactivan esta funcionalidad ;
- en ese caso, no podrás utilizar la sindicación de contenido desde tu sitio.</i></blockquote>',
+<blockquote><div><i>Algunos proveedores de hospedaje desactivan esta funcionalidad ;
+ en ese caso, no podrás utilizar la sindicación de contenido desde tu sitio.</i></div></blockquote>',
'texte_table_ok' => ': esta tabla está bien.',
'texte_tables_indexation_vides' => 'Las tablas del motor de indexación están vacías.',
'texte_tentative_recuperation' => 'Tentativa de reparación.',
'info_question_activer_compactage_js' => 'Souhaitez-vous activer le compactage des scripts (javascript) ?', # NEW
'info_question_activer_compresseur' => 'Voulez-vous activer la compression du flux HTTP ?', # NEW
'info_question_gerer_statistiques' => 'آيا ميخواهيد سايتتان آمار بينند گان را اداره كند؟',
-'info_question_inscription_nouveaux_redacteurs' => '<MODIF>آيا ثبت نام نويسند گان جديد را از سايت همگانى قبول ميكنيد؟ اگر ميكنيد، كاربران ميتوانند با پر كردن يك پرسشنامه ثبت نام كنند و به محوطه خصوصى راه يابند. آنها ميتوانند مقالاتشان را مطرح كنند <blockquote><i>در هنگام ثبت نام كاربران يك ايميل دريافت خواهند كرد كه شامل كد ورودي شان به سايت خصوصى خواهد بود. تعدادى از ميزبانان، ارسال ايميل را از سرورها غير فعال كرده اند: دراينصورت ثبت نام خودكار غير ممكن خواهد بود..</i></blockquote>',
+'info_question_inscription_nouveaux_redacteurs' => '<MODIF>آيا ثبت نام نويسند گان جديد را از سايت همگانى قبول ميكنيد؟ اگر ميكنيد، كاربران ميتوانند با پر كردن يك پرسشنامه ثبت نام كنند و به محوطه خصوصى راه يابند. آنها ميتوانند مقالاتشان را مطرح كنند <blockquote><div><i>در هنگام ثبت نام كاربران يك ايميل دريافت خواهند كرد كه شامل كد ورودي شان به سايت خصوصى خواهد بود. تعدادى از ميزبانان، ارسال ايميل را از سرورها غير فعال كرده اند: دراينصورت ثبت نام خودكار غير ممكن خواهد بود..</i></div></blockquote>',
'info_question_mots_cles' => 'آيا ميخواهيد از واژه-كليدها در سايتتان استفاد كنيد ؟',
'info_question_proposer_site' => 'كى ميتواند سايتهاى مرجع را پيشنهاد كند ؟',
'info_question_utilisation_moteur_recherche' => 'آيا مايل هستيد كه از موتور جستجوى اسپيپ استفاده كنيد ؟
'texte_suppression_fichiers' => 'از اين فرمان براى حذف تمام فايلها موجود در فايلهاى موقت اسپيپ استفاده كنيد.
اين بشما امكان نو كردن تمام صفحات را ميدهد بويژه اگر شما تغييرات مهمى در نما يا در ساختار سايت داده باشيد.',
'texte_sur_titre' => 'سر عنوان',
-'texte_syndication' => 'شما ميتوانيد بطور خودكار، هنگاميكه سايت اجازه دهد، فهرست تازه ها را بگيريد. براى اين منظور، شما بايد گزينش پيوند سايتى را فعال كنيد.<blockquote><i>تعدادى از ميزبانان اين عمل را غيرفعال كرده اند، دراينصورت شما نميتوانيد از آن استفاده بكنيد.</i></blockquote>', # MODIF
+'texte_syndication' => 'شما ميتوانيد بطور خودكار، هنگاميكه سايت اجازه دهد، فهرست تازه ها را بگيريد. براى اين منظور، شما بايد گزينش پيوند سايتى را فعال كنيد.<blockquote><div><i>تعدادى از ميزبانان اين عمل را غيرفعال كرده اند، دراينصورت شما نميتوانيد از آن استفاده بكنيد.</i></div></blockquote>', # MODIF
'texte_table_ok' => 'اين جدول درست است :',
'texte_tables_indexation_vides' => 'جداول فهرست گذاى موتور جستجو خالى ميباشند',
'texte_tentative_recuperation' => 'كوشش براى تعمير',
'info_multi_secteurs' => '... seulement pour les rubriques situées à la racine ?',
'info_nom' => 'Nom',
'info_nom_destinataire' => 'Nom du destinataire',
+'info_nom_pas_conforme' => 'les tags html ne sont pas autorisés',
'info_nom_site' => 'Nom de votre site',
'info_nom_site_2' => '<b>Nom du site</b> [Obligatoire]',
+'info_url_site_pas_conforme' => 'l\'URL du site n\'est pas valide.',
'info_nombre_articles' => '@nb_articles@ articles,',
'info_nombre_breves' => '@nb_breves@ brèves,',
'info_nombre_partcipants' => 'PARTICIPANTS A LA DISCUSSION :',
'info_question_inscription_nouveaux_redacteurs' => 'Acceptez-vous les inscriptions de nouveaux rédacteurs à
partir du site public ? Si vous acceptez, les visiteurs pourront s\'inscrire
depuis un formulaire automatisé et accéderont alors à l\'espace privé pour
- proposer leurs propres articles. <blockquote><i>Lors de la phase d\'inscription,
+ proposer leurs propres articles. <blockquote><div><i>Lors de la phase d\'inscription,
les utilisateurs reçoivent un courrier électronique automatique
leur fournissant leurs codes d\'accès au site privé. Certains
hébergeurs désactivent l\'envoi de mails depuis leurs
serveurs : dans ce cas, l\'inscription automatique est
- impossible.</i></blockquote>',
+ impossible.</i></div></blockquote>',
'info_question_mots_cles' => 'Souhaitez-vous utiliser les mots-clés sur votre site ?',
'info_question_proposer_site' => 'Qui peut proposer des sites référencés ?',
'info_question_utilisation_moteur_recherche' => 'Souhaitez-vous utiliser le moteur de recherche intégré à SPIP ?
'texte_documents_joints' => 'Vous pouvez autoriser l\'ajout de documents (fichiers bureautiques, images,
multimédia, etc.) aux articles et/ou aux rubriques. Ces fichiers
peuvent ensuite être référencés dans
- l\'article, ou affichés séparément.</p>',
+ l\'article, ou affichés séparément.',
'texte_documents_joints_2' => 'Ce réglage n\'empêche pas l\'insertion d\'images directement dans les articles.',
'texte_effacer_base' => 'Effacer la base de données SPIP',
'texte_effacer_donnees_indexation' => 'Effacer les données d\'indexation',
'texte_sur_titre' => 'Sur-titre',
'texte_syndication' => 'Il est possible de récupérer automatiquement, lorsqu\'un site Web le permet,
la liste de ses nouveautés. Pour cela, vous devez activer la syndication.
- <blockquote><i>Certains hébergeurs désactivent cette fonctionnalité ;
+ <blockquote><div><i>Certains hébergeurs désactivent cette fonctionnalité ;
dans ce cas, vous ne pourrez pas utiliser la syndication de contenu
- depuis votre site.</i></blockquote>',
+ depuis votre site.</i></div></blockquote>',
'texte_table_ok' => ': cette table est OK.',
'texte_tables_indexation_vides' => 'Les tables d\'indexation du moteur sont vides.',
'texte_tentative_recuperation' => 'Tentative de réparation',
os usuarios recibirán un correo electrónico automático
cos seus códigos de acceso ao web privado. Algúns
provedores desactivan o envío automático desde os seus servidores:
- nese caso, a inscrición automática é imposible.</i></blockquote>',
+ nese caso, a inscrición automática é imposible.</i></div></blockquote>',
'info_question_mots_cles' => 'Quere empregar as palabras chave neste seu web?',
'info_question_proposer_site' => 'Quen pode propor os webs referidos?',
'info_question_utilisation_moteur_recherche' => 'Quere empregar o motor de procura integrado en SPIP?
'texte_sur_titre' => 'Sobretítulo',
'texte_syndication' => 'Pódese recuperar automaticamente, e sempre que o sitio web o permita,
a súa lista de novidades. Para isto, ten que activar a afiliación.
- <blockquote><i>Algúns aloxadores desactivan esta funcionalidade;
+ <blockquote><div><i>Algúns aloxadores desactivan esta funcionalidade;
nese caso, non poderá empregar a afiliación de contido
- dende o seu web.</i></blockquote>',
+ dende o seu web.</i></div></blockquote>',
'texte_table_ok' => ': esta táboa está ben.',
'texte_tables_indexation_vides' => 'As táboas de indexación do motor están baleiras.',
'texte_tentative_recuperation' => 'Tentativa de reparación',
'info_question_activer_compresseur' => 'Voulez-vous activer la compression du flux HTTP ?', # NEW
'info_question_gerer_statistiques' => 'A honlap kezeljen-e státisztikákat a látógatásokról ?',
'info_question_inscription_nouveaux_redacteurs' => 'Elfogadja-e az új szerzők beíratkozását a nyilvanos honlapról ? Amennyiben elfogadja, akkor a látogatók beíratkozhatnak
- egy automatizált űrlapon és majd hozzáférnek a privát részre, saját cikkei javaslattételére. <blockquote><i>A beíratkozási fázis során,
+ egy automatizált űrlapon és majd hozzáférnek a privát részre, saját cikkei javaslattételére. <blockquote><div><i>A beíratkozási fázis során,
a felhasználók automatikus emailt kapnak,
mely a privát reszhez szükséges hozzáférési kódokat tartalmazza.
- Bizonyos szolgáltatók inaktiválják az emailküldést a szerverükről : ilyen esetben lehetetlen az automatikus beíratkozás.', # MODIF
+ Bizonyos szolgáltatók inaktiválják az emailküldést a szerverükről : ilyen esetben lehetetlen az automatikus beíratkozás.</i></div></blockquote>', # MODIF
'info_question_mots_cles' => 'Kivánja-e használni a kulcsszavakat a honlapján ?',
'info_question_proposer_site' => 'Ki ajánlhat fel felvetendő honlapokat ?',
'info_question_utilisation_moteur_recherche' => 'Kivánja-e használni az SPIP integrált kereső motorját ?
'texte_sur_titre' => 'Felső cím',
'texte_syndication' => 'Ha a honlap megengedi,akkor automatikusan lehet szerezni újdonságait listáját.
Ezért kell aktiválni a szindikálást.
- <blockquote><i>Egyes szolgáltatók kikapcsolják ezt a lehetőséget ;
+ <blockquote><div><i>Egyes szolgáltatók kikapcsolják ezt a lehetőséget ;
ilyen esetben, nem használhatja a tartalomszindikálást
- az Ön honlapjáról.</i></blockquote>', # MODIF
+ az Ön honlapjáról.</i></div></blockquote>', # MODIF
'texte_table_ok' => ': ez a tábla rendben van.',
'texte_tables_indexation_vides' => 'A motor indexálási táblai üresek.',
'texte_tentative_recuperation' => 'Javítási kisérlet',
'info_question_inscription_nouveaux_redacteurs' => 'Apakah anda mengizinkan registrasi editor baru dari
situs yang dipublikasi? Jika anda setuju, pengunjung dapat mendaftar
melalui formulir terotomasi, dan akan mengakses area pribadi untuk
- melihat artikel-artikel mereka. <blockquote><i>Selama proses registrasi,
+ melihat artikel-artikel mereka. <blockquote><div><i>Selama proses registrasi,
pengguna menerima sebuah e-mail terotomasi
yang memberikan kode akses ke situs pribadi. Sejumlah
hosting menonaktifkan pengiriman e-mail di server mereka:
dalam hal ini ini registrasi terotomasi tidak dapat
- diimplementasikan.', # MODIF
+ diimplementasikan.</i></div></blockquote>', # MODIF
'info_question_mots_cles' => 'Apakah anda ingin menggunakan kata-kata kunci di situs anda?',
'info_question_proposer_site' => 'Siapa yang dapat menyarankan situs-situs referensi?',
'info_question_utilisation_moteur_recherche' => 'Apakah anda ingin mengunakan mesin pencari yang terintegrasi dengan SPIP?
'texte_sur_titre' => 'Judul atas',
'texte_syndication' => 'Jika sebuah situs mengizinkannya, daftar isi terbaru dari situs tersebut
dapat diambil secara otomatis. Untuk melakukannya, anda harus mengaktifkan sindikasi.
- <blockquote><i>Sejumlah hosting menonaktifkan fungsi ini;
+ <blockquote><div><i>Sejumlah hosting menonaktifkan fungsi ini;
dalam hal ini, anda tidak dapat menggunakan sindikasi isi
- dari situs anda.</i></blockquote>', # MODIF
+ dari situs anda.</i></div></blockquote>', # MODIF
'texte_table_ok' => ': tabel ini OK.',
'texte_tables_indexation_vides' => 'Tabel terindeksasi mesin kosong.',
'texte_tentative_recuperation' => 'Usaha perbaikan',
'info_question_inscription_nouveaux_redacteurs' => 'Accettate le iscrizioni di nuovi redattori
direttamente dal sito pubblico? In caso affermativo, i visitatori potranno iscriversi
grazie ad un modulo automatizzato e accedere all\'area riservata per proporre
-i propri articoli. <blockquote><i>Durante la fase d\'iscrizione,
+i propri articoli. <blockquote><div><i>Durante la fase d\'iscrizione,
gli utenti ricevono automaticamente un email
che fornisce loro i codici d\'accesso al sito privato. Alcuni
servizi di hostiong disattivano l\'invio di email dai propri server: in questo caso l\'iscrizione automatica è
-impossibile.</i></blockquote>',
+impossibile.</i></div></blockquote>',
'info_question_mots_cles' => 'Vuoi utilizzare le parole chiave nel sito?',
'info_question_proposer_site' => 'Chi può proporre i siti da citare?',
'info_question_utilisation_moteur_recherche' => 'Desideri utilizzare il motore di ricerca integrato di SPIP?
'texte_syndication' => 'Quando un sito Web lo permette, è possibile recuperarne automaticamente
la lista delle novità. A tal fine è necessario attivare la syndication.
-<blockquote><i>Alcuni provider disattivano questa funzionalità;
+<blockquote><div><i>Alcuni provider disattivano questa funzionalità;
in questo caso, non potrai utilizzare la syndication del contenuto
-a partire dal tuo sito.</i></blockquote>',
+a partire dal tuo sito.</i></div></blockquote>',
'texte_table_ok' => ': questa tabella è OK.',
'texte_tables_indexation_vides' => 'Le tabelle d\'indicizzazione del motore sono vuote.',
'texte_tentative_recuperation' => 'Tentativo di ripristino',
'info_question_inscription_nouveaux_redacteurs' => 'Accettate le iscrizioni di nuove redattrici
direttamente dal sito pubblico? In questo caso, chi visita il sito potrà iscriversi
grazie ad un modulo automatizzato e accedere all\'area riservata per proporre
-i propri articoli. <blockquote><i>Durante la fase d\'iscrizione,
+i propri articoli. <blockquote><div><i>Durante la fase d\'iscrizione,
le utenti ricevono automaticamente un email
che fornisce loro i codici d\'accesso al sito privato. Alcuni
hoster disattivano l\'invio di email dai propri server: in questo caso, l\'iscrizione automatica è
-impossibile.', # MODIF
+impossibile.</i></div></blockquote>', # MODIF
'info_question_mots_cles' => 'Vuoi utilizzare le parole chiave nel sito?',
'info_question_proposer_site' => 'Chi può proporre i siti da citare?',
'info_question_utilisation_moteur_recherche' => 'Desideri utilizzare il motore di ricerca integrato di SPIP?
'texte_syndication' => 'Quando un sito Web lo permette, è possibile recuperarne automaticamente
la lista delle novità. A tal fine è necessario attivare la syndication.
-<blockquote><i>Alcuni provider disattivano questa funzionalità;
+<blockquote><div><i>Alcuni provider disattivano questa funzionalità;
in questo caso, non potrai utilizzare la syndication del contenuto
-a partire dal tuo sito.</i></blockquote>',
+a partire dal tuo sito.</i></div></blockquote>',
'texte_table_ok' => ': questa tabella è OK.',
'texte_tables_indexation_vides' => 'Le tabelle d\'indicizzazione del motore sono vuote.',
'texte_tentative_recuperation' => 'Tentativo di ripristino',
'info_question_activer_compactage_js' => 'Souhaitez-vous activer le compactage des scripts (javascript) ?', # NEW
'info_question_activer_compresseur' => 'Voulez-vous activer la compression du flux HTTP ?', # NEW
'info_question_gerer_statistiques' => 'あなたのサイトの訪問者の統計を管理すべきですか?',
-'info_question_inscription_nouveaux_redacteurs' => '公開されているサイトで新しいエディターの登録を募りますか? 許可した場合、訪問者たちはフォームから自動で登録でき、プライベートエリアにアクセスし自分の記事を提出できます。 <blockquote><i>登録作業中に、ユーザーは自動的に送信されるプライベートエリアへのIDとパスワードを記したe-mailを受け取ります。若干のホストでは、それらサーバー上からメールが送れない場合があります:そういう場合、自動登録を実施できません。', # MODIF
+'info_question_inscription_nouveaux_redacteurs' => '公開されているサイトで新しいエディターの登録を募りますか? 許可した場合、訪問者たちはフォームから自動で登録でき、プライベートエリアにアクセスし自分の記事を提出できます。 <blockquote><div><i>登録作業中に、ユーザーは自動的に送信されるプライベートエリアへのIDとパスワードを記したe-mailを受け取ります。若干のホストでは、それらサーバー上からメールが送れない場合があります:そういう場合、自動登録を実施できません。</i></div></blockquote>', # MODIF
'info_question_mots_cles' => 'あなたのサイトでキーワードを使いたいですか?',
'info_question_proposer_site' => '誰が参照サイトを提案できますか?',
'info_question_utilisation_moteur_recherche' => 'SPIPに結合された検索エンジンを使いたいですか?
'texte_suppression_fichiers' => 'これを使うとSPIPのすべてのキャッシュファイルが削除されます。これを許可すると、特にサイトの構造や画像の重要な変更を入力している場合に備えて、すべてのページのリフレッシュを強制します。',
'texte_sur_titre' => 'トップタイトル',
'texte_syndication' => 'これを許可すると、最新の資料のリストを自動的に検索することが可能になります。これをするには供給(シンジケート)を作動させなければなりません。
- <blockquote><i>若干のホストではこの機能は無効です。そういう場合、あなたはあなたのサイトから内容を供給(シンジケート)することは出来ないでしょう。</i></blockquote>', # MODIF
+ <blockquote><div><i>若干のホストではこの機能は無効です。そういう場合、あなたはあなたのサイトから内容を供給(シンジケート)することは出来ないでしょう。</i></div></blockquote>', # MODIF
'texte_table_ok' => ': このテーブルはOK。',
'texte_tables_indexation_vides' => '空のエンジンのテーブルをインデックス',
'texte_tentative_recuperation' => '復元を試みる',
'info_question_activer_compactage_js' => 'Souhaitez-vous activer le compactage des scripts (javascript) ?', # NEW
'info_question_activer_compresseur' => 'អ្នកចង់ធ្វើអោយសកម្ម ការបង្ហាប់ សំរាប់ទិន្នន័យ HTTP?',
'info_question_gerer_statistiques' => 'សៃថ៍ របស់អ្នក ត្រូវតែគ្រប់គ្រង ស្ថិតិ ពួកទស្សនាករ ?',
-'info_question_inscription_nouveaux_redacteurs' => 'តើ​លោក​អ្នក​ត្រូវការ​អនុញ្ញាត​ឱ្យ​អ្នក​សរសេរ​អត្ថបទ​ថ្មី​ចុះ​ឈ្មោះ​ពី​វ៉ិ​ប​សាយ​សាធារណៈ​ដែល​ឬទេ​? ប្រសិនបើ​លោក​អ្នក​យល់ព្រម អ្នក​ទស្សនា​នឹង​អាច​ចុះ​ឈ្មោះ​ដោយ​ប្រើប្រាស់​ទម្រង់​ស្វ័យប្រវត្ដិ​មួយ ហើយ​បន្ទាប់​មក​ចូល​ក្នុង​ផ្នែក​ឯកជន​ដើម្បី​បញ្ចូល​អត្ថបទ​ផ្ទា់ល់​របស់​ពួក​គេ​។ <blockquote> ក្នុង​ពេល​ដំណើរការ​ចុះ​ឈ្មោះ អ្នក​ប្រើប្រាស់​ទទួល​បាន​អ៊ី​ម៉ែ​ល​ស្វ័យប្រវត្ដិ​ដែល​ផ្ដល់​ជូន​ពួក​គេ​នូវ​លេខ​កូដ​ចូល​ទៅ​ក្នុង​ផ្នែក​ឯកជន​។ ក្រុមហ៊ុន​ផ្ដល់​សេវា​មួយ​ចំនួន​មិន​អនុញ្ញាត​ចំពោះ​ការ​ផ្ញើ​អ៊ី​ម៉ែ​ល​ម៉ាស៊ីន​មេ (servers)​របស់​ពួក​គេ​ទេ ៖ ក្នុង​ករណី​នោះ ការ​ចុះ​ឈ្មោះ​ដោយ​ស្វ័យប្រវត្ដិ​គឺ​មិន​អាច​អនុវត្ដ​បាន​ទេ​។', # MODIF
+'info_question_inscription_nouveaux_redacteurs' => 'តើ​លោក​អ្នក​ត្រូវការ​អនុញ្ញាត​ឱ្យ​អ្នក​សរសេរ​អត្ថបទ​ថ្មី​ចុះ​ឈ្មោះ​ពី​វ៉ិ​ប​សាយ​សាធារណៈ​ដែល​ឬទេ​? ប្រសិនបើ​លោក​អ្នក​យល់ព្រម អ្នក​ទស្សនា​នឹង​អាច​ចុះ​ឈ្មោះ​ដោយ​ប្រើប្រាស់​ទម្រង់​ស្វ័យប្រវត្ដិ​មួយ ហើយ​បន្ទាប់​មក​ចូល​ក្នុង​ផ្នែក​ឯកជន​ដើម្បី​បញ្ចូល​អត្ថបទ​ផ្ទា់ល់​របស់​ពួក​គេ​។ <blockquote> ក្នុង​ពេល​ដំណើរការ​ចុះ​ឈ្មោះ អ្នក​ប្រើប្រាស់​ទទួល​បាន​អ៊ី​ម៉ែ​ល​ស្វ័យប្រវត្ដិ​ដែល​ផ្ដល់​ជូន​ពួក​គេ​នូវ​លេខ​កូដ​ចូល​ទៅ​ក្នុង​ផ្នែក​ឯកជន​។ ក្រុមហ៊ុន​ផ្ដល់​សេវា​មួយ​ចំនួន​មិន​អនុញ្ញាត​ចំពោះ​ការ​ផ្ញើ​អ៊ី​ម៉ែ​ល​ម៉ាស៊ីន​មេ (servers)​របស់​ពួក​គេ​ទេ ៖ ក្នុង​ករណី​នោះ ការ​ចុះ​ឈ្មោះ​ដោយ​ស្វ័យប្រវត្ដិ​គឺ​មិន​អាច​អនុវត្ដ​បាន​ទេ​។</i></div></blockquote>', # MODIF
'info_question_mots_cles' => 'អ្នក ចង់ប្រើប្រាស់ ពាក្យគន្លឹះនានា លើសៃថ៍ របស់អ្នក?',
'info_question_proposer_site' => 'អ្នកណា អាចស្នើ សៃថ៍យោង?',
'info_question_utilisation_moteur_recherche' => 'អ្នកចង់ប្រើប្រាស់ ឧបករស្វែងរក ត្រូវបានបញ្ចូលទៅ SPIP ឬ? (ការមិនអនុញ្ញាតវា បង្កើនល្បឿន ភាពប្រពៃ នៃប្រព័ន្ធ។)',
'texte_statut_refuses' => 'ត្រូវ​បាន​បដិសេធ',
'texte_suppression_fichiers' => 'ប្រើប្រាស់​បញ្ជា​នេះ​ដើម្បី​លុប​ហ្វា​ល​ទាំងអស់​នៅ​ក្នុង​សំណុំ​ហ្វា​ល​លាក់ខ្លួន​របស់ SPIP។ វា​អនុញ្ញាត​ឱ្យ​លោក​អ្នក បង្ខំ​ការ​សម្រួល​ដំណើរការ​ឡើង​វិញ​នូវ​ទំព័រ​ទាំងអស់ ក្នុង​ចំ​ណោំ​អ្វី​ផ្សេងៗ​ទៀត នៅ​ក្នុង​ករណី​លោក​អ្នក​បាន​ធើ​ការ​កែប្រែ​សំខាន់ៗ​ទៅ​លើ​ក្រាហ្វិក ឬ​រចនាសម្ព័ន្ធ​របស់​វ៉ិ​ប​សាយ​។',
'texte_sur_titre' => 'ចំណងជើងកំពូល',
-'texte_syndication' => 'បើមួយសៃថ៍ អនុញ្ញាត, វាអាចប្រមូលមកវិញ ស្វ័យប្រវត្តិ បញ្ជីនៃសំភារៈចុងក្រោយបំផុត របស់វា។ ដើម្បីសំរេចបានចឹង, អ្នកត្រូវតែធ្វើអោយសកម្ម ការភ្ជាប់។ <blockquote><i>ខំព្យូរើខ្លះ គ្មានអនុញ្ញាត មុខងារនេះ;
- ក្នុងករណីនេះ, អ្នកគ្មានអាចប្រើប្រាស់ ការភ្ជាប់ខ្លឹមសារ ពីវ៉ែបសៃថ៍ របស់អ្នក។</i></blockquote>',
+'texte_syndication' => 'បើមួយសៃថ៍ អនុញ្ញាត, វាអាចប្រមូលមកវិញ ស្វ័យប្រវត្តិ បញ្ជីនៃសំភារៈចុងក្រោយបំផុត របស់វា។ ដើម្បីសំរេចបានចឹង, អ្នកត្រូវតែធ្វើអោយសកម្ម ការភ្ជាប់។ <blockquote><div><i>ខំព្យូរើខ្លះ គ្មានអនុញ្ញាត មុខងារនេះ;
+ ក្នុងករណីនេះ, អ្នកគ្មានអាចប្រើប្រាស់ ការភ្ជាប់ខ្លឹមសារ ពីវ៉ែបសៃថ៍ របស់អ្នក។</i></div></blockquote>',
'texte_table_ok' => '៖ តារាង​នេះ​គឺ​ត្រឹមត្រូវ',
'texte_tables_indexation_vides' => 'តារាង​លិបិក្រម​នៃ​ម៉ាស៊ីន​គឺ​ទទេ',
'texte_tentative_recuperation' => 'ការ​ប៉ុនប៉ង​ជួសជុល',
'info_question_activer_compactage_js' => 'Wëllt dir d\'Kompressioun vun de Skripter (Javascript) aschalten?',
'info_question_activer_compresseur' => 'Wëllt dir d\'Kompressioun vum HTTP-Flow aschalten?',
'info_question_gerer_statistiques' => 'Soll äre Site d\'Statistik vun de Visiten géréieren?',
-'info_question_inscription_nouveaux_redacteurs' => 'Acceptéiert dier d\'Aschreiwe vu neie Redakteren direkt vum öffentlëche Site? Wa jo, da kënnen d\'Visiteuren sëch iwert een automatësche Formulaire aschreiwen an esou Zougang op de privaten Deel kréien fir hir Artikelen ze proposéieren. <blockquote><i>Während der Aschreiwungs-Phase kréien d\'Benotzer automatësch en Email mat hieren Zougangsinformatiounen. Verschidde Provideren verbidden d\'Schécken vun Email vun hieren Serveren aus: an deem Fall ass d\'automatëscht Aschreiwen onméiglech.', # MODIF
+'info_question_inscription_nouveaux_redacteurs' => 'Acceptéiert dier d\'Aschreiwe vu neie Redakteren direkt vum öffentlëche Site? Wa jo, da kënnen d\'Visiteuren sëch iwert een automatësche Formulaire aschreiwen an esou Zougang op de privaten Deel kréien fir hir Artikelen ze proposéieren. <blockquote><div><i>Während der Aschreiwungs-Phase kréien d\'Benotzer automatësch en Email mat hieren Zougangsinformatiounen. Verschidde Provideren verbidden d\'Schécken vun Email vun hieren Serveren aus: an deem Fall ass d\'automatëscht Aschreiwen onméiglech.</i></div></blockquote>', # MODIF
'info_question_mots_cles' => 'Wëllt dir Schlësselwierder op ärem Site benotzen?',
'info_question_proposer_site' => 'Wie kann e Site proposéieren?',
'info_question_utilisation_moteur_recherche' => 'Wëllt dir de Sich-Motor vu SPIP benotzen?
'texte_suppression_fichiers' => 'Benotzt dës Prozedur fir all d\'Fichier\'en aus dem Cache ze läschen. Sou kënnt dir z.B. all d\'Säiten nei berechnen, wann dir grouss Ännerungen um Layout oder der Struktur vum Site gemaach hutt.',
'texte_sur_titre' => 'Iwwertitel',
'texte_syndication' => 'Et ass méiglech, wann de Site ët erlaabt, automatesch d\'Lëscht vun senge Neiegkeeten ze kréien. Schalt duerfir d\'Syndicatioun an.
-<blockquote><i>Verschidde Provideren verhënneren dës Prozedur; an deem Fall kënnt dir d\'Syndicatioun nët op ärem Site benotzen.</i></blockquote>',
+<blockquote><div><i>Verschidde Provideren verhënneren dës Prozedur; an deem Fall kënnt dir d\'Syndicatioun nët op ärem Site benotzen.</i></div></blockquote>',
'texte_table_ok' => ': des Tafel ass OK.',
'texte_tables_indexation_vides' => 'Den Index vum Sich-Motor ass eidel.',
'texte_tentative_recuperation' => 'Reparatur-Versuch',
'info_question_activer_compactage_js' => 'Souhaitez-vous activer le compactage des scripts (javascript) ?', # NEW
'info_question_activer_compresseur' => 'Voulez-vous activer la compression du flux HTTP ?', # NEW
'info_question_gerer_statistiques' => 'သင့်ဝက်ဘ်ဆိုက်တွင် ဝင်ရောက်လည်ပတ်သူများစာရင်းကို စီမံလိုပါသလား',
-'info_question_inscription_nouveaux_redacteurs' => 'စာတည်းအသစ်များ မှတ်ပုံတင်ခွင့်ကို အများဆိုင်နေရာမှ လုပ်ဆောင်ခွင့် ပေးလိုပါသလား? သင်ခွင့်ပြုမည်ဆိုလျှင် လာလည်သူများသည်လည်း အလိုအလျှောက် ဖောင်ကိုအသုံးပြု၍ မှတ်ပုံတင်နိုင်မည်ဖြစ်သည်။ သူတို့ဖန်တီးထားသော ဆောင်းပါးများကို တိုက်ရိုက်မွမ်းမံ နိုင်မည်ဖြစ်သဖြင့် နှစ်သက်ပါလိမ့်မည်။<blockquote><i> မှတ်ပုံတင်ခြင်းလုပ်ဆောင်နေစဉ် ကိုယ်ပိုင်ကန့်သတ်နေရာသို့ ဝင်ရောက်နိုင်ရန် လိုအပ်သော အချက်အလက်များကို အလိုအလျှောက်အီးမေးလ်မှ ရောက်လာပါလိမ့်မည်။ တချို့သော ဝက်ဘ်ဝန်ဆောင်မှုလုပ်ငန်းများသည် ဤအလိုအလျှောက် စာပို့ခြင်းကို လက်မခံကြပေ၊ ဤသို့ဖြစ်နေလျှင် ဤစာပို့ခြင်းသည် အ​ဆင်ပြေမည်မဟုတ်ပါ။', # MODIF
+'info_question_inscription_nouveaux_redacteurs' => 'စာတည်းအသစ်များ မှတ်ပုံတင်ခွင့်ကို အများဆိုင်နေရာမှ လုပ်ဆောင်ခွင့် ပေးလိုပါသလား? သင်ခွင့်ပြုမည်ဆိုလျှင် လာလည်သူများသည်လည်း အလိုအလျှောက် ဖောင်ကိုအသုံးပြု၍ မှတ်ပုံတင်နိုင်မည်ဖြစ်သည်။ သူတို့ဖန်တီးထားသော ဆောင်းပါးများကို တိုက်ရိုက်မွမ်းမံ နိုင်မည်ဖြစ်သဖြင့် နှစ်သက်ပါလိမ့်မည်။<blockquote><div><i> မှတ်ပုံတင်ခြင်းလုပ်ဆောင်နေစဉ် ကိုယ်ပိုင်ကန့်သတ်နေရာသို့ ဝင်ရောက်နိုင်ရန် လိုအပ်သော အချက်အလက်များကို အလိုအလျှောက်အီးမေးလ်မှ ရောက်လာပါလိမ့်မည်။ တချို့သော ဝက်ဘ်ဝန်ဆောင်မှုလုပ်ငန်းများသည် ဤအလိုအလျှောက် စာပို့ခြင်းကို လက်မခံကြပေ၊ ဤသို့ဖြစ်နေလျှင် ဤစာပို့ခြင်းသည် အ​ဆင်ပြေမည်မဟုတ်ပါ။</i></div></blockquote>', # MODIF
'info_question_mots_cles' => 'သင့်ဝက်ဘ်ဆိုက်တွင် သော့ချက်စကားလုံးများကို အသုံးပြုချင်ပါသလား',
'info_question_proposer_site' => 'မည်သူက ကိုးကားဝက်ဘ်ဆိုက်များကို ထင်မြင်ချက်ပေးနိုင်သနည်း',
'info_question_utilisation_moteur_recherche' => 'SPIP သို့ ရှာဖွေမှုအင်ဂျင်ကို အသုံးပြုချင်ပါသလား။ (စစ်စတမ် အရှိန်ကို မြှင့်တင်၍မရနိုင်ပါ)',
'texte_statut_refuses' => 'ငြင်းပယ်သည်',
'texte_suppression_fichiers' => 'SPIP မှတ်ဉာဏ်ထဲရှိ ဖိုင်များအားလုံးကို ဤခိုင်းစေမှု လုပ်ဆောင်ချက်မှ အကုန်လုံးပျယ်ဖျက်မည်။',
'texte_sur_titre' => 'ထိပ်စည်းခေါင်းစဉ်',
-'texte_syndication' => 'ဆိုက်မှခွင့်ပြုထားလျှင် နောက်ဆုံးရ အချက်အလက်များ စာရင်းကို ​အလိုအလျှာက် ထုတ်ပေးနိုင်သည်။ ဤလုပ်ဆောင်မှုကို ရယူရန် ပူးတွဲချိတ်ဆက်ခြင်းကို ခွင့်ပြုထားရန်လိုသည်။ <blockquote><i>တချို့ဆိုက်များတွင် ပိတ်ထားနေသတ်သည်</i></blockquote>', # MODIF
+'texte_syndication' => 'ဆိုက်မှခွင့်ပြုထားလျှင် နောက်ဆုံးရ အချက်အလက်များ စာရင်းကို ​အလိုအလျှာက် ထုတ်ပေးနိုင်သည်။ ဤလုပ်ဆောင်မှုကို ရယူရန် ပူးတွဲချိတ်ဆက်ခြင်းကို ခွင့်ပြုထားရန်လိုသည်။ <blockquote><div><i>တချို့ဆိုက်များတွင် ပိတ်ထားနေသတ်သည်</i></div></blockquote>', # MODIF
'texte_table_ok' => 'ဤဇယားအဆင်ပြေသည်',
'texte_tables_indexation_vides' => 'စာညွှန်း ထိန်းသိမ်းထားမှုမရှိပါ',
'texte_tentative_recuperation' => 'ပြုပြင်ရန်ကြိုးစားသည်',
de publieke site? Indien wel, dan kunnen bezoekers
zich via een geautomatiseerd formulier inschrijven en
toegang krijgen tot de privé-ruimte om zelf artikels
- voor te stellen.<blockquote><i>Bij inschrijving zal een
+ voor te stellen.<blockquote><div><i>Bij inschrijving zal een
gebruiker een automatische e-mail ontvangen met daarin
de toeganscode voor de site. Sommige hostingproviders
blokkeren echter het versturen van e-mail vanaf hun
servers : in dat geval is een automatische inschrijving
- niet mogelijk.</i></blockquote>',
+ niet mogelijk.</i></div></blockquote>',
'info_question_mots_cles' => 'Wil je gebruik maken van trefwoorden op je site?',
'info_question_proposer_site' => 'Wie kan referentiesites voorstellen?',
'info_question_utilisation_moteur_recherche' => 'Wil je gebruik maken van de geintegreerde zoekmachine van SPIP ?
'texte_syndication' => 'Het is mogelijk om van een site automatisch een lijst met
nieuws, als de website het toelaat, binnen te halen.
Hiervoor dien je de syndicatie (nieuwsovername) te
- activeren. <blockquote><i>Sommige hostingproviders laten
+ activeren. <blockquote><div><i>Sommige hostingproviders laten
dit niet toe; in dat geval kan je geen nieuwsovername
- vanaf je site laten gebeuren.</i></blockquote>',
+ vanaf je site laten gebeuren.</i></div></blockquote>',
'texte_table_ok' => ': deze tabel is OK.',
'texte_tables_indexation_vides' => 'De indices van de zoekmachine zijn leeggemaakt.',
'texte_tentative_recuperation' => 'Poging tot herstel.',
'info_question_inscription_nouveaux_redacteurs' => 'Acceptatz que de redactors novèls s\'inscrivan
a partir dau sit public? Se o acceptatz, los vesitaires se poirán inscriure
gràcias a un formulari automatizat e doncas accedirán vèrs l\'espaci privat per
- prepausar d\'articles.<blockquote><i> Durant la fasa d\'inscripcion, los utilizaires recebon un e-mail automatic
+ prepausar d\'articles.<blockquote><div><i> Durant la fasa d\'inscripcion, los utilizaires recebon un e-mail automatic
que lor baila un còde d\'accès vèrs lo sit privat.
Quauques auberjadors autorizan pas l\'enviament d\'e-mails dempuèi lors servidors: en aquel cas, l\'inscripcion automatica z-es
- impossibla.', # MODIF
+ impossibla.</i></div></blockquote>', # MODIF
'info_question_mots_cles' => 'Desiratz d\'utilizar los mots clau sobre vòstre sit?',
'info_question_proposer_site' => 'Quau pòt prepausar de sits referenciats?',
'info_question_utilisation_moteur_recherche' => 'Desiratz d\'utilizar lo cerchador integrat a SPIP? (lo desactivar abriva lo foncionament dau sistèma.)',
'texte_sur_titre' => 'Sobretítol',
'texte_syndication' => 'Se pòt recuperar automaticament, quand un sit web o permet,
la tèira de sas novetats. Per aquò far, vos chau activar la sindicacion.
- <blockquote><i>Quauques auberjadors activan pas aquela foncionalitat;
+ <blockquote><div><i>Quauques auberjadors activan pas aquela foncionalitat;
en aquel cas, poiretz pas utilizar la sindicacion de contengut
- dempuèi vòstre sit.</i></blockquote>', # MODIF
+ dempuèi vòstre sit.</i></div></blockquote>', # MODIF
'texte_table_ok' => ': aquesta taula z-es condreita.',
'texte_tables_indexation_vides' => 'Las taulas d\'indexacion dau motor son voidas.',
'texte_tentative_recuperation' => 'Assai de reparacion',
'info_question_inscription_nouveaux_redacteurs' => 'Acceptatz que redactors navèths e s\'inscrívian
a partir deu sit public? S\'ac acceptatz, los vesitaires que\'s poiràn inscríver
mercés a un formulari automatizat e alavetz qu\'accediràn a l\'espaci privat entà
- perpausar articles.<blockquote><i> Durant la fasa d\'inscripcion, los utilizaires que receben un e-mail automatic
+ perpausar articles.<blockquote><div><i> Durant la fasa d\'inscripcion, los utilizaires que receben un e-mail automatic
qui\'us balha un còde d\'accès au sit privat.
Daubuns aubergaders n\'autorizan pas lo mandadís d\'e-mails dempuish los lors serviders: en aqueth cas, l\'inscripcion automatica qu\'ei
- impossibla.', # MODIF
+ impossibla.</i></div></blockquote>', # MODIF
'info_question_mots_cles' => 'E desiratz d\'utilizar los mots clau suu vòste sit?',
'info_question_proposer_site' => 'Qui pòt perpausar sits referenciats?',
'info_question_utilisation_moteur_recherche' => 'E desiratz d\'utilizar lo cercader integrat a SPIP? (lo desactivar qu\'accelèra lo foncionament deu sistèma.)',
'texte_sur_titre' => 'Subertítol',
'texte_syndication' => 'Que\'s pòt recuperar automaticament, quora un sit web o permet,
la tèra de las soas nautats. Tà har aquò, que\'vs cau activar la sindicacion.
- <blockquote><i>Daubuns aubergaders n\'activan pas aquera foncionalitat;
+ <blockquote><div><i>Daubuns aubergaders n\'activan pas aquera foncionalitat;
en aqueth cas, non poiratz pas utilizar la sindicacion de contengut
- dempuish lo vòste sit.</i></blockquote>', # MODIF
+ dempuish lo vòste sit.</i></div></blockquote>', # MODIF
'texte_table_ok' => ': aquesta taula qu\'ei condreta.',
'texte_tables_indexation_vides' => 'Las taulas d\'indexacion deu motor que son vueidas.',
'texte_tentative_recuperation' => 'Ensai de reparacion',
'info_question_inscription_nouveaux_redacteurs' => 'Acceptatz que daus redactors noveus s\'inscrivan
a partir dau sit public? Se o acceptatz, los vesitaires se poirán inscriure
gràcias a un formulari automatizat e donc accedirán a l\'espaci privat per
- prepausar daus articles.<blockquote><i> Durant la fasa d\'inscripcion, los utilizaires receben un e-mail automatic
+ prepausar daus articles.<blockquote><div><i> Durant la fasa d\'inscripcion, los utilizaires receben un e-mail automatic
que lor baila un còde d\'accès au sit privat.
Quauques auberjadors autorizan pas l\'enviament d\'e-mails dempuei lors servidors: en queu cas, l\'inscripcion automatica es
- impossibla.', # MODIF
+ impossibla.</i></div></blockquote>', # MODIF
'info_question_mots_cles' => 'Desiratz d\'utilizar los mots clau subre vòstre sit?',
'info_question_proposer_site' => 'Quau pòt prepausar daus sits referenciats?',
'info_question_utilisation_moteur_recherche' => 'Desiratz d\'utilizar lo cerchador integrat a SPIP? (lo desactivar abriva lo foncionament dau sistema.)',
'texte_sur_titre' => 'Subretítol',
'texte_syndication' => 'Se pòt recuperar automaticament, quand un sit web o permet,
la tiera de sas novetats. Per quò far, vos chau activar la sindicacion.
- <blockquote><i>Quauques auberjadors activan pas quela foncionalitat;
+ <blockquote><div><i>Quauques auberjadors activan pas quela foncionalitat;
en queu cas, poiretz pas utilizar la sindicacion de contengut
- dempuei vòstre sit.</i></blockquote>', # MODIF
+ dempuei vòstre sit.</i></div></blockquote>', # MODIF
'texte_table_ok' => ': questa taula es condrecha.',
'texte_tables_indexation_vides' => 'Las taulas d\'indexacion dau motor son voidas.',
'texte_tentative_recuperation' => 'Assai de reparacion',
'info_question_inscription_nouveaux_redacteurs' => 'Acceptatz que de redactors novèls s\'inscrigan
a partir del sit public? Se o acceptatz, los vesitaires se poiràn inscriure
mercés a un formulari automatizat e alara accediràn a l\'espaci privat per
- prepausar d\'articles.<blockquote><i> Durant la fasa d\'inscripcion, los utilizaires recebon un e-mail automatic
+ prepausar d\'articles.<blockquote><div><i> Durant la fasa d\'inscripcion, los utilizaires recebon un e-mail automatic
que lor baila un còde d\'accès al sit privat.
D\'unes albergadors autorizan pas lo mandadís d\'e-mails dempuèi lors servidors: en aquel cas, l\'inscripcion automatica es
- impossibla.', # MODIF
+ impossibla.</i></div></blockquote>', # MODIF
'info_question_mots_cles' => 'Desiratz d\'utilizar los mots clau sul vòstre sit?',
'info_question_proposer_site' => 'Qual pòt prepausar de sits referenciats?',
'info_question_utilisation_moteur_recherche' => 'Desiratz d\'utilizar lo cercador integrat a SPIP? (lo desactivar abriva lo foncionament del sistèma.)',
'texte_sur_titre' => 'Subretítol',
'texte_syndication' => 'Se pòt recuperar automaticament, quora un sit web o permet,
la tièra de sas novetats. Per aquò far, vos cal activar la sindicacion.
- <blockquote><i>D\'unes albergadors activan pas aquela foncionalitat;
+ <blockquote><div><i>D\'unes albergadors activan pas aquela foncionalitat;
en aquel cas, poiretz pas utilizar la sindicacion de contengut
- dempuèi vòstre sit.</i></blockquote>', # MODIF
+ dempuèi vòstre sit.</i></div></blockquote>', # MODIF
'texte_table_ok' => ': aquesta taula es condrecha.',
'texte_tables_indexation_vides' => 'Las taulas d\'indexacion del motor son vuèjas.',
'texte_tentative_recuperation' => 'Ensag de reparacion',
'info_question_inscription_nouveaux_redacteurs' => 'Acceptatz li inscripcions de novèus redactors à
partir dau sit public ? Se l\'acceptatz, lu visitaires si podràn inscriure
despí un formulari automatisat e accediràn alora à l\'espaci privat per
- prepauar lu sieus articles pròpis.<blockquote><i>Durant la fasa d\'inscripcion,
+ prepauar lu sieus articles pròpis.<blockquote><div><i>Durant la fasa d\'inscripcion,
lu utilisaires recebon un corrier electronic automatic
que li fornisse lu sieus còdes d\'accès au sit privat. D\'unu
aubergadors desactivon lo mandadís d\'e-mails despí lu sieus
servidors: en aqueu cas, l\'inscripcion automatica es
- impossibla.', # MODIF
+ impossibla.</i></div></blockquote>', # MODIF
'info_question_mots_cles' => 'Desiratz d\'utilisar lu mòts claus sus lo voastre sit?',
'info_question_proposer_site' => 'Cu pòu prepauar de sits referençats?',
'info_question_utilisation_moteur_recherche' => 'Desiratz d\'utilisar lo motor de recerca integrat à SPIP? (s\'es desactivat, accelèra lo foncionament dau sistema.)',
'texte_sur_titre' => 'Sobretitre',
'texte_syndication' => 'Si pòu recuperar automaticament, quora un sit web lo permet,
la tièra dei sieus noveutats. Per far aquò, vos cau activar la sindicacion.
- <blockquote><i>D\'unu aubergadors activon pas aquela foncionalitat;
+ <blockquote><div><i>D\'unu aubergadors activon pas aquela foncionalitat;
dins aqueu cas, podretz pas utilisar la sindicacion de contengut
- despí lo voastre sit.</i></blockquote>', # MODIF
+ despí lo voastre sit.</i></div></blockquote>', # MODIF
'texte_table_ok' => ': aquesta taula es condrecha.',
'texte_tables_indexation_vides' => 'Li taulas d\'indexacion dau motor son vuèii.',
'texte_tentative_recuperation' => 'Temptativa de reparacion',
'info_question_inscription_nouveaux_redacteurs' => 'Acceptatz que de redactors novèus s\'inscrigan
a partir dau sit public? S\'o acceptatz, lu vesitaires si porràn inscriure
gaug a un formulari automatizat e alora accediràn a l\'espaci privat per
- prepauar d\'articles.<blockquote><i> Durant la fasa d\'inscripcion, lu utilizaires recebon un e-mail automatic
+ prepauar d\'articles.<blockquote><div><i> Durant la fasa d\'inscripcion, lu utilizaires recebon un e-mail automatic
que li dona un còde d\'accès au sit privat.
D\'unu aubergadors non autorizan lo mandadís d\'e-mails despí lu sieus servidors: en aqueu cas, l\'inscripcion automatica es
- impossibla.', # MODIF
+ impossibla.</i></div></blockquote>', # MODIF
'info_question_mots_cles' => 'Desiratz d\'utilizar lu mots clau sus lo vòstre sit?',
'info_question_proposer_site' => 'Cu pòu prepausar de sits referenciats?',
'info_question_utilisation_moteur_recherche' => 'Desiratz d\'utilizar lo cercador integrat a SPIP? (lo desactivar abriva lo foncionament dau sistèma.)',
'texte_sur_titre' => 'Sobretítol',
'texte_syndication' => 'Si pòu recuperar automaticament, quora un sit web o permete,
la tiera dei novetats. Per aquò far, vos cau activar la sindicacion.
- <blockquote><i>D\'unu aubergadors non activan aquela foncionalitat;
+ <blockquote><div><i>D\'unu aubergadors non activan aquela foncionalitat;
en aqueu cas, non porretz utilizar la sindicacion de contengut
- despí lo vòstre sit.</i></blockquote>', # MODIF
+ despí lo vòstre sit.</i></div></blockquote>', # MODIF
'texte_table_ok' => ': aquesta taula es condrecha.',
'texte_tables_indexation_vides' => 'Li taulas d\'indexacion dau motor son vueii.',
'texte_tentative_recuperation' => 'Assai de reparacion',
'info_question_inscription_nouveaux_redacteurs' => 'Acceptatz que de redactors novèus s\'inscrigan
a partir dau sit public? S\'o acceptatz, lei vesitaires se poiràn inscriure
dieumercé un formulari automatizat e alora accediràn a l\'espaci privat per
- prepausar d\'articles.<blockquote><i> Durant la fasa d\'inscripcion, leis utilizaires recebon un e-mail automatic
+ prepausar d\'articles.<blockquote><div><i> Durant la fasa d\'inscripcion, leis utilizaires recebon un e-mail automatic
que li baila un còde d\'accès au sit privat.
D\'uneis aubergadors autorizan pas lo mandadís d\'e-mails dempuei sei servidors: en aqueu cas, l\'inscripcion automatica es
- impossibla.', # MODIF
+ impossibla.</i></div></blockquote>', # MODIF
'info_question_mots_cles' => 'Desiratz d\'utilizar lei mots clau sus vòstre sit?',
'info_question_proposer_site' => 'Quau pòt prepausar de sits referenciats?',
'info_question_utilisation_moteur_recherche' => 'Desiratz d\'utilizar lo cercador integrat a SPIP? (lo desactivar abriva lo foncionament dau sistèma.)',
'texte_sur_titre' => 'Subretítol',
'texte_syndication' => 'Se pòt recuperar automaticament, quora un sit web o permet,
la tiera de sei novetats. Per aquò far, vos cau activar la sindicacion.
- <blockquote><i>D\'uneis aubergadors activan pas aquela foncionalitat;
+ <blockquote><div><i>D\'uneis aubergadors activan pas aquela foncionalitat;
en aqueu cas, poiretz pas utilizar la sindicacion de contengut
- dempuei vòstre sit.</i></blockquote>', # MODIF
+ dempuei vòstre sit.</i></div></blockquote>', # MODIF
'texte_table_ok' => ': aquesta taula es condrecha.',
'texte_tables_indexation_vides' => 'Lei taulas d\'indexacion dau motor son vuejas.',
'texte_tentative_recuperation' => 'Assai de reparacion',
'info_question_inscription_nouveaux_redacteurs' => 'Acceptatz que de redactors novèls s\'inscrivan
a partir dau sit public? Se o acceptatz, los vesitaires se poiràn inscriure
gràcias a un formulari automatizat e doncas accediràn a l\'espaci privat per
- prepausar d\'articles.<blockquote><i> Durant la fasa d\'inscripcion, los utilizaires recebon un e-mail automatic
+ prepausar d\'articles.<blockquote><div><i> Durant la fasa d\'inscripcion, los utilizaires recebon un e-mail automatic
que lor baila un còde d\'accès vèrs lo sit privat.
Quauques auberjaors autorizan pas l\'enviament d\'e-mails dempuei lors serviors: en aqueu cas, l\'inscripcion automatica es
- impossibla.', # MODIF
+ impossibla.</i></div></blockquote>', # MODIF
'info_question_mots_cles' => 'Desiratz d\'utilizar los mots clau sobre vòstre sit?',
'info_question_proposer_site' => 'Cu pòt prepausar de sits referenciats?',
'info_question_utilisation_moteur_recherche' => 'Desiratz d\'utilizar lo cerchaor integrat a SPIP? (lo desactivar abriva lo foncionament dau sistèma.)',
'texte_sur_titre' => 'Sobretítol',
'texte_syndication' => 'Se pòt recuperar automaticament, quand un sit web o permet,
la tiera de sas novetats. Per aquò far, vos chau activar la sindicacion.
- <blockquote><i>Quauques auberjaors activan pas aquela foncionalitat;
+ <blockquote><div><i>Quauques auberjaors activan pas aquela foncionalitat;
en aqueu cas, poiretz pas utilizar la sindicacion de contengut
- dempuei vòstre sit.</i></blockquote>', # MODIF
+ dempuei vòstre sit.</i></div></blockquote>', # MODIF
'texte_table_ok' => ': aquesta taula es condrecha.',
'texte_tables_indexation_vides' => 'Las taulas d\'indexacion dau motor son voidas.',
'texte_tentative_recuperation' => 'Assai de reparacion',
'info_question_inscription_nouveaux_redacteurs' => 'Czy akceptujesz możliwość dodawania nowych redaktorów
za pośrednictwem stron publicznych ? Jeśli tak, odwiedzący będę mogli się zapisać
za pomocą zautomatyzowanego formularza i będą mieli dostęp do strefy prywatnej, gdzie
- będą proponować własne artykuły. <blockquote><i>W trakcie procesu zapisywania,
+ będą proponować własne artykuły. <blockquote><div><i>W trakcie procesu zapisywania,
użytkownik otrzyma automatycznie mailem
hasła dostępu do strefy prywatnej. Niektóre serwisy hostingowe
wyłączają możliwość wysyłania maili z ich
serwerów : w tym przypadku automatyczne zapisanie się jest
- niemożliwe.', # MODIF
+ niemożliwe.</i></div></blockquote>', # MODIF
'info_question_mots_cles' => 'Czy na Twojej stronie mają być stosowane słowa kluczowe?',
'info_question_proposer_site' => 'Kto może proponować zlinkowane strony ?',
'info_question_utilisation_moteur_recherche' => 'Czy życzysz sobie skorzystać z wyszukiwarki wewnętrznej SPIP ?
'texte_sur_titre' => 'Nadtytuł',
'texte_syndication' => 'Jeśli dany serwis na to pozwala, jest możliwość wyciągnięcia z niego
listy newsów. Aby skorzystać z tej funkcji musisz włączyć <i>syndykację ?</i>.
- <blockquote><i>Niektóre serwery mają taką możliwość wyłączoną ;
- wówczas nie możesz używać syndykacji przy użyciu swojej strony.</i></blockquote>', # MODIF
+ <blockquote><div><i>Niektóre serwery mają taką możliwość wyłączoną ;
+ wówczas nie możesz używać syndykacji przy użyciu swojej strony.</i></div></blockquote>', # MODIF
'texte_table_ok' => ': ta tabela działa poprawnie.',
'texte_tables_indexation_vides' => 'Tabele indeksowania wyszukiwarki są puste.',
'texte_tentative_recuperation' => 'Próba naprawy',
'info_question_inscription_nouveaux_redacteurs' => 'Aceita as inscrições de novos redactores a
partir do sítio público ? Se aceitar, os visitantes poderão inscrever-se
a partir de um formulário automatizado e acederão então ao espaço privado para
-propor os seus próprios artigos. <blockquote><i>Durante a fase de inscrição,
+propor os seus próprios artigos. <blockquote><div><i>Durante a fase de inscrição,
os utilizadores recebem um correio electrónico automático
fornecendo-lhes os seus códigos de acesso ao sítio privado.Alguns
serviços de hospedagem desactivam o envio de mails a partir dos seus
servidores : nesse caso, a inscrição automática é
- impossível.', # MODIF
+ impossível.</i></div></blockquote>', # MODIF
'info_question_mots_cles' => 'Deseja utilizar as palavras-chave no seu sítio ?',
'info_question_proposer_site' => 'Quem pode propor sítios referenciados ?',
'info_question_utilisation_moteur_recherche' => 'Deseja utilizar o motor integrado de pesquisa a SPIP ?
'texte_sur_titre' => 'Supra-título',
'texte_syndication' => 'É possível recuperar automaticamente, quando um sítio Web o permitir,
a lista das suas novidades. Para tal, deve activar a vinculação.
- <blockquote><i>Alguns serviços de hospedagem desactivam esta funcionalidade ;
+ <blockquote><div><i>Alguns serviços de hospedagem desactivam esta funcionalidade ;
neste caso, não poderá utilizar a vinculação de conteúdo
-a partir do seu sítio.</i></blockquote>', # MODIF
+a partir do seu sítio.</i></div></blockquote>', # MODIF
'texte_table_ok' => ': esta tabela está OK.',
'texte_tables_indexation_vides' => 'As tabelas de indexação do motor estão vazias.',
'texte_tentative_recuperation' => 'Tentativa de reparação',
'info_question_activer_compactage_js' => 'Você deseja ativar a compactação dos scripts (javascript)?',
'info_question_activer_compresseur' => 'Você deseja ativar a compressão do fluxo HTTP?',
'info_question_gerer_statistiques' => 'O seu site deve gerenciar as estatísticas de visitas?',
-'info_question_inscription_nouveaux_redacteurs' => 'Você quer aceitar inscrições de novos redatores a partir do site público? Se você aceitar, os visitantes poderão se cadastrar através de um formulário automatizado, tendo acesso à área privada para propôr as suas próprias matérias.<blockquote><i>Durante a fase de inscrição, os usuários recebem um e-mail automático. fornecendo-lhes os seus códigos de acesso à área privada. Alguns serviços de hospedagem desativam o envio de e-mails a partir dos seus servidores: nesse caso, a inscrição automática é impossível.</i></blockquote>',
+'info_question_inscription_nouveaux_redacteurs' => 'Você quer aceitar inscrições de novos redatores a partir do site público? Se você aceitar, os visitantes poderão se cadastrar através de um formulário automatizado, tendo acesso à área privada para propôr as suas próprias matérias.<blockquote><div><i>Durante a fase de inscrição, os usuários recebem um e-mail automático. fornecendo-lhes os seus códigos de acesso à área privada. Alguns serviços de hospedagem desativam o envio de e-mails a partir dos seus servidores: nesse caso, a inscrição automática é impossível.</i></div></blockquote>',
'info_question_mots_cles' => 'Deseja utilizar palavras-chave no seu site?',
'info_question_proposer_site' => 'Quem pode propôr os sites referenciados?',
'info_question_utilisation_moteur_recherche' => 'Você deseja usar o motor de busca integrado ao SPIP? (desativá-lo acelera o funcionamento do sistema.)',
'texte_suppression_fichiers' => 'Use este comando para excluir todos os arquivos que constam do cache do SPIP. Isto permite, por exemplo, forçar a reconstrução de todas as páginas, caso você tenha feito alterações importantes no layout ou na estrutura do site.',
'texte_sur_titre' => 'Sobretítulo',
'texte_syndication' => 'É possível recuperar automaticamente, desde que o site o permita, a lista das suas novidades. Para isso, você deverá ativar a sindicação.
- <blockquote><i>Alguns serviços de hospedagem desativam esta funcionalidade;
-neste caso, você não poderá usar a sindicação de conteúdo no seu site.</i></blockquote>',
+ <blockquote><div><i>Alguns serviços de hospedagem desativam esta funcionalidade;
+neste caso, você não poderá usar a sindicação de conteúdo no seu site.</i></div></blockquote>',
'texte_table_ok' => ': esta tabela está OK.',
'texte_tables_indexation_vides' => 'As tabelas de indexação do motor de busca estão vazias.',
'texte_tentative_recuperation' => 'Tentativa de reparação',
'info_question_inscription_nouveaux_redacteurs' => 'Acceptaţi înscrierea de noi redactori
în partea publică a site-ului ? Dacă acceptaţi, vizitatorii vor putea să se înscrie
cu ajutorul unui formular automatizat şi vor putea avea acces la spaţiul privat pentru a propune
- propriile lor articole. <blockquote><i>Ca urmare a procesului de înscriere,
+ propriile lor articole. <blockquote><div><i>Ca urmare a procesului de înscriere,
utilizatorii vor primi un email automatic
care le va furniza codurile de acces la site-ul privat. Anumiţi
furnizori de hosting dezactivează trimiterea de email-uri de pe
server-ele lor : în acest caz înscrierea automatică este
- imposibilă.', # MODIF
+ imposibilă.</i></div></blockquote>', # MODIF
'info_question_mots_cles' => 'Doriţi să utilizaţi cuvintele-cheie pe site-ul dumneavoastră ?',
'info_question_proposer_site' => 'Cine poate propune site-uri referenţiate ?',
'info_question_utilisation_moteur_recherche' => 'Doriţi să utilizaţi motorul de căutare integrat în SPIP ?
'texte_sur_titre' => 'Supra-titlu',
'texte_syndication' => 'Este posibilă recuperarea îm mod automat, pentru site-urile de Web care o permit,
a listei noutăţilor lor. Pentru aceasta trebuie să activaţi sindicalizarea.
- <blockquote><i>Anumiţi furnizori dezactivează această funcţionalitate ;
- în acest caz, nu veţi putea folosi sindicalizarea conţinutului în site-ul dumneavoastră.</i></blockquote>',
+ <blockquote><div><i>Anumiţi furnizori dezactivează această funcţionalitate ;
+ în acest caz, nu veţi putea folosi sindicalizarea conţinutului în site-ul dumneavoastră.</i></div></blockquote>',
'texte_table_ok' => ': această tabelă este OK.',
'texte_tables_indexation_vides' => 'Tabelele de indexare ale motorului sunt goale.',
'texte_tentative_recuperation' => 'Tentativă de recuperare',
которое дает им код доступа к административной части. Некоторые
поставщики услуг отключают отправку почты со своих
серверов: в этом случае, автоматическая регистрация не может быть
- выполнена.', # MODIF
+ выполнена.</i></blockquote>', # MODIF
'info_question_mots_cles' => 'Хотите ли Вы использовать на Вашем сайте ключевые слова?',
'info_question_proposer_site' => 'Кто может предложить ссылочные сайты?',
'info_question_utilisation_moteur_recherche' => 'Хотите ли Вы использовать поисковую систему, интегрированную в SPIP?
'info_question_inscription_nouveaux_redacteurs' => 'Acceptez-vous les inscriptions de nouveaux rédacteurs à
partir du site public ? Si vous acceptez, les visiteurs pourront s\'inscrire
depuis un formulaire automatisé et accéderont alors à l\'espace privé pour
- proposer leurs propres articles. <blockquote><i>Lors de la phase d\'inscription,
+ proposer leurs propres articles. <blockquote><div><i>Lors de la phase d\'inscription,
les utilisateurs reçoivent un courrier électronique automatique
leur fournissant leurs codes d\'accès au site privé. Certains
hébergeurs désactivent l\'envoi de mails depuis leurs
serveurs : dans ce cas, l\'inscription automatique est
- impossible.', # MODIF
+ impossible.</i></div></blockquote>', # MODIF
'info_question_mots_cles' => 'Vill du använsda nyckelord i din sajt?',
'info_question_proposer_site' => 'Vem kan föreslå länkar till sajter?',
'info_question_utilisation_moteur_recherche' => 'Vill du använda SPIPŽs integrerade sökfunktion?
'texte_sur_titre' => 'Övertitel',
'texte_syndication' => 'If a site allows it, it is possible to retrieve automatically
the list of its latest material. To achieve this, you must activate the syndication.
- <blockquote><i>Some hosts disable this function;
+ <blockquote><div><i>Some hosts disable this function;
in this case, you cannot use the content syndication
- from your site.</i></blockquote>', # MODIF
+ from your site.</i></div></blockquote>', # MODIF
'texte_table_ok' => ': den här tabellen är OK.',
'texte_tables_indexation_vides' => 'Indextabellerna är tomma.',
'texte_tentative_recuperation' => 'Reparationsförsök',
Eğer kabul ediyorsanız, ziyaretçiler otomatik
bir form ile kaydolabilecek ve kendi makalelerini
önermek üzere özel alana erişeceklerdir.
-<blockquote><i>Kayıt aşamasında, kullanıcılara, özel siteye erişim şifresi veren bir otomatik
+<blockquote><div><i>Kayıt aşamasında, kullanıcılara, özel siteye erişim şifresi veren bir otomatik
e-posta gönderilir. Bazı Hizmet bilgisayarları kendi sunucularından
- e-posta yollanmasını durduruyorlar : bu durumda otomatik kayıt olanaksızdır.', # MODIF
+ e-posta yollanmasını durduruyorlar : bu durumda otomatik kayıt olanaksızdır.</i></div></blockquote>', # MODIF
'info_question_mots_cles' => 'Sitenizde anahtar sözcük kullanmak istiyor musunuz ?',
'info_question_proposer_site' => 'Kim atıfta bulunulan siteler önerebilir ?',
'info_question_utilisation_moteur_recherche' => 'SPIP\'in entegre arama motorunu kullanmak istiyor musunuz ?
'info_question_activer_compactage_js' => 'Souhaitez-vous activer le compactage des scripts (javascript) ?', # NEW
'info_question_activer_compresseur' => 'Voulez-vous activer la compression du flux HTTP ?', # NEW
'info_question_gerer_statistiques' => 'Có muốn quản trị các con số thống kê?',
-'info_question_inscription_nouveaux_redacteurs' => 'Bạn có cho phép ghi danh các chủ bút mới từ website công cộng không? Nếu đồng ý, khách có thể ghi danh qua một mẫu tự động, và sẽ được phép vào vùng riêng của họ để soạn bài. <blockquote><i>Trong quá trình ghi danh, người dùng sẽ nhận được email cho biết login/mật mã vào chỗ riêng của họ. Một số máy chủ tắt đặc điểm này: trong trường hợp đó, ghi danh tự động không dùng được.</i>', # MODIF
+'info_question_inscription_nouveaux_redacteurs' => 'Bạn có cho phép ghi danh các chủ bút mới từ website công cộng không? Nếu đồng ý, khách có thể ghi danh qua một mẫu tự động, và sẽ được phép vào vùng riêng của họ để soạn bài. <blockquote><div><i>Trong quá trình ghi danh, người dùng sẽ nhận được email cho biết login/mật mã vào chỗ riêng của họ. Một số máy chủ tắt đặc điểm này: trong trường hợp đó, ghi danh tự động không dùng được.</i></div></blockquote>', # MODIF
'info_question_mots_cles' => 'Bạn có muốn dùng từ then chốt trong website? ',
'info_question_proposer_site' => 'Ai có quyền đề nghị các website nối kết?',
'info_question_utilisation_moteur_recherche' => 'Bạn có muốn dùng cơ phận tìm kiếm có sẵn của SPIP? (<i>Nếu tắt nó đi sẽ làm hệ thống chạy lẹ hơn</i>) ',
'texte_statut_refuses' => 'bị từ chối',
'texte_suppression_fichiers' => 'Dùng mệnh lệnh này để xóa tất cả hồ sơ trong SPIP cache. Làm vậy để buộc làm mới lại mọi trang web, trong trường hợp bạn vừa có một số thay đổi về đồ họa hay cấu trúc của website.',
'texte_sur_titre' => 'Đầu đề',
-'texte_syndication' => 'Nếu website cho phép, bạn có thể truy tìm tự động danh sách các dữ liệu mới nhất. Để làm chuyện này, bạn phải mở đặc điểm syndication lên. <blockquote><i>Một số máy không cho phép dùng chức năng này, trong trường hợp đó, bạn không dùng đặc điểm syndication từ website của bạn được.</i></blockquote>', # MODIF
+'texte_syndication' => 'Nếu website cho phép, bạn có thể truy tìm tự động danh sách các dữ liệu mới nhất. Để làm chuyện này, bạn phải mở đặc điểm syndication lên. <blockquote><div><i>Một số máy không cho phép dùng chức năng này, trong trường hợp đó, bạn không dùng đặc điểm syndication từ website của bạn được.</i></div></blockquote>', # MODIF
'texte_table_ok' => ': bản này OK.',
'texte_tables_indexation_vides' => 'Bản indexing của máy trống rỗng. ',
'texte_tentative_recuperation' => 'Tìm cách sửa chữa',
'info_question_inscription_nouveaux_redacteurs' => '你允许新编辑从公共站点注册吗?
如果你愿意, 访问将通过自动表单注册
, 将能访问私有区维护文章
- . <blockquote><i>光注册过程中,
+ . <blockquote><div><i>光注册过程中,
用户使用自动电子邮件提供的访问码访问私有站点.
. 一些主机使自动发送不可用,
这样,
自动注册将
- 不生效.', # MODIF
+ 不生效.</i></div></blockquote>', # MODIF
'info_question_mots_cles' => '你希望站点使用关键词吗?',
'info_question_proposer_site' => '谁能提出引用站点?',
'info_question_utilisation_moteur_recherche' => '你希望SPIP集成搜索引擎吗?
'texte_sur_titre' => '顶标题',
'texte_syndication' => '如果站点允许, 可以自动得到最新的素材
. 要这样的话, 你必须激活联合.
- <blockquote><i>一些主机禁用这个功能;
+ <blockquote><div><i>一些主机禁用这个功能;
这种情况下, 你不能使用
- 你站点的内容联合.</i></blockquote>', # MODIF
+ 你站点的内容联合.</i></div></blockquote>', # MODIF
'texte_table_ok' => ': 表好了.',
'texte_tables_indexation_vides' => '引擎的索引表为空.',
'texte_tentative_recuperation' => '试图修复',
'titre_image_auteur_supprime' => 'Auteur supprimé',
'titre_image_redacteur' => 'Rédacteur sans accès',
'titre_image_redacteur_02' => 'Rédacteur',
+'titre_image_selecteur' => 'Afficher la liste',
'titre_image_visiteur' => 'Visiteur',
'titre_joindre_document' => 'JOINDRE UN DOCUMENT',
'titre_liens_entrants' => 'Liens entrants',
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// IP en 40 caracteres pour IP v6
$GLOBALS['maj'][15828] = array(array('sql_alter',"TABLE spip_forum CHANGE `ip` `ip` VARCHAR(40) DEFAULT '' NOT NULL"));
+// Type de fichiers : epub r18946 renumerote
+$GLOBALS['maj'][15829] = array(array('upgrade_types_documents'));
+
+// Type de fichiers : voir r19856 (version hors tronc: numerotation derogatoire)
+$GLOBALS['maj'][15830] = array(array('upgrade_types_documents'));
+
?>
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// une fonction pour aider...
// http://doc.spip.org/@chemin_plug
function chemin_plug($racine, $plug) {
- return preg_replace(',[^/]+/[.][.]/,', '', "$racine/$plug");
+ return preg_replace(',[^/]+/\.\./,', '', "$racine/$plug");
}
// http://doc.spip.org/@tree_open_close_dir
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
$desc = "$dir_plugins$plug/$filename";
if (!file_exists($desc))
return false;
- $time = intval(@filemtime($desc));
+ $time = intval(filemtime($desc));
if (!$force_reload
AND ($time > 0)
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2010 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2010 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
$debug = ((_request('var_mode') == 'debug') OR $tableau_des_temps) ? array(1) : array();
// Mettre le Content-Type Html si manquant
- // Idem si debug, avec retrait du Content-Diposition pour voir le voir
+ // Idem si debug, avec retrait du Content-Disposition pour voir le voir
if ($debug OR !isset($page['entetes']['Content-Type'])) {
$page['entetes']['Content-Type'] =
$html = preg_match(',^\s*text/html,',$page['entetes']['Content-Type']);
}
- if ($var_preview AND $html) {
- include_spip('inc/filtres'); // pour http_img_pack
- $x = _T('previsualisation');
- $x = http_img_pack('naviguer-site.png', $x) . ' ' . majuscules($x);
- $x = "<div class='spip-previsu'>$x</div>";
- if (!$pos = strpos($page['texte'], '</body>'))
- $pos = strlen($page['texte']);
- $page['texte'] = substr_replace($page['texte'], $x, $pos, 0);
- }
-
- $affiche_boutons_admin = ($html AND ((
- isset($_COOKIE['spip_admin'])
- AND !$flag_preserver
- ) OR $debug));
+ $affiche_boutons_admin = ((!!$debug)
+ OR ($html AND isset($_COOKIE['spip_admin']) AND !$flag_preserver)
+ OR ($html AND ($_GET['var_mode']=='preview') AND !$flag_preserver)
+ );
if ($affiche_boutons_admin)
include_spip('balise/formulaire_admin');
-
-
// decompte des visites, on peut forcer a oui ou non avec le header X-Spip-Visites
// par defaut on ne compte que les pages en html (ce qui exclue les js,css et flux rss)
$spip_compter_visites = $html?'oui':'non';
// Execution de la page calculee
-
// traitements sur les entetes avant envoi
// peut servir pour le plugin de stats
$page['entetes'] = pipeline('affichage_entetes_final', $page['entetes']);
-
- // 1. Cas d'une page contenant uniquement du HTML :
- if ($page['process_ins'] == 'html') {
- envoyer_entetes($page['entetes']);
- }
-
- // 2. Cas d'une page contenant du PHP :
+ if ($page['process_ins'] != 'html') {
+ // Cas d'une page contenant du PHP :
// Attention cette partie eval() doit imperativement
// etre declenchee dans l'espace des globales (donc pas
// dans une fonction).
- else {
- // sinon, inclure_balise_dynamique nous enverra peut-etre
- // quelques en-tetes de plus (voire qq envoyes directement)
+ // inclure_balise_dynamique nous enverra peut-etre
+ // quelques en-tetes de plus (voire qq envoyes directement)
// restaurer l'etat des notes
if (isset($page['notes']) AND $page['notes']){
}
ob_start();
xml_hack($page, true);
- $res = eval('?' . '>' . $page['texte']);
+ $page['process_ins'] = eval('?' . '>' . $page['texte']);
$page['texte'] = ob_get_contents();
xml_hack($page);
ob_end_clean();
+ }
- envoyer_entetes($page['entetes']);
- // en cas d'erreur lors du eval,
- // la memoriser dans le tableau des erreurs
+ if ($var_preview
+ AND $var_preview = charger_fonction('previsualisation', 'public', true)) {
+ $page = $var_preview($page);
+ // Cette variable a ete calculee trop tot
+ // on laisse son calcul ci-dessus pour compatibilite
+ // bien que l'enlever a l'air sans incidence
+ $html = preg_match(',^\s*text/html,',$page['entetes']['Content-Type']);
+ }
+ envoyer_entetes($page['entetes']);
- if ($res === false) {
+ // en cas d'erreur lors du eval,
+ // la memoriser dans le tableau des erreurs
+ if ($page['process_ins'] === false) {
$msg = array('zbug_erreur_execution_page');
erreur_squelette($msg);
- }
}
-
//
// Post-traitements
//
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
$page = recuperer_fond($fond,$contexte,array('trim'=>false));
$texte = $page;
if ($ancre = _request('var_ajax_ancre')){
+ // pas n'importe quoi quand meme dans la variable !
+ $ancre = str_replace(array('<','"',"'"),array('<','"',''),$ancre);
$texte = "<a href='#$ancre' name='ajax_ancre' style='display:none;'>anchor</a>".$texte;
}
}
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// produire la page : peut mettre a jour $lastmodified
$produire_page = charger_fonction('produire_page','public');
$page = $produire_page($fond, $GLOBALS['contexte'], $use_cache, $chemin_cache, NULL, $page, $lastmodified, $connect);
- if ($page === '')
- erreur_squelette(_T('info_erreur_squelette2',
- array('fichier'=>htmlspecialchars($fond).'.'._EXTENSION_SQUELETTES)));
+ if ($page === '') {
+ $erreur = _T('info_erreur_squelette2',
+ array('fichier'=>htmlspecialchars($fond).'.'._EXTENSION_SQUELETTES));
+ erreur_squelette($erreur);
+ // eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4
+ $page = array('texte' => '', 'erreur' => $erreur);
+ }
}
if ($page AND $chemin_cache) $page['cache'] = $chemin_cache;
// Inserer au besoin les boutons admins
// http://doc.spip.org/@f_admin
function f_admin ($texte) {
+ if (!$GLOBALS['html']) return $texte;
if ($GLOBALS['affiche_boutons_admin']) {
include_spip('public/admin');
$texte = affiche_boutons_admin($texte);
}
}
+function public_previsualisation_dist($page)
+{
+ if (preg_match(',^\s*text/html,',$page['entetes']['Content-Type'])) {
+ include_spip('inc/filtres'); // pour http_img_pack
+ $x = _T('previsualisation');
+ $x = http_img_pack('naviguer-site.png', $x) . ' ' . majuscules($x);
+ $x = "<div class='spip-previsu'>$x</div>";
+ if (!$pos = strpos($page['texte'], '</body>'))
+ $pos = strlen($page['texte']);
+ $page['texte'] = substr_replace($page['texte'], $x, $pos, 0);
+ }
+ return $page;
+}
// Envoyer les entetes, en retenant ceux qui sont a usage interne
// et demarrent par X-Spip-...
function envoyer_entetes($entetes) {
foreach ($entetes as $k => $v)
# if (strncmp($k, 'X-Spip-', 7))
- @header("$k: $v");
+ @header(strlen($v)?"$k: $v":$k);
}
?>
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
';
// pas de calculs superflus si le site est monolingue
$lang = strpos($GLOBALS['meta']['langues_utilisees'], ',');
-
- switch ($p->type_requete) {
+ $idb = $p->id_boucle;
+ switch (!isset($p->boucles[$idb])? '' : $p->boucles[$idb]->type_requete) {
case 'articles':
$c = '"id_article=".' . champ_sql('id_article', $p);
if ($lang) $lang = champ_sql('lang', $p);
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// uniquement les auteurs d'un article publie
if (!$GLOBALS['var_preview'])
if (!isset($boucle->modificateur['lien']) AND !isset($boucle->modificateur['tout'])) {
- fabrique_jointures($boucle, array(
- array($id_table, array('spip_auteurs_articles'), 'id_auteur'),
- array('', array('spip_articles'), 'id_article')), true, $boucle->show, $id_table);
+ $trouver_table = charger_fonction('trouver_table', 'base');
+ $def = $trouver_table('spip_auteurs_articles');
+ $def = array('spip_auteurs_articles', $def);
+ $def = array($id_table, $def, 'id_auteur');
+ $def2 = array('', array('spip_articles'), 'id_article');
+ fabrique_jointures($boucle, array($def, $def2), true, $boucle->show, $id_table);
$t = array_search('spip_articles', $boucle->from);
array_unshift($boucle->where,
array("'='", "'$t.statut'", "'\\'publie\\''"));
else {
$jointure = array_search("spip_syndic", $boucle->from);
if (!$jointure) {
- fabrique_jointures($boucle, array(array($id_table, array('spip_syndic'), 'id_syndic')), true, $boucle->show, $id_table);
+ $trouver_table = charger_fonction('trouver_table', 'base');
+ $def = $trouver_table('spip_syndic');
+ $def = array('spip_syndic', $def);
+ $def = array($id_table, $def, 'id_syndic');
+ fabrique_jointures($boucle, array($def), true, $boucle->show, $id_table);
$jointure = array_search('spip_syndic', $boucle->from);
}
array_unshift($boucle->where,array("'='", "'$mstatut'", "'\\'publie\\''"));
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// http://doc.spip.org/@argumenter_inclure
-function argumenter_inclure($params, $rejet_filtres, $p, &$boucles, $id_boucle, $echap=true, $lang = '', $fond1=false){
+function argumenter_inclure($params, $rejet_filtres, $p, &$boucles, $id_boucle, $echap = true, $lang = '', $fond1 = false){
$l = array();
$erreur_p_i_i = '';
if (!is_array($params)) return $l;
- foreach($params as $k => $couple) {
- // la liste d'arguments d'inclusion peut se terminer par un filtre
+ foreach ($params as $k => $couple){
+ // la liste d'arguments d'inclusion peut se terminer par un filtre
$filtre = array_shift($couple);
if ($filtre) break;
- foreach($couple as $n => $val) {
+ foreach ($couple as $n => $val){
$var = $val[0];
- if ($var->type != 'texte') {
- if ($n OR $k OR $fond1) {
- $erreur_p_i_i = array('zbug_parametres_inclus_incorrects',
- array('param' => $var->nom_champ));
- erreur_squelette($erreur_p_i_i, $p);
- } else $l[1] = calculer_liste($val, $p->descr, $boucles, $id_boucle);
- break;
+ if ($var->type!='texte'){
+ if ($n OR $k OR $fond1){
+ $erreur_p_i_i = array('zbug_parametres_inclus_incorrects',
+ array('param' => $var->nom_champ));
+ erreur_squelette($erreur_p_i_i, $p);
+ } else $l[1] = calculer_liste($val, $p->descr, $boucles, $id_boucle);
+ break;
} else {
- preg_match(",^([^=]*)(=?)(.*)$,", $var->texte,$m);
+ preg_match(",^([^=]*)(=?)(.*)$,", $var->texte, $m);
$var = $m[1];
- $auto = false;;
- if ($m[2]) {
- $v = $m[3];
- if (preg_match(',^[\'"](.*)[\'"]$,', $v, $m)) $v = $m[1];
- $val[0] = new Texte;
- $val[0]->texte = $v;
+ $auto = false;
+ ;
+ if ($m[2]){
+ $v = $m[3];
+ if (preg_match(',^[\'"](.*)[\'"]$,', $v, $m)) $v = $m[1];
+ $val[0] = new Texte;
+ $val[0]->texte = $v;
} elseif ($k OR $n OR $fond1) {
- $auto = true;
+ $auto = true;
} else $var = 1;
- if ($var == 'lang') {
- $lang = !$auto
- ? calculer_liste($val, $p->descr, $boucles, $id_boucle)
- : '$GLOBALS["spip_lang"]';
+ if ($var=='lang'){
+ $lang = !$auto
+ ? calculer_liste($val, $p->descr, $boucles, $id_boucle)
+ : '$GLOBALS["spip_lang"]';
} else {
- $val = $auto
- ? index_pile($id_boucle, $var, $boucles)
- : calculer_liste($val, $p->descr, $boucles, $id_boucle);
- if ($var !== 1)
- $val = ($echap?"\'$var\' => ' . argumenter_squelette(":"'$var' => ")
- . $val . ($echap? ") . '":" ");
- else $val = $echap ? "'.$val.'" : $val;
- $l[$var] = $val;
+ $val = $auto
+ ? index_pile($id_boucle, $var, $boucles)
+ : calculer_liste($val, $p->descr, $boucles, $id_boucle);
+ if ($var!==1)
+ $val = ($echap ? "\'$var\' => ' . argumenter_squelette(" : "'$var' => ")
+ . $val . ($echap ? ") . '" : " ");
+ else $val = $echap ? "'.$val.'" : $val;
+ $l[$var] = $val;
}
}
}
// Cas particulier de la langue : si {lang=xx} est definie, on
// la passe, sinon on passe la langue courante au moment du calcul
// sauf si on n'en veut pas
- if ($lang === false) return $l;
+ if ($lang===false) return $l;
if (!$lang) $lang = '$GLOBALS["spip_lang"]';
- $l['lang'] = ($echap?"\'lang\' => ' . argumenter_squelette(":"'lang' => ") . $lang . ($echap?") . '":" ");
+ $l['lang'] = ($echap ? "\'lang\' => ' . argumenter_squelette(" : "'lang' => ") . $lang . ($echap ? ") . '" : " ");
return $l;
}
define('CODE_RECUPERER_FOND', 'recuperer_fond(%s, %s, array(%s), %s)');
// http://doc.spip.org/@calculer_inclure
-function calculer_inclure($p, &$boucles, $id_boucle) {
+function calculer_inclure($p, &$boucles, $id_boucle){
$_contexte = argumenter_inclure($p->param, false, $p, $boucles, $id_boucle, true, '', true);
- if (is_string($p->texte)) {
+ if (is_string($p->texte)){
$fichier = $p->texte;
$code = "\"$fichier\"";
$fichier = $r[1];
else $fichier = '';
}
- if (!$code OR $code === '""') {
+ if (!$code OR $code==='""'){
$erreur_p_i_i = array('zbug_parametres_inclus_incorrects',
- array('param' => $code));
+ array('param' => $code));
erreur_squelette($erreur_p_i_i, $p);
return false;
}
$compil = texte_script(memoriser_contexte_compil($p));
- if (is_array($_contexte)) {
+ if (is_array($_contexte)){
// Critere d'inclusion {env} (et {self} pour compatibilite ascendante)
- if ($env = (isset($_contexte['env'])|| isset($_contexte['self']))) {
+ if ($env = (isset($_contexte['env']) || isset($_contexte['self']))){
unset($_contexte['env']);
}
// noter les doublons dans l'appel a public.php
- if (isset($_contexte['doublons'])) {
+ if (isset($_contexte['doublons'])){
$_contexte['doublons'] = "\\'doublons\\' => '.var_export(\$doublons,true).'";
}
}
else
return false; // j'aurais voulu toucher le fond ...
-
- $contexte = 'array(' . $_contexte .')';
- if ($env) {
+ $contexte = 'array(' . $_contexte . ')';
+
+ if ($env){
$contexte = "array_merge('.var_export(\$Pile[0],1).',$contexte)";
}
// s'il y a une extension .php, ce n'est pas un squelette
- if (preg_match('/^.+[.]php$/s', $fichier)) {
+ if (preg_match('/^.+[.]php$/s', $fichier)){
// si inexistant, on essaiera a l'execution
if ($path = find_in_path($fichier))
$path = "\"$path\"";
else $path = "find_in_path(\"$fichier\")";
$code = sprintf(CODE_INCLURE_SCRIPT, $path, $fichier, $compil);
- } else {
+ } else {
$_options[] = "\"compil\"=>array($compil)";
if ($ajax)
$_options[] = "\"ajax\"=>true";
- $code = " ' . argumenter_squelette($code) . '";
- $code = "echo " . sprintf(CODE_RECUPERER_FOND, $code, $contexte, implode(',',$_options), "_request(\"connect\")") . ';';
+ $code = " ' . argumenter_squelette($code) . '";
+ $code = "echo " . sprintf(CODE_RECUPERER_FOND, $code, $contexte, implode(',', $_options), "_request(\"connect\")") . ';';
}
- return "\n'<'.'". "?php ". $code . "\n?'." . "'>'";
+ return "\n'<'.'" . "?php " . $code . "\n?'." . "'>'";
}
//
// et on insere le code d'envoi au debusqueur du resultat de la fonction.
// http://doc.spip.org/@calculer_boucle
-function calculer_boucle($id_boucle, &$boucles) {
+function calculer_boucle($id_boucle, &$boucles){
$boucles[$id_boucle] = pipeline('post_boucle', $boucles[$id_boucle]);
// en mode debug memoriser les premiers passages dans la boucle,
// mais pas tous, sinon ca pete.
- if (_request('var_mode_affiche') != 'resultat')
+ if (_request('var_mode_affiche')!='resultat')
$trace = '';
else {
$trace = $boucles[$id_boucle]->descr['nom'] . $id_boucle;
$trace = "if (count(@\$GLOBALS['debug_objets']['resultat']['$trace'])<3)
\$GLOBALS['debug_objets']['resultat']['$trace'][] = \$t0;";
}
- return ($boucles[$id_boucle]->type_requete == 'boucle')
- ? calculer_boucle_rec($id_boucle, $boucles, $trace)
- : calculer_boucle_nonrec($id_boucle, $boucles, $trace);
+ return ($boucles[$id_boucle]->type_requete=='boucle')
+ ? calculer_boucle_rec($id_boucle, $boucles, $trace)
+ : calculer_boucle_nonrec($id_boucle, $boucles, $trace);
}
// compil d'une boucle recursive.
// reference, car par definition un tel passage ne les sauvegarde pas
// http://doc.spip.org/@calculer_boucle_rec
-function calculer_boucle_rec($id_boucle, &$boucles, $trace) {
+function calculer_boucle_rec($id_boucle, &$boucles, $trace){
$nom = $boucles[$id_boucle]->param[0];
return "\n\t\$save_numrows = (\$Numrows['$nom']);"
- . "\n\t\$t0 = " . $boucles[$id_boucle]->return . ";"
- . "\n\t\$Numrows['$nom'] = (\$save_numrows);"
- . $trace
- . "\n\treturn \$t0;";
+ . "\n\t\$t0 = " . $boucles[$id_boucle]->return . ";"
+ . "\n\t\$Numrows['$nom'] = (\$save_numrows);"
+ . $trace
+ . "\n\treturn \$t0;";
}
// Compilation d'une boucle non recursive.
);
// http://doc.spip.org/@calculer_boucle_nonrec
-function calculer_boucle_nonrec($id_boucle, &$boucles, $trace) {
+function calculer_boucle_nonrec($id_boucle, &$boucles, $trace){
$boucle = &$boucles[$id_boucle];
$return = $boucle->return;
$type_boucle = $boucle->type_requete;
$primary = $boucle->primary;
- $constant = preg_match(CODE_MONOTONE, str_replace("\\'",'', $return));
- $flag_cpt = $boucle->mode_partie ||$boucle->cptrows;
+ $constant = preg_match(CODE_MONOTONE, str_replace("\\'", '', $return));
+ $flag_cpt = $boucle->mode_partie || $boucle->cptrows;
$corps = '';
// faudrait expanser le foreach a la compil, car y en a souvent qu'un
// et puis faire un [] plutot qu'un "','."
if ($boucle->doublons)
$corps .= "\n\t\t\tforeach(" . $boucle->doublons . ' as $k) $doublons[$k] .= "," . ' .
- index_pile($id_boucle, $primary, $boucles)
- . "; // doublons\n";
+ index_pile($id_boucle, $primary, $boucles)
+ . "; // doublons\n";
// La boucle doit-elle selectionner la langue ?
// -. par defaut, les boucles suivantes le font
// (sauf si forcer_lang==true ou si le titre contient <multi>).
// - . a moins d'une demande explicite via {!lang_select}
- if (!$constant && $boucle->lang_select != 'non' &&
- (($boucle->lang_select == 'oui') ||
- in_array($type_boucle, array(
- 'articles', 'rubriques', 'hierarchie', 'breves'
+ if (!$constant && $boucle->lang_select!='non' &&
+ (($boucle->lang_select=='oui') ||
+ in_array($type_boucle, array(
+ 'articles', 'rubriques', 'hierarchie', 'breves'
)))
- ) {
+ ){
// Memoriser la langue avant la boucle et la restituer apres
// afin que le corps de boucle affecte la globale directement
$init_lang = "lang_select(\$GLOBALS['spip_lang']);\n\t";
$fin_lang = "lang_select();\n\t";
- $corps .=
+ $corps .=
"\n\t\tlang_select_public("
- . index_pile($id_boucle, 'lang', $boucles)
- . ", '".$boucle->lang_select."'"
- . (in_array($type_boucle, array(
+ . index_pile($id_boucle, 'lang', $boucles)
+ . ", '" . $boucle->lang_select . "'"
+ . (in_array($type_boucle, array(
'articles', 'rubriques', 'hierarchie', 'breves'
- )) ? ', '.index_pile($id_boucle, 'titre', $boucles) : '')
- . ');';
+ )) ? ', ' . index_pile($id_boucle, 'titre', $boucles) : '')
+ . ');';
}
else {
$init_lang = '';
$fin_lang = '';
// sortir les appels au traducteur (invariants de boucle)
- if (strpos($return, '?php') === false
- AND preg_match_all("/\W(_T[(]'[^']*'[)])/", $return, $r)) {
+ if (strpos($return, '?php')===false
+ AND preg_match_all("/\W(_T[(]'[^']*'[)])/", $return, $r)
+ ){
$i = 1;
- foreach($r[1] as $t) {
+ foreach ($r[1] as $t){
$init_lang .= "\n\t\$l$i = $t;";
$return = str_replace($t, "\$l$i", $return);
$i++;
// gestion optimale des separateurs et des boucles constantes
if (count($boucle->separateur))
- $code_sep = ("'" . str_replace("'","\'",join('',$boucle->separateur)) . "'");
+ $code_sep = ("'" . str_replace("'", "\'", join('', $boucle->separateur)) . "'");
- $corps .=
- ((!$boucle->separateur) ?
+ $corps .=
+ ((!$boucle->separateur) ?
(($constant && !$corps && !$flag_cpt) ? $return :
- (($return==="''") ? '' :
- ("\n\t\t" . '$t0 .= ' . $return . ";"))) :
- ("\n\t\t\$t1 " .
- ((strpos($return, '$t1.') === 0) ?
- (".=" . substr($return,4)) :
- ('= ' . $return)) .
- ";\n\t\t" .
- '$t0 .= (($t1 && $t0) ? ' . $code_sep . " : '') . \$t1;"));
-
+ (($return==="''") ? '' :
+ ("\n\t\t" . '$t0 .= ' . $return . ";"))) :
+ ("\n\t\t\$t1 " .
+ ((strpos($return, '$t1.')===0) ?
+ (".=" . substr($return, 4)) :
+ ('= ' . $return)) .
+ ";\n\t\t" .
+ '$t0 .= (($t1 && $t0) ? ' . $code_sep . " : '') . \$t1;"));
+
// Calculer les invalideurs si c'est une boucle non constante et si on
// souhaite invalider ces elements
- if (!$constant AND $primary) {
+ if (!$constant AND $primary){
include_spip('inc/invalideur');
if (function_exists($i = 'calcul_invalideurs'))
$corps = $i($corps, $primary, $boucles, $id_boucle);
if ($boucle->partie OR $boucle->cptrows)
$corps = "\n\t\t\$Numrows['$id_boucle']['compteur_boucle']++;"
- . $boucle->partie
- . $corps;
+ . $boucle->partie
+ . $corps;
$serveur = !$boucle->sql_serveur ? ''
: (', ' . _q($boucle->sql_serveur));
// si le corps est une constante, ne pas appeler le serveur N fois!
- if (preg_match(CODE_MONOTONE,str_replace("\\'",'',$corps), $r)) {
- if (!isset($r[2]) OR (!$r[2])) {
+ if (preg_match(CODE_MONOTONE, str_replace("\\'", '', $corps), $r)){
+ if (!isset($r[2]) OR (!$r[2])){
if (!$boucle->numrows)
return "\n\t\$t0 = '';";
else
$boucle->numrows = true;
$corps = "\n\t\$t0 = str_repeat($corps, \$Numrows['$id_boucle']['total']);";
}
- } else $corps = "while (\$Pile[\$SP] = @sql_fetch(\$result$serveur)) {\n$corps\n }";
+ } else $corps = "while (\$Pile[\$SP] = @sql_fetch(\$result$serveur)) {\n$corps\n }";
$count = '';
- if (!$boucle->select) {
+ if (!$boucle->select){
if (!$boucle->numrows OR $boucle->limit OR $boucle_mode_partie OR $boucle->group)
$count = '1';
else $count = 'count(*)';
- $boucles[$id_boucle]->select[]= $count;
+ $boucles[$id_boucle]->select[] = $count;
}
if ($flag_cpt)
$nums = "\n\t// COMPTEUR\n\t"
- . "\$Numrows['$id_boucle']['compteur_boucle'] = 0;\n\t";
+ . "\$Numrows['$id_boucle']['compteur_boucle'] = 0;\n\t";
else $nums = '';
- if ($boucle->numrows OR $boucle->mode_partie) {
- if ($count == 'count(*)')
- $count = "array_shift(sql_fetch(\$result$serveur))";
- else $count = "sql_count(\$result$serveur)";
+ if ($boucle->numrows OR $boucle->mode_partie){
+ if ($count=='count(*)')
+ $count = "(\$cc=sql_fetch(\$result$serveur))?array_shift(\$cc):0";
+ else
+ $count = "sql_count(\$result$serveur)";
$nums .= "\$Numrows['$id_boucle']['total'] = @intval($count);"
- . $boucle->mode_partie
- . "\n\t";
+ . $boucle->mode_partie
+ . "\n\t";
}
// Ne calculer la requete que maintenant
// car ce qui precede appelle index_pile qui influe dessus
$init = (($init = $boucles[$id_boucle]->doublons)
- ? ("\n\t$init = array();") : '')
- . calculer_requete_sql($boucles[$id_boucle]);
+ ? ("\n\t$init = array();") : '')
+ . calculer_requete_sql($boucles[$id_boucle]);
$contexte = memoriser_contexte_compil($boucle);
// http://doc.spip.org/@calculer_requete_sql
-function calculer_requete_sql($boucle)
-{
+function calculer_requete_sql($boucle){
return ($boucle->hierarchie ? "\n\t$boucle->hierarchie" : '')
- . $boucle->in
- . $boucle->hash
- . calculer_dec('$table', "'" . $boucle->id_table ."'")
- . calculer_dec('$id', "'" . $boucle->id_boucle ."'")
+ . $boucle->in
+ . $boucle->hash
+ . calculer_dec('$table', "'" . $boucle->id_table . "'")
+ . calculer_dec('$id', "'" . $boucle->id_boucle . "'")
# En absence de champ c'est un decompte :
- . calculer_dec('$from', calculer_from($boucle))
- . calculer_dec('$type', calculer_from_type($boucle))
- . calculer_dec('$groupby', 'array(' . (($g=join("\",\n\t\t\"",$boucle->group))?'"'.$g.'"':'') . ")")
- . calculer_dec('$select', 'array("' . join("\",\n\t\t\"", $boucle->select). "\")")
- . calculer_dec('$orderby', 'array(' . calculer_order($boucle) . ")")
- . calculer_dec('$where', calculer_dump_array($boucle->where))
- . calculer_dec('$join', calculer_dump_join($boucle->join))
- . calculer_dec('$limit', (strpos($boucle->limit, 'intval') === false ?
- "'".$boucle->limit."'" :
- $boucle->limit))
- . calculer_dec('$having', calculer_dump_array($boucle->having));
+ . calculer_dec('$from', calculer_from($boucle))
+ . calculer_dec('$type', calculer_from_type($boucle))
+ . calculer_dec('$groupby', 'array(' . (($g = join("\",\n\t\t\"", $boucle->group)) ? '"' . $g . '"' : '') . ")")
+ . calculer_dec('$select', 'array("' . join("\",\n\t\t\"", $boucle->select) . "\")")
+ . calculer_dec('$orderby', 'array(' . calculer_order($boucle) . ")")
+ . calculer_dec('$where', calculer_dump_array($boucle->where))
+ . calculer_dec('$join', calculer_dump_join($boucle->join))
+ . calculer_dec('$limit', (strpos($boucle->limit, 'intval')===false ?
+ "'" . $boucle->limit . "'" :
+ $boucle->limit))
+ . calculer_dec('$having', calculer_dump_array($boucle->having));
}
-function memoriser_contexte_compil($p) {
+function memoriser_contexte_compil($p){
return join(',', array(
_q($p->descr['sourcefile']),
_q($p->descr['nom']),
'$GLOBALS[\'spip_lang\']'));
}
-function reconstruire_contexte_compil($context_compil)
-{
+function reconstruire_contexte_compil($context_compil){
if (!is_array($context_compil)) return $context_compil;
include_spip('public/interfaces');
$p = new Contexte;
$p->descr = array('sourcefile' => $context_compil[0],
- 'nom' => $context_compil[1]);
+ 'nom' => $context_compil[1]);
$p->id_boucle = $context_compil[2];
$p->ligne = $context_compil[3];
$p->lang = $context_compil[4];
}
// http://doc.spip.org/@calculer_dec
-function calculer_dec($nom, $val)
-{
+function calculer_dec($nom, $val){
$static = "static ";
- if (
- strpos($val, '$') !== false
- OR strpos($val, 'sql_') !== false
- OR (
- $test = str_replace(array("array(",'\"',"\'"),array("","",""),$val) // supprimer les array( et les echappements de guillemets
- AND strpos($test,"(")!==FALSE // si pas de parenthese ouvrante, pas de fonction, on peut sortir
- AND $test = preg_replace(",'[^']*',UimsS","",$test) // supprimer les chaines qui peuvent contenir des fonctions SQL qui ne genent pas
- AND preg_match(",\w+\s*\(,UimsS",$test,$regs) // tester la presence de fonctions restantes
- )
- ){
- $static = "";
- }
- return "\n\t" . $static . $nom . ' = ' . $val . ';';
+ if (
+ strpos($val, '$')!==false
+ OR strpos($val, 'sql_')!==false
+ OR (
+ $test = str_replace(array("array(", '\"', "\'"), array("", "", ""), $val) // supprimer les array( et les echappements de guillemets
+ AND strpos($test, "(")!==FALSE // si pas de parenthese ouvrante, pas de fonction, on peut sortir
+ AND $test = preg_replace(",'[^']*',UimsS", "", $test) // supprimer les chaines qui peuvent contenir des fonctions SQL qui ne genent pas
+ AND preg_match(",\w+\s*\(,UimsS", $test, $regs) // tester la presence de fonctions restantes
+ )
+ ){
+ $static = "";
+ }
+ return "\n\t" . $static . $nom . ' = ' . $val . ';';
}
// http://doc.spip.org/@calculer_dump_array
-function calculer_dump_array($a)
-{
- if (!is_array($a)) return $a ;
- $res = "";
- if ($a AND $a[0] == "'?'")
- return ("(" . calculer_dump_array($a[1]) .
- " ? " . calculer_dump_array($a[2]) .
- " : " . calculer_dump_array($a[3]) .
- ")");
- else {
- foreach($a as $v) $res .= ", " . calculer_dump_array($v);
- return "\n\t\t\tarray(" . substr($res,2) . ')';
- }
+function calculer_dump_array($a){
+ if (!is_array($a)) return $a;
+ $res = "";
+ if ($a AND $a[0]=="'?'")
+ return ("(" . calculer_dump_array($a[1]) .
+ " ? " . calculer_dump_array($a[2]) .
+ " : " . calculer_dump_array($a[3]) .
+ ")");
+ else {
+ foreach ($a as $v) $res .= ", " . calculer_dump_array($v);
+ return "\n\t\t\tarray(" . substr($res, 2) . ')';
+ }
}
// http://doc.spip.org/@calculer_dump_join
-function calculer_dump_join($a)
-{
- $res = "";
- foreach($a as $k => $v)
- $res .= ", '$k' => array(".implode(',',$v).")";
- return 'array(' . substr($res,2) . ')';
+function calculer_dump_join($a){
+ $res = "";
+ foreach ($a as $k => $v)
+ $res .= ", '$k' => array(" . implode(',', $v) . ")";
+ return 'array(' . substr($res, 2) . ')';
}
// http://doc.spip.org/@calculer_from
-function calculer_from(&$boucle)
-{
- $res = "";
- foreach($boucle->from as $k => $v) $res .= ",'$k' => '$v'";
- return 'array(' . substr($res,1) . ')';
+function calculer_from(&$boucle){
+ $res = "";
+ foreach ($boucle->from as $k => $v) $res .= ",'$k' => '$v'";
+ return 'array(' . substr($res, 1) . ')';
}
// http://doc.spip.org/@calculer_from_type
-function calculer_from_type(&$boucle)
-{
- $res = "";
- foreach($boucle->from_type as $k => $v) $res .= ",'$k' => '$v'";
- return 'array(' . substr($res,1) . ')';
+function calculer_from_type(&$boucle){
+ $res = "";
+ foreach ($boucle->from_type as $k => $v) $res .= ",'$k' => '$v'";
+ return 'array(' . substr($res, 1) . ')';
}
// http://doc.spip.org/@calculer_order
-function calculer_order(&$boucle)
-{
+function calculer_order(&$boucle){
if (!$order = $boucle->order
- AND !$order = $boucle->default_order)
+ AND !$order = $boucle->default_order
+ )
$order = array();
/*if (isset($boucle->modificateur['collate'])){
// (qui sera argument d'un Return ou la partie droite d'une affectation).
// http://doc.spip.org/@calculer_liste
-function calculer_liste($tableau, $descr, &$boucles, $id_boucle='') {
+function calculer_liste($tableau, $descr, &$boucles, $id_boucle = ''){
if (!$tableau) return "''";
if (!isset($descr['niv'])) $descr['niv'] = 0;
$codes = compile_cas($tableau, $descr, $boucles, $id_boucle);
- if ($codes === false) return false;
+ if ($codes===false) return false;
$n = count($codes);
if (!$n) return "''";
$tab = str_repeat("\t", $descr['niv']);
- if (_request('var_mode_affiche') != 'validation') {
- if ($n==1)
+ if (_request('var_mode_affiche')!='validation'){
+ if ($n==1)
return $codes[0];
else {
$res = '';
- foreach($codes as $code) {
+ foreach ($codes as $code){
if (!preg_match("/^'[^']*'$/", $code)
- OR substr($res,-1,1)!=="'")
- $res .= " .\n$tab$code";
+ OR substr($res, -1, 1)!=="'"
+ )
+ $res .= " .\n$tab$code";
else {
- $res = substr($res,0,-1) . substr($code,1);
+ $res = substr($res, 0, -1) . substr($code, 1);
}
}
- return '(' . substr($res,2+$descr['niv']) . ')';
+ return '(' . substr($res, 2+$descr['niv']) . ')';
}
} else {
- $nom = $descr['nom'] . $id_boucle . ($descr['niv']?$descr['niv']:'');
- return "join('', array_map('array_shift', \$GLOBALS['debug_objets']['sequence']['$nom'] = array(" . join(" ,\n$tab", $codes) . ")))";
+ $nom = $descr['nom'] . $id_boucle . ($descr['niv'] ? $descr['niv'] : '');
+ return "join('', array_map('array_shift', \$GLOBALS['debug_objets']['sequence']['$nom'] = array(" . join(" ,\n$tab", $codes) . ")))";
}
}
-define('_REGEXP_COND_VIDE_NONVIDE',"/^[(](.*)[?]\s*''\s*:\s*('[^']+')\s*[)]$/");
-define('_REGEXP_COND_NONVIDE_VIDE',"/^[(](.*)[?]\s*('[^']+')\s*:\s*''\s*[)]$/");
+define('_REGEXP_COND_VIDE_NONVIDE', "/^[(](.*)[?]\s*''\s*:\s*('[^']+')\s*[)]$/");
+define('_REGEXP_COND_NONVIDE_VIDE', "/^[(](.*)[?]\s*('[^']+')\s*:\s*''\s*[)]$/");
define('_REGEXP_CONCAT_NON_VIDE', "/^(.*)[.]\s*'[^']+'\s*$/");
// http://doc.spip.org/@compile_cas
-function compile_cas($tableau, $descr, &$boucles, $id_boucle) {
+function compile_cas($tableau, $descr, &$boucles, $id_boucle){
- $codes = array();
+ $codes = array();
// cas de la boucle recursive
- if (is_array($id_boucle))
- $id_boucle = $id_boucle[0];
+ if (is_array($id_boucle))
+ $id_boucle = $id_boucle[0];
$type = !$id_boucle ? '' : $boucles[$id_boucle]->type_requete;
$tab = str_repeat("\t", ++$descr['niv']);
$mode = _request('var_mode_affiche');
$err_e_c = '';
// chaque commentaire introduit dans le code doit commencer
// par un caractere distinguant le cas, pour exploitation par debug.
- foreach ($tableau as $p) {
-
- switch($p->type) {
- // texte seul
- case 'texte':
- $code = "'".str_replace(array("\\","'"),array("\\\\","\\'"), $p->texte)."'";
-
- $commentaire= strlen($p->texte) . " signes";
- $avant='';
- $apres='';
- $altern = "''";
- break;
-
- case 'polyglotte':
- $code = "";
- foreach($p->traductions as $k => $v) {
- $code .= ",'" .
- str_replace(array("\\","'"),array("\\\\","\\'"), $k) .
- "' => '" .
- str_replace(array("\\","'"),array("\\\\","\\'"), $v) .
- "'";
- }
- $code = "choisir_traduction(array(" .
- substr($code,1) .
- "))";
- $commentaire= '&';
- $avant='';
- $apres='';
- $altern = "''";
- break;
-
- // inclure
- case 'include':
- $p->descr = $descr;
- $code = calculer_inclure($p, $boucles, $id_boucle);
- if ($code === false) {
- $err_e_c = true;
- $code = "''";
- } else {
- $commentaire = '<INCLURE ' . addslashes(str_replace("\n", ' ', $code)) . '>';
- $avant='';
- $apres='';
+ foreach ($tableau as $p){
+
+ switch ($p->type) {
+ // texte seul
+ case 'texte':
+ $code = "'" . str_replace(array("\\", "'"), array("\\\\", "\\'"), $p->texte) . "'";
+
+ $commentaire = strlen($p->texte) . " signes";
+ $avant = '';
+ $apres = '';
$altern = "''";
- }
- break;
-
- // boucle
- case 'boucle':
- $nom = $p->id_boucle;
- $newdescr = $descr;
- $newdescr['id_mere'] = $nom;
- $newdescr['niv']++;
- $avant = calculer_liste($p->avant,
- $newdescr, $boucles, $id_boucle);
- $apres = calculer_liste($p->apres,
- $newdescr, $boucles, $id_boucle);
- $newdescr['niv']--;
- $altern = calculer_liste($p->altern,
- $newdescr, $boucles, $id_boucle);
- if (($avant === false) OR ($apres === false) OR ($altern === false)) {
- $err_e_c = true;
- $code = "''";
- } else {
- $code = 'BOUCLE' .
- str_replace("-","_", $nom) . $descr['nom'] .
- '($Cache, $Pile, $doublons, $Numrows, $SP)';
- $commentaire= "?$nom";
- if (!$boucles[$nom]->milieu
- AND $boucles[$nom]->type_requete <> 'boucle') {
- if ($altern != "''") $code .= "\n. $altern";
- if ($avant<>"''" OR $apres<>"''")
- spip_log("boucle $nom toujours vide, code superflu dans $id");
- $avant = $apres = $altern = "''";
- } else if ($altern != "''") $altern = "($altern)";
- }
- break;
+ break;
+
+ case 'polyglotte':
+ $code = "";
+ foreach ($p->traductions as $k => $v){
+ $code .= ",'" .
+ str_replace(array("\\", "'"), array("\\\\", "\\'"), $k) .
+ "' => '" .
+ str_replace(array("\\", "'"), array("\\\\", "\\'"), $v) .
+ "'";
+ }
+ $code = "choisir_traduction(array(" .
+ substr($code, 1) .
+ "))";
+ $commentaire = '&';
+ $avant = '';
+ $apres = '';
+ $altern = "''";
+ break;
+
+ // inclure
+ case 'include':
+ $p->descr = $descr;
+ $code = calculer_inclure($p, $boucles, $id_boucle);
+ if ($code===false){
+ $err_e_c = true;
+ $code = "''";
+ } else {
+ $commentaire = '<INCLURE ' . addslashes(str_replace("\n", ' ', $code)) . '>';
+ $avant = '';
+ $apres = '';
+ $altern = "''";
+ }
+ break;
+
+ // boucle
+ case 'boucle':
+ $nom = $p->id_boucle;
+ $newdescr = $descr;
+ $newdescr['id_mere'] = $nom;
+ $newdescr['niv']++;
+ $avant = calculer_liste($p->avant,
+ $newdescr, $boucles, $id_boucle);
+ $apres = calculer_liste($p->apres,
+ $newdescr, $boucles, $id_boucle);
+ $newdescr['niv']--;
+ $altern = calculer_liste($p->altern,
+ $newdescr, $boucles, $id_boucle);
+ if (($avant===false) OR ($apres===false) OR ($altern===false)){
+ $err_e_c = true;
+ $code = "''";
+ } else {
+ $code = 'BOUCLE' .
+ str_replace("-", "_", $nom) . $descr['nom'] .
+ '($Cache, $Pile, $doublons, $Numrows, $SP)';
+ $commentaire = "?$nom";
+ if (!$boucles[$nom]->milieu
+ AND $boucles[$nom]->type_requete<>'boucle'
+ ){
+ if ($altern!="''") $code .= "\n. $altern";
+ if ($avant<>"''" OR $apres<>"''")
+ spip_log("boucle $nom toujours vide, code superflu dans $id");
+ $avant = $apres = $altern = "''";
+ } else if ($altern!="''") $altern = "($altern)";
+ }
+ break;
+
+ case 'idiome':
+ $l = array();
+ $code = '';
+ foreach ($p->arg as $k => $v){
+ $_v = calculer_liste($v, $descr, $boucles, $id_boucle);
+ if ($k)
+ $l[] = _q($k) . ' => ' . $_v;
+ else $code = $_v;
+ }
+ /// Si le module n'est pas fourni,
+ /// l'expliciter sauf si calcule
+ if ($p->module) {
+ $m = $p->module .':'.$p->nom_champ;
+ } elseif ($p->nom_champ) {
+ $m = MODULES_IDIOMES .':'.$p->nom_champ;
+ } else $m = '';
+
+ $code = (!$code ? "'$m'" :
+ ($m ? "'$m' . $code" :
+ ("(strpos(\$x=$code, ':') ? \$x : ('" . MODULES_IDIOMES . ":' . \$x))")))
+ . (!$l ? '' : (", array(" . implode(",\n", $l) . ")"));
+ $code = "_T($code)";
+ if ($p->param){
+ $p->id_boucle = $id_boucle;
+ $p->boucles = &$boucles;
+ $code = compose_filtres($p, $code);
+ }
+ $commentaire = ":";
+ $avant = '';
+ $apres = '';
+ $altern = "''";
+ break;
- case 'idiome':
- $l = array();
- foreach ($p->arg as $k => $v) {
- if ($k) $l[]= _q($k).' => '.calculer_liste($v,$descr,$boucles,$id_boucle);
- }
- $l = !$l ? '' : (", array(".implode(",\n",$l).")");
- $code = "_T('" . $p->module . ":" .$p->nom_champ . "'$l)";
- if ($p->param) {
+ case 'champ':
+
+ // cette structure pourrait etre completee des le phrase' (a faire)
$p->id_boucle = $id_boucle;
$p->boucles = &$boucles;
- $code = compose_filtres($p, $code);
- }
- $commentaire = ":";
- $avant='';
- $apres='';
- $altern = "''";
- break;
-
- case 'champ':
-
- // cette structure pourrait etre completee des le phrase' (a faire)
- $p->id_boucle = $id_boucle;
- $p->boucles = &$boucles;
- $p->descr = $descr;
- #$p->interdire_scripts = true;
- $p->type_requete = $type;
-
- $code = calculer_champ($p);
- $commentaire = '#' . $p->nom_champ . $p->etoile;
- $avant = calculer_liste($p->avant,
- $descr, $boucles, $id_boucle);
- $apres = calculer_liste($p->apres,
- $descr, $boucles, $id_boucle);
- $altern = "''";
- // Si la valeur est destinee a une comparaison a ''
- // forcer la conversion en une chaine par strval
- // si ca peut etre autre chose qu'une chaine
- if (($avant != "''" OR $apres != "''")
- AND $code[0]!= "'"
+ $p->descr = $descr;
+ #$p->interdire_scripts = true;
+ $p->type_requete = $type;
+
+ $code = calculer_champ($p);
+ $commentaire = '#' . $p->nom_champ . $p->etoile;
+ $avant = calculer_liste($p->avant,
+ $descr, $boucles, $id_boucle);
+ $apres = calculer_liste($p->apres,
+ $descr, $boucles, $id_boucle);
+ $altern = "''";
+ // Si la valeur est destinee a une comparaison a ''
+ // forcer la conversion en une chaine par strval
+ // si ca peut etre autre chose qu'une chaine
+ if (($avant!="''" OR $apres!="''")
+ AND $code[0]!="'"
# AND (strpos($code,'interdire_scripts') !== 0)
- AND !preg_match(_REGEXP_COND_VIDE_NONVIDE, $code)
- AND !preg_match(_REGEXP_COND_NONVIDE_VIDE, $code)
- AND !preg_match(_REGEXP_CONCAT_NON_VIDE, $code))
- $code = "strval($code)";
- break;
-
- default:
- // Erreur de construction de l'arbre de syntaxe abstraite
- $code = "''";
- $p->descr = $descr;
- $err_e_c = array('zbug_erreur_compilation');
- erreur_squelette($err_e_c, $p);
+ AND !preg_match(_REGEXP_COND_VIDE_NONVIDE, $code)
+ AND !preg_match(_REGEXP_COND_NONVIDE_VIDE, $code)
+ AND !preg_match(_REGEXP_CONCAT_NON_VIDE, $code)
+ )
+ $code = "strval($code)";
+ break;
+
+ default:
+ // Erreur de construction de l'arbre de syntaxe abstraite
+ $code = "''";
+ $p->descr = $descr;
+ $err_e_c = array('zbug_erreur_compilation');
+ erreur_squelette($err_e_c, $p);
} // switch
- if ($code != "''") {
+ if ($code!="''"){
$code = compile_retour($code, $avant, $apres, $altern, $tab, $descr['niv']);
- $codes[]= (($mode == 'validation') ?
+ $codes[] = (($mode=='validation') ?
"array($code, '$commentaire', " . $p->ligne . ")"
- : (($mode == 'code') ?
- "\n// $commentaire\n$code" :
- $code));
+ : (($mode=='code') ?
+ "\n// $commentaire\n$code" :
+ $code));
}
} // foreach
// de meme si EXP est de la forme (t ? '' : 'C')
// http://doc.spip.org/@compile_retour
-function compile_retour($code, $avant, $apres, $altern, $tab, $n)
-{
- if ($avant == "''") $avant = '';
- if ($apres == "''") $apres = '';
+function compile_retour($code, $avant, $apres, $altern, $tab, $n){
+ if ($avant=="''") $avant = '';
+ if ($apres=="''") $apres = '';
if (!$avant AND !$apres AND ($altern==="''")) return $code;
- if (preg_match(_REGEXP_CONCAT_NON_VIDE, $code)) {
+ if (preg_match(_REGEXP_CONCAT_NON_VIDE, $code)){
$t = $code;
$cond = '';
- } elseif (preg_match(_REGEXP_COND_VIDE_NONVIDE,$code, $r)) {
+ } elseif (preg_match(_REGEXP_COND_VIDE_NONVIDE, $code, $r)) {
$t = $r[2];
- $cond = '!' . $r[1];
- } else if (preg_match(_REGEXP_COND_NONVIDE_VIDE,$code, $r)) {
+ $cond = '!' . $r[1];
+ } else if (preg_match(_REGEXP_COND_NONVIDE_VIDE, $code, $r)){
$t = $r[2];
$cond = $r[1];
} else {
$cond = "($t = $code)!==''";
}
- $res = (!$avant ? "" : "$avant . ") .
+ $res = (!$avant ? "" : "$avant . ") .
$t .
(!$apres ? "" : " . $apres");
- if ($res !== $t) $res = "($res)";
+ if ($res!==$t) $res = "($res)";
return !$cond ? $res : "($cond ?\n\t$tab$res :\n\t$tab$altern)";
}
-function compile_inclure_doublons($lexemes)
-{
- foreach($lexemes as $v)
- if($v->type === 'include' AND $v->param)
- foreach($v->param as $r)
- if (trim($r[0]) === 'doublons')
- return true;
+function compile_inclure_doublons($lexemes){
+ foreach ($lexemes as $v)
+ if ($v->type==='include' AND $v->param)
+ foreach ($v->param as $r)
+ if (trim($r[0])==='doublons')
+ return true;
return false;
}
// En cas d'erreur, elle retournera un tableau des 2 premiers elements seulement
// http://doc.spip.org/@public_compiler_dist
-function public_compiler_dist($squelette, $nom, $gram, $sourcefile, $connect=''){
+function public_compiler_dist($squelette, $nom, $gram, $sourcefile, $connect = ''){
// Pre-traitement : reperer le charset du squelette, et le convertir
// Bonus : supprime le BOM
include_spip('inc/charsets');
$squelette = transcoder_page($squelette);
$descr = array('nom' => $nom,
- 'gram' => $gram,
- 'sourcefile' => $sourcefile,
- 'squelette' => $squelette);
+ 'gram' => $gram,
+ 'sourcefile' => $sourcefile,
+ 'squelette' => $squelette);
// Phraser le squelette, selon sa grammaire
// Point d'entree pour arbre de syntaxe abstraite fourni en premier argument
// Autres specifications comme ci-dessus
-function compiler_squelette($squelette, $boucles, $nom, $descr, $sourcefile, $connect=''){
+function compiler_squelette($squelette, $boucles, $nom, $descr, $sourcefile, $connect = ''){
global $tables_jointures;
static $trouver_table;
spip_timer('calcul_skel');
- if (isset($GLOBALS['var_mode']) AND $GLOBALS['var_mode'] == 'debug') {
+ if (isset($GLOBALS['var_mode']) AND $GLOBALS['var_mode']=='debug'){
$GLOBALS['debug_objets']['squelette'][$nom] = $descr['squelette'];
$GLOBALS['debug_objets']['sourcefile'][$nom] = $sourcefile;
if (!isset($GLOBALS['debug_objets']['principal']))
$GLOBALS['debug_objets']['principal'] = $nom;
}
- foreach ($boucles as $id => $boucle) {
- $GLOBALS['debug_objets']['boucle'][$nom.$id] = $boucle;
+ foreach ($boucles as $id => $boucle){
+ $GLOBALS['debug_objets']['boucle'][$nom . $id] = $boucle;
}
$descr['documents'] = compile_inclure_doublons($squelette);
if (!$trouver_table)
$trouver_table = charger_fonction('trouver_table', 'base');
- foreach($boucles as $id => $boucle) {
+ foreach ($boucles as $id => $boucle){
if (!($type = $boucle->type_requete)) continue;
if (!$descr['documents'] AND (
- (($type == 'documents') AND $boucle->doublons) OR
+ (($type=='documents') AND $boucle->doublons) OR
compile_inclure_doublons($boucle->avant) OR
compile_inclure_doublons($boucle->apres) OR
compile_inclure_doublons($boucle->milieu) OR
- compile_inclure_doublons($boucle->altern)))
- $descr['documents'] = true;
- if ($type != 'boucle') {
+ compile_inclure_doublons($boucle->altern))
+ )
+ $descr['documents'] = true;
+ if ($type!='boucle'){
if (!$boucles[$id]->sql_serveur AND $connect)
$boucles[$id]->sql_serveur = $connect;
$show = $trouver_table($type, $boucles[$id]->sql_serveur);
// si la table n'existe pas avec le connecteur par defaut,
// c'est peut etre une table qui necessite son connecteur dedie fourni
// permet une ecriture allegee (GEO) -> (geo:GEO)
- if (!$show AND $show=$trouver_table($type, strtolower($type)))
+ if (!$show AND $show = $trouver_table($type, strtolower($type)))
$boucles[$id]->sql_serveur = strtolower($type);
- if ($show) {
+ if ($show){
$boucles[$id]->show = $show;
// recopie les infos les plus importantes
$boucles[$id]->primary = $show['key']["PRIMARY KEY"];
$boucles[$id]->descr = &$descr;
if ((!$boucles[$id]->jointures)
- AND (isset($tables_jointures[$nom_table]))
- AND is_array($x = $tables_jointures[$nom_table]))
+ AND (isset($tables_jointures[$nom_table]))
+ AND is_array($x = $tables_jointures[$nom_table])
+ )
$boucles[$id]->jointures = $x;
if ($boucles[$id]->jointures_explicites){
- $jointures = preg_split("/\s+/",$boucles[$id]->jointures_explicites);
- while ($j=array_pop($jointures))
- array_unshift($boucles[$id]->jointures,$j);
+ $jointures = preg_split("/\s+/", $boucles[$id]->jointures_explicites);
+ while ($j = array_pop($jointures))
+ array_unshift($boucles[$id]->jointures, $j);
}
} else {
// Pas une erreur si la table est optionnelle
if ($boucles[$id]->table_optionnelle)
$boucles[$id]->type_requete = '';
- else {
+ else {
$boucles[$id]->type_requete = false;
$boucle = $boucles[$id];
$x = (!$boucle->sql_serveur ? '' :
- ($boucle->sql_serveur . ":")) .
- $type;
+ ($boucle->sql_serveur . ":")) .
+ $type;
$msg = array('zbug_table_inconnue',
- array('table' => $x));
+ array('table' => $x));
erreur_squelette($msg, $boucle);
}
}
// Commencer par reperer les boucles appelees explicitement
// car elles indexent les arguments de maniere derogatoire
- foreach($boucles as $id => $boucle) {
- if ($boucle->type_requete == 'boucle' AND $boucle->param) {
+ foreach ($boucles as $id => $boucle){
+ if ($boucle->type_requete=='boucle' AND $boucle->param){
$boucles[$id]->descr = &$descr;
$rec = &$boucles[$boucle->param[0]];
- if (!$rec) {
+ if (!$rec){
$msg = array('zbug_boucle_recursive_undef',
array('nom' => $boucle->param[0]));
erreur_squelette($msg, $boucle);
$rec->externe = $id;
$descr['id_mere'] = $id;
$boucles[$id]->return =
- calculer_liste(array($rec),
- $descr,
- $boucles,
- $boucle->param);
+ calculer_liste(array($rec),
+ $descr,
+ $boucles,
+ $boucle->param);
}
}
}
- foreach($boucles as $id => $boucle) {
+ foreach ($boucles as $id => $boucle){
$id = strval($id); // attention au type dans index_pile
$type = $boucle->type_requete;
- if ($type AND $type != 'boucle') {
+ if ($type AND $type!='boucle'){
$crit = !$boucle->param ? true : calculer_criteres($id, $boucles);
$descr['id_mere'] = $id;
$boucles[$id]->return =
- calculer_liste($boucle->milieu,
- $descr,
- $boucles,
- $id);
+ calculer_liste($boucle->milieu,
+ $descr,
+ $boucles,
+ $id);
// Si les criteres se sont mal compiles
// ne pas tenter d'assembler le code final
// (mais compiler le corps pour detection d'erreurs)
$corps = calculer_liste($squelette, $descr, $boucles);
$debug = (isset($GLOBALS['var_mode']) AND $GLOBALS['var_mode']=='debug');
- if ($debug) {
+ if ($debug){
include_spip('public/decompiler');
include_spip('public/format_' . _EXTENSION_SQUELETTES);
}
// en particulier les requetes SQL et TOTAL_BOUCLE
// de'terminables seulement maintenant
- foreach($boucles as $id => $boucle) {
+ foreach ($boucles as $id => $boucle){
$boucle = $boucles[$id] = pipeline('pre_boucle', $boucle);
- if ($boucle->return === false) continue;
+ if ($boucle->return===false) continue;
// appeler la fonction de definition de la boucle
- if ($req = $boucle->type_requete) {
- $f = 'boucle_'.strtoupper($req);
- // si pas de definition perso, definition spip
- if (!function_exists($f)) $f = $f.'_dist';
+ if ($req = $boucle->type_requete){
+ $f = 'boucle_' . strtoupper($req);
+ // si pas de definition perso, definition spip
+ if (!function_exists($f)) $f = $f . '_dist';
// laquelle a une definition par defaut
if (!function_exists($f)) $f = 'boucle_DEFAUT';
if (!function_exists($f)) $f = 'boucle_DEFAUT_dist';
$f($id, $boucles);
} else $req = ("\n\treturn '';");
- $boucles[$id]->return =
- "function BOUCLE" . strtr($id,"-","_") . $nom .
- '(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) {' .
- $req .
- "\n}\n\n";
+ $boucles[$id]->return =
+ "function BOUCLE" . strtr($id, "-", "_") . $nom .
+ '(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) {' .
+ $req .
+ "\n}\n\n";
if ($debug)
- $GLOBALS['debug_objets']['code'][$nom.$id] = $boucles[$id]->return;
+ $GLOBALS['debug_objets']['code'][$nom . $id] = $boucles[$id]->return;
}
// Au final, si le corps ou un critere au moins s'est mal compile
// retourner False, sinon inserer leur decompilation
if (is_bool($corps)) return false;
- foreach($boucles as $id => $boucle) {
- if ($boucle->return === false) return false;
+ foreach ($boucles as $id => $boucle){
+ if ($boucle->return===false) return false;
$boucle->return = "\n\n/* BOUCLE " .
$boucle->type_requete .
" " .
- (!$debug ? '' :
- str_replace('*/', '* /',
- decompiler_criteres($boucle->param,
+ (!$debug ? '' :
+ str_replace('*/', '* /',
+ decompiler_criteres($boucle->param,
$boucle->criteres))) .
" */\n\n " .
$boucle->return;
$secondes = spip_timer('calcul_skel');
spip_log("COMPIL ($secondes) [$sourcefile] $nom.php");
+ // $connect n'est pas sûr : on nettoie
+ $connect = preg_replace(',[^\w],', '', $connect);
// Assimiler la fct principale a une boucle anonyme, c'est plus simple
$code = new Boucle;
$code->descr = $descr;
$code->return = '
//
-// Fonction principale du squelette ' .
- $sourcefile .
- ($connect ? " pour $connect" : '') .
- (!CODE_COMMENTE ? '' : "\n// Temps de compilation total: $secondes") .
- "\n//" .
- (!$debug ? '' : ("\n/*\n" .
- str_replace('*/', '* /', public_decompiler($squelette))
- . "\n*/")) . "
+// Fonction principale du squelette ' .
+ $sourcefile .
+ ($connect ? " pour $connect" : '') .
+ (!CODE_COMMENTE ? '' : "\n// Temps de compilation total: $secondes") .
+ "\n//" .
+ (!$debug ? '' : ("\n/*\n" .
+ str_replace('*/', '* /', public_decompiler($squelette))
+ . "\n*/")) . "
function " . $nom . '($Cache, $Pile, $doublons=array(), $Numrows=array(), $SP=0) {
'
- // reporter de maniere securisee les doublons inclus
-.'
+ // reporter de maniere securisee les doublons inclus
+ . '
if (isset($Pile[0]["doublons"]) AND is_array($Pile[0]["doublons"]))
$doublons = nettoyer_env_doublons($Pile[0]["doublons"]);
$connect = ' .
- _q($connect) . ';
+ _q($connect) . ';
$page = ' .
- // ATTENTION, le calcul de l'expression $corps affectera $Cache
- // c'est pourquoi on l'affecte a la variable auxiliaire $page.
- // avant de referencer $Cache
- $corps . ";
+ // ATTENTION, le calcul de l'expression $corps affectera $Cache
+ // c'est pourquoi on l'affecte a la variable auxiliaire $page.
+ // avant de referencer $Cache
+ $corps . ";
- return analyse_resultat_skel(".var_export($nom,true)
- .", \$Cache, \$page, ".var_export($sourcefile,true).");
+ return analyse_resultat_skel(" . var_export($nom, true)
+ . ", \$Cache, \$page, " . var_export($sourcefile, true) . ");
}";
$boucles[''] = $code;
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// note: on essaie d'attrapper aussi certains de ces entetes codes
// "a la main" dans les squelettes, mais evidemment sans exhaustivite
if (preg_match_all(
- '/(<[?]php\s+)@?header\s*\(\s*.([^:\']*):?\s*([^)]*)[^)]\s*\)\s*[;]?\s*[?]>/ims',
+ '/(<[?]php\s+)@?header\s*\(\s*.([^:\'"]*):?\s*([^)]*)[^)]\s*\)\s*[;]?\s*[?]>/ims',
$corps, $regs, PREG_SET_ORDER)){
foreach ($regs as $r) {
$corps = str_replace($r[0], '', $corps);
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
function critere_doublons_dist($idb, &$boucles, $crit) {
$boucle = &$boucles[$idb];
$primary = $boucle->primary;
+ $type = $boucle->type_requete;
+ // Dans le cas NOT, la table du doublon peut etre indiquee
+ // si la table courante a un champ homonyme de sa cle primaire.
+ // Tres utile pour la table des forums.
+ if (isset($crit->param[1])) {
+ $primary = '';
+ $x = !$crit->not ? '' : calculer_liste($crit->param[1], array(), $boucles, $boucle->id_parent);
+ # attention au commentaire "// x signes" qui precede
+ if (preg_match(",^(?:\s*//[^\n]*\n)?'([^']+)'*$,ms", $x, $m)) {
+ $x = id_table_objet($type = $m[1]);
+ if (isset($boucle->show['field'][$x]))
+ $primary = $x; // sinon erreur declenchee ci-dessous
+ }
+ }
if (!$primary OR strpos($primary,',')) {
return (array('zbug_doublon_sur_table_sans_cle_primaire'));
}
-
$not = ($crit->not ? '' : 'NOT');
-
$nom = !isset($crit->param[0]) ? "''" : calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent);
// mettre un tableau pour que ce ne soit pas vu comme une constante
- $nom = "'" .
- $boucle->type_requete .
- "'" .
- ($nom == "''" ? '' : " . $nom");
+ $nom = "'" . $type . "'" . ($nom == "''" ? '' : " . $nom");
$debutdoub = '$doublons['
. (!$not ? '' : ($boucle->doublons . "[]= "));
}
$boucle->where[]= array($suitin . $findoub . ", '" . $not . "')");
-
-
-
# la ligne suivante avait l'intention d'eviter une collecte deja faite
# mais elle fait planter une boucle a 2 critere doublons:
# {!doublons A}{doublons B}
$params = $crit->param;
if (count($params) < 1)
- return (array('zbug_critere_inconnu', array('critere' => $crit->op . " ?")));
-
- $parent = $boucles[$idb]->id_parent;
+ return array('zbug_critere_inconnu', array('critere' => $crit->op . " ?"));
- // les valeurs $date et $type doivent etre connus a la compilation
- // autrement dit ne pas etre des champs
+ $boucle = &$boucles[$idb];
+ $parent = $boucle->id_parent;
+ $fields = $boucle->show['field'];
$date = array_shift($params);
- $date = $date[0]->texte;
-
$type = array_shift($params);
+
+ // la valeur $type doit etre connue a la compilation
+ // donc etre forcement reduite a un litteral unique dans le source
+
$type = $type[0]->texte;
+ // La valeur date doit designer un champ de la table SQL.
+ // Si c'est un litteral unique dans le source, verifier a la compil,
+ // sinon synthetiser le test de verif pour execution ulterieure
+ // On prendra arbitrairement le premier champ si test negatif.
+
+ if ((count($date) == 1) AND ($date[0]->type == 'texte')) {
+ $date = $date[0]->texte;
+ if (!isset($fields[$date]))
+ return array('zbug_critere_inconnu', array('critere' => $crit->op . " " . $date));
+ } else {
+ $a = calculer_liste($date, array(), $boucles, $parent);
+ $noms = array_keys($fields);
+ $defaut = $noms[0];
+ $noms = join(" ", $noms);
+ # bien laisser 2 espaces avant $nom pour que strpos<>0
+ $cond = "(\$a=strval($a))AND\nstrpos(\" $noms \",\" \$a \")";
+ $date = "'.(($cond)\n?\$a:\"$defaut\").'";
+ }
$annee = $params ? array_shift($params) : "";
$annee = "\n" . 'sprintf("%04d", ($x = ' .
calculer_liste($annee, array(), $boucles, $parent) .
calculer_liste($jour2, array(), $boucles, $parent) .
') ? $x : date("d"))';
- $boucle = &$boucles[$idb];
$date = $boucle->id_table . ".$date";
if ($type == 'jour')
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
function decompiler_idiome($struct, $fmt='', $prof=0)
{
- $module = ($struct->module == MODULES_IDIOMES)? ''
- : $struct->module;
-
$args = array();
foreach ($struct->arg as $k => $v) {
- if ($k) $args[$k]= public_decompiler($v, $fmt, $prof);
+ $args[$k]= public_decompiler($v, $fmt, $prof);
}
$filtres = decompiler_liste($struct->param, $fmt, $prof);
$f = 'format_idiome_' . ($fmt ? $fmt : _EXTENSION_SQUELETTES);
- return $f($struct->nom_champ, $module, $args, $filtres, $prof);
+ return $f($struct->nom_champ, $struct->module, $args, $filtres, $prof);
}
function decompiler_champ($struct, $fmt='', $prof=0)
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
define('BALISE_INCLURE','/<INCLU[DR]E[[:space:]]*(\(([^)]*)\))?/S');
define('BALISE_POLYGLOTTE',',<multi>(.*)</multi>,Uims');
-define('BALISE_IDIOMES',',<:(([a-z0-9_]+):)?([a-z0-9_]+)({([^\|=>]*=[^\|>]*)})?((\|[^>]*)?:>),iS');
+define('BALISE_IDIOMES',',<:(([a-z0-9_]+):)?([a-z0-9_]*)({([^\|=>]*=[^>]*)})?((\|[^>]*)?:>),iS');
+define('BALISE_IDIOMES_ARGS', '@^\s*([^= ]*)\s*=\s*((' . NOM_DE_CHAMP . '[{][^}]*})?[^,]*)\s*,?\s*@s');
define('SQL_ARGS', '(\([^)]*\))');
define('CHAMP_SQL_PLUS_FONC', '`?([A-Z_][A-Z_0-9.]*)' . SQL_ARGS . '?`?');
}
-// http://doc.spip.org/@phraser_idiomes
-function phraser_idiomes($texte,$ligne,$result) {
- // Reperer les balises de traduction <:module:chaine{argument1=texte,argument2=#BALISE}|filtre1{texte,#BALISE}|filtre2:>
+/// Reperer les balises de traduction
+/// <:module:chaine{arg1=texte1,arg2=#BALISE}|filtre1{texte2,#BALISE}|filtre2:>
+/// chaine peut etre vide si =texte1 est present et arg1 est vide
+/// sinon ce n'est pas un idiome
+function phraser_idiomes($texte,$ligne,$result) {
while (preg_match(BALISE_IDIOMES, $texte, $match)) {
$p = strpos($texte, $match[0]);
- $debut = substr($texte, 0, $p);
- if ($p) $result = phraser_champs($debut, $ligne, $result);
- $champ = new Idiome;
+ $ko = (!$match[3] && ($match[5][0]!=='='));
+ $debut = substr($texte, 0, $p + ($ko ? strlen($match[0]) : 0));
+ if ($debut) $result = phraser_champs($debut, $ligne, $result);
+ $texte = substr($texte,$p+strlen($match[0]));
$ligne += substr_count($debut, "\n");
+ if ($ko) continue; // faux idiome
+ $champ = new Idiome;
$champ->ligne = $ligne;
$ligne += substr_count($match[0], "\n");
- $texte = substr($texte,$p+strlen($match[0]));
// Stocker les arguments de la balise de traduction
- $args=array();
- $vals=preg_split('/,\s*/',$match[5]);
- foreach ($vals as $val) {
- $arg=preg_split('/\s*=/',$val);
- if ($arg[0])
- $args[$arg[0]]=phraser_champs($arg[1], 0, array());
+ $args = array();
+ $largs = $match[5];
+ while (preg_match(BALISE_IDIOMES_ARGS, $largs, $r)) {
+ $args[$r[1]] = phraser_champs($r[2], 0, array(), true);
+ $largs = substr($largs, strlen($r[0]));
}
- $champ->arg=$args;
+ $champ->arg = $args;
$champ->nom_champ = strtolower($match[3]);
- $champ->module = $match[2] ? $match[2] : MODULES_IDIOMES;
+ $champ->module = $match[2];
// pas d'imbrication pour les filtres sur langue
phraser_args(@$match[7], ":", '', array(), $champ);
$result[] = $champ;
}
// http://doc.spip.org/@phraser_champs
-function phraser_champs($texte,$ligne,$result) {
+function phraser_champs($texte,$ligne,$result, $filtre=false) {
while (preg_match("/".NOM_DE_CHAMP."/S", $texte, $match)) {
$p = strpos($texte, $match[0]);
$suite = substr($texte,$p+strlen($match[0]));
}
*/
} else $texte = $suite;
+ if ($filtre) while ($texte[0]=='|') {
+ $result = phraser_args($texte, '', '', $result, $champ);
+ $args = $champ->apres ;
+ $champ->apres = '';
+ $texte = $args[0];
+ }
phraser_vieux($champ);
$result[] = $champ;
} else {
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
if (isset($_SERVER['HTTP_REFERER'])) $referer = $_SERVER['HTTP_REFERER'];
else if (isset($GLOBALS["HTTP_SERVER_VARS"]["HTTP_REFERER"])) $referer = $GLOBALS["HTTP_SERVER_VARS"]["HTTP_REFERER"];
- // Rejet des robots (qui sont pourtant des humains comme les autres)
- if (_IS_BOT) return;
+ // Rejeter pirates et robots (qui sont pourtant des humains comme les autres)
+ if (_IS_BOT OR strlen($referer)!=strcspn($referer,'<>"\'')) return;
// Ne pas tenir compte des tentatives de spam des forums
if ($_SERVER['REQUEST_METHOD'] !== 'GET'
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
} else $t = 0 ;
$connexion['last'] = $query;
- $r = $link ? mysql_query($query, $link) : mysql_query($query);
+
+ // ajouter un debug utile dans log/mysql-slow.log ?
+ $debug = (!defined('_DEBUG_SLOW_QUERIES') || !_DEBUG_SLOW_QUERIES)
+ ? ''
+ : ' /* '
+ .str_replace('*/','@/',
+ $_SERVER['REQUEST_URI'].' + '.$GLOBALS['ip']
+ )
+ .' */';
+
+ $r = $link ? mysql_query($query.$debug, $link) : mysql_query($query.$debug);
if ($e = spip_mysql_errno($serveur)) // Log de l'erreur eventuelle
$e .= spip_mysql_error($query, $serveur); // et du fautif
} else {
$suite = strstr($query, $regs[0]);
$query = substr($query, 0, -strlen($suite));
- if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite, $r)) {
- $suite = $r[1] . traite_query($r[2], $db, $prefixe);
+ // propager le prefixe en cas de requete imbriquee
+ // il faut alors echapper les chaine avant de le faire, pour ne pas risquer de
+ // modifier une requete qui est en fait juste du texte dans un champ
+ if (strpos(strtoupper($suite),"SELECT")!==false) {
+ list($suite,$textes) = query_echappe_textes($suite);
+ if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite, $r))
+ $suite = $r[1] . traite_query($r[2], $db, $prefixe);
+ $suite = query_reinjecte_textes($suite, $textes);
}
}
$r = preg_replace(_SQL_PREFIXE_TABLE, '\1'.$pref, $query) . $suite;
// http://doc.spip.org/@spip_mysql_listdbs
function spip_mysql_listdbs($serveur='',$requeter=true) {
- return @mysql_list_dbs();
+ $res = spip_mysql_query("SHOW DATABASES");
+ return $res;
}
// Fonction de creation d'une table SQL nommee $nom
function spip_mysql_drop_table($table, $exist='', $serveur='',$requeter=true)
{
if ($exist) $exist =" IF EXISTS";
- return spip_mysql_query("DROP TABLE$exist `$table`", $serveur, $requeter);
+ if (!preg_match('@^\w+$@', $table)) $table = "`$table`";
+ return spip_mysql_query("DROP TABLE$exist $table", $serveur, $requeter);
}
// supprime une vue
// http://doc.spip.org/@spip_mysql_repair
function spip_mysql_repair($table, $serveur='',$requeter=true)
{
- return spip_mysql_query("REPAIR TABLE `$table`", $serveur, $requeter);
+ if (!preg_match('@^\w+$@', $table)) $table = "`$table`";
+ return spip_mysql_query("REPAIR TABLE $table", $serveur, $requeter);
}
// Recupere la definition d'une table ou d'une vue MySQL
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
if (!$groupby) return '';
$groupby = spip_pg_frommysql($groupby);
+ // Ne pas mettre dans le Group-By des valeurs numeriques
+ // issue de prepare_recherche
+ $groupby = preg_replace('/^\s*\d+\s+AS\s+\w+\s*,?\s*/i','', $groupby);
+ $groupby = preg_replace('/,\s*\d+\s+AS\s+\w+\s*/i','', $groupby);
$groupby = preg_replace('/\s+AS\s+\w+\s*/i','', $groupby);
return "\nGROUP BY $groupby";
// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
// une premiere fois pour ajouter maj dans les cles
- $les_cles = spip_pg_ajouter_champs_timestamp($table, $tab_couples[0], $desc, $serveur);
+
+ $c = isset($tab_couples[0]) ? $tab_couples[0] : array();
+ $les_cles = spip_pg_ajouter_champs_timestamp($table, $c, $desc, $serveur);
$cles = "(" . join(',',array_keys($les_cles)). ')';
$valeurs = array();
function spip_pg_cite($v, $t)
{
if (sql_test_date($t)) {
- if (strpos("0123456789", $v[0]) === false)
+ if ($v AND (strpos("0123456789", $v[0]) === false))
return spip_pg_frommysql($v);
else {
if (strpos($v, "-00-00") <= 4) {
function spip_pg_quote($v, $type='')
{
- return ($type === 'int' AND !$v) ? '0' : _q($v);
+ return ($type === 'int' AND !$v) ? '0' :
+ (is_numeric($v) ? strval($v) :
+ (!is_array($v) ? ("'" . pg_escape_string($v) . "'")
+ : join(",", array_map('_q', $v))));
}
function spip_pg_date_proche($champ, $interval, $unite)
//
// IN (...) souvent limite a 255 elements, d'ou cette fonction assistante
//
+ // s'il n'y a pas de valeur, eviter de produire un IN vide: PG rale.
+ if (!$valeurs) return $not ? '0=0' : '0=1';
if (strpos($valeurs, "CAST(x'") !== false)
return "($val=" . join("OR $val=", explode(',',$valeurs)).')';
$n = $i = 0;
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// http://doc.spip.org/@_sqlite_func_least
function _sqlite_func_least () {
- $numargs = func_num_args();
$arg_list = func_get_args();
- $least=$arg_list[0];
- for ($i = 0; $i < $numargs; $i++) {
- if ($arg_list[$i] < $least) $least=$arg_list[$i];
- }
+ $least = min($arg_list);
#spip_log("Passage avec LEAST : $least",'debug');
return $least;
}
return strftime($conv, $date);
}
-// http://doc.spip.org/@_sqlite_func_to_days
+/**
+ * Nombre de jour entre 0000-00-00 et $d
+ * http://doc.spip.org/@_sqlite_func_to_days
+ * cf http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_to-days
+ * @param string $d
+ * @return int
+ */
function _sqlite_func_to_days ($d) {
- $result = date("z", _sqlite_func_unix_timestamp($d));
+ $offset = 719528; // nb de jour entre 0000-00-00 et timestamp 0=1970-01-01
+ $result = $offset+(int)ceil(_sqlite_func_unix_timestamp($d)/(24*3600));
#spip_log("Passage avec TO_DAYS : $d, $result",'debug');
return $result;
}
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
function _sqlite_modifier_table($table, $colonne, $opt=array(), $serveur=''){
if (is_array($table)) {
- $table_origine = array_shift(array_keys($table));
- $table_destination = array_shift($table);
+ reset($table);
+ list($table_origine,$table_destination) = each($table);
} else {
$table_origine = $table_destination = $table;
}
// ne prend actuellement qu'un changement
// mais pourra etre adapte pour changer plus qu'une colonne a la fois
if (is_array($colonne)) {
- $colonne_origine = array_shift(array_keys($colonne));
- $colonne_destination = array_shift($colonne);
+ reset($colonne);
+ list($colonne_origine,$colonne_destination) = each($colonne);
} else {
$colonne_origine = $colonne_destination = $colonne;
}
// Pour les corrections a effectuer sur les requetes :
var $textes = array(); // array(code=>'texte') trouvé
- var $codeEchappements = "%@##@%";
// constructeur
// enleve les textes, transforme la requete pour quelle soit
// bien interpretee par sqlite, puis remet les textes
// la fonction affecte $this->query
-// http://doc.spip.org/@traduire_requete
+ // http://doc.spip.org/@traduire_requete
function traduire_requete(){
//
// 1) Protection des textes en les remplacant par des codes
//
- // enlever les echappements ''
- $this->query = str_replace("''", $this->codeEchappements, $this->query);
- // enlever les 'textes'
- $this->textes = array(); // vider
- $this->query = preg_replace_callback("/('[^']*')/", array(&$this, '_remplacerTexteParCode'), $this->query);
+ // enlever les 'textes' et initialiser avec
+ list($this->query, $textes) = query_echappe_textes($this->query);
//
// 2) Corrections de la requete
//
// 3) Remise en place des textes d'origine
//
- // remettre les 'textes'
- foreach ($this->textes as $cle=>$val){
- $this->query = str_replace($cle, $val, $this->query);
- }
- // remettre les echappements ''
- $this->query = str_replace($this->codeEchappements,"''",$this->query);
+ // Correction Antiquotes et echappements
+ // ` => rien
+ if (strpos($this->query,'`')!==false)
+ $this->query = str_replace('`','', $this->query);
+
+ $this->query = query_reinjecte_textes($this->query, $textes);
}
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
function typographie_fr_dist($letexte) {
- static $trans;
-
+ static $trans, $cherche1, $remplace1, $cherche2, $remplace2;
// Nettoyer 160 = nbsp ; 187 = raquo ; 171 = laquo ; 176 = deg ;
// 147 = ldquo; 148 = rdquo; ' = zouli apostrophe
- if (!$trans) {
+ if (!isset($trans)) {
$trans = array(
"'" => "’",
" " => "~",
$chars_trans = explode(" ",$chars_trans);
foreach($chars as $k=>$r)
$trans[$chars_trans[$k]] = $r;
- }
- $letexte = strtr($letexte, $trans);
- $cherche1 = array(
+ $cherche1 = array(
/* 1 */ '/((?:^|[^\#0-9a-zA-Z\&])[\#0-9a-zA-Z]*)\;/S',
/* 2 */ '/»| --?,|(?::| %)(?:\W|$)/S',
- /* 3 */ '/([^[<(])([!?][!?\.]*)/iS',
+ /* 3 */ '/([^[<(!?.])([!?][!?\.]*)/iS',
/* 4 */ '/«|(?:M(?:M?\.|mes?|r\.?)|[MnN]°) /S'
- );
- $remplace1 = array(
+ );
+ $remplace1 = array(
/* 1 */ '\1~;',
/* 2 */ '~\0',
/* 3 */ '\1~\2',
/* 4 */ '\0~'
- );
- $letexte = preg_replace($cherche1, $remplace1, $letexte);
- $letexte = preg_replace("/ *~+ */S", "~", $letexte);
-
- $cherche2 = array(
+ );
+ $cherche2 = array(
'/([^-\n]|^)--([^-]|$)/S',
- ',(http|https|ftp|mailto)~((://[^"\'\s\[\]\}\)<>]+)~([?]))?,S',
+ ',(' ._PROTOCOLES_STD . ')~((://[^"\'\s\[\]\}\)<>]+)~([?]))?,S',
'/~/'
- );
- $remplace2 = array(
+ );
+ $remplace2 = array(
'\1—\2',
'\1\3\4',
' '
- );
+ );
+ }
+ $letexte = strtr($letexte, $trans);
+ $letexte = preg_replace($cherche1, $remplace1, $letexte);
+ $letexte = preg_replace("/ *~+ */S", "~", $letexte);
$letexte = preg_replace($cherche2, $remplace2, $letexte);
-
return $letexte;
}
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
if (isset($dtd[$grammaire]))
return $dtd[$grammaire];
- if ($avail == 'SYSTEM') $grammaire = find_in_path($grammaire);
+ if ($avail == 'SYSTEM') {
+ $grammaire = find_in_path($grammaire);
+ }
+ if (!$grammaire) return $dtd[''] = array();
$file = _DIR_CACHE_XML . preg_replace('/[^\w.]/','_', $rotlvl) . '.gz';
if (lire_fichier($file, $r)) {
- if (!$grammaire) return array();
if (($avail == 'SYSTEM') AND filemtime($file) < filemtime($grammaire))
$r = false;
}
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2009 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
$parser->add('/\'[^\'\\n\\r]*\'/',$this->IGNORE);
$parser->add('/"[^"\\n\\r]*"/', $this->IGNORE);
// remove comments
- $parser->add('/\\/\\/[^\\n\\r]*[\\n\\r]/', ' ');
+ $parser->add('/\\/\\/[^\\n\\r]*[\\n\\r]/', "\n");
$parser->add('/\\/\\*[^*]*\\*+([^\\/][^*]*\\*+)*\\//', ' ');
// protect regular expressions
$parser->add('/\\s+(\\/[^\\/\\n\\r\\*][^\\/\\n\\r]*\\/g?i?)/', '$2'); // IGNORE
<auteur>Collectif SPIP 2009</auteur>\r
<icon>images/compresseur-32.png</icon>\r
<licence>GPL</licence>\r
- <version>1.0.1</version>\r
+ <version>1.0.2</version>\r
<etat>stable</etat>\r
<description>\r
Compression des css et javascript dans l'entête des pages html de <code>ecrire/</code> et/ou du site public\r
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2009 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2009 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2009 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2009 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2009 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2009 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2009 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
<plugin>\r
<nom>Filtres Images et Couleurs</nom>\r
- <slogan>Filtres de transformation d'image et de couleurs</slogan>\r
+ <slogan>Filtres de transformation d'images et de couleurs</slogan>\r
<auteur>Collectif SPIP</auteur>\r
<icon>images/image_filtre-32.png</icon>\r
<licence>GPL</licence>\r
<version>1.0.1</version>\r
<etat>stable</etat>\r
- <description>Filtres de transformation d'image et de couleurs</description>\r
+ <description>Filtres de transformation d'images et de couleurs</description>\r
<prefix>images</prefix>\r
<fonctions>images_fonctions.php</fonctions>\r
<categorie>multimedia</categorie>\r
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2010 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2010 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2010 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2009 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
if (options.nameSpace) {
nameSpace = 'class="'+options.nameSpace+'"';
}
+ currentScrollPosition = $$.scrollTop();
$$.wrap('<div '+nameSpace+'></div>');
$$.wrap('<div '+id+' class="markItUp"></div>');
$$.wrap('<div class="markItUpContainer"></div>');
$$.addClass("markItUpEditor");
+ $$.scrollTop(currentScrollPosition);
// add the header before the textarea
header = $('<div class="markItUpHeader"></div>').insertBefore($$);
objet[1])\r
)\r
.removeClass('ajaxLoad');\r
+ \r
+ //ouvre un nouvel onglet lorsqu'on clique sur un lien dans la prévisualisation\r
+ $(".markItUpPreview a").attr("target","blank");\r
+\r
return false;\r
});\r
$('.previsuEditer').click(function(){\r
</slogan>\r
<auteur>Matthieu Marcillaud</auteur>\r
<licence>GNU/GPL</licence>\r
- <version>1.7.8</version>\r
+ <version>1.7.9</version>\r
<description>\r
<multi>\r
[fr]Porte plume est une barre d'outil extensible pour SPIP qui\r
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2009 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
}
if ($test > 0) {
+ # autoriser des trucs
+ # ex: l'embed de youtube
+ if (
+ false !== strpos($t, 'iframe')) {
+ foreach (extraire_balises($t, 'iframe') as $iframe) {
+ if (preg_match(',^http://(www\.)?(youtube\.com|(player\.)?vimeo\.com)/.*,', extraire_attribut($iframe, 'src'))) {
+ $re = '___IFRAME___'.md5($iframe);
+ $ok[$re] = $iframe;
+ $t = str_replace($iframe, $re, $t);
+ }
+ }
+ }
+
# reset ($process->clear() ne vide que _xhtml...),
# on doit pouvoir programmer ca plus propremement
$process->_counter = array();
# $process->parse(''); # cas particulier ?
$process->clear();
$t = $process->parse($t);
+
+ # reinserer les trucs autorises
+ if ($ok)
+ foreach ($ok as $re => $v)
+ $t = str_replace($re, $v, $t);
}
else
$t = entites_html($t); // tres laid, en cas d'erreur
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2009 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/**************************************************************************/
/* SPIP, Systeme de publication pour l'internet */
/* */
-/* Copyright (c) 2001-2010 */
+/* Copyright (c) 2001-2014 */
/* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James */
/* */
/* Ce programme est un logiciel libre distribue sous licence GNU/GPL. */
/**************************************************************************/
/* SPIP, Systeme de publication pour l'internet */
/* */
-/* Copyright (c) 2001-2010 */
+/* Copyright (c) 2001-2014 */
/* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James */
/* */
/* Ce programme est un logiciel libre distribue sous licence GNU/GPL. */
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
$auth_methode = ($auth_methode ? $auth_methode : 'spip');
include_spip('inc/auth');
include_spip('inc/autoriser');
+ include_spip('inc/filtres');
+ if (!nom_acceptable(_request('nom'))) {
+ $erreurs['nom'] = _T("info_nom_pas_conforme");
+ }
if ($email = _request('email')){
- include_spip('inc/filtres');
// un redacteur qui modifie son email n'a pas le droit de le vider si il y en avait un
if (!autoriser('modifier','auteur',$id_auteur,null,array('email'=>'?'))
AND $GLOBALS['visiteur_session']['id_auteur']==$id_auteur
}
}
+ if (preg_match(",^\s*javascript,i", _request('url_site'))) {
+ $erreurs['url_site'] = _T('info_url_site_pas_conforme');
+ }
+
if ($err = auth_verifier_login($auth_methode, _request('new_login'), $id_auteur)){
$erreurs['new_login'] = $err;
$erreurs['message_erreur'] .= $err;
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
// la comparaison accepte un numero absent ou different
// sinon avertir
if (!count($erreurs) AND !_request('confirm_titre_mot')){
- if (sql_countsel("spip_mots",
+ if ($l = sql_allfetsel('id_mot', "spip_mots",
"titre REGEXP ".sql_quote("^([0-9]+[.] )?".preg_quote(supprimer_numero(_request('titre')))."$")
- ." AND id_mot<>".intval($id_mot)))
- $erreurs['titre'] =
- _T('avis_doublon_mot_cle')
- ." <input type='hidden' name='confirm_titre_mot' value='1' />";
+ ." AND id_mot<>".intval($id_mot))) {
+ $a = 'id_mot='.$l[0]['id_mot'];
+ $h = generer_url_ecrire('mots_edit', $a);
+ $l = join(' ', array_map('array_shift', $l));
+ $t = _T('avis_doublon_mot_cle');
+ $erreurs['titre'] = "$t <a href='$h' title='$l'>?</a>"
+ ." <input type='hidden' name='confirm_titre_mot' value='1' />";
+ set_request('edit','oui');
+ }
}
return $erreurs;
}
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
<label for="password"><:login_pass2:></label>[
<span class="erreur_message">(#ENV**{erreurs}|table_valeur{password})</span>
]<input type='password' class='password' name='password' id='password' value="" size='40' />
- <span class='details'>[<a href="#URL_PAGE{spip_pass}" id='spip_pass'><:login_motpasseoublie:></a>]</span>
+ <span class='details'>[<a href="[(#URL_PAGE{spip_pass}|parametre_url{lang,#LANG})]" id='spip_pass'><:login_motpasseoublie:></a>]</span>
</li>
[(#ENV{rester_connecte})
<li class="editer_session"><div class='choix'>
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
'_pipeline' => 'affiche_formulaire_login', // faire passer le formulaire dans un pipe dedie pour les methodes auth
);
- if ($erreur OR !$GLOBALS['visiteur_session']['id_auteur'])
+ if ($erreur OR !isset($GLOBALS['visiteur_session']['id_auteur']) OR !$GLOBALS['visiteur_session']['id_auteur'])
$valeurs['editable'] = true;
if (is_null($prive) ? is_url_prive($cible) : $prive) {
$loge = autoriser('ecrire');
}
else
- $loge = ($GLOBALS['visiteur_session']['auth'] != '');
+ $loge = (isset($GLOBALS['visiteur_session']['auth']) AND $GLOBALS['visiteur_session']['auth'] != '');
// Si on est connecte, appeler traiter()
// et lancer la redirection si besoin
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
X-WR-CALNAME;VALUE=TEXT:[(#NOM_SITE_SPIP|filtrer_ical)]
X-WR-RELCALID:[(#URL_SITE_SPIP|filtrer_ical)]_prive<BOUCLE_article(ARTICLES){lang_select=non}{par date}{inverse}{statut="prop"}>
BEGIN:VEVENT
-SUMMARY:[(#TITRE|filtrer_ical)] [[(#NOM_SITE_SPIP|filtrer_ical)]] <:info_a_valider:>
+SUMMARY:[(#TITRE|filtrer_ical)] [[(#NOM_SITE_SPIP|filtrer_ical)]] <:info_a_valider|filtrer_ical:>
UID:article#ID_ARTICLE @ [(#URL_SITE_SPIP|filtrer_ical)]
DTSTAMP:[(#DATE|date_ical)]
DTSTART;VALUE=DATE:[(#DATE|affdate{"Ymd"})]
-CATEGORIES:<:info_a_valider:>
-URL:[(#URL_ECRIRE{articles, id_article=#ID_ARTICLE})]
+CATEGORIES:<:info_a_valider|filtrer_ical:>
+URL:[(#URL_ECRIRE*{articles, id_article=#ID_ARTICLE})]
END:VEVENT</BOUCLE_article>
BEGIN:VTODO
SUMMARY:<:info_articles_a_valider|filtrer_ical:>: #TOTAL_BOUCLE [[(#NOM_SITE_SPIP|filtrer_ical)]]
DTSTAMP:[(#DATE|date_ical)]
DTSTART:[(#DATE|date_ical)]
CATEGORIES:<:icone_a_suivre|filtrer_ical:>
-URL:[(#URL_ECRIRE{accueil})]
+URL:[(#URL_ECRIRE*{accueil})]
END:VTODO</B_article><BOUCLE_breve(BREVES){lang_select=non}{par date}{inverse}{statut="prop"}>
BEGIN:VEVENT
-SUMMARY:[(#TITRE|filtrer_ical)] [[(#NOM_SITE_SPIP|filtrer_ical)]] <:item_breve_proposee:>
+SUMMARY:[(#TITRE|filtrer_ical)] [[(#NOM_SITE_SPIP|filtrer_ical)]] <:item_breve_proposee|filtrer_ical:>
UID:breve#ID_BREVE @ [(#URL_SITE_SPIP|filtrer_ical)]
DTSTAMP:[(#DATE|date_ical)]
DTSTART:[(#DATE|date_ical)]
-CATEGORIES:<:item_breve_proposee:>
-URL:URL_ECRIRE{breves_voir, id_breve=#ID_BREVE}
+CATEGORIES:<:item_breve_proposee|filtrer_ical:>
+URL:URL_ECRIRE*{breves_voir, id_breve=#ID_BREVE}
END:VEVENT</BOUCLE_breve>
BEGIN:VTODO
SUMMARY:<:info_breves_valider|filtrer_ical:>: #TOTAL_BOUCLE [[(#NOM_SITE_SPIP|filtrer_ical)]]
DTSTAMP:[(#DATE|date_ical)]
DTSTART:[(#DATE|date_ical)]
CATEGORIES:<:icone_a_suivre|filtrer_ical:>
-URL:[(#URL_ECRIRE{accueil})]
+URL:[(#URL_ECRIRE*{accueil})]
END:VTODO</B_breve>
<BOUCLE_message_rv(messages auteurs_messages){lang_select=non}{par date_heure}{inverse}{statut="publie"}{rv=oui}{auteurs_messages.id_auteur=#ID_AUTEUR}>
BEGIN:VEVENT
DTSTART:[(#DATE_HEURE|date_ical)]
DTEND:[(#DATE_FIN|date_ical)]
CATEGORIES:<:info_pense_bete|filtrer_ical:>
-URL:[(#URL_ECRIRE{message, id_message=#ID_MESSAGE})]
+URL:[(#URL_ECRIRE*{message, id_message=#ID_MESSAGE})]
END:VEVENT</BOUCLE_message_rv>
<BOUCLE_message_rv_tous(messages auteurs_messages){lang_select=non}{par date_heure}{inverse}{statut="publie"}{rv=oui}{type=affich}>
BEGIN:VEVENT
DTSTART:[(#DATE_HEURE|date_ical)]
DTEND:[(#DATE_FIN|date_ical)]
CATEGORIES:<:info_annonce|filtrer_ical:>
-URL:[(#URL_ECRIRE{message, id_message=#ID_MESSAGE})]
+URL:[(#URL_ECRIRE*{message, id_message=#ID_MESSAGE})]
END:VEVENT</BOUCLE_message_rv_tous>
<BOUCLE_message_pb(messages auteurs_messages){lang_select=non}{par date_heure}{inverse}{statut="publie"}{rv!=oui}{type=pb}{id_auteur=#ID_AUTEUR}>
BEGIN:VTODO
DTSTAMP:[(#DATE_HEURE|date_ical)]
DTSTART:[(#DATE_HEURE|date_ical)]
CATEGORIES:<:info_pense_bete|filtrer_ical:>
-URL:[(#URL_ECRIRE{message, id_message=#ID_MESSAGE})]
+URL:[(#URL_ECRIRE*{message, id_message=#ID_MESSAGE})]
END:VTODO</BOUCLE_message_pb>
<BOUCLE_message_n(messages auteurs_messages){lang_select=non}{par date_heure}{inverse}{statut="publie"}{rv!=oui}{vu=non}{type=normal}{auteurs_messages.id_auteur=#ID_AUTEUR}>
BEGIN:VTODO
DTSTAMP:[(#DATE_HEURE|date_ical)]
DTSTART:[(#DATE_HEURE|date_ical)]
CATEGORIES:<:info_message_2|filtrer_ical:>
-URL:[(#URL_ECRIRE{message, id_message=#ID_MESSAGE})]
+URL:[(#URL_ECRIRE*{message, id_message=#ID_MESSAGE})]
<BOUCLE_message_n_a(AUTEURS auteurs_messages){lang_select=non}{id_message}>[(#ID_AUTEUR
|=={#ENV{id_auteur}}|?{ORGANIZER,ATTENDEE})]:[(#NOM|filtrer_ical)][ <(#EMAIL|filtrer_ical)>]
</BOUCLE_message_n_a>END:VTODO</BOUCLE_message_n>
DTSTART:[(#DATE|date_ical)]
DTEND:[(#DATE|date_ical{60})]
CATEGORIES:<:icone_forum_suivi|filtrer_ical:>
-URL:[(#URL_ECRIRE{controle_forum, debut_id_forum=#ID_FORUM})]
+URL:[(#URL_ECRIRE*{controle_forum, debut_id_forum=#ID_FORUM})]
END:VEVENT</BOUCLE_forum>
BEGIN:TODO
SUMMARY:[(#NOM_SITE_SPIP|filtrer_ical)]] <:icone_forum_suivi|filtrer_ical:>
DTSTAMP:[(#DATE|date_ical)]
DTSTART:[(#DATE|date_ical)]
CATEGORIES:<:icone_forum_suivi|filtrer_ical:>
-URL:[(#URL_ECRIRE{controle_forum})]
+URL:[(#URL_ECRIRE*{controle_forum})]
END:TODO
</B_forum><?php } ?>
END:VCALENDAR
<?php } else {
include_spip('inc/minipres');
echo minipres();
-}?></BOUCLE0>
\ No newline at end of file
+}?></BOUCLE0>
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
if ($row AND is_array($row))
unset($row['id_auteur']);
else {
- // piocher les infos sur un autre login
- if ($n = sql_countsel('spip_auteurs',"login<>''")){
- $n = (abs(crc32($login))%$n);
- $row = auth_informer_login(sql_getfetsel('login','spip_auteurs',"login<>''",'','',"$n,1"));
- if ($row AND is_array($row)){
- unset($row['id_auteur']);
- $row['login'] = $login;
- }
- }
- else $row = array();
+ // generer de fausses infos, mais credibles, pour eviter une attaque
+ // http://core.spip.org/issues/1758
+
+ include_spip('inc/securiser_action');
+ $fauxalea1 = md5('fauxalea'.secret_du_site().$login.floor(date('U')/86400));
+ $fauxalea2 = md5('fauxalea'.secret_du_site().$login.ceil(date('U')/86400));
+
+ $row = array('login' => $login,
+ 'cnx' => 0,
+ 'logo' => "",
+ 'alea_actuel' => substr_replace($fauxalea1,'.',24,0),
+ 'alea_futur' => substr_replace($fauxalea2,'.',24,0)
+ );
}
return json_export($row);
zip_form
.find("form")
.async_upload(function(res,s){
- success(res,s,jForm);
+ success(res,s,'',jForm);
});
jForm.after(zip_form[0]);
return false;
.val("");
};
-function async_upload_article_edit(res,s,jForm){
+function async_upload_article_edit(res,s,xhr,jForm){
res = iframeHandler(res,jForm,async_upload_article_edit);
if(!res) return true;
var cont;
return true;
}
-function async_upload_icon(res,s,jForm) {
+function async_upload_icon(res,s,xhr,jForm) {
res = iframeHandler(res,jForm);
if(!res) return true;
res.find(">div").each(function(){
return true;
}
-function async_upload_portfolio_documents(res,s,jForm){
+function async_upload_portfolio_documents(res,s,xhr,jForm){
res = iframeHandler(res,jForm,async_upload_portfolio_documents);
if(!res) return true;
+function init_bandeau_gadgets(url_toutsite,url_navrapide,url_agenda,html_messagerie){
+ verifForm();
+ calculer_top_bandeau_sec();
+ $("#page,#bandeau-principal")
+ .mouseover(function(){
+ if (typeof(window["changestyle"])!=="undefined") window.changestyle("garder-recherche");
+ });
+ init_gadgets(url_toutsite,url_navrapide,url_agenda,html_messagerie);
+}
+
+function calculer_top_bandeau_sec() {
+ var hauteur_max = 0;
+ var hauteur_bouton = 0;
+
+ $(".boutons_admin a.boutons_admin .icon_texte").each(function(){
+ hauteur_bouton = parseInt($(this).height());
+ if (hauteur_bouton > hauteur_max) hauteur_max = hauteur_bouton;
+ });
+ $(".boutons_admin a.boutons_admin .icon_texte").height(hauteur_max);
+}
+
function init_gadgets(url_toutsite,url_navrapide,url_agenda,html_messagerie){
jQuery('#boutonbandeautoutsite')
.one('mouseover',function(event){
// la case de recherche s'efface la premiere fois qu'on la clique
jQuery('#form_recherche')
.one('click',function(){this.value='';});
-}
\ No newline at end of file
+}
/**
* autosave plugin
*
- * Copyright (c) 2009 Fil (fil@rezo.net)
+ * Copyright (c) 2009-2014 Fil (fil@rezo.net)
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
-/*\r
- * jQuery Form Plugin\r
- * version: 2.36 (07-NOV-2009)\r
- * @requires jQuery v1.2.6 or later\r
- *\r
- * Examples and documentation at: http://malsup.com/jquery/form/\r
- * Dual licensed under the MIT and GPL licenses:\r
- * http://www.opensource.org/licenses/mit-license.php\r
- * http://www.gnu.org/licenses/gpl.html\r
- */\r
-;(function($) {\r
-\r
-/*\r
- Usage Note:\r
- -----------\r
- Do not use both ajaxSubmit and ajaxForm on the same form. These\r
- functions are intended to be exclusive. Use ajaxSubmit if you want\r
- to bind your own submit handler to the form. For example,\r
-\r
- $(document).ready(function() {\r
- $('#myForm').bind('submit', function() {\r
- $(this).ajaxSubmit({\r
- target: '#output'\r
- });\r
- return false; // <-- important!\r
- });\r
- });\r
-\r
- Use ajaxForm when you want the plugin to manage all the event binding\r
- for you. For example,\r
-\r
- $(document).ready(function() {\r
- $('#myForm').ajaxForm({\r
- target: '#output'\r
- });\r
- });\r
-\r
- When using ajaxForm, the ajaxSubmit function will be invoked for you\r
- at the appropriate time.\r
-*/\r
-\r
-/**\r
- * ajaxSubmit() provides a mechanism for immediately submitting\r
- * an HTML form using AJAX.\r
- */\r
-$.fn.ajaxSubmit = function(options) {\r
- // fast fail if nothing selected (http://dev.jquery.com/ticket/2752)\r
- if (!this.length) {\r
- log('ajaxSubmit: skipping submit process - no element selected');\r
- return this;\r
- }\r
-\r
- if (typeof options == 'function')\r
- options = { success: options };\r
-\r
- var url = $.trim(this.attr('action'));\r
- if (url) {\r
- // clean url (don't include hash vaue)\r
- url = (url.match(/^([^#]+)/)||[])[1];\r
- }\r
- url = url || window.location.href || '';\r
-\r
- options = $.extend({\r
- url: url,\r
- type: this.attr('method') || 'GET',\r
- iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank'\r
- }, options || {});\r
-\r
- // hook for manipulating the form data before it is extracted;\r
- // convenient for use with rich editors like tinyMCE or FCKEditor\r
- var veto = {};\r
- this.trigger('form-pre-serialize', [this, options, veto]);\r
- if (veto.veto) {\r
- log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');\r
- return this;\r
- }\r
-\r
- // provide opportunity to alter form data before it is serialized\r
- if (options.beforeSerialize && options.beforeSerialize(this, options) === false) {\r
- log('ajaxSubmit: submit aborted via beforeSerialize callback');\r
- return this;\r
- }\r
-\r
- var a = this.formToArray(options.semantic);\r
- if (options.data) {\r
- options.extraData = options.data;\r
- for (var n in options.data) {\r
- if(options.data[n] instanceof Array) {\r
- for (var k in options.data[n])\r
- a.push( { name: n, value: options.data[n][k] } );\r
- }\r
- else\r
- a.push( { name: n, value: options.data[n] } );\r
- }\r
- }\r
-\r
- // give pre-submit callback an opportunity to abort the submit\r
- if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) {\r
- log('ajaxSubmit: submit aborted via beforeSubmit callback');\r
- return this;\r
- }\r
-\r
- // fire vetoable 'validate' event\r
- this.trigger('form-submit-validate', [a, this, options, veto]);\r
- if (veto.veto) {\r
- log('ajaxSubmit: submit vetoed via form-submit-validate trigger');\r
- return this;\r
- }\r
-\r
- var q = $.param(a);\r
-\r
- if (options.type.toUpperCase() == 'GET') {\r
- options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;\r
- options.data = null; // data is null for 'get'\r
- }\r
- else\r
- options.data = q; // data is the query string for 'post'\r
-\r
- var $form = this, callbacks = [];\r
- if (options.resetForm) callbacks.push(function() { $form.resetForm(); });\r
- if (options.clearForm) callbacks.push(function() { $form.clearForm(); });\r
-\r
- // perform a load on the target only if dataType is not provided\r
- if (!options.dataType && options.target) {\r
- var oldSuccess = options.success || function(){};\r
- callbacks.push(function(data) {\r
- $(options.target).html(data).each(oldSuccess, arguments);\r
- });\r
- }\r
- else if (options.success)\r
- callbacks.push(options.success);\r
-\r
- options.success = function(data, status) {\r
- for (var i=0, max=callbacks.length; i < max; i++)\r
- callbacks[i].apply(options, [data, status, $form]);\r
- };\r
-\r
- // are there files to upload?\r
- var files = $('input:file', this).fieldValue();\r
- var found = false;\r
- for (var j=0; j < files.length; j++)\r
- if (files[j])\r
- found = true;\r
-\r
- var multipart = false;\r
-// var mp = 'multipart/form-data';\r
-// multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp);\r
-\r
- // options.iframe allows user to force iframe mode\r
- // 06-NOV-09: now defaulting to iframe mode if file input is detected\r
- if ((files.length && options.iframe !== false) || options.iframe || found || multipart) {\r
- // hack to fix Safari hang (thanks to Tim Molendijk for this)\r
- // see: http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d\r
- if (options.closeKeepAlive)\r
- $.get(options.closeKeepAlive, fileUpload);\r
- else\r
- fileUpload();\r
- }\r
- else\r
- $.ajax(options);\r
-\r
- // fire 'notify' event\r
- this.trigger('form-submit-notify', [this, options]);\r
- return this;\r
-\r
-\r
- // private function for handling file uploads (hat tip to YAHOO!)\r
- function fileUpload() {\r
- var form = $form[0];\r
-\r
- if ($(':input[name=submit]', form).length) {\r
- alert('Error: Form elements must not be named "submit".');\r
- return;\r
- }\r
-\r
- var opts = $.extend({}, $.ajaxSettings, options);\r
- var s = $.extend(true, {}, $.extend(true, {}, $.ajaxSettings), opts);\r
-\r
- var id = 'jqFormIO' + (new Date().getTime());\r
- var $io = $('<iframe id="' + id + '" name="' + id + '" src="'+ opts.iframeSrc +'" />');\r
- var io = $io[0];\r
-\r
- $io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });\r
-\r
- var xhr = { // mock object\r
- aborted: 0,\r
- responseText: null,\r
- responseXML: null,\r
- status: 0,\r
- statusText: 'n/a',\r
- getAllResponseHeaders: function() {},\r
- getResponseHeader: function() {},\r
- setRequestHeader: function() {},\r
- abort: function() {\r
- this.aborted = 1;\r
- $io.attr('src', opts.iframeSrc); // abort op in progress\r
- }\r
- };\r
-\r
- var g = opts.global;\r
- // trigger ajax global events so that activity/block indicators work like normal\r
- if (g && ! $.active++) $.event.trigger("ajaxStart");\r
- if (g) $.event.trigger("ajaxSend", [xhr, opts]);\r
-\r
- if (s.beforeSend && s.beforeSend(xhr, s) === false) {\r
- s.global && $.active--;\r
- return;\r
- }\r
- if (xhr.aborted)\r
- return;\r
-\r
- var cbInvoked = 0;\r
- var timedOut = 0;\r
-\r
- // add submitting element to data if we know it\r
- var sub = form.clk;\r
- if (sub) {\r
- var n = sub.name;\r
- if (n && !sub.disabled) {\r
- options.extraData = options.extraData || {};\r
- options.extraData[n] = sub.value;\r
- if (sub.type == "image") {\r
- options.extraData[name+'.x'] = form.clk_x;\r
- options.extraData[name+'.y'] = form.clk_y;\r
- }\r
- }\r
- }\r
-\r
- // take a breath so that pending repaints get some cpu time before the upload starts\r
- setTimeout(function() {\r
- // make sure form attrs are set\r
- var t = $form.attr('target'), a = $form.attr('action');\r
-\r
- // update form attrs in IE friendly way\r
- form.setAttribute('target',id);\r
- if (form.getAttribute('method') != 'POST')\r
- form.setAttribute('method', 'POST');\r
- if (form.getAttribute('action') != opts.url)\r
- form.setAttribute('action', opts.url);\r
-\r
- // ie borks in some cases when setting encoding\r
- if (! options.skipEncodingOverride) {\r
- $form.attr({\r
- encoding: 'multipart/form-data',\r
- enctype: 'multipart/form-data'\r
- });\r
- }\r
-\r
- // support timout\r
- if (opts.timeout)\r
- setTimeout(function() { timedOut = true; cb(); }, opts.timeout);\r
-\r
- // add "extra" data to form if provided in options\r
- var extraInputs = [];\r
- try {\r
- if (options.extraData)\r
- for (var n in options.extraData)\r
- extraInputs.push(\r
- $('<input type="hidden" name="'+n+'" value="'+options.extraData[n]+'" />')\r
- .appendTo(form)[0]);\r
-\r
- // add iframe to doc and submit the form\r
- $io.appendTo('body');\r
- io.attachEvent ? io.attachEvent('onload', cb) : io.addEventListener('load', cb, false);\r
- form.submit();\r
- }\r
- finally {\r
- // reset attrs and remove "extra" input elements\r
- form.setAttribute('action',a);\r
- t ? form.setAttribute('target', t) : $form.removeAttr('target');\r
- $(extraInputs).remove();\r
- }\r
- }, 10);\r
-\r
- var domCheckCount = 50;\r
-\r
- function cb() {\r
- if (cbInvoked++) return;\r
-\r
- io.detachEvent ? io.detachEvent('onload', cb) : io.removeEventListener('load', cb, false);\r
-\r
- var ok = true;\r
- try {\r
- if (timedOut) throw 'timeout';\r
- // extract the server response from the iframe\r
- var data, doc;\r
-\r
- doc = io.contentWindow ? io.contentWindow.document : io.contentDocument ? io.contentDocument : io.document;\r
-\r
- var isXml = opts.dataType == 'xml' || doc.XMLDocument || $.isXMLDoc(doc);\r
- log('isXml='+isXml);\r
- if (!isXml && (doc.body == null || doc.body.innerHTML == '')) {\r
- if (--domCheckCount) {\r
- // in some browsers (Opera) the iframe DOM is not always traversable when\r
- // the onload callback fires, so we loop a bit to accommodate\r
- cbInvoked = 0;\r
- setTimeout(cb, 100);\r
- return;\r
- }\r
- log('Could not access iframe DOM after 50 tries.');\r
- return;\r
- }\r
-\r
- xhr.responseText = doc.body ? doc.body.innerHTML : null;\r
- xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;\r
- xhr.getResponseHeader = function(header){\r
- var headers = {'content-type': opts.dataType};\r
- return headers[header];\r
- };\r
-\r
- if (opts.dataType == 'json' || opts.dataType == 'script') {\r
- // see if user embedded response in textarea\r
- var ta = doc.getElementsByTagName('textarea')[0];\r
- if (ta)\r
- xhr.responseText = ta.value;\r
- else {\r
- // account for browsers injecting pre around json response\r
- var pre = doc.getElementsByTagName('pre')[0];\r
- if (pre)\r
- xhr.responseText = pre.innerHTML;\r
- }\r
- }\r
- else if (opts.dataType == 'xml' && !xhr.responseXML && xhr.responseText != null) {\r
- xhr.responseXML = toXml(xhr.responseText);\r
- }\r
- data = $.httpData(xhr, opts.dataType);\r
- }\r
- catch(e){\r
- ok = false;\r
- $.handleError(opts, xhr, 'error', e);\r
- }\r
-\r
- // ordering of these callbacks/triggers is odd, but that's how $.ajax does it\r
- if (ok) {\r
- opts.success(data, 'success');\r
- if (g) $.event.trigger("ajaxSuccess", [xhr, opts]);\r
- }\r
- if (g) $.event.trigger("ajaxComplete", [xhr, opts]);\r
- if (g && ! --$.active) $.event.trigger("ajaxStop");\r
- if (opts.complete) opts.complete(xhr, ok ? 'success' : 'error');\r
-\r
- // clean up\r
- setTimeout(function() {\r
- $io.remove();\r
- xhr.responseXML = null;\r
- }, 100);\r
- };\r
-\r
- function toXml(s, doc) {\r
- if (window.ActiveXObject) {\r
- doc = new ActiveXObject('Microsoft.XMLDOM');\r
- doc.async = 'false';\r
- doc.loadXML(s);\r
- }\r
- else\r
- doc = (new DOMParser()).parseFromString(s, 'text/xml');\r
- return (doc && doc.documentElement && doc.documentElement.tagName != 'parsererror') ? doc : null;\r
- };\r
- };\r
-};\r
-\r
-/**\r
- * ajaxForm() provides a mechanism for fully automating form submission.\r
- *\r
- * The advantages of using this method instead of ajaxSubmit() are:\r
- *\r
- * 1: This method will include coordinates for <input type="image" /> elements (if the element\r
- * is used to submit the form).\r
- * 2. This method will include the submit element's name/value data (for the element that was\r
- * used to submit the form).\r
- * 3. This method binds the submit() method to the form for you.\r
- *\r
- * The options argument for ajaxForm works exactly as it does for ajaxSubmit. ajaxForm merely\r
- * passes the options argument along after properly binding events for submit elements and\r
- * the form itself.\r
- */\r
-$.fn.ajaxForm = function(options) {\r
- return this.ajaxFormUnbind().bind('submit.form-plugin', function() {\r
- $(this).ajaxSubmit(options);\r
- return false;\r
- }).bind('click.form-plugin', function(e) {\r
- var target = e.target;\r
- var $el = $(target);\r
- if (!($el.is(":submit,input:image"))) {\r
- // is this a child element of the submit el? (ex: a span within a button)\r
- var t = $el.closest(':submit');\r
- if (t.length == 0)\r
- return;\r
- target = t[0];\r
- }\r
- var form = this;\r
- form.clk = target;\r
- if (target.type == 'image') {\r
- if (e.offsetX != undefined) {\r
- form.clk_x = e.offsetX;\r
- form.clk_y = e.offsetY;\r
- } else if (typeof $.fn.offset == 'function') { // try to use dimensions plugin\r
- var offset = $el.offset();\r
- form.clk_x = e.pageX - offset.left;\r
- form.clk_y = e.pageY - offset.top;\r
- } else {\r
- form.clk_x = e.pageX - target.offsetLeft;\r
- form.clk_y = e.pageY - target.offsetTop;\r
- }\r
- }\r
- // clear form vars\r
- setTimeout(function() { form.clk = form.clk_x = form.clk_y = null; }, 100);\r
- });\r
-};\r
-\r
-// ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm\r
-$.fn.ajaxFormUnbind = function() {\r
- return this.unbind('submit.form-plugin click.form-plugin');\r
-};\r
-\r
-/**\r
- * formToArray() gathers form element data into an array of objects that can\r
- * be passed to any of the following ajax functions: $.get, $.post, or load.\r
- * Each object in the array has both a 'name' and 'value' property. An example of\r
- * an array for a simple login form might be:\r
- *\r
- * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]\r
- *\r
- * It is this array that is passed to pre-submit callback functions provided to the\r
- * ajaxSubmit() and ajaxForm() methods.\r
- */\r
-$.fn.formToArray = function(semantic) {\r
- var a = [];\r
- if (this.length == 0) return a;\r
-\r
- var form = this[0];\r
- var els = semantic ? form.getElementsByTagName('*') : form.elements;\r
- if (!els) return a;\r
- for(var i=0, max=els.length; i < max; i++) {\r
- var el = els[i];\r
- var n = el.name;\r
- if (!n) continue;\r
-\r
- if (semantic && form.clk && el.type == "image") {\r
- // handle image inputs on the fly when semantic == true\r
- if(!el.disabled && form.clk == el) {\r
- a.push({name: n, value: $(el).val()});\r
- a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});\r
- }\r
- continue;\r
- }\r
-\r
- var v = $.fieldValue(el, true);\r
- if (v && v.constructor == Array) {\r
- for(var j=0, jmax=v.length; j < jmax; j++)\r
- a.push({name: n, value: v[j]});\r
- }\r
- else if (v !== null && typeof v != 'undefined')\r
- a.push({name: n, value: v});\r
- }\r
-\r
- if (!semantic && form.clk) {\r
- // input type=='image' are not found in elements array! handle it here\r
- var $input = $(form.clk), input = $input[0], n = input.name;\r
- if (n && !input.disabled && input.type == 'image') {\r
- a.push({name: n, value: $input.val()});\r
- a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});\r
- }\r
- }\r
- return a;\r
-};\r
-\r
-/**\r
- * Serializes form data into a 'submittable' string. This method will return a string\r
- * in the format: name1=value1&name2=value2\r
- */\r
-$.fn.formSerialize = function(semantic) {\r
- //hand off to jQuery.param for proper encoding\r
- return $.param(this.formToArray(semantic));\r
-};\r
-\r
-/**\r
- * Serializes all field elements in the jQuery object into a query string.\r
- * This method will return a string in the format: name1=value1&name2=value2\r
- */\r
-$.fn.fieldSerialize = function(successful) {\r
- var a = [];\r
- this.each(function() {\r
- var n = this.name;\r
- if (!n) return;\r
- var v = $.fieldValue(this, successful);\r
- if (v && v.constructor == Array) {\r
- for (var i=0,max=v.length; i < max; i++)\r
- a.push({name: n, value: v[i]});\r
- }\r
- else if (v !== null && typeof v != 'undefined')\r
- a.push({name: this.name, value: v});\r
- });\r
- //hand off to jQuery.param for proper encoding\r
- return $.param(a);\r
-};\r
-\r
-/**\r
- * Returns the value(s) of the element in the matched set. For example, consider the following form:\r
- *\r
- * <form><fieldset>\r
- * <input name="A" type="text" />\r
- * <input name="A" type="text" />\r
- * <input name="B" type="checkbox" value="B1" />\r
- * <input name="B" type="checkbox" value="B2"/>\r
- * <input name="C" type="radio" value="C1" />\r
- * <input name="C" type="radio" value="C2" />\r
- * </fieldset></form>\r
- *\r
- * var v = $(':text').fieldValue();\r
- * // if no values are entered into the text inputs\r
- * v == ['','']\r
- * // if values entered into the text inputs are 'foo' and 'bar'\r
- * v == ['foo','bar']\r
- *\r
- * var v = $(':checkbox').fieldValue();\r
- * // if neither checkbox is checked\r
- * v === undefined\r
- * // if both checkboxes are checked\r
- * v == ['B1', 'B2']\r
- *\r
- * var v = $(':radio').fieldValue();\r
- * // if neither radio is checked\r
- * v === undefined\r
- * // if first radio is checked\r
- * v == ['C1']\r
- *\r
- * The successful argument controls whether or not the field element must be 'successful'\r
- * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).\r
- * The default value of the successful argument is true. If this value is false the value(s)\r
- * for each element is returned.\r
- *\r
- * Note: This method *always* returns an array. If no valid value can be determined the\r
- * array will be empty, otherwise it will contain one or more values.\r
- */\r
-$.fn.fieldValue = function(successful) {\r
- for (var val=[], i=0, max=this.length; i < max; i++) {\r
- var el = this[i];\r
- var v = $.fieldValue(el, successful);\r
- if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length))\r
- continue;\r
- v.constructor == Array ? $.merge(val, v) : val.push(v);\r
- }\r
- return val;\r
-};\r
-\r
-/**\r
- * Returns the value of the field element.\r
- */\r
-$.fieldValue = function(el, successful) {\r
- var n = el.name, t = el.type, tag = el.tagName.toLowerCase();\r
- if (typeof successful == 'undefined') successful = true;\r
-\r
- if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||\r
- (t == 'checkbox' || t == 'radio') && !el.checked ||\r
- (t == 'submit' || t == 'image') && el.form && el.form.clk != el ||\r
- tag == 'select' && el.selectedIndex == -1))\r
- return null;\r
-\r
- if (tag == 'select') {\r
- var index = el.selectedIndex;\r
- if (index < 0) return null;\r
- var a = [], ops = el.options;\r
- var one = (t == 'select-one');\r
- var max = (one ? index+1 : ops.length);\r
- for(var i=(one ? index : 0); i < max; i++) {\r
- var op = ops[i];\r
- if (op.selected) {\r
- var v = op.value;\r
- if (!v) // extra pain for IE...\r
- v = (op.attributes && op.attributes['value'] && !(op.attributes['value'].specified)) ? op.text : op.value;\r
- if (one) return v;\r
- a.push(v);\r
- }\r
- }\r
- return a;\r
- }\r
- return el.value;\r
-};\r
-\r
-/**\r
- * Clears the form data. Takes the following actions on the form's input fields:\r
- * - input text fields will have their 'value' property set to the empty string\r
- * - select elements will have their 'selectedIndex' property set to -1\r
- * - checkbox and radio inputs will have their 'checked' property set to false\r
- * - inputs of type submit, button, reset, and hidden will *not* be effected\r
- * - button elements will *not* be effected\r
- */\r
-$.fn.clearForm = function() {\r
- return this.each(function() {\r
- $('input,select,textarea', this).clearFields();\r
- });\r
-};\r
-\r
-/**\r
- * Clears the selected form elements.\r
- */\r
-$.fn.clearFields = $.fn.clearInputs = function() {\r
- return this.each(function() {\r
- var t = this.type, tag = this.tagName.toLowerCase();\r
- if (t == 'text' || t == 'password' || tag == 'textarea')\r
- this.value = '';\r
- else if (t == 'checkbox' || t == 'radio')\r
- this.checked = false;\r
- else if (tag == 'select')\r
- this.selectedIndex = -1;\r
- });\r
-};\r
-\r
-/**\r
- * Resets the form data. Causes all form elements to be reset to their original value.\r
- */\r
-$.fn.resetForm = function() {\r
- return this.each(function() {\r
- // guard against an input with the name of 'reset'\r
- // note that IE reports the reset function as an 'object'\r
- if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType))\r
- this.reset();\r
- });\r
-};\r
-\r
-/**\r
- * Enables or disables any matching elements.\r
- */\r
-$.fn.enable = function(b) {\r
- if (b == undefined) b = true;\r
- return this.each(function() {\r
- this.disabled = !b;\r
- });\r
-};\r
-\r
-/**\r
- * Checks/unchecks any matching checkboxes or radio buttons and\r
- * selects/deselects and matching option elements.\r
- */\r
-$.fn.selected = function(select) {\r
- if (select == undefined) select = true;\r
- return this.each(function() {\r
- var t = this.type;\r
- if (t == 'checkbox' || t == 'radio')\r
- this.checked = select;\r
- else if (this.tagName.toLowerCase() == 'option') {\r
- var $sel = $(this).parent('select');\r
- if (select && $sel[0] && $sel[0].type == 'select-one') {\r
- // deselect all other options\r
- $sel.find('option').selected(false);\r
- }\r
- this.selected = select;\r
- }\r
- });\r
-};\r
-\r
-// helper fn for console logging\r
-// set $.fn.ajaxSubmit.debug to true to enable debug logging\r
-function log() {\r
- if ($.fn.ajaxSubmit.debug && window.console && window.console.log)\r
- window.console.log('[jquery.form] ' + Array.prototype.join.call(arguments,''));\r
-};\r
-\r
-})(jQuery);\r
+/*!
+ * jQuery Form Plugin
+ * version: 2.94 (13-DEC-2011)
+ * @requires jQuery v1.3.2 or later
+ *
+ * Examples and documentation at: http://malsup.com/jquery/form/
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ */
+;(function($) {
+
+/*
+ Usage Note:
+ -----------
+ Do not use both ajaxSubmit and ajaxForm on the same form. These
+ functions are intended to be exclusive. Use ajaxSubmit if you want
+ to bind your own submit handler to the form. For example,
+
+ $(document).ready(function() {
+ $('#myForm').bind('submit', function(e) {
+ e.preventDefault(); // <-- important
+ $(this).ajaxSubmit({
+ target: '#output'
+ });
+ });
+ });
+
+ Use ajaxForm when you want the plugin to manage all the event binding
+ for you. For example,
+
+ $(document).ready(function() {
+ $('#myForm').ajaxForm({
+ target: '#output'
+ });
+ });
+
+ When using ajaxForm, the ajaxSubmit function will be invoked for you
+ at the appropriate time.
+*/
+
+/**
+ * ajaxSubmit() provides a mechanism for immediately submitting
+ * an HTML form using AJAX.
+ */
+$.fn.ajaxSubmit = function(options) {
+ // fast fail if nothing selected (http://dev.jquery.com/ticket/2752)
+ if (!this.length) {
+ log('ajaxSubmit: skipping submit process - no element selected');
+ return this;
+ }
+
+ var method, action, url, $form = this;
+
+ if (typeof options == 'function') {
+ options = { success: options };
+ }
+
+ method = this.attr('method');
+ action = this.attr('action');
+ url = (typeof action === 'string') ? $.trim(action) : '';
+ url = url || window.location.href || '';
+ if (url) {
+ // clean url (don't include hash vaue)
+ url = (url.match(/^([^#]+)/)||[])[1];
+ }
+
+ options = $.extend(true, {
+ url: url,
+ success: $.ajaxSettings.success,
+ type: method || 'GET',
+ iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank'
+ }, options);
+
+ // hook for manipulating the form data before it is extracted;
+ // convenient for use with rich editors like tinyMCE or FCKEditor
+ var veto = {};
+ this.trigger('form-pre-serialize', [this, options, veto]);
+ if (veto.veto) {
+ log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');
+ return this;
+ }
+
+ // provide opportunity to alter form data before it is serialized
+ if (options.beforeSerialize && options.beforeSerialize(this, options) === false) {
+ log('ajaxSubmit: submit aborted via beforeSerialize callback');
+ return this;
+ }
+
+ var traditional = options.traditional;
+ if ( traditional === undefined ) {
+ traditional = $.ajaxSettings.traditional;
+ }
+
+ var qx,n,v,a = this.formToArray(options.semantic);
+ if (options.data) {
+ options.extraData = options.data;
+ qx = $.param(options.data, traditional);
+ }
+
+ // give pre-submit callback an opportunity to abort the submit
+ if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) {
+ log('ajaxSubmit: submit aborted via beforeSubmit callback');
+ return this;
+ }
+
+ // fire vetoable 'validate' event
+ this.trigger('form-submit-validate', [a, this, options, veto]);
+ if (veto.veto) {
+ log('ajaxSubmit: submit vetoed via form-submit-validate trigger');
+ return this;
+ }
+
+ var q = $.param(a, traditional);
+ if (qx) {
+ q = ( q ? (q + '&' + qx) : qx );
+ }
+ if (options.type.toUpperCase() == 'GET') {
+ options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
+ options.data = null; // data is null for 'get'
+ }
+ else {
+ options.data = q; // data is the query string for 'post'
+ }
+
+ var callbacks = [];
+ if (options.resetForm) {
+ callbacks.push(function() { $form.resetForm(); });
+ }
+ if (options.clearForm) {
+ callbacks.push(function() { $form.clearForm(options.includeHidden); });
+ }
+
+ // perform a load on the target only if dataType is not provided
+ if (!options.dataType && options.target) {
+ var oldSuccess = options.success || function(){};
+ callbacks.push(function(data) {
+ var fn = options.replaceTarget ? 'replaceWith' : 'html';
+ $(options.target)[fn](data).each(oldSuccess, arguments);
+ });
+ }
+ else if (options.success) {
+ callbacks.push(options.success);
+ }
+
+ options.success = function(data, status, xhr) { // jQuery 1.4+ passes xhr as 3rd arg
+ var context = options.context || options; // jQuery 1.4+ supports scope context
+ for (var i=0, max=callbacks.length; i < max; i++) {
+ callbacks[i].apply(context, [data, status, xhr || $form, $form]);
+ }
+ };
+
+ // are there files to upload?
+ var fileInputs = $('input:file:enabled[value]', this); // [value] (issue #113)
+ var hasFileInputs = fileInputs.length > 0;
+ var mp = 'multipart/form-data';
+ var multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp);
+
+ var fileAPI = !!(hasFileInputs && fileInputs.get(0).files && window.FormData);
+ log("fileAPI :" + fileAPI);
+ var shouldUseFrame = (hasFileInputs || multipart) /*&& !fileAPI*/; /* fileAPI bug sous tous les navs dans cette version */
+
+ // options.iframe allows user to force iframe mode
+ // 06-NOV-09: now defaulting to iframe mode if file input is detected
+ if (options.iframe !== false && (options.iframe || shouldUseFrame)) {
+ // hack to fix Safari hang (thanks to Tim Molendijk for this)
+ // see: http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d
+ if (options.closeKeepAlive) {
+ $.get(options.closeKeepAlive, function() {
+ fileUploadIframe(a);
+ });
+ }
+ else {
+ fileUploadIframe(a);
+ }
+ }
+ else if ((hasFileInputs || multipart) && fileAPI) {
+ options.progress = options.progress || $.noop;
+ fileUploadXhr(a);
+ }
+ else {
+ $.ajax(options);
+ }
+
+ // fire 'notify' event
+ this.trigger('form-submit-notify', [this, options]);
+ return this;
+
+ // XMLHttpRequest Level 2 file uploads (big hat tip to francois2metz)
+ function fileUploadXhr(a) {
+ var formdata = new FormData();
+
+ for (var i=0; i < a.length; i++) {
+ if (a[i].type == 'file')
+ continue;
+ formdata.append(a[i].name, a[i].value);
+ }
+
+ $form.find('input:file:enabled').each(function(){
+ var name = $(this).attr('name'), files = this.files;
+ if (name) {
+ for (var i=0; i < files.length; i++)
+ formdata.append(name, files[i]);
+ }
+ });
+
+ if (options.extraData) {
+ for (var k in options.extraData)
+ formdata.append(k, options.extraData[k])
+ }
+
+ options.data = null;
+
+ var s = $.extend(true, {}, $.ajaxSettings, options, {
+ contentType: false,
+ processData: false,
+ cache: false,
+ type: 'POST'
+ });
+
+ s.context = s.context || s;
+
+ s.data = null;
+ var beforeSend = s.beforeSend;
+ s.beforeSend = function(xhr, o) {
+ o.data = formdata;
+ if(xhr.upload) { // unfortunately, jQuery doesn't expose this prop (http://bugs.jquery.com/ticket/10190)
+ xhr.upload.onprogress = function(event) {
+ o.progress(event.position, event.total);
+ };
+ }
+ if(beforeSend)
+ beforeSend.call(o, xhr, options);
+ };
+ $.ajax(s);
+ }
+
+ // private function for handling file uploads (hat tip to YAHOO!)
+ function fileUploadIframe(a) {
+ var form = $form[0], el, i, s, g, id, $io, io, xhr, sub, n, timedOut, timeoutHandle;
+ var useProp = !!$.fn.prop;
+
+ if (a) {
+ if ( useProp ) {
+ // ensure that every serialized input is still enabled
+ for (i=0; i < a.length; i++) {
+ el = $(form[a[i].name]);
+ el.prop('disabled', false);
+ }
+ } else {
+ for (i=0; i < a.length; i++) {
+ el = $(form[a[i].name]);
+ el.removeAttr('disabled');
+ }
+ };
+ }
+
+ if ($(':input[name=submit],:input[id=submit]', form).length) {
+ // if there is an input with a name or id of 'submit' then we won't be
+ // able to invoke the submit fn on the form (at least not x-browser)
+ alert('Error: Form elements must not have name or id of "submit".');
+ return;
+ }
+
+ s = $.extend(true, {}, $.ajaxSettings, options);
+ s.context = s.context || s;
+ id = 'jqFormIO' + (new Date().getTime());
+ if (s.iframeTarget) {
+ $io = $(s.iframeTarget);
+ n = $io.attr('name');
+ if (n == null)
+ $io.attr('name', id);
+ else
+ id = n;
+ }
+ else {
+ $io = $('<iframe name="' + id + '" src="'+ s.iframeSrc +'" />');
+ $io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });
+ }
+ io = $io[0];
+
+
+ xhr = { // mock object
+ aborted: 0,
+ responseText: null,
+ responseXML: null,
+ status: 0,
+ statusText: 'n/a',
+ getAllResponseHeaders: function() {},
+ getResponseHeader: function() {},
+ setRequestHeader: function() {},
+ abort: function(status) {
+ var e = (status === 'timeout' ? 'timeout' : 'aborted');
+ log('aborting upload... ' + e);
+ this.aborted = 1;
+ $io.attr('src', s.iframeSrc); // abort op in progress
+ xhr.error = e;
+ s.error && s.error.call(s.context, xhr, e, status);
+ g && $.event.trigger("ajaxError", [xhr, s, e]);
+ s.complete && s.complete.call(s.context, xhr, e);
+ }
+ };
+
+ g = s.global;
+ // trigger ajax global events so that activity/block indicators work like normal
+ if (g && ! $.active++) {
+ $.event.trigger("ajaxStart");
+ }
+ if (g) {
+ $.event.trigger("ajaxSend", [xhr, s]);
+ }
+
+ if (s.beforeSend && s.beforeSend.call(s.context, xhr, s) === false) {
+ if (s.global) {
+ $.active--;
+ }
+ return;
+ }
+ if (xhr.aborted) {
+ return;
+ }
+
+ // add submitting element to data if we know it
+ sub = form.clk;
+ if (sub) {
+ n = sub.name;
+ if (n && !sub.disabled) {
+ s.extraData = s.extraData || {};
+ s.extraData[n] = sub.value;
+ if (sub.type == "image") {
+ s.extraData[n+'.x'] = form.clk_x;
+ s.extraData[n+'.y'] = form.clk_y;
+ }
+ }
+ }
+
+ var CLIENT_TIMEOUT_ABORT = 1;
+ var SERVER_ABORT = 2;
+
+ function getDoc(frame) {
+ var doc = frame.contentWindow ? frame.contentWindow.document : frame.contentDocument ? frame.contentDocument : frame.document;
+ return doc;
+ }
+
+ // Rails CSRF hack (thanks to Yvan Barthelemy)
+ var csrf_token = $('meta[name=csrf-token]').attr('content');
+ var csrf_param = $('meta[name=csrf-param]').attr('content');
+ if (csrf_param && csrf_token) {
+ s.extraData = s.extraData || {};
+ s.extraData[csrf_param] = csrf_token;
+ }
+
+ // take a breath so that pending repaints get some cpu time before the upload starts
+ function doSubmit() {
+ // make sure form attrs are set
+ var t = $form.attr('target'), a = $form.attr('action');
+
+ // update form attrs in IE friendly way
+ form.setAttribute('target',id);
+ if (!method) {
+ form.setAttribute('method', 'POST');
+ }
+ if (a != s.url) {
+ form.setAttribute('action', s.url);
+ }
+
+ // ie borks in some cases when setting encoding
+ if (! s.skipEncodingOverride && (!method || /post/i.test(method))) {
+ $form.attr({
+ encoding: 'multipart/form-data',
+ enctype: 'multipart/form-data'
+ });
+ }
+
+ // support timout
+ if (s.timeout) {
+ timeoutHandle = setTimeout(function() { timedOut = true; cb(CLIENT_TIMEOUT_ABORT); }, s.timeout);
+ }
+
+ // look for server aborts
+ function checkState() {
+ try {
+ var state = getDoc(io).readyState;
+ log('state = ' + state);
+ if (state.toLowerCase() == 'uninitialized')
+ setTimeout(checkState,50);
+ }
+ catch(e) {
+ log('Server abort: ' , e, ' (', e.name, ')');
+ cb(SERVER_ABORT);
+ timeoutHandle && clearTimeout(timeoutHandle);
+ timeoutHandle = undefined;
+ }
+ }
+
+ // add "extra" data to form if provided in options
+ var extraInputs = [];
+ try {
+ if (s.extraData) {
+ for (var n in s.extraData) {
+ extraInputs.push(
+ $('<input type="hidden" name="'+n+'">').attr('value',s.extraData[n])
+ .appendTo(form)[0]);
+ }
+ }
+
+ if (!s.iframeTarget) {
+ // add iframe to doc and submit the form
+ $io.appendTo('body');
+ io.attachEvent ? io.attachEvent('onload', cb) : io.addEventListener('load', cb, false);
+ }
+ setTimeout(checkState,15);
+ form.submit();
+ }
+ finally {
+ // reset attrs and remove "extra" input elements
+ form.setAttribute('action',a);
+ if(t) {
+ form.setAttribute('target', t);
+ } else {
+ $form.removeAttr('target');
+ }
+ $(extraInputs).remove();
+ }
+ }
+
+ if (s.forceSync) {
+ doSubmit();
+ }
+ else {
+ setTimeout(doSubmit, 10); // this lets dom updates render
+ }
+
+ var data, doc, domCheckCount = 50, callbackProcessed;
+
+ function cb(e) {
+ if (xhr.aborted || callbackProcessed) {
+ return;
+ }
+ try {
+ doc = getDoc(io);
+ }
+ catch(ex) {
+ log('cannot access response document: ', ex);
+ e = SERVER_ABORT;
+ }
+ if (e === CLIENT_TIMEOUT_ABORT && xhr) {
+ xhr.abort('timeout');
+ return;
+ }
+ else if (e == SERVER_ABORT && xhr) {
+ xhr.abort('server abort');
+ return;
+ }
+
+ if (!doc || doc.location.href == s.iframeSrc) {
+ // response not received yet
+ if (!timedOut)
+ return;
+ }
+ io.detachEvent ? io.detachEvent('onload', cb) : io.removeEventListener('load', cb, false);
+
+ var status = 'success', errMsg;
+ try {
+ if (timedOut) {
+ throw 'timeout';
+ }
+
+ var isXml = s.dataType == 'xml' || doc.XMLDocument || $.isXMLDoc(doc);
+ log('isXml='+isXml);
+ if (!isXml && window.opera && (doc.body == null || doc.body.innerHTML == '')) {
+ if (--domCheckCount) {
+ // in some browsers (Opera) the iframe DOM is not always traversable when
+ // the onload callback fires, so we loop a bit to accommodate
+ log('requeing onLoad callback, DOM not available');
+ setTimeout(cb, 250);
+ return;
+ }
+ // let this fall through because server response could be an empty document
+ //log('Could not access iframe DOM after mutiple tries.');
+ //throw 'DOMException: not available';
+ }
+
+ //log('response detected');
+ var docRoot = doc.body ? doc.body : doc.documentElement;
+ xhr.responseText = docRoot ? docRoot.innerHTML : null;
+ xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
+ if (isXml)
+ s.dataType = 'xml';
+ xhr.getResponseHeader = function(header){
+ var headers = {'content-type': s.dataType};
+ return headers[header];
+ };
+ // support for XHR 'status' & 'statusText' emulation :
+ if (docRoot) {
+ xhr.status = Number( docRoot.getAttribute('status') ) || xhr.status;
+ xhr.statusText = docRoot.getAttribute('statusText') || xhr.statusText;
+ }
+
+ var dt = (s.dataType || '').toLowerCase();
+ var scr = /(json|script|text)/.test(dt);
+ if (scr || s.textarea) {
+ // see if user embedded response in textarea
+ var ta = doc.getElementsByTagName('textarea')[0];
+ if (ta) {
+ xhr.responseText = ta.value;
+ // support for XHR 'status' & 'statusText' emulation :
+ xhr.status = Number( ta.getAttribute('status') ) || xhr.status;
+ xhr.statusText = ta.getAttribute('statusText') || xhr.statusText;
+ }
+ else if (scr) {
+ // account for browsers injecting pre around json response
+ var pre = doc.getElementsByTagName('pre')[0];
+ var b = doc.getElementsByTagName('body')[0];
+ if (pre) {
+ xhr.responseText = pre.textContent ? pre.textContent : pre.innerText;
+ }
+ else if (b) {
+ xhr.responseText = b.textContent ? b.textContent : b.innerText;
+ }
+ }
+ }
+ else if (dt == 'xml' && !xhr.responseXML && xhr.responseText != null) {
+ xhr.responseXML = toXml(xhr.responseText);
+ }
+
+ try {
+ data = httpData(xhr, dt, s);
+ }
+ catch (e) {
+ status = 'parsererror';
+ xhr.error = errMsg = (e || status);
+ }
+ }
+ catch (e) {
+ log('error caught: ',e);
+ status = 'error';
+ xhr.error = errMsg = (e || status);
+ }
+
+ if (xhr.aborted) {
+ log('upload aborted');
+ status = null;
+ }
+
+ if (xhr.status) { // we've set xhr.status
+ status = (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) ? 'success' : 'error';
+ }
+
+ // ordering of these callbacks/triggers is odd, but that's how $.ajax does it
+ if (status === 'success') {
+ s.success && s.success.call(s.context, data, 'success', xhr);
+ g && $.event.trigger("ajaxSuccess", [xhr, s]);
+ }
+ else if (status) {
+ if (errMsg == undefined)
+ errMsg = xhr.statusText;
+ s.error && s.error.call(s.context, xhr, status, errMsg);
+ g && $.event.trigger("ajaxError", [xhr, s, errMsg]);
+ }
+
+ g && $.event.trigger("ajaxComplete", [xhr, s]);
+
+ if (g && ! --$.active) {
+ $.event.trigger("ajaxStop");
+ }
+
+ s.complete && s.complete.call(s.context, xhr, status);
+
+ callbackProcessed = true;
+ if (s.timeout)
+ clearTimeout(timeoutHandle);
+
+ // clean up
+ setTimeout(function() {
+ if (!s.iframeTarget)
+ $io.remove();
+ xhr.responseXML = null;
+ }, 100);
+ }
+
+ var toXml = $.parseXML || function(s, doc) { // use parseXML if available (jQuery 1.5+)
+ if (window.ActiveXObject) {
+ doc = new ActiveXObject('Microsoft.XMLDOM');
+ doc.async = 'false';
+ doc.loadXML(s);
+ }
+ else {
+ doc = (new DOMParser()).parseFromString(s, 'text/xml');
+ }
+ return (doc && doc.documentElement && doc.documentElement.nodeName != 'parsererror') ? doc : null;
+ };
+ var parseJSON = $.parseJSON || function(s) {
+ return window['eval']('(' + s + ')');
+ };
+
+ var httpData = function( xhr, type, s ) { // mostly lifted from jq1.4.4
+
+ var ct = xhr.getResponseHeader('content-type') || '',
+ xml = type === 'xml' || !type && ct.indexOf('xml') >= 0,
+ data = xml ? xhr.responseXML : xhr.responseText;
+
+ if (xml && data.documentElement.nodeName === 'parsererror') {
+ $.error && $.error('parsererror');
+ }
+ if (s && s.dataFilter) {
+ data = s.dataFilter(data, type);
+ }
+ if (typeof data === 'string') {
+ if (type === 'json' || !type && ct.indexOf('json') >= 0) {
+ data = parseJSON(data);
+ } else if (type === "script" || !type && ct.indexOf("javascript") >= 0) {
+ $.globalEval(data);
+ }
+ }
+ return data;
+ };
+ }
+};
+
+/**
+ * ajaxForm() provides a mechanism for fully automating form submission.
+ *
+ * The advantages of using this method instead of ajaxSubmit() are:
+ *
+ * 1: This method will include coordinates for <input type="image" /> elements (if the element
+ * is used to submit the form).
+ * 2. This method will include the submit element's name/value data (for the element that was
+ * used to submit the form).
+ * 3. This method binds the submit() method to the form for you.
+ *
+ * The options argument for ajaxForm works exactly as it does for ajaxSubmit. ajaxForm merely
+ * passes the options argument along after properly binding events for submit elements and
+ * the form itself.
+ */
+$.fn.ajaxForm = function(options) {
+ // in jQuery 1.3+ we can fix mistakes with the ready state
+ if (this.length === 0) {
+ var o = { s: this.selector, c: this.context };
+ if (!$.isReady && o.s) {
+ log('DOM not ready, queuing ajaxForm');
+ $(function() {
+ $(o.s,o.c).ajaxForm(options);
+ });
+ return this;
+ }
+ // is your DOM ready? http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
+ log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)'));
+ return this;
+ }
+
+ return this.ajaxFormUnbind().bind('submit.form-plugin', function(e) {
+ if (!e.isDefaultPrevented()) { // if event has been canceled, don't proceed
+ e.preventDefault();
+ $(this).ajaxSubmit(options);
+ }
+ }).bind('click.form-plugin', function(e) {
+ var target = e.target;
+ var $el = $(target);
+ if (!($el.is(":submit,input:image"))) {
+ // is this a child element of the submit el? (ex: a span within a button)
+ var t = $el.closest(':submit');
+ if (t.length == 0) {
+ return;
+ }
+ target = t[0];
+ }
+ var form = this;
+ form.clk = target;
+ if (target.type == 'image') {
+ if (e.offsetX != undefined) {
+ form.clk_x = e.offsetX;
+ form.clk_y = e.offsetY;
+ } else if (typeof $.fn.offset == 'function') { // try to use dimensions plugin
+ var offset = $el.offset();
+ form.clk_x = e.pageX - offset.left;
+ form.clk_y = e.pageY - offset.top;
+ } else {
+ form.clk_x = e.pageX - target.offsetLeft;
+ form.clk_y = e.pageY - target.offsetTop;
+ }
+ }
+ // clear form vars
+ setTimeout(function() { form.clk = form.clk_x = form.clk_y = null; }, 100);
+ });
+};
+
+// ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm
+$.fn.ajaxFormUnbind = function() {
+ return this.unbind('submit.form-plugin click.form-plugin');
+};
+
+/**
+ * formToArray() gathers form element data into an array of objects that can
+ * be passed to any of the following ajax functions: $.get, $.post, or load.
+ * Each object in the array has both a 'name' and 'value' property. An example of
+ * an array for a simple login form might be:
+ *
+ * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
+ *
+ * It is this array that is passed to pre-submit callback functions provided to the
+ * ajaxSubmit() and ajaxForm() methods.
+ */
+$.fn.formToArray = function(semantic) {
+ var a = [];
+ if (this.length === 0) {
+ return a;
+ }
+
+ var form = this[0];
+ var els = semantic ? form.getElementsByTagName('*') : form.elements;
+ if (!els) {
+ return a;
+ }
+
+ var i,j,n,v,el,max,jmax;
+ for(i=0, max=els.length; i < max; i++) {
+ el = els[i];
+ n = el.name;
+ if (!n) {
+ continue;
+ }
+
+ if (semantic && form.clk && el.type == "image") {
+ // handle image inputs on the fly when semantic == true
+ if(!el.disabled && form.clk == el) {
+ a.push({name: n, value: $(el).val(), type: el.type });
+ a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
+ }
+ continue;
+ }
+
+ v = $.fieldValue(el, true);
+ if (v && v.constructor == Array) {
+ for(j=0, jmax=v.length; j < jmax; j++) {
+ a.push({name: n, value: v[j]});
+ }
+ }
+ else if (v !== null && typeof v != 'undefined') {
+ a.push({name: n, value: v, type: el.type});
+ }
+ }
+
+ if (!semantic && form.clk) {
+ // input type=='image' are not found in elements array! handle it here
+ var $input = $(form.clk), input = $input[0];
+ n = input.name;
+ if (n && !input.disabled && input.type == 'image') {
+ a.push({name: n, value: $input.val()});
+ a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
+ }
+ }
+ return a;
+};
+
+/**
+ * Serializes form data into a 'submittable' string. This method will return a string
+ * in the format: name1=value1&name2=value2
+ */
+$.fn.formSerialize = function(semantic) {
+ //hand off to jQuery.param for proper encoding
+ return $.param(this.formToArray(semantic));
+};
+
+/**
+ * Serializes all field elements in the jQuery object into a query string.
+ * This method will return a string in the format: name1=value1&name2=value2
+ */
+$.fn.fieldSerialize = function(successful) {
+ var a = [];
+ this.each(function() {
+ var n = this.name;
+ if (!n) {
+ return;
+ }
+ var v = $.fieldValue(this, successful);
+ if (v && v.constructor == Array) {
+ for (var i=0,max=v.length; i < max; i++) {
+ a.push({name: n, value: v[i]});
+ }
+ }
+ else if (v !== null && typeof v != 'undefined') {
+ a.push({name: this.name, value: v});
+ }
+ });
+ //hand off to jQuery.param for proper encoding
+ return $.param(a);
+};
+
+/**
+ * Returns the value(s) of the element in the matched set. For example, consider the following form:
+ *
+ * <form><fieldset>
+ * <input name="A" type="text" />
+ * <input name="A" type="text" />
+ * <input name="B" type="checkbox" value="B1" />
+ * <input name="B" type="checkbox" value="B2"/>
+ * <input name="C" type="radio" value="C1" />
+ * <input name="C" type="radio" value="C2" />
+ * </fieldset></form>
+ *
+ * var v = $(':text').fieldValue();
+ * // if no values are entered into the text inputs
+ * v == ['','']
+ * // if values entered into the text inputs are 'foo' and 'bar'
+ * v == ['foo','bar']
+ *
+ * var v = $(':checkbox').fieldValue();
+ * // if neither checkbox is checked
+ * v === undefined
+ * // if both checkboxes are checked
+ * v == ['B1', 'B2']
+ *
+ * var v = $(':radio').fieldValue();
+ * // if neither radio is checked
+ * v === undefined
+ * // if first radio is checked
+ * v == ['C1']
+ *
+ * The successful argument controls whether or not the field element must be 'successful'
+ * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
+ * The default value of the successful argument is true. If this value is false the value(s)
+ * for each element is returned.
+ *
+ * Note: This method *always* returns an array. If no valid value can be determined the
+ * array will be empty, otherwise it will contain one or more values.
+ */
+$.fn.fieldValue = function(successful) {
+ for (var val=[], i=0, max=this.length; i < max; i++) {
+ var el = this[i];
+ var v = $.fieldValue(el, successful);
+ if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length)) {
+ continue;
+ }
+ v.constructor == Array ? $.merge(val, v) : val.push(v);
+ }
+ return val;
+};
+
+/**
+ * Returns the value of the field element.
+ */
+$.fieldValue = function(el, successful) {
+ var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
+ if (successful === undefined) {
+ successful = true;
+ }
+
+ if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
+ (t == 'checkbox' || t == 'radio') && !el.checked ||
+ (t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
+ tag == 'select' && el.selectedIndex == -1)) {
+ return null;
+ }
+
+ if (tag == 'select') {
+ var index = el.selectedIndex;
+ if (index < 0) {
+ return null;
+ }
+ var a = [], ops = el.options;
+ var one = (t == 'select-one');
+ var max = (one ? index+1 : ops.length);
+ for(var i=(one ? index : 0); i < max; i++) {
+ var op = ops[i];
+ if (op.selected) {
+ var v = op.value;
+ if (!v) { // extra pain for IE...
+ v = (op.attributes && op.attributes['value'] && !(op.attributes['value'].specified)) ? op.text : op.value;
+ }
+ if (one) {
+ return v;
+ }
+ a.push(v);
+ }
+ }
+ return a;
+ }
+ return $(el).val();
+};
+
+/**
+ * Clears the form data. Takes the following actions on the form's input fields:
+ * - input text fields will have their 'value' property set to the empty string
+ * - select elements will have their 'selectedIndex' property set to -1
+ * - checkbox and radio inputs will have their 'checked' property set to false
+ * - inputs of type submit, button, reset, and hidden will *not* be effected
+ * - button elements will *not* be effected
+ */
+$.fn.clearForm = function(includeHidden) {
+ return this.each(function() {
+ $('input,select,textarea', this).clearFields(includeHidden);
+ });
+};
+
+/**
+ * Clears the selected form elements.
+ */
+$.fn.clearFields = $.fn.clearInputs = function(includeHidden) {
+ var re = /^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i; // 'hidden' is not in this list
+ return this.each(function() {
+ var t = this.type, tag = this.tagName.toLowerCase();
+ if (re.test(t) || tag == 'textarea' || (includeHidden && /hidden/.test(t)) ) {
+ this.value = '';
+ }
+ else if (t == 'checkbox' || t == 'radio') {
+ this.checked = false;
+ }
+ else if (tag == 'select') {
+ this.selectedIndex = -1;
+ }
+ });
+};
+
+/**
+ * Resets the form data. Causes all form elements to be reset to their original value.
+ */
+$.fn.resetForm = function() {
+ return this.each(function() {
+ // guard against an input with the name of 'reset'
+ // note that IE reports the reset function as an 'object'
+ if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType)) {
+ this.reset();
+ }
+ });
+};
+
+/**
+ * Enables or disables any matching elements.
+ */
+$.fn.enable = function(b) {
+ if (b === undefined) {
+ b = true;
+ }
+ return this.each(function() {
+ this.disabled = !b;
+ });
+};
+
+/**
+ * Checks/unchecks any matching checkboxes or radio buttons and
+ * selects/deselects and matching option elements.
+ */
+$.fn.selected = function(select) {
+ if (select === undefined) {
+ select = true;
+ }
+ return this.each(function() {
+ var t = this.type;
+ if (t == 'checkbox' || t == 'radio') {
+ this.checked = select;
+ }
+ else if (this.tagName.toLowerCase() == 'option') {
+ var $sel = $(this).parent('select');
+ if (select && $sel[0] && $sel[0].type == 'select-one') {
+ // deselect all other options
+ $sel.find('option').selected(false);
+ }
+ this.selected = select;
+ }
+ });
+};
+
+// expose debug var
+$.fn.ajaxSubmit.debug = false;
+
+// helper fn for console logging
+function log() {
+ if (!$.fn.ajaxSubmit.debug)
+ return;
+ var msg = '[jquery.form] ' + Array.prototype.join.call(arguments,'');
+ if (window.console && window.console.log) {
+ window.console.log(msg);
+ }
+ else if (window.opera && window.opera.postError) {
+ window.opera.postError(msg);
+ }
+};
+
+})(jQuery);
// - certains navigateurs memorisent le hash au lieu du pass ...
// on cree un input hidden a cote, on lui met le name="password"
// et on vide le champ visible
- inputpass.after('<input name="password" type="hidden" value="'+pass+'" />');
+ inputpass.after('<input name="password" type="hidden" value="" />').attr('value',pass);
inputpass.attr('name','nothing').attr('value','');
calcule_hash_pass(pass);
}
/*
* multilang
*
- * Copyright (c) 2006-2010 Renato Formato (rformato@gmail.com)
+ * Copyright (c) 2006-2014 Renato Formato (rformato@gmail.com)
* Licensed under the GPL License:
* http://www.gnu.org/licenses/gpl.html
*
style='[(#ENV{align}|match{^(left|right)$}|?{' '})float:#ENV{align};] (#ENV{align,center}|=={center}|?{'',' '})[width:(#ENV{largeur}|max{120})px]']>
<object data='#URL_DOCUMENT'
type='#MIME_TYPE'
- width='#ENV{largeur, #LARGEUR}'
- height='#ENV{hauteur, #HAUTEUR}' >
+ width='#ENV{largeur, 150}'
+ height='#ENV{hauteur, 20}' >
<param name='src' value='#URL_DOCUMENT' />
[(#ID_DOCUMENT|appliquer_filtre{#MIME_TYPE})]
[(#ENV*|env_to_params)]
]
#SET{i,#ENV{page_courante}|plus{1}}
-[(#GET{i}|<{#ENV{nombre_pages}}|?{' ',''})[
+[(#GET{i}|<={#ENV{nombre_pages}}|?{' ',''})[
(#SET{item, #GET{i}|moins{1}|mult{#ENV{pas}} })
][#GET*{separateur} (#INCLURE{fond=modeles/paginationitem}{num=#GET{i}}{texte='>'}{separateur=''}{url=#ENV{url}|parametre_url{#ENV{debut},#GET{item}}|ancre_url{#ENV{ancre}}}{page_courante=#ENV{page_courante}}{derniere=#ENV{derniere}})]
]
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/* Les boutons d'admin survolent la page (sauf # FORMULAIRE_ADMIN) */
.spip-admin-bloc,
-.spip-admin-float { z-index: 100; position: fixed; right: 1%; top: 0; white-space: nowrap; }
+.spip-admin-float { z-index: 100; position: fixed; right: 20%; top: 0; white-space: nowrap; }
/* Couleurs et design des boutons d'admin */
.spip-admin-boutons { margin: 0; padding: .4em 1em; background: #666; border: 0; font-weight: bold;
.liste-plugins .liste-items .item .icon {position:absolute;top:3px;#GET{left}:34px;width:32px;height:32px;overflow:hidden;}
.liste-plugins .liste-items .item .actions {float:#GET{right};visibility:hidden;}
.liste-plugins .liste-items .item:hover .actions {visibility:visible;}
-.liste-plugins .liste-items .item .cfg_link { position:absolute; right:4px; top:4px; }
+.liste-plugins .liste-items .item .cfg_link { position:absolute; #GET{right}:4px; top:4px; }
.liste-plugins .liste-items .item .details .desc {padding:5px 0 2px;}
.liste-plugins .liste-items .item .details .auteurs {font-style:italic;padding-bottom:5px;display:inline;}
if ([(#ID_AUTEUR|securiser_acces{#ENV{cle},transmettre,#ENV{op}, #ENV{args}}|?{1,0})]) {
?><BOUCLE2(ARTICLES){id_article}><B1>#TOTAL_BOUCLE <:info_signatures:> <:info_pour:> #TITRE;
<:nom:>;<:email:>
-<BOUCLE1(SIGNATURES){id_article}{par nom_email}>#NOM_EMAIL;#AD_EMAIL
+<BOUCLE1(SIGNATURES){id_article}{par nom_email}>[(#NOM_EMAIL
+|filtrer_entites|replace{';',','})];[(#AD_EMAIL
+|filtrer_entites|replace{';',','})];[(#NOM_SITE
+|filtrer_entites|replace{';',','})];[(#URL_SITE
+|filtrer_entites|replace{';',','})];
</BOUCLE1></BOUCLE2>
<?php
} else {
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
else
$valeurs['_commentaire'] = _T('pass_forum_bla');
- if (!tester_config($id, $mode))
+ include_spip('inc/autoriser');
+ if (!autoriser('inscrireauteur', $mode, $id))
$valeurs['editable'] = false;
return $valeurs;
function formulaires_inscription_verifier_dist($mode, $focus, $id=0) {
$erreurs = array();
- include_spip('inc/filtres');
- if (!tester_config($id, $mode) OR (strlen(_request('nobot'))>0))
+ include_spip('inc/filtres');
+ include_spip('inc/autoriser');
+ if (!autoriser('inscrireauteur', $mode, $id) OR (strlen(_request('nobot'))>0))
$erreurs['message_erreur'] = _T('rien_a_faire_ici');
if (!$nom = _request('nom_inscription'))
$erreurs['nom_inscription'] = _T("info_obligatoire");
+ elseif (!nom_acceptable(_request('nom_inscription')))
+ $erreurs['nom_inscription'] = _T("ecrire:info_nom_pas_conforme");
if (!$mail = _request('mail_inscription'))
$erreurs['mail_inscription'] = _T("info_obligatoire");
if (!$envoyer_mail($mail_complet, $sujet, $msg, $from, $head))
$desc = _T('form_forum_probleme_mail');
// Notifications
- if ($notifications = charger_fonction('notifications', 'inc')) {
+ if (is_array($desc) and $notifications = charger_fonction('notifications', 'inc')) {
$notifications('inscription', $desc['id_auteur'],
array('nom' => $desc['nom'], 'email' => $desc['email'])
);
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
$login = $row['login'];
$message = "<b>" . _T('pass_nouveau_enregistre') . "</b>".
- "<p>" . _T('pass_rappel_login', array('login' => $login));
+ "<br />" . _T('pass_rappel_login', array('login' => $login));
}
return array('message_ok'=>$message);
}
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
}
function formulaires_signature_traiter_dist($id_article, $petition, $texte, $site_obli, $message) {
- $reponse = _T('form_pet_probleme_technique');
+
include_spip('base/abstract_sql');
if (spip_connect()) {
$controler_signature = charger_fonction('controler_signature', 'inc');
_request('session_nom'), _request('session_email'),
_request('message'), _request('signature_nom_site'),
_request('signature_url_site'), _request('url_page'));
- }
+ } else $reponse = _T('form_pet_probleme_technique');
return array('message_ok'=>$reponse);
}
_T('form_pet_signature_validee');
}
-
//
// Cas normal : envoi d'une demande de confirmation
//
- $row = sql_fetsel('titre,lang', 'spip_articles', "id_article=$id_article");
- $lang = lang_select($row['lang']);
- $titre = textebrut(typo($row['titre']));
- if ($lang) lang_select();
+
+ list($titre, $url_page) = signature_langue($id_article, $url_page);
if (!strlen($statut))
$statut = signature_test_pass();
+ list($sujet, $corps) = signature_demande_confirmation($id_article, $url_page, $nom, $site, $url, $msg, $titre, $statut);
+
+ $envoyer_mail = charger_fonction('envoyer_mail','inc');
+ if ($envoyer_mail($mail, $sujet, $corps))
+ return _T('form_pet_envoi_mail_confirmation',array('email'=>$mail));
+ return false; # erreur d'envoi de l'email
+}
+
+function signature_langue($id_article, $url_page)
+{
+ $row = sql_fetsel('titre,lang', 'spip_articles', "id_article=$id_article");
+ $lang = lang_select($row['lang']);
+ $titre = textebrut(typo($row['titre']));
+
+ if ($lang) lang_select();
if ($lang != $GLOBALS['meta']['langue_site'])
$url_page = parametre_url($url_page, "lang", $lang,'&');
+ return array($titre, $url_page);
+}
+
+function signature_demande_confirmation($id_article, $url_page, $nom, $site, $url, $msg, $titre, $statut)
+{
$url_page = parametre_url($url_page, 'var_confirm', $statut, '&')
. "#sp$id_article";
- $r = _T('form_pet_mail_confirmation',
- array('titre' => $titre,
- 'nom_email' => $nom,
- 'nom_site' => $site,
- 'url_site' => $url,
- 'url' => $url_page,
- 'message' => $msg));
-
- $titre = _T('form_pet_confirmation')." ". $titre;
- $envoyer_mail = charger_fonction('envoyer_mail','inc');
- if ($envoyer_mail($mail,$titre, $r))
- return _T('form_pet_envoi_mail_confirmation',array('email'=>$mail));
-
- return false; # erreur d'envoi de l'email
+ return array(_T('form_pet_confirmation')." ". $titre,
+ _T('form_pet_mail_confirmation',
+ array('titre' => $titre,
+ 'nom_email' => $nom,
+ 'nom_site' => $site,
+ 'url_site' => $url,
+ 'url' => $url_page,
+ 'message' => $msg)));
}
// Pour eviter le recours a un verrou (qui bloque l'acces a la base),
// (mail ou site). S'il y en a plus qu'une on les retire sauf la premiere
// En cas d'acces concurrents il y aura des requetes de retraits d'elements
// deja detruits. Bizarre ? C'est mieux que de bloquer!
+// De plus, ca supprime les doublons "en attente de validation".
// http://doc.spip.org/@signature_entrop
function signature_entrop($where)
{
- $where .= " AND statut='publie'";
- $query = sql_select('id_signature', 'spip_signatures', $where,'',"date_time desc");
- $n = sql_count($query);
- if ($n>1) {
- $entrop = array();
- for ($i=$n-1;$i;$i--) {
- $r = sql_fetch($query);
- $entrop[]=$r['id_signature'];
- }
- sql_free($query);
- $where .= " OR " . sql_in('id_signature', $entrop);
-
- sql_delete('spip_signatures', $where);
+ $query = sql_select('id_signature, statut', 'spip_signatures', $where,'',"date_time desc");
+ $entrop = array();
+ $id_ok = 0;
+ $double = false;
+ while($r = sql_fetch($query)) {
+ if (!$id_ok AND $r['statut'] == 'publie')
+ $id_ok = $r['id_signature'];
+ else {
+ $double |= ($r['statut'] == 'publie');
+ $entrop[]= $r['id_signature'];
+ }
}
-
- return $entrop;
+ if (!$entrop) return false;
+ spip_log("signature $id_ok confirmee, suppression des doublons " . join(' ', $entrop));
+ sql_delete('spip_signatures', sql_in('id_signature', $entrop));
+ return $double;
}
// Creer un mot de passe aleatoire et verifier qu'il est unique
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2011 *
+ * Copyright (c) 2001-2014 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
ce qui permet une syndication plus riche (mais plus "lourde").
Fonction desactivable depuis les reglages du site.
][
-(#CONFIG{syndication_integrale}|=={oui}|?{' ',''})<content:encoded>[(#LOGO_ARTICLE|right||image_reduire{150,150}|texte_backend)
+(#CONFIG{syndication_integrale}|=={oui}|?{' ',''})<content:encoded>[(#LOGO_ARTICLE{right}|image_reduire{150,150}|texte_backend)
][<div class='rss_chapo'>(#CHAPO|texte_backend)</div>
][<div class='rss_texte'>(#TEXTE|
image_reduire{500,0}|texte_backend)</div>
<svn_revision>
<text_version>
-Origine: svn://trac.rezo.net/spip/tags/spip-2.1.12
-Revision: 18732
-Dernier commit: 2011-11-16 18:00:51 +0100
+Origine: svn://trac.rezo.net/spip/tags/spip-2.1.25
+Revision: 21141
+Dernier commit: 2014-01-19 17:54:19 +0100
</text_version>
-<origine>svn://trac.rezo.net/spip/tags/spip-2.1.12</origine>
-<revision>18732</revision>
-<commit>2011-11-16 18:00:51 +0100 </commit>
+<origine>svn://trac.rezo.net/spip/tags/spip-2.1.25</origine>
+<revision>21141</revision>
+<commit>2014-01-19 17:54:19 +0100 </commit>
</svn_revision>
\ No newline at end of file