?????????????? ?????????????? ?????????????? ?????????????? fonds/derniers_connectes.html000066600000002340151452625100012423 0ustar00 #CACHE{0} [(#SET{aide,[(#VAL{aide.gif}|http_img_pack{'','',<:couteau:attente_confirmation:>})]})]

<:couteau:derniers_connectes:>

<:couteau:variable_vide:>

<:couteau:non_confirmes:>

<:couteau:variable_vide:> fonds/type_urls_191.html000066600000017646151452625100011206 0ustar00#CACHE{0}
<:couteauprive:urls_purger_tout:> #SET{nb, 0} #SET{nb, #TOTAL_BOUCLE} #SET{val, #REM|sinon{couteauprive:urls_base_vide}|_T} [(#GET{nb}|>{0}|oui) #SET{val, #REM|sinon{couteauprive:urls_base_total}|_T|replace{@nb@,#GET{nb}}} ] #SET{nb, 0} #SET{nb, #TOTAL_BOUCLE} #SET{val, #REM|sinon{couteauprive:urls_base_vide}|_T} [(#GET{nb}|>{0}|oui) #SET{val, #REM|sinon{couteauprive:urls_base_total}|_T|replace{@nb@,#GET{nb}}} ]
#SET{nb, 0} #SET{nb, #TOTAL_BOUCLE} #SET{val, #REM|sinon{couteauprive:urls_base_vide}|_T} [(#GET{nb}|>{0}|oui) #SET{val, #REM|sinon{couteauprive:urls_base_total}|_T|replace{@nb@,#GET{nb}}} ]
#SET{nb, 0} #SET{nb, #TOTAL_BOUCLE} #SET{val, #REM|sinon{couteauprive:urls_base_vide}|_T} [(#GET{nb}|>{0}|oui) #SET{val, #REM|sinon{couteauprive:urls_base_total}|_T|replace{@nb@,#GET{nb}}} ]
#SET{nb, 0} #SET{nb, #TOTAL_BOUCLE} #SET{val, #REM|sinon{couteauprive:urls_base_vide}|_T} [(#GET{nb}|>{0}|oui) #SET{val, #REM|sinon{couteauprive:urls_base_total}|_T|replace{@nb@,#GET{nb}}} ]
#SET{nb, 0} #SET{nb, #TOTAL_BOUCLE} #SET{val, #REM|sinon{couteauprive:urls_base_vide}|_T} [(#GET{nb}|>{0}|oui) #SET{val, #REM|sinon{couteauprive:urls_base_total}|_T|replace{@nb@,#GET{nb}}} ]
[(#REM) Ce separateur va permettre de commencer ici une deuxieme
Ajax )] @@CS_FORM@@
<:couteauprive:urls_choix_objet:>
  <:bouton_chercher:>
