+
+SPIP-Core spip-3.0.20 -> spip-3.0.21 31 octobre 2015
+-------------------------------------------------------------
+
+r22267 | cedric | (mer. 24 juin 2015) | Quand la source image est dans IMG/ et contient une query-string complexe et que le fichier existe sans la query-string, on l'ignore. Repare le traitement des images qui ont une URL restreinte basee sur la query-string+htaccess
+r22282 | fil | (lun. 29 juin 2015) | report de #22281 (https://core.spip.net/issues/3456)
+r22315 | cedric | (lun. 20 juil. 2015) | Reparer la desinstallation des plugins dans _DIR_PLUGINS_SUPPL
+r22326 | cedric | (ven. 24 juil. 2015) | Report de r22325 : Fix #3504 : purge des autosave cvt en session
+r22327 | cedric | (ven. 24 juil. 2015) | Report de r21817 : 0 est une valeur acceptable pour un champ obligatoire (Frederic, Pierretux)
+r22342 | cedric | (sam. 25 juil. 2015) | Fix #3510 : parametre_url sur les arguments de type tableau. On backporte la version du trunk 3.1 sur laquelle le bug a ete corrige
+r22344 | cedric | (dim. 26 juil. 2015) | Report de r22343 : Fix #3494 : quand la date de redaction anterieure est utilisee, il faut pouvoir l'editer sur un article en cours de redaction, comme avant, mais sans permettre l'edition de la date.On robustifie traiter() en verifiant le droit a edition qui a ete calcule dans charger() avant de prendre en compte les request, ce qui evite tout risque de manipulation du form et d'injection d'input en html+ Report de r22338 au passage
+r22362 | kent1 | (mar. 28 juil. 2015) | Récupérer le title et le hreflang du lien entourant un modèle cf #3516
+r22384 | kent1 | (mer. 12 août 2015) | Gros bug sur r22282 (cf #3456)Le passage en liens absolus se faisait uniquement sur le premier href ou src, remplaçant le premier href ou src par le dernier href / src présent dans le texte...On ne remplaçait plus lien par lien
+r22392 | erational | (mar. 25 août 2015) | report de c22360
+r22393 | erational | (mar. 25 août 2015) | arménien en code HTML
+r22402 | rasta | (jeu. 03 sept. 2015) | RAH. On corrige enfin ce fichu gros bug du compilateur qui faisait qu'on ne pouvait pas avoir un critère conditionnel ET plusieurs arguments.Ça marchait pour les critères sans arguments ou avec un seul argument.La raison ? Non-factorisation et doublonnage de code : actuellement, les critères mêmes persos (pas juste les trucs SQL) qui ont 0 ou 1 arguments, ne passent PAS par le même code que ceux avec 2 ou plus. Alors qu'ensuite le traitement et la regex associée sont quasiment les mêmes… mais pas tout à fait, puisque dans le cas 2 ou plus ça ne cherchait pas le "?".Pour l'instant on corrige juste le bug, mais il faudrait nettoyer le code et factoriser pour ne plus générer d'erreur de ce genre…Au passage, pour SPIP 3.0, on backport la correction du "_" manquant qui faisait, là aussi qu'avec 2 arguments ou plus, on avait pas le droit d'avoir des critères avec_plusieurs_mots, alors qu'on peut avec 0 ou 1 argument. Même raison : code fait deux fois différemment, dont la regex.
+r22434 | erational | (ven. 16 oct. 2015) | pas d'accent sur Kreyòl (Peyi Dayiti)
+r22436 | cedric | (lun. 19 oct. 2015) | On ajoute l'heure de publication au survol de la date, cela est utile pour faire de la programmation intensive d'article a l'avance
+r22442 | cedric | (mar. 27 oct. 2015) | Report de r22441 : r17234 a introduit un include_spip() au debut de base/connect_sql.php, ce qui etait une erreur car ce fichier est inclus par inc_version avant toute initialisation du core et chargement des caches.Du coup chaque hit provoquait une invalidation du chemin car find_in_path appele trop tot croyait que son find etait nouveau, donc le hit se finissait par une ecriture du fichier tmp/cache/chemin.txt.Comme ce fichier peut etre assez gros (>100ko) et ecrit en posant un verrou, cela impactait la performance par un debit d'ecriture sur le disque et des possibles attentes entre hit concourants.Bug repere par nicod en 3.0 et confirme par RealET en 3.1
+r22444 | cedric | (mar. 27 oct. 2015) | Report de r22443 : Complement a r22441 : ne pas lever le flag en cas de find_in_path appele trop tot si le fichier n'est pas trouve
+r22449 | cedric | (jeu. 29 oct. 2015) | Report de r22427 : #3371 Les squelettes de l'espace prive recoivent un flag espace_prive=1 a toute fin utile
+r22450 | cedric | (jeu. 29 oct. 2015) | Report de r22428 : Fix #3371 : dans la fonction typo, si un flag espace_prive=1 est present dans le env, on echappe tout html suspect, ie qui ne passe pas a travers safehtml sans censure. Pour limiter l'impact perfo on conditionne l'echappement a la presence des caracteres < et = dans le texte, c'est a dire une balise avec un attribut, ce qui ne traitera donc quasiment aucun contenu par defaut, sauf quelques rares <span lang='en'> ou autre curiosite de ce type
+r22451 | cedric | (jeu. 29 oct. 2015) | Report de r22429 : oups oubli dans r22428 : cas de typo appele en php depuis l'espace prive
+r22452 | b_b | (jeu. 29 oct. 2015) | report de r22346Fix #3430 : les boucles avec langue utilisaient lang_select_public() qui changeait sauvagement la langue en debut de boucle, sans la restaurer en fin de boucle, provoquant des bugs de contexteOn modifie la compulation des boucles : lang_select_public() appelle toujours lang_select(...) avec eventuellement la langue inchangee, et la boucle finit par un lang_select() qui depile et restaure la langue pour l'iteration suivante.
+
+SPIP-plugins-dist spip-3.0.20 -> spip-3.0.21 31 octobre 2015
+-------------------------------------------------------------
+
+r91143 | kent1 | (mar. 28 juil. 2015) | Récupérer le title et le hreflang du lien entourant un modèle cf #3516
+r91205 | cedric | (jeu. 30 juil. 2015) | bug lors d'une erreur a la creation d'un mot (confirmation sur un doublon par exexemple)
+r91206 | cedric | (jeu. 30 juil. 2015) | complement a r91205
+r91209 | cy_altern | (jeu. 30 juil. 2015) | report de 91148 (acces de google bot aux js et css)
+r91271 | cedric | (mer. 05 août 2015) | On ne verifie et alerte sur le doublon de titre de mot cle uniquement si c'est un nouveau mot cle ou si on retitre un mot cle existant, sinon c'est penible
+r91274 | cedric | (mer. 05 août 2015) | ne pas syndiquer un site en refuse
+r91290 | real3t | (ven. 07 août 2015) | Mise à jour pour la reconnaissance des moteurs de recherche. Reportable en 2.1.
+r91384 | real3t | (dim. 16 août 2015) | Un paramètre de plus reconnu pour Google
+r91608 | kent1 | (jeu. 03 sept. 2015) | Report de la fonctionnalité de z91607"Faire prendre en compte à la prévisu l'hypothétique dir="ltr" ou dir="rtl" sur le textarea"
+r91797 | marcimat | (sam. 12 sept. 2015) | Report de r91796 : Le pipeline "afficher_contenu_objet" n'était pas appelé pour l'affichage des groupes de mots sur la page exec=mots.
+r92079 | chankalan | (mar. 29 sept. 2015) | pour affichage des colonnes des visites, report de http://zone.spip.org/trac/spip-zone/changeset/91091/ et http://zone.spip.org/trac/spip-zone/changeset/91404/
+r92236 | cedric | (sam. 10 oct. 2015) | Report de r92235 : soyons un peu moins bisounours : les diff necessitent aussi un interdire_scripts comme tous les contenus affiches dans l'espace prive
+r92513 | b_b | (jeu. 29 oct. 2015) | Report de r92512 : éviter d'afficher le script d'autosave dans la prévisu d'un forum quand le site est en mode parano avec $filtrer_javascript = -1;Ref https://core.spip.net/issues/3413 merci Équipement
+r92523 | b_b | (jeu. 29 oct. 2015) | report de r92522 : éviter une erreur PHP Strict Standards: Only variables should be passed by reference (Eric Camus)Ref https://core.spip.net/issues/3373
+r92525 | b_b | (jeu. 29 oct. 2015) | version 0.80.27 : report de r92524fix installation d'un plugin qui nécessite un plugin du core sur un site neuf, https://core.spip.net/issues/3572À la fin de svp_ajouter_depot(), utiliser svp_actualiser_paquets_locaux(true) qui, comme son nom l'indique, actualise les paquets locaux puis supprime les paquets locaux avec l'option true.Merci marcimat :)
+r92568 | real3t | (sam. 31 oct. 2015) | Et report en 3.0
+r92576 | real3t | (sam. 31 oct. 2015) | Sur une suggestion de Franck, intégration de Haosou dont parle cet article.
+r92578 | Francky | (sam. 31 oct. 2015) | Il semble que sogou soit un moteur en chinehttp://www.journaldunet.com/solutions/expert/59882/haosoule-moteur-de-recherche-qui-pourrait-changer-le-monde-du-seo-chinois.shtml
+r92580 | Francky | (sam. 31 oct. 2015) | Rangement alphabétique
+
SPIP-Core spip-3.0.19 -> spip-3.0.20 23 juin 2015
-------------------------------------------------------------
r22106 | ben | (sam. 09 mai 2015) | 3.0.20 dev
if (defined('_DIR_PLUGINS_SUPPL') AND $dir_plugins==_DIR_PLUGINS_SUPPL)
$dir_type = "_DIR_PLUGINS_SUPPL";
$installer_plugins = charger_fonction('installer', 'plugins');
- $infos = $installer_plugins($plugin, 'uninstall');
+ $infos = $installer_plugins($plugin, 'uninstall',$dir_type);
if ($infos AND !$infos['install_test'][0]) {
include_spip('inc/plugin');
ecrire_plugin_actifs(array($plugin),false,'enleve');
\***************************************************************************/
if (!defined('_ECRIRE_INC_VERSION')) return;
-include_spip('base/objets');
+require_once _ROOT_RESTREINT . 'base/objets.php';
//
// Utilitaires indispensables autour des serveurs SQL
if ($cle_autosave = _request('autosave')){
include_spip('inc/session');
session_set('session_autosave_'.$cle_autosave, null);
+ }
+ if (isset($GLOBALS['visiteur_session']) AND $GLOBALS['visiteur_session']){
// delai par defaut avant purge d'un backup de form : 72H
if (!defined('_AUTOSAVE_GB_DELAY')) define('_AUTOSAVE_GB_DELAY',72*3600);
$time_too_old = time() - _AUTOSAVE_GB_DELAY;
}
}
}
+
return $flux;
}
}
}
foreach($oblis as $obli) {
- if (!_request($obli)) {
+ $value = _request($obli);
+ if (is_null($value) OR !(is_array($value)?count($value):strlen($value))) {
if (!isset($erreurs[$obli])) { $erreurs[$obli] = ''; }
$erreurs[$obli] .= _T("info_obligatoire");
}
} else {
// enlever le timestamp eventuel
$source=preg_replace(',[?][0-9]+$,','',$source);
+ if (strpos($source,"?")!==false
+ AND strncmp($source,_DIR_IMG,strlen(_DIR_IMG))==0
+ AND file_exists($f=preg_replace(',[?].*$,','',$source))){
+ $source = $f;
+ }
$fichier = $source;
}
// ne s'applique qu'aux textes contenant des liens
// http://doc.spip.org/@liens_absolus
function liens_absolus($texte, $base='') {
- if (preg_match_all(',(<(a|link|image)[[:space:]]+[^<>]*href=["\']?)([^"\' ><[:space:]]+)([^<>]*>),imsS',
+ if (preg_match_all(',(<(a|link|image|img|script)\s[^<>]*(href|src)=[^<>]*>),imsS',
$texte, $liens, PREG_SET_ORDER)) {
foreach ($liens as $lien) {
- $abs = url_absolue($lien[3], $base);
- if ($abs <> $lien[3] and !preg_match('/^#/',$lien[3]))
- $texte = str_replace($lien[0], $lien[1].$abs.$lien[4], $texte);
- }
- }
- if (preg_match_all(',(<(img|script)[[:space:]]+[^<>]*src=["\']?)([^"\' ><[:space:]]+)([^<>]*>),imsS',
- $texte, $liens, PREG_SET_ORDER)) {
- foreach ($liens as $lien) {
- $abs = url_absolue($lien[3], $base);
- if ($abs <> $lien[3])
- $texte = str_replace($lien[0], $lien[1].$abs.$lien[4], $texte);
+ foreach(array('href', 'src') as $attr) {
+ $href = extraire_attribut($lien[0], $attr);
+ if (strlen($href)>0) {
+ $abs = url_absolue($href, $base);
+ if ($href != $abs and !preg_match('/^#/',$href)) {
+ $texte_lien = inserer_attribut($lien[0], $attr, $abs);
+ $texte = str_replace($lien[0],$texte_lien,$texte);
+ }
+ }
+ }
}
}
+
return $texte;
}
'ay' => "Aymara",
'az' => "Azərbaycan dili",
'ba' => "Bashkir",
- 'be' => "Беларускі",
+ 'be' => "Беларуская",
'ber_tam' => "Tamazigh",
'ber_tam_tfng' => "Tamazigh tifinagh",
'bg' => "български",
'co' => "corsu",
'cpf' => "Kréol réyoné",
'cpf_dom' => "Kreyòl",
- 'cpf_hat' => "Kréyòl (Péyi Dayiti)",
+ 'cpf_hat' => "Kreyòl (Peyi Dayiti)",
'cs' => "čeština",
'cy' => "Cymraeg", # welsh, gallois
'da' => "dansk",
'hi' => "हिंदी",
'hr' => "hrvatski",
'hu' => "magyar",
- 'hy' => "Հայերեն",// Arménien
+ 'hy' => "Հայերեն",// Arménien
'ia' => "Interlingua",
'id' => "Indonesia",
'ie' => "Interlingue",
$lien = array(
'href' => extraire_attribut($r[0],'href'),
'class' => extraire_attribut($r[0],'class'),
- 'mime' => extraire_attribut($r[0],'type')
+ 'mime' => extraire_attribut($r[0],'type'),
+ 'title' => extraire_attribut($r[0],'title'),
+ 'hreflang' => extraire_attribut($r[0],'hreflang')
);
$n = strlen($r[0]);
$a -= $n;
// dans les parametres, plutot que les liens echappes
if (!is_null($liens))
$params = str_replace($liens[0], $liens[1], $params);
- $modele = inclure_modele($type, $id, $params, $lien, $connect, $env);
+ $modele = inclure_modele($type, $id, $params, $lien, $connect, $env);
// en cas d'echec,
// si l'objet demande a une url,
// creer un petit encadre vers elle
if (is_null($connect)){
$connect = '';
$interdire_script = true;
+ $env['espace_prive'] = 1;
}
// Echapper les codes <html> etc
if ($interdire_script)
$letexte = interdire_scripts($letexte);
+ // Dans l'espace prive on se mefie de tout contenu dangereux
+ // https://core.spip.net/issues/3371
+ if (isset($env['espace_prive']) AND $env['espace_prive']){
+ $letexte = echapper_html_suspect($letexte);
+ }
+
return $letexte;
}
$letexte = "";
while (count($textMatches)) {
// un texte a echapper
- $letexte .= str_replace(array("<"),array('<'),array_shift($textMatches));
+ $letexte .= str_replace("<",'<',array_shift($textMatches));
// un tag html qui a servit a faite le split
$letexte .= array_shift($textMatches);
}
return $letexte;
}
-// Securite : utiliser SafeHTML s'il est present dans ecrire/safehtml/
-// http://doc.spip.org/@safehtml
+/**
+ * Si le html contenu dans un texte ne passe pas sans transformation a travers safehtml
+ * on l'echappe
+ * si safehtml ne renvoie pas la meme chose on echappe les < en < pour montrer le contenu brut
+ *
+ * @param string $texte
+ * @return string
+ */
+function echapper_html_suspect($texte){
+ if (strpos($texte,'<')===false OR strpos($texte,'=')===false)
+ return $texte;
+
+ // on teste sur strlen car safehtml supprime le contenu dangereux
+ // mais il peut aussi changer des ' en " sur les attributs html,
+ // donc un test d'egalite est trop strict
+ if (strlen(safehtml($texte))!==strlen($texte)){
+ $texte = str_replace("<","<",$texte);
+ }
+
+ return $texte;
+}
+
+
+/**
+ * Sécurise un texte HTML
+ *
+ * Échappe le code PHP et JS.
+ * Applique en plus safehtml si un plugin le définit dans inc/safehtml.php
+ *
+ * Permet de protéger les textes issus d'une origine douteuse (forums, syndications...)
+ *
+ * @filtre
+ * @link http://www.spip.net/4310
+ *
+ * @param string $t
+ * Texte à sécuriser
+ * @return string
+ * Texte sécurisé
+**/
function safehtml($t) {
static $safehtml;
include_once _ROOT_CWD . $a;
$inc[$dirname][$file] = $inc[''][$dirname . $file] = true;
}
- if (!defined('_SAUVER_CHEMIN'))
- define('_SAUVER_CHEMIN',true);
+ if (!defined('_SAUVER_CHEMIN')){
+ // si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher
+ if (is_null($GLOBALS['path_files'])) return $a;
+ define('_SAUVER_CHEMIN', true);
+ }
return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = $a;
}
}
}
}
- if (!defined('_SAUVER_CHEMIN'))
- define('_SAUVER_CHEMIN',true);
+ if (!defined('_SAUVER_CHEMIN')){
+ // si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher
+ if (is_null($GLOBALS['path_files'])) return false;
+ define('_SAUVER_CHEMIN', true);
+ }
return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = false;
}
// pour specifier les versions de SPIP necessaires
// 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 = "3.0.20";
+$spip_version_branche = "3.0.21";
// 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 = 17873;
<paquet
prefix="spip"
categorie="outil"
- version="3.0.20"
+ version="3.0.21"
etat="stable"
compatibilite="];["
schema="19268"
$contexte['lien'] = str_replace(""",'"', $lien['href']);
$contexte['lien_class'] = $lien['class'];
$contexte['lien_mime'] = $lien['mime'];
+ $contexte['lien_title'] = $lien['title'];
+ $contexte['lien_hreflang'] = $lien['hreflang'];
}
// Traiter les parametres
// 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";
+ $fin_lang_select_public = "\n\t\tlang_select();";
$corps .=
"\n\t\tlang_select_public("
else {
$init_lang = '';
$fin_lang = '';
+ $fin_lang_select_public = '';
// sortir les appels au traducteur (invariants de boucle)
if (strpos($return, '?php') === false
AND preg_match_all("/\W(_T[(]'[^']*'[)])/", $return, $r)) {
. $boucle->partie
. $corps;
+ // depiler la lang de la boucle si besoin
+ $corps .= $fin_lang_select_public;
+
// si le corps est une constante, ne pas appeler le serveur N fois!
if (preg_match(CODE_MONOTONE,str_replace("\\'",'',$corps), $r)) {
// Cas 1. forcer_lang = true et pas de critere {lang_select}
if (isset($GLOBALS['forcer_lang']) AND $GLOBALS['forcer_lang']
AND $lang_select !== 'oui')
- return;
+ $lang = $GLOBALS['spip_lang'];
// Cas 2. l'objet n'a pas de langue definie (ou definie a '')
- if (!strlen($lang))
- return;
+ elseif (!strlen($lang))
+ $lang = $GLOBALS['spip_lang'];
// Cas 3. l'objet est multilingue !
- if ($lang_select !== 'oui'
- AND strlen($titre) > 10
- AND strpos($titre, '<multi>') !== false
- AND strpos(echappe_html($titre), '<multi>') !== false)
- return;
-
- // Tous les cas ayant ete elimines, faire le job
- $GLOBALS['spip_lang'] = $lang;
+ elseif ($lang_select !== 'oui'
+ AND strlen($titre) > 10
+ AND strpos($titre, '<multi>') !== false
+ AND strpos(echappe_html($titre), '<multi>') !== false)
+ $lang = $GLOBALS['spip_lang'];
+
+ // faire un lang_select() eventuellement sur la langue inchangee
+ lang_select($lang);
+
return;
}
$not = "";
} else {
// Le debut du premier argument est l'operateur
- preg_match("/^([!]?)([a-zA-Z][a-zA-Z0-9]*)[[:space:]]*(.*)$/ms", $param, $m);
+ preg_match("/^([!]?)([a-zA-Z][a-zA-Z0-9_]*)[[:space:]]*(\??)[[:space:]]*(.*)$/ms", $param, $m);
$op = $m[2];
$not = $m[1];
+ $cond = $m[3];
// virer le premier argument,
// et mettre son reliquat eventuel
// Recopier pour ne pas alterer le texte source
// utile au debusqueur
- if ($m[3]) {
+ if ($m[4]) {
// une maniere tres sale de supprimer les "' autour de {critere "xxx","yyy"}
- if (preg_match(',^(["\'])(.*)\1$,', $m[3])) {
+ if (preg_match(',^(["\'])(.*)\1$,', $m[4])) {
$c = null;
- eval ('$c = '.$m[3].';');
+ eval ('$c = '.$m[4].';');
if (isset($c))
- $m[3] = $c;
+ $m[4] = $c;
}
$texte = new Texte;
- $texte->texte = $m[3];
+ $texte->texte = $m[4];
$v[1][0]= $texte;
} else array_shift($v[1]);
}
$crit = new Critere;
$crit->op = $op;
$crit->not = $not;
+ $crit->cond = $cond;
$crit->exclus ="";
$crit->param = $v;
$args[] = $crit;
<input type='hidden' name='nom_site' value="#ENV{nom_site}" />
[<input type="hidden" name="id_forum" value="(#ENV*{id_forum})" />]
[(#INCLURE{fond=formulaires/inc-forum_ajouter_mot, ajouter_mot})]
- (#ENV*{erreurs}|table_valeur{previsu})
+ (#ENV**{erreurs}|table_valeur{previsu})
</div>
</form>]
<paquet
prefix="forum"
categorie="communication"
- version="1.8.40"
+ version="1.8.41"
etat="stable"
compatibilite="[3.0.0;3.0.*]"
logo="prive/themes/spip/images/forum-32.png"
// verifier qu'un mot du meme groupe n'existe pas avec le meme titre
// la comparaison accepte un numero absent ou different
// sinon avertir
- if (!count($erreurs) AND !_request('confirm_titre_mot')){
- if (sql_countsel("spip_mots",
- "titre REGEXP ".sql_quote("^([0-9]+[.] )?".preg_quote(supprimer_numero(_request('titre')))."$")
- ." AND id_mot<>".intval($id_mot)))
- $erreurs['titre'] =
- _T('mots:avis_doublon_mot_cle')
- ." <input type='hidden' name='confirm_titre_mot' value='1' />";
+ // on ne fait la verification que si c'est une creation de mot ou un retitrage
+ if (!intval($id_mot)
+ OR supprimer_numero(_request('titre'))!==supprimer_numero(sql_getfetsel('titre','spip_mots','id_mot='.intval($id_mot)))){
+ if (!count($erreurs) AND !_request('confirm_titre_mot')){
+ if (sql_countsel("spip_mots",
+ "titre REGEXP ".sql_quote("^([0-9]+[.] )?".preg_quote(supprimer_numero(_request('titre')))."$")
+ ." AND id_mot<>".intval($id_mot)))
+ $erreurs['titre'] =
+ _T('mots:avis_doublon_mot_cle')
+ ." <input type='hidden' name='confirm_titre_mot' value='1' />";
+ }
}
return $erreurs;
}
<paquet
prefix="mots"
categorie="edition"
- version="2.4.13"
+ version="2.4.16"
etat="stable"
compatibilite="[3.0.0;3.0.*]"
logo="prive/themes/spip/images/mot-32.png"
-[(#ID_MOT|oui)
+[(#ID_MOT|intval|oui)
[(#AUTORISER{modifier,mot,#ID_MOT}|sinon_interdire_acces)]]
-[(#ID_MOT|non)
+[(#ID_MOT|intval|non)
[(#AUTORISER{creer,mot,#ID_MOT,'','',#ARRAY{associer_objet,#ENV{associer_objet}}}|sinon_interdire_acces)]]
#SET{retour,#ENV{redirect}|sinon{#ENV{id_mot}|?{#URL_ECRIRE{mot,id_mot=#ID_MOT},#URL_ECRIRE{mots}}}}
<div class='cadre-formulaire-editer'>
<div class="entete-formulaire">
- [(#ID_MOT|oui)
+ [(#ID_MOT|intval|oui)
[(#GET{retour}|icone_verticale{<:icone_retour:>,mot,'',left retour[(#ENV{retourajax,''}|oui)ajax preload]})]
]
- [[(#ID_MOT|?{<:mots:info_modifier_mot:>,<:titre_ajouter_un_mot:>})]
+ [[(#ID_MOT|intval|?{<:mots:info_modifier_mot:>,<:titre_ajouter_un_mot:>})]
<h1>(#ENV{titre,#INFO_TITRE{mot,#ID_MOT}|sinon{<:mots:texte_nouveau_mot:>}})</h1>]
</div>
[(#URL_ECRIRE{groupe_mots_edit,id_groupe=#ID_GROUPE}|icone_verticale{<:mots:icone_modif_groupe_mots:>,groupe_mots-24.png,edit,right})]
]
<div id="wysiwyg">
- <INCLURE{fond=prive/objets/contenu/groupe_mots,id=#ID_GROUPE} />
+ [(#PIPELINE{afficher_contenu_objet,#ARRAY{
+ args,#ARRAY{type,groupe_mots,id,#ID_GROUPE,id_objet,#ID_GROUPE},
+ data,#INCLURE{fond=prive/objets/contenu/groupe_mots, id=#ID_GROUPE, id_groupe=#ID_GROUPE}}})]
</div>
<div class="nettoyeur"></div>
<INCLURE{fond=prive/objets/liste/mots-admin,id_groupe,par=titre,ajax,env} />
]
#BOITE_FERMER
</div>
-]</BOUCLE_groupes>
\ No newline at end of file
+]</BOUCLE_groupes>
.markItUp {
margin:5px 0 5px 0;
clear:both;
- position: relative;
+ position: relative;
}
.markItUp .markItUpContainer {
margin:0; padding:0;
padding:1em;
/* decaler de la hauteur de .markItUpTabs */
position:relative;
- top:2.2em;
+ top:2.2em;
+ text-align:initial;
}
/* correction des styles spip_formulaires appliques par defaut (grr) */
mark = $(this).parent().parent();\r
objet = mark.parents('.formulaire_spip')[0].className.match(/formulaire_editer_(\w+)/);\r
champ = mark.parents('li')[0].className.match(/editer_(\w+)/);\r
+ dir = mark.find('textarea').attr('dir');\r
$(mark).find('.markItUpPreview').height(\r
$(mark).find('.markItUpHeader').height()\r
+ $(mark).find('.markItUpEditor').height()\r
+ $(mark).find('.markItUpFooter').height()\r
);\r
\r
- $(mark).find('.markItUpHeader').hide();\r
- $(mark).find('.markItUpEditor').hide();\r
- $(mark).find('.markItUpFooter').hide();\r
+ $(mark).find('.markItUpHeader,.markItUpEditor,.markItUpFooter').hide();\r
$(this).addClass('on').next().removeClass('on');\r
$(mark).find('.markItUpPreview').show()\r
.addClass('ajaxLoad')\r
(objet ? objet[1] : ''))\r
)\r
.removeClass('ajaxLoad');\r
- \r
+ if(dir)\r
+ $(mark).find('.markItUpPreview').attr('dir',dir);\r
+\r
//ouvre un nouvel onglet lorsqu'on clique sur un lien dans la prévisualisation\r
$(".markItUpPreview a").attr("target","blank");\r
\r
$('.previsuEditer').click(function(){\r
mark = $(this).parent().parent();\r
$(mark).find('.markItUpPreview').hide();\r
- $(mark).find('.markItUpHeader').show();\r
- $(mark).find('.markItUpEditor').show();\r
- $(mark).find('.markItUpFooter').show();\r
+ $(mark).find('.markItUpHeader,.markItUpEditor,.markItUpFooter').show();\r
$(this).addClass('on').prev().removeClass('on');\r
return false;\r
});\r
}\r
\r
-\r
function renderPreview(val, champ, objet) {\r
var phtml;\r
if (options.previewParserPath !== '') {\r
<paquet
prefix="porte_plume"
categorie="edition"
- version="1.12.4"
+ version="1.12.5"
etat="stable"
compatibilite="[3.0.0;3.0.*]"
logo="images/porte-plume-32.png"
$reg = end($regs);
if (!$reg[1] AND $reg[2]) $texte.="</$reg[2]>";
+ // et interdire_scripts !
+ $texte = interdire_scripts($texte);
+
return $texte;
}
<paquet
prefix="revisions"
categorie="edition"
- version="1.7.9"
+ version="1.7.10"
etat="stable"
compatibilite="[3.0.0;3.0.*]"
logo="prive/themes/spip/images/revision-32.png"
]
]
[<div class='id_rubrique'>(#GET{textes}|table_valeur{id_rubrique})</div>]
- [<h4 class='surtitre'>(#GET{textes}|table_valeur{surtitre})</h4>]
- <h1>[(#INFO_STATUT{#OBJET,#ID_OBJET}|puce_statut{#OBJET}) ][(#GET{textes}|table_valeur{titre}|sinon{<:info_sans_titre:>})]</h1>
- [<h2 class='soustitre'>(#GET{textes}|table_valeur{soustitre})</h2>]
+ [<h4 class='surtitre'>(#GET{textes}|table_valeur{surtitre}|interdire_scripts)</h4>]
+ <h1>[(#INFO_STATUT{#OBJET,#ID_OBJET}|puce_statut{#OBJET}) ][(#GET{textes}|table_valeur{titre}|sinon{<:info_sans_titre:>}|interdire_scripts)]</h1>
+ [<h2 class='soustitre'>(#GET{textes}|table_valeur{soustitre}|interdire_scripts)</h2>]
<div class="nettoyeur"></div>
<div id="wysiwyg" class="revision">
// On va tenter un site 'sus' ou 'off' de plus de 24h, et le passer en 'off'
// s'il echoue
$where = sql_in("syndication", array('sus','off')) . "
+ AND statut<>'refuse'
AND NOT(" . sql_date_proche('date_syndic', (0 - _PERIODE_SYNDICATION_SUSPENDUE) , "MINUTE") . ')';
$id_syndic = sql_getfetsel("id_syndic", "spip_syndic", $where, '', "date_syndic", "1");
if ($id_syndic) {
// Et un site 'oui' de plus de 2 heures, qui passe en 'sus' s'il echoue
$where = "syndication='oui'
+ AND statut<>'refuse'
AND NOT(" . sql_date_proche('date_syndic', (0 - _PERIODE_SYNDICATION) , "MINUTE") . ')';
$id_syndic = sql_getfetsel("id_syndic", "spip_syndic", $where, '', "date_syndic", "1");
// par la version anglaise avant de faire strtotime
if ($lang){
// "fr-fr"
- $lang = reset(explode("-",$lang));
+ list($lang) = explode("-", $lang);
static $months = null;
if (!isset($months[$lang])){
$prev_lang = $GLOBALS['spip_lang'];
<paquet
prefix="sites"
categorie="edition"
- version="1.7.13"
+ version="1.7.14"
etat="stable"
compatibilite="[3.0.0;3.0.*]"
logo="prive/themes/spip/images/site-32.png"
rien=
[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+
-[Google]
-(^q|\&q|as_q)=
-(www\.|ww\.|maps\.)?(google|gogole)\.(.*)
-(web|www).toile.com
-www\.cegetel\.net
-search\.conduit\.com
-search\.sweetim\.com
-chello\.fr
-isearch\.avg\.com
+# -----------------------------------------------------------------------------
+# Services de mail
+# -----------------------------------------------------------------------------
-[Voila]
-(kw|rdata)=
-(search|moteur)(.*)\.voila\.(fr|com)
+[(email)]
+rien=
+imp(.*)\.free\.fr
+fc\.kayenta\.com
+courrielweb\.cmaisonneuve\.qc\.ca
+(.*)mail\.(.*)\.([a-z]+)$
+webmail([0-9]*)\.wanadoo\.fr
+www\.laposte\.net
+mail([0-9]*)\.voila\.fr
+\/(web)?mail\/
-[Yahoo!]
-p=
-(.*)(m|search|ink|dir|google)\.yahoo\.([a-z]+)$
-[AltaVista]
+# -----------------------------------------------------------------------------
+# Les moteurs vivants - Engines List
+# -----------------------------------------------------------------------------
+
+[Accentice]
q=
-(.*)altavista\.com
+(.*\.|)accentice\.com
-[Delicious]
-p=
-delicious\.com
+[Alice]
+qs=
+\.aliceadsl\.
-[Ask]
+[alOt]
q=
+search\.alot\.com
+
+[AOLsearch]
+(query|q)=
+(.*)search\.aol\.(.*)
+
+[AOL France]
+(query|q|r)=
+(.*)recherchet?\.aol\.fr
+
+[Ask]
+(q|queryTerm|searchfor)=
(.*)\.ask\.com
-[HotBot]
-query=
-www\.hotbot\.com
+[Babylon]
+q=
+search\.babylon\.com
-[Freeserve]
+[Baidu]
+(wd|d)=
+(.*\.|)baidu\.com
+
+[Bing]
q=
-search\.freeserve\.com
+(.*)\.bing\.com
+bing\.com
+search\.live\.com
-[Skeech]
+[BlueWin]
query=
-skeech\.com
+search\.bluewin\.ch
-[Dogpile]
+[Copernic]
query=
-(.*)dogpile\.com
+find\.copernic\.com
-[Metacrawler]
-query=
-metacrawler\.com
+[Crawler]
+q=
+(www\.)crawler\.com
-[Mirago]
-qry=
-www.mirago\.([a-z]+)$
+[Delicious]
+p=
+delicious\.com
-[Nomade]
-s=
-(.*)\.nomade\.fr
-(.*)\.nomade\.tiscali\.fr
-(.*)\.nomade\.aliceadsl\.fr
+[Delta Search]
+q=
+(.*\.|)delta-search\.com
-[Alice]
-qs=
-\.aliceadsl\.
+#
+# Dmoz
+#
+[dmoz.org]
+rien=
+(.*\.)?dmoz\.org
-[Lycos]
+[EO]
+q=
+www\.eo\.st
+
+[Dogpile]
query=
-search\.lycos\.com
-vachercher\.lycos\.fr
+(.*)dogpile\.com
-[Francite]
-name=
-recherche\.francite\.com
+[Dogpile]
+q=
+(.*\.|)dogpile\.co\.uk
-[MSN]
-(q|s)=
-search(.*)\.msn\.([a-z.]+)$
-leguide(.*)\.msn\.([a-z]+)$
-search\.ninemsn\.com\.au
+[EasySearch]
+s=
+(.*\.|)easysearch\.org\.uk
-[Bing]
+[Ecosia]
q=
-(.*)\.bing\.com
-bing\.com
-search\.live\.com
+(.*\.|)ecosia\.org
+
+[Exalead]
+q=
+www\.exalead\.fr
+www\.exalead\.com
[Excite]
search=
www\.excite\.fr
(.*)\.excite\.co\.jp
-[AOL France]
-(query|q|r)=
-(.*)recherchet?\.aol\.fr
+[Facemoods]
+s=
+start\.facemoods\.com
-[AOLsearch]
-(query|q)=
-(.*)search\.aol\.(.*)
+[FoxRef]
+key=
+www\.foxref\.org
-[AllTheWeb]
+[francesurf]
q=
-www\.alltheweb\.com
-
-[ixquick]
-query=
-ixquick\.com
+www\.francesurf\.net
-[Netscape]
-search=
-search-intl\.netscape\.com
-search\.netscape\.com
-www\.netscape\.fr
+[Francite]
+name=
+recherche\.francite\.com
[Free]
q=
search(.*)\.free\.fr
-[9online]
-query=
-www\.9online\.fr
+[Freeserve]
+q=
+search\.freeserve\.com
-[Naver]
+[Google]
+(^q|\&q|as_q|qs)=
+(www\.|ww\.|maps\.)?(google|gogole)\.(.*)
+(web|www).toile.com
+www\.cegetel\.net
+search\.conduit\.com
+search\.sweetim\.com
+chello\.fr
+isearch\.avg\.com
+
+[Govome]
+q=
+(.*\.|)govome\.com
+
+[Globososo]
+q=
+(.*\.|)globososo\.com
+
+[Haosou]
+q=
+www\.haosou\.com
+
+[HolaSearch]
+q=
+(.*\.|)holasearch\.com
+
+[HooSeek]
+recherche=
+(www\.)?hooseek\.com
+
+[HotBot]
query=
-search\.naver\.com
+www\.hotbot\.com
-[Club Internet]
+[Iadah]
q=
-recherche\.club-internet\.fr
+(www\.|)iadah\.com
-[Sympatico]
+[Incredibar]
+q=
+(search\.)incredibar\.com
+
+[ixquick]
query=
-search\.sli\.sympatico\.ca
+ixquick\.com
-[Overture]
-Keywords=
-www\.overture\.com
+[LemmeFind]
+t=
+www\.lemmefind\.fr
-[moteur-recherche.net]
-keyword=
-www\.moteur-recherche\.net
+[Libero.it]
+query=
+arianna\.libero\.it
-[Reacteur.com]
-kw=
-www\.reacteur\.com
+[Lost]
+x_query=
+(www\.)?lo\.st
-[francesurf]
-q=
-www\.francesurf\.net
+[Lycos]
+query=
+search\.lycos\.com
+vachercher\.lycos\.fr
-[n9uf]
-((K|k)eywords|query)=
-(www\.)?neuf\.fr
+[Metacrawler]
+query=
+metacrawler\.com
+
+[Mirago]
+qry=
+www.mirago\.([a-z]+)$
+
+[MonGenie]
+Keywords=
+www\.mongenie\.com
[MozBot]
q=
www\.mozbot\.([a-z]+)$
-[Cegetel]
+[moteur-recherche.net]
+keyword=
+www\.moteur-recherche\.net
+
+[MSN]
+(q|s)=
+search(.*)\.msn\.([a-z.]+)$
+leguide(.*)\.msn\.([a-z]+)$
+search\.ninemsn\.com\.au
+
+[mySearchDial]
q=
-(www\.)?cegetel\.([a-z]+)$
+(.*\.|)mysearchdial\.com
[MyWay]
searchfor=
www\.mywebsearch\.com
(.*)\.mysearch\.com
-[MonGenie]
-Keywords=
-www\.mongenie\.com
+[MyWebSearch]
+searchfor=
+search\.mywebsearch\.com
+
+[Naver]
+query=
+search\.naver\.com
[Need2Find]
searchfor=
kx\.search\.need2find\.com
-[Exalead]
-q=
-www\.exalead\.fr
-www\.exalead\.com
-
-[Virgilio.it]
-qs=
-search\.virgilio\.it
-
-[Libero.it]
-query=
-arianna\.libero\.it
-
-[LemmeFind]
-t=
-www\.lemmefind\.fr
+[Nomade]
+s=
+(.*)\.nomade\.fr
+(.*)\.nomade\.tiscali\.fr
+(.*)\.nomade\.aliceadsl\.fr
[NovoNeo]
q=
www\.novoneo\.com
-[MyWebSearch]
-searchfor=
-search\.mywebsearch\.com
-
-[Copernic]
-query=
-find\.copernic\.com
-
-[Seek]
-qry_str=
-\.seek\.fr
-
[Orange, le moteur]
rdata=
www\.lemoteur\.fr
-[alOt]
-q=
-search\.alot\.com
-
-#
-# Dmoz
-#
-[dmoz.org]
-rien=
-(.*\.)?dmoz\.org
-
-[FoxRef]
-key=
-www\.foxref\.org
-
-[OneBigWorld]
-Keywords=
-fr\.onebigworld\.com
+[Orange, le moteur]
+kw=
+lemoteur\.orange\.fr
-[BlueWin]
-query=
-search\.bluewin\.ch
+[ParallaxSearch]
+qs=
+(.*\.|)parallaxsearch\.com
-[EO]
+[Pesquisa]
q=
-www\.eo\.st
-
-[HooSeek]
-recherche=
-(www\.)?hooseek\.com
+pesquisa\.sapo\.pt
-[Lost]
-x_query=
-(www\.)?lo\.st
+[Qone8]
+q=
+(.*\.|)qone8\.com
-[Babylon]
+[Qwant]
q=
-search\.babylon\.com
+(.*\.|)qwant\.com
-[Crawler]
+[Search-Results]
q=
-(www\.)crawler\.com
+(.*\.|)search-results\.com
[Searchqu]
q=
q=
(www\.|)searchya\.com
-[Iadah]
+[Seek]
+qry_str=
+\.seek\.fr
+
+[Seznam]
q=
-(www\.|)iadah\.com
+(.*\.|)seznam\.cz
-[Incredibar]
+[Skeech]
+query=
+skeech\.com
+
+[Sogou]
+query=
+www\.sogou\.com
+
+[Sympatico]
+query=
+search\.sli\.sympatico\.ca
+
+[Trouver]
q=
-(search\.)incredibar\.com
+(.*\.|)trouver\.fr
-[Search-Results]
+[Vi-View]
q=
-(.*\.|)search-results\.com
+(.*\.|)vi-view\.com
-[Facemoods]
-s=
-start\.facemoods\.com
+[Virgilio.it]
+qs=
+search\.virgilio\.it
+
+[Voila]
+(kw|rdata)=
+(search|moteur)(.*)\.voila\.(fr|com)
+
+[Yahoo!]
+p=
+(.*)(m|search|ink|dir|google)\.yahoo\.([a-z]+)$
[Yandex]
text=
(www\.)?yandex\.ru
+[Wow]
+q=
+(.*\.|)wow\.com
+
[Xeoo]
k=
(www\.)?xeoo\.com
-[Delta Search]
-q=
-(.*\.|)delta-search\.com
-
-[HolaSearch]
-q=
-(.*\.|)holasearch\.com
-
-[Govome]
-q=
-(.*\.|)govome\.com
-
-[mySearchDial]
-q=
-(.*\.|)mysearchdial\.com
-
-[SOSO Globo]
-q=
-(.*\.|)globososo\.com
-[Seznam]
-q=
-(.*\.|)seznam\.cz
-
-[Baidu]
-wd=
-(.*\.|)baidu\.com
+# -----------------------------------------------------------------------------
+# Les moteurs morts - Engines List
+# -----------------------------------------------------------------------------
-[Dogpile]
-q=
-(.*\.|)dogpile\.co\.uk
+[9online]
+query=
+www\.9online\.fr
-[Trouver]
+[AltaVista]
q=
-(.*\.|)trouver\.fr
+(.*)altavista\.com
-[Pesquisa]
+[AllTheWeb]
q=
-pesquisa\.sapo\.pt
+www\.alltheweb\.com
-[Qwant]
+[Cegetel]
q=
-(.*\.|)qwant\.com
+(www\.)?cegetel\.([a-z]+)$
-[Qone8]
+[Club Internet]
q=
-(.*\.|)qone8\.com
+recherche\.club-internet\.fr
-[Ecosia]
-q=
-(.*\.|)ecosia\.org
+[n9uf]
+((K|k)eywords|query)=
+(www\.)?neuf\.fr
-[Wow]
-q=
-(.*\.|)wow\.com
+[Netscape]
+search=
+search-intl\.netscape\.com
+search\.netscape\.com
+www\.netscape\.fr
-[Accentice]
-q=
-(.*\.|)accentice\.com
+[OneBigWorld]
+Keywords=
+fr\.onebigworld\.com
-#
-# Services de mail
-#
+[Overture]
+Keywords=
+www\.overture\.com
-[(email)]
-rien=
-imp(.*)\.free\.fr
-fc\.kayenta\.com
-courrielweb\.cmaisonneuve\.qc\.ca
-(.*)mail\.(.*)\.([a-z]+)$
-webmail([0-9]*)\.wanadoo\.fr
-www\.laposte\.net
-mail([0-9]*)\.voila\.fr
-\/(web)?mail\/
+[Reacteur.com]
+kw=
+www\.reacteur\.com
<paquet
prefix="stats"
categorie="statistique"
- version="0.4.28"
+ version="0.4.34"
etat="stable"
compatibilite="[3.0.0;3.1.*]"
logo="prive/themes/spip/images/statistique-32.png"
.stats_repartition table table td {padding: 0;}
.stats_lang .couleur_langue { background: #GET{foncee}; }
.stats_lang table p {padding-left:10px;margin:2px 0;}
+
+.stats-articles .size1of2 {padding-#GET{right}:1%;}
+.stats-articles .lastUnit {padding-#GET{left}:1%;border-#GET{left}:1px solid;}
[(#REM) </style>]
// On vide les paquets locaux pour mettre a jour leurs donnees relatives au depot
// comme les mises a jour disponibles
include_spip('inc/svp_depoter_local');
- svp_base_supprimer_paquets_locaux();
+ svp_actualiser_paquets_locaux(true);
return true;
}
<paquet
prefix="svp"
categorie="maintenance"
- version="0.80.26"
+ version="0.80.27"
etat="stable"
compatibilite="[3.0.0;3.0.*]"
logo="svp-64.png"
$lien = array(
'href' => extraire_attribut($r[0],'href'),
'class' => extraire_attribut($r[0],'class'),
- 'mime' => extraire_attribut($r[0],'type')
+ 'mime' => extraire_attribut($r[0],'type'),
+ 'title' => extraire_attribut($r[0],'title'),
+ 'hreflang' => extraire_attribut($r[0],'hreflang')
);
$n = strlen($r[0]);
$a -= $n;
$contexte['lien'] = str_replace(""",'"', $lien['href']);
$contexte['lien_class'] = $lien['class'];
$contexte['lien_mime'] = $lien['mime'];
+ $contexte['lien_title'] = $lien['title'];
+ $contexte['lien_hreflang'] = $lien['hreflang'];
}
$modele = recuperer_fond("modeles/dist", $contexte, array(), $connect);
}
<label for="#GET{name}">[(#ENV{_label_date})] #AIDER{artdate}</label>[
<span class='erreur_message'>(#GET{erreurs})</span>
]
- <span class="affiche"[(#ENV{_saisie_en_cours}|oui)style="display:none;"]>[(#ENV*{afficher_#GET{name}}|affdate)]</span>
+ <span class="affiche"[(#ENV{_saisie_en_cours}|et{#ENV{_editer_date}}|oui)style="display:none;"]>[(#ENV*{afficher_#GET{name}}|affdate)]</span>
[(#ENV{editable})
<span class="toggle_box_link"[(#ENV{_saisie_en_cours}|oui)style="display:none;"]>[<a href="#"
- onclick="var f=jQuery(this).parents('form').eq(0);f.find('li .input').show('fast').siblings('span').hide('fast');f.find('.boutons').show('fast');f.find('input.date').eq(0).focus();return false;"
+ onclick="var f=jQuery(this).parents('form').eq(0);f.find('.editer .input.editable').show('fast').siblings('span').add(jQuery(this).parent()).hide('fast');f.find('.boutons').show('fast');f.find('input.date').eq(0).focus();return false;"
><:bouton_changer:><i class="over"> \(#ENV{_label_date}\)</i></a>]</span>
- <span class="input"[(#ENV{_saisie_en_cours}|non)style="display:none;"]>
+ <span class="input[(#ENV{_editer_date}|oui)editable]"[(#ENV{_saisie_en_cours}|et{#ENV{_editer_date}}|non)style="display:none;"]>
<input type="text" class="text date" name="#GET{name}_jour" id="#GET{name}_jour" value="#ENV{#GET{name}_jour}" size="10"/>
<input type="text" class="text heure time" name="#GET{name}_heure" id="#GET{name}_heure" value="#ENV{#GET{name}_heure}" size="5"/>
</span>
]
<span class="affiche"[(#ENV{_saisie_en_cours}|oui)style="display:none;"]>[(#ENV*{afficher_#GET{name}}|affdate|sinon{<:jour_non_connu_nc:>})]</span>
[(#ENV{editable})
- <span class="input"[(#ENV{_saisie_en_cours}|non)style="display:none;"]>
+ <span class="input editable"[(#ENV{_saisie_en_cours}|non)style="display:none;"]>
<span class="saisie_redac"[(#ENV{sans_redac}|oui)style="display:none;"]>
<input type="text" class="text date" name="#GET{name}_jour" id="#GET{name}_jour" value="#ENV{#GET{name}_jour}" size="10"/>
<input type="text" class="text heure time" name="#GET{name}_heure" id="#GET{name}_heure" value="#ENV{#GET{name}_heure}" size="5"/>
$valeurs['_label_date'] = (($statut == 'publie')? _T('texte_date_publication_objet'): _T('texte_date_creation_objet'));
$valeurs['_saisie_en_cours'] = (_request('date_jour')!==null);
+ // cas ou l'on ne peut pas dater mais on peut modifier la date de redac anterieure
+ // https://core.spip.net/issues/3494
+ $valeurs['_editer_date'] = $valeurs['editable'];
+ if ($valeurs['_editer_date_anterieure'] AND !$valeurs['editable']){
+ $valeurs['editable'] = autoriser('modifier',$objet,$id_objet);
+ }
return $valeurs;
}
$set = array();
- if (!$d = dater_recuperer_date_saisie(_request('date_jour')))
- $d = array(date('Y'),date('m'),date('d'));
- if (!$h = dater_recuperer_heure_saisie(_request('date_heure')))
- $h = array(0,0);
+ $charger = charger_fonction("charger","formulaires/dater/");
+ $v = $charger($objet, $id_objet, $retour, $options);
+
+ if ($v['_editer_date']){
+ if (!$d = dater_recuperer_date_saisie(_request('date_jour')))
+ $d = array(date('Y'),date('m'),date('d'));
+ if (!$h = dater_recuperer_heure_saisie(_request('date_heure')))
+ $h = array(0,0);
- $set[$champ_date] = sql_format_date($d[0], $d[1], $d[2], $h[0], $h[1]);
+ $set[$champ_date] = sql_format_date($d[0], $d[1], $d[2], $h[0], $h[1]);
+ }
- if (isset($desc['field']['date_redac'])){
+ if (isset($desc['field']['date_redac']) AND $v['_editer_date_anterieure']){
if (!_request('date_redac_jour') OR _request('sans_redac'))
$set['date_redac'] = sql_format_date(0,0,0,0,0,0);
else {
$set['date_redac'] = sql_format_date($d[0], $d[1], $d[2], $h[0], $h[1]);
}
}
- include_spip('action/editer_objet');
- objet_modifier($objet, $id_objet, $set);
+
+ if (count($set)){
+ $publie_avant = objet_test_si_publie($objet,$id_objet);
+ include_spip('action/editer_objet');
+ objet_modifier($objet, $id_objet, $set);
+ $publie_apres = objet_test_si_publie($objet,$id_objet);
+ if ($publie_avant !== $publie_apres){
+ // on refuse ajax pour forcer le rechargement de la page ici
+ // on refera traiter une 2eme fois, mais c'est sans consequence
+ refuser_traiter_formulaire_ajax();
+ }
+ }
}
if ($retour)
if (p>0) a=url.substring(0,p);
args = url.substring(p+1).split('&');
}
- else
- a=url;
+ else
+ a=url;
var regexp = new RegExp('^(' + c.replace('[]','\\[\\]') + '\\[?\\]?)(=.*)?$');
var ajouts = [];
var u = (typeof(v)!=='object')?encodeURIComponent(v):v;
var na = [];
+ var v_read = null;
// lire les variables et agir
for(var n=0;n<args.length;n++){
var val = args[n];
var r=val.match(regexp);
if (r && r.length){
if (v==null){
- return (r.length>2 && typeof r[2]!=='undefined')?r[2].substring(1):'';
+ // c'est un tableau, on memorise les valeurs
+ if (r[1].substr(-2) == '[]') {
+ if (!v_read) v_read = [];
+ v_read.push((r.length>2 && typeof r[2]!=='undefined')?r[2].substring(1):'');
+ }
+ // c'est un scalaire, on retourne direct
+ else {
+ return (r.length>2 && typeof r[2]!=='undefined')?r[2].substring(1):'';
+ }
}
// suppression
else if (!v.length) {
}
// Ajout. Pour une variable, remplacer au meme endroit,
// pour un tableau ce sera fait dans la prochaine boucle
- else if (r[1].substring(-2) != '[]') {
+ else if (r[1].substr(-2) != '[]') {
na.push(r[1]+'='+u);
ajouts.push(r[1]);
}
- else na.push(args[n]);
+ /* Pour les tableaux ont laisse tomber les valeurs de départ, on
+ remplira à l'étape suivante */
+ // else na.push(args[n]);
}
else
na.push(args[n]);
}
- if (v==null) return v; // rien de trouve
+ if (v==null) return v_read; // rien de trouve ou un tableau
// traiter les parametres pas encore trouves
if (v || v.length || force_vide) {
ajouts = "="+ajouts.join("=")+"=";
var contenu = $(this).serialize();
// ajoutons un timestamp
var d=new Date();
- contenu = contenu + "&__timestamp=" + d.getTime();
+ contenu = contenu + "&__timestamp=" + Math.round(d.getTime()/1000);
$.post(opt.url, {
'action': 'session',
'var': 'autosave_' + $('input[name=autosave]', this).val(),
<td class='titre principale'>[(#LOGO_ARTICLE|image_reduire{20,26})]<a href="[(#ID_ARTICLE|generer_url_entite{article})]"
title="<:info_numero_abbreviation|attribut_html:> #ID_ARTICLE">[(#RANG). ]#TITRE</a> [(#ENV{lang}|=={#LANG}|non) (#LANG)]</td>
<td class='auteur'><div class="inner"><BOUCLE_auteurs(AUTEURS){id_article}{', '}><a href="[(#ID_AUTEUR|generer_url_entite{auteur})]">#NOM</a></BOUCLE_auteurs></div></td>
- <td class='date secondaire'>[(#DATE|affdate_jourcourt)]</td>
+ <td class='date secondaire'>[<span title="[(#DATE|heures_minutes)]">(#DATE|affdate_jourcourt)</span>]</td>
<td class='id'>[(#AUTORISER{modifier,article,#ID_ARTICLE}|?{
<a href="[(#URL_ECRIRE{article_edit,id_article=#ID_ARTICLE})]">#ID_ARTICLE</a>,
#ID_ARTICLE
]
#SET{zajax,#VAL{var_zajax}|_request|replace{\W,''}}
-<INCLURE{fond=prive/squelettes/#GET{zajax}|concat{'/',#ENV{type-page}},ajax=#GET{zajax},env}>
\ No newline at end of file
+<INCLURE{fond=prive/squelettes/#GET{zajax}|concat{'/',#ENV{type-page}},ajax=#GET{zajax},espace_prive=1,env}>
\ No newline at end of file
[(#REM) Si pas de title, celui ci sera mis automatiquement par f_title_auto
en capturant le premier <h1> de la page]
#SET{paramcss,#REM|parametres_css_prive}
-#PIPELINE{header_prive,#INCLURE{fond=prive/squelettes/inclure/head,titre,minipres,paramcss=#GET{paramcss}}}
\ No newline at end of file
+#PIPELINE{header_prive,#INCLURE{fond=prive/squelettes/inclure/head,titre,minipres,paramcss=#GET{paramcss},espace_prive}}
\ No newline at end of file
<!--[if IE 9 ]> <html class="[(#LANG_DIR)][ (#LANG)] no-js ie ie9 lte9" xmlns="http://www.w3.org/1999/xhtml" xml:lang="#LANG" lang="#LANG" dir="#LANG_DIR"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--> <html class="[(#LANG_DIR)][ (#LANG)] no-js" xmlns="http://www.w3.org/1999/xhtml" xml:lang="#LANG" lang="#LANG" dir="#LANG_DIR"> <!--<![endif]-->
<head>
-<INCLURE{fond=prive/squelettes/head/#ENV{type-page},env}>
+<INCLURE{fond=prive/squelettes/head/#ENV{type-page},env,espace_prive=1}>
</head>
-<INCLURE{fond=prive/squelettes/body,env}>
+<INCLURE{fond=prive/squelettes/body,env,espace_prive=1}>
</html>
User-agent: *
Allow: /local/cache-css/
+Allow: /local/cache-js/
Disallow: /local/
Disallow: /ecrire/
Disallow: /plugins-dist/
Disallow: /squelettes/
Crawl-delay: 1
-Sitemap: #URL_SITE_SPIP/sitemap.xml
\ No newline at end of file
+Sitemap: #URL_SITE_SPIP/sitemap.xml
<svn_revision>
<text_version>
-Origine: svn://trac.rezo.net/spip/tags/spip-3.0.20
-Revision: 22255
-Dernier commit: 2015-06-23 14:49:44 +0200
+Origine: svn://trac.rezo.net/spip/tags/spip-3.0.21
+Revision: 22462
+Dernier commit: 2015-10-31 22:17:30 +0100
</text_version>
-<origine>svn://trac.rezo.net/spip/tags/spip-3.0.20</origine>
-<revision>22255</revision>
-<commit>2015-06-23 14:49:44 +0200 </commit>
+<origine>svn://trac.rezo.net/spip/tags/spip-3.0.21</origine>
+<revision>22462</revision>
+<commit>2015-10-31 22:17:30 +0100 </commit>
</svn_revision>
\ No newline at end of file