uawdijnntqw1x1x1
IP : 216.73.217.6
Hostname : webm002.cluster111.gra.hosting.ovh.net
Kernel : Linux webm002.cluster111.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
OS : Linux
PATH:
/
home
/
atelierpru
/
provence
/
52177
/
.
/
.
/
formulaires.tar
/
/
mot_de_passe.html000066600000003122152442521140010076 0ustar00<div class="formulaire_spip formulaire_mot_de_passe"> [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [(#ENV*{editable}|?{' '}) <form id="oubli_form" action="[(#ENV{action})]" method="post"> [(#REM) activer le traitement auto et dispatch sur charger/verifier/traiter] #ACTION_FORMULAIRE <fieldset> <legend><:pass_nouveau_pass:></legend> <div class="editer-groupe"> <div class="editer saisie_oubli obligatoire[ (#ENV*{erreurs}|table_valeur{oubli}|oui)erreur]"> <label for="oubli"><:pass_choix_pass:></label> [<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{oubli})</span>] <input type='password' class='text' name='oubli' id='oubli' value="#ENV**{oubli}" autocapitalize="off" autocorrect="off" /> </div> <div class="editer saisie_oubli_confirm obligatoire[ (#ENV*{erreurs}|table_valeur{oubli_confirm}|oui)erreur]"> <label for="oubli_confirm"><:info_confirmer_passe:></label> [<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{oubli_confirm})</span>] <input type='password' class='text' name='oubli_confirm' id='oubli_confirm' value="#ENV**{oubli_confirm}" autocapitalize="off" autocorrect="off" /> </div> </div> </fieldset> [(#REM) Piege a robots spammeurs ] <p style="display: none;"> <label for="nobot"><:antispam_champ_vide:></label> <input type="text" class="text" name="nobot" id="nobot" value="#ENV{nobot}" size="10" /> </p> <p class="boutons"><input type="submit" class="submit" value="<:pass_ok:>" /></p> </form> ] </div>oubli.html000066600000002435152442521140006554 0ustar00<div class="formulaire_spip formulaire_oubli"> [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [(#ENV*{editable}|?{' '}) <form id="oubli_form" action="[(#ENV{action})]" method="post"> [(#REM) activer le traitement auto et dispatch sur charger/verifier/traiter] #ACTION_FORMULAIRE <fieldset> <legend><:pass_nouveau_pass:></legend> <p><:pass_procedure_changer:></p> <div class="editer-groupe"> <div class="editer saisie_oubli obligatoire[ (#ENV*{erreurs}|table_valeur{oubli}|oui)erreur]"> <label for="oubli"><:entree_adresse_email:></label> [<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{oubli})</span>] <input[ (#HTML5|?{type="email" class="text email" autofocus="autofocus" required="required",type="text" class="text"})] name='oubli' id='oubli' value="#ENV**{oubli}" autocapitalize="off" autocorrect="off" /> </div> </div> </fieldset> [(#REM) Piege a robots spammeurs ] <p style="display: none;"> <label for="nobot"><:antispam_champ_vide:></label> <input type="text" class="text" name="nobot" id="nobot" value="#ENV{nobot}" size="10" /> </p> <p class="boutons"><input type="submit" class="submit" value="<:pass_ok:>" /></p> </form> ] </div> mot_de_passe.php000066600000010610152442521140007721 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) { return; } include_spip('base/abstract_sql'); function retrouve_auteur($id_auteur, $jeton = '') { if ($id_auteur = intval($id_auteur)) { return sql_fetsel( '*', 'spip_auteurs', array('id_auteur=' . intval($id_auteur), "statut<>'5poubelle'", "pass<>''") ); } elseif ($jeton) { include_spip('action/inscrire_auteur'); if ($auteur = auteur_verifier_jeton($jeton) and $auteur['statut'] <> '5poubelle' and $auteur['pass'] <> '' ) { return $auteur; } } return false; } // chargement des valeurs par defaut des champs du formulaire /** * Chargement de l'auteur qui peut changer son mot de passe. * Soit un cookie d'oubli fourni par #FORMULAIRE_OUBLI est passe dans l'url par &p= * Soit un id_auteur est passe en parametre #FORMULAIRE_MOT_DE_PASSE{#ID_AUTEUR} * Dans les deux cas on verifie que l'auteur est autorise * * @param int $id_auteur * @return array */ function formulaires_mot_de_passe_charger_dist($id_auteur = null, $jeton = null) { $valeurs = array(); // compatibilite anciens appels du formulaire if (is_null($jeton)) { $jeton = _request('p'); } $auteur = retrouve_auteur($id_auteur, $jeton); if ($auteur) { $valeurs['id_auteur'] = $id_auteur; // a toutes fins utiles pour le formulaire if ($jeton) { $valeurs['_hidden'] = '<input type="hidden" name="p" value="' . $jeton . '" />'; } } else { $valeurs['_hidden'] = _T('pass_erreur_code_inconnu'); $valeurs['editable'] = false; // pas de saisie } $valeurs['oubli'] = ''; $valeurs['nobot'] = ''; return $valeurs; } /** * Verification de la saisie du mot de passe. * On verifie qu'un mot de passe est saisi, et que sa longuer est suffisante * Ce serait le lieu pour verifier sa qualite (caracteres speciaux ...) * * @param int $id_auteur */ function formulaires_mot_de_passe_verifier_dist($id_auteur = null, $jeton = null) { $erreurs = array(); if (!_request('oubli')) { $erreurs['oubli'] = _T('info_obligatoire'); } else { if (strlen($p = _request('oubli')) < _PASS_LONGUEUR_MINI) { $erreurs['oubli'] = _T('info_passe_trop_court_car_pluriel', array('nb' => _PASS_LONGUEUR_MINI)); } else { if (!is_null($c = _request('oubli_confirm'))) { if (!$c) { $erreurs['oubli_confirm'] = _T('info_obligatoire'); } elseif ($c !== $p) { $erreurs['oubli'] = _T('info_passes_identiques'); } } } } if (isset($erreurs['oubli'])) { set_request('oubli'); set_request('oubli_confirm'); } if (_request('nobot')) { $erreurs['message_erreur'] = _T('pass_rien_a_faire_ici'); } return $erreurs; } /** * Modification du mot de passe d'un auteur. * Utilise le cookie d'oubli fourni en url ou l'argument du formulaire pour identifier l'auteur * * @param int $id_auteur */ function formulaires_mot_de_passe_traiter_dist($id_auteur = null, $jeton = null) { $res = array('message_ok' => ''); refuser_traiter_formulaire_ajax(); // puisqu'on va loger l'auteur a la volee (c'est bonus) // compatibilite anciens appels du formulaire if (is_null($jeton)) { $jeton = _request('p'); } $row = retrouve_auteur($id_auteur, $jeton); if ($row && ($id_auteur = $row['id_auteur']) && ($oubli = _request('oubli')) ) { include_spip('action/editer_auteur'); include_spip('action/inscrire_auteur'); if ($err = auteur_modifier($id_auteur, array('pass' => $oubli))) { $res = array('message_erreur' => $err); } else { auteur_effacer_jeton($id_auteur); $login = $row['login']; $res['message_ok'] = '<b>' . _T('pass_nouveau_enregistre') . '</b>' . '<br />' . _T('pass_rappel_login', array('login' => $login)); include_spip('inc/auth'); $row = sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)); auth_loger($row); } } return $res; } administration.html000066600000001464152442521140010470 0ustar00 <div[ class="(#ENV{divclass,spip-admin-bloc})"] id='spip-admin' dir="#LANG_DIR">[ <a href="(#ENV{analyser})" class="spip-admin-boutons" id="analyser"><:analyse_xml:>[ ((#ENV{xhtml_error}))]</a>] [(#ENV{objet}|oui) [<a href="[(#ENV{voir_#ENV{objet}})]" class="spip-admin-boutons" id="voir_#ENV{objet}">[(#ENV{objet}|objet_info{texte_objet}|_T)] ((#ENV{id_objet}))</a>] ]<!--extra-->[ <a href="(#ENV{ecrire})" class="spip-admin-boutons" id="ecrire"><:espace_prive:></a>] <a href="[(#SELF|parametre_url{var_mode,#ENV{calcul}})]" class="spip-admin-boutons" id="var_mode"><:admin_recalculer:>[(#ENV{use_cache})]</a>[ <a href="(#ENV{preview})" class="spip-admin-boutons" id="preview"><:previsualisation:></a>][ <a href="(#ENV{debug})" class="spip-admin-boutons" id="debug"><:admin_debug:></a>] </div> oubli.php000066600000006273152442521140006403 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) { return; } // chargement des valeurs par defaut des champs du formulaire function formulaires_oubli_charger_dist() { $valeurs = array('oubli' => '', 'nobot' => ''); return $valeurs; } // https://code.spip.net/@message_oubli function message_oubli($email, $param) { $r = formulaires_oubli_mail($email); if (is_array($r) and $r[1]) { include_spip('inc/texte'); # pour corriger_typo include_spip('action/inscrire_auteur'); $cookie = auteur_attribuer_jeton($r[1]['id_auteur']); // l'url_reset doit etre une URL de confiance, on force donc un url_absolue sur adresse_site include_spip('inc/filtres'); $msg = recuperer_fond( 'modeles/mail_oubli', array( 'url_reset' => url_absolue( generer_url_public('spip_pass', "$param=$cookie"), $GLOBALS['meta']['adresse_site'] . '/' ) ) ); include_spip('inc/notifications'); notifications_envoyer_mails($email, $msg); return _T('pass_recevoir_mail'); } return _T('pass_erreur_probleme_technique'); } // la saisie a ete validee, on peut agir function formulaires_oubli_traiter_dist() { $message = message_oubli(_request('oubli'), 'p'); return array('message_ok' => $message); } // fonction qu'on peut redefinir pour filtrer les adresses mail // https://code.spip.net/@test_oubli function test_oubli_dist($email) { include_spip('inc/filtres'); # pour email_valide() if (!email_valide($email)) { return _T('pass_erreur_non_valide', array('email_oubli' => spip_htmlspecialchars($email))); } return array('mail' => $email); } function formulaires_oubli_verifier_dist() { $erreurs = array(); $email = strval(_request('oubli')); $r = formulaires_oubli_mail($email); if (!is_array($r)) { $erreurs['oubli'] = $r; } else { if (!$r[1]) { $erreurs['oubli'] = _T('pass_erreur_non_enregistre', array('email_oubli' => spip_htmlspecialchars($email))); } elseif ($r[1]['statut'] == '5poubelle' or $r[1]['pass'] == '') { $erreurs['oubli'] = _T('pass_erreur_acces_refuse'); } } if (_request('nobot')) { $erreurs['message_erreur'] = _T('pass_rien_a_faire_ici'); } return $erreurs; } function formulaires_oubli_mail($email) { if (function_exists('test_oubli')) { $f = 'test_oubli'; } else { $f = 'test_oubli_dist'; } $declaration = $f($email); if (!is_array($declaration)) { return $declaration; } else { include_spip('base/abstract_sql'); return array( $declaration, sql_fetsel('id_auteur,statut,pass', 'spip_auteurs', 'email =' . sql_quote($declaration['mail'])) ); } } inscription.php000066600000011076152442521140007627 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) { return; } function formulaires_inscription_charger_dist($mode = '', $id = 0, $retour = '') { global $visiteur_session; // fournir le mode de la config ou tester si l'argument du formulaire est un mode accepte par celle-ci // pas de formulaire si le mode est interdit include_spip('inc/autoriser'); if (!autoriser('inscrireauteur', $mode, $id)) { return false; } // pas de formulaire si on a déjà une session avec un statut égal ou meilleur au mode if (isset($visiteur_session['statut']) && ($visiteur_session['statut'] <= $mode)) { return false; } $valeurs = array('nom_inscription' => '', 'mail_inscription' => '', 'id' => $id, '_mode' => $mode); return $valeurs; } // Si inscriptions pas autorisees, retourner une chaine d'avertissement function formulaires_inscription_verifier_dist($mode = '', $id = 0, $retour = '') { set_request('_upgrade_auteur'); // securite include_spip('inc/filtres'); $erreurs = array(); include_spip('inc/autoriser'); if (!autoriser('inscrireauteur', $mode, $id) or (strlen(_request('nobot')) > 0) ) { $erreurs['message_erreur'] = _T('pass_rien_a_faire_ici'); } if (!$nom = _request('nom_inscription')) { $erreurs['nom_inscription'] = _T('info_obligatoire'); } elseif (!nom_acceptable(_request('nom_inscription'))) { $erreurs['nom_inscription'] = _T('ecrire:info_nom_pas_conforme'); } if (!$mail = strval(_request('mail_inscription'))) { $erreurs['mail_inscription'] = _T('info_obligatoire'); } // compatibilite avec anciennes fonction surchargeables // plus de definition par defaut if (!count($erreurs)) { include_spip('action/inscrire_auteur'); if (function_exists('test_inscription')) { $f = 'test_inscription'; } else { $f = 'test_inscription_dist'; } $declaration = $f($mode, $mail, $nom, $id); if (is_string($declaration)) { $k = (strpos($declaration, 'mail') !== false) ? 'mail_inscription' : 'nom_inscription'; $erreurs[$k] = _T($declaration); } else { include_spip('base/abstract_sql'); if ($row = sql_fetsel( 'statut, id_auteur, login, email', 'spip_auteurs', 'email=' . sql_quote($declaration['email']) )) { if (($row['statut'] == '5poubelle') and !$declaration['pass']) { // irrecuperable $erreurs['message_erreur'] = _T('form_forum_access_refuse'); } else { if (($row['statut'] != 'nouveau') and !$declaration['pass']) { if (intval($row['statut']) > intval($mode)) { set_request('_upgrade_auteur', $row['id_auteur']); } else { // deja inscrit $erreurs['message_erreur'] = _T('form_forum_email_deja_enregistre'); } } } spip_log($row['id_auteur'] . ' veut se resinscrire'); } } } return $erreurs; } function formulaires_inscription_traiter_dist($mode = '', $id = 0, $retour = '') { include_spip('inc/filtres'); include_spip('inc/autoriser'); if (!autoriser('inscrireauteur', $mode, $id)) { $desc = 'rien a faire ici'; } else { if ($id_auteur = _request('_upgrade_auteur')) { include_spip('action/editer_auteur'); autoriser_exception('modifier', 'auteur', $id_auteur); autoriser_exception('instituer', 'auteur', $id_auteur); auteur_modifier($id_auteur, array('statut' => $mode)); autoriser_exception('modifier', 'auteur', $id_auteur, false); autoriser_exception('instituer', 'auteur', $id_auteur, false); return array('message_ok' => _T('form_forum_email_deja_enregistre'), 'id_auteur' => $id_auteur); } $nom = _request('nom_inscription'); $mail_complet = _request('mail_inscription'); $inscrire_auteur = charger_fonction('inscrire_auteur', 'action'); $desc = $inscrire_auteur($mode, $mail_complet, $nom, array('id'=>$id, 'redirect'=> $retour)); } // erreur ? if (is_string($desc)) { return array('message_erreur' => $desc); } // OK else { return array('message_ok' => _T('form_forum_identifiant_mail'), 'id_auteur' => $desc['id_auteur']); } } inc-inscription-explication.html000066600000000435152442521140013065 0ustar00[(#REM) on affiche plus ce message en cas d'erreur pour eviter d'allonger trop le formulaire] [(#ENV*{message_erreur}|non) [<legend class="mode"><:pass_vousinscrire:></legend> <p class="explication mode">(#ENV{_mode}|=={1comite}|?{<:pass_espace_prive_bla:>,<:pass_forum_bla:>})</p>] ] ecrire_auteur.html000066600000005601152442521140010276 0ustar00<div class="formulaire_spip formulaire_ecrire_auteur ajax" id="formulaire_ecrire_auteur#ENV{id}"> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [(#ENV{editable}) <form method="post" action="#ENV{action}#formulaire_ecrire_auteur#ENV{id}"> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE [(#REM) Previsualisation... ] [(#ENV*{erreurs}|table_valeur{previsu}|oui) <fieldset class="previsu"> <legend><:previsualisation:></legend> <div> <div><strong>#ENV{sujet_message_auteur}</strong> - <em>#ENV{email_message_auteur}</em></div> <div>[(#ENV{texte_message_auteur}|nl2br)]</div> </div> <p class="boutons"><input type="submit" class="submit" name="confirmer" value="<:form_prop_confirmer_envoi:>" /></p> </fieldset> ] [(#REM) Sinon, formulaire normal ] <fieldset> <legend><:envoyer_message:></legend> <div class="editer-groupe"> <div class="editer saisie_email_message_auteur obligatoire[ (#ENV*{erreurs}|table_valeur{email_message_auteur}|oui)erreur]"> <label for="email_message_auteur#ENV{id}"><:entree_adresse_email:> <:info_obligatoire_02:></label> [<span class="erreur_message">(#ENV*{erreurs}|table_valeur{email_message_auteur})</span>] <input[ (#HTML5|?{required="required" type="email" class="text email",type="text" class="text"})] name="email_message_auteur" id="email_message_auteur#ENV{id}" value="#ENV{email_message_auteur}" size="30" /> </div> <div class="editer saisie_sujet_message_auteur obligatoire[ (#ENV*{erreurs}|table_valeur{sujet_message_auteur}|oui)erreur]"> <label for="sujet_message_auteur#ENV{id}"><:form_prop_sujet:> <:info_obligatoire_02:></label> [<span class="erreur_message">(#ENV*{erreurs}|table_valeur{sujet_message_auteur})</span>] <input type="text" class="text" name="sujet_message_auteur" id="sujet_message_auteur#ENV{id}" value="#ENV{sujet_message_auteur}" size="30"[(#HTML5) required="required"] /> </div> <div class="editer saisie_texte_message_auteur obligatoire[ (#ENV*{erreurs}|table_valeur{texte_message_auteur}|oui)erreur]"> <label for="texte_message_auteur#ENV{id}"><:info_texte_message:> <:info_obligatoire_02:></label> [<span class="erreur_message">(#ENV*{erreurs}|table_valeur{texte_message_auteur})</span>] <textarea name="texte_message_auteur" id="texte_message_auteur#ENV{id}" rows="10" cols="60"[(#HTML5) required="required"]>#ENV{texte_message_auteur}</textarea> </div> </div> </fieldset> [(#REM) Piege a robots spammeurs ] <p style="display: none;"> <label for="nobot"><:antispam_champ_vide:></label> <input type="text" class="text" name="nobot" id="nobot" value="#ENV{nobot}" size="10" /> </p> <p class="boutons"><input type="submit" class="submit" name="valide" value="<:form_prop_envoyer:>" /></p> </form> ] </div> recherche.php000066600000003237152442521140007216 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) { return; } /** * chargement des valeurs par defaut des champs du #FORMULAIRE_RECHERCHE * on peut lui passer l'url de destination en premier argument * on peut passer une deuxième chaine qui va différencier le formulaire pour pouvoir en utiliser plusieurs sur une même page * * @param string $lien URL où amène le formulaire validé * @param string $class Une class différenciant le formulaire * @return array */ function formulaires_recherche_charger_dist($lien = '', $class = '') { if ($GLOBALS['spip_lang'] != $GLOBALS['meta']['langue_site']) { $lang = $GLOBALS['spip_lang']; } else { $lang = ''; } $action = ($lien ? $lien : generer_url_public('recherche')); # action specifique, ne passe pas par Verifier, ni Traiter return array( 'action' => $action, 'recherche' => _request('recherche'), 'lang' => $lang, 'class' => $class, '_id_champ' => $class ? substr(md5($action . $class), 0, 4) : 'recherche' ); } inscription.html000066600000005050152442521140007777 0ustar00<div class="formulaire_spip formulaire_inscription ajax" id="formulaire_inscription"> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [(#ENV{editable}) <form method="post" action="#ENV{action}"> #ACTION_FORMULAIRE <fieldset> #INCLURE{fond=formulaires/inc-inscription-explication,env} <legend><:form_forum_identifiants:></legend> <p class='explication'><:form_forum_indiquer_nom_email:></p> <div class="editer-groupe"> <div class='editer saisie_nom_inscription obligatoire[ (#ENV*{erreurs}|table_valeur{nom_inscription}|oui)erreur]'> <label for="nom_inscription"><:entree_nom_pseudo:> <em class="obligatoire"><:info_obligatoire_02:></em></label> [<span class="erreur_message">(#ENV*{erreurs}|table_valeur{nom_inscription})</span>] <input type="text" class="text" name="nom_inscription" id="nom_inscription" value="#ENV{nom_inscription}" size="30" [(#HTML5) [(#ENV{focus}|=={nom_inscription}|oui)autofocus="autofocus" ]required="required"] autocapitalize="off" autocorrect="off" /> </div> <div class='editer saisie_mail_inscription obligatoire[ (#ENV*{erreurs}|table_valeur{mail_inscription}|oui)erreur]'> <label for="mail_inscription"><:entree_adresse_email:> <em class="obligatoire"><:info_obligatoire_02:></em></label> [<span class="erreur_message">(#ENV*{erreurs}|table_valeur{mail_inscription})</span>] <input[ (#HTML5|?{required="required" type="email" class="text email",type="text" class="text"})] name="mail_inscription" id="mail_inscription" value="#ENV{mail_inscription}" size="30"[(#ENV{focus}|=={mail_inscription}|et{#HTML5}|oui) autofocus="autofocus"] autocapitalize="off" autocorrect="off" /> </div> </div> </fieldset> [(#REM) Piege a robots spammeurs ] <p style="display: none;"> <label for="nobot"><:antispam_champ_vide:></label> <input type="text" class="text" name="nobot" id="nobot" value="#ENV{nobot}" size="10" /> </p> <p class="boutons"><input type="submit" class="submit" value="<:bouton_valider:>" /></p> </form> [<script type="text/javascript"><!-- document.getElementById('(#ENV{focus})').focus(); --></script>] ] </div> [(#ENV{focus,''}|?{' '}) <div style="text-align: #LANG_RIGHT;"> <script type="text/javascript">/*<!\[CDATA\[*/ document.write("<a style='color: #e86519' href='") document.write((window.opener) ? "javascript:close()" : "./") document.write("'><:pass_quitter_fenetre:><" + "/a>"); /*\]\]>*/</script> <noscript> [<a href='./'><:pass_retour_public:></a>] </noscript> </div>] recherche.html000066600000001147152442521140007371 0ustar00<div class="formulaire_spip formulaire_recherche[ (#ENV{class})]" id="formulaire_recherche"> <form action="[(#ENV{action})]" method="get"><div class="editer-groupe"> [(#ENV{action}|form_hidden)] [<input type="hidden" name="lang" value="(#ENV{lang})" />] <label for="#ENV{_id_champ}"><:info_rechercher_02:></label> <input type="[(#HTML5|?{search,text})]" class="search text" size="10" name="recherche" id="#ENV{_id_champ}"[ value="(#ENV{recherche})"] accesskey="4" autocapitalize="off" autocorrect="off" /><input type="submit" class="submit" value=">>" title="<:info_rechercher:>" /> </div></form> </div> ecrire_auteur.php000066600000006477152442521140010135 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) { return; } function formulaires_ecrire_auteur_charger_dist($id_auteur, $id_article, $mail) { include_spip('inc/texte'); $puce = definir_puce(); $valeurs = array( 'sujet_message_auteur' => '', 'texte_message_auteur' => '', 'email_message_auteur' => isset($GLOBALS['visiteur_session']['email']) ? $GLOBALS['visiteur_session']['email'] : '', 'nobot' => '', ); // id du formulaire (pour en avoir plusieurs sur une meme page) $valeurs['id'] = ($id_auteur ? '_' . $id_auteur : '_ar' . $id_article); // passer l'id_auteur au squelette $valeurs['id_auteur'] = $id_auteur; $valeurs['id_article'] = $id_article; return $valeurs; } function formulaires_ecrire_auteur_verifier_dist($id_auteur, $id_article, $mail) { $erreurs = array(); include_spip('inc/filtres'); if (!$adres = _request('email_message_auteur')) { $erreurs['email_message_auteur'] = _T('info_obligatoire'); } elseif (!email_valide($adres)) { $erreurs['email_message_auteur'] = _T('form_prop_indiquer_email'); } else { include_spip('inc/session'); session_set('email', $adres); } if (!$sujet = _request('sujet_message_auteur')) { $erreurs['sujet_message_auteur'] = _T('info_obligatoire'); } elseif (!(strlen($sujet) > 3)) { $erreurs['sujet_message_auteur'] = _T('forum:forum_attention_trois_caracteres'); } if (!$texte = _request('texte_message_auteur')) { $erreurs['texte_message_auteur'] = _T('info_obligatoire'); } elseif (!(strlen($texte) > 10)) { $erreurs['texte_message_auteur'] = _T('forum:forum_attention_dix_caracteres'); } if (_request('nobot')) { $erreurs['message_erreur'] = _T('pass_rien_a_faire_ici'); } if (!_request('confirmer') and !count($erreurs)) { $erreurs['previsu'] = ' '; $erreurs['message_erreur'] = ''; } return $erreurs; } function formulaires_ecrire_auteur_traiter_dist($id_auteur, $id_article, $mail) { $adres = _request('email_message_auteur'); $sujet = _request('sujet_message_auteur'); $sujet = '[' . supprimer_tags(extraire_multi($GLOBALS['meta']['nom_site'])) . '] ' . _T('info_message_2') . ' ' . $sujet; $texte = _request('texte_message_auteur'); $texte .= "\n\n-- " . _T('envoi_via_le_site') . ' ' . supprimer_tags(extraire_multi($GLOBALS['meta']['nom_site'])) . ' (' . $GLOBALS['meta']['adresse_site'] . "/) --\n"; $envoyer_mail = charger_fonction('envoyer_mail', 'inc'); if ($envoyer_mail($mail, $sujet, $texte, $adres, 'X-Originating-IP: ' . $GLOBALS['ip'])) { $message = _T('form_prop_message_envoye'); return array('message_ok' => $message); } else { $message = _T('pass_erreur_probleme_technique'); return array('message_erreur' => $message); } } selecteur/lister-rubriques-rubriques.html000066600000001401152442521210014763 0ustar00#SET{p,pagination_rubrique#ENV{id_rubrique}_rubriques} <B_enfants> [<p class="pagination">(#PAGINATION{prive})</p>] <ul class="items"> <BOUCLE_enfants(RUBRIQUES){id_parent=#ENV{id_rubrique}}{statut?}{id_secteur?}{pagination 100 #GET{p}}{par num titre, titre}> <li class="rubrique"> <a class="ouvrir ajax nohistory" href="[(#SELF|parametre_url{objet,rubrique}|parametre_url{id_objet,#ID_RUBRIQUE})]" >#TITRE</a>[(#ENV{bouton_selectionner}|oui)<a title="<:bouton_choisir:> : [(#TITRE|attribut_html|couper{80})]" class="choisir" href="#" onclick="jQuery(this).item_pick('rubrique|#ID_RUBRIQUE','#ENV{name,id_item}','[(#TITRE|textebrut|texte_script)]','rubrique');return false;" ><:bouton_choisir:></a>] </li> </BOUCLE_enfants> </ul> </B_enfants> selecteur/picker-ajax.html000066600000003003152442521210011621 0ustar00#SET{bouton_modif,#ENV{select,''}|?{bouton_modifier,bouton_ajouter}|_T} [(#REM) Afficher un bouton ajax Modifier a la premiere fois ---------------------------------------- ][(#ENV{picker,''}|non) <div class='picker_bouton'>[<a href='[(#SELF|parametre_url{picker,1})]' class='ajax'>#GET{bouton_modif}</a>]</div> ] [(#REM) Afficher un bouton Fermer/Modifier ensuite ---------------------------------------- ][(#ENV{picker,''}|oui) <div class='picker_bouton'>[<a class='close' href='[(#SELF|parametre_url{picker,0})]' onclick="jQuery(this).parent().picker_toggle();return false;" ><:bouton_fermer:></a><a class='edit' href='[(#SELF|parametre_url{picker,1})]' onclick="jQuery(this).parent().picker_toggle();return false;" style='display:none;'>#GET{bouton_modif}</a>]</div> [(#REM) et enfin le navigateur ------] <div class='browser'> <div class="choix_rapide"> <label for="picker_id"><:label_ajout_id_rapide:></label> <input type="text" value="" id="picker_id" size="10" /> <a href="#" onclick="jQuery.ajax({'url':'[(#URL_PAGE{ajax_item_pick,rubriques=[(#ENV{rubriques})]&articles=[(#ENV{articles})]&ref=})]'+jQuery('#picker_id').val(), 'dataType':'text', 'success':function(r){ eval('r = '+r); // JSON envoye par ajax_item_pick.html if (r){ jQuery('#picker_id').item_pick(r.id,'#ENV{name,id_item}',r.titre,r.type); } jQuery('#picker_id').val(''); } });return false;">#GET{bouton_modif}</a> </div> <INCLURE{fond=formulaires/selecteur/navigateur}{ajax}{env}> </div> ] selecteur/inc-sel-rubriques.html000066600000001501152442521210012775 0ustar00<BOUCLE_pour(POUR){tableau #ENV{selected}|picker_selected{rubrique}}> <BOUCLE_sel(RUBRIQUES){id_rubrique=#VALEUR}{statut?}{tout}> <li class='rubrique'><input type="hidden" name="[(#ENV{name,id_item})][]" value="rubrique|#ID_RUBRIQUE" />[(#ENV{afficher_langue,0}|oui)[[(#LANG)]] ]#TITRE[(#ENV{select,''}|non) <a href='#' onclick='jQuery(this).item_unpick();return false;'><img src='#ENV{img_unpick}' alt='' /></a>]<span class="sep">, </span></li></BOUCLE_sel>[ (#VALEUR|=={0}|oui) <li class='rubrique'><input type="hidden" name="[(#ENV{name,id_item})][(#VAL{91}|chr)][(#VAL{93}|chr)]" value="rubrique|[(#VALEUR)]" /><:info_racine_site:>[(#ENV{select,''}|non) <a href='#' onclick='jQuery(this).item_unpick();return false;'><img src='[(#ENV{img_unpick})]' alt='' /></a>]<span class="sep">, </span></li> ]<//B_sel></BOUCLE_pour> selecteur/picker.css000066600000001353152442521210010532 0ustar00.item_picker .chemin {border-bottom:1px sold #eee;margin:0.5em 0 0.25em;} .item_picker .frame {border:1px solid #999;width:180px;height:400px;float:left;overflow:auto;} .item_picker .frame h2 {margin:0;padding:5px;background:#999;} .item_picker .frame ul {list-style:none;margin:0;padding:0;} .item_picker .frame ul li {list-style:none;margin:0;padding:2px;padding-left:26px;} .item_picker .frame ul li.rubrique {background:url(#CHEMIN_IMAGE{rubrique-24.png}) no-repeat top left;} .item_picker .frame ul li.article {background:url(#CHEMIN_IMAGE{article-24.png}) no-repeat top left;} .item_picker .frame ul li:hover {background-color:#999;} .browser .choix_rapide {font-size:0.9em;} .browser #picker_id {padding:0;margin:0 5px;border:1px solid;}selecteur/jquery.selecteur.js.html000066600000000360152442521210013352 0ustar00#HTTP_HEADER{Content-Type: text/js;} [(#REM)<script>] if (!jQuery.fn.sortable){ #INCLURE{prive/javascript/ui/core.js} #INCLURE{prive/javascript/ui/widget.js} #INCLURE{prive/javascript/ui/mouse.js} #INCLURE{prive/javascript/ui/sortable.js} }selecteur/ajax.html000066600000004336152442521210010360 0ustar00#SET{bouton_modif,#ENV{select,''}|?{bouton_modifier,bouton_ajouter}|_T} [(#REM) Afficher un bouton ajax Modifier a la premiere fois ] [(#ENV{picker,''}|non) <div class='picker_bouton'><a href='[(#SELF|parametre_url{picker,1})]' class="ajax nohistory">#GET{bouton_modif}</a></div> ] [(#REM) Afficher un bouton Fermer/Modifier ensuite ] [(#ENV{picker,''}|oui) <div class="picker_bouton"> <a class="close" href="[(#SELF|parametre_url{picker,0})]" onclick="jQuery(this).parent().picker_toggle();return false;" ><:bouton_fermer:></a><a class="edit" href="[(#SELF|parametre_url{picker,1})]" onclick="jQuery(this).parent().picker_toggle();return false;" style="display:none;">#GET{bouton_modif}</a> </div> [(#REM) et enfin le navigateur (et l'ajout rapide) ------] <div class="browser"> <div class="choix_rapide"> <label for="picker_rapide_#ENV{name}"><:label_ajout_id_rapide:></label> <input type="text" value="" id="picker_rapide_#ENV{name}" size="10" /> <a id="bouton_picker_rapide_#ENV{name}" href="#">#GET{bouton_modif}</a> <script type="text/javascript" language="javascript" charset="utf-8"> jQuery(function(){ jQuery('#bouton_picker_rapide_#ENV{name}').click(function(){ jQuery.ajax({ dataType: 'json', url: '[(#URL_PAGE{ajax_selecteur})]', data: { objets:[(#ENV{objets/selectionner}|json_encode|sinon{\[\]}),] ref: jQuery('#picker_rapide_#ENV{name}').val() }, success: function(r, statut, xhr){ if (r){ jQuery('#picker_rapide_#ENV{name}').item_pick(r.id,'#ENV{name,id_item}',r.titre,r.type); } jQuery('#picker_rapide_#ENV{name}').val(''); } }); return false; }); // Ne pas valider le formulaire si on appuie sur Entrée. jQuery('#picker_rapide_#ENV{name}').keypress(function(e){ if (e.which == 13) { jQuery('a#bouton_picker_rapide_#ENV{name}').trigger("click"); return false; } }); }); </script> </div> [(#ENV{objet}|=={racine}|ou{#ENV{id_objet}|=={0}}|oui) #SET{skel, racine} ] [(#ENV{objet}|=={racine}|ou{#ENV{id_objet}|=={0}}|non) [(#SET{skel, [(#ENV{objet}|table_objet)]})] ] <div class="navigateur"> <INCLURE{fond=formulaires/selecteur/hierarchie-#GET{skel}, env}> </div> </div> ] selecteur/inc-nav-rubriques.html000066600000001615152442521210013004 0ustar00#SET{p,pr_#ID_RUBRIQUE}<B_enfants> [<p class='pagination'>(#PAGINATION)</p>] <ul class='items'> <BOUCLE_enfants(RUBRIQUES){id_parent=#ID_RUBRIQUE}{statut?}{pagination 100 #GET{p}}{par num titre, titre}><li class='rubrique'>[(#ENV{rubriques,0}|oui)<a href='#' onclick="jQuery(this).item_pick('rubrique|#ID_RUBRIQUE','#ENV{name,id_item}','[(#TITRE*|extraire_multi|attribut_html|texte_script|replace{''',#VAL{'\\'}|concat{#EVAL{chr(39)}}})]','rubrique');return false;" ><img class='add' src='#CHEMIN_IMAGE{ajouter-16.png}' alt='ajouter' width="16" height="16" /></a>#TITRE][(#ID_RUBRIQUE|test_enfants_rubrique{#ENV{articles,''}|?{#LISTE{article},''}}|?{[ <a class='ajax' href='[(#SELF|parametre_url{id_r,#ID_RUBRIQUE})]' >[#TITRE(#ENV{rubriques,0}|non)](#CHEMIN_IMAGE{fleche-droite-16.png}|balise_img{'',ouvrir})</a>],[#TITRE(#ENV{rubriques,0}|non)]})]</li> </BOUCLE_enfants> </ul> </B_enfants>selecteur/articles.html000066600000002563152442521210011243 0ustar00<script type='text/javascript'>var img_unpick='#CHEMIN_IMAGE{supprimer-12.png}'; jQuery.getScript('[(#CHEMIN{formulaires/selecteur/jquery.picker.js}|timestamp)]'); </script> [(#REM) afficher la selection dans un ul class item_picked @param int select 1 => le selecteur se comporte comme un select, avec un seul choix possible @param int rubriques 1 = permettre aussi la selection des rubriques @param string name nom de l'input envoye @param string|array selected liste de valeurs sour la forme array("rubrique|9","article|8",...) ou "rubrique|9,article|8,..." @param int id_rubrique @param int id_article @param int afficher_langue ]<ul class='item_picked[ (#ENV{select,''}|?{select})]'> [(#ENV{rubriques,0}|oui) <INCLURE{fond=formulaires/selecteur/inc-sel-rubriques}{name}{selected}{select}{img_unpick=#CHEMIN_IMAGE{supprimer-12.png}}{afficher_langue}> ] <INCLURE{fond=formulaires/selecteur/inc-sel-articles}{name}{selected}{select}{img_unpick=#CHEMIN_IMAGE{supprimer-12.png}}{afficher_langue}> </ul> #SET{id_rubrique,#ENV{id_rubrique}} <BOUCLE_art(ARTICLES){statut?}{tout}{id_article}>#SET{id_rubrique,#ID_RUBRIQUE}</BOUCLE_art> [(#REM) le container item_picker est ici pour etre voisin de item_picked appel du selecteur en ajax ] <div class='item_picker'> <INCLURE{fond=formulaires/selecteur/picker-ajax}{id_rubrique=#GET{id_rubrique}}{id_article}{articles=1}{ajax}{env}> </div> selecteur/jquery.picker.js000066600000005161152442521210011675 0ustar00/** item_picked et picker doivent seulement etre voisins <ul class='item_picked'>..</ul> ... ... <xx class='item_picker'> <div class='picker_bouton'>..</div> </xx> ... **/ ;if (window.jQuery) { jQuery(function($){ var picked = $('ul.item_picked'); if (picked.length) { picked.find('>li').removeClass('last').find('li:last').addClass('last'); } }); jQuery.fn.picker_toggle = function(){ var browser = jQuery(this).parents('.item_picker').find('.browser'); if (browser.is(':visible')){ if (jQuery.browser.msie) browser.hide(); else browser.slideUp(); jQuery('a.close',this).hide(); jQuery('a.edit',this).show(); } else { browser.show(); jQuery('a.close',this).show(); jQuery('a.edit',this).hide(); } } // stop animation du bloc cible pour faire patienter jQuery.fn.stopAnimeajax = function(end) { this.children().css('opacity', 1.0); this.find('.image_loading').html(''); return this; // don't break the chain } jQuery.fn.item_pick = function(id_item,name,title,type){ var label_supprimer = (typeof selecteur_label_supprimer != 'undefined') ? selecteur_label_supprimer : 'del'; var picker = this.parents('.item_picker'); var picked = picker.siblings('ul.item_picked'); if (!picked.length) { picker.before("<ul class='item_picked'></ul>"); picked = picker.siblings('ul.item_picked'); } var select = picked.is('.select'); var obligatoire = picked.is('.obligatoire'); if (select) picked.html(''); else jQuery('li.on',picked).removeClass('on'); var sel=jQuery('input[value="'+id_item+'"]',picked); if (sel.length==0){ picked.addClass('changing').animeajax(); // simulons de la latence pour l'oeil de l'utilisateur setTimeout(function(){ jQuery('li:last',picked).removeClass('last'); picked.append('<li class="last on '+type+'">' +'<input type="hidden" name="'+name+'[]" value="'+id_item+'"/>' + title +((select&&obligatoire)?"":" <a title='"+label_supprimer+"' href='#' onclick='jQuery(this).item_unpick();return false;'>" +"<img alt='"+label_supprimer+"' src='"+img_unpick+"' /></a>" ) +'<span class="sep">, </span></li>').removeClass('changing').stopAnimeajax(); // masquer le selecteur apres un pick picker.find('.picker_bouton').picker_toggle(); },300); } else sel.parent().addClass('on'); return this; // don't break the chain } jQuery.fn.item_unpick = function() { var picked = this.parents('ul.item_picked'); var me = this.parent(); jQuery(me).fadeOut('fast'); setTimeout(function () { me.remove(); picked.find('>li').removeClass('last').find('li:last').addClass('last'); }, 400); } }; selecteur/lister-rubriques-articles.html000066600000001311152442521210014550 0ustar00#SET{p,pagination_racine_articles} <B_enfants> [<p class="pagination">(#PAGINATION{prive})</p>] <ul class="items"> <BOUCLE_enfants(ARTICLES){id_rubrique}{statut?}{pagination 100 #GET{p}}{par num titre, titre}> <li class="article"> <a class="ouvrir ajax nohistory" href="[(#SELF|parametre_url{objet,article}|parametre_url{id_objet,#ID_ARTICLE})]" >#TITRE</a>[(#ENV{bouton_selectionner}|oui)<a title="<:bouton_choisir:> : [(#TITRE|attribut_html|couper{80})]" class="choisir" href="#" onclick="jQuery(this).item_pick('article|#ID_ARTICLE','#ENV{name,id_item}','[(#TITRE|textebrut|texte_script)]','article');return false;" ><:bouton_choisir:></a>] </li> </BOUCLE_enfants> </ul> </B_enfants> selecteur/generique_fonctions.php000066600000000321152442521210013314 0ustar00<?php /** * Ce fichier n'est la que pour eviter une rupture de compat depuis spip 3.0 pour les plugins */ if (!defined('_ECRIRE_INC_VERSION')) { return; } include_spip('inc/filtres_selecteur_generique'); selecteur/navigateur.html000066600000005461152442521210011602 0ustar00[(#REM) Navigateur du sélecteur de rubrique (ancien sélecteur) Paramètres : -* id_r int l'id_rubrique en cours; -* limite_branche int l'id_rubrique de la branche sur laquelle on force la sélection ]#SET{titre_branche,''} <BOUCLE_branche(RUBRIQUES){id_rubrique=#ENV{limite_branche}}{statut?}> [(#SET{titre_branche,[(#TITRE)]})] [(#SET{rubriques_branche,#ARRAY})]<BOUCLE_rubriques_branches(RUBRIQUES){branche}{exclus}{statut?}>#SET{rubriques_branche,#GET{rubriques_branche}|push{#ID_RUBRIQUE}}</BOUCLE_rubriques_branches> </BOUCLE_branche> <BOUCLE_rub(RUBRIQUES){id_rubrique=#ENV{id_r,#ENV{id_rubrique}}}{statut?}> <div class='chemin'> [(#ENV{limite_branche}|non)<a href='[(#SELF|parametre_url{id_r,0})]' class='ajax'><:info_racine_site:></a>] <BOUCLE_chemin(HIERARCHIE){id_rubrique}{id_rubrique != #ENV{id_r}}{statut?}>[(#ENV{limite_branche}|et{#COMPTEUR_BOUCLE|=={1}}|?{'',<span class="sep"> > </span>})]<a href='[(#SELF|parametre_url{id_r,#ID_RUBRIQUE})]' class='ajax'>#TITRE</a></BOUCLE_chemin>[(#ENV{limite_branche}|=={#ID_RUBRIQUE}|?{'',<span class="sep"> > </span>})]<strong class='on'>#TITRE</strong> </div>#SET{n,0} <B_contenu> [(#REM) afficher la racine si la profondeur le permet] [(#ENV{limite_branche}|non) [(#GRAND_TOTAL|<{#TOTAL_BOUCLE}|oui) <div class='frame[ total_(#GRAND_TOTAL|max{#TOTAL_BOUCLE|moins{1}})] frame_0'><h2>[<a(#ENV{rubriques,0}|oui) href='#' onclick="jQuery(this).item_pick('rubrique|0','#ENV{name,id_item}','<:info_racine_site|texte_script|attribut_html:>','rubrique');return false;" ><img class='add' src='#CHEMIN_IMAGE{ajouter-16.png}' alt='' /></a>]<:info_racine_site:></h2> [(#INCLURE{fond=formulaires/selecteur/inc-nav-rubriques}{id_rubrique=0}{env})]</div>]] <BOUCLE_contenu(HIERARCHIE){id_rubrique}{tout}{n-4,4}>#SET{n,0} <div class='frame[ total_(#GRAND_TOTAL|min{#TOTAL_BOUCLE|moins{1}})][ frame_(#COMPTEUR_BOUCLE|moins{#GRAND_TOTAL|plus{1}|max{#TOTAL_BOUCLE}}|plus{#TOTAL_BOUCLE})]'>[(#ID_RUBRIQUE|=={#ENV{limite_branche}}|non)<a href='[(#SELF|parametre_url{id_r,#_rub:ID_PARENT|?{#_rub:ID_PARENT,racine}})]' class='frame_close ajax'><img src='#CHEMIN_IMAGE{fermer-16}' alt='fermer' width="16" height="16" /></a>] <h2>[(#ID_RUBRIQUE|=={#ENV{limite_branche}}|?{#TITRE,<a class='ajax' href='[(#SELF|parametre_url{id_r,#ID_RUBRIQUE})]'>#TITRE</a>})]</h2> [(#INCLURE{fond=formulaires/selecteur/inc-nav-rubriques}{id_rubrique}{env})] [(#ENV{articles,0}|oui) [(#INCLURE{fond=formulaires/selecteur/inc-nav-articles}{id_rubrique}{id_article}{env})] ] </div> </BOUCLE_contenu> </BOUCLE_rub> <div class='chemin'><strong class='on'>[(#GET{titre_branche,<:info_racine_site:>})]</strong></div> <div class='frame total_0 frame_0'><h2>[(#GET{titre_branche,<:info_racine_site:>})]</h2>[(#INCLURE{fond=formulaires/selecteur/inc-nav-rubriques}{id_rubrique=#ENV{limite_branche,0}}{env})]</div> <//B_rub> selecteur/generique.html000066600000006416152442521210011422 0ustar00#SET{img_unpick, #CHEMIN_IMAGE{supprimer-12.png}} [(#SET{label_supprimer, <:lien_supprimer:>})] <script type='text/javascript'>var identifiant_selecteur = 'selecteur_#ENV{name}'; var img_unpick='#GET{img_unpick}'; var selecteur_label_supprimer='#GET{label_supprimer}'; jQuery.getScript('[(#CHEMIN{formulaires/selecteur/jquery.picker.js}|timestamp)]'); </script> [(#REM) afficher la selection dans un ul class item_picked @param int select 1 => le selecteur se comporte comme un select, avec un seul choix possible @param string name nom de l'input envoye @param string|array selected liste de valeurs sour la forme array("rubrique|9","article|8",...) ou "rubrique|9,article|8,..." @param int afficher_langue ] [(#REM) On commence par chercher la liste des objets disposant d'un sélecteur ] [(#SET{objets, [(#ENV{whitelist,#ARRAY}|selecteur_lister_objets{#ENV{blacklist,#ARRAY}})]})] [(#REM) S'il n'y a qu'un type d'objet affiché et sélectionnable, on ajoute une classe (on fait -1 car il y a toujours la racine dans "afficher" ] <div id="selecteur_#ENV{name}" class="selecteur[ (#GET{objets/afficher}|count|moins{1}|=={1}|et{#GET{objets/selectionner}|count|=={1}})selecteur_type_unique]"> <ul class="item_picked[ (#ENV{select,''}|?{select})][ (#ENV{obligatoire}|?{obligatoire})]"> <BOUCLE_selected(POUR){tableau #ENV{selected}|picker_selected}> [(#SET{objet, [(#VALEUR|table_valeur{objet})]})] [(#SET{id_objet, [(#VALEUR|table_valeur{id_objet})]})] [(#GET{id_objet}|=={0}|non) <li class="#GET{objet}"> <input type="hidden" name="[(#ENV{name,id_item})][(#VAL{91}|chr)][(#VAL{93}|chr)]" value="#GET{objet}|#GET{id_objet}" /> [(#ENV{afficher_langue,0}|oui)[[(#INFO_LANG{#GET{objet},#GET{id_objet}})]] ]#INFO_TITRE{#GET{objet},#GET{id_objet}} [(#ENV{select,''}|non|ou{#ENV{obligatoire}|non})<a href='#' onclick='jQuery(this).item_unpick();return false;' title="<:lien_supprimer:>"><img src='#GET{img_unpick}' alt='(<:lien_supprimer:>)' /></a>]<span class="sep">, </span> </li> ] [(#GET{id_objet}|=={0}|oui) <li class='rubrique'> <input type="hidden" name="[(#ENV{name,id_item})][(#VAL{91}|chr)][(#VAL{93}|chr)]" value="racine|0" /> [(#ENV{label_racine,<:info_racine_site:>})] [(#ENV{select,''}|non)<a href='#' onclick='jQuery(this).item_unpick();return false;'><img src='[(#GET{img_unpick})]' alt='(<:lien_supprimer:>)' /></a>]<span class="sep">, </span> </li> ] </BOUCLE_selected> </ul> #SET{objet, #ENV{objet,racine}} #SET{id_objet, #ENV{id_objet,0}} [(#REM) Si l'objet passé ne fait pas parti des objets adéquats, ou si c'est la racine alors on regarde si on doit forcer la racine sur autre chose, et sinon on retombe sur la racine classique ] [(#GET{objet}|table_objet|in_array{#GET{objets/afficher}}|non) #SET{objet, #ENV{forcer_racine_objet,racine}} #SET{id_objet, #ENV{forcer_racine_id_objet,0}} ] [(#REM) le container item_picker est ici pour etre voisin de item_picked ------] <div class='item_picker'> <INCLURE{fond=formulaires/selecteur/ajax, objets=#GET{objets}, objet=#GET{objet}, id_objet=#GET{id_objet}, ajax, env}> </div> </div> [(#ENV{sortable,'non'}|=={oui}|oui) <script type='text/javascript'> jQuery.getScript('[(#PRODUIRE{fond=formulaires/selecteur/jquery.selecteur.js}|timestamp)]',function(){ jQuery(function() {jQuery("ul.item_picked").sortable(); }); }); </script> ] selecteur/inc-nav-articles.html000066600000001271152442521210012567 0ustar00#SET{p,pa_#ID_RUBRIQUE}<B_articles> [<p class='pagination'>(#PAGINATION{prive})</p>] <div class="editer-groupe"> <BOUCLE_articles(ARTICLES){id_rubrique}{statut?}{pagination 100 #GET{p}}><li class='article[ (#EXPOSE)]'>[(#ENV{picker_article,1}|oui)<a href='#' onclick="jQuery(this).item_pick('article|#ID_ARTICLE','#ENV{name,id_item}','[(#TITRE*|attribut_html|texte_script|replace{''',#VAL{'\\'}|concat{#EVAL{chr(39)}}})]','article');return false;" ><img class='add' src='#CHEMIN_IMAGE{ajouter-16.png}' alt='ajouter' width="16" height="16" />][(#ENV{picker_article,1}|non)<a href='[(#ID_ARTICLE|generer_url_entite{article})]'>]#TITRE</a></li> </BOUCLE_articles> </div> </B_articles> selecteur/inc-sel-articles.html000066600000000663152442521210012572 0ustar00<BOUCLE_sel(ARTICLES){id_article IN #ENV{selected}|picker_selected{article}}{statut?}{tout}><li class='article'><input type="hidden" name="[(#ENV{name,id_item})][]" value="article|#ID_ARTICLE" />[(#ENV{afficher_langue,0}|oui)[[(#LANG)]] ]#TITRE[(#ENV{select,''}|non) <a href='#' onclick='jQuery(this).item_unpick();return false;'><img src='#ENV{img_unpick}' alt='' /></a>]<span class="sep">, </span></li></BOUCLE_sel> selecteur/hierarchie-racine.html000066600000000267152442521210012776 0ustar00<div class="chemin"> <h3 class="on">[(#ENV{label_racine,<:info_racine_site:>})]</h3> </div> <div class="liste"> #INCLURE{fond=formulaires/selecteur/lister, quoi=racine, env} </div> selecteur/hierarchie-rubriques.html000066600000001464152442521210013556 0ustar00<BOUCLE_rub(RUBRIQUES){tout}{id_rubrique=#ENV{id_objet}}{statut?}> <div class="chemin"> [(#ENV{forcer_racine_objet}|=={rubrique}|et{#ENV{forcer_racine_id_objet}|>{0}}|non)<a href="[(#SELF|parametre_url{objet,racine}|parametre_url{id_objet,0})]" class="ajax nohistory" rel="nofollow"><:info_racine_site:></a><span class="sep divider"> > </span>]<BOUCLE_chemin(HIERARCHIE){statut?}{id_rubrique!=#ID_RUBRIQUE}{!id_rubrique IN [(#ENV{forcer_racine_id_objet,0}|calcul_hierarchie_in{#EVAL{false}}|explode{','})]}><a href="[(#SELF|parametre_url{id_objet,#ID_RUBRIQUE})]" class="ajax nohistory">#TITRE</a><span class="sep divider"> > </span></BOUCLE_chemin><h3 class="on">#TITRE</h3> </div> <div class="liste"> #INCLURE{fond=formulaires/selecteur/lister, quoi=rubriques, id_rubrique, env} </div> </BOUCLE_rub> selecteur/lister.html000066600000002353152442521210010734 0ustar00[(#ENV{quoi}|in_array{#ENV{objets/selectionner}} |et{ #ENV{forcer_racine_objet}|!={#ENV{quoi}|objet_type} |ou{#ENV{forcer_racine_id_objet}|!={#ENV{id_objet}}} |ou{#ENV{racine}} } |ou{ #ENV{quoi}|=={racine}|et{#ENV{racine}|oui} } ) [(#SET{titre,[(#ENV{quoi}|=={racine}|?{[(#ENV{label_racine,<:info_racine_site:>})],#INFO_TITRE{#ENV{quoi},#ENV{id_objet}}})]})] <a href="#" class="choisir_ici" title="<:bouton_choisir:> : [(#GET{titre}|attribut_html)]" onclick="jQuery(this).item_pick('[(#ENV{quoi}|objet_type)]|#ENV{id_objet}','#ENV{name,id_item}','[(#GET{titre}|textebrut|texte_script)]','#ENV{quoi}');return false;" ><span><:bouton_choisir:></span></a> ] [(#REM) Pour chaque objet affichable, on cherche s'il peut être enfant de l'objet dans lequel on est ] <BOUCLE_objets(POUR){tableau #ENV{objets/afficher}}> [(#CHEMIN{formulaires/selecteur/lister-#ENV{quoi}-#VALEUR.html}|oui) #SET{bouton_selectionner, #VALEUR|in_array{#ENV{objets/selectionner}}|oui} [<div class="#VALEUR">[<h4 class="type_objet">(#VALEUR|table_objet_sql|lister_tables_objets_sql|table_valeur{texte_objets}|_T)</h4>] (#INCLURE{fond=formulaires/selecteur/lister-#ENV{quoi}-#VALEUR, bouton_selectionner=#GET{bouton_selectionner}, env})</div>] ] </BOUCLE_objets> selecteur/lister-racine-articles.html000066600000001314152442521210013773 0ustar00#SET{p,pagination_racine_articles} <B_enfants> [<p class="pagination">(#PAGINATION{prive})</p>] <ul class="items"> <BOUCLE_enfants(ARTICLES){id_rubrique<=0}{statut?}{pagination 100 #GET{p}}{par num titre, titre}> <li class="article"> <a class="ouvrir ajax nohistory" href="[(#SELF|parametre_url{objet,article}|parametre_url{id_objet,#ID_ARTICLE})]" >#TITRE</a>[(#ENV{bouton_selectionner}|oui)<a title="<:bouton_choisir:> : [(#TITRE|attribut_html|couper{80})]" class="choisir" href="#" onclick="jQuery(this).item_pick('article|#ID_ARTICLE','#ENV{name,id_item}','[(#TITRE|textebrut|texte_script)]','article');return false;" ><:bouton_choisir:></a>] </li> </BOUCLE_enfants> </ul> </B_enfants> selecteur/lister-racine-rubriques.html000066600000001336152442521210014212 0ustar00#SET{p,pagination_racine_rubriques} <B_enfants> [<p class="pagination">(#PAGINATION{prive})</p>] <ul class="items"> <BOUCLE_enfants(RUBRIQUES){id_parent=0}{statut?}{id_secteur?}{pagination 100 #GET{p}}{par num titre, titre}> <li class="rubrique"> <a class="ouvrir ajax nohistory" href="[(#SELF|parametre_url{objet,rubrique}|parametre_url{id_objet,#ID_RUBRIQUE})]" >#TITRE</a>[(#ENV{bouton_selectionner}|oui)<a title="<:bouton_choisir:> : [(#TITRE|attribut_html|couper{80})]" class="choisir" href="#" onclick="jQuery(this).item_pick('rubrique|#ID_RUBRIQUE','#ENV{name,id_item}','[(#TITRE|textebrut|texte_script)]','rubrique');return false;" ><:bouton_choisir:></a>] </li> </BOUCLE_enfants> </ul> </B_enfants> selecteur/hierarchie-articles.html000066600000001467152442521210013346 0ustar00<BOUCLE_art(ARTICLES){tout}{id_article=#ENV{id_objet}}{statut?}> <div class="chemin"> [(#ENV{forcer_racine_objet}|=={rubrique}|et{#ENV{forcer_racine_id_objet}|>{0}}|non)<a href="[(#SELF|parametre_url{objet,racine}|parametre_url{id_objet,0})]" class="ajax nohistory">[(#ENV{label_racine,<:info_racine_site:>})]</a><span class="sep divider"> > </span>]<BOUCLE_chemin(HIERARCHIE){tous}{!id_rubrique IN [(#ENV{forcer_racine_id_objet,0}|calcul_hierarchie_in{#EVAL{true}}|explode{','})]}><a href="[(#SELF|parametre_url{objet,rubrique}|parametre_url{id_objet,#ID_RUBRIQUE})]" class="ajax nohistory">#TITRE</a><span class="sep divider"> > </span></BOUCLE_chemin><h3 class="on">#TITRE</h3> </div> <div class="liste"> #INCLURE{fond=formulaires/selecteur/lister, quoi=articles, id_article, env} </div> </BOUCLE_art> selecteur/rubriques.html000066600000002563152442521210011456 0ustar00<script type='text/javascript'>var img_unpick='#CHEMIN_IMAGE{supprimer-12.png}'; jQuery.getScript('[(#CHEMIN{formulaires/selecteur/jquery.picker.js}|timestamp)]'); </script> [(#REM) afficher la selection dans un ul class item_picked @param int select 1 => le selecteur se comporte comme un select, avec un seul choix possible @param string name nom de l'input envoye @param string|array selected liste de valeurs sour la forme array("rubrique|9","article|8",...) ou "rubrique|9,article|8,..." @param int id_rubrique @param int id_article @param int afficher_langue ]<ul class='item_picked[ (#ENV{select,''}|?{select})]'> <INCLURE{fond=formulaires/selecteur/inc-sel-rubriques}{name}{selected}{select}{img_unpick=#CHEMIN_IMAGE{supprimer-12.png}}{afficher_langue}> </ul> #SET{id_rubrique,#ENV{id_rubrique}} <BOUCLE_art(ARTICLES){statut?}{tout}{id_article}>#SET{id_rubrique,#ID_RUBRIQUE}</BOUCLE_art> [(#REM) le container item_picker est ici pour etre voisin de item_picked ------] <div class='item_picker'> <INCLURE{fond=formulaires/selecteur/picker-ajax}{id_rubrique=#GET{id_rubrique}}{id_article}{rubriques=1}{articles=0}{ajax}{env}> </div> [(#ENV{sortable,'non'}|=={oui}|oui) <script type='text/javascript'> jQuery.getScript('[(#PRODUIRE{fond=formulaires/selecteur/jquery.selecteur.js}|timestamp)]',function(){ jQuery(function() {jQuery("ul.item_picked").sortable(); }); }); </script> ]traduire.php000066600000014563152442521210007107 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ /** * Gestion du formulaire de traduction * * @package SPIP\Core\Formulaires **/ if (!defined('_ECRIRE_INC_VERSION')) { return; } include_spip('inc/actions'); include_spip('inc/editer'); /** * Charger les données de #FORMULAIRE_TRADUIRE * * @param string $objet * Type d'objet * @param int $id_objet * Identifiant de l'objet * @param string $retour * URL de retour * @param bool $traduire * Permet de désactiver la gestion de traduction sur un objet ayant id_trad * @return array|bool * False si l'identifiant n'est pas numérique ou si l'objet n'a pas de langue * Contexte à transmettre au squelette du formulaire sinon */ function formulaires_traduire_charger_dist($objet, $id_objet, $retour = '', $traduire = true) { if (!intval($id_objet)) { return false; } $valeurs = formulaires_editer_objet_charger($objet, $id_objet, null, 0, $retour, ''); // verifier que l'objet indique possede bien des champs id_trad et lang // attention, charger renomme lang => langue pour ne pas perturber la langue d'affichage du squelette if (!isset($valeurs['langue'])) { return false; } $valeurs['editable'] = autoriser('changerlangue', $objet, $id_objet); $valeurs['_langue'] = ''; $langue_parent = ''; $id_parent = ''; if (isset($valeurs['id_rubrique'])) { $id_parent = $valeurs['id_rubrique']; } if (isset($valeurs['id_parent'])) { $id_parent = $valeurs['id_parent']; } if ($id_parent) { $langue_parent = sql_getfetsel('lang', 'spip_rubriques', 'id_rubrique=' . intval($id_parent)); } if (!$langue_parent) { $langue_parent = $GLOBALS['meta']['langue_site']; } if ($valeurs['editable'] and in_array(table_objet_sql($objet), explode(',', $GLOBALS['meta']['multi_objets'])) ) { $valeurs['_langue'] = $valeurs['langue']; } $valeurs['langue_parent'] = $langue_parent; $valeurs['_objet'] = $objet; $valeurs['_id_objet'] = $id_objet; $valeurs['changer_lang'] = ''; $valeurs['_traduisible'] = autoriser('changertraduction', $objet, $id_objet); $valeurs['_traduire'] = ''; if (isset($valeurs['id_trad'])) { $valeurs['_traduire'] = ($traduire ? ' ' : ''); if ($valeurs['_traduisible']) { $valeurs['_vue_traductions'] = 'prive/objets/liste/' . (trouver_fond( $f = table_objet($objet) . '-trad', 'prive/objets/liste' ) ? $f : 'objets-trad'); // pour afficher la liste des trad sur la base de l'id_trad en base // independamment d'une saisie en cours sur id_trad $valeurs['_lister_id_trad'] = $valeurs['id_trad']; $valeurs['_id_parent'] = $id_parent; } } $valeurs['_saisie_en_cours'] = (!_request('annuler') and (_request('changer_lang') !== null or _request('changer_id_trad') !== null)); $valeurs['_pipeline'] = array('traduire', array('type' => $objet, 'id' => $id_objet)); return $valeurs; } /** * Vérifier les saisies des valeurs du #FORMULAIRE_TRADUIRE * * @param string $objet * Type d'objet * @param int $id_objet * Identifiant de l'objet * @param string $retour * URL de retour * @param bool $traduire * Permet de désactiver la gestion de traduction sur un objet ayant id_trad * @return array * Erreurs des saisies */ function formulaires_traduire_verifier_dist($objet, $id_objet, $retour = '', $traduire = true) { $erreurs = array(); if (null !== _request('changer_lang')) { $erreurs = formulaires_editer_objet_verifier($objet, $id_objet, array('changer_lang')); } // si id_trad fourni, verifier que cela ne conflicte pas avec un id_trad existant // et que ca reference bien un objet existant if ($id_trad = _request('id_trad')) { $table_objet_sql = table_objet_sql($objet); $_id_table_objet = id_table_objet($objet); if (sql_getfetsel( 'id_trad', $table_objet_sql, "$_id_table_objet=" . intval($id_objet) )) { // ne devrait jamais arriver sauf concurence de saisie $erreurs['id_trad'] = _L('Une traduction est deja referencee'); } elseif (!sql_getfetsel($_id_table_objet, $table_objet_sql, "$_id_table_objet=" . intval($id_trad))) { $erreurs['id_trad'] = _L('Indiquez un contenu existant'); } } return $erreurs; } /** * Enregistrer en base les saisies du #FORMULAIRE_TRADUIRE * * @param string $objet * Type d'objet * @param int $id_objet * Identifiant de l'objet * @param string $retour * URL de retour * @param bool $traduire * Permet de désactiver la gestion de traduction sur un objet ayant id_trad * @return array * Retour des traitements */ function formulaires_traduire_traiter_dist($objet, $id_objet, $retour = '', $traduire = true) { $res = array(); if (!_request('annuler') and autoriser('changerlangue', $objet, $id_objet)) { // action/editer_xxx doit traiter la modif de changer_lang $res = formulaires_editer_objet_traiter($objet, $id_objet, 0, 0, $retour); } if (!_request('annuler') and autoriser('changertraduction', $objet, $id_objet)) { if ($id_trad = _request('id_trad') or _request('supprimer_trad')) { $referencer_traduction = charger_fonction('referencer_traduction', 'action'); $referencer_traduction($objet, $id_objet, intval($id_trad)); // 0 si supprimer_trad } elseif ($new_id_trad = _request('changer_reference_trad') and $new_id_trad = array_keys($new_id_trad) and $new_id_trad = reset($new_id_trad) ) { $table_objet_sql = table_objet_sql($objet); $_id_table_objet = id_table_objet($objet); if ($id_trad = sql_getfetsel('id_trad', $table_objet_sql, "$_id_table_objet=" . intval($id_objet))) { $referencer_traduction = charger_fonction('referencer_traduction', 'action'); $referencer_traduction($objet, $id_trad, $new_id_trad); } } } $res['editable'] = true; if (!isset($res['message_erreur'])) { set_request('annuler', 'annuler'); } // provoquer la fermeture du forumlaire return $res; } recherche_ecrire.html000066600000003007152442521210010715 0ustar00<div class="formulaire_spip formulaire_recherche" role='search'> <form action="[(#ENV{action})]" method="get"><div> [(#ENV{action}|form_hidden)] [<input type="hidden" name="lang" value="(#ENV{lang})" />] <label for="#ENV{_id_champ,recherche}"><:info_rechercher_02:></label> <input type="text" class="text[(#ENV{recherche}|oui) cancelable]" size="10" name="recherche" id="#ENV{_id_champ,recherche}" placeholder="<:info_rechercher|attribut_html:>"[ value="(#ENV{recherche})"] />[<a (#ENV{recherche}|oui) class="cancel[ (#ENV{class,''})]" href="[(#ENV{action}|parametre_url{'recherche',''})]" onclick="$(this).siblings('input.text').val('')" title='<:annuler_recherche|attribut_html:>'>[(#CHEMIN_IMAGE{fermer-16.png} |balise_img |inserer_attribut{alt,<:annuler_recherche:>})]</a>]<input type='image' src='[(#CHEMIN_IMAGE{rechercher-20.png})]' class="image" alt='<:info_rechercher|attribut_html:>' onclick="return recherche_submit_#ENV{_id_champ,recherche}.apply(this);" /><a class="none[ (#ENV{class,''})] refresh" href="[(#ENV{action}|parametre_url{'recherche',''})]"><:info_rechercher:></a> </div></form> <script type="text/javascript">/*<![CDATA[*/ function recherche_submit_#ENV{_id_champ,recherche}(){ $.placeholderLabel.disable_placeholder_fields.apply($(this).parents('form').eq(0)); var a=$(this).siblings('a.refresh'); a.attr('href',parametre_url(a.attr('href'),'recherche',$(this).siblings('input.text').val())).followLink(); return false; }/*]]>*/</script> </div> configurer_reducteur.php000066600000007460152442521210011513 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ /** * Formulaire de configuration pour choisir la librairie graphique * et les tailles de redimensionnement des vignettes * * @package SPIP\Core\Formulaires **/ if (!defined('_ECRIRE_INC_VERSION')) { return; } /** * Chargement du formulaire de configuration de la librairie graphique * * @return array * Environnement du formulaire **/ function formulaires_configurer_reducteur_charger_dist() { $valeurs = array(); foreach (array( 'image_process', 'formats_graphiques', 'creer_preview', 'taille_preview', ) as $m) { $valeurs[$m] = isset($GLOBALS['meta'][$m]) ? $GLOBALS['meta'][$m] : null; } $valeurs['taille_preview'] = intval($valeurs['taille_preview']); if ($valeurs['taille_preview'] < 10) { $valeurs['taille_preview'] = 120; } return $valeurs; } /** * Traitements du formulaire de configuration de la librairie graphique * * @return array * Retours des traitements **/ function formulaires_configurer_reducteur_traiter_dist() { $res = array('editable' => true); if (is_array($image_process = _request('image_process_'))) { $image_process = array_keys($image_process); $image_process = reset($image_process); // application du choix de vignette if ($image_process) { // mettre a jour les formats graphiques lisibles switch ($image_process) { case 'gd1': case 'gd2': $formats_graphiques = $GLOBALS['meta']['gd_formats_read']; break; case 'netpbm': $formats_graphiques = $GLOBALS['meta']['netpbm_formats']; break; case 'convert': case 'imagick': $formats_graphiques = 'gif,jpg,png'; break; default: #debug $formats_graphiques = ''; $image_process = 'non'; break; } ecrire_meta('formats_graphiques', $formats_graphiques, 'non'); ecrire_meta('image_process', $image_process, 'non'); } } foreach (array( 'creer_preview' ) as $m) { if (!is_null($v = _request($m))) { ecrire_meta($m, $v == 'oui' ? 'oui' : 'non'); } } if (!is_null($v = _request('taille_preview'))) { ecrire_meta('taille_preview', intval($v)); } $res['message_ok'] = _T('config_info_enregistree'); return $res; } /** * Indique si une librairie graphique peut être utilisée et retourne alors * une URL pour tester la librairie * * @param string $process * Code de la libriairie, parmi gd2, gd1, netpbm, imagick ou convert * @return string * URL d'action pour tester la librairie graphique en créant une vignette **/ function url_vignette_choix($process) { switch ($process) { case 'gd2': if (!function_exists('ImageCreateTrueColor')) { return ''; } break; case 'gd1': if (!function_exists('ImageGif') and !function_exists('ImageJpeg') and !function_exists('ImagePng') ) { return ''; } break; case 'netpbm': if (defined('_PNMSCALE_COMMAND') and _PNMSCALE_COMMAND == '') { return ''; } break; case 'imagick': if (!method_exists('Imagick', 'readImage')) { return ''; } break; case 'convert': if (defined('_CONVERT_COMMAND') and _CONVERT_COMMAND == '') { return ''; } break; } return generer_url_action('tester', "arg=$process&time=" . time()); } configurer_preferences_menus.html000066600000006210152442521210013366 0ustar00<div class="formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}"> <h3 class='titrem'><:titre_configurer_preferences_menus:></h3> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] <form method='post' action='#ENV{action}'><div> #ACTION_FORMULAIRE [(#AUTORISER{webmestre}|oui) <div class='editer editer_activer_menudev[ (#ENV{erreurs/activer_menudev}|oui)erreur]'> [<span class='erreur_message'>(#ENV{erreurs/activer_menudev})</span>] <div class='choix'> <input type="hidden" name="activer_menudev" value="non" /> <input class='checkbox' type="checkbox" name="activer_menudev" value='oui' [checked="(#ENV{activer_menudev,non}|=={oui}|?{checked})"] id="activer_menudev"/> <label for="activer_menudev"><:info_activer_menu_developpement:></label> </div> </div>] #SET{boutons,#ARRAY|definir_barre_boutons{0}|trier_boutons_enfants_par_favoris_alpha} <div class='menus_favoris fieldset'> <fieldset> <legend><:titre_preference_menus_favoris:></legend> <div class="editer-groupe deux_colonnes"> <BOUCLE_menu(DATA){source tableau, #GET{boutons}}{cle LIKE 'menu_%'}{cle !IN #LISTE{menu_accueil}}> <B_menusous> <div class="editer menus_favoris pleine_largeur"> <label>[(#LIBELLE|_T)]</label> [<span class='erreur_message'>(#ENV{erreurs/menus_favoris})</span>] <BOUCLE_menusous(DATA){source tableau, #SOUSMENU}> <div class="item choix"> <input class='text positionner' type="text" name="menus_favoris[#CLE]" value="#ENV{menus_favoris/#CLE}" id="menu_fav_#CLE" size="1"> <label for="menu_fav_#CLE">[(#LIBELLE|_T)]</label> </div> </BOUCLE_menusous> </div> </B_menusous> </BOUCLE_menu> </div> </fieldset> </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons'> <span class='image_loading'> </span> <input type='submit' name="reset" class='submit' value='<:bouton_reinitialiser_aux_valeurs_par_defaut:>' /> <input type='submit' class='submit' value='<:bouton_enregistrer:>' /> </p> </div></form> </div> <style type="text/css"> .formulaire_spip .choix .positionner { width:2.2em; text-align:center; } </style> <script type="text/javascript"> jQuery(function($) { $('.formulaire_#FORM form').on('click', '.choix label', function(){ var $me = $(this); var $parent = $me.closest('.editer'); var $input = $me.siblings('.positionner'); if ($input.val()) { $input.val(""); var trier = []; $parent.find('.positionner').each(function(){ if ($(this).val()) { trier.push({id: $(this).attr('id'), val: parseInt($(this).val()) }); } }); trier.sort(function(a,b) { return a.val - b.val; }); var i = 1; $.each(trier, function(k, a) { $parent.find('#' + a.id).val(i); i++; }); } else { var max = 0; $parent.find('.positionner').each(function(){ if ($(this).val() > max) { max = $(this).val(); } }); $input.val(parseInt(max) + 1); } return false; }); }); </script>editer_article.php000066600000015054152442521210010243 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ /** * Gestion du formulaire de d'édition d'article * * @package SPIP\Core\Articles\Formulaires **/ if (!defined('_ECRIRE_INC_VERSION')) { return; } include_spip('inc/actions'); include_spip('inc/editer'); /** * Chargement du formulaire d'édition d'article * * @uses formulaires_editer_objet_charger() * * @param int|string $id_article * Identifiant de l'article. 'new' pour une nouvel article. * @param int $id_rubrique * Identifiant de la rubrique parente * @param string $retour * URL de redirection après le traitement * @param int $lier_trad * Identifiant éventuel d'un article source de traduction * @param string $config_fonc * Nom de la fonction ajoutant des configurations particulières au formulaire * @param array $row * Valeurs de la ligne SQL de l'article, si connu * @param string $hidden * Contenu HTML ajouté en même temps que les champs cachés du formulaire. * @return array * Environnement du formulaire **/ function formulaires_editer_article_charger_dist( $id_article = 'new', $id_rubrique = 0, $retour = '', $lier_trad = 0, $config_fonc = 'articles_edit_config', $row = array(), $hidden = '' ) { $valeurs = formulaires_editer_objet_charger( 'article', $id_article, $id_rubrique, $lier_trad, $retour, $config_fonc, $row, $hidden ); // il faut enlever l'id_rubrique car la saisie se fait sur id_parent // et id_rubrique peut etre passe dans l'url comme rubrique parent initiale // et sera perdue si elle est supposee saisie return $valeurs; } /** * Identifier le formulaire en faisant abstraction des paramètres qui * ne représentent pas l'objet édité * * @param int|string $id_article * Identifiant de l'article. 'new' pour une nouvel article. * @param int $id_rubrique * Identifiant de la rubrique parente * @param string $retour * URL de redirection après le traitement * @param int $lier_trad * Identifiant éventuel d'un article source de traduction * @param string $config_fonc * Nom de la fonction ajoutant des configurations particulières au formulaire * @param array $row * Valeurs de la ligne SQL de l'article, si connu * @param string $hidden * Contenu HTML ajouté en même temps que les champs cachés du formulaire. * @return string * Hash du formulaire */ function formulaires_editer_article_identifier_dist( $id_article = 'new', $id_rubrique = 0, $retour = '', $lier_trad = 0, $config_fonc = 'articles_edit_config', $row = array(), $hidden = '' ) { return serialize(array(intval($id_article), $lier_trad)); } /** * Choix par défaut des options de présentation * * @param array $row * Valeurs de la ligne SQL d'un article, si connu * return array * Configuration pour le formulaire */ function articles_edit_config($row) { global $spip_lang; $config = $GLOBALS['meta']; $config['lignes'] = 8; $config['langue'] = $spip_lang; $config['restreint'] = ($row['statut'] == 'publie'); return $config; } /** * Vérifications du formulaire d'édition d'article * * @uses formulaires_editer_objet_verifier() * * @param int|string $id_article * Identifiant de l'article. 'new' pour une nouvel article. * @param int $id_rubrique * Identifiant de la rubrique parente * @param string $retour * URL de redirection après le traitement * @param int $lier_trad * Identifiant éventuel d'un article source de traduction * @param string $config_fonc * Nom de la fonction ajoutant des configurations particulières au formulaire * @param array $row * Valeurs de la ligne SQL de l'article, si connu * @param string $hidden * Contenu HTML ajouté en même temps que les champs cachés du formulaire. * @return array * Erreurs du formulaire **/ function formulaires_editer_article_verifier_dist( $id_article = 'new', $id_rubrique = 0, $retour = '', $lier_trad = 0, $config_fonc = 'articles_edit_config', $row = array(), $hidden = '' ) { // auto-renseigner le titre si il n'existe pas titre_automatique('titre', array('descriptif', 'chapo', 'texte')); // on ne demande pas le titre obligatoire : il sera rempli a la volee dans editer_article si vide $erreurs = formulaires_editer_objet_verifier('article', $id_article, array('id_parent')); // si on utilise le formulaire dans le public if (!function_exists('autoriser')) { include_spip('inc/autoriser'); } if (!isset($erreurs['id_parent']) and !autoriser('creerarticledans', 'rubrique', _request('id_parent')) ) { $erreurs['id_parent'] = _T('info_creerdansrubrique_non_autorise'); } return $erreurs; } /** * Traitements du formulaire d'édition d'article * * @uses formulaires_editer_objet_traiter() * * @param int|string $id_article * Identifiant de l'article. 'new' pour une nouvel article. * @param int $id_rubrique * Identifiant de la rubrique parente * @param string $retour * URL de redirection après le traitement * @param int $lier_trad * Identifiant éventuel d'un article source de traduction * @param string $config_fonc * Nom de la fonction ajoutant des configurations particulières au formulaire * @param array $row * Valeurs de la ligne SQL de l'article, si connu * @param string $hidden * Contenu HTML ajouté en même temps que les champs cachés du formulaire. * @return array * Retours des traitements **/ function formulaires_editer_article_traiter_dist( $id_article = 'new', $id_rubrique = 0, $retour = '', $lier_trad = 0, $config_fonc = 'articles_edit_config', $row = array(), $hidden = '' ) { // ici on ignore changer_lang qui est poste en cas de trad, // car l'heuristique du choix de la langue est pris en charge par article_inserer // en fonction de la config du site et de la rubrique choisie set_request('changer_lang'); return formulaires_editer_objet_traiter( 'article', $id_article, $id_rubrique, $lier_trad, $retour, $config_fonc, $row, $hidden ); } configurer_avertisseur.php000066600000002415152442521210012060 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) { return; } include_spip('inc/presentation'); function formulaires_configurer_avertisseur_charger_dist() { $valeurs = array(); foreach (array( 'articles_modif', ) as $m) { $valeurs[$m] = $GLOBALS['meta'][$m]; } return $valeurs; } function formulaires_configurer_avertisseur_traiter_dist() { $res = array('editable' => true); foreach (array( 'articles_modif', ) as $m) { if (!is_null($v = _request($m))) { ecrire_meta($m, $v == 'oui' ? 'oui' : 'non'); } } $res['message_ok'] = _T('config_info_enregistree'); return $res; } declarer_bases.html000066600000007057152442521210010403 0ustar00<div class="ajax formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}"> <h3 class="titrem"><:onglet_declarer_une_autre_base:> (1/3)</h3> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [<p><strong><:config_info_base_sup_disponibles:></strong><br /> (#ENV*{_bases_deja}|implode{', '}) </p>] <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <p class="explication"><:config_info_base_sup:></p> <div class="editer-groupe"> #SET{name,sql_serveur_db}#SET{obli,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:install_select_type_db:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ] <select class="select" name="#GET{name}" id="#GET{name}"> <BOUCLE_serv(POUR){tableau #ENV*{_serveurs}}> <option value="#CLE"[(#ENV{#GET{name}}|=={#CLE}|oui)selected="selected"]>[(#VALEUR|_T)]</option> </BOUCLE_serv> </select> <p><:install_types_db_connus:></p> <p class="small"><:install_types_db_connus_avertissement:></p> </div> <div class="fieldset connexion_db"> <fieldset> <legend><:install_adresse_base_hebergeur:></legend> #SET{name,adresse_db}#SET{obli,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:entree_base_donnee_1:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<input type="text" class="text" name="#GET{name}" value="#ENV*{#GET{name}}" id="#GET{name}"/> </div> #SET{name,login_db}#SET{obli,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:entree_login_connexion_1:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<input type="text" class="text" name="#GET{name}" value="#ENV*{#GET{name}}" id="#GET{name}"/> </div> #SET{name,pass_db}#SET{obli,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:entree_mot_passe_1:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<input type="password" class="text password" name="#GET{name}" value="#ENV*{#GET{name}}" id="#GET{name}"/> </div> </fieldset> </div> </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons'><span class='image_loading'> </span> <input type='submit' class='submit' value='<:bouton_suivant:>' /></p> </div></form> </div> <script type="text/javascript"> jQuery(function($) { if ($("#sql_serveur_db").val().match("sqlite*")) $("#sql_serveur_db").parents('.editer').siblings(".connexion_db").hide(); else $("#sql_serveur_db").parents('.editer').siblings(".connexion_db").show(); $("#sql_serveur_db").change(function(){ if ($(this).find("option:selected").val().match("sqlite*")) $("#sql_serveur_db").parents('.editer').siblings(".connexion_db:visible").hide('fast'); else $("#sql_serveur_db").parents('.editer').siblings(".connexion_db:hidden").show('fast'); }); }); </script>configurer_multilinguisme.php000066600000011453152442521210012555 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) { return; } function formulaires_configurer_multilinguisme_charger_dist() { $valeurs = array(); $valeurs['multi_secteurs'] = $GLOBALS['meta']['multi_secteurs']; foreach (array('multi_objets', 'gerer_trad_objets') as $m) { $valeurs[$m] = explode(',', isset($GLOBALS['meta'][$m]) ? $GLOBALS['meta'][$m] : ''); } if (count($valeurs['multi_objets']) or count(explode(',', $GLOBALS['meta']['langues_utilisees'])) > 1 ) { $selection = (is_null(_request('multi_objets')) ? explode(',', $GLOBALS['meta']['langues_multilingue']) : _request('langues_auth')); $valeurs['_langues'] = saisie_langues_utiles('langues_auth', $selection ? $selection : array()); $valeurs['_nb_langues_selection'] = count($selection); } return $valeurs; } function formulaires_configurer_multilinguisme_traiter_dist() { $res = array('editable' => true); // un checkbox seul de name X non coche n'est pas poste. // on verifie le champ X_check qui indique que la checkbox etait presente dans le formulaire. foreach (array('multi_secteurs') as $m) { if (!is_null(_request($m . '_check'))) { ecrire_meta($m, _request($m) ? 'oui' : 'non'); } } foreach (array('multi_objets', 'gerer_trad_objets') as $m) { if (!is_null($v = _request($m))) { // join et enlever la valeur vide '' ecrire_meta($m, implode(',', array_diff($v, array('')))); } } if ($i = _request('langues_auth') and is_array($i)) { $i = array_unique(array_merge($i, explode(',', $GLOBALS['meta']['langues_utilisees']))); ecrire_meta('langues_multilingue', implode(',', $i)); } $res['message_ok'] = _T('config_info_enregistree'); return $res; } /** * Tester si une table supporte les langues (champ lang) * * @param string $table_sql * @return string */ function table_supporte_lang($table_sql) { $trouver_table = charger_fonction('trouver_table', 'base'); $desc = $trouver_table($table_sql); if (!$desc or !isset($desc['field']['lang'])) { return ''; } return ' '; } /** * Tester si une table supporte les traductions (champ id_trad) * * @param string $table_sql * @return string */ function table_supporte_trad($table_sql) { $trouver_table = charger_fonction('trouver_table', 'base'); $desc = $trouver_table($table_sql); if (!$desc or !isset($desc['field']['id_trad'])) { return ''; } return ' '; } function saisie_langues_utiles($name, $selection) { include_spip('inc/lang_liste'); $langues = $GLOBALS['codes_langues']; $langues_installees = explode(',', $GLOBALS['meta']['langues_proposees']); $langues_trad = array_flip($langues_installees); $langues_bloquees = explode(',', $GLOBALS['meta']['langues_utilisees']); $res = ''; $i = 0; foreach ($langues_bloquees as $code_langue) { $nom_langue = $langues[$code_langue]; $res .= "<li class='choix " . alterner(++$i, 'odd', 'even') . (isset($langues_trad[$code_langue]) ? ' traduite' : '') . "'>" . "<input type='hidden' name='{$name}[]' value='$code_langue'>" // necessaire ... . "<input type='checkbox' name='{$name}[]' id='{$name}_$code_langue' value='$code_langue' checked='checked' disabled='disabled' />" . "<label for='{$name}_$code_langue'>" . $nom_langue . " <span class='code_langue'>[$code_langue]</span></label>" . '</li>'; } if ($res) { $res = "<ul id='langues_bloquees'>" . $res . "</ul><div class='nettoyeur'></div>"; } $res .= "<ul id='langues_proposees'>"; $i = 0; $langues_bloquees = array_flip($langues_bloquees); foreach ($langues as $code_langue => $nom_langue) { if (!isset($langues_bloquees[$code_langue])) { $checked = (in_array($code_langue, $selection) ? ' checked="checked"' : ''); $res .= "<li class='choix " . alterner(++$i, 'odd', 'even') . (isset($langues_trad[$code_langue]) ? ' traduite' : '') . "'>" . "<input type='checkbox' name='{$name}[]' id='{$name}_$code_langue' value='$code_langue'" . $checked . '/>' . "<label for='{$name}_$code_langue'" . ($checked ? " class='on'" : '') . '>' . $nom_langue . " <span class='code_langue'>[$code_langue]</span></label>" . '</li>'; } } $res .= "</ul><div class='nettoyeur'></div>"; return $res; } recherche_ecrire.php000066600000003540152442521210010542 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ /** * Gestion du formulaire de recherche pour l'espace privé * * @package SPIP\Core\Formulaires **/ if (!defined('_ECRIRE_INC_VERSION')) { return; } /** * Chargement des valeurs par defaut des champs du formulaire de recherche de l'espace privé * * Le formulaire dirige son action directement sur la page de l'action demandée. * Il n'y a pas de vérification ni de traitement dans ce formulaire. * * @param string $action * URL de la page exec qui reçoit la recherche. Par défaut l'URL de l'exec 'recherche'. * @param string $class * Classe CSS supplémentaire appliquée sur le formulaire * @return array Environnement du formulaire **/ function formulaires_recherche_ecrire_charger_dist($action = '', $class = '') { if ($GLOBALS['spip_lang'] != $GLOBALS['meta']['langue_site']) { $lang = $GLOBALS['spip_lang']; } else { $lang = ''; } return array( 'action' => ($action ? $action : generer_url_ecrire('recherche')), # action specifique, ne passe pas par Verifier, ni Traiter 'recherche' => _request('recherche'), 'lang' => $lang, 'class' => $class, '_id_champ' => 'rechercher_' . substr(md5($action . $class), 0, 4), ); } editer_liens.html000066600000005740152442521210010110 0ustar00<div class="formulaire_spip formulaire_editer formulaire_#FORM [formulaire_[(#FORM)]-(#ENV{table_source})] formulaire_#FORM-#ENV{id}[(#ENV{editable}|non)non_editable]"> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [(#ENV{editable}) <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <input type="hidden" name="visible" value="#ENV{visible,0}" id="visible-#ENV{id}"/> <div class="over"><span class='image_loading'> </span><input type='submit' class='submit' value='<:bouton_changer:>' /></div> ] <INCLURE{fond=prive/objets/liste/#ENV{_vue_liee},action='',env,ajax}> [<div class="action"><input type="hidden" name="_oups" value='(#ENV**{_oups})' /><input type="submit" name="annuler_oups" value="Ooops" /></div>] [(#ENV{visible,0}|et{#ENV{editable}}|oui) <div class="selecteur[(#ENV{recherche}|oui)filtre]"> <h3 class="titrem">[(#ENV{objet_source}|objet_info{texte_ajouter}|_T)]</h3> <INCLURE{fond=prive/objets/liste/#ENV{_vue_ajout},action='',env,ajax}> [(#AUTORISER{creer,#ENV{objet_source}}|oui) [(#REM|generer_url_ecrire_entite_edit{#ENV{objet_source}} |parametre_url{associer_objet,#ENV{objet}|concat{'|',#ENV{id_objet}}} |parametre_url{redirect,#SELF|parametre_url{dummy,'','&'}} |icone_horizontale{[(#ENV{objet_source}|objet_info{texte_creer_associer}|_T)],#ENV{objet_source},new})] ] <div class="toggle_box_link"> [<a href="#" onclick="jQuery(this).parents('div.selecteur').hide('fast').siblings('.toggle_box_link').show();jQuery('#visible-#ENV{id}').attr('value',0);return false;" ><:bouton_fermer:></a>] </div> <p class="boutons"> <input type="submit" class="submit" name="fermer" value="<:bouton_fermer:>" onclick="jQuery(this).parents('div.selecteur').hide('fast').siblings('.toggle_box_link').show();jQuery('#visible-#ENV{id}').attr('value',0);return false;" /> </p> </div> <div class="toggle_box_link" style="display:none;"> [<a href="#" onclick="jQuery(this).parents('div.toggle_box_link').hide('fast').siblings('.selecteur').show('fast');jQuery('#visible-#ENV{id}').attr('value',1);return false;" >[(#ENV{objet_source}|objet_info{texte_ajouter}|_T)]</a>] </div> ] [(#ENV{editable}) [(#ENV{visible,0}|non) <div class="toggle_box_link"> [<button type="submit" class="link" name="visible" value="1">[(#ENV{objet_source}|objet_info{texte_ajouter}|_T)]</button>] </div> ] [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> </div></form> ] </div> <script type="text/javascript">/*<![CDATA[*/ jQuery('.formulaire_#FORM .action .delete').click(function(){jQuery(this).parents('tr').eq(0).animateRemove();}); jQuery('.formulaire_#FORM .append').animateAppend(); /*]]>*/</script> configurer_relayeur.html000066600000005345152442521210011516 0ustar00<div class="formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}"> <h3 class='titrem'><img src="#CHEMIN_IMAGE{reseau-24.png}" class="cadre-icone" /><:info_sites_proxy:>#AIDER{confhttpproxy}</h3> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [(#ENV{editable}) #SET{proxy,#VAL{<b><tt>}|concat{'http://proxy:8080','</tt></b>'}} <p><:texte_proxy{proxy_en_cours=#GET{proxy}}:></p> <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <input type='submit' class='submit' value='<:bouton_enregistrer:>' style="display:none;"/> <div class="editer-groupe"> #SET{name,http_proxy}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:info_url_proxy:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ] <input type="text" class="text" name="#GET{name}" id="#GET{name}" value="#ENV*{#GET{name}}" onchange="if (jQuery(this).val()) jQuery('.editer_test_proxy:hidden').show('fast'); else jQuery('.editer_test_proxy:visible').hide('fast');" /> </div> #SET{exemple,#VAL{<b><tt>}|concat{'127.0.0.1 .mondomaine.net','</tt></b>'}} #SET{name,http_noproxy}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:info_exceptions_proxy:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<p class="explication"><:pas_de_proxy_pour{exemple=#GET{exemple}}:></p> <input type="text" class="text" name="#GET{name}" id="#GET{name}" value="#ENV*{#GET{name}}" /> </div> #SET{name,test_proxy}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"[(#ENV{http_proxy}|strlen|non)style='display:none;']> <label for="#GET{name}"><:info_url_test_proxy:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<p class="explication"><:texte_test_proxy:></p> <input type="text" class="text" name="#GET{name}" id="#GET{name}" value="#ENV*{#GET{name}}" /> <input type='submit' class='submit' name="tester_proxy" value='<:bouton_test_proxy:>' /> </div> </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons'><span class='image_loading'> </span><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p> </div></form> ] </div> configurer_rubriques.php000066600000002433152442521210011525 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) { return; } function formulaires_configurer_rubriques_charger_dist() { $valeurs = array(); foreach (array( 'rubriques_descriptif', 'rubriques_texte' ) as $m) { $valeurs[$m] = $GLOBALS['meta'][$m]; } return $valeurs; } function formulaires_configurer_rubriques_traiter_dist() { $res = array('editable' => true); foreach (array( 'rubriques_descriptif', 'rubriques_texte' ) as $m) { if (!is_null($v = _request($m))) { ecrire_meta($m, $v == 'oui' ? 'oui' : 'non'); } } $res['message_ok'] = _T('config_info_enregistree'); return $res; } configurer_articles.html000066600000020771152442521210011474 0ustar00<div class="formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}"> <h3 class='titrem'><img src="#CHEMIN_IMAGE{article-24.png}" class="cadre-icone" /><:titre_les_articles:></h3> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [(#ENV{editable}) <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <fieldset><legend><:info_contenu_articles:>#AIDER{confart}</legend> <p><:texte_contenu_articles:></p> <div class="editer-groupe"> #SET{name,articles_surtitre}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer long_label editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:info_surtitre:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_oui" value="oui" [(#ENV{#GET{name}}|=={oui}|oui)checked="checked"] /><label for="#GET{name}_oui"><:item_oui:></label> <input type="radio" name="#GET{name}" id="#GET{name}_non" value="non" [(#ENV{#GET{name}}|=={oui}|non)checked="checked"] /><label for="#GET{name}_non"><:item_non:></label> </div> </div> #SET{name,articles_soustitre}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer long_label editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:info_sous_titre:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_oui" value="oui" [(#ENV{#GET{name}}|=={oui}|oui)checked="checked"] /><label for="#GET{name}_oui"><:item_oui:></label> <input type="radio" name="#GET{name}" id="#GET{name}_non" value="non" [(#ENV{#GET{name}}|=={oui}|non)checked="checked"] /><label for="#GET{name}_non"><:item_non:></label> </div> </div> #SET{name,articles_descriptif}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer long_label editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:info_descriptif:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_oui" value="oui" [(#ENV{#GET{name}}|=={oui}|oui)checked="checked"] /><label for="#GET{name}_oui"><:item_oui:></label> <input type="radio" name="#GET{name}" id="#GET{name}_non" value="non" [(#ENV{#GET{name}}|=={oui}|non)checked="checked"] /><label for="#GET{name}_non"><:item_non:></label> </div> </div> #SET{name,articles_chapeau}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer long_label editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:info_chapeau_2:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_oui" value="oui" [(#ENV{#GET{name}}|=={oui}|oui)checked="checked"] /><label for="#GET{name}_oui"><:item_oui:></label> <input type="radio" name="#GET{name}" id="#GET{name}_non" value="non" [(#ENV{#GET{name}}|=={oui}|non)checked="checked"] /><label for="#GET{name}_non"><:item_non:></label> </div> </div> #SET{name,articles_texte}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer long_label editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:info_texte:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_oui" value="oui" [(#ENV{#GET{name}}|=={oui}|oui)checked="checked"] /><label for="#GET{name}_oui"><:item_oui:></label> <input type="radio" name="#GET{name}" id="#GET{name}_non" value="non" [(#ENV{#GET{name}}|=={oui}|non)checked="checked"] /><label for="#GET{name}_non"><:item_non:></label> </div> </div> #SET{name,articles_ps}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer long_label editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:info_post_scriptum_2:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_oui" value="oui" [(#ENV{#GET{name}}|=={oui}|oui)checked="checked"] /><label for="#GET{name}_oui"><:item_oui:></label> <input type="radio" name="#GET{name}" id="#GET{name}_non" value="non" [(#ENV{#GET{name}}|=={oui}|non)checked="checked"] /><label for="#GET{name}_non"><:item_non:></label> </div> </div> #SET{name,articles_redac}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer long_label editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:info_date_publication_anterieure:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_oui" value="oui" [(#ENV{#GET{name}}|=={oui}|oui)checked="checked"] /><label for="#GET{name}_oui"><:item_oui:></label> <input type="radio" name="#GET{name}" id="#GET{name}_non" value="non" [(#ENV{#GET{name}}|=={oui}|non)checked="checked"] /><label for="#GET{name}_non"><:item_non:></label> </div> </div> #SET{name,articles_urlref}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer long_label editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:info_urlref:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_oui" value="oui" [(#ENV{#GET{name}}|=={oui}|oui)checked="checked"] /><label for="#GET{name}_oui"><:item_oui:></label> <input type="radio" name="#GET{name}" id="#GET{name}_non" value="non" [(#ENV{#GET{name}}|=={oui}|non)checked="checked"] /><label for="#GET{name}_non"><:item_non:></label> </div> </div> </div> </fieldset> <fieldset><legend><:titre_publication_articles_post_dates:>#AIDER{confdates}</legend> <div class="editer-groupe"> #SET{name,post_dates}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer long_label editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:texte_publication_articles_post_dates:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_oui" value="oui" [(#ENV{#GET{name}}|=={oui}|oui)checked="checked"] /><label for="#GET{name}_oui"><:item_publier_articles:></label> </div> <div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_non" value="non" [(#ENV{#GET{name}}|=={oui}|non)checked="checked"] /><label for="#GET{name}_non"><:item_non_publier_articles:></label> </div> </div> </div> </fieldset> <fieldset><legend><:config_redirection:>#AIDER{artvirt}</legend> <div class="editer-groupe"> #SET{name,articles_redirection}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer long_label editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:config_info_redirection:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_oui" value="oui" [(#ENV{#GET{name}}|=={oui}|oui)checked="checked"] /><label for="#GET{name}_oui"><:item_oui:></label> <input type="radio" name="#GET{name}" id="#GET{name}_non" value="non" [(#ENV{#GET{name}}|=={oui}|non)checked="checked"] /><label for="#GET{name}_non"><:item_non:></label> </div> </div> </div> </fieldset> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons'><span class='image_loading'> </span><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p> </div></form> ] </div>configurer_moderniseur.html000066600000003255152442521210012220 0ustar00<div class="formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}"> <h3 class='titrem'><img src="#CHEMIN_IMAGE{compat-24.png}" class="cadre-icone" /><:info_compatibilite_html:></h3> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [(#ENV{editable}) <p><:texte_compatibilite_html:></p> <p class="explication"><:texte_compatibilite_html_attention:></p> <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <div class="editer-groupe"> #SET{name,version_html_max}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> [ <span class='erreur_message'>(#GET{erreurs})</span> ]<div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_html4" value="html4" [(#ENV{#GET{name}}|=={html5}|non)checked="checked"] /><label for="#GET{name}_html4"><:item_version_html_max_html4:></label> </div> <div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_html5" value="html5" [(#ENV{#GET{name}}|=={html5}|oui)checked="checked"] /><label for="#GET{name}_html5"><:item_version_html_max_html5:></label> </div> </div> </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons'><span class='image_loading'> </span><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p> </div></form> ] </div> configurer_redacteurs.html000066600000003212152442521210012016 0ustar00<div class="formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}"> <h3 class='titrem'><img src="#CHEMIN_IMAGE{auteur-1comite-24.png}" class="cadre-icone" /><:info_inscription_automatique:></h3> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [(#ENV{editable}) <p><:info_question_inscription_nouveaux_redacteurs:></p> <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <div class="editer-groupe"> #SET{name,accepter_inscriptions}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> [ <span class='erreur_message'>(#GET{erreurs})</span> ]<div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_oui" value="oui" [(#ENV{#GET{name}}|=={oui}|oui)checked="checked"] /><label for="#GET{name}_oui"><:item_accepter_inscriptions:></label> </div> <div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_non" value="non" [(#ENV{#GET{name}}|=={oui}|non)checked="checked"] /><label for="#GET{name}_non"><:item_non_accepter_inscriptions:></label> </div> </div> </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons'><span class='image_loading'> </span><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p> </div></form> ] </div> configurer_articles.php000066600000003605152442521210011314 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) { return; } function formulaires_configurer_articles_charger_dist() { $valeurs = array(); foreach (array( 'articles_surtitre', 'articles_soustitre', 'articles_descriptif', 'articles_chapeau', 'articles_texte', 'articles_ps', 'articles_redac', 'articles_urlref', 'post_dates', 'articles_redirection', ) as $m) { $valeurs[$m] = $GLOBALS['meta'][$m]; } return $valeurs; } function formulaires_configurer_articles_traiter_dist() { $res = array('editable' => true); $purger_skel = false; // Purger les squelettes si un changement de meta les affecte if ($i = _request('post_dates') and ($i != $GLOBALS['meta']['post_dates'])) { $purger_skel = true; } foreach (array( 'articles_surtitre', 'articles_soustitre', 'articles_descriptif', 'articles_chapeau', 'articles_texte', 'articles_ps', 'articles_redac', 'articles_urlref', 'post_dates', 'articles_redirection', ) as $m) { if (!is_null($v = _request($m))) { ecrire_meta($m, $v == 'oui' ? 'oui' : 'non'); } } if ($purger_skel) { include_spip('inc/invalideur'); purger_repertoire(_DIR_SKELS); } $res['message_ok'] = _T('config_info_enregistree'); return $res; } inc-instituer_auteur_fonctions.php000066600000004232152442521210013524 0ustar00<?php /** * Fonction pour le squelette du même nom * * @package SPIP\Core\Formulaires **/ if (!defined('_ECRIRE_INC_VERSION')) { return; } /** * Afficher le formulaire de choix de rubrique restreinte * pour insertion dans le formulaire * * @param int $id_auteur * @param string $label * @param string $sel_css * Sélecteur CSS déterminant le conteneur de l'input reçevant les rubriques sélectionnées * @param string $img_remove * Balise `<img...>` pour enlever des rubriques * @return string * Code HTML et javascript */ function choisir_rubriques_admin_restreint( $id_auteur, $label = '', $sel_css = '#liste_rubriques_restreintes', $img_remove = '' ) { global $spip_lang; $res = ''; // Ajouter une rubrique a un administrateur restreint if ($chercher_rubrique = charger_fonction('chercher_rubrique', 'inc') and $a = $chercher_rubrique(0, 'auteur', false) ) { if ($img_remove) { $img_remove = addslashes("<a href=\"#\" onclick=\"jQuery(this).parent().remove();return false;\" class=\"removelink\">$img_remove</a>"); } $res = "\n<div id='ajax_rubrique'>\n" . "<label>$label</label>\n" . "<input name='id_auteur' value='$id_auteur' type='hidden' />\n" . $a . "</div>\n" // onchange = pour le menu // l'evenement doit etre provoque a la main par le selecteur ajax . "<script type='text/javascript'>/*<![CDATA[*/ jQuery(function($){ $('#id_parent').on('change', function(){ var id_parent = parseInt(this.value); if (id_parent){ var titre = $('#titreparent').val() || this.options[this.selectedIndex].text; titre=titre.replace(/^\\s+/,''); // Ajouter la rubrique selectionnee au formulaire, // sous la forme d'un input name='rubriques[]' var el = '<input type=\'checkbox\' class=\'checkbox\' checked=\'checked\' name=\'restreintes[]\' value=\''+id_parent+'\' /> ' + '<label><a href=\'?exec=rubrique&id_rubrique='+id_parent+'\' target=\'_blank\'>'+titre+'</a></label>'; el = el + '$img_remove'; if (!$('$sel_css input[value='+id_parent+']').length) { $('$sel_css').append('<li class=\"rubrique\">'+el+'</li>'); } } }) .attr('name','noname'); }); /*]]>*/</script>"; } return $res; } dateur/time_picker.css000066600000001063152442521210011037 0ustar00div.time-picker { position: absolute; height: 191px; width:4em; /* needed for IE */ overflow: auto; background: #fff; border: 1px solid #aaa; z-index: 99998; /* 98 */ margin: 0; } div.time-picker-12hours { width:6em; /* needed for IE */ } div.time-picker ul { list-style-type: none; margin: 0; padding: 0; } div.time-picker li { cursor: pointer; height: 10px; font: 12px/1 Helvetica, Arial, sans-serif; padding: 4px 3px; box-sizing:content-box; } div.time-picker li.selected { background: #888; /* #0063CE */ color: #fff; } dateur/inc-dateur.html000066600000010716152442521210010760 0ustar00<script type='text/javascript'>/*<![CDATA[*/ function date_picker_options(){ return { buttonText: '<:afficher_calendrier|texte_script:>', buttonImage: '#CHEMIN_IMAGE{calendrier-16.png}', buttonImageOnly: true, closeText: '<:bouton_fermer|texte_script:>', prevText: '<:precedent|texte_script:>', nextText: '<:suivant|texte_script:>', currentText: '<:date_aujourdhui|texte_script:>', closeText: '<:bouton_fermer|texte_script:>', monthNames: [ '<:date_mois_1|texte_script:>','<:date_mois_2|texte_script:>','<:date_mois_3|texte_script:>','<:date_mois_4|texte_script:>','<:date_mois_5|texte_script:>','<:date_mois_6|texte_script:>', '<:date_mois_7|texte_script:>','<:date_mois_8|texte_script:>','<:date_mois_9|texte_script:>','<:date_mois_10|texte_script:>','<:date_mois_11|texte_script:>','<:date_mois_12|texte_script:>'], monthNamesShort: [ '<:date_mois_1_abbr|texte_script:>','<:date_mois_2_abbr|texte_script:>','<:date_mois_3_abbr|texte_script:>','<:date_mois_4_abbr|texte_script:>','<:date_mois_5_abbr|texte_script:>','<:date_mois_6_abbr|texte_script:>', '<:date_mois_7_abbr|texte_script:>','<:date_mois_8_abbr|texte_script:>','<:date_mois_9_abbr|texte_script:>','<:date_mois_10_abbr|texte_script:>','<:date_mois_11_abbr|texte_script:>','<:date_mois_12_abbr|texte_script:>'], dayNames: [ '<:date_jour_1|texte_script:>','<:date_jour_2|texte_script:>','<:date_jour_3|texte_script:>','<:date_jour_4|texte_script:>', '<:date_jour_5|texte_script:>','<:date_jour_6|texte_script:>','<:date_jour_7|texte_script:>'], dayNamesShort: [ '<:date_jour_1_abbr|texte_script:>','<:date_jour_2_abbr|texte_script:>','<:date_jour_3_abbr|texte_script:>','<:date_jour_4_abbr|texte_script:>', '<:date_jour_5_abbr|texte_script:>','<:date_jour_6_abbr|texte_script:>','<:date_jour_7_abbr|texte_script:>'], dayNamesMin: [ '<:date_jour_1_initiale|texte_script:>','<:date_jour_2_initiale|texte_script:>','<:date_jour_3_initiale|texte_script:>','<:date_jour_4_initiale|texte_script:>', '<:date_jour_5_initiale|texte_script:>','<:date_jour_6_initiale|texte_script:>','<:date_jour_7_initiale|texte_script:>'], dateFormat: 'dd/mm/yy', firstDay: 1, changeMonth: true, changeYear: true, showOtherMonths: true, selectOtherMonths: true, yearRange: "c-60:c+40" }; } function time_picker_options() { return { step: #ENV{heure_pas,30}, }; } function date_picker_init(){ // Initialisation du sélecteur sur les champs de date jQuery('input.date').not('.datePicker') .addClass('datePicker').each(function() { // Pour chaque champ, on regarde s'il y a des options propres var options = {showOn: 'button'}; if (jQuery(this).data('startdate')) { options.minDate = jQuery(this).data('startdate'); } if (jQuery(this).data('enddate')) { options.maxDate = jQuery(this).data('enddate'); } if (jQuery(this).data('yearrange')) { options.yearRange = jQuery(this).data('yearrange'); } jQuery(this) .datepicker(jQuery.extend(date_picker_options(),options)) .trigger('datePickerLoaded'); }); // Initialisation du sélecteur sur les champs d'heure jQuery("input.heure").not('.timePicker') .addClass('timePicker').each(function() { // Pour chaque champ, on regarde s'il y a des options propres var options = {}; if (jQuery(this).data('starttime')) { options.startTime = jQuery(this).data('starttime'); } if (jQuery(this).data('endtime')) { options.endTime = jQuery(this).data('endtime'); } if (jQuery(this).data('step')) { options.step = jQuery(this).data('step'); } jQuery(this) .timePicker(jQuery.extend(time_picker_options(), options)); }); } var date_picker_loading; if (window.jQuery){ jQuery(function(){ if (jQuery('input.date,input.heure').length && typeof date_picker_loading=="undefined"){ date_picker_loading = jQuery.getScript('[(#PRODUIRE{fond=formulaires/dateur/jquery.dateur.js}|timestamp)]'); date_picker_loading.done(function(){ date_picker_init(); onAjaxLoad(date_picker_init); }) } }); } /*]]>*/</script> <style type="text/css"> [(#INCLURE{formulaires/dateur/time_picker.css}|compacte{css})] img.ui-datepicker-trigger { display: inline-block; padding: 0; margin: 0; margin-[(#ENV{lang}|lang_dir|choixsiegal{ltr,left,right})]: -19px; vertical-align: middle; z-index:2 } div.time-picker {font-size:11px; width:5em; /* needed for IE */} .formulaire_spip input.date {width:9em;padding-[(#ENV{lang}|lang_dir|choixsiegal{ltr,right,left})]:25px;} .formulaire_spip input.heure {width:7em;} </style> dateur/jquery.time_picker.js000066600000021576152442521210012214 0ustar00/** https://github.com/perifer/timePicker - b5195df3 */ /* * A time picker for jQuery * * Dual licensed under the MIT and GPL licenses. * Copyright (c) 2009 Anders Fajerson * @name timePicker * @author Anders Fajerson (http://perifer.se) * @example $("#mytime").timePicker(); * @example $("#mytime").timePicker({step:30, startTime:"15:00", endTime:"18:00"}); * * Based on timePicker by Sam Collet (http://www.texotela.co.uk/code/jquery/timepicker/) * * Options: * step: # of minutes to step the time by * startTime: beginning of the range of acceptable times * endTime: end of the range of acceptable times * separator: separator string to use between hours and minutes (e.g. ':') * show24Hours: use a 24-hour scheme */ (function($){ $.fn.timePicker = function(options) { // Build main options before element iteration var settings = $.extend({}, $.fn.timePicker.defaults, options); return this.each(function() { $.timePicker(this, settings); }); }; $.timePicker = function (elm, settings) { var e = $(elm)[0]; return e.timePicker || (e.timePicker = new jQuery._timePicker(e, settings)); }; $.timePicker.version = '0.3'; $._timePicker = function(elm, settings) { var tpOver = false; var keyDown = false; var startTime = timeToDate(settings.startTime, settings); var endTime = timeToDate(settings.endTime, settings); var selectedClass = "selected"; var selectedSelector = "li." + selectedClass; $(elm).attr('autocomplete', 'OFF'); // Disable browser autocomplete var times = []; var time = new Date(startTime); // Create a new date object. while(time <= endTime) { times[times.length] = formatTime(time, settings); time = new Date(time.setMinutes(time.getMinutes() + settings.step)); } var $tpDiv = $('<div class="time-picker'+ (settings.show24Hours ? '' : ' time-picker-12hours') +'"></div>'); var $tpList = $('<ul></ul>'); // Build the list. for(var i = 0; i < times.length; i++) { $tpList.append("<li>" + times[i] + "</li>"); } $tpDiv.append($tpList); // Append the timPicker to the body and position it. $tpDiv.appendTo('body').hide(); // Store the mouse state, used by the blur event. Use mouseover instead of // mousedown since Opera fires blur before mousedown. $tpDiv.mouseover(function() { tpOver = true; }).mouseout(function() { tpOver = false; }); $("li", $tpList).mouseover(function() { if (!keyDown) { $(selectedSelector, $tpDiv).removeClass(selectedClass); $(this).addClass(selectedClass); } }).mousedown(function() { tpOver = true; }).click(function() { setTimeVal(elm, this, $tpDiv, settings); tpOver = false; }); var showPicker = function() { if ($tpDiv.is(":visible")) { return false; } $("li", $tpDiv).removeClass(selectedClass); // Position var elmOffset = $(elm).offset(); $tpDiv.css({'top':elmOffset.top + elm.offsetHeight, 'left':elmOffset.left}); // Show picker. This has to be done before scrollTop is set since that // can't be done on hidden elements. $tpDiv.show(); // Try to find a time in the list that matches the entered time. var time = elm.value ? timeStringToDate(elm.value, settings) : startTime; var startMin = startTime.getHours() * 60 + startTime.getMinutes(); var min = (time.getHours() * 60 + time.getMinutes()) - startMin; var steps = Math.round(min / settings.step); var roundTime = normaliseTime(new Date(0, 0, 0, 0, (steps * settings.step + startMin), 0)); roundTime = (startTime < roundTime && roundTime <= endTime) ? roundTime : startTime; var $matchedTime = $("li:contains(" + formatTime(roundTime, settings) + ")", $tpDiv); if ($matchedTime.length) { $matchedTime.addClass(selectedClass); // Scroll to matched time. $tpDiv[0].scrollTop = $matchedTime[0].offsetTop; } return true; }; // Attach to click as well as focus so timePicker can be shown again when // clicking on the input when it already has focus. $(elm).focus(showPicker).click(showPicker); // Hide timepicker on blur $(elm).blur(function() { if (!tpOver) { $tpDiv.hide(); } }); // Keypress doesn't repeat on Safari for non-text keys. // Keydown doesn't repeat on Firefox and Opera on Mac. // Using kepress for Opera and Firefox and keydown for the rest seems to // work with up/down/enter/esc. var event = ($.browser.opera || $.browser.mozilla) ? 'keypress' : 'keydown'; $(elm)[event](function(e) { var $selected; keyDown = true; var top = $tpDiv[0].scrollTop; switch (e.keyCode) { case 38: // Up arrow. // Just show picker if it's hidden. if (showPicker()) { return false; }; $selected = $(selectedSelector, $tpList); var prev = $selected.prev().addClass(selectedClass)[0]; if (prev) { $selected.removeClass(selectedClass); // Scroll item into view. if (prev.offsetTop < top) { $tpDiv[0].scrollTop = top - prev.offsetHeight; } } else { // Loop to next item. $selected.removeClass(selectedClass); prev = $("li:last", $tpList).addClass(selectedClass)[0]; $tpDiv[0].scrollTop = prev.offsetTop - prev.offsetHeight; } return false; break; case 40: // Down arrow, similar in behaviour to up arrow. if (showPicker()) { return false; }; $selected = $(selectedSelector, $tpList); var next = $selected.next().addClass(selectedClass)[0]; if (next) { $selected.removeClass(selectedClass); if (next.offsetTop + next.offsetHeight > top + $tpDiv[0].offsetHeight) { $tpDiv[0].scrollTop = top + next.offsetHeight; } } else { $selected.removeClass(selectedClass); next = $("li:first", $tpList).addClass(selectedClass)[0]; $tpDiv[0].scrollTop = 0; } return false; break; case 13: // Enter if ($tpDiv.is(":visible")) { var sel = $(selectedSelector, $tpList)[0]; setTimeVal(elm, sel, $tpDiv, settings); } return false; break; case 27: // Esc $tpDiv.hide(); return false; break; } return true; }); $(elm).keyup(function(e) { keyDown = false; }); // Helper function to get an inputs current time as Date object. // Returns a Date object. this.getTime = function() { return timeStringToDate(elm.value, settings); }; // Helper function to set a time input. // Takes a Date object or string. this.setTime = function(time) { elm.value = formatTime(timeToDate(time, settings), settings); // Trigger element's change events. $(elm).change(); }; }; // End fn; // Plugin defaults. $.fn.timePicker.defaults = { step:30, startTime: new Date(0, 0, 0, 0, 0, 0), endTime: new Date(0, 0, 0, 23, 30, 0), separator: ':', show24Hours: true }; // Private functions. function setTimeVal(elm, sel, $tpDiv, settings) { // Update input field elm.value = $(sel).text(); // Trigger element's change events. $(elm).change(); // Keep focus for all but IE (which doesn't like it) if (!$.browser.msie) { elm.focus(); } // Hide picker $tpDiv.hide(); } function formatTime(time, settings) { var h = time.getHours(); var hours = settings.show24Hours ? h : (((h + 11) % 12) + 1); var minutes = time.getMinutes(); return formatNumber(hours) + settings.separator + formatNumber(minutes) + (settings.show24Hours ? '' : ((h < 12) ? ' AM' : ' PM')); } function formatNumber(value) { return (value < 10 ? '0' : '') + value; } function timeToDate(input, settings) { return (typeof input == 'object') ? normaliseTime(input) : timeStringToDate(input, settings); } function timeStringToDate(input, settings) { if (input) { var array = input.split(settings.separator); var hours = parseFloat(array[0]); var minutes = parseFloat(array[1]); // Convert AM/PM hour to 24-hour format. if (!settings.show24Hours) { if (hours === 12 && input.indexOf('AM') !== -1) { hours = 0; } else if (hours !== 12 && input.indexOf('PM') !== -1) { hours += 12; } } var time = new Date(0, 0, 0, hours, minutes, 0); return normaliseTime(time); } return null; } /* Normalise time object to a common date. */ function normaliseTime(time) { time.setFullYear(2001); time.setMonth(0); time.setDate(0); return time; } })(jQuery); dateur/jquery.dateur.js.html000066600000000326152442521210012136 0ustar00#HTTP_HEADER{Content-Type: text/js;} [(#REM)<script>] if (!jQuery.fn.datepicker){ #INCLURE{prive/javascript/ui/jquery-ui.js} } if (!jQuery.fn.timePicker){ #INCLURE{prive/formulaires/dateur/jquery.time_picker.js} } login.php000066600000026100152442521210006366 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ /** * Gestion du formulaire d'identification / de connexion à SPIP * * @package SPIP\Core\Formulaires **/ if (!defined('_ECRIRE_INC_VERSION')) { return; } include_spip('base/abstract_sql'); /** * Teste si une URL est une URL de l'espace privé (administration de SPIP) * ou de l'espace public * * @param string $cible URL * @return bool * true si espace privé, false sinon. **/ function is_url_prive($cible) { include_spip('inc/filtres_mini'); $path = parse_url(tester_url_absolue($cible) ? $cible : url_absolue($cible)); $path = (isset($path['path']) ? $path['path'] : ''); return strncmp(substr($path, -strlen(_DIR_RESTREINT_ABS)), _DIR_RESTREINT_ABS, strlen(_DIR_RESTREINT_ABS)) == 0; } /** * Chargement du formulaire de login * * Si on est déjà connecté, on redirige directement sur l'URL cible ! * * @uses auth_informer_login() * @uses is_url_prive() * @uses login_auth_http() * * @param string $cible * URL de destination après identification. * Cas spécifique : la valeur `@page_auteur` permet d'être redirigé * après connexion sur le squelette public de l'auteur qui se connecte. * @param string $login * Login de la personne à identifier (si connu) * @param null|bool $prive * Identifier pour l'espace privé (true), public (false) * ou automatiquement (null) en fonction de la destination de l'URL cible. * @return array * Environnement du formulaire **/ function formulaires_login_charger_dist($cible = '', $login = '', $prive = null) { $erreur = _request('var_erreur'); if (!$login) { $login = strval(_request('var_login')); } // si on est deja identifie if (!$login and isset($GLOBALS['visiteur_session']['login'])) { $login = $GLOBALS['visiteur_session']['login']; } // ou si on a un cookie admin if (!$login) { if (isset($_COOKIE['spip_admin']) and preg_match(',^@(.*)$,', $_COOKIE['spip_admin'], $regs) ) { $login = $regs[1]; } } include_spip('inc/auth'); $row = auth_informer_login($login); // Construire l'environnement du squelette // Ne pas proposer de "rester connecte quelques jours" // si la duree de l'alea est inferieure a 12 h (valeur par defaut) $valeurs = array( 'var_login' => $login, 'editable' => !$row, 'cnx' => isset($row['cnx']) ? $row['cnx'] : '0', 'auth_http' => login_auth_http(), 'rester_connecte' => ((_RENOUVELLE_ALEA < 12 * 3600) ? '' : ' '), '_logo' => isset($row['logo']) ? $row['logo'] : '', '_alea_actuel' => isset($row['alea_actuel']) ? $row['alea_actuel'] : '', '_alea_futur' => isset($row['alea_futur']) ? $row['alea_futur'] : '', '_pipeline' => 'affiche_formulaire_login', // faire passer le formulaire dans un pipe dedie pour les methodes auth ); if ($erreur or !isset($GLOBALS['visiteur_session']['id_auteur']) or !$GLOBALS['visiteur_session']['id_auteur']) { $valeurs['editable'] = true; } if (is_null($prive) ? is_url_prive($cible) : $prive) { include_spip('inc/autoriser'); $loge = autoriser('ecrire'); } else { $loge = (isset($GLOBALS['visiteur_session']['auth']) and $GLOBALS['visiteur_session']['auth'] != ''); } // Si on est connecte, appeler traiter() // et lancer la redirection si besoin if (!$valeurs['editable'] and $loge and _request('formulaire_action')!=='login') { $traiter = charger_fonction('traiter', 'formulaires/login'); $res = $traiter($cible, $login, $prive); $valeurs = array_merge($valeurs, $res); if (isset($res['redirect']) and $res['redirect']) { include_spip('inc/headers'); # preparer un lien pour quand redirige_formulaire ne fonctionne pas $m = redirige_formulaire($res['redirect'], '', 'ajaxform'); $valeurs['_deja_loge'] = inserer_attribut( '<a>' . _T('login_par_ici') . "</a>$m", 'href', $res['redirect'] ); } } // en cas d'echec de cookie, inc_auth a renvoye vers le script de // pose de cookie ; s'il n'est pas la, c'est echec cookie // s'il est la, c'est probablement un bookmark sur bonjour=oui, // et pas un echec cookie. if ($erreur == 'cookie') { $valeurs['echec_cookie'] = ' '; } elseif ($erreur) { // une erreur d'un SSO indique dans la redirection vers ici // mais il faut se proteger de toute tentative d'injection malveilante include_spip('inc/texte'); $valeurs['message_erreur'] = safehtml($erreur); } return $valeurs; } /** * Identification via HTTP (si pas de cookie) * * Gére le cas où un utilisateur ne souhaite pas de cookie : * on propose alors un formulaire pour s'authentifier via http * * @return string * - Si connection possible en HTTP : URL pour réaliser cette identification, * - chaîne vide sinon. **/ function login_auth_http() { if (!$GLOBALS['ignore_auth_http'] and _request('var_erreur') == 'cookie' and (!isset($_COOKIE['spip_session']) or $_COOKIE['spip_session'] != 'test_echec_cookie') and (($GLOBALS['flag_sapi_name'] and preg_match(',apache,i', @php_sapi_name())) or preg_match(',^Apache.* PHP,', $_SERVER['SERVER_SOFTWARE'])) // Attention dans le cas 'intranet' la proposition de se loger // par auth_http peut conduire a l'echec. and !(isset($_SERVER['PHP_AUTH_USER']) and isset($_SERVER['PHP_AUTH_PW'])) ) { return generer_url_action('cookie', '', false, true); } else { return ''; } } /** * Vérifications du formulaire de login * * Connecte la personne si l'identification réussie. * * @uses auth_identifier_login() * @uses auth_loger() * @uses login_autoriser() * * @param string $cible * URL de destination après identification. * Cas spécifique : la valeur `@page_auteur` permet d'être redirigé * après connexion sur le squelette public de l'auteur qui se connecte. * @param string $login * Login de la personne à identifier (si connu) * @param null|bool $prive * Identifier pour l'espace privé (true), public (false) * ou automatiquement (null) en fonction de la destination de l'URL cible. * @return array * Erreurs du formulaire **/ function formulaires_login_verifier_dist($cible = '', $login = '', $prive = null) { $session_login = _request('var_login'); $session_password = _request('password'); $session_remember = _request('session_remember'); if (!$session_login) { # pas de login saisi ! return array('var_login' => _T('info_obligatoire')); } // appeler auth_identifier_login qui va : // - renvoyer un string si echec (message d'erreur) // - un array decrivant l'auteur identifie si possible // - rediriger vers un SSO qui renverra in fine sur action/auth qui finira l'authentification include_spip('inc/auth'); $auteur = auth_identifier_login($session_login, $session_password); // on arrive ici si on ne s'est pas identifie avec un SSO if (!is_array($auteur)) { $erreurs = array(); if (is_string($auteur) and strlen($auteur)) { $erreurs['var_login'] = $auteur; } include_spip('inc/cookie'); spip_setcookie('spip_admin', '', time() - 3600); if (strlen($session_password)) { $erreurs['password'] = _T('login_erreur_pass'); } else { // sinon c'est un login en deux passe old style (ou js en panne) // pas de message d'erreur $erreurs['password'] = ' '; } return $erreurs; } // on a ete authentifie, construire la session // en gerant la duree demandee pour son cookie if ($session_remember !== null) { $auteur['cookie'] = $session_remember; } // si la connexion est refusee on renvoi un message erreur de mot de passe // car en donnant plus de detail on renseignerait un assaillant sur l'existence d'un compte if (auth_loger($auteur) === false) { $erreurs['message_erreur'] = _T('login_erreur_pass'); return $erreurs; } return (is_null($prive) ? is_url_prive($cible) : $prive) ? login_autoriser() : array(); } /** * Teste l'autorisation d'accéder à l'espace privé une fois une connexion * réussie, si la cible est une URL privée. * * Dans le cas contraire, un message d'erreur est retourné avec un lien * pour se déconnecter. * * @return array * - Erreur si un connecté n'a pas le droit d'acceder à l'espace privé * - tableau vide sinon. **/ function login_autoriser() { include_spip('inc/autoriser'); if (!autoriser('ecrire')) { $h = generer_url_action('logout', 'logout=prive&url=' . urlencode(self())); return array( 'message_erreur' => '<h1>' . _T('avis_erreur_visiteur') . '</h1><p>' . _T('texte_erreur_visiteur') . "</p><p class='retour'>[<a href='$h'>" . _T('icone_deconnecter') . '</a>]</p>' ); } return array(); } /** * Traitements du formulaire de login * * On arrive ici une fois connecté. * On redirige simplement sur l'URL cible désignée. * * @param string $cible * URL de destination après identification. * Cas spécifique : la valeur `@page_auteur` permet d'être redirigé * après connexion sur le squelette public de l'auteur qui se connecte. * @param string $login * Login de la personne à identifier (si connu) * @param null|bool $prive * Identifier pour l'espace privé (true), public (false) * ou automatiquement (null) en fonction de la destination de l'URL cible. * @return array * Retours du traitement **/ function formulaires_login_traiter_dist($cible = '', $login = '', $prive = null) { $res = array(); // Si on se connecte dans l'espace prive, // ajouter "bonjour" (repere a peu pres les cookies desactives) if (is_null($prive) ? is_url_prive($cible) : $prive) { $cible = parametre_url($cible, 'bonjour', 'oui', '&'); } if ($cible == '@page_auteur') { $cible = generer_url_entite($GLOBALS['auteur_session']['id_auteur'], 'auteur'); } if ($cible) { $cible = parametre_url($cible, 'var_login', '', '&'); // transformer la cible absolue en cible relative // pour pas echouer quand la meta adresse_site est foireuse if (strncmp($cible, $u = url_de_base(), strlen($u)) == 0) { $cible = './' . substr($cible, strlen($u)); } elseif (tester_url_absolue($cible) and !defined('_AUTORISER_LOGIN_ABS_REDIRECT')) { // si c'est une url absolue, refuser la redirection // sauf si cette securite est levee volontairement par le webmestre $cible = ''; } } // Si on est connecte, envoyer vers la destination if ($cible and ($cible != self('&')) and ($cible != self())) { $res['redirect'] = $cible; $res['message_ok'] = inserer_attribut( '<a>' . _T('login_par_ici') . '</a>', 'href', $cible ); } // avant de rediriger il faut mettre a jour les sessions sur le disque si on a charge une session if (function_exists('terminer_actualiser_sessions')) { terminer_actualiser_sessions(); } return $res; } configurer_relayeur.php000066600000010730152442521210011333 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) { return; } include_spip('inc/presentation'); include_spip('inc/config'); function formulaires_configurer_relayeur_charger_dist() { $valeurs = array( 'http_proxy' => no_password_proxy_url(lire_config('http_proxy', '')), 'http_noproxy' => lire_config('http_noproxy', ''), 'test_proxy' => 'http://www.spip.net/', ); return $valeurs; } function formulaires_configurer_relayeur_verifier_dist() { $erreurs = array(); $http_proxy = relayeur_saisie_ou_config(_request('http_proxy'), lire_config('http_proxy', '')); $http_noproxy = _request('http_noproxy'); if ($http_proxy and !tester_url_absolue($http_proxy)) { $erreurs['http_proxy'] = _T('info_url_proxy_pas_conforme'); } if (!isset($erreurs['http_proxy']) and _request('tester_proxy')) { if (!$http_proxy) { $erreurs['http_proxy'] = _T('info_obligatoire'); } else { include_spip('inc/distant'); $test_proxy = _request('test_proxy'); $t = parse_url($test_proxy); if (!@$t['host']) { $erreurs['test_proxy'] = _T('info_adresse_non_indiquee'); } else { include_spip('inc/texte'); // pour aide, couper, lang $info = ''; if (!need_proxy($t['host'], $http_proxy, $http_noproxy)) { $info = '<strong>' . _T('page_pas_proxy') . '</strong><br />'; } // il faut fausser le proxy actuel pour faire le test ! $cur_http_proxy = $GLOBALS['meta']['http_proxy']; $cur_http_noproxy = $GLOBALS['meta']['http_noproxy']; $GLOBALS['meta']['http_proxy'] = $http_proxy; $GLOBALS['meta']['http_noproxy'] = $http_noproxy; $page = recuperer_page($test_proxy, true); $GLOBALS['meta']['http_proxy'] = $cur_http_proxy; $GLOBALS['meta']['http_noproxy'] = $cur_http_noproxy; if ($page) { $erreurs['message_ok'] = _T('info_proxy_ok') . "<br />$info\n<tt>" . couper(entites_html($page), 300) . '</tt>'; $erreurs['message_erreur'] = ''; } else { $erreurs['message_erreur'] = $info . _T( 'info_impossible_lire_page', array('test_proxy' => "<tt>$test_proxy</tt>") ) . ' <b><tt>' . no_password_proxy_url($http_proxy) . '</tt></b>.' . aider('confhttpproxy'); } } } } return $erreurs; } function formulaires_configurer_relayeur_traiter_dist() { $res = array('editable' => true); $http_proxy = relayeur_saisie_ou_config(_request('http_proxy'), lire_config('http_proxy', '')); $http_noproxy = _request('http_noproxy'); if ($http_proxy !== null) { ecrire_meta('http_proxy', $http_proxy); } if ($http_noproxy !== null) { ecrire_meta('http_noproxy', $http_noproxy); } $res['message_ok'] = _T('config_info_enregistree'); return $res; } function relayeur_saisie_ou_config($http_proxy, $default) { // http_proxy : ne pas prendre en compte la modif si le password est '****' if (preg_match(',:\*\*\*\*@,', $http_proxy)) { $http_proxy = $default; } return $http_proxy; } // Function glue_url : le pendant de parse_url // http://code.spip.net/@glue_url function glue_url($url) { if (!is_array($url)) { return false; } // scheme $uri = (!empty($url['scheme'])) ? $url['scheme'] . '://' : ''; // user & pass if (!empty($url['user'])) { $uri .= $url['user'] . ':' . $url['pass'] . '@'; } // host $uri .= $url['host']; // port $port = (!empty($url['port'])) ? ':' . $url['port'] : ''; $uri .= $port; // path $uri .= $url['path']; // fragment or query if (isset($url['fragment'])) { $uri .= '#' . $url['fragment']; } elseif (isset($url['query'])) { $uri .= '?' . $url['query']; } return $uri; } // Ne pas afficher la partie 'password' du proxy // http://code.spip.net/@no_password_proxy_url function no_password_proxy_url($http_proxy) { if ($http_proxy and $p = @parse_url($http_proxy) and isset($p['pass']) and $p['pass'] ) { $p['pass'] = '****'; $http_proxy = glue_url($p); } return $http_proxy; } configurer_identite.html000066600000005510152442521210011465 0ustar00<div class="formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}"> <h3 class='titrem'><:titre_identite_site:></h3> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV**{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [(#ENV{editable}) <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <div class="editer-groupe"> #SET{name,nom_site}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}#SET{obli,obligatoire} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:info_nom_site:></label> [<span class='erreur_message'>(#GET{erreurs})</span>] <input type='text' class='text' name='#GET{name}' id='#GET{name}' value="#ENV{#GET{name}}" /> </div> #SET{name,slogan_site}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}#SET{obli,''} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:label_slogan_site:></label> [<span class='erreur_message'>(#GET{erreurs})</span>] <input type='text' class='text' name='#GET{name}' id='#GET{name}' value="#ENV{#GET{name}}" /> </div> #SET{name,adresse_site}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}#SET{obli,obligatoire} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:info_adresse_url:></label> [<span class='erreur_message'>(#GET{erreurs})</span>] <input type='text' class='text' name='#GET{name}' id='#GET{name}' value="#ENV{#GET{name}}" /> </div> #SET{name,descriptif_site}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}#SET{obli,''} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:texte_descriptif_rapide:></label> [<span class='erreur_message'>(#GET{erreurs})</span>] <textarea name='#GET{name}' id='#GET{name}' rows='7'>#ENV{#GET{name}}</textarea> </div> #SET{name,email_webmaster}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}#SET{obli,''} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:info_email_webmestre:></label> [<span class='erreur_message'>(#GET{erreurs})</span>] <input type='text' class='text' name='#GET{name}' id='#GET{name}' value="#ENV{#GET{name}}" /> </div> </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons'><span class='image_loading'> </span><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p> </div></form> ] </div>configurer_reducteur.html000066600000012130152442521210011656 0ustar00<div class="formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}"> <h3 class='titrem'><img src="#CHEMIN_IMAGE{image-24.png}" class="cadre-icone" /><:info_generation_miniatures_images:></h3> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [(#ENV{editable}) <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <input type='submit' class='submit' value='<:bouton_enregistrer:>' style="display:none;"/> <div class="editer-groupe"> #SET{name,image_process}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer haut editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:info_image_process:>#AIDER{logoart}</label>[ <span class='erreur_message'>(#GET{erreurs})</span> ] <div class="vignettes_reducteur clearfix"> #SET{process,gd1} [<button type="submit" class="vignette_reducteur[(#ENV{image_process}|=={#GET{process}}|oui)on]" style="background-image:url((#GET{process}|url_vignette_choix));" name="image_process_\[#GET{process}\]"> [(#GET{process}|strtoupper)] </button>] #SET{process,gd2} [<button type="submit" class="vignette_reducteur[(#ENV{image_process}|=={#GET{process}}|oui)on]" style="background-image:url((#GET{process}|url_vignette_choix));" name="image_process_\[#GET{process}\]"> [(#GET{process}|strtoupper)] </button>] #SET{process,netpbm} [<button type="submit" class="vignette_reducteur[(#ENV{image_process}|=={#GET{process}}|oui)on]" style="background-image:url((#GET{process}|url_vignette_choix));" name="image_process_\[#GET{process}\]"> [(#GET{process}|strtoupper)] </button>] #SET{process,imagick} [<button type="submit" class="vignette_reducteur[(#ENV{image_process}|=={#GET{process}}|oui)on]" style="background-image:url((#GET{process}|url_vignette_choix));" name="image_process_\[#GET{process}\]"> [(#GET{process}|strtoupper)] </button>] #SET{process,convert} [<button type="submit" class="vignette_reducteur[(#ENV{image_process}|=={#GET{process}}|oui)on]" style="background-image:url((#GET{process}|url_vignette_choix));" name="image_process_\[#GET{process}\]"> [(#GET{process}|strtoupper)] </button>] </div> <p class="explication"><:info_image_process2:></p> </div> [(#ENV{image_process}|match{^(gd1|gd2)$}|oui) #SET{name,max_taille_vignettes}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer long_label editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:info_taille_maximale_images:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<iframe style='border:0;height:3em;overflow:hidden;' src='[(#SELF|parametre_url{action,tester_taille}|parametre_url{arg,6000}||parametre_url{time,#EVAL{time()}})]'></iframe> </div> ][(#ENV{formats_graphiques}|oui) <div class="editer fieldset"> <fieldset><legend><:info_generation_miniatures_images:></legend> <p><:info_ajout_image:></p> <div class="editer-groupe"> #SET{name,creer_preview}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> [ <span class='erreur_message'>(#GET{erreurs})</span> ]<div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_non" value="non" onclick="$(this).blur();" onchange="if ($(this).prop('checked')) $('.editer_taille_preview').hide('fast');" [(#ENV{#GET{name}}|=={oui}|non)checked="checked"] /><label for="#GET{name}_non"><:item_choix_non_generation_miniature:></label> </div> <div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_oui" value="oui" onclick="$(this).blur();" onchange="if ($(this).prop('checked')) $('.editer_taille_preview').show('fast');" [(#ENV{#GET{name}}|=={oui}|oui)checked="checked"] /><label for="#GET{name}_oui"><:item_choix_generation_miniature:></label> </div> </div> #SET{name,taille_preview}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"[(#ENV{creer_preview}|=={oui}|non)style='display:none;']> <label for="#GET{name}"><:info_taille_maximale_vignette:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<input type='text' name='#GET{name}' id='#GET{name}' value='#ENV{#GET{name}}' /> </div> </div> </fieldset> </div> ] </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons'><span class='image_loading'> </span><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p> </div></form> ] </div>inc-options-langues.html000066600000001040152442521210011325 0ustar00<BOUCLE_langues(POUR){tableau #ENV*{name}|liste_options_langues}> [(#VALEUR|=={#ENV*{herit}}|oui) <option class='maj-debut on' value='herit'[(#VALEUR|=={#ENV*{default}}|oui)selected="selected"] dir="[(#VALEUR|lang_dir{ltr,rtl})]">[#VALEUR] [(#VALEUR|traduire_nom_langue)] (<:info_multi_herit:>)</option> ][(#VALEUR|=={#ENV*{herit}}|non) <option value='#VALEUR'[(#VALEUR|=={#ENV*{default}}|oui)selected="selected"] dir="[(#VALEUR|lang_dir{ltr,rtl})]">[#VALEUR] [(#VALEUR|traduire_nom_langue)]</option> ] </BOUCLE_langues> configurer_avertisseur.html000066600000003206152442521210012234 0ustar00<div class="formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}"> <h3 class='titrem'><img src="#CHEMIN_IMAGE{article-24.png}" class="cadre-icone" /><:info_travail_colaboratif:>#AIDER{artmodif}</h3> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [(#ENV{editable}) <p><:texte_travail_collaboratif:></p> <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <div class="editer-groupe"> #SET{name,articles_modif}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> [ <span class='erreur_message'>(#GET{erreurs})</span> ]<div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_oui" value="oui" [(#ENV{#GET{name}}|=={oui}|oui)checked="checked"] /><label for="#GET{name}_oui"><:item_activer_messages_avertissement:></label> </div> <div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_non" value="non" [(#ENV{#GET{name}}|=={oui}|non)checked="checked"] /><label for="#GET{name}_non"><:item_non_activer_messages_avertissement:></label> </div> </div> </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons'><span class='image_loading'> </span><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p> </div></form> ] </div>login.html000066600000005662152442521210006555 0ustar00#HTTP_HEADER{"Cache-Control: no-store, no-cache, must-revalidate"} #HTTP_HEADER{"Pragma: no-cache"} <div class='formulaire_spip formulaire_login'> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{_deja_loge})</p>] [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class='reponse_formulaire reponse_formulaire_erreur'>(#ENV*{message_erreur})</p>] [(#ENV{echec_cookie}) <fieldset class='reponse_formulaire reponse_formulaire_erreur'> <h2><:avis_erreur_cookie:></h2> <p class="erreur_message"><:login_cookie_oblige:><br /><:login_cookie_accepte:></p> </fieldset>] [(#ENV{editable}) <form id='formulaire_login' method='post' action='#ENV{action}'> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <fieldset> <legend><:form_forum_identifiants:></legend> <div class="editer-groupe"> <div class="editer editer_login obligatoire[(#ENV**{erreurs}|table_valeur{var_login}|oui)erreur]"> <label for="var_login"><:login_login2:></label>[ <span class="erreur_message">(#ENV**{erreurs}|table_valeur{var_login})</span> ]<input type='text' class='text [(#ENV*{_logo}|oui)avec_spip_logo_auteur]' name='var_login' id='var_login' value="[(#ENV**{var_login})]" size='40'[(#HTML5) required='required' autofocus='autofocus'] autocapitalize="off" autocorrect="off" />[ <span id="spip_logo_auteur">(#ENV*{_logo,''})</span>] </div> <div class="editer editer_password obligatoire[(#ENV**{erreurs}|table_valeur{password}|oui)erreur]"> <label for="password"><:login_pass2:></label>[ <span class="erreur_message">(#ENV**{erreurs}|table_valeur{password})</span> ]<input type='password' class='text password' name='password' id='password' value="" size='40' autocapitalize="off" autocorrect="off" /> <p class='details'><a href="[(#URL_PAGE{spip_pass}|parametre_url{lang,#LANG})]" id='spip_pass'><:login_motpasseoublie:></a></p> </div> [(#ENV{rester_connecte}) <div class="editer editer_session"><div class='choix'> <input type="checkbox" class="checkbox" name="session_remember" id="session_remember" value="oui" [(#ENV**{cnx}|?{' '})checked="checked"] onchange="jQuery(this).addClass('modifie');" /> <label class='nofx' for="session_remember"><:login_rester_identifie:></label> </div></div>] </div> </fieldset> <p class="boutons"><input type="submit" class="submit" value="<:bouton_valider|attribut_html:>" /></p> </form> ] [(#REM) en cas d'absence de cookie, on represente le formulaire alternatif ] [<form action="(#ENV{auth_http})" method="get">[ (#ENV{auth_http}|form_hidden) ] <fieldset> <legend><:login_sans_cookie:></legend> <:login_preferez_refuser:> <input type="hidden" name="essai_auth_http" value="oui"/> [<input type="hidden" name="url" value="(#ENV{url})"/>] <p class="boutons"><input type="submit" class="submit" value="<:login_sans_cookie|attribut_html:>"/></p> </fieldset> </form> ] </div> configurer_metas.php000066600000006773152442521210010630 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) { return; } function formulaires_configurer_metas_charger_dist($form) { $f = charger_fonction('charger', "formulaires/$form", true); if ($f) { return $f($form); } else { $infos = formulaires_configurer_metas_infos($form); if (!is_array($infos)) { return $infos; } return $GLOBALS[$infos['meta']]; } } function formulaires_configurer_metas_verifier_dist($form) { $f = charger_fonction('verifier', "formulaires/$form", true); return $f ? $f($form) : array(); } function formulaires_configurer_metas_traiter_dist($form) { $f = charger_fonction('traiter', "formulaires/$form", true); if ($f) { return $f($form); } else { $infos = formulaires_configurer_metas_infos($form); if (!is_array($infos)) { return $infos; } // fait ci-dessus en fait $vars = formulaires_configurer_metas_recense($infos['path'], PREG_PATTERN_ORDER); $meta = $infos['meta']; foreach (array_unique($vars[2]) as $k) { $v = _request($k); ecrire_meta($k, is_array($v) ? serialise($v) : $v, 'oui', $meta); } return !isset($infos['prefix']) ? array() : array('redirect' => generer_url_ecrire($infos['prefix'])); } } // version amelioree de la RegExp de cfg_formulaire. define( '_EXTRAIRE_SAISIES', '#<(select|textarea|input)[^>]*\sname=["\'](\w+)(\[\w*\])?["\'](?: class=["\']([^\'"]*)["\'])?( multiple=)?[^>]*?>#ims' ); // determiner la liste des noms des saisies d'un formulaire // (a refaire avec SAX) function formulaires_configurer_metas_recense($form, $opt = '') { if (!$opt) { $opt = PREG_SET_ORDER; } $f = file_get_contents($form); if ($f and preg_match_all(_EXTRAIRE_SAISIES, $f, $r, $opt)) { return $r; } else { return array(); } } // Repertoires potentiels des plugins, ce serait bien d'avoir ça ailleurs // ca n'est pas lie a cette balise // Attention a l'ordre: // si l'un des 3 est un sous-rep d'un autre, le mettre avant. define('_EXTRAIRE_PLUGIN', '@(' . _DIR_PLUGINS_AUTO . '|' . _DIR_PLUGINS . '|' . _DIR_PLUGINS_DIST . ')/?([^/]+)/@'); // Recuperer la version compilee de plugin.xml et normaliser // Si ce n'est pas un plugin, dire qu'il faut prendre la table std des meta. function formulaires_configurer_metas_infos($form) { $path = find_in_path($form . '.' . _EXTENSION_SQUELETTES, 'formulaires/'); if (!$path) { return ''; } // cas traite en amont normalement. if (!preg_match(_EXTRAIRE_PLUGIN, $path, $m)) { return array('path' => $path, 'meta' => 'meta'); } $plugin = $m[2]; $get_infos = charger_fonction('get_infos', 'plugins'); $infos = $get_infos($plugin, false, $m[1]); if (!is_array($infos)) { return _T('erreur_plugin_nom_manquant'); } if (isset($infos['erreur'])) { return $infos['erreur'][0]; } $prefix = $infos['prefix']; $infos['path'] = $path; if (!isset($infos['meta'])) { $infos['meta'] = ($prefix . '_metas'); } return $infos; } instituer_objet.html000066600000005505152442521210010652 0ustar00<div class="instituer_objet"> [(#ENV{_publiable}|non|et{#ENV{statut}|=={prepa}|oui}) <p class="small"><:texte_proposer_publication:></p> ] <div class="formulaire_spip formulaire_editer formulaire_instituer[ formulaire_#FORM formulaire_#FORM-(#ENV{_objet})][ formulaire_#FORM-#ENV{_objet}-(#ENV{_id_objet})]"> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV**{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [(#ENV{editable}) <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE ] #SET{name,statut}#SET{obli,'obligatoire'}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer-groupe"> <div class="editer editer_[(#GET{name})] statut_#ENV{#GET{name}}[ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="formulaire_#FORM-#ENV{_objet}-#ENV{_id_objet}-#GET{name}">[(#ENV{_label}|_T)][(#ENV{_aide}|oui)#AIDER{#ENV{_aide}}]</label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<span class="show"> [(#ENV{editable}) <select class="select statut" name="#GET{name}" id="formulaire_#FORM-#ENV{_objet}-#ENV{_id_objet}-#GET{name}"> [(#ENV{_statuts}|table_valeur{#ENV{#GET{name}}}|non) <option value="#ENV{#GET{name}}"> #ENV{#GET{name}}</option> ] ] <BOUCLE_choix(POUR){tableau #ENV{_statuts}}{si #ENV{editable}}> <option value="#CLE"[(#ENV{#GET{name}}|=={#CLE}|oui)selected="selected"] style="background-image:url([(#CLE|puce_statut{#ENV{_objet}}|extraire_attribut{src})]);"> [(#VALEUR|_T)]</option> </BOUCLE_choix> [(#ENV{editable}) </select> ] [(#ENV{editable}|non) <span class="statut">[(#ENV{#GET{name}}|puce_statut{#ENV{_objet}})] [(#ENV{_statuts}|table_valeur{#ENV{#GET{name}}}|_T)]</span> ] </span> </div> </div> <!--extra--> [(#ENV{editable}) <p class='boutons'><span class='image_loading'> </span> <input type='submit' class='submit' value='<:bouton_changer:>' /></p> </div></form> ] </div> </div> <script type="text/javascript"> function update_select(statut_default){ var selected = this.options[this.selectedIndex]; var boutons = jQuery(this).attr('style',jQuery(selected).attr('style')).closest('form').find('.boutons'); if (selected.value!=statut_default) boutons.css('visibility','visible').show('fast'); else boutons.css('visibility','hidden') } jQuery(function($){ $(".formulaire_#FORM .show select") .each(function(){update_select.apply(this,['#ENV{#GET{name}}']);}) .on('change',function(){update_select.apply(this,['#ENV{#GET{name}}']);}) .on('keyup',function(){update_select.apply(this,['#ENV{#GET{name}}']);}); }); </script> configurer_flux.php000066600000002352152442521210010462 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) { return; } function formulaires_configurer_flux_charger_dist() { $valeurs = array(); foreach (array( 'syndication_integrale' ) as $m) { $valeurs[$m] = $GLOBALS['meta'][$m]; } return $valeurs; } function formulaires_configurer_flux_traiter_dist() { $res = array('editable' => true); foreach (array( 'syndication_integrale', ) as $m) { if (!is_null($v = _request($m))) { ecrire_meta($m, $v == 'oui' ? 'oui' : 'non'); } } $res['message_ok'] = _T('config_info_enregistree'); return $res; } configurer_multilinguisme.html000066600000012377152442521210012740 0ustar00<div class="formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}"> <h3 class='titrem'><img src="#CHEMIN_IMAGE{traduction-24.png}" class="cadre-icone" /><:info_multilinguisme:> : #ENV{_langue_site}</h3> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [(#ENV{editable}) <p><:texte_multilinguisme:></p> <p><:texte_multilinguisme_trad:></p> <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <input type="hidden" name="multi_objets[]" value="" /> <input type="hidden" name="gerer_trad_objets[]" value="" /> <div class="editer-groupe"> <div class="fieldset"> <fieldset><div class="editer-groupe"> #SET{objets,#VAL{rubrique}|objet_info{texte_objets}|_T} #SET{val,spip_rubriques} #SET{name,multi_objets}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label>#GET{objets}</label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<div class="choix"> <input type="checkbox" name="#GET{name}[]" id="#GET{val}#GET{name}_oui" value="#GET{val}" [(#GET{val}|in_any{#ENV{#GET{name}}}|oui)checked="checked"] /><label for="#GET{val}#GET{name}_oui"><:info_multi_objets{objets=#GET{objets}}:></label> </div> </div> [(#GET{val}|in_any{#ENV{multi_objets}}|oui) #SET{name,multi_secteurs}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">[ <span class='erreur_message'>(#GET{erreurs})</span> ]<div class="choix"> <input type="hidden" name="#GET{name}_check" value="1" /> <input type="checkbox" name="#GET{name}" id="#GET{name}_oui" value="oui" [(#ENV{#GET{name}}|=={oui}|oui)checked="checked"] /><label for="#GET{name}_oui"><:info_multi_secteurs:></label> </div> </div> ] [(#VAL{spip_rubriques}|table_supporte_trad|oui) #SET{name,gerer_trad_objets}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">[ <span class='erreur_message'>(#GET{erreurs})</span> ]<div class="choix"> <input type="checkbox" name="#GET{name}[]" id="#GET{val}#GET{name}_oui" value="#GET{val}" [(#GET{val}|in_any{#ENV{#GET{name}}}|oui)checked="checked"] /><label for="#GET{val}#GET{name}_oui"><:info_gerer_trad_objets{objets=#GET{objets}}:></label> </div> </div> ] </div> </fieldset> </div> ] <BOUCLE_objets(POUR){tableau #REM|lister_tables_objets_sql}{cle!=spip_rubriques}{cle!=spip_auteurs}{si #ENV{editable}}>[(#CLE|table_supporte_lang|et{#VALEUR{type}|objet_info{editable}}) #SET{val,#CLE} <div class="fieldset"> <fieldset> #SET{objets,#VALEUR{texte_objets}|_T} <div class="editer-groupe"> #SET{name,multi_objets}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label>#GET{objets}</label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<div class="choix"> <input type="checkbox" name="#GET{name}[]" id="#GET{val}#GET{name}_oui" value="#GET{val}" [(#GET{val}|in_any{#ENV{#GET{name}}}|oui)checked="checked"] /><label for="#GET{val}#GET{name}_oui"><:info_multi_objets{objets=#GET{objets}}:></label> </div> </div> [(#CLE|table_supporte_trad|oui) #SET{name,gerer_trad_objets}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]">[ <span class='erreur_message'>(#GET{erreurs})</span> ]<div class="choix"> <input type="checkbox" name="#GET{name}[]" id="#GET{val}#GET{name}_oui" value="#GET{val}" [(#GET{val}|in_any{#ENV{#GET{name}}}|oui)checked="checked"] /><label for="#GET{val}#GET{name}_oui"><:info_gerer_trad_objets{objets=#GET{objets}}:></label> </div> </div> ] </div> </fieldset> </div>]</BOUCLE_objets> [(#ENV{editable}) </div> <p class='boutons'><span class='image_loading'> </span><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p> <div class="editer-groupe"> [<div class="fieldset"> <fieldset> <legend><:icone_gestion_langues:></legend> <p><:info_multi_langues_choisies:> [(#ENV{_nb_langues_selection}|>{10}|oui) \(<a href="#" onclick="jQuery('#langues_proposees').find('input\[type=checkbox\]').attr('checked',false);return false;"><:lien_tout_decocher:></a>\) ] </p> (#ENV**{_langues,''}) <p><:info_multi_langues_soulignees:></p> </fieldset> </div> ] </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons'><span class='image_loading'> </span><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p> </div></form> ] </div> dater.php000066600000027666152442521210006377 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ /** * Gestion du formulaire de date * * @package SPIP\Core\Formulaires **/ if (!defined('_ECRIRE_INC_VERSION')) { return; } /** * Chargement du formulaire d'édition d'une date * * @param string $objet * Type d'objet * @param int $id_objet * Identifiant de l'objet * @param string $retour * URL de redirection après le traitement * @param array|string $options * Options. Si string, unserialize pour obtenir un tableau. * * - date_redac : Permet de modifier en plus la date de rédaction antérieure * - champ_date : permet de preciser le champ date qu'on utilise * - label_date : label optionnel pour la saisie du champ date * - champ_date_redac : permet de preciser le champ date_redac qu'on utilise * - label_date_redac : label optionnel pour la saisie du champ date_redac * - texte_sans_date_redac : texte optionnel affiche pour vider la date_redac * - class : une classe ajoutable au formulaire pour le distinguer si on a plusieurs occurences * @return array * Environnement du formulaire **/ function formulaires_dater_charger_dist($objet, $id_objet, $retour = '', $options = array()) { $objet = objet_type($objet); if (!$objet or !intval($id_objet)) { return false; } if (!is_array($options)) { $options = unserialize($options); } $_id_objet = id_table_objet($objet); $table = table_objet($objet); $trouver_table = charger_fonction('trouver_table', 'base'); $desc = $trouver_table($table); if (!$desc) { return false; } $champ_date = $desc['date'] ? $desc['date'] : 'date'; if (isset($options['champ_date']) and $options['champ_date']) { $champ_date = $options['champ_date']; } if (!isset($desc['field'][$champ_date])) { return false; } $valeurs = array( 'objet' => $objet, 'id_objet' => $id_objet, 'id' => $id_objet, ); $select = "$champ_date as date"; $champ_date_redac = 'date_redac'; if (isset($options['champ_date_redac']) and $options['champ_date_redac']) { $champ_date_redac = $options['champ_date_redac']; } if (isset($desc['field'][$champ_date_redac])) { $select .= ",$champ_date_redac as date_redac"; } if (isset($desc['field']['statut'])) { $select .= ",statut"; } $row = sql_fetsel($select, $desc['table'], "$_id_objet=" . intval($id_objet)); $statut = isset($row['statut']) ? $row['statut'] : 'publie'; // pas de statut => publie $valeurs['editable'] = autoriser('dater', $objet, $id_objet, null, array('statut' => $statut)); $possedeDateRedac = false; if (isset($row['date_redac']) and $regs = recup_date($row['date_redac'], false) ) { $annee_redac = $regs[0]; $mois_redac = $regs[1]; $jour_redac = $regs[2]; $heure_redac = $regs[3]; $minute_redac = $regs[4]; $possedeDateRedac = true; // attention : les vrai dates de l'annee 1 sont stockee avec +9000 => 9001 // mais reviennent ici en annee 1 par recup_date // on verifie donc que le intval($row['date_redac']) qui ressort l'annee // est bien lui aussi <=1 : dans ce cas c'est une date sql 'nulle' ou presque, selon // le gestionnnaire sql utilise (0001-01-01 pour PG par exemple) if (intval($row['date_redac']) <= 1 and ($annee_redac <= 1) and ($mois_redac <= 1) and ($jour_redac <= 1)) { $possedeDateRedac = false; } } else { $annee_redac = $mois_redac = $jour_redac = $heure_redac = $minute_redac = 0; } if ($regs = recup_date($row['date'], false)) { $annee = $regs[0]; $mois = $regs[1]; $jour = $regs[2]; $heure = $regs[3]; $minute = $regs[4]; } // attention, si la variable s'appelle date ou date_redac, le compilo va // la normaliser, ce qu'on ne veut pas ici. $valeurs['afficher_date_redac'] = ($possedeDateRedac ? $row['date_redac'] : ''); $valeurs['date_redac_jour'] = dater_formater_saisie_jour($jour_redac, $mois_redac, $annee_redac); $valeurs['date_redac_heure'] = "$heure_redac:$minute_redac"; $valeurs['afficher_date'] = $row['date']; $valeurs['date_jour'] = dater_formater_saisie_jour($jour, $mois, $annee); $valeurs['date_heure'] = "$heure:$minute"; $valeurs['sans_redac'] = !$possedeDateRedac; if (isset($options['date_redac'])) { $valeurs['_editer_date_anterieure'] = $options['date_redac']; } else { $valeurs['_editer_date_anterieure'] = ($objet == 'article' and ($GLOBALS['meta']['articles_redac'] != 'non' or $possedeDateRedac)); } $valeurs['_label_date'] = (($statut == 'publie') ? _T('texte_date_publication_objet') : _T('texte_date_creation_objet')); if (isset($options['label_date']) and $options['label_date']) { $valeurs['_label_date'] = $options['label_date']; } if (isset($options['label_date_redac']) and $options['label_date_redac']) { $valeurs['_label_date_redac'] = $options['label_date_redac']; } if (isset($options['texte_sans_date_redac']) and $options['texte_sans_date_redac']) { $valeurs['_texte_sans_date_redac'] = $options['texte_sans_date_redac']; } if (isset($options['class']) and $options['class']) { $valeurs['_class'] = $options['class']; } $valeurs['_saisie_en_cours'] = (_request('_saisie_en_cours') !== null or _request('date_jour') !== null); // cas ou l'on ne peut pas dater mais on peut modifier la date de redac anterieure // https://core.spip.net/issues/3494 $valeurs['_editer_date'] = $valeurs['editable']; if ($valeurs['_editer_date_anterieure'] and !$valeurs['editable']) { $valeurs['editable'] = autoriser('modifier', $objet, $id_objet); } return $valeurs; } /** * Formate la date * * @param string|int $jour * Numéro du jour * @param string|int $mois * Numéro du mois * @param string|int $annee * Année * @param string $sep * Séparateur * @return string * Date formatée tel que `02/10/2012` **/ function dater_formater_saisie_jour($jour, $mois, $annee, $sep = '/') { $annee = str_pad($annee, 4, '0', STR_PAD_LEFT); if (intval($jour)) { $jour = str_pad($jour, 2, '0', STR_PAD_LEFT); $mois = str_pad($mois, 2, '0', STR_PAD_LEFT); return "$jour$sep$mois$sep$annee"; } if (intval($mois)) { $mois = str_pad($mois, 2, '0', STR_PAD_LEFT); return "$mois$sep$annee"; } return $annee; } /** * Identifier le formulaire en faisant abstraction des paramètres qui * ne représentent pas l'objet edité * * @param string $objet * Type d'objet * @param int $id_objet * Identifiant de l'objet * @param string $retour * URL de redirection après le traitement * @param array|string $options * Options. * @return string * Hash du formulaire **/ function formulaires_dater_identifier_dist($objet, $id_objet, $retour = '', $options = array()) { return serialize(array($objet, $id_objet)); } /** * Vérifications avant traitements du formulaire d'édition d'une date * * @param string $objet * Type d'objet * @param int $id_objet * Identifiant de l'objet * @param string $retour * URL de redirection après le traitement * @param array|string $options * Options. * @return Array * Tableau des erreurs */ function formulaires_dater_verifier_dist($objet, $id_objet, $retour = '', $options = array()) { $erreurs = array(); // ouvrir le formulaire en edition ? if (_request('_saisie_en_cours')) { $erreurs['message_erreur'] = ''; return $erreurs; } if (_request('changer')) { foreach (array('date', 'date_redac') as $k) { if ($v = _request($k . '_jour') and !dater_recuperer_date_saisie($v, $k)) { $erreurs[$k] = _T('format_date_incorrecte'); } elseif ($v = _request($k . '_heure') and !dater_recuperer_heure_saisie($v)) { $erreurs[$k] = _T('format_heure_incorrecte'); } } if (!_request('date_jour')) { $erreurs['date'] = _T('info_obligatoire'); } } return $erreurs; } /** * Traitement du formulaire d'édition d'une date * * @param string $objet * Type d'objet * @param int $id_objet * Identifiant de l'objet * @param string $retour * URL de redirection après le traitement * @param array|string $options * Options. * @return Array * Retours des traitements */ function formulaires_dater_traiter_dist($objet, $id_objet, $retour = '', $options = array()) { $res = array('editable' => ' '); if (_request('changer')) { $table = table_objet($objet); $trouver_table = charger_fonction('trouver_table', 'base'); $desc = $trouver_table($table); if (!$desc) { return array('message_erreur' => _L('erreur')); } #impossible en principe $champ_date = $desc['date'] ? $desc['date'] : 'date'; if (isset($options['champ_date']) and $options['champ_date']) { $champ_date = $options['champ_date']; } $set = array(); $charger = charger_fonction('charger', 'formulaires/dater/'); $v = $charger($objet, $id_objet, $retour, $options); if ($v['_editer_date']) { if (!$d = dater_recuperer_date_saisie(_request('date_jour'))) { $d = array(date('Y'), date('m'), date('d')); } if (!$h = dater_recuperer_heure_saisie(_request('date_heure'))) { $h = array(0, 0); } $set[$champ_date] = sql_format_date($d[0], $d[1], $d[2], $h[0], $h[1]); } $champ_date_redac = 'date_redac'; if (isset($options['champ_date_redac']) and $options['champ_date_redac']) { $champ_date_redac = $options['champ_date_redac']; } if (isset($desc['field'][$champ_date_redac]) and $v['_editer_date_anterieure']) { if (!_request('date_redac_jour') or _request('sans_redac')) { $set[$champ_date_redac] = sql_format_date(0, 0, 0, 0, 0, 0); } else { if (!$d = dater_recuperer_date_saisie(_request('date_redac_jour'), 'date_redac')) { $d = array(date('Y'), date('m'), date('d')); } if (!$h = dater_recuperer_heure_saisie(_request('date_redac_heure'))) { $h = array(0, 0); } $set[$champ_date_redac] = sql_format_date($d[0], $d[1], $d[2], $h[0], $h[1]); } } if (count($set)) { $publie_avant = objet_test_si_publie($objet, $id_objet); include_spip('action/editer_objet'); objet_modifier($objet, $id_objet, $set); $publie_apres = objet_test_si_publie($objet, $id_objet); if ($publie_avant !== $publie_apres) { // on refuse ajax pour forcer le rechargement de la page ici // on refera traiter une 2eme fois, mais c'est sans consequence refuser_traiter_formulaire_ajax(); } } } if ($retour) { $res['redirect'] = $retour; } set_request('date_jour'); set_request('date_redac_jour'); set_request('date_heure'); set_request('date_redac_heure'); return $res; } /** * Récupérer annee, mois, jour sur la date saisie * * @param string $post * @param string $quoi * @return array|string Chaîne vide si date invalide, tableau (année, mois, jour) sinon. */ function dater_recuperer_date_saisie($post, $quoi = 'date') { if (!preg_match('#^(?:(?:([0-9]{1,2})[/-])?([0-9]{1,2})[/-])?([0-9]{4}|[0-9]{1,2})#', $post, $regs)) { return ''; } if ($quoi == 'date_redac') { if ($regs[3] <> '' and $regs[3] < 1001) { $regs[3] += 9000; } return array($regs[3], $regs[2], $regs[1]); } else { if ( checkdate(intval($regs[2]), intval($regs[1]), intval($regs[3])) and $t = mktime(0, 0, 0, $regs[2], $regs[1], $regs[3]) ) { return array(date('Y', $t), date('m', $t), date('d', $t)); } return ''; } } /** * Récupérer heures,minutes sur l'heure saisie * * @param string $post * @return array */ function dater_recuperer_heure_saisie($post) { if (!preg_match('#([0-9]{1,2})(?:[h:](?:([0-9]{1,2}))?)?#', $post, $regs)) { return ''; } if ($regs[1] > 23 or $regs[2] > 59) { return ''; } return array($regs[1], $regs[2]); } configurer_annonces.html000066600000013517152442521210011472 0ustar00<div class="formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}"> <h3 class='titrem'><img src="#CHEMIN_IMAGE{annonce-24.png}" class="cadre-icone" /><:info_envoi_email_automatique:>#AIDER{confmails}</h3> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [(#ENV{editable}) <p class="notice"><:info_hebergeur_desactiver_envoi_email:></p> <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <div class="editer-groupe"> #SET{name,suivi_edito}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label><:info_suivi_activite:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<p class="explication"><:info_facilite_suivi_activite:></p> <div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_non" value="non" [(#ENV{#GET{name}}|=={oui}|non)checked="checked"] onclick="$(this).blur();" onchange="if ($(this).prop('checked')) $('#suivi_complements').hide('fast');" /><label for="#GET{name}_non"><:bouton_radio_non_envoi_annonces_editoriales:></label> </div> <div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_oui" value="oui" [(#ENV{#GET{name}}|=={oui}|oui)checked="checked"] onclick="$(this).blur();" onchange="if ($(this).prop('checked')) $('#suivi_complements').show('fast');" /><label for="#GET{name}_oui"><:bouton_radio_envoi_annonces_adresse:></label> </div> <fieldset id="suivi_complements"[(#ENV{#GET{name}}|=={oui}|non)style='display:none;']> <div class="editer-groupe"> #SET{name,adresse_suivi}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer pleine_largeur editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:info_adresse:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<input type="text" class="text" name="#GET{name}" id="#GET{name}" value="#ENV*{#GET{name}}" /> </div> #SET{name,adresse_suivi_inscription}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer pleine_largeur editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> #SET{adresse_suivi,#ENV{adresse_suivi}|sinon{mailing@monsite.net}} <label for="#GET{name}"><:info_adresse_desinscription:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<p class="explication"><:info_config_suivi{adresse_suivi=#GET{adresse_suivi}}:></p> <input type="text" class="text" name="#GET{name}" id="#GET{name}" value="#ENV*{#GET{name}}" /> </div> </div> </fieldset> </div> #SET{name,quoi_de_neuf}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label><:info_annonce_nouveautes:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<p class="explication"><:info_non_envoi_annonce_dernieres_nouveautes:></p> <div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_non" value="non" [(#ENV{#GET{name}}|=={oui}|non)checked="checked"] onclick="$(this).blur();" onchange="if ($(this).prop('checked')) $('#neuf_complements').hide('fast');" /><label for="#GET{name}_non"><:info_non_envoi_liste_nouveautes:></label> </div> <div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_oui" value="oui" [(#ENV{#GET{name}}|=={oui}|oui)checked="checked"] onclick="$(this).blur();" onchange="if ($(this).prop('checked')) $('#neuf_complements').show('fast');" /><label for="#GET{name}_oui"><:bouton_radio_envoi_liste_nouveautes:></label> </div> <fieldset id="neuf_complements"[(#ENV{#GET{name}}|=={oui}|non)style='display:none;']> <div class="editer-groupe"> #SET{name,adresse_neuf}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer pleine_largeur editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:info_adresse:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<input type="text" class="text" name="#GET{name}" id="#GET{name}" value="#ENV*{#GET{name}}" /> </div> #SET{name,jours_neuf}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer pleine_largeur editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> #SET{adresse_suivi,#ENV{adresse_suivi}|sinon{mailing@monsite.net}} <label for="#GET{name}"><:info_tous_les:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<input type="text" name="#GET{name}" id="#GET{name}" value="#ENV*{#GET{name}}" /> <:info_jours:> <input type='submit' class="submit" name='envoi_now' id='envoi_now' value='<:info_envoyer_maintenant:>' /> </div> </div> </fieldset> </div> #SET{name,email_envoi}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:info_email_envoi:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<p class="explication"><:info_email_envoi_txt:></p> <input type="text" class="text" name="#GET{name}" id="#GET{name}" value="#ENV*{#GET{name}}" /> </div> </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons'><span class='image_loading'> </span><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p> </div></form> ] </div> configurer_identite.php000066600000004537152442521210011320 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) { return; } function formulaires_configurer_identite_charger_dist() { // travailler sur des meta fraiches include_spip('inc/meta'); lire_metas(); $valeurs = array(); foreach (array('nom_site', 'adresse_site', 'slogan_site', 'descriptif_site', 'email_webmaster') as $k) { $valeurs[$k] = isset($GLOBALS['meta'][$k]) ? $GLOBALS['meta'][$k] : ''; } return $valeurs; } function formulaires_configurer_identite_verifier_dist() { $erreurs = array(); // adresse_site est obligatoire mais rempli automatiquement si absent ! foreach (array('nom_site'/*,'adresse_site'*/) as $obli) { if (!_request($obli)) { $erreurs[$obli] = _T('info_obligatoire'); } } if ($email = _request('email_webmaster') and !email_valide($email)) { $erreurs['email_webmaster'] = _T('info_email_invalide'); } return $erreurs; } function formulaires_configurer_identite_traiter_dist() { include_spip('inc/config'); $adresse_site = isset($GLOBALS['meta']['adresse_site']) ? $GLOBALS['meta']['adresse_site'] : ''; if (_request('adresse_site') != $adresse_site) { refuser_traiter_formulaire_ajax(); } set_request('adresse_site', appliquer_adresse_site(_request('adresse_site'))); include_spip('inc/meta'); foreach (array('nom_site', 'slogan_site', 'descriptif_site', 'email_webmaster') as $k) { ecrire_meta($k, _request($k)); } include_spip('inc/texte_mini'); $reload = texte_script(couper(_request('nom_site'), 35)); $reload = "<script type='text/javascript'>if (window.jQuery) jQuery('#bando_identite .nom_site_spip .nom').html('$reload');</script>"; return array('message_ok' => _T('config_info_enregistree') . $reload, 'editable' => true); } configurer_langue.html000066600000002626152442521210011140 0ustar00<div class="formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}"> <h3 class='titrem'><img src="#CHEMIN_IMAGE{langue-24.png}" class="cadre-icone" /><:info_langue_principale:> : #ENV{_langue_site}</h3> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [(#ENV{editable}) <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <div class="editer-groupe"> <div class="explication"> <:texte_selection_langue_principale|inserer_attribut{class,spip}:> </div> #SET{name,changer_langue_site}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:info_langue_principale:></label> [<span class='erreur_message'>(#GET{erreurs})</span>] [<select name="changer_langue_site" id="changer_langue_site"> (#ENV*{_langues}) </select>] </div> </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons'><span class='image_loading'> </span><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p> </div></form> ] </div>menu_lang.html000066600000001003152442521210007373 0ustar00[<div class="formulaire_spip formulaire_menu_lang" id="formulaire_menu_lang"> <form method="post" action="#ENV{url}"><div> [(#ENV{url}|form_hidden)] <label for="#ENV{nom}"><:info_langues:></label> <select name="#ENV{nom}" id="#ENV{nom}" onchange="this.parentNode.parentNode.submit()"> (#INCLURE{fond=formulaires/inc-options-langues,name=#ENV*{name},default=#ENV*{default,''}}) </select> <noscript><p class="boutons"><input type="submit" class="submit" value=">>" /></p></noscript> </div></form> </div>]configurer_preferences_menus.php000066600000005434152442521210013220 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ /** * Formulaire de configuration des préférences auteurs dans l'espace privé * * Ces préférences sont stockées dans la clé `prefs` dans la session de l'auteur * en tant que tableau, ainsi que dans la colonne SQL `prefs` de spip_auteurs * sous forme sérialisée. * * @package SPIP\Core\Formulaires **/ include_spip('inc/bandeau'); include_spip('inc/filtres'); /** * Chargement du formulaire de préférence des menus d'un auteur dans l'espace privé * * @return array * Environnement du formulaire **/ function formulaires_configurer_preferences_menus_charger_dist() { // travailler sur des meta fraîches include_spip('inc/meta'); lire_metas(); $valeurs = array(); $valeurs['activer_menudev'] = table_valeur($GLOBALS['visiteur_session'], 'prefs/activer_menudev', 'non'); $valeurs['menus_favoris'] = obtenir_menus_favoris(); return $valeurs; } /** * Traitements du formulaire de préférence des menus d'un auteur dans l'espace privé * * @return array * Retours des traitements **/ function formulaires_configurer_preferences_menus_traiter_dist() { $activer_menudev = _request('activer_menudev'); $menus_favoris = _request('menus_favoris'); $menus_favoris = array_filter($menus_favoris); $menus_favoris = array_map('intval', $menus_favoris); if (_request('reset')) { $menus_favoris = array(); set_request('menus_favoris', null); } // si le menu dev change, ou les menus favoris, on recharge toute la page. if ( table_valeur($GLOBALS['visiteur_session'], 'prefs/activer_menudev') != $activer_menudev OR $menus_favoris != obtenir_menus_favoris() ) { refuser_traiter_formulaire_ajax(); $GLOBALS['visiteur_session']['prefs']['activer_menudev'] = $activer_menudev; $GLOBALS['visiteur_session']['prefs']['menus_favoris'] = $menus_favoris; if (intval($GLOBALS['visiteur_session']['id_auteur'])) { include_spip('action/editer_auteur'); $c = array('prefs' => serialize($GLOBALS['visiteur_session']['prefs'])); auteur_modifier($GLOBALS['visiteur_session']['id_auteur'], $c); } } return array('message_ok' => _T('config_info_enregistree'), 'editable' => true); } traduire.html000066600000007503152442521210007260 0ustar00<div class="formulaire_spip formulaire_#FORM" id="formulaire_#FORM-#ENV{_objet}-#ENV{_id_objet}"> <span class="image_loading"></span> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV**{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [(#ENV{editable}|ou{#ENV{_traduisible}}) <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE ] <div class="editer-groupe"> <div class="editer editer_changer_lang long_label obligatoire[(#ENV**{erreurs}|table_valeur{changer_lang}|oui)erreur]"> <label for="changer_lang">[(#ENV{_objet}|objet_info{texte_langue_objet}|_T)]</label>[ <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{changer_lang})</span> ]<span class="affiche"[(#ENV{_saisie_en_cours}|oui)style="display:none;"]> [(#ENV{langue}|?{[(#ENV{langue}|traduire_nom_langue)],[((#ENV{langue_parent}|traduire_nom_langue))]})] [(#ENV{langue_choisie}|=={oui}|non)([(#ENV{_objet}|objet_T{info_multi_herit})])] </span> [(#ENV{_langue}|ou{#ENV{_traduire}}|oui) <span class="toggle_box_link"[(#ENV{_saisie_en_cours}|oui)style="display:none;"]>[<a href="#" onclick="var f=jQuery(this).parents('form').eq(0); f.find('.editer-groupe .input').removeClass('none-js').show('fast'); f.find('span.toggle_box_link[(#ENV{_langue}|oui),span.affiche]').hide('fast'); f.find('.boutons,.new_trad,.editer_id_trad').show('fast'); f.find('#changer_lang').eq(0).focus();return false;" ><:bouton_changer:><i class="over"> \([(#ENV{_langue}|?{[(#ENV{_objet}|objet_info{texte_langue_objet}|_T)],#ENV{_objet}|objet_T{info_traductions}})]\)</i></a>]</span> [(#ENV{editable}|oui) [<span class="input[(#ENV{_saisie_en_cours}|non)none-js]"> <select name="changer_lang" id="changer_lang">(#INCLURE{fond=formulaires/inc-options-langues,name=changer_lang,default=#ENV**{_langue},herit=#ENV**{langue_parent}})</select> </span>]]] </div> [(#ENV{_traduire}|oui) [(#ENV{_lister_id_trad}|oui) <div class="fieldset voir_traductions"> <INCLURE{fond=#ENV**{_vue_traductions},id_trad=#ENV{_lister_id_trad},titre=#ENV{_objet}|objet_T{info_traductions},objet=#ENV{_objet},env,ajax} /> [(#ENV{editable}|ou{#ENV{_traduisible}}) <span class="input[(#ENV{_saisie_en_cours}|non)none-js]"> <input type="submit" class="submit supprimer_trad" name="supprimer_trad" value="[(#ENV{_objet}|objet_T{trad_delier}|attribut_html)]" /> </span> ] </div> ] [(#ENV{_lister_id_trad}|non) <div class="editer editer_id_trad long_label[(#ENV**{erreurs}|table_valeur{id_trad}|oui)erreur][(#ENV{_saisie_en_cours}|non)none-js]"> <label for="id_trad">[(#ENV{_objet}|objet_info{texte_definir_comme_traduction_objet}|_T)]</label>[ <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{id_trad})</span> ]<input type="text" class="text" name="id_trad" id="id_trad" value="[(#ENV{id_trad}|?{#ENV{id_trad}})]" onkeypress="$(this).parents('form').find('.boutons').slideDown();"/> </div> ] ] </div> [(#ENV{_traduire}|oui) [<div class="new_trad[(#ENV{_saisie_en_cours}|non)]"> (#URL_ECRIRE{#ENV{_objet}|objet_info{url_edit},new=oui&lier_trad=#ENV{_id_objet}}|parametre_url{#ENV{_objet}|=={rubrique}|?{id_parent,id_rubrique},#ENV{_id_parent}}|icone_horizontale{#ENV{_objet}|objet_T{trad_new},traduction,new}) </div>] ] [(#ENV{editable}|ou{#ENV{_traduisible}}) <p class="boutons[(#ENV{_saisie_en_cours}|non)none-js]"> <input type='submit' class='over' name='changer' value='<:bouton_changer:>' /> <input type='submit' class='submit' name='annuler' value='<:bouton_fermer:>' /> <input type="submit" class="submit" value="<:bouton_changer:>" /> </p> </div></form>] </div>rediriger_article.php000066600000004417152442521210010744 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) { return; } function formulaires_rediriger_article_charger_dist($id_article, $retour = '') { include_spip('inc/autoriser'); if (!autoriser('modifier', 'article', $id_article)) { return false; } $row = sql_fetsel('id_article,virtuel', 'spip_articles', 'id_article=' . intval($id_article)); if (!$row['id_article']) { return false; } include_spip('inc/lien'); $redirection = virtuel_redirige($row['virtuel']); if (!$redirection and $GLOBALS['meta']['articles_redirection'] != 'oui' ) { return false; } include_spip('inc/texte'); $valeurs = array( 'redirection' => $redirection, 'id' => $id_article, '_afficher_url' => ($redirection ? propre("[->$redirection]") : ''), ); return $valeurs; } function formulaires_rediriger_article_verifier_dist($id_article, $retour = '') { $erreurs = array(); if (($redirection = _request('redirection')) == $id_article || $redirection == 'art' . $id_article) { $erreurs['redirection'] = _T('info_redirection_boucle'); } return $erreurs; } function formulaires_rediriger_article_traiter_dist($id_article, $retour = '') { $url = preg_replace(',^\s*https?://$,i', '', rtrim(_request('redirection'))); if ($url) { $url = corriger_caracteres($url); } include_spip('action/editer_article'); articles_set($id_article, array('virtuel' => $url)); $js = _AJAX ? '<script type="text/javascript">if (window.ajaxReload) ajaxReload("wysiwyg");</script>' : ''; return array( 'message_ok' => ($url ? _T('info_redirection_activee') : _T('info_redirection_desactivee')) . $js, 'editable' => true ); } configurer_langage.php000066600000003633152442521210011105 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) { return; } function formulaires_configurer_langage_charger_dist() { include_spip('inc/lang'); $GLOBALS['meta']['langues_proposees'] = ''; init_langues(); $langues = explode(',', $GLOBALS['meta']['langues_proposees']); $valeurs = array( 'var_lang_ecrire' => $GLOBALS['spip_lang'], '_langues' => $langues ); return $valeurs; } function formulaires_configurer_langage_traiter_dist() { include_spip('action/converser'); action_converser_changer_langue(true); refuser_traiter_formulaire_ajax(); // on ne peut pas changer la langue pour tout le hit ici, // car CVT repasse derriere et retablit la langue avant l'appel a traiter() // il faut rediriger ! return array('message_ok' => _T('config_info_enregistree'), 'editable' => true, 'redirect' => self()); } function afficher_langues_choix($langues, $name, $id, $selected) { include_spip('inc/lang'); $ret = ''; sort($langues); foreach ($langues as $l) { $checked = ($l == $selected) ? ' checked=\'checked\'' : ''; $ret .= "<div class='choix'>" . "<input type='radio' name='$name' id='{$id}_$l' value='$l'$checked />" . "<label for='{$id}_$l'>" . traduire_nom_langue($l) . '</label>' . '</div>'; } return $ret; } instituer_objet.php000066600000013174152442521210010476 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ /** * Gestion du formulaire d'institution (changement de statut) d'un objet * * @package SPIP\Core\Formulaires **/ if (!defined('_ECRIRE_INC_VERSION')) { return; } include_spip('inc/editer'); include_spip('inc/autoriser'); include_spip('inc/puce_statut'); /** * Filtres les statuts utilisable selon les droits de publication * * @param array $desc * @param bool $publiable * @return array */ function lister_statuts_proposes($desc, $publiable = true) { if (!isset($desc['statut_textes_instituer'])) { return false; } $l = $desc['statut_textes_instituer']; if (!$publiable) { unset($l['publie']); unset($l['refuse']); } return $l; } /** * Chargement du formulaire instituer objet * * @uses formulaires_editer_objet_charger() * * @param string $objet * Type d'objet * @param int $id_objet * Identifiant de l'objet * @param string $retour * URL de redirection après le traitement * @param bool $editable * Indique si le statut est éditable ou non. * Dans tous les cas, si l'on n'a pas la permission de modifier l'objet, * cette option sera mise à false. * @return array|bool * Environnement du formulaire ou false si aucun affichage à faire. */ function formulaires_instituer_objet_charger_dist($objet, $id_objet, $retour = '', $editable = true) { $editable = ($editable ? true : false); $table = table_objet_sql($objet); $desc = lister_tables_objets_sql($table); if (!isset($desc['statut_textes_instituer'])) { return false; } if (!autoriser('modifier', $objet, $id_objet)) { $editable = false; } // charger le contenu de l'objet // dont son champ statut $v = formulaires_editer_objet_charger($objet, $id_objet, 0, 0, '', ''); $publiable = true; $statuts = lister_statuts_proposes($desc); // tester si on a le droit de publier, si un statut publie existe if (isset($statuts['publie'])) { if (!autoriser('instituer', $objet, $id_objet, null, array('statut' => 'publie'))) { if ($v['statut'] == 'publie') { $editable = false; } else { $publiable = false; } } } $statuts = lister_statuts_proposes($desc, $editable ? $publiable : true); if (count($statuts) == 1 and isset($statuts[$v['statut']])) { $editable = false; } $valeurs = array( 'editable' => $editable, 'statut' => $v['statut'], '_objet' => $objet, '_id_objet' => $id_objet, '_statuts' => $statuts, '_publiable' => $publiable, '_label' => isset($desc['texte_changer_statut']) ? $desc['texte_changer_statut'] : 'texte_article_statut', '_aide' => isset($desc['aide_changer_statut']) ? $desc['aide_changer_statut'] : '', '_hidden' => "<input type='hidden' name='statut_old' value='" . $v['statut'] . "' />", ); #if (!count($valeurs['statuts'])) return $valeurs; } /** * Vérifications du formulaire instituer objet * * @uses formulaires_editer_objet_charger() * * @param string $objet * Type d'objet * @param int $id_objet * Identifiant de l'objet * @param string $retour * URL de redirection après le traitement * @param bool $editable * Indique si le statut est éditable ou non. * @return array * Tableau des erreurs */ function formulaires_instituer_objet_verifier_dist($objet, $id_objet, $retour = '', $editable = true) { $erreurs = array(); // charger le contenu de l'objet // dont son champ statut $v = formulaires_editer_objet_charger($objet, $id_objet, 0, 0, '', ''); if ($v['statut'] !== _request('statut_old')) { $erreurs['statut'] = _T('instituer_erreur_statut_a_change'); } else { $table = table_objet_sql($objet); $desc = lister_tables_objets_sql($table); $publiable = true; if (isset($v['id_rubrique']) and !autoriser('publierdans', 'rubrique', $v['id_rubrique']) ) { $publiable = false; } $l = lister_statuts_proposes($desc, $publiable); $statut = _request('statut'); if (!isset($l[$statut]) or !autoriser('instituer', $objet, $id_objet, '', array('statut' => $statut)) ) { $erreurs['statut'] = _T('instituer_erreur_statut_non_autorise'); } } return $erreurs; } /** * Traitements du formulaire instituer objet * * @param string $objet * Type d'objet * @param int $id_objet * Identifiant de l'objet * @param string $retour * URL de redirection après le traitement * @param bool $editable * Indique si le statut est éditable ou non. * @return array * Retour des traitements */ function formulaires_instituer_objet_traiter_dist($objet, $id_objet, $retour = '', $editable = true) { $c = array('statut' => _request('statut')); // si on a envoye une 'date_posterieure', l'enregistrer // todo dans le HTML if ($d = _request('date_posterieure')) { $c['date'] = $d; } include_spip('action/editer_objet'); if ($err = objet_instituer($objet, $id_objet, $c)) { $res = array('message_erreur' => $err); } else { $res = array('message_ok' => _T('info_modification_enregistree')); if ($retour) { $res['redirect'] = $retour; } set_request('statut'); set_request('date_posterieure'); } return $res; } configurer_flux.html000066600000003424152442521210010640 0ustar00<div class="formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}"> <h3 class='titrem'><img src="#CHEMIN_IMAGE{rss-24.png}" class="cadre-icone" /><:ical_titre_rss:></h3> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [(#ENV{editable}) [(#SET{titre,<:icone_suivi_activite:>})] <p><:info_syndication_integrale_1{url=#URL_ECRIRE{synchro},titre=#GET{titre}}:></p> <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <div class="editer-groupe"> #SET{name,syndication_integrale}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer long_label editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:info_syndication_integrale_2:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_oui" value="oui" [(#ENV{#GET{name}}|=={oui}|oui)checked="checked"] /><label for="#GET{name}_oui"><:item_autoriser_syndication_integrale:></label> </div> <div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_non" value="non" [(#ENV{#GET{name}}|=={oui}|non)checked="checked"] /><label for="#GET{name}_non"><:item_non_autoriser_syndication_integrale:></label> </div> </div> </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons'><span class='image_loading'> </span><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p> </div></form> ] </div>configurer_transcodeur.html000066600000002615152442521210012214 0ustar00<div class="formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}"> <h3 class='titrem'><:info_jeu_caractere:></h3> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] <p><:texte_jeu_caractere:></p> [(#ENV{editable}) <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <div class="editer-groupe"> <div class="explication"> <p><:texte_jeu_caractere_3:></p> <div style='text-align: center'><b><tt>#ENV{charset}</tt></b></div> <p><:texte_jeu_caractere_4:></p> </div> #SET{name,charset}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:info_jeu_caractere:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<input type="text" class="text" name="#GET{name}" id="#GET{name}" value="#ENV*{#GET{name}}" /> </div> </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons'><span class='image_loading'> </span><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p> </div></form> ] </div>inc-instituer_auteur.html000066600000006000152442521210011612 0ustar00#SET{statuts_auteurs,#CONST{_STATUT_AUTEUR_RUBRIQUE}|explode{','}} <label for="statut"><:info_statut_auteur:></label> <select name="statut" id="statut" onchange="update_saisie_statut_auteur(this,this.options[this.selectedIndex].value);" > <BOUCLE_statuts(POUR){tableau #VAL{tous}|auteurs_lister_statuts{0}}{valeur!=nouveau}> <option value="#VALEUR"[(#STATUT|=={#VALEUR}|oui)selected="selected"]>[>(#VALEUR|=={5poubelle}|oui)][(#VALEUR|traduire_statut_auteur)]</option> </BOUCLE_statuts> [(#STATUT|=={nouveau}) <option value="#STATUT" selected="selected">[(#STATUT|traduire_statut_auteur)]</option> ] </select> [(#AUTORISER{modifier,auteur,#ID_AUTEUR,'',#ARRAY{webmestre,'?'}}|oui) <div class="choix choix-webmestre[(#STATUT|=={0minirezo}|non)none-js]"> <input type="checkbox" name="webmestre" id="webmestre" value="oui"[(#ENV{webmestre}|=={oui}|oui)checked="checked"]/> <label for="webmestre"><:info_admin_statuer_webmestre:></label> <input type='hidden' name='saisie_webmestre' value='1' /> </div> ] <div class="rubriques_restreintes[(#STATUT|in_array{#GET{statuts_auteurs}}|non)none-js]"> [(#SET{label,<:info_restreindre_rubrique:>})] <B_restreint> <p><:info_auteur_gere_rubriques:></p> <ul id='liste_rubriques_restreintes' class="item_picked"> <BOUCLE_restreint(RUBRIQUES){id_auteur}{statut==.*}{si #ENV{statut}|in_array{#GET{statuts_auteurs}}}> <li class="rubrique"><input type='checkbox' class="checkbox" name='restreintes[]' checked="checked" value='#ID_RUBRIQUE' /> <label><a href="[(#ID_RUBRIQUE|generer_url_entite{rubrique})]" target="_blank">[(#TITRE|sinon{<:info_sans_titre:>})]</a></label> [<a href="#" onclick="jQuery(this).parent().remove();return false;" class="removelink">(#CHEMIN_IMAGE{supprimer-12.png}|balise_img)</a>] </li> </BOUCLE_restreint> </ul> <input type='hidden' name='restreintes[]' value='0' /> [(#SET{label,<:info_ajouter_rubrique:>})] </B_restreint> [(#STATUT|=={0minirezo}|oui) <p><:info_auteur_gere_toutes_rubriques:></p> ] <ul id='liste_rubriques_restreintes' class="item_picked"></ul> <//B_restreint> <div class="nettoyeur"></div> <div class="instituer_auteur choix"> [(#AUTORISER{modifier,auteur,#ID_AUTEUR,'',#ARRAY{restreintes,1}}|oui) [(#ID_AUTEUR**|choisir_rubriques_admin_restreint{#GET{label},'#liste_rubriques_restreintes',#CHEMIN_IMAGE{supprimer-12.png}|balise_img})] ] </div> </div> [(#REM) Masquer/afficher le selecteur de rubriques restreintes, ou le choix webmestre ] <script type="text/javascript">/*<![CDATA[*/ function update_saisie_statut_auteur(node,value){ var statut_auteur_rubrique="[(#GET{statuts_auteurs}|implode{|})]"; var reg = new RegExp("^("+statut_auteur_rubrique+")$"); if (value.match(reg)) jQuery(node).siblings('.rubriques_restreintes:hidden').slideDown(); else jQuery(node).siblings('.rubriques_restreintes:visible').slideUp(); if (value=='0minirezo') jQuery(node).next('.choix-webmestre:hidden').slideDown(); else jQuery(node).next('.choix-webmestre:visible').slideUp(); } /*]]>*/</script>editer_article.html000066600000013036152442521210010416 0ustar00<div class="formulaire_spip formulaire_editer formulaire_editer_article formulaire_editer_article-#ENV{id_article,nouveau}"> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV**{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [(#ENV{editable}) <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <input type='hidden' name='id_article' value='#ENV{id_article}' /> <div class="editer-groupe"> [(#ENV**{config}|table_valeur{articles_surtitre}|=={non}|?{#ENV**{surtitre,''},' '}|oui) <div class="editer editer_surtitre[ (#ENV**{erreurs}|table_valeur{surtitre}|oui)erreur]"> <label for="surtitre"><:texte_sur_titre:><em class="aide">#AIDER{surtitre}</em></label>[ <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{surtitre})</span> ]<input type='text' class='text' name='surtitre' id='surtitre'[ lang='(#LANGUE)'] value="[(#ENV**{surtitre})]" /> </div>] <div class="editer editer_titre obligatoire[ (#ENV**{erreurs}|table_valeur{titre}|oui)erreur]"> <label for="titre"><:info_titre:><em class="aide">#AIDER{titre}</em></label>[ <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{titre})</span> ]<input type='text' class='text' name='titre' id='titre'[ lang='(#LANGUE)'] value="[(#ENV**{titre,''})]" placeholder="<:info_nouvel_article|attribut_html:>" /> </div> [(#ENV**{config}|table_valeur{articles_soustitre}|=={non}|?{#ENV**{soustitre,''},' '}|oui) <div class="editer editer_soustitre[ (#ENV**{erreurs}|table_valeur{soustitre}|oui)erreur]"> <label for="soustitre"><:texte_sous_titre:><em class="aide">#AIDER{soustitre}</em></label>[ <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{soustitre})</span> ]<input type='text' class='text' name='soustitre' id='soustitre'[ lang='(#LANGUE)'] value="[(#ENV**{soustitre})]" /> </div>] [<div class="editer editer_parent[ (#ENV**{erreurs}|table_valeur{id_parent}|oui)erreur]"> <label for="id_parent"><:titre_cadre_interieur_rubrique:><em class="aide">#AIDER{id_parent}</em></label>[ <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{id_parent})</span> ] (#VAL|chercher_rubrique{#ENV{id_article},#ENV{id_parent},'article',#ENV{id_secteur},#ENV**{config}|table_valeur{restreint},0,form_simple}) </div>] [(#ENV**{config}|table_valeur{articles_descriptif}|=={non}|?{#ENV**{descriptif,''},' '}|oui) <div class="editer editer_descriptif[ (#ENV**{erreurs}|table_valeur{descriptif}|oui)erreur]"> <label for="descriptif"><:texte_descriptif_rapide:><em class="aide">#AIDER{descriptif}</em></label>[ <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{descriptif})</span> ]<textarea name='descriptif' id='descriptif'[ lang='(#LANGUE)'] rows='2' cols='40'>[(#ENV**{descriptif})]</textarea> </div>] [(#ENV**{config}|table_valeur{articles_chapeau}|=={non}|?{#ENV**{chapo,''},' '}|oui) <div class="editer editer_chapo[ (#ENV**{erreurs}|table_valeur{chapo}|oui)erreur]"> <label for="chapo"><:info_chapeau:><em class="aide">#AIDER{chapo}</em></label>[ <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{chapo})</span> ]<textarea name='chapo' id='chapo'[ lang='(#LANGUE)'][ rows='(#ENV**{config}|table_valeur{lignes})'] cols='40'>[(#ENV**{chapo})]</textarea> </div>] [(#ENV**{config}|table_valeur{articles_urlref}|=={non}|?{#ENV**{url_site,#ENV**{nom_site,''}},' '}|oui) <div class="editer editer_liens_sites fieldset"> <fieldset> <h3 class="legend"><:entree_liens_sites:></h3> <div class="editer-groupe"> <div class="editer editer_nom_site[ (#ENV**{erreurs}|table_valeur{nom_site}|oui)erreur]"> <label for="nom_site"><:info_titre:></label>[ <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{nom_site})</span> ]<input type='text' class='text' name='nom_site' id='nom_site'[ lang='(#LANGUE)'] value="[(#ENV**{nom_site})]" /> </div> <div class="editer editer_url_site[ (#ENV**{erreurs}|table_valeur{url_site}|oui)erreur]"> <label for="url_site"><:info_url:></label>[ <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{url_site})</span> ]<input type='text' class='text' name='url_site' id='url_site' value="[(#ENV**{url_site})]" /> </div> </div> </fieldset> </div>] [(#ENV**{config}|table_valeur{articles_texte}|=={non}|?{#ENV**{texte,''},' '}|oui) <div class="editer editer_texte obligatoire[ (#ENV**{erreurs}|table_valeur{texte}|oui)erreur]"> <label for="text_area"><:info_texte:><em class="aide">#AIDER{text_area}</em></label>[ <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{texte})</span> ][(#ENV**{_texte_trop_long,''})] <textarea name='texte' id='text_area'[ lang='(#LANGUE)'] rows='[(#ENV**{config}|table_valeur{lignes}|plus{2})]' cols='40'>[(#ENV**{texte})]</textarea> </div>] [(#ENV**{config}|table_valeur{articles_ps}|=={non}|?{#ENV**{ps,''},' '}|oui) <div class="editer editer_ps[ (#ENV**{erreurs}|table_valeur{ps}|oui)erreur]"> <label for="ps"><:info_post_scriptum:></label>[ <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{ps})</span> ]<textarea name='ps' id='ps'[ lang='(#LANGUE)'] rows='5' cols='40'>[(#ENV**{ps})]</textarea> </div>] </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons'><input type='submit' name="save" class='submit' value='<:bouton_enregistrer:>' /></p> </div></form> ] </div> editer_logo.php000066600000021054152442521210007555 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ /** * Gestion du formulaire d'édition de logo * * Ce formulaire ajoute, modifie ou supprime des logos sur les objets de SPIP. * * - En dehors d'une boucle, ce formulaire modifie le logo du site. * - Dans une boucle, il modifie le logo de la table selectionnée. * * Pensez juste que l'appel de `#LOGO_{TYPE}` s'appuie sur le nom de la clé primaire et non sur le * nom de l'objet réel. Par exemple on ecrira `#LOGO_GROUPE` (et non `#LOGO_GROUPEMOTS`) pour afficher * un logo issu du formulaire mis dans une boucle `GROUPES_MOTS` * * - il est possible de lui passer les paramètres objet et id : `#FORMULAIRE_EDITER_LOGO{article,1}` * - il est possible de spécifier une URL de redirection apres traitement : * `#FORMULAIRE_EDITER_LOGO{article,1,#URL_ARTICLE}` * * @package SPIP\Core\Formulaires **/ if (!defined('_ECRIRE_INC_VERSION')) { return; } global $logo_libelles; // utilise pour le logo du site, donc doit rester ici $logo_libelles['site'] = _T('logo_site'); $logo_libelles['racine'] = _T('logo_standard_rubrique'); /** * Chargement du formulaire d'édition de logo * * @param string $objet Objet SPIP auquel sera lie le document (ex. article) * @param int $id_objet Identifiant de l'objet * @param string $retour Url de redirection apres traitement * @param array $options Tableau d'option (exemple : image_reduire => 50) * @return array Variables d'environnement pour le fond */ function formulaires_editer_logo_charger_dist($objet, $id_objet, $retour = '', $options = array()) { // pas dans une boucle ? formulaire pour le logo du site // dans ce cas, il faut chercher un 'siteon0.ext' if (!$objet) { $objet = 'site'; } $objet = objet_type($objet); $_id_objet = id_table_objet($objet); if (!is_array($options)) { $options = unserialize($options); } if (!isset($options['titre'])) { $balise_img = chercher_filtre('balise_img'); $img = $balise_img(chemin_image('image-24.png'),'', 'cadre-icone'); $libelles = pipeline('libeller_logo', $GLOBALS['logo_libelles']); $libelle = (($id_objet or $objet != 'rubrique') ? $objet : 'racine'); if (isset($libelles[$libelle])) { $libelle = $libelles[$libelle]; } elseif ($libelle = objet_info($objet, 'texte_logo_objet')) { $libelle = _T($libelle); } else { $libelle = _L('Logo'); } switch ($objet) { case 'article': $libelle .= ' ' . aider('logoart'); break; case 'breve': $libelle .= ' ' . aider('breveslogo'); break; case 'rubrique': $libelle .= ' ' . aider('rublogo'); break; default: break; } $options['titre'] = $img . $libelle; } if (!isset($options['editable'])) { include_spip('inc/autoriser'); $options['editable'] = autoriser('iconifier', $objet, $id_objet); } $res = array( 'editable' => ($GLOBALS['meta']['activer_logos'] == 'oui' ? ' ' : '') && (!isset($options['editable']) or $options['editable']), 'logo_survol' => ($GLOBALS['meta']['activer_logos_survol'] == 'oui' ? ' ' : ''), 'objet' => $objet, 'id_objet' => $id_objet, '_options' => $options, '_show_upload_off' => '', ); // rechercher le logo de l'objet // la fonction prend un parametre '_id_objet' etrange : // le nom de la cle primaire (et non le nom de la table) // ou directement le nom du raccourcis a chercher $chercher_logo = charger_fonction('chercher_logo', 'inc'); $etats = $res['logo_survol'] ? array('on', 'off') : array('on'); foreach ($etats as $etat) { $logo = $chercher_logo($id_objet, $_id_objet, $etat); if ($logo) { $res['logo_' . $etat] = $logo[0]; } } // pas de logo_on -> pas de formulaire pour le survol if (!isset($res['logo_on'])) { $res['logo_survol'] = ''; } elseif (!isset($res['logo_off']) and _request('logo_up')) { $res['_show_upload_off'] = ' '; } // si le logo n'est pas editable et qu'il n'y en a pas, on affiche pas du tout le formulaire if (!$res['editable'] and !isset($res['logo_off']) and !isset($res['logo_on']) ) { return false; } return $res; } /** * Identifier le formulaire en faisant abstraction des parametres qui * ne representent pas l'objet edite * * @param string $objet Objet SPIP auquel sera lie le document (ex. article) * @param int $id_objet Identifiant de l'objet * @param string $retour Url de redirection apres traitement * @param array $options Tableau d'option (exemple : image_reduire => 50) * @return string Hash du formulaire */ function formulaires_editer_logo_identifier_dist($objet, $id_objet, $retour = '', $options = array()) { return serialize(array($objet, $id_objet)); } /** * Verification avant traitement du formulaire d'édition de logo * * On verifie que l'upload s'est bien passe et * que le document recu est une image (d'apres son extension) * * @param string $objet Objet SPIP auquel sera lie le document (ex. article) * @param int $id_objet Identifiant de l'objet * @param string $retour Url de redirection apres traitement * @param array $options Tableau d'option (exemple : image_reduire => 50) * @return array Erreurs du formulaire */ function formulaires_editer_logo_verifier_dist($objet, $id_objet, $retour = '', $options = array()) { $erreurs = array(); // verifier les extensions $sources = formulaire_editer_logo_get_sources(); foreach ($sources as $etat => $file) { // seulement si une reception correcte a eu lieu if ($file and $file['error'] == 0) { if (!in_array( strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)), array('jpg', 'png', 'gif', 'jpeg') )) { $erreurs['logo_' . $etat] = _L('Extension non reconnue'); } } } return $erreurs; } /** * Traitement de l'upload d'un logo * * Il est affecte au site si la balise n'est pas dans une boucle, * sinon a l'objet concerne par la boucle ou indiquee par les parametres d'appel * * @param string $objet Objet SPIP auquel sera lie le document (ex. article) * @param int $id_objet Identifiant de l'objet * @param string $retour Url de redirection apres traitement * @param array $options Tableau d'option (exemple : image_reduire => 50) * @return array Retour des traitements */ function formulaires_editer_logo_traiter_dist($objet, $id_objet, $retour = '', $options = array()) { $res = array('editable' => ' '); // pas dans une boucle ? formulaire pour le logo du site // dans ce cas, il faut chercher un 'siteon0.ext' if (!$objet) { $objet = 'site'; } include_spip('action/editer_logo'); // effectuer la suppression si demandee d'un logo $on = _request('supprimer_logo_on'); if ($on or _request('supprimer_logo_off')) { logo_supprimer($objet, $id_objet, $on ? 'on' : 'off'); $res['message_ok'] = ''; // pas besoin de message : la validation est visuelle set_request('logo_up', ' '); } // sinon supprimer ancien logo puis copier le nouveau else { $sources = formulaire_editer_logo_get_sources(); foreach ($sources as $etat => $file) { if ($file and $file['error'] == 0) { if ($err = logo_modifier($objet, $id_objet, $etat, $file)) { $res['message_erreur'] = $err; } else { $res['message_ok'] = ''; } // pas besoin de message : la validation est visuelle set_request('logo_up', ' '); } } } // Invalider les caches de l'objet include_spip('inc/invalideur'); suivre_invalideur("id='$objet/$id_objet'"); if ($retour) { $res['redirect'] = $retour; } return $res; } /** * Extraction des sources des fichiers uploadés correspondant aux 2 logos (normal + survol) * si leur upload s'est bien passé * * @return array * Sources des fichiers dans les clés `on` ou `off` */ function formulaire_editer_logo_get_sources() { if (!$_FILES) { $_FILES = isset($GLOBALS['HTTP_POST_FILES']) ? $GLOBALS['HTTP_POST_FILES'] : array(); } if (!is_array($_FILES)) { return array(); } $sources = array(); foreach (array('on', 'off') as $etat) { if (isset($_FILES['logo_' . $etat]) and $_FILES['logo_' . $etat]['error'] == 0) { $sources[$etat] = $_FILES['logo_' . $etat]; } } return $sources; } configurer_preferences.php000066600000007607152442521210012015 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ /** * Formulaire de configuration des préférences auteurs dans l'espace privé * * Ces préférences sont stockées dans la clé `prefs` dans la session de l'auteur * en tant que tableau, ainsi que dans la colonne SQL `prefs` de spip_auteurs * sous forme sérialisée. * * @package SPIP\Core\Formulaires **/ if (!defined('_ECRIRE_INC_VERSION')) { return; } /** * Chargement du formulaire de préférences d'un auteur dans l'espace privé * * @return array * Environnement du formulaire **/ function formulaires_configurer_preferences_charger_dist() { // travailler sur des meta fraiches include_spip('inc/meta'); lire_metas(); $valeurs = array(); $valeurs['display_navigation'] = isset($GLOBALS['visiteur_session']['prefs']['display_navigation']) ? $GLOBALS['visiteur_session']['prefs']['display_navigation'] : 'navigation_avec_icones'; $valeurs['display_outils'] = isset($GLOBALS['visiteur_session']['prefs']['display_outils']) ? $GLOBALS['visiteur_session']['prefs']['display_outils'] : 'oui'; $valeurs['display'] = (isset($GLOBALS['visiteur_session']['prefs']['display']) and $GLOBALS['visiteur_session']['prefs']['display'] > 0) ? $GLOBALS['visiteur_session']['prefs']['display'] : 2; $valeurs['couleur'] = (isset($GLOBALS['visiteur_session']['prefs']['couleur']) and $GLOBALS['visiteur_session']['prefs']['couleur'] > 0) ? $GLOBALS['visiteur_session']['prefs']['couleur'] : 1; $valeurs['spip_ecran'] = $GLOBALS['spip_ecran']; $couleurs = charger_fonction('couleurs', 'inc'); $les_couleurs = $couleurs(array(), true); foreach ($les_couleurs as $k => $c) { $valeurs['_couleurs_url'][$k] = generer_url_public('style_prive.css', 'ltr=' . $GLOBALS['spip_lang_left'] . '&' . $couleurs($k)); $valeurs['couleurs'][$k] = $c; } $valeurs['imessage'] = $GLOBALS['visiteur_session']['imessage']; return $valeurs; } /** * Traitements du formulaire de préférences d'un auteur dans l'espace privé * * @return array * Retours des traitements **/ function formulaires_configurer_preferences_traiter_dist() { if ($couleur = _request('couleur')) { $GLOBALS['visiteur_session']['prefs']['couleur'] = $couleur; } if ($display = _request('display')) { $GLOBALS['visiteur_session']['prefs']['display'] = $display; } if ($display_navigation = _request('display_navigation')) { $GLOBALS['visiteur_session']['prefs']['display_navigation'] = $display_navigation; } if (!is_null($display_outils = _request('display_outils'))) { $GLOBALS['visiteur_session']['prefs']['display_outils'] = $display_outils; } if (intval($GLOBALS['visiteur_session']['id_auteur'])) { include_spip('action/editer_auteur'); $c = array('prefs' => serialize($GLOBALS['visiteur_session']['prefs'])); if (_request('imessage')) { $c['imessage'] = _request('imessage'); } auteur_modifier($GLOBALS['visiteur_session']['id_auteur'], $c); } if ($spip_ecran = _request('spip_ecran')) { // Poser un cookie, // car ce reglage depend plus du navigateur que de l'utilisateur $GLOBALS['spip_ecran'] = $spip_ecran; include_spip('inc/cookie'); spip_setcookie('spip_ecran', $_COOKIE['spip_ecran'] = $spip_ecran, time() + 365 * 24 * 3600); } return array('message_ok' => _T('config_info_enregistree'), 'editable' => true); } dater.html000066600000010550152442521210006534 0ustar00<div class="formulaire_spip formulaire_#FORM formulaire_#FORM-#ENV{objet}-#ENV{id,nouveau}[ (#ENV{_class})]"> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [(#ENV{editable}) <form method='post' action='#ENV{action}'><div> <input type='submit' class='over' name='changer' value='<:bouton_changer:>' /> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE ] <div class="editer-groupe"> #SET{name,date}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer long_label editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}">[(#ENV{_label_date})] #AIDER{artdate}</label>[ <span class='erreur_message'>(#GET{erreurs})</span> ] <span class="affiche"[(#ENV{_saisie_en_cours}|et{#ENV{_editer_date}}|oui)style="display:none;"]>[(#ENV*{afficher_#GET{name}}|affdate)]</span> <BOUCLE_editable(CONDITION){si #ENV{editable}}> <span class="toggle_box_link"[(#ENV{_saisie_en_cours}|oui)style="display:none;"]>[<button class="link" name="_saisie_en_cours" value="X" onclick="var f=jQuery(this).parents('form').eq(0);f.find('.editer .input.editable').show('fast').siblings('span').add(jQuery(this).parent()).hide('fast');f.find('.boutons').show('fast');f.find('input.date').eq(0).focus();[(#ENV{sans_redac}|oui)f.find('.editer_date_redac label\[for=date_redac\]').hide();]return false;" ><:bouton_changer:><i class="over"> \(#ENV{_label_date}\)</i></button>]</span> <span class="input[(#ENV{_editer_date}|oui)editable]"[(#ENV{_saisie_en_cours}|et{#ENV{_editer_date}}|non)style="display:none;"]> <input type="text" class="text date" name="#GET{name}_jour" id="#GET{name}_jour" value="#ENV{#GET{name}_jour}" size="10"/> <input type="text" class="text heure time" name="#GET{name}_heure" id="#GET{name}_heure" value="#ENV{#GET{name}_heure}" size="5"/> </span> </BOUCLE_editable> </div> <BOUCLE_editer_date_anterieure(CONDITION){si #ENV{_editer_date_anterieure}|oui}> #SET{name,date_redac}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer long_label editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}">[(#ENV{_label_date_redac,<:texte_date_publication_anterieure:>})] #AIDER{artdate_redac}</label>[ <span class='erreur_message'>(#GET{erreurs})</span> ] <span class="affiche"[(#ENV{_saisie_en_cours}|oui)style="display:none;"]>[(#ENV*{afficher_#GET{name}}|affdate|sinon{<:jour_non_connu_nc:>})]</span> <BOUCLE_editable1(CONDITION){si #ENV{editable}}> <span class="input editable"[(#ENV{_saisie_en_cours}|non)style="display:none;"]> <span class="saisie_redac"[(#ENV{sans_redac}|oui)style="display:none;"]> <input type="text" class="text date" name="#GET{name}_jour" id="#GET{name}_jour" value="#ENV{#GET{name}_jour}" size="10"/> <input type="text" class="text heure time" name="#GET{name}_heure" id="#GET{name}_heure" value="#ENV{#GET{name}_heure}" size="5"/> <br /> </span> <span class="choix"> <input type="checkbox" name="sans_redac" value="1"[(#ENV{sans_redac}|oui)checked="checked"] id="sans_redac" onclick="jQuery(this).blur();" onchange="if (jQuery(this).prop('checked')) {jQuery(this).parent().siblings().hide('fast');$(this).parents('form').find('.editer_date_redac label[for=date_redac]').hide(); } else { jQuery(this).parent().siblings().show('fast'); ;$(this).parents('form').find('.editer_date_redac label[for=date_redac]').show('fast'); }" /><label for="sans_redac">[(#ENV{_texte_sans_date_redac,<:texte_date_publication_anterieure_nonaffichee:>})]</label> </span> </BOUCLE_editable1> </span> </div> </BOUCLE_editer_date_anterieure> </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> [(#ENV{editable}) <p class='boutons'[(#ENV{_saisie_en_cours}|non)style="display:none;"]> <span class='image_loading'> </span> <input type='submit' class='submit' name='annuler' value='<:bouton_annuler:>' /> <input type='submit' class='submit' name='changer' value='<:bouton_changer:>' /> </p> </div></form> ] </div> <INCLURE{fond=formulaires/dateur/inc-dateur,heure_pas} /> editer_liens.php000066600000034727152442521210007742 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ /** * Gestion du formulaire d'édition de liens * * @package SPIP\Core\Formulaires **/ if (!defined('_ECRIRE_INC_VERSION')) { return; } /** * Retrouve la source et l'objet de la liaison * * À partir des 3 premiers paramètres transmis au formulaire, * la fonction retrouve : * - l'objet dont on utilise sa table de liaison (table_source) * - l'objet et id_objet sur qui on lie des éléments (objet, id_objet) * - l'objet que l'on veut lier dessus (objet_lien) * * @param string $a * @param string|int $b * @param int|string $c * @return array * ($table_source,$objet,$id_objet,$objet_lien) */ function determine_source_lien_objet($a, $b, $c) { $table_source = $objet_lien = $objet = $id_objet = null; // auteurs, article, 23 : // associer des auteurs à l'article 23, sur la table pivot spip_auteurs_liens if (is_numeric($c) and !is_numeric($b)) { $table_source = table_objet($a); $objet_lien = objet_type($a); $objet = objet_type($b); $id_objet = $c; } // article, 23, auteurs // associer des auteurs à l'article 23, sur la table pivot spip_articles_liens if (is_numeric($b) and !is_numeric($c)) { $table_source = table_objet($c); $objet_lien = objet_type($a); $objet = objet_type($a); $id_objet = $b; } return array($table_source, $objet, $id_objet, $objet_lien); } /** * Chargement du formulaire d'édition de liens * * #FORMULAIRE_EDITER_LIENS{auteurs,article,23} * pour associer des auteurs à l'article 23, sur la table pivot spip_auteurs_liens * #FORMULAIRE_EDITER_LIENS{article,23,auteurs} * pour associer des auteurs à l'article 23, sur la table pivot spip_articles_liens * #FORMULAIRE_EDITER_LIENS{articles,auteur,12} * pour associer des articles à l'auteur 12, sur la table pivot spip_articles_liens * #FORMULAIRE_EDITER_LIENS{auteur,12,articles} * pour associer des articles à l'auteur 12, sur la table pivot spip_auteurs_liens * * @param string $a * @param string|int $b * @param int|string $c * @param array|bool $options * - Si array, tableau d'options * - Si bool : valeur de l'option 'editable' uniquement * * @return array */ function formulaires_editer_liens_charger_dist($a, $b, $c, $options = array()) { // compat avec ancienne signature ou le 4eme argument est $editable if (!is_array($options)) { $options = array('editable' => $options); } elseif (!isset($options['editable'])) { $options['editable'] = true; } $editable = $options['editable']; list($table_source, $objet, $id_objet, $objet_lien) = determine_source_lien_objet($a, $b, $c); if (!$table_source or !$objet or !$objet_lien or !$id_objet) { return false; } $objet_source = objet_type($table_source); $table_sql_source = table_objet_sql($objet_source); // verifier existence de la table xxx_liens include_spip('action/editer_liens'); if (!objet_associable($objet_lien)) { return false; } // L'éditabilité :) est définie par un test permanent (par exemple "associermots") ET le 4ème argument include_spip('inc/autoriser'); $editable = ($editable and autoriser('associer' . $table_source, $objet, $id_objet) and autoriser('modifier', $objet, $id_objet)); if (!$editable and !count(objet_trouver_liens( array($objet_lien => '*'), array(($objet_lien == $objet_source ? $objet : $objet_source) => $id_objet) ))) { return false; } // squelettes de vue et de d'association // ils sont différents si des rôles sont définis. $skel_vue = $table_source . '_lies'; $skel_ajout = $table_source . '_associer'; // description des roles include_spip('inc/roles'); if ($roles = roles_presents($objet_source, $objet)) { // on demande de nouveaux squelettes en conséquence $skel_vue = $table_source . '_roles_lies'; $skel_ajout = $table_source . '_roles_associer'; } $valeurs = array( 'id' => "$table_source-$objet-$id_objet-$objet_lien", // identifiant unique pour les id du form '_vue_liee' => $skel_vue, '_vue_ajout' => $skel_ajout, '_objet_lien' => $objet_lien, 'id_lien_ajoute' => _request('id_lien_ajoute'), 'objet' => $objet, 'id_objet' => $id_objet, 'objet_source' => $objet_source, 'table_source' => $table_source, 'recherche' => '', 'visible' => 0, 'ajouter_lien' => '', 'supprimer_lien' => '', 'qualifier_lien' => '', '_roles' => $roles, # description des roles '_oups' => _request('_oups'), 'editable' => $editable, ); // les options non definies dans $valeurs sont passees telles quelles au formulaire html $valeurs = array_merge($options, $valeurs); return $valeurs; } /** * Traiter le post des informations d'édition de liens * * Les formulaires peuvent poster dans quatre variables * - ajouter_lien et supprimer_lien * - remplacer_lien * - qualifier_lien * * Les deux premières peuvent être de trois formes différentes : * ajouter_lien[]="objet1-id1-objet2-id2" * ajouter_lien[objet1-id1-objet2-id2]="nimportequoi" * ajouter_lien['clenonnumerique']="objet1-id1-objet2-id2" * Dans ce dernier cas, la valeur ne sera prise en compte * que si _request('clenonnumerique') est vrai (submit associé a l'input) * * remplacer_lien doit être de la forme * remplacer_lien[objet1-id1-objet2-id2]="objet3-id3-objet2-id2" * ou objet1-id1 est celui qu'on enleve et objet3-id3 celui qu'on ajoute * * qualifier_lien doit être de la forme, et sert en complément de ajouter_lien * qualifier_lien[objet1-id1-objet2-id2][role] = array("role1", "autre_role") * qualifier_lien[objet1-id1-objet2-id2][valeur] = array("truc", "chose") * produira 2 liens chacun avec array("role"=>"role1","valeur"=>"truc") et array("role"=>"autre_role","valeur"=>"chose") * * @param string $a * @param string|int $b * @param int|string $c * @param array|bool $options * - Si array, tableau d'options * - Si bool : valeur de l'option 'editable' uniquement * * @return array */ function formulaires_editer_liens_traiter_dist($a, $b, $c, $options = array()) { // compat avec ancienne signature ou le 4eme argument est $editable if (!is_array($options)) { $options = array('editable' => $options); } elseif (!isset($options['editable'])) { $options['editable'] = true; } $editable = $options['editable']; $res = array('editable' => $editable ? true : false); list($table_source, $objet, $id_objet, $objet_lien) = determine_source_lien_objet($a, $b, $c); if (!$table_source or !$objet or !$objet_lien) { return $res; } if (_request('tout_voir')) { set_request('recherche', ''); } include_spip('inc/autoriser'); if (autoriser('modifier', $objet, $id_objet)) { // annuler les suppressions du coup d'avant ! if (_request('annuler_oups') and $oups = _request('_oups') and $oups = unserialize($oups) ) { if ($oups_objets = charger_fonction("editer_liens_oups_{$table_source}_{$objet}_{$objet_lien}", 'action', true)) { $oups_objets($oups); } else { $objet_source = objet_type($table_source); include_spip('action/editer_liens'); foreach ($oups as $oup) { if ($objet_lien == $objet_source) { objet_associer(array($objet_source => $oup[$objet_source]), array($objet => $oup[$objet]), $oup); } else { objet_associer(array($objet => $oup[$objet]), array($objet_source => $oup[$objet_source]), $oup); } } } # oups ne persiste que pour la derniere action, si suppression set_request('_oups'); } $supprimer = _request('supprimer_lien'); $ajouter = _request('ajouter_lien'); // il est possible de preciser dans une seule variable un remplacement : // remplacer_lien[old][new] if ($remplacer = _request('remplacer_lien')) { foreach ($remplacer as $k => $v) { if ($old = lien_verifier_action($k, '')) { foreach (is_array($v) ? $v : array($v) as $kn => $vn) { if ($new = lien_verifier_action($kn, $vn)) { $supprimer[$old] = 'x'; $ajouter[$new] = '+'; } } } } } if ($supprimer) { if ($supprimer_objets = charger_fonction( "editer_liens_supprimer_{$table_source}_{$objet}_{$objet_lien}", 'action', true )) { $oups = $supprimer_objets($supprimer); } else { include_spip('action/editer_liens'); $oups = array(); foreach ($supprimer as $k => $v) { if ($lien = lien_verifier_action($k, $v)) { $lien = explode('-', $lien); list($objet_source, $ids, $objet_lie, $idl, $role) = $lien; // appliquer une condition sur le rôle si défini ('*' pour tous les roles) $cond = (!is_null($role) ? array('role' => $role) : array()); if ($objet_lien == $objet_source) { $oups = array_merge( $oups, objet_trouver_liens(array($objet_source => $ids), array($objet_lie => $idl), $cond) ); objet_dissocier(array($objet_source => $ids), array($objet_lie => $idl), $cond); } else { $oups = array_merge( $oups, objet_trouver_liens(array($objet_lie => $idl), array($objet_source => $ids), $cond) ); objet_dissocier(array($objet_lie => $idl), array($objet_source => $ids), $cond); } } } } set_request('_oups', $oups ? serialize($oups) : null); } if ($ajouter) { if ($ajouter_objets = charger_fonction("editer_liens_ajouter_{$table_source}_{$objet}_{$objet_lien}", 'action', true) ) { $ajout_ok = $ajouter_objets($ajouter); } else { $ajout_ok = false; include_spip('action/editer_liens'); foreach ($ajouter as $k => $v) { if ($lien = lien_verifier_action($k, $v)) { $ajout_ok = true; list($objet1, $ids, $objet2, $idl) = explode('-', $lien); $qualifs = lien_retrouver_qualif($objet_lien, $lien); if ($objet_lien == $objet1) { lien_ajouter_liaisons($objet1, $ids, $objet2, $idl, $qualifs); } else { lien_ajouter_liaisons($objet2, $idl, $objet1, $ids, $qualifs); } set_request('id_lien_ajoute', $ids); } } } # oups ne persiste que pour la derniere action, si suppression # une suppression suivie d'un ajout dans le meme hit est un remplacement # non annulable ! if ($ajout_ok) { set_request('_oups'); } } } return $res; } /** * Retrouver l'action de liaision demandée * * Les formulaires envoient une action dans un tableau ajouter_lien * ou supprimer_lien * * L'action est de la forme : objet1-id1-objet2-id2 * ou de la forme : objet1-id1-objet2-id2-role * * L'action peut-être indiquée dans la clé ou dans la valeur. * Si elle est indiquee dans la valeur et que la clé est non numérique, * on ne la prend en compte que si un submit avec la clé a été envoyé * * @internal * @param string $k Clé du tableau * @param string $v Valeur du tableau * @return string Action demandée si trouvée, sinon '' */ function lien_verifier_action($k, $v) { $action = ''; if (preg_match(',^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,', $k)) { $action = $k; } if (preg_match(',^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,', $v)) { if (is_numeric($k)) { $action = $v; } if (_request($k)) { $action = $v; } } // ajout un role null fictif (plus pratique) si pas défini if ($action and count(explode('-', $action)) == 4) { $action .= '-'; } return $action; } /** * Retrouve le ou les qualificatifs postés avec une liaison demandée * * @internal * @param string $objet_lien * objet qui porte le lien * @param string $lien * Action du lien * @return array * Liste des qualifs pour chaque lien. Tableau vide s'il n'y en a pas. **/ function lien_retrouver_qualif($objet_lien, $lien) { // un role est défini dans la liaison $defs = explode('-', $lien); list($objet1, , $objet2, , $role) = $defs; if ($objet_lien == $objet1) { $colonne_role = roles_colonne($objet1, $objet2); } else { $colonne_role = roles_colonne($objet2, $objet1); } // cas ou le role est defini en 5e argument de l'action sur le lien (suppression, ajout rapide sans autre attribut) if ($role) { return array( // un seul lien avec ce role array($colonne_role => $role) ); } // retrouver les rôles postés pour cette liaison, s'il y en a. $qualifier_lien = _request('qualifier_lien'); if (!$qualifier_lien or !is_array($qualifier_lien)) { return array(); } // pas avec l'action complete (incluant le role) $qualif = array(); if ((!isset($qualifier_lien[$lien]) or !$qualif = $qualifier_lien[$lien]) and count($defs) == 5 ) { // on tente avec l'action sans le role array_pop($defs); $lien = implode('-', $defs); if (!isset($qualifier_lien[$lien]) or !$qualif = $qualifier_lien[$lien]) { $qualif = array(); } } // $qualif de la forme array(role=>array(...),valeur=>array(...),....) // on le reforme en array(array(role=>..,valeur=>..,..),array(role=>..,valeur=>..,..),...) $qualifs = array(); while (count($qualif)) { $q = array(); foreach ($qualif as $att => $values) { if (is_array($values)) { $q[$att] = array_shift($qualif[$att]); if (!count($qualif[$att])) { unset($qualif[$att]); } } else { $q[$att] = $values; unset($qualif[$att]); } } // pas de rôle vide if (!$colonne_role or !isset($q[$colonne_role]) or $q[$colonne_role]) { $qualifs[] = $q; } } return $qualifs; } /** * Ajoute les liens demandés en prenant éventuellement en compte le rôle * * Appelle la fonction objet_associer. L'appelle autant de fois qu'il y * a de rôles demandés pour cette liaison. * * @internal * @param string $objet_source Objet source de la liaison (qui a la table de liaison) * @param array|string $ids Identifiants pour l'objet source * @param string $objet_lien Objet à lier * @param array|string $idl Identifiants pour l'objet lié * @param array $qualifs * @return void **/ function lien_ajouter_liaisons($objet_source, $ids, $objet_lien, $idl, $qualifs) { // retrouver la colonne de roles s'il y en a a lier if (is_array($qualifs) and count($qualifs)) { foreach ($qualifs as $qualif) { objet_associer(array($objet_source => $ids), array($objet_lien => $idl), $qualif); } } else { objet_associer(array($objet_source => $ids), array($objet_lien => $idl)); } } configurer_logos.html000066600000004557152442521210011015 0ustar00<div class="formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}"> <h3 class='titrem'><img src="#CHEMIN_IMAGE{image-24.png}" class="cadre-icone" /><:info_logos:></h3> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [(#ENV{editable}) <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <div class="editer-groupe"> #SET{name,activer_logos}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer long_label editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:config_info_logos:>#AIDER{logoart}</label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_oui" value="oui" [(#ENV{#GET{name}}|=={oui}|oui)checked="checked"] /><label for="#GET{name}_oui"><:config_info_logos_utiliser:></label> </div> <div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_non" value="non" [(#ENV{#GET{name}}|=={oui}|non)checked="checked"] /><label for="#GET{name}_non"><:config_info_logos_utiliser_non:></label> </div> </div> #SET{name,activer_logos_survol}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer long_label editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> [ <span class='erreur_message'>(#GET{erreurs})</span> ]<div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_oui" value="oui" [(#ENV{#GET{name}}|=={oui}|oui)checked="checked"] /><label for="#GET{name}_oui"><:config_info_logos_utiliser_survol:></label> </div> <div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_non" value="non" [(#ENV{#GET{name}}|=={oui}|non)checked="checked"] /><label for="#GET{name}_non"><:config_info_logos_utiliser_survol_non:></label> </div> </div> </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons'><span class='image_loading'> </span><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p> </div></form> ] </div> configurer_logos.php000066600000002420152442521210010623 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) { return; } function formulaires_configurer_logos_charger_dist() { $valeurs = array(); foreach (array( 'activer_logos', 'activer_logos_survol' ) as $m) { $valeurs[$m] = $GLOBALS['meta'][$m]; } return $valeurs; } function formulaires_configurer_logos_traiter_dist() { $res = array('editable' => true); foreach (array( 'activer_logos', 'activer_logos_survol', ) as $m) { if (!is_null($v = _request($m))) { ecrire_meta($m, $v == 'oui' ? 'oui' : 'non'); } } $res['message_ok'] = _T('config_info_enregistree'); return $res; } declarer_bases_3.html000066600000003331152442521210010614 0ustar00<div class="ajax formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}"> <h3 class="titrem"><:onglet_declarer_une_autre_base:> (3/3)</h3> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [(#ENV{editable}|oui) [<p><strong><:config_info_base_sup_disponibles:></strong><br /> (#ENV*{_bases_deja}|implode{', '}) </p>] <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <div class="editer-groupe"> #SET{name,nom_connect}#SET{obli,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:label_nom_fichier_connect:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<input type="text" class="text" name="#GET{name}" value="#ENV*{#GET{name}}"/> [(#ENV*{_tables}|non) <p class='notice'><:install_pas_table:></p> ] [<h4><:install_tables_base:> "<strong>#ENV{choix_db}</strong>"</h4> <ul class="spip"> <li>(#ENV*{_tables}|implode{'</li><li>'})</li> </ul> ] </div> </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons'><span class='image_loading'> </span> <input type='submit' class='submit hidden' value='<:bouton_suivant:>' /> <input type='submit' class='submit' name="_retour_etape_2" value='<:icone_retour:>' /> <input type='submit' class='submit' value='<:bouton_suivant:>' /></p> </div></form> ] </div> configurer_previsualiseur.php000066600000002345152442521210012570 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) { return; } include_spip('inc/presentation'); function formulaires_configurer_previsualiseur_charger_dist() { $valeurs = array(); $valeurs['preview'] = explode(',', $GLOBALS['meta']['preview']); return $valeurs; } function formulaires_configurer_previsualiseur_traiter_dist() { $res = array('editable' => true); if ($i = _request('preview') and is_array($i)) { $i = ',' . implode(',', $i) . ','; } ecrire_meta('preview', $i); $res['message_ok'] = _T('config_info_enregistree'); return $res; } configurer_previsualiseur.html000066600000003220152442521210012736 0ustar00<div class="formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}"> <h3 class='titrem'><img src="#CHEMIN_IMAGE{preview-24.png}" class="cadre-icone" /><:previsualisation:>#AIDER{previsu}</h3> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [(#ENV{editable}) <p><:info_preview_texte:></p> <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <div class="editer-groupe"> #SET{name,preview}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> [ <span class='erreur_message'>(#GET{erreurs})</span> ] <div class="choix"> <input type="checkbox" name="#GET{name}\[\]" id="#GET{name}_0minirezo" value="0minirezo" [(#VAL{0minirezo}|in_any{#ENV{#GET{name}}}|oui)checked="checked"] /><label for="#GET{name}_0minirezo"><:info_administrateurs:></label> </div> <div class="choix"> <input type="checkbox" name="#GET{name}\[\]" id="#GET{name}_1comite" value="1comite" [(#VAL{1comite}|in_any{#ENV{#GET{name}}}|oui)checked="checked"] /><label for="#GET{name}_1comite"><:info_redacteurs:></label> </div> </div> </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons'><span class='image_loading'> </span><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p> </div></form> ] </div> editer_auteur.php000066600000036175152442521210010134 0ustar00<?php /** * Gestion du formulaire de d'édition de rubrique * * @package SPIP\Core\Auteurs\Formulaires **/ if (!defined('_ECRIRE_INC_VERSION')) { return; } include_spip('inc/actions'); include_spip('inc/editer'); include_spip('inc/filtres_ecrire'); // si on utilise le formulaire dans le public include_spip('inc/autoriser'); /** * Chargement du formulaire d'édition d'un auteur * * @see formulaires_editer_objet_charger() * * @param int|string $id_auteur * Identifiant de l'auteur. 'new' pour une nouvel auteur. * @param string $retour * URL de redirection après le traitement * @param string $associer_objet * Éventuel 'objet|x' indiquant de lier le mot créé à cet objet, * tel que 'article|3' * @param string $config_fonc * Nom de la fonction ajoutant des configurations particulières au formulaire * @param array $row * Valeurs de la ligne SQL de l'auteur, si connu * @param string $hidden * Contenu HTML ajouté en même temps que les champs cachés du formulaire. * @return array * Environnement du formulaire **/ function formulaires_editer_auteur_charger_dist( $id_auteur = 'new', $retour = '', $associer_objet = '', $config_fonc = 'auteurs_edit_config', $row = array(), $hidden = '' ) { $valeurs = formulaires_editer_objet_charger('auteur', $id_auteur, 0, 0, $retour, $config_fonc, $row, $hidden); $valeurs['new_login'] = $valeurs['login']; if (!autoriser('modifier', 'auteur', intval($id_auteur))) { $valeurs['editable'] = ''; } return $valeurs; } /** * Identifier le formulaire en faisant abstraction des paramètres qui * ne représentent pas l'objet édité * * @param int|string $id_auteur * Identifiant de l'auteur. 'new' pour une nouvel auteur. * @param string $retour * URL de redirection après le traitement * @param string $associer_objet * Éventuel 'objet|x' indiquant de lier le mot créé à cet objet, * tel que 'article|3' * @param string $config_fonc * Nom de la fonction ajoutant des configurations particulières au formulaire * @param array $row * Valeurs de la ligne SQL de l'auteur, si connu * @param string $hidden * Contenu HTML ajouté en même temps que les champs cachés du formulaire. * @return string * Hash du formulaire */ function formulaires_editer_auteur_identifier_dist( $id_auteur = 'new', $retour = '', $associer_objet = '', $config_fonc = 'auteurs_edit_config', $row = array(), $hidden = '' ) { return serialize(array(intval($id_auteur), $associer_objet)); } /** * Choix par défaut des options de présentation * * @param array $row * Valeurs de la ligne SQL d'un auteur, si connu * return array * Configuration pour le formulaire */ function auteurs_edit_config($row) { global $spip_lang; $config = $GLOBALS['meta']; $config['lignes'] = 8; $config['langue'] = $spip_lang; // pour instituer_auteur $config['auteur'] = $row; //$config['restreint'] = ($row['statut'] == 'publie'); $auth_methode = $row['source']; include_spip('inc/auth'); $config['edit_login'] = (auth_autoriser_modifier_login($auth_methode) and autoriser('modifier', 'auteur', $row['id_auteur'], null, array('email' => true))); $config['edit_pass'] = (auth_autoriser_modifier_pass($auth_methode) and autoriser('modifier', 'auteur', $row['id_auteur'])); return $config; } /** * Vérifications du formulaire d'édition d'un auteur * * Vérifie en plus des vérifications prévues : * - qu'un rédacteur ne peut pas supprimer son adresse mail, * - que le mot de passe choisi n'est pas trop court et identique à sa * deuxième saisie * * @see formulaires_editer_objet_verifier() * * @param int|string $id_auteur * Identifiant de l'auteur. 'new' pour une nouvel auteur. * @param string $retour * URL de redirection après le traitement * @param string $associer_objet * Éventuel 'objet|x' indiquant de lier le mot créé à cet objet, * tel que 'article|3' * @param string $config_fonc * Nom de la fonction ajoutant des configurations particulières au formulaire * @param array $row * Valeurs de la ligne SQL de l'auteur, si connu * @param string $hidden * Contenu HTML ajouté en même temps que les champs cachés du formulaire. * @return array * Erreurs des saisies **/ function formulaires_editer_auteur_verifier_dist( $id_auteur = 'new', $retour = '', $associer_objet = '', $config_fonc = 'auteurs_edit_config', $row = array(), $hidden = '' ) { // auto-renseigner le nom si il n'existe pas, sans couper titre_automatique('nom', array('email', 'login'), 255); $oblis = array('nom'); // si on veut renvoyer des identifiants il faut un email et un login if (_request('reset_password')) { $oblis[] = 'email'; $oblis[] = 'new_login'; } // mais il reste obligatoire si on a rien trouve $erreurs = formulaires_editer_objet_verifier('auteur', $id_auteur, $oblis); if (isset($erreurs['new_login'])) { $erreurs['login'] = $erreurs['new_login']; unset($erreurs['new_login']); } $auth_methode = sql_getfetsel('source', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)); $auth_methode = ($auth_methode ? $auth_methode : 'spip'); include_spip('inc/auth'); if (!nom_acceptable(_request('nom'))) { $erreurs['nom'] = _T('info_nom_pas_conforme'); } if ($email = _request('email')) { include_spip('inc/filtres'); include_spip('inc/autoriser'); // un redacteur qui modifie son email n'a pas le droit de le vider si il y en avait un if (!autoriser('modifier', 'auteur', $id_auteur, null, array('email' => '?')) and $GLOBALS['visiteur_session']['id_auteur'] == $id_auteur and !strlen(trim($email)) and $email != ($email_ancien = sql_getfetsel('email', 'spip_auteurs', 'id_auteur=' . intval($id_auteur))) ) { $erreurs['email'] = (($id_auteur == $GLOBALS['visiteur_session']['id_auteur']) ? _T('form_email_non_valide') : _T('form_prop_indiquer_email')); } else { if (!email_valide($email)) { $erreurs['email'] = (($id_auteur == $GLOBALS['visiteur_session']['id_auteur']) ? _T('form_email_non_valide') : _T('form_prop_indiquer_email')); } } # Ne pas autoriser d'avoir deux auteurs avec le même email # cette fonctionalité nécessite que la base soit clean à l'activation : pas de # doublon sur la requête select email,count(*) from spip_auteurs group by email ; if (defined('_INTERDIRE_AUTEUR_MEME_EMAIL')) { #Nouvel auteur if (intval($id_auteur) == 0) { #Un auteur existe deja avec cette adresse ? if (sql_countsel('spip_auteurs', 'email=' . sql_quote($email)) > 0) { $erreurs['email'] = _T('erreur_email_deja_existant'); } } else { #Un auteur existe deja avec cette adresse ? et n'est pas le user courant. if ((sql_countsel( 'spip_auteurs', 'email=' . sql_quote($email) ) > 0) and ($id_auteur != ($id_auteur_ancien = sql_getfetsel( 'id_auteur', 'spip_auteurs', 'email=' . sql_quote($email) )))) { $erreurs['email'] = _T('erreur_email_deja_existant'); } } } } // quand c'est un auteur existant on fait le reset password ici if (!count($erreurs) and _request('reset_password') and intval($id_auteur)) { $erreurs = auteur_reset_password($id_auteur, $erreurs); return $erreurs; } // corriger un cas si frequent : www.example.org sans le http:// qui precede if ($url = _request('url_site') and !tester_url_absolue($url)) { if (strpos($url, ':') === false and strncasecmp($url, 'www.', 4) === 0) { $url = 'http://' . $url; set_request('url_site', $url); } } // traiter les liens implicites avant de tester l'url include_spip('inc/lien'); if ($url = calculer_url(_request('url_site')) and !tester_url_absolue($url)) { $erreurs['url_site'] = _T('info_url_site_pas_conforme'); } $erreurs['message_erreur'] = ''; if ($err = auth_verifier_login($auth_methode, _request('new_login'), $id_auteur)) { $erreurs['new_login'] = $err; $erreurs['message_erreur'] .= $err; } else { // pass trop court ou confirmation non identique if ($p = _request('new_pass')) { if ($p != _request('new_pass2')) { $erreurs['new_pass'] = _T('info_passes_identiques'); $erreurs['message_erreur'] .= _T('info_passes_identiques'); } elseif ($err = auth_verifier_pass($auth_methode, _request('new_login'), $p, $id_auteur)) { $erreurs['new_pass'] = $err; $erreurs['message_erreur'] .= $err; } } } if (!$erreurs['message_erreur']) { unset($erreurs['message_erreur']); } return $erreurs; } /** * Traitements du formulaire d'édition d'un auteur * * En plus de l'enregistrement normal des infos de l'auteur, la fonction * traite ces cas spécifiques : * * - Envoie lorsqu'un rédacteur n'a pas forcément l'autorisation changer * seul son adresse email, un email à la nouvelle adresse indiquée * pour vérifier l'email saisi, avec un lien dans le mai sur l'action * 'confirmer_email' qui acceptera alors le nouvel email. * * - Crée aussi une éventuelle laision indiquée dans $associer_objet avec * cet auteur. * * @see formulaires_editer_objet_traiter() * * @param int|string $id_auteur * Identifiant de l'auteur. 'new' pour une nouvel auteur. * @param string $retour * URL de redirection après le traitement * @param string $associer_objet * Éventuel 'objet|x' indiquant de lier le mot créé à cet objet, * tel que 'article|3' * @param string $config_fonc * Nom de la fonction ajoutant des configurations particulières au formulaire * @param array $row * Valeurs de la ligne SQL de l'auteur, si connu * @param string $hidden * Contenu HTML ajouté en même temps que les champs cachés du formulaire. * @return array * Retour des traitements **/ function formulaires_editer_auteur_traiter_dist( $id_auteur = 'new', $retour = '', $associer_objet = '', $config_fonc = 'auteurs_edit_config', $row = array(), $hidden = '' ) { if (_request('saisie_webmestre') or _request('webmestre')) { set_request('webmestre', _request('webmestre') ? _request('webmestre') : 'non'); } $retour = parametre_url($retour, 'email_confirm', ''); set_request( 'email', email_valide(_request('email')) ); // eviter d'enregistrer les cas qui sont acceptés par email_valide dans le verifier : // "Marie@toto.com " ou encore "Marie Toto <Marie@toto.com>" include_spip('inc/autoriser'); if (!autoriser('modifier', 'auteur', $id_auteur, null, array('email' => '?'))) { $email_nouveau = _request('email'); set_request('email'); // vider la saisie car l'auteur n'a pas le droit de modifier cet email // mais si c'est son propre profil on lui envoie un email à l'adresse qu'il a indique // pour qu'il confirme qu'il possede bien cette adresse // son clic sur l'url du message permettre de confirmer le changement // et de revenir sur son profil if ($GLOBALS['visiteur_session']['id_auteur'] == $id_auteur and $email_nouveau != ($email_ancien = sql_getfetsel('email', 'spip_auteurs', 'id_auteur=' . intval($id_auteur))) ) { $envoyer_mail = charger_fonction('envoyer_mail', 'inc'); $texte = _T( 'form_auteur_mail_confirmation', array( 'url' => generer_action_auteur( 'confirmer_email', $email_nouveau, parametre_url($retour, 'email_modif', 'ok') ) ) ); $envoyer_mail($email_nouveau, _T('form_auteur_confirmation'), $texte); set_request('email_confirm', $email_nouveau); if ($email_ancien) { $envoyer_mail($email_ancien, _T('form_auteur_confirmation'), _T('form_auteur_envoi_mail_confirmation', array('email' => $email_nouveau))); } $retour = parametre_url($retour, 'email_confirm', $email_nouveau); } } $res = formulaires_editer_objet_traiter('auteur', $id_auteur, 0, 0, $retour, $config_fonc, $row, $hidden); if (_request('reset_password') and !intval($id_auteur) and intval($res['id_auteur'])) { $erreurs = array(); $erreurs = auteur_reset_password($res['id_auteur'], $erreurs); if (isset($erreurs['message_ok'])) { if (!isset($res['message_ok'])) $res['message_ok'] = ''; $res['message_ok'] = trim($res['message_ok'] . ' ' . $erreurs['message_ok']); } if (isset($erreurs['message_erreur']) and $erreurs['message_erreur']) { if (!isset($res['message_erreur'])) $res['message_erreur'] = ''; $res['message_erreur'] = trim($res['message_erreur'] . ' ' . $erreurs['message_erreur']); } } // Un lien auteur a prendre en compte ? if ($associer_objet and $id_auteur = $res['id_auteur']) { $objet = ''; if (intval($associer_objet)) { $objet = 'article'; $id_objet = intval($associer_objet); } elseif (preg_match(',^\w+\|[0-9]+$,', $associer_objet)) { list($objet, $id_objet) = explode('|', $associer_objet); } if ($objet and $id_objet and autoriser('modifier', $objet, $id_objet)) { include_spip('action/editer_auteur'); auteur_associer($id_auteur, array($objet => $id_objet)); if (isset($res['redirect'])) { $res['redirect'] = parametre_url($res['redirect'], 'id_lien_ajoute', $id_auteur, '&'); } } } return $res; } function auteur_reset_password($id_auteur, $erreurs = array()) { $auteur = sql_fetsel('*', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)); $config = auteurs_edit_config($auteur); if ($config['edit_pass']) { if ($email = auteur_regenerer_identifiants($id_auteur)) { $erreurs['message_ok'] = _T('message_nouveaux_identifiants_ok', array('email' => $email)); $erreurs['message_erreur'] = ''; } elseif ($email === false) { $erreurs['message_erreur'] = _T('message_nouveaux_identifiants_echec_envoi'); } else { $erreurs['message_erreur'] = _T('message_nouveaux_identifiants_echec'); } } else { $erreurs['message_erreur'] = _T('message_nouveaux_identifiants_echec'); } return $erreurs; } /** * Renvoyer des identifiants * @param int $id_auteur * @param bool $notifier * @param array $contexte * @return string */ function auteur_regenerer_identifiants($id_auteur, $notifier=true, $contexte = array()) { if ($id_auteur){ $set = array(); include_spip('inc/access'); $set['pass'] = creer_pass_aleatoire(); include_spip('action/editer_auteur'); auteur_modifier($id_auteur,$set); $row = sql_fetsel('*','spip_auteurs','id_auteur='.intval($id_auteur)); include_spip('inc/filtres'); if ($notifier and $row['email'] and email_valide($row['email']) and trouver_fond($fond = 'modeles/mail_nouveaux_identifiants')){ // envoyer l'email avec login/pass $c = array( 'id_auteur' => $id_auteur, 'nom' => $row['nom'], 'mode' => $row['statut'], 'email' => $row['email'], 'pass' => $set['pass'], ); // on merge avec les champs fournit en appel, qui sont passes au modele de notification donc $contexte = array_merge($contexte, $c); // si pas de langue explicitement demandee, prendre celle de l'auteur si on la connait, ou a defaut celle du site // plutot que celle de l'admin qui vient de cliquer sur le bouton if (!isset($contexte['lang']) or !$contexte['lang']) { if (isset($row['lang']) and $row['lang']) { $contexte['lang'] = $row['lang']; } else { $contexte['lang'] = $GLOBALS['meta']['langue_site']; } } lang_select($contexte['lang']); $message = recuperer_fond($fond, $contexte); include_spip("inc/notifications"); notifications_envoyer_mails($row['email'],$message); lang_select(); return $row['email']; } return false; } return ''; } configurer_transcodeur.php000066600000002743152442521210012041 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) { return; } function formulaires_configurer_transcodeur_charger_dist() { $valeurs = array( 'charset' => $GLOBALS['meta']['charset'], ); return $valeurs; } function formulaires_configurer_transcodeur_verifier_dist() { include_spip('inc/charsets'); $erreurs = array(); if (!$charset = _request('charset')) { $erreurs['charset'] = _T('info_obligatoire'); } elseif ($charset != 'utf-8' and !load_charset($charset)) { $erreurs['charset'] = _T('utf8_convert_erreur_orig', array('charset' => entites_html($charset))); } return $erreurs; } function formulaires_configurer_transcodeur_traiter_dist() { $res = array('editable' => true); ecrire_meta('charset', _request('charset')); $res['message_ok'] = _T('config_info_enregistree'); return $res; } configurer_langue.php000066600000003746152442521210010767 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) { return; } function formulaires_configurer_langue_charger_dist() { $valeurs = array(); include_spip('inc/lang'); $l_site = $GLOBALS['meta']['langue_site']; $langue_site = traduire_nom_langue($l_site); $langues = explode(',', $GLOBALS['meta']['langues_proposees']); if (!in_array($l_site, $langues)) { $langues[] = $l_site; } sort($langues); $res = ''; foreach ($langues as $l) { $res .= "<option value='$l'" . ($l == $l_site ? " selected='selected'" : '') . '>' . traduire_nom_langue($l) . "</option>\n"; } $valeurs = array( '_langues' => $res, '_langue_site' => $langue_site, 'changer_langue_site' => '', ); return $valeurs; } function formulaires_configurer_langue_traiter_dist() { $res = array('editable' => true); if ($lang = _request('changer_langue_site')) { include_spip('inc/lang'); // verif que la langue demandee est licite if (changer_langue($lang)) { ecrire_meta('langue_site', $lang); // le test a defait ca: utiliser_langue_visiteur(); $res['message_ok'] = _T('config_info_enregistree'); include_spip('inc/rubriques'); calculer_langues_rubriques(); } // le test a defait ca: utiliser_langue_visiteur(); } if (!$res['message_ok']) { $res['message_erreur'] = _L('erreur'); } return $res; } configurer_visiteurs.html000066600000003261152442521210011716 0ustar00<div class="formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}"> <h3 class='titrem'><img src="#CHEMIN_IMAGE{auteur-6forum-24.png}" class="cadre-icone" /><:info_visiteurs:></h3> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [(#ENV{editable}) <p><:info_question_accepter_visiteurs:></p> <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <div class="editer-groupe"> #SET{name,accepter_visiteurs}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> [ <span class='erreur_message'>(#GET{erreurs})</span> ]<div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_oui" value="oui" [(#ENV{#GET{name}}|=={oui}|oui)checked="checked"] /><label for="#GET{name}_oui"><:info_option_accepter_visiteurs:></label> </div> <div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_non" value="non" [(#ENV{#GET{name}}|=={oui}|non)checked="checked"] /><label for="#GET{name}_non"><:info_option_ne_pas_accepter_visiteurs:></label> </div> </div> </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons'><span class='image_loading'> </span><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p> </div></form> ][(#ENV{editable}|non) <p><:info_forums_abo_invites:></p> ] </div>inc-choisir-objets.html000066600000001235152442521210011130 0ustar00#SET{traductions,#ARRAY}<BOUCLE_objets(DATA){source tableau,#REM|lister_tables_objets_sql}{cle !IN #ENV{exclus,''}}>[(#EDITABLE|oui) [(#SET{traductions,#GET{traductions}|array_merge{#ARRAY{#CLE,#TEXTE_OBJETS|_T}}})] ]</BOUCLE_objets><BOUCLE_par_traduction(DATA){source tableau,#GET{traductions}}{par valeur}> #SET{id,#ENV{name}|replace{\W,'_'}|concat{'_',#CLE}} <div class="choix choix_#CLE"> <input type="checkbox" id="#GET{id}" name="#ENV{name}\[\]" value="#CLE"[(#ENV{selected}|=={all}|ou{#CLE|in_any{#ENV{selected}}})checked="checked"] /> <label for="#GET{id}">#VALEUR</label> </div> </BOUCLE_par_traduction> <input type="hidden" name="#ENV{name}[]" value="" /> declarer_bases.php000066600000014325152442521210010222 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) { return; } include_spip('inc/install'); function formulaires_declarer_bases_charger_dist() { list($adresse_db, $login_db, $pass_db, $sel, $server_db) = analyse_fichier_connection(_FILE_CONNECT); $deja = bases_referencees(_FILE_CONNECT); // proposer un nom de connect si pas encore saisi $nom_connect = ''; if (defined('_DECLARER_CHOIX_DB')) { $nom_connect = _DECLARER_CHOIX_DB; $n = ''; while (in_array($nom_connect . $n, $deja)) { $n = ($n ? $n + 1 : 1); } $nom_connect = $nom_connect . $n; } $valeurs = array( '_etapes' => 3, '_bases_deja' => $deja, '_bases_prop' => defined('_DECLARER_SERVEUR_DB') ? liste_bases(_DECLARER_SERVEUR_DB) : '', '_tables' => (defined('_DECLARER_SERVEUR_DB') and defined('_DECLARER_CHOIX_DB')) ? $tables = sql_alltable('%', _DECLARER_SERVEUR_DB) : array(), 'main_db' => '', '_serveurs' => liste_serveurs(), 'sql_serveur_db' => 'sqlite3', // valeur par defaut 'adresse_db' => $adresse_db, 'login_db' => '', 'pass_db' => '', 'choix_db' => '', 'table_new' => '', 'nom_connect' => $nom_connect, ); return $valeurs; } function liste_serveurs() { $options = array(); $dir = _DIR_RESTREINT . 'req/'; $d = opendir($dir); if (!$d) { return array(); } while ($f = readdir($d)) { if ((preg_match('/^(.*)[.]php$/', $f, $s)) and is_readable($f = $dir . $f) ) { require_once($f); $s = $s[1]; $v = 'spip_versions_' . $s; if (function_exists($v) and $v()) { $options[$s] = "install_select_type_$s"; } else { spip_log("$s: portage indisponible"); } } } ksort($options); return $options; } function liste_bases($server_db) { if (is_null($server_db) or !$result = sql_listdbs($server_db) ) { return ''; } $noms = array(); // si sqlite : result est deja un tableau if (is_array($result)) { $noms = $result; } else { while ($row = sql_fetch($result, $server_db)) { $noms[] = reset($row); } } return $noms; } function formulaires_declarer_bases_verifier_1_dist() { $erreurs = array(); list($def_adresse_db, $def_login_db, $def_pass_db, $sel_db, $def_serveur_db) = analyse_fichier_connection(_FILE_CONNECT); if (!$adresse_db = _request('adresse_db')) { if (defined('_INSTALL_HOST_DB')) { $adresse_db = _INSTALL_HOST_DB; } else { $adresse_db = $def_adresse_db; } } if (!$serveur_db = _request('sql_serveur_db')) { if (defined('_INSTALL_SERVER_DB')) { $serveur_db = _INSTALL_SERVER_DB; } else { $serveur_db = $def_serveur_db; } } $login_db = $pass_db = ''; if (!preg_match(',^sqlite,i', $serveur_db)) { if (!$login_db = _request('login_db')) { if (defined('_INSTALL_USER_DB')) { $login_db = _INSTALL_USER_DB; } else { $login_db = $def_login_db; } } if (!$pass_db = _request('pass_db')) { if (defined('_INSTALL_PASS_DB')) { $pass_db = _INSTALL_PASS_DB; } else { $pass_db = $def_pass_db; } } } $link = spip_connect_db($adresse_db, '', $login_db, $pass_db, '@test@', $serveur_db); if ($link) { $GLOBALS['connexions'][$serveur_db][$GLOBALS['spip_sql_version']] = $GLOBALS['spip_' . $serveur_db . '_functions_' . $GLOBALS['spip_sql_version']]; $GLOBALS['connexions'][$serveur_db] = $link; define('_DECLARER_SERVEUR_DB', $serveur_db); define('_DECLARER_ADRESSE_DB', $adresse_db); define('_DECLARER_LOGIN_DB', $login_db); define('_DECLARER_PASS_DB', $pass_db); // si on est sur le meme serveur que connect.php // indiquer quelle est la db utilisee pour l'exclure des choix possibles if ($serveur_db == $def_serveur_db and $adresse_db == $def_adresse_db) { set_request('main_db', $sel_db); } else { set_request('main_db', ''); } } else { $erreurs['message_erreur'] = _T('avis_connexion_echec_1'); } return $erreurs; } function formulaires_declarer_bases_verifier_2_dist() { $erreurs = array(); $choix_db = _request('choix_db'); if ($choix_db == '-1') { $choix_db = _request('table_new'); } if (!$choix_db) { $erreurs['choix_db'] = _T('info_obligatoire'); } else { define('_ECRIRE_INSTALL', 1); // hackons sqlite if (!sql_selectdb($choix_db, _DECLARER_SERVEUR_DB)) { $erreurs['choix_db'] = _T('avis_base_inaccessible', array('base' => $choix_db)); } else { define('_DECLARER_CHOIX_DB', $choix_db); } } return $erreurs; } function formulaires_declarer_bases_verifier_3_dist() { $erreurs = array(); $nom_connect = _request('nom_connect'); if (!$nom_connect) { $erreurs['nom_connect'] = _T('info_obligatoire'); } else { // securite : le nom doit etre un mot sans caracteres speciaux $f = preg_replace(',[^\w],', '', $nom_connect); if ($f !== $nom_connect) { $erreurs['nom_connect'] = _T('erreur_nom_connect_incorrect'); } elseif (file_exists(_DIR_CONNECT . $nom_connect . '.php')) { $erreurs['nom_connect'] = _T('erreur_connect_deja_existant'); } else { define('_DECLARER_NOM_CONNECT', $nom_connect); } } return $erreurs; } function formulaires_declarer_bases_traiter_dist() { $adresse_db = _DECLARER_ADRESSE_DB; if (preg_match(',(.*):(.*),', $adresse_db, $r)) { list(, $adresse_db, $port) = $r; } else { $port = ''; } $server_db = addcslashes(_DECLARER_SERVEUR_DB, "'\\"); $conn = install_mode_appel($server_db) . install_connexion( $adresse_db, $port, _DECLARER_LOGIN_DB, _DECLARER_PASS_DB, _DECLARER_CHOIX_DB, _DECLARER_SERVEUR_DB, '', '', '' ); install_fichier_connexion(_DIR_CONNECT . _DECLARER_NOM_CONNECT . '.php', $conn); return array( 'message_ok' => _T('install_connect_ok', array('connect' => '<strong>' . _DECLARER_NOM_CONNECT . '</strong>')) ); } declarer_bases_2.html000066600000004260152442521210010615 0ustar00<div class="ajax formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}"> <h3 class="titrem"><:onglet_declarer_une_autre_base:> (2/3)</h3> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <div class="editer-groupe"> #SET{name,choix_db}#SET{obli,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:config_titre_base_sup_choix:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ] #SET{def,checked="checked"} <BOUCLE_db(POUR){tableau #ENV*{_bases_prop}}> <div class="choix"> <input type="radio" class="radio" name="choix_db" value="#VALEUR" id="choix_#VALEUR" [(#VALEUR|=={#ENV{main_db}}|oui)disabled="disabled"] [(#VALEUR|=={#ENV{choix_db}}|oui)checked="checked" #SET{def,''}] /> <label for="choix_#VALEUR" [(#CLE|=={#ENV{main_db}|oui})class="off"]>#VALEUR</label> </div> </BOUCLE_db> <p><:config_erreur_base_sup:></p> <//B_db> </div> <div class="editer"> <label><:info_ou:></label> <div class="choix"> <input type="radio" class="radio" name="choix_db" value="-1" id='new' #GET{def}/> <label for='new' class="on"><:config_choix_base_sup:></label> </div> <input type="text" class="text" name="table_new" value="#ENV*{table_new}" onfocus="$(this).siblings('.choix').find('input').prop('checked',true);" /> </div> </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons'><span class='image_loading'> </span> <input type='submit' class='submit hidden' value='<:bouton_suivant:>' /> <input type='submit' class='submit' name="_retour_etape_1" value='<:icone_retour:>' /> <input type='submit' class='submit' value='<:bouton_suivant:>' /></p> </div></form> </div> configurer_moderniseur.php000066600000002370152442521210012040 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) { return; } include_spip('inc/presentation'); function formulaires_configurer_moderniseur_charger_dist() { $valeurs = array( 'version_html_max' => html5_permis() ? 'html5' : 'html4', ); return $valeurs; } function formulaires_configurer_moderniseur_traiter_dist() { $res = array('editable' => true); foreach (array( 'version_html_max' ) as $m) { if (!is_null($v = _request($m))) { ecrire_meta($m, $v == 'html5' ? 'html5' : 'html4'); } } $res['message_ok'] = _T('config_info_enregistree'); return $res; } configurer_annonces.php000066600000005241152442521210011310 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) { return; } function formulaires_configurer_annonces_charger_dist() { $valeurs = array(); foreach (array( 'suivi_edito', 'adresse_suivi', 'adresse_suivi_inscription', 'quoi_de_neuf', 'adresse_neuf', 'jours_neuf', 'email_envoi', ) as $m) { $valeurs[$m] = $GLOBALS['meta'][$m]; } return $valeurs; } function formulaires_configurer_annonces_verifier_dist() { $erreurs = array(); if (_request('suivi_edito') == 'oui') { if (!$email = _request('adresse_suivi')) { $erreurs['adresse_suivi'] = _T('info_obligatoire'); } else { include_spip('inc/filtres'); if (!email_valide($email)) { $erreurs['adresse_suivi'] = _T('form_prop_indiquer_email'); } } } if (_request('quoi_de_neuf') == 'oui') { if (!$email = _request('adresse_neuf')) { $erreurs['adresse_neuf'] = _T('info_obligatoire'); } else { include_spip('inc/filtres'); if (!email_valide($email)) { $erreurs['adresse_neuf'] = _T('form_prop_indiquer_email'); } } if (!$email = _request('jours_neuf')) { $erreurs['jours_neuf'] = _T('info_obligatoire'); } } return $erreurs; } function formulaires_configurer_annonces_traiter_dist() { $res = array('editable' => true); foreach (array( 'suivi_edito', 'quoi_de_neuf', ) as $m) { if (!is_null($v = _request($m))) { ecrire_meta($m, $v == 'oui' ? 'oui' : 'non'); } } foreach (array( 'adresse_suivi', 'adresse_suivi_inscription', 'adresse_neuf', 'jours_neuf', 'email_envoi', ) as $m) { if (!is_null($v = _request($m))) { ecrire_meta($m, $v); } } $res['message_ok'] = _T('config_info_enregistree'); // provoquer l'envoi des nouveautes en supprimant le fichier lock if (_request('envoi_now')) { effacer_meta('dernier_envoi_neuf'); $id_job = job_queue_add('mail', 'Test Envoi des nouveautes', array(0), 'genie/'); include_spip('inc/queue'); queue_schedule(array($id_job)); $res['message_ok'] .= '<br />' . _T('info_liste_nouveautes_envoyee'); } return $res; } configurer_visiteurs.php000066600000003207152442521210011541 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) { return; } include_spip('inc/presentation'); function formulaires_configurer_visiteurs_charger_dist() { $valeurs = array(); if (avoir_visiteurs(false, false)) { $valeurs['editable'] = false; } foreach (array( 'accepter_visiteurs' ) as $m) { $valeurs[$m] = $GLOBALS['meta'][$m]; } return $valeurs; } function formulaires_configurer_visiteurs_traiter_dist() { $res = array('editable' => true); // Modification du reglage accepter_inscriptions => vider le cache // (pour repercuter la modif sur le panneau de login) if (($i = _request('accepter_visiteurs') and $i != $GLOBALS['meta']['accepter_visiteurs']) ) { include_spip('inc/invalideur'); suivre_invalideur('1'); # tout effacer } foreach (array( 'accepter_visiteurs', ) as $m) { if (!is_null($v = _request($m))) { ecrire_meta($m, $v == 'oui' ? 'oui' : 'non'); } } $res['message_ok'] = _T('config_info_enregistree'); return $res; } editer_auteur.html000066600000015010152442521210010272 0ustar00<div class="formulaire_spip formulaire_editer formulaire_editer_auteur formulaire_editer_auteur-#ENV{id_auteur,nouveau}"> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV**{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur}) <:info_recommencer:></p>] [(#ENV{editable}) <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <input type='hidden' name='id_auteur' value='#ENV{id_auteur}' /> [<input type='hidden' name='redirect' value='(#ENV**{redirect})' />] <div class="editer-groupe"> <div class="editer editer_nom obligatoire[ (#ENV**{erreurs}|table_valeur{nom}|oui)erreur]"> <label for="nom"><:titre_cadre_signature_obligatoire:></label>[ <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{nom})</span> ][<p class='explication'>(#ENV{id_auteur}|=={#SESSION{id_auteur}}|?{<:entree_nom_pseudo:>,<:entree_nom_pseudo_2:>})</p>] <input type='text' class='text' name='nom' id='nom' placeholder="<:ecrire:item_nouvel_auteur|attribut_html:>" value="[(#ENV**{nom})]" /> </div> [(#REM) Modification de l'email ou message disant que seuls les admins peuvent le modifier ] <div class="editer editer_email[ (#ENV**{erreurs}|table_valeur{email}|oui)erreur]"> [<label for="email">(#ENV{id_auteur}|=={#SESSION{id_auteur}}|?{<:entree_adresse_email:>,<:entree_adresse_email_2:>})</label>][ <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{email})</span> ]<input type='text' class='text' name='email' id='email' value="[(#ENV**{email})]" /> </div> <div class="editer editer_bio[ (#ENV**{erreurs}|table_valeur{bio}|oui)erreur]"> [<label for="bio">(#ENV{id_auteur}|=={#SESSION{id_auteur}}|?{<:entree_infos_perso:>,<:entree_infos_perso_2:>})</label>][ <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{bio})</span> ]<p class="explication"><:entree_biographie:></p> <textarea name='bio' id='bio' rows='4' cols='40'>[(#ENV**{bio})]</textarea> </div> [(#REM) Cle PGP ] <div class="editer editer_pgp[ (#ENV**{erreurs}|table_valeur{pgp}|oui)erreur]"> [<label for="pgp">(#ENV{id_auteur}|=={#SESSION{id_auteur}}|?{<:entree_cle_pgp:>,<:entree_cle_pgp_2:>})</label>][ <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{pgp})</span> ]<textarea name='pgp' id='pgp' rows='4' cols='40'>[(#ENV**{pgp})]</textarea> </div> [(#REM) Statut ] [(#AUTORISER{modifier,auteur,#ID_AUTEUR,'',#ARRAY{statut,'?'}}|oui) <div class='editer editer_statut'> #INCLURE{fond=formulaires/inc-instituer_auteur,statut=#ENV**{statut,#CONST{_STATUT_AUTEUR_CREATION}},id_auteur,webmestre} </div>] [(#REM) Site Web : nom et url ] <div class='editer_liens_sites fieldset'> <fieldset> <legend><:info_site_web:></legend> <div class="editer-groupe"> <div class="editer editer_nom_site[ (#ENV**{erreurs}|table_valeur{nom_site_auteur}|oui)erreur]"> [<label for="nom_site">(#ENV{id_auteur}|=={#SESSION{id_auteur}}|?{<:entree_nom_site:>,<:entree_nom_site_2:>})</label>][ <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{nom_site_auteur})</span> ]<input type='text' class='text' name='nom_site' id='nom_site' value="[(#ENV**{nom_site})]" /> </div> <div class="editer editer_url_site[ (#ENV**{erreurs}|table_valeur{url_site}|oui)erreur]"> [<label for="url_site">(#ENV{id_auteur}|=={#SESSION{id_auteur}}|?{<:entree_url:>,<:entree_url_2:>})</label>][ <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{url_site})</span> ]<input type='text' class='text' name='url_site' id='url_site' value="[(#ENV**{url_site})]" /> </div> </div> </fieldset> </div> [(#REM) Identifiants (nom, mot de passe) ] <div class='editer_identification fieldset'> <fieldset> [<legend>(#ENV{id_auteur}|=={#SESSION{id_auteur}}|?{<:entree_identifiants_connexion:>,<:entree_identifiants_connexion_2:>})</legend>] [(#REM) Avertissement en cas de modifs de ses propres donnees ] [(#ENV{config}|table_valeur{edit_login} |or{#ENV{config}|table_valeur{edit_pass}} |and{#SESSION{id_auteur}|=={#ENV{id_auteur}}}|oui) <div class='notice'><:texte_login_precaution:></div> ] <div class="editer-groupe"> [(#REM) Un redacteur n'a pas le droit de modifier son login ! ] <div class='editer editer_new_login[ (#ENV**{erreurs}|table_valeur{login}|oui)erreur]'> [(#ENV{config}|table_valeur{edit_login}|oui) <label for='new_login'><:item_login:></label>[ <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{login})</span> ]<p class='explication'>(<:info_login_trop_court_car_pluriel{nb=#CONST{_LOGIN_TROP_COURT}}:>)</p> <input autocomplete="off" type='text' class='text' name='new_login' id='new_login' value="[(#ENV**{new_login})]" /> ] [(#ENV{config}|table_valeur{edit_login}|non) <label for='login'><:item_login:> </label><p class='explication'>(<:info_non_modifiable:>)</p> <input type='text' class='text' disabled='disabled' name='login' id='login' value="[(#ENV**{login})]" /> ] </div> [(#ENV{config}|table_valeur{edit_pass}|oui) <div class='editer editer_new_pass[ (#ENV**{erreurs}|table_valeur{new_pass}|oui)erreur]'> <label for='new_pass'><:entree_nouveau_passe:></label>[ <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{new_pass})</span> ]<p class='explication'>(<:info_passe_trop_court_car_pluriel{nb=#CONST{_PASS_LONGUEUR_MINI}}:>)</p> <input type='password' autocomplete="off" class='password' name='new_pass' id='new_pass' value="" /> </div> <div class='editer editer_new_pass2'> <label for='new_pass2'><:info_confirmer_passe:></label>[ <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{new_pass2})</span> ]<input type='password' autocomplete="off" class='password' name='new_pass2' id='new_pass2' value="" /> [(#ENV{config/edit_pass}|oui) <input type="submit" class="over offscreen" name="submit" value="submit" /> <button class="submit reset_password" type="submit" name="reset_password" value="1"><:bouton_reset_password:></button> ] </div>] </div> </fieldset> </div> </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons'><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p> </div></form> ] </div> configurer_preferences.html000066600000017202152442521210012162 0ustar00<div class="formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}"> <h3 class='titrem'><:titre_configurer_preferences:></h3> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <div class="editer-groupe"> #SET{name,spip_ecran}#SET{erreurs,#ENV{erreurs/#GET{name}}}#SET{obli,''} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label><:label_taille_ecran:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<div class="choix"> <input type='radio' class='radio' name='#GET{name}' id='[(#GET{name})]_etroit'[(#ENV{#GET{name}}|=={large}|non)checked="checked" ]value="etroit" onchange="if (this.checked) jQuery('body').addClass('etroit').removeClass('large'); else jQuery('body').removeClass('etroit').addClass('large');"/> <label for="[(#GET{name})]_etroit"><:info_petit_ecran:></label> </div> <div class="choix"> <input type='radio' class='radio' name='#GET{name}' id='[(#GET{name})]_large'[(#ENV{#GET{name}}|=={large}|oui)checked="checked" ]value="large" onchange="if (this.checked) jQuery('body').addClass('large').removeClass('etroit'); else jQuery('body').removeClass('large').addClass('etroit');"/> <label for="[(#GET{name})]_large"><:info_grand_ecran:></label> </div> </div> #SET{name,display_navigation}#SET{erreurs,#ENV{erreurs/#GET{name}}}#SET{obli,''} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label><:label_texte_et_icones_navigation:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<div class="choix"> <input type='radio' class='radio' name='#GET{name}' id='[(#GET{name})]_1'[(#ENV{#GET{name}}|=={navigation_sans_icone}|oui)checked="checked" ]value="navigation_sans_icone" onchange="if (this.checked) jQuery('body').addClass('navigation_sans_icone').removeClass('navigation_avec_icones'); else jQuery('body').removeClass('navigation_sans_icone').addClass('navigation_avec_icones');"/> <label for="[(#GET{name})]_1"><:lien_afficher_texte_seul:></label> </div> <div class="choix"> <input type='radio' class='radio' name='#GET{name}' id='[(#GET{name})]_2'[(#ENV{#GET{name}}|=={navigation_sans_icone}|non)checked="checked" ]value="navigation_avec_icones" onchange="if (!this.checked) jQuery('body').addClass('navigation_sans_icone').removeClass('navigation_avec_icones'); else jQuery('body').removeClass('navigation_sans_icone').addClass('navigation_avec_icones');"/> <label for="[(#GET{name})]_2"><:lien_afficher_texte_icones:></label> </div> </div> #SET{name,display}#SET{erreurs,#ENV{erreurs/#GET{name}}}#SET{obli,''} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label><:label_texte_et_icones_page:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<div class="choix"> <input type='radio' class='radio' name='#GET{name}' id='[(#GET{name})]_1'[(#ENV{#GET{name}}|=={1}|oui)checked="checked" ]value="1" onchange="jQuery('body').removeClass('icones_texte').removeClass('icones_img_texte').removeClass('icones_img'); if (jQuery('#[(#GET{name})]_1').prop('checked')) jQuery('body').addClass('icones_texte') else if (jQuery('#[(#GET{name})]_2').prop('checked')) jQuery('body').addClass('icones_img_texte') else jQuery('body').addClass('icones_img');" /> <label for="[(#GET{name})]_1"><:lien_afficher_texte_seul:></label> </div> <div class="choix"> <input type='radio' class='radio' name='#GET{name}' id='[(#GET{name})]_2'[(#ENV{#GET{name}}|=={2}|oui)checked="checked" ]value="2" onchange="jQuery('body').removeClass('icones_texte').removeClass('icones_img_texte').removeClass('icones_img'); if (jQuery('#[(#GET{name})]_1').prop('checked')) jQuery('body').addClass('icones_texte') else if (jQuery('#[(#GET{name})]_2').prop('checked')) jQuery('body').addClass('icones_img_texte') else jQuery('body').addClass('icones_img');" /> <label for="[(#GET{name})]_2"><:lien_afficher_texte_icones:></label> </div> <div class="choix"> <input type='radio' class='radio' name='#GET{name}' id='[(#GET{name})]_3'[(#ENV{#GET{name}}|=={3}|oui)checked="checked" ]value="3" onchange="jQuery('body').removeClass('icones_texte').removeClass('icones_img_texte').removeClass('icones_img'); if (jQuery('#[(#GET{name})]_1').prop('checked')) jQuery('body').addClass('icones_texte') else if (jQuery('#[(#GET{name})]_2').prop('checked')) jQuery('body').addClass('icones_img_texte') else jQuery('body').addClass('icones_img');" /> <label for="[(#GET{name})]_3"><:lien_afficher_icones_seuls:></label> </div> </div> #SET{name,couleur}#SET{erreurs,#ENV{erreurs/#GET{name}}}#SET{obli,''} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label><:titre_changer_couleur_interface:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<BOUCLE_couleurs(POUR){tableau #ENV{couleurs}}> <div class="choix"> <input type='radio' class='radio' name='#GET{name}' id='[(#GET{name})]_#CLE'[(#ENV{#GET{name}}|=={#CLE}|oui)checked="checked" ]value="#CLE" onchange="if (this.checked) jQuery('head>link#csspriveedef').clone().removeAttr('id').appendTo(jQuery('head')).attr('href', '[(#ENV{_couleurs_url/#CLE})]');" /> <label for="[(#GET{name})]_#CLE"> <img src="#CHEMIN{rien.gif}" alt="" width="16" height="16" style="background-color:[#(#VALEUR{couleur_foncee}|couleur_foncer)];" /> <img src="#CHEMIN{rien.gif}" alt="<:choix_couleur_interface|attribut_html:> 1" width="16" height="16" style="background-color:[(#VALEUR{couleur_foncee})];" /> <img src="#CHEMIN{rien.gif}" alt="" width="16" height="16" style="background-color:[(#VALEUR{couleur_claire})];" /> <img src="#CHEMIN{rien.gif}" alt="" width="16" height="16" style="background-color:[#(#VALEUR{couleur_claire}|couleur_eclaircir)];" /> <img src="#CHEMIN{rien.gif}" alt="" width="16" height="16" style="background-color:[#(#VALEUR{couleur_claire}|couleur_eclaircir{0.75})];" /> </label> </div> </BOUCLE_couleurs> </div> <div class="editer editer_imessage"> <label><:info_liste_redacteurs_connectes:></label> <p class='explication'><:texte_auteur_messagerie:></p> <div class="choix"> <input type='radio' class='radio' name='imessage' value='oui' [(#ENV{imessage}|!={non}|oui) checked='checked'] id='perso_activer_imessage_on' #GET{disable}/> <label for='perso_activer_imessage_on'><:bouton_radio_apparaitre_liste_redacteurs_connectes:></label> </div> <div class="choix"> <input type='radio' class='radio' name='imessage' value='non' [(#ENV{imessage}|=={non}|oui) checked='checked'] id='perso_activer_imessage_off' #GET{disable}/> <label for='perso_activer_imessage_off'><:bouton_radio_non_apparaitre_liste_redacteurs_connectes:></label> </div> </div> </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons'><span class='image_loading'> </span><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p> </div></form> <script type="text/javascript"> jQuery(function($){ $('div.formulaire_#FORM form').find('input.radio, input.checkbox').on('change',function(){$(this).parents('form').submit();}); $('div.formulaire_#FORM .boutons').hide(); }); </script> </div> editer_logo.html000066600000005704152442521210007736 0ustar00#CACHE{0} [(#CONFIG{activer_logos}|=={oui}|oui)<div class='formulaire_spip formulaire_editer formulaire_editer_logo formulaire_editer_logo_#ENV{objet}'> [<h3 class="titrem">(#ENV{_options}|table_valeur{titre})</h3>] [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [(#ENV{editable}) #SET{valider,#ENV{valider,''}} <form method='post' action='#ENV{action}' enctype='multipart/form-data'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE [(#REM) un submit pour attraper la touche entree] <div style="display:none;"><input type='submit' class='submit' value='<:bouton_upload:>' /></div> ] <div class="editer-groupe"> <div class="editer editer_logo_on[ (#ENV{logo_on}|non)logo_upload][ (#ENV**{erreurs}|table_valeur{logo_on}|oui)erreur]"> [(#ENV{logo_on}|oui) [(#INCLURE{fond=formulaires/inc-apercu-logo,env,logo=#ENV{logo_on},quoi=logo_on,editable=#ENV{logo_off}|non|et{#ENV{editable}}})] ][(#ENV{editable}) [(#ENV{logo_on}|non) <label for="logo_on_#ENV{objet}_#ENV{id_objet}">[(#ENV{_options}|table_valeur{label}|sinon{<:info_telecharger_nouveau_logo:>})]</label>[ <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{logo_on})</span> ]<input type='file' class='file' name='logo_on' size="[(#ENV{_options}|table_valeur{size_input}|sinon{12})]" id='logo_on_#ENV{objet}_#ENV{id_objet}' value="" /> #SET{valider,' '} ] ] </div> [(#ENV{logo_survol}|ou{#ENV{logo_off}}|oui) <div class="editer editer_logo_off[ (#ENV{logo_off}|non)logo_upload][(#ENV{_show_upload_off}|oui)open][ (#ENV**{erreurs}|table_valeur{logo_off}|oui)erreur]"> [(#ENV{logo_off}|oui) [(#INCLURE{fond=formulaires/inc-apercu-logo,env,logo=#ENV{logo_off},quoi=logo_off,editable=#ENV{editable}})] ][(#ENV{editable}) [(#ENV{logo_off}|non) <div [(#ENV**{erreurs}|table_valeur{logo_off}|non) class="ajouter_survol"><a href="#" onclick="jQuery(this).parent().siblings().show().parent().addClass('open').parents('form').find('.boutons').show();return false;"><:logo_survol:></a></div> <div [(#ENV{_show_upload_off}|non)style="display:none;" #SET{hide,' '}]]> <label for="logo_off"><:info_telecharger_nouveau_logo:></label>[ <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{logo_off})</span> ]<input type='file' class='file' name='logo_off' size="[(#ENV{_options}|table_valeur{size_input}|sinon{12})]" id='logo_off_#ENV{objet}_#ENV{id_objet}' value="" /> #SET{valider,' '} </div> ] ] </div> ] </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> [(#ENV{editable}) [(#GET{valider}) <p class="boutons"[(#GET{hide})style='display:none;']><input type='submit' class='submit' value='<:bouton_upload:>' /></p> ] </div></form> ] </div> ]configurer_redacteurs.php000066600000003052152442521210011643 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) { return; } function formulaires_configurer_redacteurs_charger_dist() { $valeurs = array(); foreach (array( 'accepter_inscriptions', ) as $m) { $valeurs[$m] = $GLOBALS['meta'][$m]; } return $valeurs; } function formulaires_configurer_redacteurs_traiter_dist() { $res = array('editable' => true); // Modification du reglage accepter_inscriptions => vider le cache // (pour repercuter la modif sur le panneau de login) if (($i = _request('accepter_inscriptions') and $i != $GLOBALS['meta']['accepter_inscriptions']) ) { include_spip('inc/invalideur'); suivre_invalideur('1'); # tout effacer } foreach (array( 'accepter_inscriptions', ) as $m) { if (!is_null($v = _request($m))) { ecrire_meta($m, $v == 'oui' ? 'oui' : 'non'); } } $res['message_ok'] = _T('config_info_enregistree'); return $res; } configurer_langage.html000066600000002261152442521210011256 0ustar00<div class="formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}"> <h3 class='titrem'><:titre_config_langage:></h3> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [(#ENV{editable}) <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <div class="editer-groupe"> #SET{name,var_lang_ecrire}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:label_choix_langue:></label> [<span class='erreur_message'>(#GET{erreurs})</span>] [(#ENV{_langues}|afficher_langues_choix{#GET{name},#GET{name},#ENV{#GET{name}}})] </div> </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons'><span class='image_loading'> </span><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p> </div></form> ] </div>configurer_rubriques.html000066600000004451152442521210011704 0ustar00<div class="formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}"> <h3 class='titrem'><img src="#CHEMIN_IMAGE{rubrique-24.png}" class="cadre-icone" /><:icone_rubriques:></h3> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [(#ENV{editable}) <p><:config_activer_champs:></p> <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <div class="editer-groupe"> #SET{name,rubriques_descriptif}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer long_label editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:info_descriptif:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_oui" value="oui" [(#ENV{#GET{name}}|=={oui}|oui)checked="checked"] /><label for="#GET{name}_oui"><:item_oui:></label> <input type="radio" name="#GET{name}" id="#GET{name}_non" value="non" [(#ENV{#GET{name}}|=={oui}|non)checked="checked"] /><label for="#GET{name}_non"><:item_non:></label> </div> </div> #SET{name,rubriques_texte}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer long_label editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:info_texte:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<div class="choix"> <input type="radio" name="#GET{name}" id="#GET{name}_oui" value="oui" [(#ENV{#GET{name}}|=={oui}|oui)checked="checked"] /><label for="#GET{name}_oui"><:item_oui:></label> <input type="radio" name="#GET{name}" id="#GET{name}_non" value="non" [(#ENV{#GET{name}}|=={oui}|non)checked="checked"] /><label for="#GET{name}_non"><:item_non:></label> </div> </div> </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons'><span class='image_loading'> </span><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p> </div></form> ] </div>inc-apercu-logo.html000066600000001250152442521210010416 0ustar00<div class="apercu"> [<div class="spip_logo"><a href="#ENV{logo}" class='mediabox'>(#ENV{logo}|image_reduire{[(#ENV{_options}|table_valeur{image_reduire}|sinon{170})]}|inserer_attribut{alt,#ENV{quoi,logo_on}})</a></div>] #SET{largeur,#ENV{logo}|largeur} #SET{hauteur,#ENV{logo}|hauteur} [<div class="titre">(#ENV{titre,''})</div>] <div class="taille"><:info_largeur_vignette{largeur_vignette=#GET{largeur},hauteur_vignette=#GET{hauteur}}:></div> [(#ENV{editable}|oui) <input type='submit' class='submit supprimer' id="supprimer_#ENV{quoi,logo_on}_#ENV{objet}_#ENV{id_objet}" name="supprimer_#ENV{quoi,logo_on}" value='<:lien_supprimer|ucfirst|attribut_html:>' /> ] </div>editer_rubrique.html000066600000005221152442521210010626 0ustar00<div class='formulaire_spip formulaire_editer formulaire_editer_rubrique formulaire_editer_rubrique-#ENV{id_rubrique,nouveau}'> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV**{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [(#ENV{editable}) <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <div class="editer-groupe"> <div class="editer editer_titre obligatoire[ (#ENV**{erreurs}|table_valeur{titre}|oui)erreur]"> <label for="titre"><:info_titre:><em class="aide">#AIDER{titre}</em></label>[ <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{titre})</span> ]<input type='text' class='text' name='titre' id='titre' value="[(#ENV**{titre,''})]" placeholder="<:titre_nouvelle_rubrique|attribut_html:>" /> </div> [<div class="editer editer_parent[ (#ENV**{erreurs}|table_valeur{id_parent}|oui)erreur]"> <label for="id_parent"><:titre_cadre_interieur_rubrique:><em class="aide">#AIDER{id_parent}</em></label>[ <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{id_parent})</span> ] (#VAL|chercher_rubrique{[(#ENV{id_rubrique}|intval)],#ENV{id_parent},'rubrique',#ENV{id_secteur},#ENV**{config}|table_valeur{restreint},0,form_simple}) </div>] [(#ENV**{config}|table_valeur{rubriques_descriptif}|=={non}|?{#ENV**{descriptif,''},' '}|?{' '}) <div class="editer editer_descriptif[ (#ENV**{erreurs}|table_valeur{descriptif}|oui)erreur]"> <label for="descriptif"><:texte_descriptif_rapide:></label><div class='explication'><:entree_contenu_rubrique:></div>[ <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{descriptif})</span> ]<textarea name='descriptif' id='descriptif' rows='2' cols='40'>[(#ENV**{descriptif})]</textarea> </div>] [(#ENV**{config}|table_valeur{rubriques_texte}|=={non}|?{#ENV**{texte,''},' '}|?{' '}) <div class="editer editer_texte[ (#ENV**{erreurs}|table_valeur{texte}|oui)erreur]"> <label for="text_area"><:info_texte_explicatif:><em class="aide">#AIDER{text_area}</em></label>[ <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{texte})</span> ][(#ENV**{_texte_trop_long,''}) ]<textarea name='texte' id='text_area' rows='[(#ENV**{config}|table_valeur{lignes}|plus{2})]' cols='40'>[(#ENV**{texte})]</textarea> </div>] </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class="boutons"><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p> </div></form> ] </div> editer_rubrique.php000066600000013547152442521210010463 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ /** * Gestion du formulaire de d'édition de rubrique * * @package SPIP\Core\Rubriques\Formulaires **/ if (!defined('_ECRIRE_INC_VERSION')) { return; } include_spip('inc/actions'); include_spip('inc/editer'); /** * Chargement du formulaire d'édition d'une rubrique * * @see formulaires_editer_objet_charger() * * @param int|string $id_rubrique * Identifiant de la rubrique. 'new' pour une nouvelle rubrique * @param int $id_parent * Identifiant de la rubrique parente * @param string $retour * URL de redirection après le traitement * @param int $lier_trad * Identifiant éventuel d'une rubrique source de traduction * @param string $config_fonc * Nom de la fonction ajoutant des configurations particulières au formulaire * @param array $row * Valeurs de la ligne SQL de la rubrique, si connue * @param string $hidden * Contenu HTML ajouté en même temps que les champs cachés du formulaire. * @return array * Environnement du formulaire **/ function formulaires_editer_rubrique_charger_dist( $id_rubrique = 'new', $id_parent = 0, $retour = '', $lier_trad = 0, $config_fonc = 'rubriques_edit_config', $row = array(), $hidden = '' ) { return formulaires_editer_objet_charger( 'rubrique', $id_rubrique, $id_parent, $lier_trad, $retour, $config_fonc, $row, $hidden ); } /** * Choix par défaut des options de présentation * * @param array $row * Valeurs de la ligne SQL d'une rubrique, si connue * return array * Configuration pour le formulaire */ function rubriques_edit_config($row) { global $spip_lang; $config = $GLOBALS['meta']; $config['lignes'] = 8; $config['langue'] = $spip_lang; $config['restreint'] = (!$GLOBALS['connect_toutes_rubriques']); return $config; } /** * Identifier le formulaire en faisant abstraction des paramètres qui * ne représentent pas l'objet édité * * @param int|string $id_rubrique * Identifiant de la rubrique. 'new' pour une nouvelle rubrique * @param int $id_parent * Identifiant de la rubrique parente * @param string $retour * URL de redirection après le traitement * @param int $lier_trad * Identifiant éventuel d'une rubrique source de traduction * @param string $config_fonc * Nom de la fonction ajoutant des configurations particulières au formulaire * @param array $row * Valeurs de la ligne SQL de la rubrique, si connue * @param string $hidden * Contenu HTML ajouté en même temps que les champs cachés du formulaire. * @return string * Hash du formulaire */ function formulaires_editer_rubrique_identifier_dist( $id_rubrique = 'new', $id_parent = 0, $retour = '', $lier_trad = 0, $config_fonc = 'rubriques_edit_config', $row = array(), $hidden = '' ) { return serialize(array(intval($id_rubrique), $lier_trad)); } /** * Vérifications du formulaire d'édition d'une rubrique * * @see formulaires_editer_objet_verifier() * * @param int|string $id_rubrique * Identifiant de la rubrique. 'new' pour une nouvelle rubrique * @param int $id_parent * Identifiant de la rubrique parente * @param string $retour * URL de redirection après le traitement * @param int $lier_trad * Identifiant éventuel d'une rubrique source de traduction * @param string $config_fonc * Nom de la fonction ajoutant des configurations particulières au formulaire * @param array $row * Valeurs de la ligne SQL de la rubrique, si connue * @param string $hidden * Contenu HTML ajouté en même temps que les champs cachés du formulaire. * @return array * Erreurs du formulaire **/ function formulaires_editer_rubrique_verifier_dist( $id_rubrique = 'new', $id_parent = 0, $retour = '', $lier_trad = 0, $config_fonc = 'rubriques_edit_config', $row = array(), $hidden = '' ) { // auto-renseigner le titre si il n'existe pas titre_automatique('titre', array('descriptif', 'texte')); // on ne demande pas le titre obligatoire : il sera rempli a la volee dans editer_rubrique si vide $erreurs = formulaires_editer_objet_verifier('rubrique', $id_rubrique, array()); return $erreurs; } /** * Traitements du formulaire d'édition d'une rubrique * * @see formulaires_editer_objet_traiter() * * @param int|string $id_rubrique * Identifiant de la rubrique. 'new' pour une nouvelle rubrique * @param int $id_parent * Identifiant de la rubrique parente * @param string $retour * URL de redirection après le traitement * @param int $lier_trad * Identifiant éventuel d'une rubrique source de traduction * @param string $config_fonc * Nom de la fonction ajoutant des configurations particulières au formulaire * @param array $row * Valeurs de la ligne SQL de la rubrique, si connue * @param string $hidden * Contenu HTML ajouté en même temps que les champs cachés du formulaire. * @return array * Retour des traitements **/ function formulaires_editer_rubrique_traiter_dist( $id_rubrique = 'new', $id_parent = 0, $retour = '', $lier_trad = 0, $config_fonc = 'rubriques_edit_config', $row = array(), $hidden = '' ) { return formulaires_editer_objet_traiter( 'rubrique', $id_rubrique, $id_parent, $lier_trad, $retour, $config_fonc, $row, $hidden ); } inc-logo_auteur.html000066600000000370152442521210010530 0ustar00#HTTP_HEADER{Content-type:text/html;charset=#ENV{charset}} [(#LOGO_AUTEUR|image_passe_partout{48,48}|image_recadre{48,48})] [(#REM) ce fichier est utilise par inc/identifier_login, pour l'identification ajax des auteurs dans le formulaire de login]rediriger_article.html000066600000003022152442521210011110 0ustar00<div class="formulaire_spip formulaire_#FORM formulaire_#FORM-#ENV{id}" id="formulaire_#FORM-#ENV{id}"> [<h3 class="titrem">[(#CHEMIN_IMAGE{site-24.png}|balise_img{'','cadre-icone'})]<:texte_article_virtuel:><br />(#ENV**{_afficher_url}|PtoBR)</h3>] [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV**{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV**{message_erreur})</p>] [(#ENV{editable}) <form method='post' action='#ENV{action}#formulaire_#FORM-#ENV{id}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <div class="editer-groupe"> #SET{name,redirection}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}-#ENV{id}"><:bouton_redirection:> #AIDER{artvirt}</label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<p class="explication"><:texte_reference_mais_redirige:></p> <input type="text" class="text" name="#GET{name}" id="#GET{name}-#ENV{id}" value="#ENV{#GET{name},'http://'}" onfocus="jQuery(this).parents('.editer-groupe').siblings('.boutons:hidden').show('fast');"/> </div> </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons' style="display:none;"><span class='image_loading'> </span><input type='submit' class='submit' value='<:bouton_changer:>' /></p> </div></form> ] </div> configurer_urls_propres_fonctions.php000066600000000130152442727200014324 0ustar00<?php if (!defined('_ECRIRE_INC_VERSION')) { return; } include_spip('urls/propres'); configurer_urls_propres.html000066600000006232152442727200012430 0ustar00<div class="formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}"> <h3 class='titrem'>[(#VAL{urls:titre_type_}|concat{#CONFIG{type_urls}}|_T)]</h3> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] #SET{fl,urls} <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <div class="editer-groupe"> #SET{name,URLS_PROPRES_MIN}#SET{obli,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer long_label editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:urls:label_urls_nb_min_car:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<input type="text" class="text" name="#GET{name}" value="#ENV*{#GET{name},#CONST{_URLS_PROPRES_MIN}}" id="#GET{name}"/> <p class="explication"><:urls:texte_urls_nb_min_car:></p> </div> #SET{name,URLS_PROPRES_MAX}#SET{obli,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer long_label editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:urls:label_urls_nb_max_car:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<input type="text" class="text" name="#GET{name}" value="#ENV*{#GET{name},#CONST{_URLS_PROPRES_MAX}}" id="#GET{name}"/> <p class="explication"><:urls:texte_urls_nb_max_car:></p> </div> #SET{name,url_propres_sep_id}#SET{obli,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer long_label editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:urls:label_url_sep_id:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<input type="text" class="text" name="#GET{name}" value="#ENV*{#GET{name},#CONST{_url_propres_sep_id}}" id="#GET{name}"/> </div> #SET{name,url_minuscules}#SET{obli,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer long_label editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> [ <span class='erreur_message'>(#GET{erreurs})</span> ] #SET{val,1} <div class="choix"> <input type="radio" class="radio" name="#GET{name}" id="#GET{name}_#GET{val}" value="#GET{val}"[(#ENV{#GET{name},#CONST{_url_minuscules}}|=={#GET{val}}|oui)checked="checked"] /> <label for="#GET{name}_#GET{val}"><:urls:label_url_minuscules_1:></label> </div> #SET{val,0} <div class="choix"> <input type="radio" class="radio" name="#GET{name}" id="#GET{name}_#GET{val}" value="#GET{val}"[(#ENV{#GET{name},#CONST{_url_minuscules}}|=={#GET{val}}|oui)checked="checked"] /> <label for="#GET{name}_#GET{val}"><:urls:label_url_minuscules_0:></label> </div> </div> </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons'><span class='image_loading'> </span><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p> </div></form> </div> configurer_urls.html000066600000004262152442727200010657 0ustar00<div class="formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}"> <h3 class='titrem'>[(#CHEMIN_IMAGE{url-24.png}|balise_img{'','cadre-icone'})]<:urls:titre_type_urls:></h3> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] [(#ENV{editable}) #SET{fl,urls} <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <fieldset> <legend><:urls:titre_type_urls:></legend> <div class="editer-groupe"> #SET{htaccess,'<tt>.htaccess</tt>'} #SET{name,type_urls}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label><:urls:texte_type_urls:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<p class="explication"><:urls:texte_type_urls_attention{htaccess=#GET{htaccess}}:></p> [(#ENV*{_urls_dispos}|type_url_choisir{#GET{name},#ENV{#GET{name}}})] </div> </div> </fieldset> <fieldset> <legend><:urls:titre_gestion_des_urls:></legend> <p><:urls:explication_editer:></p> <div class="editer-groupe"> <!--EX10--> #SET{name,urls_activer_controle}#SET{obli,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> [ <span class='erreur_message'>(#GET{erreurs})</span> ] #SET{val,oui} <div class="choix"> <input type="checkbox" class="checkbox" name="#GET{name}" id="#GET{name}_#GET{val}" value="#GET{val}"[(#GET{val}|=={#ENV{#GET{name}}}|oui)checked="checked"] /> <label for="#GET{name}_#GET{val}">[(#GET{fl}|concat{':label_',#GET{name},'_',#GET{val}}|_T)]</label> </div> </div> </div> </fieldset> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons'><span class='image_loading'> </span><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p> </div></form> ] </div> editer_url_objet.html000066600000002370152442727200010766 0ustar00#INCLURE{fond=prive/objets/liste/urls,type=#ENV{_objet},id_objet=#ENV{_id_objet},ajax} [<div class="formulaire_spip formulaire_editer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}"> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] (#ENV{editable}) <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE #SET{fl,urls} <div class="editer-groupe"> #SET{name,url}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}#SET{obli,'obligatoire'} <div class="editer editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:urls:label_url:></label> [<span class='erreur_message'>(#GET{erreurs})</span>] <input type="text" class="text" name="#GET{name}" id="#GET{name}" size="40" value="#ENV{#GET{name}}" /> </div> </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons'><span class='image_loading'></span><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p> </div></form> </div>]editer_url_objet.php000066600000006740152442727200010616 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined('_ECRIRE_INC_VERSION')) { return; } /** * Chargement des donnees du formulaire * * @param string $type * @param int $id * @return array */ function formulaires_editer_url_objet_charger_dist($type, $id) { $valeurs = array('url' => '', '_objet' => $type, '_id_objet' => $id); return $valeurs; } /** * Verifier la saisie de l'URL * on peut prefixer par une langue au format * fr:Mon-URL-fr * en:My-english-url * pour specifier la langue de l'URL (mais il faut que le module d'URL la prenne en charge) * @param $type * @param $id * @return array */ function formulaires_editer_url_objet_verifier_dist($type, $id) { $erreurs = array(); include_spip('action/editer_url'); $langue = ''; if (!$url = _request('url')) { $erreurs['url'] = _T('info_obligatoire'); } else { if (preg_match(";^([a-z_]{2,9}):;", $url, $m) and url_verifier_langue($m[1])) { $langue = trim($m[1]); $url = substr($url, strlen($m[0])); } $type_urls = (isset($GLOBALS['type_urls']) ? $GLOBALS['type_urls'] : $GLOBALS['meta']['type_urls']); if ($type_urls == 'arbo' and strpos($url, '/') !== false) { $url = explode('/', $url); if (count($url) > 2) { $erreurs['url'] = _T('urls:erreur_arbo_2_segments_max'); } else { foreach ($url as $u) { $url_clean[] = url_nettoyer($u, 255); } $url = implode('/', $url); $url_clean = implode('/', $url_clean); } } else { $url_clean = url_nettoyer($url, 255); } if (!isset($erreurs['url']) and $url != $url_clean) { set_request('url', ($langue?"$langue:":"") . $url_clean); $erreurs['url'] = _T('urls:verifier_url_nettoyee'); } } return $erreurs; } /** * Traitement * * @param string $type * @param int $id * @return array */ function formulaires_editer_url_objet_traiter_dist($type, $id) { $valeurs = array('editable' => true); include_spip('action/editer_url'); $url = _request('url'); $langue = ''; if (preg_match(";^([a-z_]{2,9}):;", $url, $m) and url_verifier_langue($m[1])) { $langue = trim($m[1]); $url = substr($url, strlen($m[0])); } // les urls manuelles sont toujours permanentes $set = array('url' => $url, 'type' => $type, 'id_objet' => $id, 'perma' => 1, 'langue' => $langue); $type_urls = (isset($GLOBALS['type_urls']) ? $GLOBALS['type_urls'] : $GLOBALS['meta']['type_urls']); if (include_spip("urls/$type_urls") and function_exists($renseigner_url = "renseigner_url_$type_urls") and $r = $renseigner_url($type, $id) and isset($r['parent']) ) { $set['id_parent'] = $r['parent']; } $separateur = "-"; if (defined('_url_sep_id')) { $separateur = _url_sep_id; } if (url_insert($set, false, $separateur)) { set_request('url'); $valeurs['message_ok'] = _T("urls:url_ajoutee"); } else { $valeurs['message_erreur'] = _T("urls:url_ajout_impossible"); } return $valeurs; } configurer_urls_arbo.html000066600000006167152442727200011670 0ustar00<div class="formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}"> <h3 class='titrem'><:urls:titre_type_arbo:></h3> [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] #SET{fl,urls} <form method='post' action='#ENV{action}'><div> [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ] #ACTION_FORMULAIRE <div class="editer-groupe"> #SET{name,URLS_ARBO_MIN}#SET{obli,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer long_label editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:urls:label_urls_nb_min_car:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<input type="text" class="text" name="#GET{name}" value="#ENV*{#GET{name},#CONST{_URLS_ARBO_MIN}}" id="#GET{name}"/> <p class="explication"><:urls:texte_urls_nb_min_car:></p> </div> #SET{name,URLS_ARBO_MAX}#SET{obli,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer long_label editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:urls:label_urls_nb_max_car:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<input type="text" class="text" name="#GET{name}" value="#ENV*{#GET{name},#CONST{_URLS_ARBO_MAX}}" id="#GET{name}"/> <p class="explication"><:urls:texte_urls_nb_max_car:></p> </div> #SET{name,url_arbo_sep_id}#SET{obli,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer long_label editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> <label for="#GET{name}"><:urls:label_url_sep_id:></label>[ <span class='erreur_message'>(#GET{erreurs})</span> ]<input type="text" class="text" name="#GET{name}" value="#ENV*{#GET{name},#CONST{_url_arbo_sep_id}}" id="#GET{name}"/> </div> #SET{name,url_arbo_minuscules}#SET{obli,''}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}} <div class="editer long_label editer_[(#GET{name})][ (#GET{obli})][ (#GET{erreurs}|oui)erreur]"> [ <span class='erreur_message'>(#GET{erreurs})</span> ] #SET{val,1} <div class="choix"> <input type="radio" class="radio" name="#GET{name}" id="#GET{name}_#GET{val}" value="#GET{val}"[(#ENV{#GET{name},#CONST{_url_arbo_minuscules}}|=={#GET{val}}|oui)checked="checked"] /> <label for="#GET{name}_#GET{val}"><:urls:label_url_minuscules_1:></label> </div> #SET{val,0} <div class="choix"> <input type="radio" class="radio" name="#GET{name}" id="#GET{name}_#GET{val}" value="#GET{val}"[(#ENV{#GET{name},#CONST{_url_arbo_minuscules}}|=={#GET{val}}|oui)checked="checked"] /> <label for="#GET{name}_#GET{val}"><:urls:label_url_minuscules_0:></label> </div> </div> </div> [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ] <!--extra--> <p class='boutons'><span class='image_loading'> </span><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p> </div></form> </div> configurer_urls_arbo_fonctions.php000066600000000125152442727200013561 0ustar00<?php if (!defined('_ECRIRE_INC_VERSION')) { return; } include_spip('urls/arbo'); configurer_urls.php000066600000004625152442727200010505 0ustar00<?php /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * \***************************************************************************/ if (!defined("_ECRIRE_INC_VERSION")) { return; } function formulaires_configurer_urls_charger_dist() { if (isset($GLOBALS['type_urls'])) // priorité au fichier d'options { return "<p>" . _T('urls:erreur_config_url_forcee') . "</p>"; } $valeurs = array( 'type_urls' => $GLOBALS['meta']['type_urls'], 'urls_activer_controle' => (isset($GLOBALS['meta']['urls_activer_controle']) ? $GLOBALS['meta']['urls_activer_controle'] : ''), '_urls_dispos' => type_urls_lister(), ); return $valeurs; } function formulaires_configurer_urls_traiter_dist() { ecrire_meta('type_urls', _request('type_urls')); ecrire_meta('urls_activer_controle', _request('urls_activer_controle') ? 'oui' : 'non'); return array('message_ok' => _T('config_info_enregistree'), 'editable' => true); } function type_url_choisir($liste, $name, $selected) { $res = '<dl class="choix">'; foreach ($liste as $url) { $k = $url[0]; $res .= '<dt>' . '<input type="radio" name="' . $name . '" id="' . $name . '_' . $k . '" value="' . $k . '"' . ($selected == $k ? ' checked="checked"' : '') . '/>' . '<label for="' . $name . '_' . $k . '">' . $url[1] . '</label></dt>' . '<dd><tt>' . $url[2] . '</tt></dd>' . "\n"; } $res .= "</dl>"; return $res; } function type_urls_lister() { $dispo = array(); foreach (find_all_in_path('urls/', '\w+\.php$', array()) as $f) { $r = basename($f, '.php'); if ($r == 'index' or strncmp('generer_', $r, 8) == 0 or $r == "standard") { continue; } include_once $f; $exemple = 'URLS_' . strtoupper($r) . '_EXEMPLE'; $exemple = defined($exemple) ? constant($exemple) : '?'; $dispo[_T("urls:titre_type_$r")] = array($r, _T("urls:titre_type_$r"), $exemple); } ksort($dispo); return $dispo; }
/home/atelierpru/provence/52177/././formulaires.tar