<:couteauprive:urls_titre_objet:> 
<:couteauprive:urls_url_objet:> 
[(#REM|sinon{<:couteauprive:urls_url_calculee:>}|replace{@type@,#ENV*{type_urls}})]  
 
||
fonds/decoupe_item.html000066600000001527151452625100011217 0ustar00[(#REM) champs disponibles : page, artpage, title_page, derniere_page, self parametre_url($self,'artpage',"{$i}-$num_pages") le filtre #ENV*{page}|decoupe_type_pagination{artpage, derniere_page, rayon=4, nb_extremes=2} renvoie : 1 si le nombre doit etre affiche 2 si le nombre ne doit pas etre affiche 3 s'il faut afficher '...' ]#SET{type,#ENV*{page}|decoupe_type_pagination{#ENV*{artpage},#ENV*{derniere_page}}}#SET{separateur,' '}[(#GET{type}|=={3}|oui)...#GET{separateur}][(#GET{type}|=={1}|oui)[(#ENV*{page}|=={#ENV*{artpage}}|oui)[(#ENV*{page})]][(#ENV*{page}|=={#ENV*{artpage}}|non)[(#ENV*{page})]][(#ENV*{page}|<{#ENV*{derniere_page}}|?{#GET{separateur},''})]]fonds/glossaire_js.html000066600000001144151452625100011234 0ustar00[(#REM) champs disponibles : id_mot (pour une boucle MOTS eventuellement) titre (multi ready) texte (safehtml) descriptif (safehtml) deux spans indispensables : .gl_js : titre .gl_jst : definition par defaut : la definition affichee est le texte du mot si le descriptif est vide attention : le retour a la ligne entre les deux span provoque l'ajout d'un espace apres le mot reconnu ] #SET{def,#ENV*{descriptif}|sinon{#ENV*{texte}}}   fonds/test_spam.html000066600000003066151452625100010554 0ustar00#CACHE{0} #SET{test, #ENV{ar_message}|spam_filtre_de_test} #SET{test_ip, #ENV{ar_message}|spam_filtre_de_test_ip{1}}
1. <:couteau:test_manuel:>

<:couteauprive:spam_tester_label:>

[
(#GET{test}|=={ok}|oui)<:couteauprive:spam_test_ok:>
] [
(#GET{test}|=={ko}|oui)<:couteauprive:spam_test_ko:>
] [
(#GET{test_ip})
]
[(#REM) Ce separateur va permettre de commencer ici une deuxieme Ajax )] @@CS_FORM@@
2. <:couteau:base_donnees:>

<:couteauprive:spam_tester_bd:>

[(#ENV{test_bd}|oui)[(#INCLURE{fond=fonds/test_spam_bd}{statut}{debut_msg})]]
fonds/test_spam_bd.html000066600000002432151452625100011215 0ustar00#CACHE{0} #SET{tab, #ARRAY} #SET{test, #TEXTE*|concat{" ",#TITRE*," ",#AUTEUR*," ",#EMAIL_AUTEUR*}|spam_filtre_de_test|=={ko}} [(#GET{test}|non)#SET{test, #IP|spam_filtre_de_test_ip|=={ko}}] [(#GET{test}|oui)#SET{tab, #GET{tab}|push{#ID_FORUM}}]
[(#VAL{_SPIP19300}|defined|non) ] [(#VAL{_SPIP19300}|defined|oui) ] #ID_FORUM. #TITRE[ (#STATUT|!={publie}|oui)(#STATUT)]
#PAGINATION
Aucun message identifié
fonds/type_urls.html000066600000014706151452625100010606 0ustar00#CACHE{0} [(#SET{cpt, #VAL{couteauprive:urls_base_vide}|_T})] [(#TOTAL_BOUCLE|>{0}|oui) [(#SET{total, #VAL{',#TOTAL_BOUCLE,''}})] [(#SET{cpt, #VAL{couteauprive:urls_base_total}|_T|replace{@nb@,#GET{total}}})] ]
<:couteauprive:urls_purger_tout:>
(#GET{cpt})
[(#REM) Ce separateur va permettre de commencer ici une deuxieme Ajax )] @@CS_FORM@@
<:couteauprive:urls_choix_objet:>
  <:bouton_chercher:>
<:couteauprive:urls_titre_objet:>
<:couteauprive:urls_url_objet:>
[(#VAL{<:couteauprive:urls_url_calculee:>}|replace{@type@,#ENV*{type_urls}})]
 
||
fonds/en_travaux.html000066600000006700151452625100010727 0ustar00#CACHE{0} [(#ENV*{titre})] [(#REM) Balise permettant aux plugins d'inserer des appels javascript ou css ; C'est ici que SPIP va inserer l'appel de la librairie jQuery Et appeler a la fin compacte_head pour agreger et compacter tout le head dans des fichiers statiques si l'option est cochee dans Configuration ] #INSERT_HEAD [(#REM)
Admins seuls en prive : #EVAL{_en_travaux_PRIVE}
Admins admins en public : #EVAL{_en_travaux_ADMIN}
#SESSION{id_auteur}. #SESSION{nom}
form_login : #ENV*{form_login}
espace prive : #ENV*{prive} - #URL_ECRIRE ]

[(#ENV*{titre})]

[(#EVAL{_en_travaux_MESSAGE}|propre)] [(#ENV*{prive}|=={non}|oui)[(#ENV*{form_login}|=={non}|oui) ]] [(#REM) Cas SPIP 2.0 permettant d'acceder a l'espace prive ] [(#ENV*{prive}|=={oui}|oui)[(#SESSION{id_auteur}|non) ][(#SESSION{id_auteur}|oui) ]]
[(#ENV*{form_login}|=={oui}|oui)
#LOGIN_PUBLIC
]
fonds/visiteurs_connectes.html000066600000000574151452625100012654 0ustar00#CACHE{#ENV*{cache,60}} [(#VAL{_CS_visiteurs_connectes}|defined|oui) #SET{nb,#VAL{cs_compter_visiteurs}|filtrer|cs_span{class='cs_nb_visiteurs'}} #SET{ch,couteau:visiteurs_connectes} [(#VAL{visiteurs_connectes}|_T|=={visiteurs connectes}|non)#SET{ch,visiteurs_connectes}] [[(#ENV*{p,1}|oui)

](#GET{ch}|_T{#ARRAY{nb,#GET{nb}}})[(#ENV*{p,1}|oui)

]] ]fonds/type_urls_liste.html000066600000001620151452625100011775 0ustar00#SET{a,#VAL{91}|chr} #SET{b,#VAL{93}|chr} <:couteau:urls_propres_objet:> #GET{a}[ (#ENV{type}|=={#TYPE}|?{#TYPE})][(#ENV{type}|=={#TYPE}|non) #GET{a}#TYPE->[(#SELF|parametre_url{debut_urls,''}|parametre_url{type,#TYPE})]#GET{b}] [ - #GET{a}(#ENV{type}|?{<:couteauprive:tous|strtolower:>})->[(#SELF|parametre_url{type,''})]#GET{b}] #GET{b} |[#TYPE ##ID_OBJET->[(#ID_OBJET|cs_url_publique{#TYPE})]]|'}>#URL[ (#DATE|>{#VAL{Y-m-d H:i:s}|date}|oui) (<:couteau:url_verrouillee:>)] [(#SET{del,#ID_OBJET|concat{',',#TYPE,',',#URL}|base64_encode})] [x|<:lien_supprimer:>->[(#SELF|replace{'\|',%7C}|parametre_url{suppr,#GET{del}})]]| #PAGINATION fonds/decoupe.html000066600000007631151452625100010203 0ustar00[(#REM) champs disponibles : artpage, derniere_page, items, self etendue : nombre minimum de pages pour la pagination etendue : << < 1 2 3 4 > >> (si les images debut.gif et debut_off.gif ne sont pas trouvees, alors ce modele utilise un "double precedent.gif" idem pour fin.gif) ] #SET{etendue,4} #SET{prec_off,#CHEMIN{img/decoupe/precedent_off.gif}} #SET{prec_on,#CHEMIN{img/decoupe/precedent.gif}} #SET{precpage,#ENV*{artpage}|moins{1}} #SET{suiv_off,#CHEMIN{img/decoupe/suivant_off.gif}} #SET{suiv_on,#CHEMIN{img/decoupe/suivant.gif}} #SET{suivpage,#ENV*{artpage}|plus{1}} #SET{debut_off,#CHEMIN{img/decoupe/debut_off.gif}} #SET{debut_on,#CHEMIN{img/decoupe/debut.gif}} #SET{fin_off,#CHEMIN{img/decoupe/fin_off.gif}} #SET{fin_on,#CHEMIN{img/decoupe/fin.gif}} [(#ENV*{artpage}|=={1}|oui) [(#ENV*{derniere_page}|>={#GET{etendue}}|oui) [(#GET{debut_off}|oui) <:couteau:page_debut:> ] [(#GET{debut_off}|non) <:couteau:page_debut:><:couteau:page_debut:> ] ] <:couteau:page_precedente:> ] [(#ENV*{artpage}|=={1}|non) [(#ENV*{derniere_page}|>={#GET{etendue}}|oui) [(#GET{debut_on}|oui) <:couteau:page_debut:> ] [(#GET{debut_on}|non) <:couteau:page_debut:><:couteau:page_debut:> ] ] <:couteau:page_precedente:> ] [(#ENV*{items})] [(#ENV*{artpage}|=={#ENV*{derniere_page}}|oui) <:couteau:page_suivante:> [(#ENV*{derniere_page}|>={#GET{etendue}}|oui) [(#GET{fin_off}|oui) <:couteau:page_fin:> ] [(#GET{fin_off}|non) <:couteau:page_fin:><:couteau:page_fin:> ] ] ] [(#ENV*{artpage}|=={#ENV*{derniere_page}}|non) <:couteau:page_suivante:> [(#ENV*{derniere_page}|>={#GET{etendue}}|oui) [(#GET{fin_on}|oui) <:couteau:page_fin:> ] [(#GET{fin_on}|non) <:couteau:page_fin:><:couteau:page_fin:> ] ] ]fonds/glossaire_css.html000066600000001103151452625100011403 0ustar00[(#REM) champs disponibles : id_mot (pour une boucle MOTS eventuellement) titre (multi ready) texte (safehtml) descriptif (safehtml) les spans indispensables : .gl_dl : enveloppe .gl_dt : titre .gl_dd : definition par defaut : la definition affichee est le texte du mot si le descriptif est vide dans la definition, les balises sont retirees ] [(#ENV*{titre})] [(#ENV*{descriptif}|?{#ENV*{descriptif},#ENV*{texte}}|replace{'(.*?)','$1'})] fonds/tri_auteurs.html000066600000002416151452625100011121 0ustar00#CACHE{0} [(#REM) champs disponibles : id_article il faut 2 auteurs minimum ] #SET{nb,#TOTAL_BOUCLE|plus{1}} #SET{val,javascript:document.getElementsByName('bp_auteur')[0].value} #SET{desc, #EVAL{defined('_SPIP30000')?chemin_image('tri-asc-16.png'):_DIR_IMG_PACK.'descendre-16.png'}} #SET{mont, #EVAL{defined('_SPIP30000')?chemin_image('tri-desc-16.png'):_DIR_IMG_PACK.'monter-16.png'}}
#COMPTEUR_BOUCLE. #NOM [(#COMPTEUR_BOUCLE|!={#GET{nb}}|oui) ] [(#COMPTEUR_BOUCLE|!={1}|oui) ]
fonds/format_spip.html000066600000001164151452625100011075 0ustar00#SET{i,0} [(#REM) le titre du bloc ] @TITRE@=[(#GET{i}|>{1}|?{couteau:textes_formatspip,couteau:texte_formatspip}|_T)] fonds/sommaire.html000066600000001562151452625100010370 0ustar00[(#REM) Ce fond est surchargeable dans vos squelettes. Utilisation d'un cookie pour stocker l'etat du sommaire au moment de quitter la page. Champs disponibles : fond_css : 'avec' ou 'sans' sommaire : les liens du sommaire en
  • Indispensable :
    et
      places a la suite l'un de l'autre Par defaut : sommaire deplie Pour un sommaire replie a la premiere visite de la page : - ajouter la classe 'cs_sommaire_replie' a :
      - ajouter la classe 'cs_sommaire_invisible' a :
        ]
          <:couteau:sommaire_titre:>  
          [(#ENV*{sommaire})]
        svn.revision000066600000000531151452625100007136 0ustar00 Origine: file:///home/svn/repository/spip-zone/_plugins_/couteau_suisse Revision: 60294 Dernier commit: 2012-04-11 00:01:29 +0200 file:///home/svn/repository/spip-zone/_plugins_/couteau_suisse 60294 2012-04-11 00:01:29 +0200 inc/cs_outils.php000066600000037451151452625100010051 0ustar00,ie', '_T("$1")', $outil['nom']); // $outil['surcharge'] n'est pas encore renseigne si la fonction d'installation est surchargee if(isset($outil['surcharge']) || (function_exists($outil_.'_installe') && $outil['surcharge']=1)) $outil['nom'] = $outil['nom'].' *'; if(isset($outil['perso'])) $outil['nom'] = ''.$outil['nom'].''; if(isset($outil['code:jq'])) $outil['jquery']='oui'; $outil['actif'] = isset($metas_outils[$outil['id']])?@$metas_outils[$outil['id']]['actif']:0; if(isset($outil['contrib']) && $outil['contrib']) $metas_outils[$outil['id']]['contrib'] = $outil['contrib']; // si SPIP est trop ancien ou trop recent... if(cs_version_erreur($outil)) { $metas_outils[$outil['id']]['actif'] = $outil['actif'] = 0; } // au cas ou des variables sont presentes dans le code $outil['variables'] = array(); $outil['nb_variables'] = 0; // ces 2 lignes peuvent initialiser des variables dans $metas_vars ou $metas_vars_code if(isset($outil['code:spip_options'])) $outil['code:spip_options'] = cs_parse_code_php($outil['code:spip_options']); if(isset($outil['code:options'])) $outil['code:options'] = cs_parse_code_php($outil['code:options']); if(isset($outil['code:fonctions'])) $outil['code:fonctions'] = cs_parse_code_php($outil['code:fonctions']); } // cette ligne peut utiliser des variables dans $metas_vars ou $metas_vars_code return $description_outil($outil_, 'admin_couteau_suisse', $modif); } // renvoie la configuration du pack actuel function cs_description_pack() { if(!isset($GLOBALS['cs_pack_actuel'])) return ''; return debut_cadre_relief('', true) . "

        - " . _T('couteauprive:pack_titre') . '

        ' . ((strlen($temp = cs_action_rapide('pack')))?"
        $temp
        ":'') . propre(_T('couteauprive:pack_descrip', array('pack'=> _T('couteauprive:pack_actuel', array('date'=>cs_date())))) . "\n\n" . _T('couteauprive:contrib', array('url'=>'[->'._URL_CONTRIB.'2552]'))) . '
        ' . fin_cadre_relief(true); } // renvoie (pour la nouvelle interface) la description d'un outil function description_outil2($outil_id) { if(!strlen($outil_id)) return _T('couteauprive:outils_cliquez'); global $outils, $metas_vars, $metas_outils; include_spip('cout_utils'); // remplir $outils (et aussi $cs_variables qu'on n'utilise pas ici); include_spip('config_outils'); cs_log(" -- description_outil2($outil_id) - Appel de config_outils.php : nb_outils = ".count($outils)); cs_log(" -- appel de charger_fonction('description_outil', 'inc') et de description_outil($outil_id) :"); $description_outil = charger_fonction('description_outil', 'inc'); $descrip = cs_initialisation_d_un_outil($outil_id, $description_outil, true); include_spip('inc/presentation'); include_spip('inc/texte'); include_spip('public/parametrer'); // fonctions pour les pipelines $s = '
        '; $outil = $outils[$outil_id]; unset($outils); $actif = $outil['actif']; $puce = $actif?'puce-verte.gif':'puce-rouge.gif'; $titre_etat = _T('couteauprive:outil_'.($actif?'actif':'inactif')); $nb_var = intval($outil['nb_variables']); // cette valeur par defaut n'est pas definie sous SPIP 1.92 // constante abandonnee sous SPIP 3.0 if(!defined('_SPIP30000')) @define('_ID_WEBMESTRES', 1); if(!strlen($outil['id']) || !autoriser('configurer', 'outil', 0, NULL, $outil)) return $s . _T('info_acces_interdit') . '
        '; $s .= "

        \"$titre_etat\" " . $outil['nom'] . '

        '; $s .= '
        '; if($nb_var) $s .= '' . _T('couteauprive:par_defaut') . ' | '; if(!$actif) $s .= '' . _T('couteauprive:outil_cacher') . ' | '; $act = $actif?'des':''; $s .= ''._T("couteauprive:outil_{$act}activer")."
        "; if(strlen($temp = cs_action_fichiers_distants($outil) . cs_action_rapide($outil_id, $actif))) $s .= "
        $temp
        "; $s .= cs_nettoie(propre($descrip)); $serial = serialize(array_keys($outil)); $p = ''; if($b=cs_balises_traitees($outil_id, '*, #')) $p .= '

        ' . _T('couteauprive:detail_balise_etoilee', array('bal' => $b.'*')) . '

        '; if($actif && isset($outil['code:spip_options']) && strlen($outil['code:spip_options']) && ($outil_id<>'cs_comportement')) $p .= '

        ' . _T('couteauprive:detail_spip_options'.(defined('_CS_SPIP_OPTIONS_OK')?'_ok':''), array('lien'=>description_outil_liens_callback(array(1=>'cs_comportement')))) . '

        '; if(isset($outil['jquery']) && $outil['jquery']=='oui') $p .= '

        ' . _T('couteauprive:detail_jquery2') . '

        '; if(isset($outil['auteur']) && strlen($outil['auteur'])) $p .= '

        ' . _T('auteur') .' '. ($outil['auteur']) . '

        '; if(isset($outil['contrib']) && strlen($outil['contrib'])) $p .= '

        ' . _T('couteauprive:contrib', array('url'=>'[->'._URL_CONTRIB.$outil['contrib'].']')) . '

        '; return $s . propre($p) . detail_outil($outil_id) . '
      '; } // met a jour les outils caches/interdits et renvoie deux listes d'outils actifs et inactifs function liste_outils() { global $outils; $id = $nb_actifs = 0; $categ = array(); $metas_caches = isset($GLOBALS['meta']['tweaks_caches'])?unserialize($GLOBALS['meta']['tweaks_caches']):array(); foreach($outils as $outil) { // liste des categories if(!isset($categ[$cat=&$outil['categorie']])) { $tmp = _T('couteauprive:categ:'.$cat); if($tmp{1}=='.') $tmp='0'.$tmp; // classement sur deux chiffres $categ[$cat] = strncmp($tmp, 'categ', 5)==0?$cat:$tmp; } // ressensement des autorisations if(!autoriser('configurer', 'outil', 0, NULL, $outil)) $outils[$outil['id']]['interdit'] = $metas_caches[$outil['id']]['cache'] = 1; } // une constante : facon rapide d'interdire des lames a la manipulation if(defined('_CS_OUTILS_CACHES')) foreach (explode(':',_CS_OUTILS_CACHES) as $o) $outils[$o]['interdit'] = $metas_caches[$o]['cache'] = 1; asort($categ); $results_actifs = $results_inactifs = ''; foreach($categ as $i=>$c) { $s_actifs = $s_inactifs = array(); foreach($outils as $outil) if($outil['categorie']==$i) { $test = $outil['actif']?'s_actifs':'s_inactifs'; $hide = !$outil['actif'] && isset($metas_caches[$outil['id']]['cache']); if(!$hide) ${$test}[] .= $outil['nom'] . '|' . $outil['index'] . '|' . $outil['id']; } $nb_actifs += count($s_actifs); foreach(array('s_actifs', 's_inactifs') as $temp) { sort(${$temp}); $reset=_request('cmd')=='resetjs'?"\ncs_EffaceCookie('sous_liste_$id');":''; $titre = " (".count(${$temp}).")"; preg_match(',[0-9. ]*(.*)$,', $c, $reg); $titre = "
      $reg[1]$titre
      "; $href = generer_url_ecrire(_request('exec'),"cmd=descrip&outil="); foreach(${$temp} as $j=>$v) ${$temp}[$j] = preg_replace(',^(.*)\|(.*)\|(.*)$,', '$1', $v); ${$temp} = join("
      \n", ${$temp}); if(strlen(${$temp})) ${'result'.$temp} .= $titre . "
      " . ${$temp} . '
      '; $id++; } } $fieldset = '
      ' . '
      ' . $fieldset . 'red;">' . _T('couteauprive:outils_inactifs') . '' . $results_inactifs . '
    ' . '' . '' . '
    ' . '' . '<->' . '

    (0)

    ' . '' . ' X ' . '
    ' . '
    ' . $fieldset . '#22BB22;">' . _T('couteauprive:outils_actifs') . '' . $results_actifs . '' . '' . '
    '); } // renvoie les details techniques d'un outil function detail_outil($outil_id) { global $outils; $outil = &$outils[$outil_id]; $div = '
    '; if(cs_version_erreur($outil)) return $div . _T('couteauprive:erreur:version') . '
    '; $details = $a = array(); foreach(array('spip_options', 'options', 'fonctions', 'js', 'jq', 'css') as $in) if(isset($outil['code:'.$in])) $a[] = _T('couteauprive:code_'.$in); if(count($a)) $details[] = _T('couteauprive:detail_inline') . ' ' . join(', ', $a); $a = array(); foreach(array('.php', '_options.php', '_fonctions.php', '.js', '.js.html', '.css', '.css.html') as $ext) if(find_in_path('outils/'.($temp=$outil_id.$ext))) $a[] = $temp; if(count($a)) $details[] = _T('couteauprive:detail_fichiers') . ' ' . join(', ', $a); if($b=cs_balises_traitees($outil_id)) $details[] = _T('couteauprive:detail_traitements') . $b; $serkeys = serialize(array_keys($outil)); if(preg_match_all(',(pipeline|pipelinecode):([a-z_]+),', $serkeys, $regs, PREG_PATTERN_ORDER)) $details[] = _T('couteauprive:detail_pipelines') . ' ' . join(', ', array_unique($regs[2])); if($outil['nb_disabled']) $details[] = _T('couteauprive:detail_disabled') . ' ' . $outil['nb_disabled']; if(isset($outil['fichiers_distants'])) { $a = array(); foreach($outil['fichiers_distants'] as $i) $a[] = basename($outil[$i]); $details[] = _T('couteauprive:detail_fichiers_distant') . ' ' . join(', ', $a); } if($outil['surcharge']) $details[] = '* ' . _T('couteauprive:detail_surcharge') . ' ' . _T('item_oui'); if(count($details)) return $div . join('
    ', $details) . ''; return ''; } function cs_balises_traitees($outil_id, $join=', #') { global $outils; if(preg_match_all(',traitement:([A-Z_]+),', serialize(array_keys($outils[$outil_id])), $regs, PREG_PATTERN_ORDER)) return ' #' . join($join, array_unique($regs[1])); return ''; } // renvoie les boutons eventuels d'action rapide function cs_action_rapide($outil_id, $actif=true) { include_spip('inc/texte'); $f = "{$outil_id}_action_rapide"; include_spip("outils/$f"); if(!function_exists($f)) return ''; if(strlen($f = trim($f()))) { // si inactif... if(!$actif) { if(preg_match_all(',]*>(.*?):?\s*,', $f, $regs) || preg_match_all(',]*>(.*?):?\s*

    ,', $f, $regs)) // on ne conserve que les ou

    $f = '

    • ' . join("
    • ", $regs[1]) . '
    '; } $info = '' . definir_puce() . ' ' . _T('couteauprive:action_rapide'.($actif?'':'_non')) . ""; return "
    $info
    $f
    "; } return ''; } // gere les fichiers distants d'un outil function cs_action_fichiers_distants(&$outil, $forcer=false, $tester=false) { if(!isset($outil['fichiers_distants'])) return ''; $lib = sous_repertoire(_DIR_PLUGIN_COUTEAU_SUISSE, 'lib'); $actif = $outil['actif']; $a = array(); foreach($outil['fichiers_distants'] as $i) { $erreur = false; $res_pipe = ''; $dir = sous_repertoire($lib, $outil['id']); // retrait des arguments preg_match('/[^?]*/', basename($outil[$i]), $reg); $f = 'distant_' . $reg[0]; // 1er appel : envoi du nom du fichier $file = pipeline('fichier_distant', array('outil'=>$outil['id'], 'actif'=>$actif, 'fichier_local'=>$dir.$f)); $file = $file['fichier_local']; $f = basename($file); $size = ($forcer || @(!file_exists($file)) ? 0 : filesize($file)); if($size) $statut = _T('couteauprive:distant_present', array('date'=>cs_date_long(date('Y-m-d H:i:s', filemtime($file))))); elseif($actif || $forcer) { include_spip('inc/distant'); if($distant = recuperer_page($outil[$i])) { // 2e appel : envoi du texte $distant = pipeline('fichier_distant', array('outil'=>$outil['id'], 'fichier_local'=>$file, 'fichier_distant'=>$outil[$i], 'message'=>'', 'texte'=>$distant, 'actif'=>$actif)); $file = $distant['fichier_local']; $message = $distant['message'] . "\n_ " . _T('couteauprive:copie_vers', array('dir'=>dirname($distant['fichier_local']).'/')); $distant = $distant['texte']; if(preg_match(',\.php\d?$,', $file)) { $test = preg_replace(',^.*?\<\?php|\?\>.*?$,', '', $distant); if(!@eval("return true; $test")) $distant = false; else $distant = ecrire_fichier($file, '<'."?php\n\n".trim($test)."\n\n?".'>'); } else $distant = ecrire_fichier($file, $distant); } if($distant) $statut = ''._T('couteauprive:distant_charge').''; else $erreur = $statut = ''._T('couteauprive:distant_echoue').''; } else $erreur = $statut = _T('couteauprive:distant_inactif'); $a[] = "[{$f}->{$outil[$i]}]\n_ ".$statut.$message; } if($tester) return $a; $a = '
    • ' . join("
    • ", $a) . '
    '; $b = ($actif || !$erreur)?'rss_actualiser':($erreur?'distant_charger':false); $b = $b?"\n

    ':''; return ajax_action_auteur('action_rapide', 'fichiers_distants', 'admin_couteau_suisse', "arg=$outil[id]|fichiers_distants&cmd=descrip#cs_action_rapide", '

    ' . _T('couteauprive:distant_aide') . '

    ' . '

    ' . definir_puce() . ' ' . _T('couteauprive:detail_fichiers_distant') . '

    ' . '
    ' . propre($a) . '
    ' . $b); } ?>inc/description_outil.php000066600000032301151452625100011571 0ustar00$cs_variable['nom'], 'outil'=>$outil))?'':' disabled="disabled"'; // si ce n'est qu'une simple initialisation, on sort if(!$modif) return ''; $nombre = @$cs_variable['format']==_format_NOMBRE; // calcul du commentaire if($actif && isset($cs_variable['commentaire'])) { eval('$comment = '.str_replace('%s',cs_php_format($valeur, !$nombre),$cs_variable['commentaire']).';'); if($comment) $comment = "

    $comment

    "; } else $comment = ''; // si la variable necessite des boutons radio if(is_array($radios = &$cs_variable['radio'])) { if(!$actif) { $code = _T($radios[$valeur]); return "" . $label . (strlen($valeur)?ucfirst($code):' -'); } $res = "$label
      "; $i = 0; $nb = isset($cs_variable['radio/ligne'])?intval($cs_variable['radio/ligne']):0; foreach($radios as $code=>$traduc) { $br = (($nb>0) && ( ++$i % $nb == 0))?'
      ':''; $res .= "
    • $br"; } return $res.'
    '.$comment._VAR_OUTIL; } // si la variable necessite un select elseif(is_array($select = &$cs_variable['select'])) { if(!$actif) { $code = _T($select[$valeur]); return "" . $label . (strlen($valeur)?ucfirst($code):' -'); } $res = "$label '.$comment._VAR_OUTIL; } // ... ou une case a cocher elseif(isset($cs_variable['check'])) { if(!$actif) return $label._T($cs_variable['check'])._T($valeur?'couteauprive:2pts_oui':'couteauprive:2pts_non'); return $label.'' . $comment._VAR_OUTIL; } // ... ou un textarea ... ou une case input if(!$actif) return $label.''.(strlen($valeur)?nl2br(echapper_tags($valeur)):' '._T('couteauprive:variable_vide')).''; $len = $nombre?6:0; $width = $len?'':'style="width:98.8%;" '; $lignes = !isset($cs_variable['lignes']) || $nombre?0:strval($cs_variable['lignes']); return $label . ( $lignes < 2 // empechera SPIP de modifier le contenu des ou ' ) . $comment._VAR_OUTIL; } // callback sur les labels de zones input ; format : [[label->qq chose]] // regexpr : ,\[\[([^][]*)->([^]]*)\]\],msS function description_outil_input1_callback($matches) { // pas de label : [[->qq chose]] if(!strlen($matches[1])) return "
    $matches[2]
    "; // retour a la ligne : [[-->qq chose]] if($matches[1]=='-') return "
    $matches[2]
    "; // format complet : [[label->qq chose]] return "
    $matches[1]
    $matches[2]
    "; } // callback sur les labels de zones input en utilisant _T('couteauprive:label:variable') ; format [[qq chose %variable% qq chose]] // regexpr : ,\[\[((.*?)%([a-zA-Z_][a-zA-Z0-9_]*)%(.*?))\]\],msS // ici, renseignement de la globale $cs_input_variable function description_outil_input2_callback($matches) { global $cs_input_variable; $cs_input_variable[] = $matches[3]; return "
    <:label:$matches[3]:>
    $matches[1]
    "; } function description_outil_liens_callback($matches) { global $outils; $nom = isset($outils[$matches[1]]['nom'])?$outils[$matches[1]]['nom']:couteauprive_T($matches[1].':nom'); if(strpos($nom, '<:')!==false) $nom = preg_replace(',<:([:a-z0-9_-]+):>,ie', '_T("$1")', $nom); return '$nom"; } function description_outil_label_callback($matches) { global $cs_variables; return isset($cs_variables[$matches[1]]['label'])?$cs_variables[$matches[1]]['label']:_T('couteauprive:label:'.$matches[1]); } function cs_input_variable_callback($matches) { $a = ' valeur_'.$matches[1].'_'; $tmp = str_replace('/',$a, $matches[3]); return "
    "; } // remplacement des liens vers un autre outil function description_outil_liens($res) { return strpos($res,'[.->')===false?$res :preg_replace_callback(',\[\.->([a-zA-Z_][a-zA-Z0-9_-]*)\],', 'description_outil_liens_callback', $res); } // renvoie la description de $outil_ : toutes les %variables% ont ete remplacees par le code adequat function inc_description_outil_dist($outil_, $url_self, $modif=false) { global $outils, $cs_variables, $metas_vars; $outil = &$outils[$outil_]; $actif = $outil['actif']; $index = $outil['index']; //cs_log("inc_description_outil_dist() - Parse la description de '$outil_'"); // la description de base est a priori dans le fichier de langue $descrip = isset($outil['description'])?$outil['description']:couteauprive_T($outil['id'].':description'); // ajout des variables liees a la barre typo if(defined('_DIR_PLUGIN_PORTE_PLUME') && ( isset($outil['pipeline:porte_plume_barre_pre_charger']) || isset($outil['pipeline:porte_plume_cs_pre_charger']) || isset($outil['pipelinecode:porte_plume_barre_pre_charger']) || isset($outil['pipelinecode:porte_plume_cs_pre_charger'])) && count($barres = cs_pp_liste_barres())) { $descrip .= "\n\n@puce@ "._T('couteauprive:barres_typo_intro'); $i=0; foreach($barres as $f=>$b) { $nom = "pp_{$b}_$outil[id]"; $descrip .= ($i?'[[->':'[[')."%$nom%]]"; add_variable( array( 'nom' => $nom, 'check' => ($b=='edition' || $b=='forum')?'couteauprive:barres_typo_'.$b:$f, 'defaut' => 1, // par defaut les boutons seront toujours inseres 'label' => $i++?NULL:'@_CS_CHOIX@', )); } } if (strpos($descrip, '<:')!==false) { if(!isset($outil['perso'])) // lames natives : reconstitution d'une description eventuellement morcelee // exemple : <:mon_outil:3:> est remplace par _T('couteauprive:mon_outil:description3') $descrip = preg_replace_callback(',<:([a-z_][a-z0-9_-]*):([0-9]*):>,i', create_function('$m','return _T("couteauprive:$m[1]:description$m[2]");'), $descrip); // chaines de langue personnalisees $descrip = preg_replace(',<:([:a-z0-9_-]+):>,ie', '_T("$1")', $descrip); } // envoi de la description en pipeline # list(,$descrip) = pipeline('init_description_outil', array($outil_, $descrip)); // globale pour la callback description_outil_input2_callback global $cs_input_variable; $cs_input_variable = array(); // remplacement des zones input de format [[label->qq chose]] $descrip = preg_replace_callback(',\[\[([^][]*)->([^]]*)\]\],msS', 'description_outil_input1_callback' , $descrip); // remplacement des zones input de format [[qq chose %variable% qq chose]] en utilisant _T('couteauprive:label:variable') comme label // la fonction description_outil_input2_callback renseigne la globale $cs_input_variable $descrip = preg_replace_callback(',\[\[((.*?)%([a-zA-Z_][a-zA-Z0-9_]*)%(.*?))\]\],msS', 'description_outil_input2_callback', $descrip); // initialisation et remplacement des variables de format : %variable% $t = preg_split(',%([a-zA-Z_][a-zA-Z0-9_]*)%,', $descrip, -1, PREG_SPLIT_DELIM_CAPTURE); $res = ''; $nb_disabled = $nb_variables = 0; $variables = array(); for($i=0;$i'.$a.'.

    '; // envoi de la description courante en pipeline include_spip("cout_define"); $res = pipeline('pre_description_outil', array('outil'=>$outil_, 'texte'=>$res, 'actif'=>$actif)); $res = $res['texte']; // recherche des blocs eventuels associes pour du masquage/demasquage foreach($cs_input_variable as $v) { $res = preg_replace_callback(",<($v)\s+valeur=(['\"])(.*?)\\2\s*>,", 'cs_input_variable_callback', $res); $res = str_replace("", '
    ', $res); } unset($cs_input_variable); // bouton 'Modifier' : en dessous du texte s'il y a plusieurs variables, a la place de _VAR_OUTIL s'il n'y en a qu'une. // attention : on ne peut pas modifier les variables si l'outil est inactif if($actif) { $bouton = "1?_T('couteauprive:modifier_vars_0'):_T('bouton_modifier'))."\" />"; if($nb_variables>1) $res .= "
    $bouton
    "; else $res = str_replace(_VAR_OUTIL, $bouton, $res); } $res = "\n
    " . str_replace(array('
      ',_VAR_OUTIL),'',$res) . '
      '; // si des variables sont trouvees ? if($nb_variables) { $variables = urlencode(serialize($variables)); // syntaxe : ajax_action_auteur($action, $id, $script, $args='', $corps=false, $args_ajax='', $fct_ajax='') $res = ajax_action_auteur('description_outil', $index, $url_self, "modif=oui&cmd=descrip&outil={$outil['id']}", "\n" . $res); } //cs_log(" FIN : inc_description_outil_dist({$outil['id']}) - {$outil['nb_variables']} variables(s) trouvee(s)"); // remplacement en deux passes des labels en doublon for($i=0;$i<2;$i++) if(strpos($res,'<:label:')!==false) $res = preg_replace_callback(',<:label:([a-zA-Z_][a-zA-Z0-9_-]*):>,', 'description_outil_label_callback', $res); // remplacement des blocs avec style. ex : bla bla $res = preg_replace(',,','', preg_replace(',,','
      ', $res)); // remplacement des inputs successifs sans label : [[%var1%]][[->%var2%]] ou [[%var1%]][[-->%var2%]] $res = preg_replace(',(
      )?
      ( ?
      ),', '$2', $res); // remplacement de diverses constantes $res = str_replace(array('@puce@', '@_CS_CHOIX@','@_CS_ASTER@','@_CS_PLUGIN_JQUERY192@'), array(definir_puce(), _T('couteauprive:votre_choix'), '(*)', defined('_SPIP19300')?'':_T('couteauprive:detail_jquery3')), $res); // remplacement des constantes qui restent de forme @_CS_XXXX@ if(strpos($res,'@_CS')!==false) $res = preg_replace_callback(',@(_CS_[a-zA-Z0-9_]+)@,', create_function('$matches','return defined($matches[1])?constant($matches[1]):(\' (\'._T(\'couteauprive:outil_inactif\').\')\');'), $res); // remplacement des liens vers un autre outil $res = description_outil_liens($res); // envoi de la description finale en pipeline # list(,$res) = pipeline('post_description_outil', array($outil_, $res)); return cs_ajax_outil_greffe("description_outil-$index", $res); } ?>inc/actions_compat.php000066600000004421151452625100011037 0ustar00> '._T('couteauprive:vars_modifiees')." <
      $corps" :"\n
      $corps\n
      \n"; } include_spip('inc/actions'); if(!function_exists('ajax_action_auteur')) { // Retourne un formulaire d'execution de $action sur $id, // revenant a l'envoyeur $script d'arguments $args. // Utilise Ajax si dispo, en ecrivant le resultat dans le innerHTML du noeud // d'attribut id = $action-$id (cf. AjaxSqueeze dans layer.js) function ajax_action_auteur($action, $id, $script, $args='', $corps=false, $args_ajax='', $fct_ajax='') { if (strpos($args,"#")===FALSE) $ancre = "$action-" . intval($id); else list($args, $ancre) = explode("#",$args); // Formulaire (POST) // methodes traditionnelle et ajax a unifier... if (is_string($corps)) { // Methode traditionnelle if (_SPIP_AJAX !== 1) return redirige_action_post($action, $id, $script, "$args#$ancre", $corps); // Methode Ajax else { if ($args AND !$args_ajax) $args_ajax = "&$args"; if (isset($_GET['var_profile'])) $args_ajax .= '&var_profile=1'; return redirige_action_post($action, $id, $action, "script=$script$args_ajax", $corps, (" onsubmit=" . ajax_action_declencheur('this', $ancre, $fct_ajax))); } } // Lien (GET) else { $href = redirige_action_auteur($action, $id, $script, "$args#$ancre", false); if ($args AND !$args_ajax) $args_ajax = "&$args"; if (isset($_GET['var_profile'])) $args_ajax .= '&var_profile=1'; $ajax = redirige_action_auteur($action, $id, $action, "script=$script$args_ajax"); $cli = array_shift($corps); return "" . (!$corps ? $cli : ("\n$cli")) . ""; } } function ajax_action_declencheur($request, $noeud, $fct_ajax='') { if (strpos($request, 'this') !== 0) $request = "'".$request."'"; return '"return AjaxSqueeze2(' . $request . ",'" . $noeud . "'," . ($fct_ajax ? $fct_ajax : "''") . ',event)"'; } } ?>modeles/bolo.html000066600000000253151452625100010022 0ustar00#CACHE{0}[(#REM) Modele bolo inspire des travaux de Cyril Marion : http://www.spip-contrib.net/Balise-BOLO ][(#VAL{_CS_trousse_balises}|defined|oui)#BOLO{#ENV{id}}]modeles/lesauteurs.html000066600000001132151452625100011260 0ustar00[(#REM) Affiche la liste des auteurs d'un article ][(#REM) Modele pour la balise #LESAUTEURS, dans le cas des auteurs d'un article (pour un article syndique, la balise affiche directement la valeur du champ) Note pour les "Boites Privees" du Couteau Suisse (tri des auteurs) : pour que l'ordre des auteurs soit respecte, il ne faut pas de tri dans la boucle. ] [(#VAL{boites_privees_TRI_AUTEURS}|defined|non)#SET{nom,nom}] #NOMmodeles/ouvre_onglet.html000066600000001115151452625100011575 0ustar00[(#REM) Modele de controle d'ouverture d'onglets #ENV{id} : base zero : ouvre le 3e onglet de la page au moment de la construction des onglets : ouvre le 4e onglet une fois que la page est chargee ] modeles/horloge.html000066600000000727151452625100010534 0ustar00[(#REM) Modele horloge : # HORLOGE{parametre=valeur,parametre=valeur,etc.} Par defaut : # HORLOGE{format=H:i:s} parametres disponibles, tous optionnels : - format (dates PHP) - zone (timezone, pays ou nombre) - id (nombre) - balise - defaut Doc : http://www.spip-contrib.net/?article2998 ][(#VAL{_CS_horloge}|defined|oui)[(#HORLOGE{[format=(#ENV{format})],[zone=(#ENV{zone})],[id=(#ENV{id})],[balise=(#ENV{balise})],[defaut=(#ENV{defaut})]})]]cout_lancement.php000066600000030163151452625100010265 0ustar00"; } function cs_preg_quote(&$item) { $item = preg_quote($item, ','); } // lit ecrit les metas et initialise $cs_metas_pipelines // cette fonction est appellee par couteau_suisse_options a chaque hit de la page function cs_initialisation($forcer=false, $init_includes=true) { global $cs_metas_pipelines, $metas_outils; static $deja_passe_ici = 0; if($log=defined('_LOG_CS')) { $rand = sprintf('[#%04x] ', rand()); if(!$deja_passe_ici) { $mysql = function_exists('mysql_get_client_info')?' - MYSQL v'.mysql_get_client_info():''; cs_log("#### 1er PASSAGE $rand################################# - \$forcer = ".intval($forcer) . "\n{$rand}PHP v".phpversion()."$mysql - base SPIP v$GLOBALS[spip_version_base] - code SPIP v$GLOBALS[spip_version_code]"); } } $deja_passe_ici++; if($log) cs_log("{$rand}cs_initialisation($forcer) : Passage #$deja_passe_ici"); // si les metas ne sont pas lus, on les lit if (isset($GLOBALS['meta']['tweaks_pipelines'])) { $cs_metas_pipelines = unserialize($GLOBALS['meta']['tweaks_pipelines']); if($log) cs_log("$rand -- cs_metas_pipelines = ".(is_array($cs_metas_pipelines)?join(', ',array_keys($cs_metas_pipelines)):'')); // liste des actifs & definition des constantes attestant qu'un outil est bien actif : define('_CS_monoutil', 'oui'); $liste = array(); foreach($metas_outils as $nom=>$o) if(isset($o['actif']) && $o['actif']) { $liste[]=$nom; @define('_CS_'.$nom, 'oui'); } $liste2 = join(', ', $liste); if($log) cs_log("$rand -- ".count($liste).' outil(s) actif(s)'.(strlen($liste2)?" = ".$liste2:'')); // Vanter notre art de la compilation... // La globale $spip_header_silencieux permet de rendre le header absent pour raisons de securite if (!headers_sent() && (!isset($GLOBALS['spip_header_silencieux']) OR !$GLOBALS['spip_header_silencieux'])) @header('X-Outils-CS: '.$liste2); if($log) cs_log($rand.($forcer?"\$forcer = true":"cs_initialisation($forcer) : Sortie car les metas sont presents")); // Les pipelines sont en meta, tout va bien on peut partir d'ici. if (!$forcer) return; } // ici on commence l'initialisation de tous les outils $GLOBALS['cs_init'] = 1; global $outils, $metas_vars, $metas_outils; include_spip('inc/meta'); include_spip('cout_utils'); // remplir $outils (et aussi $cs_variables qu'on n'utilise pas ici); include_spip('config_outils'); // verifier que tous les outils actives sont bien presents foreach($metas_outils as $nom=>$o) if(isset($o['actif']) && $o['actif'] && !isset($outils[$nom])) unset($metas_outils[$nom]); ecrire_meta('tweaks_actifs', serialize($metas_outils)); ecrire_metas(); // stocker les types de variables declarees global $cs_variables; $metas_vars['_chaines'] = $cs_variables['_chaines']; $metas_vars['_nombres'] = $cs_variables['_nombres']; // au cas ou un outil manipule des variables $description_outil = charger_fonction('description_outil', 'inc'); // completer les variables manquantes et incorporer l'activite lue dans les metas if($log) cs_log("$rand -- foreach(\$outils) : cs_initialisation_d_un_outil()"); // initialiser chaque outil include_spip('inc/cs_outils'); foreach($outils as $outil) cs_initialisation_d_un_outil($id = $outil['id'], $description_outil, false); // installer $cs_metas_pipelines $cs_metas_pipelines = array(); if($log) cs_log("$rand -- cs_initialise_includes()... couteau_suisse_fonctions.php sera peut-etre inclus."); // creer les includes (config/mes_options, mes_options et mes_fonctions) et le fichier de controle pipelines.php if($init_includes) cs_initialise_includes(count($metas_outils)); // verifier le fichier d'options _FILE_OPTIONS (ecrire/mes_options.php ou config/mes_options.php) // De'sactive' par de'faut. Activer l'outil "Comportements du Couteau Suisse" pour ge'rer cette option. cs_verif_FILE_OPTIONS($metas_outils['cs_comportement']['actif'] && $metas_vars['spip_options_on'], true); // sauver la configuration cs_sauve_configuration(); // en metas : outils actifs if($log) cs_log("$rand -- ecriture metas"); ecrire_meta('tweaks_actifs', serialize($metas_outils)); // en metas : variables d'outils ecrire_meta('tweaks_variables', serialize($metas_vars)); // en metas : code inline pour les pipelines, mes_options et mes_fonctions; ecrire_meta('tweaks_pipelines', serialize($cs_metas_pipelines)); ecrire_metas(); $GLOBALS['cs_init'] = 0; if($log) cs_log("{$rand}cs_initialisation($forcer) : Sortie"); } /* function qui determine si $texte est de type Block (true) ou Inline (false) _BALISES_BLOCS est defini dans texte.php : define('_BALISES_BLOCS', 'div|pre|ul|ol|li|blockquote|h[1-6r]|' .'t(able|[rdh]|body|foot|extarea)|' .'form|object|center|marquee|address|' .'d[ltd]|script|noscript|map|button|fieldset'); */ function cs_block($texte) { return preg_match(',(\n\n|\r\n\r\n|\r\r),', $texte) || preg_match(',[:space:]],iS', $texte); } // fonction callback pour cs_echappe_balises function cs_echappe_html_callback($matches) { return _CS_HTMLA.cs_code_echappement($matches[1], 'CS'); } // evite les transformations typo dans les balises $balises // par exemple pour , , , , '; break; case 'css': include_spip('inc/filtres'); $flux .= ''; break; } } /** * recupere le resultat du calcul d'une compilation de code de squelette (marcimat) * $coucou = $this->recuperer_code('[(#AUTORISER{ok}|oui)coucou]'); */ function cs_recuperer_code(&$code) {//, $contexte=array(), $options = array(), $connect=''){ $fond = _DIR_CS_TMP . md5($code); $base = $fond . '.html'; if(!file_exists($base) OR $GLOBALS['var_mode']=='recalcul') ecrire_fichier($base, $code); include_spip('public/assembler'); $fond = str_replace('../', '', $fond); // return recuperer_fond($fond, array('fond'=>$fond)); $f = inclure_page($fond, array('fond'=>$fond)); return $f['texte']; } /* if(defined('_LOG_CS')) cs_log("INIT : cout_pipelines, lgr=" . strlen($cs_metas_pipelines['pipelines'])); if(!$GLOBALS['cs_pipelines']) include_once(_DIR_CS_TMP.'pipelines.php'); if(defined('_LOG_CS')) cs_log(' -- sortie de cout_pipelines... cs_pipelines = ' . intval($GLOBALS['cs_pipelines'])); */ ?>action/action_rapide.php000066600000003701151452625100011341 0ustar00$v) $url = parametre_url($url, $p, $v, '&'); redirige_par_entete($url); } function action_action_rapide_dist() { $arg = _request('arg'); cs_log("INIT : action_action_rapide_dist() - Une action rapide '$arg' a ete demandee !"); $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); $redirect = _request('redirect'); if(!defined('_SPIP19300')) $redirect = urldecode($redirect); $outil = ( preg_match(',&arg=([\w_]+)\|[\w_]+,', $redirect, $regs) || preg_match(',&outil=([\w_]+),', $redirect, $regs) || preg_match(',&cmd=([\w_]+),', $redirect, $regs) )?$regs[1]:false; // au cas ou, pour redirige_par_entete() include_spip('inc/headers'); spip_log("action 'action_rapide' du Couteau suisse : $outil|$arg"); //cs_log($_POST, 'action POST='); cs_log($_GET, 'action GET='); switch($arg) { case 'fichiers_distants': // mettre a jour les fichiers distants d'un outil... // rien a faire :-) break; default: if($outil) { // fonction mon_outil_argument_action() suite a l'appel de ?action=action_rapide&arg=mon_outil|argument $fct = $outil.'_'.$arg.'_action'; cs_log("FIN : action_action_rapide_dist() - Appel de $fct()"); include_spip('outils/'.$outil.'_action_rapide'); if(function_exists($fct)) $fct(); else cs_log(" -- Erreur : fonction $fct() introuvable !"); } else cs_log(" -- Erreur : outil non renseigne !"); break; } } ?>action/description_outil.php000066600000005652151452625100012306 0ustar00$var, 'outil'=>$outils[$outil]))) { // on recupere dans le POST la nouvelle valeur de la variable $final = corriger_caracteres(_request($var)); if (in_array($var, $metas_vars['_nombres'])) $final = intval($final); spip_log("Outil du Couteau Suisse ($outil). Demande de modification sur une variable par l'auteur id=$connect_id_auteur : %$var% = $final"); // et on modifie les metas ! if(!isset($cs_variables[$var]['externe'])) $metas_vars[$var] = $final; if(isset($cs_variables[$var]['action'])) { $action = str_replace('%s', $final, $cs_variables[$var]['action']); spip_log("Outil du Couteau Suisse ($outil). Demande d'action sur cette variable : ".$action); eval($action); } } else spip_log("Outil du Couteau Suisse n$index. Modification interdite de la variable %$var% par l'auteur id=$connect_id_auteur !!"); //cs_log($metas_vars, " -- metas_vars = "); ecrire_meta('tweaks_variables', serialize($metas_vars)); ecrire_metas(); cs_log(" -- donc, reinitialisation forcee !"); // on reinitialise tout, au cas ou ... include_spip('inc/invalideur'); suivre_invalideur("1"); # tout effacer purger_repertoire(_DIR_SKELS); purger_repertoire(_DIR_CACHE); include_spip('cout_utils'); cs_initialisation(true); cs_log(" FIN : action_description_outil_post(Array($index)) - Reinitialisation forcee terminee."); } ?>lisezmoi.txt000066600000000102151452625100007136 0ustar00Toutes les infos sur : http://www.spip-contrib.net/?article2166img/filets/degrade.png000066600000011667151452625100010727 0ustar00PNG  IHDR ʝd pHYs  ~iIDATxɎuϝcȹVũvLmð!ق0[[ÀV6` j(6lEXcfdw~{E/Ȍ'=ߍ wrY1|T<| 5_6RL+n91;tS[Z}֥ @cg9E6=e6'Ӈʎ+5 M6z8!UtkYjy,gM `2N_ި>NO;v ɭ;O?Rg㙻|ju?#._x`lPrۻ g= N=x*9lir`8$+џJHm'yvs-;ޖRNY,w |>(OY@S8K6mGjC@I=@F/2&q^=Q6#dIen:OWj64:>Ft is˨燗Թ[mUϋ˛iXhxx>?p@Qg;7Y_ԭ@^E1,Fq]YqYpۨ-԰l˼ |65b@H,&c`f J9hyz"" yJQ1cAv$[^˖罴IG;mzk}R7*+Q,BeJN?c'j;~nfO2H,2wh%&r$|Dqf44NLHn2>.e|OK7t8!2rNbG5PD{?\^'&^9xrܐ͑:ɺ\CgcHZ C]<{W[E#[i5 f.WdLƜ?H,|rW}3̥?+a˕{],UAGFu;yG?~]` `&$ %` 4*o\[D!i\ޑ0ӷvװGL`'Ji8j4{u{_뷢ua[c5 J JB"LͅCAMǑ>sdr'i}$y A7-%f,E -EâgGEʃw < #xPמ B<ZDJO}+LʇvaQ!g <:r4G˖C>Yh<4{t" +OSܪ`RB+kB !h"w_PѼ\#@]5.@!XJ SgJᕐ0!f<8͐b9!\d-IT )=Bf%C_T-!=+ DzŝYH8H&hf^%$[aJ%~rW]݌zH NJ\ Z%ȰȸJ#es:0oɊe`g"ߠgCR_fy.CX@UkEPIJUAVǕ,#щPĸ}쓁y$I Z iICD pD"iR'>l zNN]w:FSm- ޕ_Hs< Kwwh]rlĴ[᝛5&0V`6ވqj,<)C \GQ{׋Q}lG.S>8c#ˇ7hƉ?P/J:`NiVFS7cHx!|IIV+ȷ3G<]+̧{7g)tQG8һMzĭ/BT_zptbT2=\2Ѵee"F:Ĭpڈ_;w ;ne6H75KzĵL"a:'e 91@2"r i⺎FĚBL ;E:)kD@XˀHba5G.*$,r㔐ӆ%6sHX,M] #}+}ixɉf7;!<_7_ =Tc@blJAO}iǥzoXM<{w7.~* @Yem4cE$yGyIS>ۘxZ\T#jjf;_IzƲ| -n\:\f5<ʘVM]nE(F&aSd}y/On#ixn.)9vp@_'^'+L. g p@(_e[:ᰄ^}zjI8iWpB}+6:;!2ye]\ TWn/^TĤ`Z.YІ r, /A+iH i;,t귘pco]AkX_,KC4ZSHfԬdmpd4Pfa' w} L0j;VJX>^ ]9.>NJBKlb+E4:4>HAvt\2%j% c'Xp; Z8a1RIۉ\$<9Iw 7{sIgG-먤2#lEH ъt*!r:aD&R~k1Fsa]IlZ;*wԓ1VlIp7tM"< _]WQ= 7.x Q4QE> Z^qbkA-::쭻9γ}}M<.\|F`Z>9g5AГbe;E];])0Jo#K'${Y2%?RJ*4nwpOR2 KG[93uvwjmwA8q>wBңs&;Kٚl9{3讓@"B!pC07.:stqk98E"sH Gkh`XG'A-;GZW5[27cTex.-tqL- >cٝQ :$nph?KbU[GOB[d)Z=S1|7eN_`.fo9 7_f2U.gsJǫA~6* a= '͜I&?%uU$-`jڶ[ߋam^*mJI[FcڿMbڣ8#f`)39.K{c{/5ؾMm5C>4E eQ_۞=xHqqQF!%pIMVWMe^Loa.d7@Z-$L~=/KCzL.F xhjBRE$جE4:DmkH5uK $Ei~Hd]_ghLPLg,- 0m-_]Ac[gZG㙢+yzȴyK\D$%5'~1jH dsJwHY~ k~3^~=6zn}/0Zλ_i9l*C&/JBQj^1VEEEEEEE'F}ĨXN{t`IENDB`img/filets/ornement.png000066600000023767151452625100011167 0ustar00PNG  IHDR(Q`XiCCPICC Profilex}0wPEmBGh=⡘iFMQTK0.4I3鱞>"c9[qjLurgcU{+Wn-7cv/{y|#cGit簀3l7JLö$!]Iō,lR ]l!9F^$%]  W(d@4IIz*X ` Z E>rPd20Kg`kʖ#-@[OWA@٫-8L_1~ hS!F[#@ ՟T k" Q똧0(v:qF71i0u7EK3#]u[Xk|n֌mWor pnuqtaK=H>ˆO.<`Aۑwُ,9 \Xqܓ_RSf|fi~qE_ِ 3]cNΗ\vVW=q o$,l4t4?b S(N3͜HHI뙙 SMqd2RZ W}YIJxq[; Zw;۸viz\ Lޚ7C\B wwO?qmWm?hwrpbZFuO}W Ԇ*…7ٽb"cE6$dz"!0ѳfǎ{,S H IH7GY1n8̼g=sΙ3P( BP( BP( BP( BеT *;v@ ݨ@ ݨG 7o t,Ѝ tЍfNcc|Ocw;B BF6gJ)gEX*ŇNu { og ;E@B*L5{dc.\p^YfQo,ӸM}2wB@.)svޤRTš#}ǻ^0!Zc1 z;c ?i=gO5-01 !fuֵ&MTe/)AM:NL]$׎G"e?lO>U#I(eS5ƒ%\j?9Bo a1 kXa2@l^A QF^¶7̂;o)#샮mpa)Y:kJqYPr"sjƌ8J~1F# 옑+=b*=j݋(L oq DM͹7S6U!9QIU%T!*F,D`s >(F0V"Ha, s/~"hҽg@SgC+x]݈ųGQBVT/HrRRR) p_nHcB' +Ty"S1 xb@FبhoѠHԠ#yy# >@k"F W(qɹO0)ąB74eyLeDOwףDHJ)p/ygя4͸k LO9bmT y^q cRZ ] :o hz, il 4=bHyyh/y9|  %." Pon 1fh&"l:h.w0~}}=23K"gK_FXh WT广dz^ضǎFд`Qڳ UpX*dd7-˾ׂwmoczcLYI0SIDC;KQT44;۝=0O- WGX싻zJ^n^}?၎e#DqfFVU%'c]8E8Uy[8wy^0F ]OTmwڴzV{?kZ?S MlY`܋)J lܹ*e 4FŭeVsП,E[>[13C_K9+T?<@҈ᗂQ%+Rd_"ѳ:˱=t74l6(SFgcFPu՗ov˷I_cƯ)Nmtm/lܲU@p]O3yJeNv|C*6< t.>J-x %#mK&)1-s|,Ahqy ƌvG:LџgG,@@SBic.pLf[ZZ^[N}AlmU#e:bX+IJǻԼyV M4$!a*!s@N1WHDciy>7ݾQq4c4N$BmM6&կm[orXv;(X˧ؒ'~\,XNI&L[eƬ\QqZ|eJ}B SwA/s))]xjρ7KmCat|\qːDYّ3ohzT^Qf֧3$fY4JGb=X{ӭ7+тD^e)@;Rf%MmbWOp!<ɜ{f7R'z+A2.fY=B0R r_: 0ڏ%y0F|,.*."/ _F._,R&'WJOďmwDBhoZ x 4hW$2v Aݸ_ Mb~|3Y|p'Q{LQHgݟ+e?>v~f 5e%_L\ W 9@lg~?<ʻJJ0I41@>#@/VWW\txUH?YR("% 2JCaYnL* C Lv}EP:ѴpN!KB> #i5uYoS{\]{s-ՌU\\%%/b?,/< @Л۽ V{~'\h{7a3&]Y6d|.(Y۾c%nS*u>DMc<`P 2 Q')xGۮ gO,i9D#nǠi"E-*NsJ^"aZRWw+0c ^gYRwi&a5KG%T60 f&&,Rw}gZ_?G1u,Y(K=ݽ*z'*R2Q `NS^_=G--_uܔUKEIB<~܅ MJjc<((+si?͛z!:3>8.0{ՒoH)W<qPdͩ={^}E&54Ca\2պ59_Bs#I4]ó޵z.B ZiI \7E5}O-^3X/VUO4kG>|KuaṆqk_i+h蚊̅BwA%əeŸSJ0!T)?D#I64/ND5-/6mzXFM•?S\9uӈEJF?}o" v=?2 rcǓ w}tTCC)BE3 4 G1"n湜t!M ,[+I+RBDxpW6>F 㺩I+nUw׆N `cW@,B++~ G6$ݻ/]}馡z/̸ydBnW]dzҹ'~࿖fErPsla )}hӖk*Hr CJi<l)gosY`f,Ւ@$_OT{e7}z ՛ΎWL c.B r_"])vgzmB>EfMf<"`0rxEѧ6G_mYwZ.ZD(PH]ZZHby'\CgNin24vEɔ[W=R0]/ej3:d8O !0Ac C/;!EξV켲kH+U-0BgQ1{8K)c2i&s=c0N"ͽ_.d{Ŀn0̮]/}xz:t>;,TL-H}TĈN`\HVTơCm_uFQdzݠGf} Ĵck F :tJ 1)a)dfhF%2&ϖ|U?{v58`>mWoy_w}պkMVqD]:C3%W20]"hTY?WO koEZ8v#w=74#rͩy4DXbxTӕsT$ : U GغQ[(ٜۛxTCY1((!O۱|s&\-W?=ͯQϹnΙ Bh-՘K D+xlYU `O lx}7㺆9C{DWYQL~Ze! T[mGiںm4qD t1EbONIDAT5EEGH-K5@ }?x3#ygMԡk hX8#nJ.VRe #E01BmL;fdRXE$G(1F "w7<3{-USRɕee 3/J^sFٖ}Szt'afnPMM6b.0EA<.eRԕK~=.dX__cE|1'.7y2I<:ȇjRi%J&ⱄ2j#4FzRn:;^u$+G8ţ-O@w xƥU@B |~_BH!Hf>\P|ߩA7H(p! s"[=ݳS OX:xrDDd ZjLܗP* YxSqFayFf e}'Ou`ZPLL++ #&c~Cs|"<#g.h=\:&Yj!):j~|OZ|]Ģ`D`d2S1}v8|Wˉmp"\9n"4NJu Mg :")`zׁIeENU ]_a1i qXՕu|+Cg3H}#l\֧4:}vpn9 $ ˰E8:(ƨ[77]BP(ZuӒ1ogB;U_ BP( BP( BP( BP( B7?m0vTIENDB`img/loupe.png000066600000001622151452625100007160 0ustar00PNG  IHDR@-gAMAOX2tEXtSoftwareAdobe ImageReadyqe<$IDATxڼUMKA>FRQ$*2SD+s[DE h!n -Z B $"B#s3Ywsy睙猺P(T`~~?|1LR6nb4=wwG۟@444pmnnR>yGGZ{yya' d2hggזx___$FV+ d (P/̠W ~!w\J] fggP(l5w4Ni,&4lXi?N"b =9kC㜔;]\\I---^LT4>ZXX`iC|"-HZCWVVzH1r488HTnooiqq໬F#Dccc kicfPDD!R BY@HC|z<V&RATa/!* oxxXa4],T*؉fcǵP fG}A-Bp)^]]z374jX(C^+RRڕpZm~ 0v4IENDB`img/couteau-50.gif000066600000003534151452625100007710 0ustar00GIF89a22ƾҎ~~~nnZZZVrnvvvֺ➞vv^^NN>>>>~BBrr>>**66~VRrrr^ZZRRRVVVfffªV:: ""r..zzznnn^^^VNNJJJƾζ榦~z&jvvJFFV>>NNJJzbbnnZZVVNN^""r^^vvNN~""V..nff^^VV&& j>zV""ZJJff*& *Jv""ZZFFھbb..VVBBf^^jjjjj^^62""R66^VVrr66""ffFF^V66zzJJV22B>JJJJ26^RRޢzzFJRRb^jf,*VVRR::jRRZZNN.2::^&&fbb~JJ66^bZZ****FFF22^^jj""Κjjڪ⊊ZZFF..꒒bb22BBjjzjnNNb"vv&&bVVrr~>>BB**>>&'RR****ZV62..BB**z22vvj66bNN~rr! ,22 H*\ȰÇ#JH@(j,H8@F(P@A0` 0P@W&H`AjfI D੒%Ж/#0B 0dШaÀ U*"F(A 806*l4qE +XpF 1d̠Qh`9tࡣE? 8 B!B#EAD&MJ7 bԠ1JV\YD9Y4 0ULwe .Wvx0a11AuEFfByKxq,lh@GtPnGr(qt8QwETmM{AGh@$@@@AA`H!˭x"Ā",1҈#XyX!HD  p"%TbɕoP%P!Ë$ P")%dVb&al‰$J@ Ču''jI%BJ(z(Qh)&+)I* dX$aJ I+VRfxR8m ! ВI--b!.T .\K/#.HԤ R b-S e9PL2B0"-@R(L4 /@S32DQ Ds4PCJԢ` TАK @QXsM#@M(ٌB6xR,6ܠM%tJ/ $޼> rNB!M&$5O$8P9Ϝs&'g'"{9:6x3tlP Ae\ scb & .1@p iHi;qx#=-|aDL:Bd H=J`OP"D1(C` H2hLD;img/formatspip-24.png000066600000002741151452625100010446 0ustar00PNG  IHDRשgAMA7tEXtSoftwareAdobe ImageReadyqe<PLTEa_aa^bC@DPMP-).:6;)%*2/3pnq}{}&"'*&+~|~GDH% &  NKOzx{!nlo  )%+dbeVTW kilB?Csqt%!&}$ %# $}|~RNSa_b.+/>TRUqprQNQFCGIGJ_]`~mkn|z|mko+(,~}WVXEAGROR96:95:b_clim405?<@$%1.2627;9Bdae}0,1859EBFPNP|z}MJMlkm0.1!"1/2>:?!LIL䉇\Z]  (&)OLO'#(($)}{~؝XUYTQT  NLOnko`^a637"#KILA=A)'*rpsWTXusu{y|647a:DtRNS/鍔IDATxbxj PМ+NF4vs+IЀ ;YC]bE4̌yp332`T5_C[7M[ d08xZÎkS2A'WHerv$ `pمB2pN0ePU7R3.V/^gpĽ[fn);ggfn!z]:r!^b"KV gf`<єzŤY^ƺ7=I0( _uyPtfASa5` 5<Ͳ5_ʘc |D`IcQJLAde> ` ~N \{AJK,![JQ+PwK.'v>X!Ah80*bwc^" L%^Ze^|%ˡIENDB`img/sommaire/coin.gif000066600000003641151452625100010564 0ustar00GIF89aX! ,XH`*\ȰÇ#JHŅf,q#GiH2hU]PF)z99\veqeD~ihzy qe]p)gkzМxgZ矀rgj(袌hF*)sNj饘Viv馞*ꢠj{ꪬj 嫲j뎴ު|k&,}.쳎 Ԯlfܵv-p~+K皋ުպ Kڋᄐ￵ Lœ*Ó: ČJLŅZ~jsz hL]QG /}BLZ<:ɁԒ=h&PN6E@#(RD3ʟrj+E-4>&={R])^*Sд)Nӝ->}RO5m@=jԒTb*T9U`=ȹ*V&խ^%'XzNJfX*"7n}*W ŵ+^E׽ZH~ `5=lb 6֯kd:ٺVV}kfٺٴv֬%kh:Zvjjکmjl:ۣ֖ jn}۝ipe:\UirO\6Wht9:݌Vץhv#݇vUhx:^7gz^|g|9_v75g~ǹ_pf9`j8vf`d6f9a^V8egaXvVeO9bR8'd7bL/d9FX7>d cA?c8d;yGc۸d56O&c8e/VyWbe)v_fb8f#ygb{kfoac8gywFaKg`38h z`h6&`8iUz_iu}fpXQԡ:5;Ugծc=Y:R;img/mailcrypt/leure.gif000066600000000144151452625100011133 0ustar00GIF89a d22! , 6  0!Â#Jl8È )V̈#G?B81ȅA. ŀimg/smileys/diable.png000066600000001741151452625100010743 0ustar00PNG  IHDRrP6gAMA7tEXtSoftwareAdobe ImageReadyqe<sIDATxڜS]Ka|PJ":<(2:: H(щ)x  AJkn~MsnsOnNߏ罯_s (B_!dI>|===l6 cއ'%NU(c.Q[[+[gtwOn}hllG]]]@z ͆M8NL(vޚ5sssU%{cX0== ACކd (qMCMM QUUժE'tdEqgh-)Aߏ33pApHOMNQ/5mS?#Ϛ/\@!4g^dUx˸Rofg#]tikYSCaZơۍtg*!.=wuYII4(FEI>//Yt/QE&xJKf3,Cv$:'yO 0ڐRΎ"3- n_PH/Ufs/XdqH>~Zn| ;ìaKI%fr +<| KD%A Nϑ"GE^d욁%T?6y̮ϓ~ LeD')$e.#8@ 0q 7Y0WbɮΑ=5iV?w`%_#IENDB`img/smileys/pleure_de_rire.png000066600000001645151452625100012513 0ustar00PNG  IHDRrP6gAMA7tEXtSoftwareAdobe ImageReadyqe<7IDATxڬT]HQ~oٜl?Uf AGvEf讌»!& bQ)Re+,nf\۷s <|;s9=2"&e2ja%9C;=Vؼ1J6]kle2G 篼hڼ w?1<#W0 CEي8ZZ=vuf+(ذ[Kp?E[6q 3Y+THMswA',Ec\8c1p˔(XM8dנr,ÄL@1y򿨧2AvLYS=;Md/"Ԁ@z[UҪ@w5&kA8*UJ$N=Rfdi'65G2|3wXwWBnDa&dFZztJ{4̅ᔓLDm+JK' |tL3-6 A sP(%R;_OǐʚS3V+Bt֐M)VVўzyfeQbVaa466k3Áo GkL0fb`X==f*F/0D^ 0yPz ËBtϒ$vSZ5jA>bx\bdS%d(#^HGi}ZFt(J2ȹE? 'i0 :7|528jC t LcG (#j_/7>`mIENDB`img/smileys/lunettes.png000066600000001453151452625100011366 0ustar00PNG  IHDRrP6gAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxڬKOSA}ZB (Eiԅ!D0&uΈ;gиqo_UQh6m%>싖B}u{S*es;7̹gPoRPبqRR9T^9*7 "ߑQИq_p?:uTh<Bsp#Sن0 }j1M@(2@xJ!<}o>&:[ES11GY mTvE1dmXѪ .`vé!b6RAb:DOwσF&[]K:ަ%7-`EդU-u,l`6*Q+? "A b}SUXWOr4iF8=?*<X`㗀@ӫ(UE~yK XMFF|d ]p9i'=+j)OU+{HzX>n ^oTRA7Mg Y=Զf,Fݢ}WڍmaJEk"{K[q\ bp/ӠXf Wc*a)^~U͠h)?+BɬBet%V'3EfzJ͘k?M~ί&89ڇӃKHVL5 9RY=]#5z17Gnzrr %;fq4M> z 0ӠPIENDB`img/smileys/logo.gif000066600000006716151452625100010453 0ustar00GIF89a??      +'6&8'7($3+ 7)92)%646+###*!!:5.!E WO wiG*G9D9P9 p0 D>+Q.+g(XH LD[KUHRKfKfWmR xdwbJF+UI&ZS'VJ6NQ1eW)eX8iM*uf(hd4wk9ut.ZX66XNcXXXWQGeZHgVSwLOhhHvhGjgUusQfff{zevusZZV#$(.0#(+/&+2+107Ui{p u{4o0t2P{9A=DMOUUwKjlj\PVrov{djKQ{6&9$&788+6ʕ'%0ɦ)٪)ȧ6ظ8Բ0)(-+5֕753<.HWRCCFXVQDVLdxvfsljzwmzÖGǨIڹIǶX׺WήPOǶeֻfȱqlXLGHZVWXIWgywijdkevvqht|wgmɺŻݯՍªǏɈ˒لڙԊ˩̴ש۶! ,?? H*\ȰÇ#JHŃ@ffcH֒<8P'D.J:hCsf͛9w4!G'ou"QZCf(Dk.1c$`fTVjZTRM:O Fد[xoTB@tͫ \H#HABɅh %Ԏ$S(Ѣ9NjNװ)R6`uLhrAsSHQ=hoߓ,/耘 J~ZnlQ#a 10( 2`y8po<=>`8@Pl0-/Rzh B!h!8"^lPؠa..AB0aM)(2"\v"s#!gG9Ҏ0cK,K9PsXN"]r)౅HǙgicZ%H.ĠG"-l1~$-^Y鎆1' *0tы,̂ wl1'%314Bsbtl1#P@V42"/!ݱ II )B'`q4́1LNր2 z a #18 #(LE. u0H'?(6 C}t҈}S#H$I5GDBPЃ$v'ܠY}vkAа( i3-@C $ ]@#8#D%p7c;4G$F2KDap]$5A@$Mn3E\ @K8L?LM^3M  p@>hR0W 5 tf< pbp@/a=Pz\0~&p7eQ6 8/$;983eP`:; gF0hpϰ<}vG`؏himg/smileys/rouge.png000066600000001740151452625100010643 0ustar00PNG  IHDRrP6gAMA7tEXtSoftwareAdobe ImageReadyqe<rIDATxڴoSe?:z]v͑LY[fDX3zH4z?&8 1EXd6t0ӕnO{ziDz}sQ,z)HHLH KlH\ qVt?4 3I31>{i΅K79:Z1# ܋Gb'ޞfv:E0k`d)[| !w\n];JL2aMY!/U씏 3Ko;|  'e2*4S]@ ˆ9:1d?Kj -˶dk(n..NotTvpaZ t)] W96Wf6xP)-b 2s|R"A7]?e2L<;2B:)aW v5.F`I?f@Duڵx8JRyqW_6̻-)Z [_,Vh嫸&t`"Lmf 5Pvڏw71gRP"ޠm&i9vk,!^[^Ӻz-N)Yzۢ)h5?Ytq7gۼ.~w=ԁt-V- VNAjmWڼ )|ن]܆#??T5b#D+kuV ry1mɓ9}N +Ѹ3~Fvfp+%VeN`,TG"wu)M![Mn]}7?}s~Qvt[y]:UJlawtfsn>/!/^Th&Tۯ c<0c˦.–IENDB`img/smileys/en_colere.png000066600000001563151452625100011460 0ustar00PNG  IHDRrP6gAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxڬTKSa~vmL9qL"pfѕ cIutCW{D ZB#00%ns?s9s:WZ7y{y}H<$I\\4/IɌ@=fӉVZRp01tc F]gd]PUhx2~L3ׇOss84C` d˱ qUp'@ D"P76'녁mrXdw\,(̦Y.L175G`g;`cV=XRTꈅlC; a{7Ht`iL vvX|g8U~?`n++C3LMW FkArxou7Y&!``HBwHRBos3kkzodי8x̟gf;΍ݨ'$2+y pcBf0$n@aM ZɦhM!1W<b3T$hnx-K\cL(iQWb̓~_äl,"JL 0JU K|$"IENDB`img/smileys/rigolo.png000066600000001752151452625100011020 0ustar00PNG  IHDRrP6gAMA7tEXtSoftwareAdobe ImageReadyqe<|IDATxڬ_LeZJ[6P &n!sU:/獛1L5% L՘&w)[ܲ ]7 "ZZڎ_=łt7M|_Ny}{^]Pn tz )1)ʄh^<[pk" 2)N}3Kl)I&D~qN/C&h)(7Wyo;fQ#o _@a,+\PОjleR^SXQ;|f.]@,١\hj.#Ghn4bo6N|RP$lpNܭ5+q=s[ly_؄Pre΀$yTT@82R(]ue~DHpy#84@`6K9N|]oM)M:x:~09ǬX7t<׀ Yf29f7m4488}o H*lճzqab2HDa0Vsm*Vֆo޷xFW@|I!^dcS/Q[o6`ZgTeJH,bBLVۗf}w|{  LIENDB`img/smileys/sourire.png000066600000001677151452625100011223 0ustar00PNG  IHDRrP6gAMA7tEXtSoftwareAdobe ImageReadyqe<QIDATxڬoe?mZcuݏ -0dU @ōnkp/SPe VJv:}}=]ȓ/,>GfaA;`R[e2VLjA N[%PzIeM'OYZr [ w5$rNUa!7jGENY7oHa;}]Zĺ!,]nf=Unw '7꺙c^\N77nos-aV}9f?@lijoiZ/zĸý8]j$ _PHm_ɰȑV4-_F;98r8`IA&':fK6JWU5/gg!-xIENDB`img/smileys/surpris.png000066600000001577151452625100011241 0ustar00PNG  IHDRrP6gAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxڬ]HQks:hl 4HEM̊ EM7e]UWEY>(b,ie~[ktsS}:ݘ5 y9+"%E@eS RQ٩B' l6Ƿ~D'WHt`:&G[[1]!d61דL̗ d+q8juBL̗dE$g$J0<< tuuq56eRy#'>uyhjjNfZ%noƂ7(=YbG2dDL-U|IB2ZOD]JޫUY~rU|RBfvI.壻uǔ# >\tPN"WV ZKa,,E߁P|43#D=yV[ΖQH֑>n`EUǎprY0O~qiHqx)*>RdQX<(#;g0op1(b|ʸ_oznjanzT 1.35w6&QOocq)SeғX'j|fbz _gT ާr2rPgTV}'ԅ;TuƳ1]vu=v'Bmyu~/>LX\JmU)jF!dD^ș\TR{6&N76Z6RSPrRԵ2+Խ.G%uoA~Usa%d! z\GK))c5(VG޿&g.]_Nh!.KqT8SWjlth)bi0{r0s5I~2 d#^YDFoG,n74\elyq19%?blkh#K8qHRbĎYzM:0d=Oe׌1Voo8)w)b3K4NXDBV"\1v2ȥ@gN5,zhO fլg԰m1|DqyV<& E4~[n55ڨ^g^bYH4-$i߷][F[2IENDB`img/smileys/mort_de_rire.png000066600000001566151452625100012202 0ustar00PNG  IHDRrP6gAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxڬTYOQ촀l@X"RB ` /n>c+  `BAb maJ;ɗ{{9\!G5U*U()& bb(QS!ik.Gc]e90e.rwb Nz}ԷdfCmaWǝ&X  nA z"Hg=v<{5#k=i5Ԟzr**KSw L e2?=APhaO@fI P(tX+)hd4R`.nUFAv7, OW4 iWzD/I(B#P.y2XU扤XK =ijj[WJ7 Kb<6QC֟Gb,zCv<+G P9<}1!zb2k"[oXvy4X(:ꖇ²pAG&hnlbY9wwFl0R=.W ӹ/q`yF$bޭh; ڕwsP_7C"&ڊ *$vKS rbd')um'*KmFJñ qd @ۄc X^G{tOov՜MDxt:R5ǰ%H׶bzvsxO`Woj$i@ƖouG-[횉fIENDB`img/smileys/tableau.gif000066600000017737151452625100011135 0ustar00GIF89a_h      )7 7& & +$ 2) 5, 9. ;1 50###%%$)&$88890$3?VM nI=C8C9@$ C>,G>S-.q+.h.OBTEXI^NVHYCbRmZiWs_nHu`xdVJ#]R(XR:cV,eV&dZ7{g%tf86XNlQi4\m&JWXXX^^^YUUMLFc\CiNNqjPddcjhh|||rpg" $(.1%**/!$(.+2/5.53:Sjm^{~wruv1q({=ACJMSWvE|UknkUPTU[IPkow|hm\a!(: !+$$&.811ɖ$%0á'â)Ȧ(ͪ)Ӯ*ަ(۵,ʪ4Ʀ5۷7ѯ6(.,+-׃/2:15335<-HWDDW^PWIsgqmlyuǬGܼIۻGͳTMDzeʵfDEAMGVUZ]e}qdjlkwvku|pIg|~Zɻɼ҉̎Ɓ͘֋! ,_h H*\ȰÇ#JHŋ3jȱǏ CI>{(S\ɲ˗0cʜI͛8sɳϟ;ѣH*]ʴӧPJJիXjЁDKYEϪ]V۷d-]rͫm_|pag}`LJo`˗:ܗsg͒AoMYP҆=VM_paFgʕm=w'u-^K#o7dǕxcsc'N=rn>;^,'/lk_<=iV[av`1i`__~ex ~}(wg E"\&(*"2"c(u"acxޱ(djyXli~CŠ?:(beHX%vRȗJv&d'0r)g`ڸ$szbtfiebm故zւRX*"ڧ9'ޙ⥛IIh6{V_Yj"zyk¹艊vi஽Ίܛx+,UrkY(k;;k)y**%^[jkY"*wr 0?+&jJ.R,0;qV*mÑJ־p& r,˻ f[l>ۛ},!&J7/6P* ΣIq3jG+gg)_ym?uxVd^Oh;NzswpD_}3 NpY1=^v7ž'Ǹxى=w8iƺ۾fu%o'FG/Wo켟;w?t~;ߏ}>o/6?s ?w; ,g_caCL2Ѓ`LǿG D0@nAG{P4=&Dp5bbD &ji"9H1J\"YD-TXԑV˨<(l@r@G9l@ `@2!{t 0ڑ% @,dB IIRҒdtIVc)?JQzn *#iJPd,gXr-] `җD ך z(G9<np y55%YQ[#h4ьU l;9zSca;)Oz> O&TAЈm(?/fiG%|t p4!nC@S*0@`Cp<mp@2sX1Z aPBɴLSꎨNURYUJVŪճ5K [VթfjX%Rk\EW suaX0\67llf 0M*4 VBp(Gh!^F% A P"(chg^B%Q KMliQ&w}np4"Wu.t86ooپCȯ~M!S}Wq]8f .xK%q')tÜnCaPvJDn`R4bǦE&V`f1Q O(C.3;2De%_Qs dY[ԑc3RN7xI(BЄ(gNp\;yφ3Ͳ.[`No\%C:aVf0-h! B9-5Ha oCPSZՑ!+_XĎH14iz(4q c#IfmiS޵iWTva݁Rla\ N4)pBb0˵~;o@&&w1Pq?Yv9qx[8L)x;  1e9.a5_"2ѡGzуQQXhӅNbPX:%uWȺN2ڱ #oGnw:& ^lb#:q ,AyQ'~񍷸hu (օ[]O^`vŽ-8YBø f/QR)> Rb| @T /_?˿\87h/E Ar!?Ap px@jpxyX  ؀+ȇ @c!C C 3"8%x)5(mZP@{lPyl,3%|up 7@(t P 0`v0]bHf腠iexw~vlH`h ux`{(H_x(2`~?` @37x2zdAS0c l |jrז,{UPk\4X.D u,  -0@c6˨ظD؍oh( - W * 騌@V٨iP _@ W ِx9y2h 9@?`p&&*ɒ. (e VQBYV nq,< 0 F 0 ` gЎ 5m!tijn u|PИPa P\9  4`(  $` ig% G 0p1sћXYuQS S PspFpRo@N((@q@0 p @  >p`V}pGc(@ 8KĞz ʟ_*埖00d0#Z'[ p $ |@d@$3J6:ʣ> BJ* JJN@C,P*;FVѥ8kpQ'r0XgaQ`tpw0Tonc'` Ȱ  ppYP qM ;*WJʩVZکrH pPp >p}Ze|P jګǚʬZ ʐ` :Ьzٺ*:(o *tAQ R  Pb P{@e3 PA ˰[U ۰KQK{^D= P p 85'+۲/ a(,03˳6"[kDz:9/QS[W4P1P0@cc[gkfj˶Dw+zps }m |Fbd;Lt˜qEjEFE;FFCGaE]F$iCۺ˹+ A;#7"D;S@˼!? t> @SB{KC>a=;KaBp蛾껾۾;[{ۿ&<\| DA|ڻۼ$|"l !lB& *,,:#$]:lm}3moȘڎULQ:Ŵ ư-ƻ-ŷ ľm;۵M}úǝ]]}݋Hݰx =fѝJlI-M޽ܼ]A]^}ॽ.n$0)k KKJ+1⮋+EG@GEg A>E~I;mL4$LVT㊌X[uR URQ(R<_U%ݰtKvxQQw{iPh^J#Q)UNRJ^LWmXvWNWogNNQ%E@GHH~^m!nkeXT p ƀ E,CMJ p~` \%ꋵ^.]e^^`|^_UaJWWud>cƠ/F~ F\ v]] V cð^L* ~Sܵ[Pg.^pkcmcoiY9fBcDdF!?1._R`^Vq: :ce ,fiX~xfǰcPckp%اƀ7A_f0 /nn k˰n"?gdJE?}P }p?=,!q&Go KGGa&}J5}9 &ls /nm Ġ zg 0 iWPdtZNڨ`Ɩ h $jڲ_<$H`dǐ#Gp2J-9z)I*Yn, :ba$ZѤK>:5}aŎ%^ՃȘ V)AC q1ƻ!, .ջz0CtԪiA"w[l3L֌a9 ҧYPj.l Ӥ,04ܻ{3|xq; s 4³7KgM=tSӮ::xwQ_[G~|w-_ٻn3fSD$H&k8 / I >} `ffܑǝfffyFWЬ6}nŒP{㖹1xG,` 0Fʠ@XotJ)K-ٳmMoR80I.'T6;1N4$:ݼF9!!$@?ᤱF4 PCN?3 aLDPB0Æ~02͔.j,Ʉx@RUrj$DR>$-Ԕ}_m5ԒA$A>X|Md  Apb+8;J//S 2ZX``X7»d2Bcg0BᓩLAUVi~ꫳFz֚KnZrvxEb'Fնߎ{{o"B' ym=o$V0G"ɤC  DRL_{QQW]$]7eb n`x9vdTa?Лzv@&QBTP I&zTRўo߽_%(|>|7vAk<@DT@{JH@"}RT @~4,( j (AC` V  pQ3nCX*wAP81r 8T>Ka3  SL -va#,j^8l#: P(G0``AA\d#=Lp4"e&5IOF|c&7y g8ch*XIe,`zqv]R/I!q+H8*0#q? d3+ \0 R Tp&8INsSlg8o0r3Q=ߙOy38Ƞ aAЍUBЇF.C#0*(Y~!2qe/8b3lf.Yj2LeYy<:yvƲ3:͂l ,athHGZғt-}iLgZӛt=iPZԑ!TZիfu]jXZֳum}k\Z׻u}kW+Z&v}ld'[fvle;img/smileys/bof.png000066600000001571151452625100010272 0ustar00PNG  IHDRrP6gAMA7tEXtSoftwareAdobe ImageReadyqe< IDATxڬKOSQ}R jKGl]!F0h\Bԍ ~[0*Xcbj"ЀPy>{iK#FO233?3G%IҞTT5 h( hKG!j# @ L…? F7.7U($4Q ZB <3KEE7%'3|;O( vju:]=|/C!DABG"]9~_1x[s 5&Df|F#^LQQfwoOw+[@nȮHL,qwQ?*:׼ޭ8P&iU AgmM9Kys Mj N10(*K%8+MMF.*СÎІU0j 3 I\@ǵ!x.j:(6B1,4/6ɼަ=ObhR 3ftVĴU/x[,yTBjOrz_|* 1% E!dhd55HM#9"0_!$^ǚ(Q@LϹ\U5$E: /f`)K/e1M#`p$rAn5cpUڀUУffdĒf2Ȃ[ xvvK3xzM-`Ɲh v'Ide,$Ikjd}氱=8{^0b t\e?=B` '1:>%:}PYa +>NV 6+b!3" <ǻi &0NJ P ®TFm<">EFbE|YBK2#oٮþa~g6g`LOPUh;~.%IENDB`img/smileys/pas_content.png000066600000001667151452625100012047 0ustar00PNG  IHDRrP6gAMA7tEXtSoftwareAdobe ImageReadyqe<IIDATxڬoSe?}}ak]m:аŐmh^{\ SFB.6:1F7Fku]vsڍ"A[*3tj\2_w?/ئЁ>}T,@ Yb3>ѕ [Ths+z)ysZW4;_w 8y堅s2WJNCkC>"=Pi?;39pȒZc9ݒf!7'i4MX$ry'+U+ mjJ^n7r-!\ٿF׷< [{5aN/}ml +::" wZQ)5m!G9iHnfi-X"\ @Xe5W"((! 9,6ˆm#_IC44,FzD*2s.XTwp䀓br5R+ wuXz#١k|˱V cz&7E#m$4,af gyKWL]zCx2Y/G[WG}{|`ϓZV]']Ń~ڼ.2Li;L )2Sc7fB5==ˊZV~X/ctV|ٟjx\h(cF S4hT_gLpjOIENDB`img/smileys/tire_la_langue.png000066600000001775151452625100012504 0ustar00PNG  IHDRrP6gAMA7tEXtSoftwareAdobe ImageReadyqe<IDATxڬO[eX)RB 7;Bt@јMO?Yb4q"D0cacRR`ЗӞt-C?y+ysGf_OnFEQ^LED!*n|s wQ\?Po1#"*A ڊd)CU*QU;zj@Ņmwqu?qVk48M9ET MYk`O6)Vqs.>(5FMya==5뮃Z"^b{HM0')HMj&_휹\-V![Rd%5r-$$Tk'Y}}m[~x"jl"|IEXY е8t.> ߢi.}B,Al+L2I*"S #6+8KTX z[Ĕf:*3wT Tweak SPIP > Smileys Document sans nom

      Ces tableaux vous permettent de voir l'ensemble des smileys disponibles ainsi que leur traduction en texte.

      Pour toute suggestion, remarque, proposition d'ajout d'un smileys, etc ; reportez vous au forum des articles : http://www.spip-contrib.net/Smileys ou http://www.spip-contrib.net/Inserer-des-smileys-ou-petites

      Smileys :
      :-)
      :-)) ou :-D
      :'-)) ou :'-D
      :o)
      B-)
      ;-)
      :-p ou :-P
      :->
      :-|
      :-/
      :-O ou :-o
      :-(
      :'-(
      :-((
      |-)

       

      Smileys :
      :-) :'-)) ou :'-D
      :-)) ou :-D :o)
      B-) :-p ou :-P
      ;-) :->
      :-| :-O ou :-o
      :-/ :-(
      :'-( |-)
      :-((    
      img/couteau-24.gif000066600000002347151452625100007712 0ustar00GIF89ab&&bRRzzzn""v""^^&&ފBBZV򪪞~~Z66..F& ffvBBBf^^zv>>bb>:jjjZBB Ƣz""2F BBvr:: ʮ::^Z~""ւVVRRjn ޾ZJJNN~~~ZZ2266RR暂rrrNN**ffff""JJ^***...&&zvv^::BB&"nNJ66FFzznnfBB22FFb**fbbꖖVR::j::bZZ&&bb~FFFFFN>>66^BBbNNnnnVRJJJJzzNNZNNj""fb>B22**22vvv¾VVfff&&ZFFVVZ.."">>**^FFNNvrrJFf**66VVBBjj"""**ꚖΊjff""njjfZZf&& RR22bBB^..**>>JJZZzz¾VZ! ,TcDĎ*\P[9~S$hd,BUţ 2qT'R/PG~4(Х.!PTh3ͨ'kS "PS(qdaL_#|@P^$,䡊'0L QZ !%l-Yx!M2 %sAZ-t {4E 09 B1, lLvԈ)t2)#x$aYB 4VaiP&e0td}rimg/permute.gif000066600000001666151452625100007506 0ustar00GIF89a!/igaOWJ){U+uG̙"ffϪq99EEw=U|Uffffff3yyyH'wwuQQʅ\񼶳QGf3IDf3 sYcDڪ'y'ڞ:̙A TMn.̙u5 cF2ꂅj]XF;ڭ{T!  ̙!~nVP 0qAAf}{a^`V̏޷<"v]! ,!/H*\ KJ0 .$*D#@.hDC 8r 0 *Zl3UN*H 0P@ %4C%#(l4!MREÂKqx l%i2 8tի08͏M A *!%5DSb"4hG DD̀' hAĉI$8+p ,rA* e#HC  ݃k.X#6[ A 5. ^EDXA(pX lTs2eh EP Ia 0‹z0< P+pdx !$9p`+Đ!\BLjaG R Z!9@G8E+L"hQL'aL!)C L0 lgF А 0@ ^Kk J*j:j4`Aimg/chatons/euh.png000066600000001021151452625100010245 0ustar00PNG  IHDR2sRGBgAMA a cHRMz&u0`:pQ< pHYs+zIDAT8Omq IM&&zȮ? N ~Zd9ksY%ղz[Q=Zlh, ?2Q2/mGbK>Ќ-LBsSBj8sqStzsj~A8w1sJg99-))s$ySjl!@sppP p]Ed`EͪXiNZd72q-x I$CoAA`zsQUAeg[i=,!`6;!d7f΋/ k y`h NmNi$F9ט4yJENDB`img/chatons/oups.jpg000066600000001617151452625100010461 0ustar00JFIF``C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?Ǎ 9!q$E @OLA'Y}VzKt%ŽŧḍהuQFxiyk|Qܐ0DiUafR/ %UQȱGF$82ɐ#4~\9P˗#?qE Gȱ#ǂG 8r?=~DeG0UVPM6) J_;1\ZSgD*eÍ0Z)SI'zHa=D9pݎ$·ioU-ݜSԊ5&EW/*:3VNi^l1r߼b.A C93fΏ xڹL_kR?"p4ן{uMtPר*Ẁ;ܯEƠh2 m8]9[1 k( R͜V,[HZAϞ+/V|ga$psvyՈ# ! ,!$!0 898WwV[q*v2uø݊ƺx !n&0V44?_$%gKl$}FK5* ;{{c~`$foruԇ# ! ,!$!0 89tgH:Kפ\u&ƨֲ窘"40Th^ Ψa/xthDJ=w)+;ަ{oc~\`fu×rђ# ! ,!$!0 89X)lUy',[;t El8˶btKv)t]`^b$}F=7&2>ra`~\cf~ʛux{# ! ,!$!0 89Xv*"v')l?U۫XFc"M3ehIU0+4#/k-n9~]K;~~nb}_`~~et–qБ# ! ,!$!0 899[v ̅&gM5+ұd!U3Nآ0C.A}`10if,BH7.?;_L~rf$uėx{~؊# ;img/chatons/lol.png000066600000000510151452625100010254 0ustar00PNG  IHDRrP6gAMA|Q cHRMz%u0`:oIDATxb?@1Q$  @ȜGgkkk97;p@b7rb    BȚ  @T5 0 #w@[' j߿`:CA\d dPML &"k&f  FjADդ@T5 j@M{ 6IENDB` img/chatons/mdr.png000066600000000554151452625100010260 0ustar00PNG  IHDRrP6gAMA|Q cHRMz%u0`:oIDATxb?@1Q$  ?9N"˙fff  X@++ &E2 X`}lø#0J B6 P"ݫ0>FC@a&(b| `@4 3b f!@1tؼ @X2Fdr @06Ei0 8@UjcAÈ5#@Qp0C\ sIENDB` img/decoupe/precedent.gif000066600000000074151452625100011412 0ustar00GIF89a +V!,  'msq;img/decoupe/precedent_off.gif000066600000000065151452625100012244 0ustar00GIF89a !, @ (2[ ;img/decoupe/suivant.gif000066600000000074151452625100011132 0ustar00GIF89a +V!,  ~`+I1);img/decoupe/suivant_off.gif000066600000000066151452625100011765 0ustar00GIF89a !, @ D~R)+W;img/nosel.gif000066600000001742151452625100007140 0ustar00GIF89awz]`_b/1~AC47vyDGFHwyUWMPz}[^mpnpy|X[z}mpbeFIacrtehy}y{{~svy|twil-.qt%'TWjm^a~\^Z\psCEBD46GJXZX[VYpq[^VY?A=?adUXHKbcJLcfHJ_aVXprlnruvy-/Y[[]bddgEG@Amohjlngh|~~>@NPLOtvqt! ,HP @  |1C6RGnj  (XF tɐErp q% F8, P0A Z|Q 4H΄mƖ O \hb1U9@< P#?pf0# r hd,@@-s`F76 d`Y;cout_define.php000066600000004261151452625100007551 0ustar00'.typo($qui['nom']." (id_auteur=$qui[id_auteur])"); if(autoriser('webmestre','','',$qui)) $webmestres[$qui['id_auteur']] = $nom; else if(autoriser('configurer','plugins','',$qui)) $admins[$qui['id_auteur']] = $nom; } return array( count($webmestres)?join(', ', $webmestres):_T('couteauprive:variable_vide'), count($admins)?join(', ', $admins):_T('couteauprive:variable_vide')); } // Polices disponibles function get_liste_fonts() { return array_keys(find_all_in_path('polices/', '\w+\.ttf$')); } // Montrer le fichier mes_options.php en cours function show_file_options() { return cs_canonicalize(str_replace("../", "", _DIR_RESTREINT_ABS).cs_spip_file_options(3)); } ?>couteau_suisse_options.php000066600000031441151452625100012100 0ustar00 12691, SPIP 2.1 => 15133, SPIP 2.2 => ??, , SPIP 3.0 => 17743) if ($GLOBALS['spip_version_code']>=17743) { @define('_SPIP30000', 1); @define('_SPIP20200', 1); @define('_SPIP20100', 1); @define('_SPIP19300', 1); @define('_SPIP19200', 1); } elseif (!strncmp($GLOBALS['spip_version_affichee'],'2.2',3)) { @define('_SPIP20200', 1); @define('_SPIP20100', 1); @define('_SPIP19300', 1); @define('_SPIP19200', 1); } elseif ($GLOBALS['spip_version_code']>=15133) { @define('_SPIP20100', 1); @define('_SPIP19300', 1); @define('_SPIP19200', 1); } elseif (version_compare($GLOBALS['spip_version_code'],'1.9300','>=')) { @define('_SPIP19300', 1); @define('_SPIP19200', 1); } elseif (version_compare($GLOBALS['spip_version_code'],'1.9200','>=')) @define('_SPIP19200', 1); else @define('_SPIP19100', 1); // chemin du fichier de fonctions define('_COUT_FONCTIONS_PHP', find_in_path('couteau_suisse_fonctions.php')); // globales de controles de passes $GLOBALS['cs_options'] = $GLOBALS['cs_fonctions'] = $GLOBALS['cs_fonctions_essai'] = $GLOBALS['cs_init'] = $GLOBALS['cs_utils'] = $GLOBALS['cs_verif'] = 0; // parametres d'url concernant le plugin ? $GLOBALS['cs_params'] = isset($_GET['cs'])?explode(',', urldecode($_GET['cs'])):array(); // fichiers/dossiers temporaires pour le Couteau Suisse define('_DIR_CS_TMP', sous_repertoire(_DIR_TMP, "couteau-suisse")); // pour voir les erreurs ? if (in_array('report', $GLOBALS['cs_params'])) { define('_CS_REPORT', 1); error_reporting(E_ALL ^ E_NOTICE); } elseif (in_array('reportall', $GLOBALS['cs_params']) && $auteur_session['statut']=='0minirezo') { define('_CS_REPORTALL', 1); @define('_LOG_CS', 1); error_reporting(E_ALL); } // liste des outils et des variables global $metas_vars, $metas_outils; if (!isset($GLOBALS['meta']['tweaks_actifs'])) { cs_log(" -- lecture metas"); include_spip('inc/meta'); lire_metas(); } $metas_outils = isset($GLOBALS['meta']['tweaks_actifs'])?unserialize($GLOBALS['meta']['tweaks_actifs']):array(); $metas_vars = isset($GLOBALS['meta']['tweaks_variables'])?unserialize($GLOBALS['meta']['tweaks_variables']):array(); // on active tout de suite les logs, si l'outil est actif. if ((isset($metas_outils['cs_comportement']['actif']) && $metas_outils['cs_comportement']['actif'] && $metas_vars['log_couteau_suisse']) || defined('_LOG_CS_FORCE') || in_array('log', $GLOBALS['cs_params'])) @define('_LOG_CS', 1); if(defined('_LOG_CS')) { cs_log(str_repeat('-', 80), '', sprintf('COUTEAU-SUISSE. [#%04X]. ', rand())); cs_log('INIT : couteau_suisse_options, '.$_SERVER['REQUEST_URI']); } // on passe son chemin si un reset general est demande $zap = _request('cmd')=='resetall'; // cas ou les options seraient appelees en dehors de tmp/charger_plugins_options.php if (!defined('_DIR_PLUGIN_COUTEAU_SUISSE')) { spip_log('## ERREUR : constante "_DIR_PLUGIN_COUTEAU_SUISSE" non definie !'); spip_log(' URI : '.$_SERVER['REQUEST_URI'].'. POST : '.var_export($POST, true)); $zap = true; } // lancer maintenant les options du Couteau Suisse if($zap) cs_log(' FIN : couteau_suisse_options sans initialisation du plugin'); else { // $cs_metas_pipelines ne sert qu'a l'execution et ne comporte que : // - le code pour // - le code pour les pipelines utilises global $cs_metas_pipelines; $cs_metas_pipelines = array(); // alias pour passer en mode impression if ( in_array('print', $GLOBALS['cs_params']) || (isset($_GET['page']) && in_array($_GET['page'], array('print','imprimer','imprimir_articulo','imprimir_breve','article_pdf'))) ) define('_CS_PRINT', 1); // recherche des fichiers a inclure : si les fichiers sont absents, on recompilera le plugin // fichiers testes : tmp/couteau-suisse/mes_options.php et tmp/couteau-suisse/mes_spip_options.php $cs_exists = file_exists($f_mo = _DIR_CS_TMP.'mes_options.php'); $f_mso = _DIR_CS_TMP.'mes_spip_options.php'; if(!(isset($GLOBALS['cs_spip_options']) && $GLOBALS['cs_spip_options'])) $cs_exists &= file_exists($f_mso); if(!$cs_exists) cs_log(" -- '$f_mo' ou '$f_mso' introuvable !"); // lancer l'initialisation du plugin. on force la compilation si cs=calcul include_once(_DIR_PLUGIN_COUTEAU_SUISSE.'cout_lancement.php'); cs_initialisation(!$cs_exists || in_array('calcul', $GLOBALS['cs_params'])); if(defined('_LOG_CS')) cs_log("PUIS : couteau_suisse_options, initialisation terminee"); // inclusion des options hautes de SPIP, si ce n'est pas deja fait par config/mes_options.php if(!(isset($GLOBALS['cs_spip_options']) && $GLOBALS['cs_spip_options'])) { if(file_exists($f_mso)) { if(defined('_LOG_CS')) cs_log(" -- inclusion de '$f_mso'"); include_once($f_mso); } else cs_log(" -- fichier '$f_mso' toujours introuvable !!"); } else cs_log(" -- fichier '$f_mso' deja inclu par config/mes_options.php"); // inclusion des options pre-compilees du Couteau Suisse, si ce n'est pas deja fait... if (!$GLOBALS['cs_options']) { if(file_exists($f_mo)) { if(defined('_LOG_CS')) cs_log(" -- inclusion de '$f_mo'"); include_once($f_mo); // verification cardinale des metas : reinitialisation si une erreur est detectee if (count($metas_outils)<>$GLOBALS['cs_verif']) { cs_log("ERREUR : metas incorrects - verif = $GLOBALS[cs_verif]"); cs_initialisation(true); if (!$GLOBALS['cs_verif']) { if(file_exists($f_mso)) include_once($f_mso); if(file_exists($f_mo)) include_once($f_mo); } } } else cs_log(" -- fichier '$f_mo' toujours introuvable !!"); } else cs_log(" -- pas d'inclusion de '$f_mo' ; on est deja passe par ici !?"); // si une recompilation a eu lieu... if ($GLOBALS['cs_utils']) { // lancer la procedure d'installation pour chaque outil if(defined('_LOG_CS')) cs_log(' -- cs_installe_outils...'); cs_installe_outils(); if(in_array('calcul', $GLOBALS['cs_params'])) { include_spip('inc/headers'); redirige_par_entete(parametre_url($GLOBALS['REQUEST_URI'],'cs',str_replace('calcul','ok',join(',',$GLOBALS['cs_params'])),'&')); } } // a-t-on voulu inclure couteau_suisse_fonctions.php ? if ($GLOBALS['cs_fonctions_essai']) { if(defined('_LOG_CS')) cs_log(" -- inclusion de : "._COUT_FONCTIONS_PHP); @include(_COUT_FONCTIONS_PHP); } if(defined('_LOG_CS')) cs_log(" FIN : couteau_suisse_options, cs_spip_options = $GLOBALS[cs_spip_options], cs_options = $GLOBALS[cs_options], cs_fonctions_essai = $GLOBALS[cs_fonctions_essai]"); } // Droits pour configurer le Couteau Suisse (fonction surchargeable sans le _dist) // Droits par defaut equivalents a 'configurer' les 'plugins', donc tous les administrateurs non restreints function autoriser_cs_configurer_dist($faire, $type, $id, $qui, $opt) { return autoriser('configurer', 'plugins', $id, $qui, $opt); } // Droits pour afficher le bouton du Couteau Suisse dans le bandeau de SPIP function autoriser_csconfig_bouton_dist($faire, $type, $id, $qui, $opt) { return autoriser('configurer', 'cs', $id, $qui, $opt); // SPIP < 3.0 } function autoriser_csconfig_menu_dist($faire, $type, $id, $qui, $opt) { return autoriser('configurer', 'cs', $id, $qui, $opt); // SPIP >= 3.0 } // Droits pour voir/manipuler un outil du Couteau Suisse // $opt doit representer ici l'outil concerne : $outil // Si $opt['autoriser'] (code PHP) n'est pas renseigne, ces droits natifs sont toujours accordes function autoriser_outil_configurer_dist($faire, $type, $id, $qui, $opt) { if(!is_array($opt)) return autoriser('configurer', 'cs', $id, $qui, $opt); // test sur la version de SPIP $test = !cs_version_erreur($opt) // autorisation d'un outil en particulier && autoriser('configurer', 'outil_'.$opt['id'], $id, $qui, $opt) // autorisation de la categorie de l'outil && autoriser('configurer', 'categorie_'.$opt['categorie'], $id, $qui, $opt); if($test && isset($opt['autoriser'])) eval('$test &= '.$opt['autoriser'].';'); return $test; } // Droits pour modifier une variable du Couteau Suisse // $opt doit contenir le nom de la variable et le tableau de l'outil appelant function autoriser_variable_configurer_dist($faire, $type, $id, $qui, $opt) { return autoriser('configurer', 'cs', $id, $qui, $opt) && autoriser('configurer', 'outil_'.$opt['outil']['id'], $id, $qui, $opt['outil']) && autoriser('configurer', 'variable_'.$opt['nom'], $id, $qui, $opt['outil']); } if(!defined('_SPIP20100')) { // Bug SPIP 2.0.x function autoriser_cs_configurer($faire, $type, $id, $qui, $opt) { return autoriser_cs_configurer_dist($faire, $type, $id, $qui, $opt); } function autoriser_outil_configurer($faire, $type, $id, $qui, $opt) { return autoriser_outil_configurer_dist($faire, $type, $id, $qui, $opt); } function autoriser_variable_configurer($faire, $type, $id, $qui, $opt) { return autoriser_variable_configurer_dist($faire, $type, $id, $qui, $opt); } } // TODO : revoir eventuellement tout ca avec la syntaxe de function cs_version_erreur(&$outil) { return (isset($outil['version-min']) && version_compare($GLOBALS['spip_version_code'], $outil['version-min'], '<')) || (isset($outil['version-max']) && version_compare($GLOBALS['spip_version_code'], $outil['version-max'], '>')); } // Logs de tmp/spip.log function cs_log($variable, $prefixe='', $stat='') { static $rand; if($stat) $rand = $stat; if (!is_string($variable)) $variable = var_export($variable, true); if(!defined('_LOG_CS') /*|| !defined('_CS_REPORTALL')*/ || !strlen($variable)) return; spip_log($variable = $rand.$prefixe.$variable); if (defined('_CS_REPORTALL')) echo '
      ',htmlentities($variable); } // Message de sortie si la zone est non autorisee function cs_minipres($exit=-1) { if($exit===-1) { include_spip('inc/autoriser'); $exit = !autoriser('configurer', 'cs'); } if($exit) { include_spip('inc/minipres'); echo minipres(); exit; } } // Dates function cs_date() { return date(_T('couteau:date_court', array('jour'=>'d', 'mois'=>'m', 'annee'=>'y'))); } function cs_date_long($numdate) { $date_array = recup_date($numdate); if (!$date_array) return '?'; list($annee, $mois, $jour, $heures, $minutes, $sec) = $date_array; if(!defined('_SPIP19300')) list($heures, $minutes) =array(heures($numdate), minutes($numdate)); return _T('couteau:stats_date', array('jour'=>$jour, 'mois'=>$mois, 'annee'=>substr($annee,2), 'h'=>$heures, 'm'=>$minutes, 's'=>$sec)); } function cs_date_court($numdate) { $date_array = recup_date($numdate); if (!$date_array) return '?'; list($annee, $mois, $jour) = $date_array; return _T('couteau:date_court', array('jour'=>$jour, 'mois'=>$mois, 'annee'=>substr($annee,2))); } // Fichier d'options function cs_spip_file_options($code) { // Config generale $glo = _DIR_RACINE._NOM_PERMANENTS_INACCESSIBLES._NOM_CONFIG.'.php'; // Attention a la mutualisation if(defined('_DIR_SITE')) { // Config locale uniquement $nfo = $fo = _DIR_SITE._NOM_PERMANENTS_INACCESSIBLES._NOM_CONFIG.'.php'; } else { // Fichier de config, s'il est present $fo = (defined('_FILE_OPTIONS') && strlen(_FILE_OPTIONS))?_FILE_OPTIONS:false; // Nom du fichier a creer en cas d'absence $nfo = $glo; } switch($code) { case 1: return $fo; case 2: return $nfo; case 3: return $fo?$fo:$nfo; case 4: return $glo; } } // balises de tracage, directement compatibles regexpr // le separateur _CS_HTMLX est supprime en fin de calcul @define('_CS_HTMLA', ''); @define('_CS_HTMLB', ''); @define('_CS_HTMLX', ''); // nettoyage des separateurs function cs_nettoie(&$flux) { if(strpos($flux, '"csfoo ')===false) return $flux; return preg_replace(',\s*

      ,', '', preg_replace(','._CS_HTMLX.',', '', $flux)); } ?>base/cout_upgrade.php000066600000000071151452625100010653 0ustar00base/cout_install.php000066600000000071151452625100010672 0ustar00exec/test_couteau_suisse.php000066600000025501151452625100012310 0ustar00

      ', gros_titre(_T('couteauprive:titre_tests'), '', false), '
      '; // et hop, on lance les tests ! cs_les_tests(); echo '
      '; echo fin_page(); cs_log(" FIN : exec_test_couteau_suisse()"); } // renvoie un tableau contenant le texte original et sa transfrmation par la fonction $fonction // $textes est un tableau de chaines function cs_test_fun(&$textes, $fonction) { $a = array(); if (!function_exists($fonction)) return array('erreur' => "$fonction() introuvable : outil non activé !"); foreach ($textes as $i=>$t) { $b = $fonction($t); $a["$i. test"] = htmlentities($t, ENT_COMPAT, $GLOBALS['meta']['charset']); // $a["\$resultat[$i]"] = htmlentities($b); $a["$i. résultat"] = str_replace("\n",'\n', $b); } return $a; } // affiche un cadre de titre $titre base sur les donnees de $array function test_outil($array, $titre) { global $icone; static $i; $i++; echo "",debut_cadre_trait_couleur($icone,true,'',"$i. $titre"); foreach($array as $s=>$v) if(is_array($v)) foreach($v as $s2=>$v2) echo "\n{$s}[$s2] = ".trim($v2)."
      "; else echo "\n$s = ".trim($v)."
      "; echo fin_cadre_trait_couleur(true); } // affiche un text en rouge function cs_red($s){ return "$s"; } // effectue tous les tests ! function cs_les_tests() { global $icone, $metas_vars, $metas_outils; $icone = find_in_path('img/couteau-24.gif'); test_outil($_SERVER, 'Echo de : $_SERVER[]'); test_outil($_ENV, 'Echo de : $_ENV[]'); global $HTTP_ENV_VARS; test_outil($HTTP_ENV_VARS, 'Echo de : $HTTP_ENV_VARS'); $a = array('DOCUMENT_ROOT'=>getenv('DOCUMENT_ROOT'), 'REQUEST_URI'=>getenv('REQUEST_URI'), 'SCRIPT_NAME'=>getenv('SCRIPT_NAME'), 'PHP_SELF'=>getenv('PHP_SELF'), ); test_outil($a, 'Echo de : getenv()'); // lecture des variables stockees en meta test_outil($metas_outils, 'Outils actifs : $metas_outils[]'); test_outil($metas_vars, 'Contenu des variables : $metas_vars[]'); // test de url_absolue() $relative_path = find_in_path('img/smileys'); $realpath = str_replace("\\", "/", realpath($relative_path)); $root = preg_replace(',/$,', '', $_SERVER['DOCUMENT_ROOT']); $test_result=substr($realpath, strlen($root)); $dir = dirname(!empty($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : (!empty($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : (!empty($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] : str_replace('\\','/',__FILE__) ))); $a = array('DOCUMENT_ROOT'=>$_SERVER['DOCUMENT_ROOT'], 'REQUEST_URI'=>$_SERVER['REQUEST_URI'], 'SCRIPT_NAME'=>$_SERVER['SCRIPT_NAME'], 'PHP_SELF'=>$_SERVER['PHP_SELF'], '__FILE__'=>__FILE__, '$root'=>$root, "find_in_path('img/smileys')"=>find_in_path('img/smileys'), "str_replace('\\', '/', realpath('$relative_path'))"=>$realpath, "substr('$realpath', strlen('$root'))"=>cs_red($test_result), "return?"=>(strlen($root) && strpos($realpath, $root)===0)?'oui':'non', "url_absolue('$relative_path')"=>url_absolue($relative_path), '$dir'=>$dir, "cs_canonicalize('$dir'.'/'.'$relative_path')"=>cs_red(cs_canonicalize($dir.'/'.$relative_path)), ); test_outil($a, 'Test sur : url_absolue()'); // test de cs_canonicalize() $dir = $dir.'/'.$relative_path; $address = str_replace("//", "/", $dir); $address1 = $address2 = explode('/', $address); $keys = array_keys($address2, '..'); foreach($keys as $keypos => $key) array_splice($address2, $key - ($keypos * 2 + 1), 2); $address3 = preg_replace(',([^.])\./,', '\1', implode('/', $address2)); $a = array('$dir'=>$dir, '$address'=>$address, "explode('/', '$address')"=>$address1, 'array_keys($dessus, "..")'=>$keys, 'array_spliced()'=>$address2, '$resultat'=>cs_red($address3), ); test_outil($a, 'Test sur : cs_canonicalize()'); // charger mes_fonctions, utile pour les filtres ou certains outils include_spip('public/parametrer'); // test de typo_exposants() include_spip('inc/charsets'); $textes = array( "Pr Paul, Dr Jules, Prs Pierre & Paul, Drs Pierre & Paul. Surveiller : Pré-St-Gervais ou Dré", "Ste Lucie, St-Lucien, St.Patrick, St Patrick, st-jules (laisser?), Sts Pierre & Paul, STe Lucie (laisser?)", "Bse Lucie, Bx-Lucien, Bx.Patrick, Bx Patrick, bx-jules (laisser?), Bses Jeanne & Julie", "Ier, Iers, Iier, Iiers, Ire (laisser?), Ires (laisser?), Ière, 1ière, 1ères, 1ières", unicode2charset("Accents : Ière, 1ière, 1ères, 1ières - ro, vo, rro, 1o, 2o, 22o, Mgr J.XXIII"), unicode2charset("Ie IIème IIIe IVe Ve VIe VIIe VIIIe IXe Xe XIe XVe XXe"), unicode2charset("Erreurs de typo : 2me, 3ème, 4ième, 5mes, 6èmes, 7ièmes"), unicode2charset("Cas problématique du L (50) : XLe XLème XLième Lème LIe"), "1er 1ers, 1eres, 2e 2es, IIIe IIIes, 2nd 22nd 21nd 2ndes. Vve Martin Cie Tartuffe, 3 Bd Voltaire.", "3 ou 4 m, 3 ou 4 m2 et 2 m3. 50 Mds ou 50 Mns ! St, Stés, Sts, Ste, Ets, ts, ts, Éts, Éts ...", "Mlle, Mlles, Mme, Mmes et erreurs Melle, Melles", "Me, Me martin, Me Martin, Mes M.&T., MMes M.&T.", 'avant Mon 1er lien et logo 6e', 'avant [Mon 1er lien->www.mon-1er-lien.com] apres le "test"!', 'on est passé du 7e au 15e rang, pas du 17e au 5e, des 7es aux 3emes !', 'on est passé du 7eme au 15ème rang, pas du 17ieme au 5ème', ); test_outil(cs_test_fun($textes, 'typo_exposants'), 'Test sur : typo_exposants() - Charset du site : '.$GLOBALS['meta']['charset']); // test de typo_guillemets() $textes = array( 'avant le "test"!', 'avant toto. apres le "test"!', 'avant '.echappe_html('', 'TEST', true).'apres le "test"!', 'avant '.echappe_html('toto', 'TEST', true).'apres le "test"!', 'avant Mon lien apres le "test"!', 'avant [Mon lien->www.monlien.com] apres le "test"!', ); test_outil(cs_test_fun($textes, 'typo_guillemets'), 'Test sur : typo_guillemets()'); // test des smileys $textes = array( "Doubles : :-(( :-)) :)) :'-)) :-))", "Simples : :-> :-> :-( :-D :-) |-) :'-) :-) :'-D :-D :'-( :-( :-( :o) B-) ;-) :-p :-P' :-| :-/ :-o :-O", "les courts (reconnus s'il y a un espace avant) : :) :( ;) :| |) :/ :(", ); test_outil(cs_test_fun($textes, 'cs_smileys_pre_typo'), 'Test sur : cs_smileys_pre_typo()'); // test des filets $textes = array( "__degrade.png__\n__ornement.png__", "\n__6__\n__5__\n__4__\n__3__\n__2__\n__1__\n__0__\n", ); if(function_exists('filets_sep')) test_outil(cs_test_fun($textes, create_function('$t','return propre(filets_sep($t));')), 'Test sur : filets_sep()'); // test des liens orphelins $GLOBALS["liens_orphelins_etendu"]=true; $textes = array( "http://google.fr et http://google.fr et http://google.fr et http://google.fr", "Voici : http://google.fr. Voici :http://www.google.fr. Voici http://www.google.fr", "voici : https://mabanque.fr ou encore ftp://mabanque.fr!", "www.google.fr ou bien : www.google.fr", "http://user:password@www.commentcamarche.net:80/glossair/glossair.php3 et http://serveur:port/repertoire/fichier.html", "ftp://serveur/repertoire/fichier.qqchose, ou encore ftp.stockage.fr/tropdelaballe...", "file:///disque|/repertoire/fichier.qqchose et : file:///c|/tmp/fichier.txt", "mailto:nom@organisation.domaine et : mailto:Fabien.Gandon@sophia.inria.fr", "telnet://bbs.monsite.com/ et telnet://Nom:Password@serveur.ici:port", "telnet://gandonf:abcde@gopa.insa.fr:23", "gopher://serveur.ici:port/repertoire/fichier#marqueur et gopher://gopher.monsite.com/", "newsrc://serveur:port/repertoire/nom.de.la.news", "wais://host.ici:port/database et wais://wais.monsite.com/", "news:fr.comp.lang.c++ et pkoi pas :
      http://google.fr", "moi+moi@world.com, mailto:moi-moi@world.com, mailto:nom@provider.com?subject=renseignement", "moi+moi@kekpar.tm.fr, mailto:moi-moi@kekpar.tm.fr, mailto:nom@provider.com.tm.fr?subject=renseignement", 'une image ? ', '[->http://www.americas-society.org/] ', ); // test_outil(cs_test_fun($textes, 'typo'), 'Test sur : echappements'); test_outil(cs_test_fun($textes, 'liens_orphelins'), 'Test sur : liens_orphelins()'); $textes = array( "mailto:nom@organisation.domaine et : mailto:Fabien.Gandon@sophia.inria.fr (on supprime ces liens)", "moi+moi@world.com, mailto:moi-moi@world.com, mailto:nom@provider.com?subject=renseignement", "pat@moi.com [->pat@moi.com] [pat->pat@moi.com]", "pat@moi.com.tm.fr [->pat@moi.com.tm.fr] [pat->pat@moi.com.tm.fr]", "Moi et : moi@toto.com", "Moi et : moi@kekpar.tm.fr", '[Navigation->/@mot.html] Navigation', ); test_outil(cs_test_fun($textes, 'mailcrypt'), 'Test sur : mailcrypt()'); /* define('_COULEURS_FONDS', 1); define('_COULEURS_SET', 1); define('_COULEURS_PERSO', "bas =#99CC11, haut= brown, test= bleu"); couleurs_installe_dist(); print_r(couleurs_pre_typo("to[bas]to[/bas]to[haut]to[/haut]toto[test]to[/couleur]to\nto[bg bas]to[/bg]to[bg haut]to[/bg]toto[bg test]to[/bg test]to\n")); print_r(couleurs_pre_typo("to[red]to[/red]to[bleu]to[/bleu]toto[rouge]to[/couleur]to\nto[bg red]to[/bg]to[bg bleu]to[/bg]toto[bg rouge]to[/bg rouge]to\n")); */ } ?>exec/admin_couteau_suisse_head.html000066600000026451151452625100013564 0ustar00 exec/description_outil.php000066600000003243151452625100011747 0ustar00exec/action_rapide.php000066600000005264151452625100011016 0ustar00exec/admin_couteau_suisse_old.php000066600000000570151452625100013256 0ustar00exec/cs_version.php000066600000003133151452625100010360 0ustar00([0-9.]+),', $distant, $regs)?$regs[1]:''; $maj[0] = time(); if ($distant) ecrire_meta('tweaks_maj', serialize($maj)); ecrire_metas(); } include_spip('inc/texte'); include_spip('couteau_suisse_fonctions'); // fonctions pour les pipelines if (!$distant) return ajax_retour(''._T('couteauprive:erreur:probleme', array('pb'=>cs_lien(_URL_CS_PLUGIN_XML,_T('couteauprive:erreur:distant')))).''); ajax_retour(ptobr(propre($distant==$version?_T('couteauprive:version_a_jour'):( $distant?_T('couteauprive:version_nouvelle', array('version' => "[{$distant}->http://files.spip.org/spip-zone/couteau_suisse.zip]")):'' )))); } ?>exec/admin_couteau_suisse.php000066600000031774151452625100012432 0ustar00$a, 'outil'=>$outils[$outil]))) unset($metas_vars[$a]); else spip_log("Reset interdit de la variable %$a% !!"); ecrire_meta('tweaks_variables', serialize($metas_vars)); } // tout recompiler cout_exec_redirige("cmd=descrip&outil={$_GET[outil]}#cs_infos"); } // reset de l'affichage if($cmd=='showall'){ spip_log("Reset de tous les affichages du Couteau Suisse par l'auteur id=$connect_id_auteur"); effacer_meta('tweaks_caches'); cout_exec_redirige(); } // afficher la description d'un outil ? $afficher_outil = ($cmd=='descrip' OR $cmd=='switch')?$outil:''; // initialisation generale forcee : recuperation de $outils; cs_initialisation(true, $cmd!='noinclude'); cs_installe_outils(); // mise a jour des donnees si envoi via formulaire // sinon fait une passe de verif sur les outils if($cmd=='switch' OR $cmd=='hide'){ enregistre_modif_outils($cmd, $outil); cout_exec_redirige(strlen($outil)?"cmd=descrip&outil=$outil#cs_infos":''); } // else // verif_outils(); $t = charger_fonction('commencer_page', 'inc'); echo $t(couteauprive_T('titre'), 'configuration', 'couteau_suisse'); // versions du Couteau Suisse et de la barre typo include_spip('inc/plugin'); if(isset($GLOBALS['meta']['plugin'])) { $t = unserialize($GLOBALS['meta']['plugin']); $dir = $t['COUTEAU_SUISSE']['dir']; $dir_type = $t['COUTEAU_SUISSE']['dir_type']; // obsolete pour SPIP>=3.0 : $bt_dir = $t['BARRETYPOENRICHIE']['dir']; $bt_version = $t['BARRETYPOENRICHIE']['version']; } if(!strlen($dir)) $dir = 'couteau_suisse'; if(!strlen($bt_dir)) $bt_dir = 'barre_typo_v2'; $get_infos = defined('_SPIP20100')?charger_fonction('get_infos','plugins'):'plugin_get_infos'; $t = isset($dir_type)?$get_infos($dir, false, constant($dir_type)):$get_infos($dir); $cs_version_base = $t['version_base']; $cs_version = $t['version']; if(!function_exists('installe_un_plugin')) { // ici SPIP >= 3.0 // TODO: redondances probables a revoir // mises a jour eventuelles de la base $installer_plugins = charger_fonction('installer', 'plugins'); /*$infos = */$installer_plugins('couteau_suisse', 'install'); parse_str(parametres_css_prive(), $paramcss); } else { // compatibilite SPIP < 3.0 // mises a jour eventuelles de la base $paramcss = array(); installe_un_plugin($dir, $t, $dir_type); } if(!strlen($bt_version)) { $bt_version = $get_infos($bt_dir); $bt_version = $bt_version['version']; } // precaution (inutile ?) sur mes_fonctions.php include_spip('public/parametrer'); $cs_revision = ((lire_fichier(_DIR_PLUGIN_COUTEAU_SUISSE.'svn.revision',$t)) && (preg_match(',(\d+),',$t, $r))) ?'
      '.couteauprive_T('version_revision', array('revision'=>$r[1])):""; include_spip('public/assembler'); echo recuperer_fond('exec/admin_couteau_suisse_head', array_merge( $paramcss, array( 'force' => in_array(_request('var_mode'), array('calcul', 'recalcul'))?'oui':null, 'cs_version' => $cs_version, 'exec' => _request('exec'), ))); if(!defined('_SPIP30000')) echo "


      "; gros_titre(couteauprive_T('titre'), '', false); // Onglet pour SPIP<3.0 if(!defined('_SPIP30000')) echo barre_onglets("configuration", 'couteau_suisse'); echo quelques_verifications($bt_version); // chargement des outils include_spip('inc/cs_outils'); list($outils_affiches_actifs, $liste_outils) = liste_outils(); // cadre de gauche echo debut_gauche('', true); $t = ''; if(isset($GLOBALS['cs_installer'])) foreach(array_keys($GLOBALS['cs_installer']) as $pack) $t .= "\n_ " . couteauprive_T('pack_du', array('pack'=>"{[{$pack}|".couteauprive_T('pack_installe').'->' . generer_url_ecrire($exec,'cmd=install&pack='.urlencode($pack)) . ']}')); $t = couteauprive_T('help2', array( 'version' => $cs_version.$cs_revision.'
      '. (defined('_CS_PAS_DE_DISTANT')?'('.couteauprive_T('version_distante_off').')':''.couteauprive_T('version_distante').'') )) . chargement_automatique() . '
      • ['.couteauprive_T('pack_titre') . '|' . couteauprive_T('pack_alt') . '->' . generer_url_ecrire($exec,'cmd=pack#cs_infos') . "]\n\n" . couteauprive_T('help3', array( 'reset' => generer_url_ecrire($exec,'cmd=resetall'), 'hide' => generer_url_ecrire($exec,'cmd=showall'), 'contribs' => "\n_ • " . cs_liste_contribs(25, "\n_ • "), 'install' => $t )); if(function_exists('redirige_action_post')) $t = redirige_action_post('charger_plugin', '', 'admin_couteau_suisse', '', $t); // SPIP >= 2.0 $t = '
      '.couteauprive_T('help')."\n\n$t
      "; echo debut_boite_info(true), propre($t), fin_boite_info(true); // if(strlen($t = cs_aide_raccourcis())) // echo debut_boite_info(true), $t, fin_boite_info(true); $t = cs_aide_pipelines($outils_affiches_actifs); if(strlen($t)) echo debut_boite_info(true), $t, fin_boite_info(true); echo pipeline('affiche_gauche',array('args'=>array('exec'=>$exec),'data'=>'')); // cadre de droite echo creer_colonne_droite('', true); echo pipeline('affiche_droite',array('args'=>array('exec'=>$exec),'data'=>'')), debut_droite('', true), debut_cadre_trait_couleur(find_in_path('img/couteau-24.gif'),true,'',' '.couteauprive_T('outils_liste')), '
      ', couper($t = couteauprive_T('outil_intro'), 50), '
      ', $t, '
      '; if(strlen($t = cs_aide_raccourcis())) echo '
      ', couper($t, 50), '
      ', $t, '
      '; echo "\n
      "; $_GET['source'] = $exec; echo '
      ', $liste_outils, '


      '.http_img_pack('searching.gif','*','').' ...
      '; flush(); echo '
      ', ($cmd=='pack' || ($cmd=='descrip' && $outil=='pack')) ?cs_description_pack():description_outil2($afficher_outil), '

      ', couteauprive_T('erreur:js'),'
      ', '
      ', '', fin_cadre_trait_couleur(true), pipeline('affiche_milieu',array('args'=>array('exec'=>$exec),'data'=>'')), fin_gauche(), fin_page(); cs_log(" FIN : exec_admin_couteau_suisse()"); } // messages d'avertissments eventuels function quelques_verifications($bt_version) { // test sur jQuery $res = ""; // verification d'une base venant de SPIP 1.8 $tmp = spip_query('DESCRIBE spip_meta valeur'); $tmp = function_exists('spip_fetch_array')?spip_fetch_array($tmp):sql_fetch($tmp); if(strlen($tmp['Type']) && $tmp['Type']!='text') $res .= "

      Attention : votre base semble ancienne et le Couteau Suisse ne va pas bien fonctionner.

      La table 'spip_meta' a pour type de valeur '$tmp[Type]' au lieu de 'text'.

      "; if(!defined('_SPIP30000')) { // verification de la barre typo V2 (SPIP<3.0) $mini = '2.5.3'; if(strlen($bt_version) and (version_compare($bt_version,$mini,'<'))) $res .= "

      ".couteauprive_T('erreur:bt', array('version'=>$bt_version, 'mini'=>$mini))."

      "; } return "
      $res
      "; } // clic pour la mise a jour du Couteau Suisse function chargement_automatique() { // si le plugin est installe par procedure automatique, on permet la mise a jour directe (SPIP >= 2.0) $arg_chargeur = $GLOBALS['spip_version_base']>=15828?'url_zip_plugin2':'url_zip_plugin'; // eq. SPIP >= 2.1.2 $res = preg_match(',plugins/auto/couteau_suisse/$,',_DIR_PLUGIN_COUTEAU_SUISSE)? "" . "
      " :""; // un lien si le plugin plugin "Telechargeur" est present (SPIP < 2.0) if(!strlen($res) && defined('_DIR_PLUGIN_CHARGEUR')) $res = "
      ".couteauprive_T('version_update_chargeur').''; return $res; } // callback pour les contribs function cs_couper_25($matches) { return couper(couteauprive_T($matches[1]), 25); } ?>exec/charger_description_outil.php000066600000002003151452625100013433 0ustar00'.description_outil2($outil_id).'
      '; } cs_log(" FIN : exec_charger_description_outil_dist()"); } ?>exec/cs_boite_rss.php000066600000005151151452625100010666 0ustar00$1 ($d)
      ", $t); $p .= "
    • $t
    • "; } } else { // pour cs_lien() include_spip('couteau_suisse_fonctions'); $p = ''._T('couteauprive:erreur:probleme', array('pb'=>cs_lien(_CS_RSS_SOURCE,_T('couteauprive:erreur:distant')))).''; } $du = affdate_heure(date('Y-m-d H:i:s',time())); $p = '
        '.$p .'

      ' ._T('couteauprive:rss_edition')."
      $du

      " .'

      ' ._T('couteauprive:rss_actualiser').' | ' ._T('couteauprive:rss_source').'

      '; if($c) ecrire_fichier(_CS_TMP_RSS, $p); ajax_retour($p); } ?>paquet.xml000066600000006273151452625100006602 0ustar00 <multi>[en]Swiss Knife[fr]Le Couteau Suisse[ca]El Ganivet Suís[ar]سكين الجيب[nl]Het Zwitserland Mes[gl]A navalla suíza[es]La Navaja Suiza[de]Schweizer Taschenmesser[tr]İsviçre Çakısı[br]Ar Gontell Suis[pt_br]Canivete Suíço[ast]La Navaya Suiza[gl]A navalla suíza[ro]Cuţitul Elveţian[it]Coltellino Svizzero</multi> Patrice Vanneufville~©~2007-2011 2007-2011 GPL Collectif SPIP, Vincent Ramos, Maïeul Rouquette, Fil, Arnaud Ventre, Joseph Larmarange, Cerdic, Pierre Andrews (Mortimer), IZO, Phil, Jérôme Combaz, Bertrand Marne, Têtue, Aurélien Pierard, FredoMkb, Sylvain, BoOz, Alexis Roussel, Paolo, PatV, Yohann(potter64), Nicolas Hoizey, Piero Wbmstr, etc. outils/insertions.php000066600000002026151452625100010776 0ustar00outils/jquery.localscroll.js000066600000010353151452625100012257 0ustar00/** * jQuery.LocalScroll * Copyright (c) 2007-2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com * Dual licensed under MIT and GPL. * Date: 6/3/2008 * * @projectDescription Animated scrolling navigation, using anchors. * http://flesler.blogspot.com/2007/10/jquerylocalscroll-10.html * @author Ariel Flesler * @version 1.2.6 * * @id jQuery.fn.localScroll * @param {Object} settings Hash of settings, it is passed in to jQuery.ScrollTo, none is required. * @return {jQuery} Returns the same jQuery object, for chaining. * * @example $('ul.links').localScroll(); * * @example $('ul.links').localScroll({ filter:'.animated', duration:400, axis:'x' }); * * @example $.localScroll({ target:'#pane', axis:'xy', queue:true, event:'mouseover' }); * * Notes: * - The plugin requires jQuery.ScrollTo. * - The hash of settings, is passed to jQuery.ScrollTo, so the settings are valid for that plugin as well. * - jQuery.localScroll can be used if the desired links, are all over the document, it accepts the same settings. * - If the setting 'lazy' is set to true, then the binding will still work for later added anchors. * - The setting 'speed' is deprecated, use 'duration' instead. * - If onBefore returns false, the event is ignored. **/ ;(function( $ ){ var URI = location.href.replace(/#.*/,'');//local url without hash var $localScroll = $.localScroll = function( settings ){ $('body').localScroll( settings ); }; //Many of these defaults, belong to jQuery.ScrollTo, check it's demo for an example of each option. //@see http://www.freewebs.com/flesler/jQuery.ScrollTo/ $localScroll.defaults = {//the defaults are public and can be overriden. duration:1000, //how long to animate. axis:'y',//which of top and left should be modified. event:'click',//on which event to react. stop:true,//avoid queuing animations hash: true//if true, the hash of the selected link, will appear on the address bar. /* lock:false,//ignore events if already animating lazy:false,//if true, links can be added later, and will still work. target:null, //what to scroll (selector or element). Keep it null if want to scroll the whole window. filter:null, //filter some anchors out of the matched elements. */ }; //if the URL contains a hash, it will scroll to the pointed element $localScroll.hash = function( settings ){ settings = $.extend( {}, $localScroll.defaults, settings ); // settings.hash = false;//can't be true if( location.hash ) setTimeout(function(){ scroll( 0, location, settings ); }, 0 );//better wrapped with a setTimeout }; $.fn.localScroll = function( settings ){ settings = $.extend( {}, $localScroll.defaults, settings ); return ( settings.persistent || settings.lazy ) ? this.bind( settings.event, function( e ){//use event delegation, more links can be added later. var a = $([e.target, e.target.parentNode]).filter(filter)[0];//if a valid link was clicked. a && scroll( e, a, settings );//do scroll. }) : this.find('a,area')//bind concretely, to each matching link .filter( filter ).bind( settings.event, function(e){ scroll( e, this, settings ); }).end() .end(); function filter(){//is this a link that points to an anchor and passes a possible filter ? href is checked to avoid a bug in FF. return !!this.href && !!this.hash && this.href.replace(this.hash,'') == URI && (!settings.filter || $(this).is( settings.filter )); }; }; function scroll( e, link, settings ){ var id = link.hash.slice(1), elem = document.getElementById(id) || document.getElementsByName(id)[0]; if ( elem ){ e && e.preventDefault(); var $target = $( settings.target || $.scrollTo.window() );//if none specified, then the window. if( settings.lock && $target.is(':animated') || settings.onBefore && settings.onBefore.call(link, e, elem, $target) === false ) return; if( settings.stop ) $target.queue('fx',[]).stop();//remove all its animations $target .scrollTo( elem, settings )//do scroll .trigger('notify.serialScroll',[elem]);//notify serialScroll about this change if( settings.hash ) $target.queue(function(){ location = URI+link.hash; // make sure this function is released $(this).dequeue(); }); } }; })( jQuery );outils/liens_orphelins_fonctions.php000066600000003312151452625100014057 0ustar00 pour eviter les doublons if (strpos($texte, ',Ums', 'cs_liens_echappe_callback', $texte); // prudence 2 : on protege TOUS les raccourcis de liens Spip, au cas ou... if (strpos($texte, '[')!==false) $texte = preg_replace_callback(',\[([^][]*)->(>?)([^]]*)\],msS', 'cs_liens_echappe_callback', $texte); // prudence 3 : on protege TOUTES les balises contenant des points, histoire de voir plus clair if (strpos($texte, '<')!==false) $texte = preg_replace_callback(',<[^>]+\.[^>]*>,Ums', 'cs_liens_echappe_callback', $texte); // encore ici, on s'en va si pas de point... if (strpos($texte, '.')===false) return echappe_retour($texte, 'LIENS'); // trouve et protege : protocole://qqchose $texte = preg_replace_callback(_cs_liens_HTTP, 'cs_liens_raccourcis_callback', $texte); // trouve et protege : www.lieu.qqchose ou ftp.lieu.qqchose $texte = preg_replace_callback(_cs_liens_WWW, 'cs_liens_raccourcis_callback', $texte); // trouve : mailto:qqchose ou news:qqchose if($GLOBALS['liens_orphelins']>0) { $texte = preg_replace_callback(_cs_liens_NEWS, 'cs_liens_raccourcis_callback', $texte); $texte = preg_replace_callback(_cs_liens_MAILS, 'cs_liens_email_callback', $texte); } return echappe_retour($texte, 'LIENS'); } ?>outils/blocs_fonctions.php000066600000015367151452625100012001 0ustar00code = "blocs_balises('titre', array(".blocs_arguments($p).'))'; $p->interdire_scripts = false; return $p; } function blocs_arguments(&$p) { $i = 0; $args = array(); while(($a = interprete_argument_balise(++$i,$p)) != NULL) $args[] = $a; return join(",", $args); } // 3 balises obsoletes function balise_BLOC_TITRE_NUM(&$p) {return balise_BLOC_TITRE($p);} function balise_BLOC_VISIBLE_TITRE_NUM(&$p) {return balise_BLOC_VISIBLE_TITRE($p);} function balise_BLOC_VISIBLE_TITRE(&$p) { // Produire le premier argument {visible} $texte = new Texte; $texte->type='texte'; $texte->texte='visible'; array_unshift($p->param, array(0=>NULL, 1=>array(0=>$texte))); return balise_BLOC_TITRE($p); } function balise_BLOC_RESUME($p) { $p->code = "blocs_balises('resume')"; $p->interdire_scripts = false; return $p; } function balise_BLOC_DEBUT($p) { $p->code = "blocs_balises('debut', array(".blocs_arguments($p).'))'; $p->interdire_scripts = false; return $p; } function balise_BLOC_FIN($p) { $p->code = "blocs_balises('fin')"; $p->interdire_scripts = false; return $p; } function balise_BLOC_TITRE_DEBUT($p) { $p->code = "blocs_balises('titre_debut', array(".blocs_arguments($p).'))'; $p->interdire_scripts = false; return $p; } function balise_BLOC_TITRE_FIN($p) { $p->code = "blocs_balises('titre_fin')"; $p->interdire_scripts = false; return $p; } // Renvoie un code JQuery pour deplier un bloc au chargement de la page. // Exemple pour deplier le 5eme bloc : #BLOC_DEPLIER{4} (l'index commence a zero) function balise_BLOC_DEPLIER($p) { $eq = interprete_argument_balise(1, $p); $p->code = "bloc_deplier_script(intval($eq))"; $p->interdire_scripts = false; return $p; } // Renvoie un code JQuery pour deplier un bloc numerote au chargement de la page. // Exemple pour deplier le bloc .cs_bloc4 : #BLOC_DEPLIER_NUM{4} function balise_BLOC_DEPLIER_NUM($p) { $eq = interprete_argument_balise(1, $p); $p->code = "bloc_num_deplier_script(intval($eq))"; $p->interdire_scripts = false; return $p; } // Renvoie un code JQuery pour courcuiter la variable configurant les blocs uniques // Argument : oui/non ou 0/1 function balise_BLOC_UNIQUE($p) { $arg = interprete_argument_balise(1, $p); $p->code = "bloc_unique_script($arg)"; $p->interdire_scripts = false; return $p; } // fonction (SPIP>=2.0) pour le calcul de la balise #BLOC_DEPLIER function bloc_deplier_script($num=0) { return $num<0?'':http_script("jQuery(document).ready(function() { jQuery('"._BLOC_TITRE_H.".blocs_titre').eq($num).click(); });"); } // fonction (SPIP>=2.0) pour le calcul de la balise #BLOC_DEPLIER_NUM function bloc_num_deplier_script($num=-1) { return $num<0?'':http_script("jQuery(document).ready(function() { jQuery('div.cs_bloc$num').children('.blocs_titre').eq(0).click(); });"); } // fonction (SPIP>=2.0) pour le calcul de la balise #BLOC_UNIQUE function bloc_unique_script($num=1) { $num = ($num==='oui' || intval($num)>0)?1:0; return http_script("var blocs_replier_tout = $num;"); } // fonction pour le calcul des balises de type #BLOC_XXX // $args ne sert que pour #BLOC_TITRE et contient les arguments de la balise sous forme de tableau function blocs_balises($type, $args=array()) { // statut binaire : bit1=ajax bit2=titre bit3=resume bit4=debut // 2 = ajax (20 si distant) ; 1 = titre pas d'ajax (10 si distant); idem negatif = bloc visible static $bloc_stade; $k=isset($bloc_stade)?count($bloc_stade):0; $stade=$k?abs($bloc_stade[--$k]):0; $distant = $replie = 1; $id = $numero = ''; switch($type) { case 'titre_debut': // id pour le bloc distant $id = ' id="cs_bloc_id_' . array_shift($args) . '"'; $distant = 10; case 'titre': foreach($args as $a) { if(is_numeric($a=trim($a))) $numero = ' cs_bloc'.$a; elseif($a=='visible') $replie = -1; elseif($a=='invisible') $replie = 1; elseif(strlen($a)) $fragment = $a; } if (isset($fragment)){ $ajax=' blocs_ajax '; $bloc_stade[]=2*$distant*$replie; } else { $fragment="javascript:;"; $ajax=''; $bloc_stade[]=1*$distant*$replie; } $replie = $replie>0?' blocs_replie':''; return "
      <"._BLOC_TITRE_H." class=\"blocs_titre$replie$ajax\"$id>"; case 'resume': $class=$bloc_stade[$k]>0?'':' blocs_invisible blocs_slide'; if($stade<1 || $stade>2) // on DOIT arriver de titre die("Erreur : #BLOC_RESUME sans #BLOC_TITRE ($stade)"); $bloc_stade[$k]=$bloc_stade[$k]>0?3:-3; // 3 = resume return "
      "; case 'debut': if(count($args)) { // debut d'un bloc depliable a distance foreach($args as $a) { if($a=='visible') $replie = -1; elseif($a=='invisible') $replie = 1; elseif(strlen($a)) $id = " cs_bloc_id_$a"; } $bloc_stade[]=11; $class = $replie>0?' blocs_invisible blocs_slide':''; return "
      "; } $class=$bloc_stade[$k]<0?'':' blocs_invisible blocs_slide'; $bloc_stade[$k]=$bloc_stade[$k]>0?4:-4; // 4=debut if($stade == 3) // on arrive du resume, fermer la div resume seulement return "
      "; else { if($stade<1 || $stade>2) // on DOIT arriver de titre die("Erreur : #BLOC_DEBUT sans #BLOC_TITRE ($stade)"); return '
      "; } case 'titre_fin': $k=isset($bloc_stade)?abs(array_pop($bloc_stade)):0; if($k==10 || $k==20) // on DOIT arriver de #BLOC_TITRE_DEBUT return '
      '; die("Erreur : #BLOC_TITRE_FIN sans #BLOC_TITRE_DEBUT ($k)"); case 'fin': $k=isset($bloc_stade)?abs(array_pop($bloc_stade)):0; switch($k) { case 4:return "
      "; case 11:return "
      "; default:die("Erreur : #BLOC_FIN sans #BLOC_DEBUT ($k)"); } } } ?>outils/ecran_securite.php000066600000003543151452625100011601 0ustar00\n@puce@ "._T("couteauprive:ecran_conflit".($flux['non']?"2":""), array("file"=>_NOM_PERMANENTS_INACCESSIBLES."ecran_securite.php"))."" :""; if(defined('_ECRAN_SECURITE')) { $vers = _ECRAN_SECURITE; // recherche de la version du fichier distant include_spip("outils/maj_auto_action_rapide"); $maj = maj_auto_rev_distante(_MAJ_ECRAN_SECU,false,",(\d+\.\d+(\.\d+)?),",0,true); if($maj{0} != "-") $tmp = "\n".(_ECRAN_SECURITE!=$maj?"- "._T("couteauprive:ecran_maj_ko", array("n"=>"$maj")):_T("couteauprive:ecran_maj_ok")); } else $vers=_T("couteauprive:ecran_ko"); // options SPIP en amont ? (mieux !) if(!defined("_CS_SPIP_OPTIONS_OK")) $tmp .= "\n- "._T("couteauprive:detail_spip_options2"); $flux['texte'] = str_replace(array("@_ECRAN_SECURITE@","@_ECRAN_CONFLIT@","@_ECRAN_SUITE@"), array($vers,$conf,$tmp), $flux['texte']); return $flux; } # TODO : eviter l'insertion et recopier le fichier dans config/mes_options.php pour SPIP>=2.1 function ecran_securite_fichier_distant($flux) { // besoin du 1er appel uniquement if($flux['outil']!='ecran_securite' || isset($flux['texte'])) return $flux; // fichier global de config (y compris la mutu) $flux['fichier_local'] = dirname(cs_spip_file_options(4)).'/ecran_securite.php'; // fichier local de config #$flux['fichier_local'] = dirname(cs_spip_file_options(3)).'/ecran_securite.php'; return $flux; } ?>outils/blocs.css.html000066600000000671151452625100010653 0ustar00.blocs_titre { background:transparent url([(#EVAL{_DIR_IMG_PACK}|url_absolue)]triangle-bas.gif) no-repeat scroll left center; font-weight:normal; line-height:1.2em; margin-top:4px; padding:0pt 0pt 0pt 20px; margin-bottom:0.1em; clear:left; cursor:pointer; } .blocs_replie { background:transparent url([(#EVAL{_DIR_IMG_PACK}|url_absolue)]triangle.gif) no-repeat scroll left center; } .blocs_title{ display:none; }outils/decoupe_fonctions.php000066600000025752151452625100012322 0ustar00

      '); define('_onglets_CONTENU2', '

      '); // sans le ! define('_onglets_DEBUT', '
      '); define('_onglets_REGEXPR', ',(.*?),ms'); // aide le Couteau Suisse a calculer la balise #INTRODUCTION $GLOBALS['cs_introduire'][] = 'decoupe_nettoyer_raccourcis'; // filtre ajoutant 'artpage' a l'url function decoupe_url($url, $page, $num_pages) { return parametre_url($url, 'artpage',$page>1?"{$page}-{$num_pages}":''); } function onglets_callback($matches) { // cas des onglets imbriques if (strpos($matches[2], '   

      '); $t = preg_split(',(\n\n|\r\n\r\n|\r\r),', $matches[2], 2); $texte = preg_replace(','.preg_quote(_decoupe_SEPARATEUR, ',').'(.*?)(\n\n|\r\n\r\n|\r\r),ms', _decoupe_FILET."

      $1

      \n\n", $t[1]); // on sait jamais... str_replace(_decoupe_SEPARATEUR, _decoupe_FILET, $texte); return '

      ' . textebrut(echappe_retour($t[0],'CS')) . "

      \n\n$texte\n\n
      "; } $onglets = $contenus = array(); $pages = explode(_decoupe_SEPARATEUR, $matches[2]); foreach ($pages as $p) { $t = preg_split(',(\n\n|\r\n\r\n|\r\r),', $p, 2); $t = array(trim(textebrut(nettoyer_raccourcis_typo(echappe_retour($t[0],'CS')))), cs_safebalises($t[1])); if(strlen($t[0].$t[1])) $contenus[] = _onglets_CONTENU.$t[0]._onglets_CONTENU2."
      \n\n".$t[1]."\n\n
      "; } return _onglets_DEBUT.join('', $contenus).''._onglets_FIN; } // fonction appellee sur les parties du texte non comprises entre les balises : html|code|cadre|frame|script|acronym|cite function decouper_en_onglets_rempl(&$texte) { // compatibilite avec la syntaxe de Pierre Troll if (strpos($texte, '', '', $texte); $texte = preg_replace(',]*\|titre=([^>]*)>\s*,', "\\1\n\n", $texte); $texte = preg_replace(',\s*]*)>\s*,', "\n\n++++\\1\n\n", $texte); } // il faut un callback pour analyser l'interieur du texte return preg_replace_callback(_onglets_REGEXPR, 'onglets_callback', $texte); } // fonction appellee sur les parties du textes non comprises entre les balises : html|code|cadre|frame|script|acronym|cite function decouper_en_pages_rempl($texte, $pagination_seule=false) { // un seul id par page... static $id_decoupe = ''; // si pas de separateur, on sort if (strpos($texte, _decoupe_SEPARATEUR)===false) return $pagination_seule?'':$texte; // au cas ou on ne veuille pas de decoupe, on remplace les '++++' par un filet. if (defined('_CS_PRINT') && !$pagination_seule) { @define(_decoupe_FILET, '

         

      '); return str_replace(_decoupe_SEPARATEUR, _decoupe_FILET, $texte); } // recherche du sommaire s'il existe if (defined('_sommaire_REM') && (substr_count($texte, _sommaire_REM)==2)) { $pages = explode(_sommaire_REM, $texte); $sommaire = $pages[0].$pages[1]; $texte = $pages[2]; } else $sommaire = ''; // traitement des pages $pages = explode(_decoupe_SEPARATEUR, $texte); $num_pages = count($pages); if ($num_pages == 1) return $pagination_seule?'':$texte; $artpage = max(intval(artpage()), 1); $artpage = min($artpage, $num_pages); /* // si numero illegal ou si var_recherche existe, alors renvoyer toutes les pages, separees par une ligne
      . // la surbrillance pourra alors fonctionner correctement. if (strlen($_GET['var_recherche']) || $artpage < 1 || $artpage > $num_pages) return join("
      ", $pages); */ // si la balise #CS_DECOUPE est utilisee on renvoie le texte sans pagination if (!$pagination_seule) { // page demandee $page = cs_safebalises($pages[$artpage-1]); if (isset($_GET['decoupe_recherche'])) { include_spip('inc/surligne'); $page = surligner_mots($page, $_GET['decoupe_recherche']); } if (defined('_decoupe_BALISE')) return $sommaire.$page; } $self = nettoyer_uri();//self();//$GLOBALS['REQUEST_URI']; // liens des differentes pages sous forme : 1 2 3 4 $milieu = ''; for ($i = 1; $i <= $num_pages; $i++) { $page_ = supprimer_tags(cs_safebalises(cs_introduire(echappe_retour($pages[$i-1],'CS')))); $title = preg_split("/[\r\n]+/", trim($page_), 2); $title = attribut_html(/*propre*/(couper($title[0], _decoupe_NB_CARACTERES)));//.' (...)'; $milieu .= recuperer_fond('fonds/decoupe_item', array( 'page'=>$i, 'artpage'=>$artpage, 'derniere_page'=>$num_pages, 'title_page'=>_T('couteau:page_lien', array('page' => $i, 'title' => $title)), 'self' =>$self, )); } // pagination finale $pagination = recuperer_fond('fonds/decoupe', array( 'artpage'=>$artpage, 'derniere_page'=>$num_pages, 'items'=>$milieu, 'self' =>$self, )); if ($pagination_seule) { if(trim($pagination)=="") return ""; $pagination = "\n"; return $pagination; } // ici $pagination_seule est false, $page est definie $pagination1 = "\n"; $pagination2 = "\n"; $id_decoupe++; return $sommaire.$pagination1.$page.$pagination2; } // supprime les notes devenues orphelines function decoupe_notes_orphelines(&$texte) { if($GLOBALS['les_notes']=='') return; $notes = $GLOBALS['les_notes']; /* if(function_exists('tester_variable')) tester_variable('ouvre_note', '['); // tester_variable() depreciee sous SPIP 2.0 else*/ if (!isset($GLOBALS['ouvre_note'])) $GLOBALS['ouvre_note'] = '['; $ouvre = preg_quote($GLOBALS['ouvre_note'],','); $appel = ",]*>.*?$ouvre]*(?:name|id)=[\"']nb([0-9]+)[\"'] class=[\"']spip_note[\"'] [^>]+>[^<]+.*?

      ,s"; preg_match_all($appel, $GLOBALS['les_notes'], $tableau); for($i=0;$icode = "calcul_balise_onglet($arg,1)"; $p->interdire_scripts = false; return $p; } function balise_ONGLETS_TITRE($p) { $arg = sinon(interprete_argument_balise(1,$p),'??'); $p->code = "calcul_balise_onglet($arg,2)"; $p->interdire_scripts = false; return $p; } function balise_ONGLETS_FIN($p) { $p->code = "calcul_balise_onglet('',3)"; $p->interdire_scripts = false; return $p; } function calcul_balise_onglet($arg, $type) { /* dans un onglet principal (non imbrique), on peut omettre #ONGLETS_DEBUT : pratique a l'interieur d'une boucle Sinon il faut jouer avec #COMPTEUR_BOUCLE : [(#COMPTEUR_BOUCLE|=={1}|?{' '})#ONGLETS_DEBUT{#NOM_SITE}] [(#COMPTEUR_BOUCLE|>{1}|?{' '})#ONGLETS_TITRE{#NOM_SITE}] (...) */ static $onglets_stade; if($type==2 && !isset($onglets_stade)) $type = 1; switch($type) { // #ONGLETS_DEBUT case 1:$onglets_stade=1; return _onglets_DEBUT._onglets_CONTENU.$arg._onglets_CONTENU2; // #ONGLETS_TITRE case 2:$onglets_stade=1; return ''._onglets_CONTENU.$arg._onglets_CONTENU2; // #ONGLETS_FIN case 3:unset($onglets_stade); return ''; } } // decode le parametre artpage=page-total // attention, artpage n'est pas toujours present function artpage($t=false, $index=0) { if($t===false) $t=_request('artpage'); $t=strlen($t)?explode('-', $t, 2):array('1','0'); return $t[$index]; } function artpage_fin($t=false) { if($t===false) $t=_request('artpage'); $t=strlen($t)?explode('-', $t, 2):array('1','0'); return $t[0]>0 && $t[0]==$t[1]; } function artpage_debut($t=false) { return artpage($t)==1; } // si on veut la balise #CS_DECOUPE (pagination uniquement) if (defined('_decoupe_BALISE')) { function balise_CS_DECOUPE_dist($p) { // id de l'article a trouver pour retourner son texte $texte = ($v = interprete_argument_balise(1,$p))!==NULL ? 'cs_champ_sql('.$v.')' : champ_sql('texte', $p); if ($p->type_requete == 'articles' || $v!==NULL) { $p->code = 'cs_decoupe(propre(cs_onglets(cs_supprime_notes('.$texte.'))), true)'; } else { $p->code = "''"; } $p->interdire_scripts = true; return $p; } } /* filtre |decoupe_type_pagination qui renvoie : 1 si le nombre doit etre affiche 2 si le nombre ne doit pas etre affiche 3 s'il faut afficher '...' voir le modele : modeles/decoupe_item.html */ function decoupe_type_pagination($page, $artpage, $page_fin, $rayon=4, $extremes=2) { $diametre = $rayon*2; if($page_fin<=$diametre+$extremes+1 || $page<=$extremes || $page>$page_fin-$extremes) return 1; $depart = max(1, $artpage - $rayon); $arrivee = $artpage + $rayon; if($arrivee-$depart<$diametre) $arrivee=$depart+$diametre; if($arrivee>$page_fin) $arrivee = $page_fin; if($arrivee-$depart<$diametre) $depart=$arrivee-$diametre; if($depart<=$extremes+1) $depart = 1; if($arrivee>=$page_fin-$extremes) $arrivee = $page_fin; if($page<$depart-1 || $page>$arrivee+1) return 2; if($page==$depart-1 || $page==$arrivee+1) return 3; return 1; } ?>outils/set_options.php000066600000000556151452625100011155 0ustar00 JAVASCRIPT; } ?>outils/glossaire_action_rapide.php000066600000004064151452625100013456 0ustar00mot'.$gi['id_mot'].']'; $b = '['.$gj['titre'].'->mot'.$gj['id_mot'].']'; $res[] = "• "._T('couteauprive:glossaire_erreur', array('mot1'=>$a, 'mot2'=>$b))."\n_ "; } } if(count($res)) return propre(join('', $res)._T('couteauprive:glossaire_inverser')); return ''; } function glossaire_action_rapide() { if(_request('test_bd')) { $info = glossaire_verifie($count); $info = $info ?('
      '.$info.'
      ') :('
      '._T('couteauprive:glossaire_ok', array('nb'=>$count)).'
      '); } else $info = ''; return ajax_action_auteur('action_rapide', 'test', 'admin_couteau_suisse', "arg=glossaire|description_outil&cmd=descrip#cs_action_rapide", "\n
      "._T('couteau:test_base')."
      $info"); } // fonction {$outil}_{$arg}_action() appelee par action/action_rapide.php function glossaire_test_action() { // lancer la verification des mots du glossaire redirige_vers_exec(array('test_bd' => 1)); } ?>outils/maj_auto_action_rapide.php000066600000034274151452625100013273 0ustar00=')) include_spip('outils/maj_auto_php5'); else { function cs_svn17($dir) { return false; } } define('_MAJ_SVN_FILE', 'file:///home/svn/repository/spip-zone/'); define('_MAJ_SVN_DEBUT', 'svn://zone.spip.org/spip-zone/'); define('_MAJ_SVN_TRAC', 'svn://trac.rezo.net/spip-zone/'); // ancienne URL define('_MAJ_ZONE', 'http://zone.spip.org/trac/spip-zone/'); define('_MAJ_LOG_DEBUT', _MAJ_ZONE.'log/'); define('_MAJ_LOG_FIN', '?format=changelog'); define('_MAJ_ZIP', 'http://files.spip.org/spip-zone/'); define('_MAJ_ECRAN_SECU', _MAJ_ZONE.'browser/_core_/securite/ecran_securite.php?format=txt'); // Pour SPIP = 2.0.X if(!function_exists('info_maj_spip')) { include_spip('inc/plugin'); if(!function_exists('spip_version_compare')) { function spip_version_compare($v1,$v2,$op) { return version_compare($v1,$v2,$op); } } function info_maj_spip(){ if (!autoriser('webmestre')) return ""; // derniere version de SPIP $maj = $GLOBALS['meta']['info_maj_spip']; if (!$maj) return ""; $maj = explode('|',$maj); // c'est une ancienne notif, on a fait la maj depuis ! if ($GLOBALS['spip_version_branche']!==array_shift($maj)) { // compat_maj_spip(true); return ""; } // derniere version de SPIP 2.?.? $maj = implode('|',$maj); if (strncmp($maj,"$maj, 'url'=>$lien, 'zip'=>'')); // derniere version de SPIP 2.0.? include_spip('lib/maj_auto/distant_mise_a_jour'); if(function_exists('info_maj_cache')) { list(,,$rev) = preg_split('/\D+/', $GLOBALS['spip_version_branche']); $nom = _DIR_CACHE_XML . _VERSIONS_LISTE; $page = info_maj_cache($nom, 'spip', !file_exists($nom) ? '' : file_get_contents($nom)); preg_match_all(',/SPIP\D+2\D+0(\D+(\d+))?.*?[.]zip",i', $page, $m, PREG_SET_ORDER); $page=0; foreach ($m as $v) if ($v[2]>$rev && $v[2]>$page) $page = $v[2]; if($page) { $lien = "http://files.spip.org/spip/archives/SPIP-v2-0-$page.zip"; // 'http://files.spip.org/spip/archives/#SPIP-v2-0-'.$page; $maj = _T('couteau:maj_rev_ok',array('revision'=>'2.0.'.$page, 'url'=>$lien, 'zip'=>'')) . '
      ' . $maj; } } // liens morts return preg_replace(',\[([^[]+)->\],', '$1', $maj); } function compat_maj_spip($forcer=false) { include_spip('lib/maj_auto/distant_mise_a_jour'); if(function_exists('genie_mise_a_jour_dist') && $forcer) return genie_mise_a_jour_dist(0); } } function maj_auto_action_rapide() { global $spip_version_affichee, $spip_version_base; $arg_chargeur = $spip_version_base>=15828?'url_zip_plugin2':'url_zip_plugin'; // eq. SPIP >= 2.1.2 $time = time(); $timeout = ini_get('max_execution_time'); $timeout = $timeout?min(30,floor($timeout/2)):10; $style = 'style="padding:0.4em;"'; // verification des mises a jour de SPIP>=2.1 include_spip('inc/presentation'); list($m1,$m2) = preg_split('/\D+/', $GLOBALS['spip_version_branche']); $html1 = (function_exists('info_maj_spip') && ($html1=info_maj_spip())) ?"
      "._T('couteauprive:help2', array('version'=>'SPIP '.$spip_version_affichee)).''.propre("\n|{{{$html1}}}|") .(preg_match(",$m1\.$m2\.\d+,",$html1)?'

      '._T('couteau:maj_spip').'

      ':'').'
      ' :''; // verification de l'ecran de securite if(defined('_ECRAN_SECURITE')) { $maj = maj_auto_rev_distante(_MAJ_ECRAN_SECU,false,",(\d+\.\d+(\.\d+)?),",0,true); if($maj{0}!="-" && _ECRAN_SECURITE!=$maj) { include_spip('inc/description_outil'); $html1 .= "\n
      "._T('couteauprive:help2', array('version'=>_T('couteauprive:ecran_securite:nom').' '._ECRAN_SECURITE)).'' . description_outil_liens(_T("couteauprive:ecran_maj_ko2", array("n"=>"$maj"))).'
      '; } } // verification des plugins include_spip('inc/plugin'); $plugins_actifs = array_values(liste_chemin_plugin_actifs()); // liste des extensions dispo sous SPIP 2.1 $plugins_extensions = defined('_SPIP20100')?array_values(liste_chemin_plugin_actifs(_DIR_EXTENSIONS)):array(); // tous, mais les actifs d'abord... $plugins = array_unique(array_merge($plugins_actifs, $plugins_extensions, liste_plugin_files())); $html_actifs = $html_inactifs = $html_extensions = array(); foreach ($plugins as $p) /*if(preg_match(',^auto/,', $p))*/ { $actif = in_array($p, $plugins_actifs, true); $extension = in_array($p, $plugins_extensions, true); $auto = preg_match(',^auto/,', $p); $infos = plugin_get_infos_maj($p, $stop=time()-$time>$timeout, $extension?_DIR_EXTENSIONS:_DIR_PLUGINS); $maj_lib = $checked = ''; if($stop) $maj_lib = ''.'Temps serveur écoulé : [poursuivre->#].'.''; elseif($infos['maj_dispo']) { $maj_lib = _T('couteau:maj_rev_ok', array('revision' => $infos['rev_rss'], 'url'=>$infos['url_origine'], 'zip'=>$infos['zip_trac'])); $checked = " class='maj_checked'"; } elseif($infos['rev_rss']>0 && $infos['rev_local']) $maj_lib = _T('couteau:maj'.($infos['svn']?'_svn':'_ok'), array('zip'=>$infos['zip_trac'], 'url'=>$infos['url_origine'])); elseif($auto) { $maj_lib = _T('couteau:maj_rev_ko', array('url'=>$infos['url_origine'])); $checked = " class='maj_checked'"; } elseif($infos['rev_local'] && $infos['rev_rss']<=0) $maj_lib = _T('couteau:maj_rev_ko', array('url'=>$infos['url_origine'])); // eventuels liens morts $maj_lib = preg_replace(',\[([^[]+)->\],', '$1', $maj_lib); $nom = preg_replace(",[\n\r]+,",' ',$infos['nom']). ' (v' .$infos['version'] . ')' . ($maj_lib?"\n_ {{".$maj_lib.'}}':''); $rev = $infos['rev_local']?_T('couteau:maj_rev', array('revision' => $infos['rev_local'])):''; if(strlen($infos['commit'])) $rev .= (strlen($rev)?'
      ':'') . cs_date_court($infos['commit']); if($infos['svn']) $rev .= '
      SVN'; if(!strlen($rev)) $rev = ' '; $zip_log = (strlen($infos['zip_log']) && $infos['zip_log']!=$infos['zip_trac']) ?"":''; $bouton = ' '; if($auto && !$stop) $bouton = strlen($infos['zip_trac']) ?"" :'
      ?
      '; if(strlen($zip_log)) { if (!$stop) $nom .= "\n_ "._T('couteau:maj_verif') . "\n_ $zip_log\n_ {$bouton}[->$infos[zip_trac]]