branchons le contact.
@ -0,0 +1,61 @@
|
||||
* text=auto !eol
|
||||
action/effacer_configuration.php -text
|
||||
action/supprimer_message.php -text
|
||||
base/contact_installation.php -text
|
||||
base/contact_tables.php -text
|
||||
/contact_options.php -text
|
||||
/contact_pipelines.php -text
|
||||
contenu/page-contact.html -text
|
||||
contenu/page-contact.xml -text
|
||||
exec/contact_messages.php -text
|
||||
exec/contact_select_message.php -text
|
||||
exec/contact_un_message.php -text
|
||||
fonds/cfg_contact.html -text
|
||||
formulaires/configurer_contact.html -text
|
||||
formulaires/contact.html -text
|
||||
formulaires/contact.php -text
|
||||
formulaires/contact_champ_civilite.html -text
|
||||
formulaires/contact_champ_infolettre.html -text
|
||||
formulaires/contact_champ_mail.html -text
|
||||
formulaires/contact_champ_texte.html -text
|
||||
icones_barre/contact.png -text
|
||||
images/contact-128.png -text
|
||||
images/contact-20.png -text
|
||||
images/contact-24.png -text
|
||||
images/img1.png -text
|
||||
images/img10.png -text
|
||||
images/img11.png -text
|
||||
images/img12.png -text
|
||||
images/img13.png -text
|
||||
images/img14.png -text
|
||||
images/img15.png -text
|
||||
images/img2.png -text
|
||||
images/img3.png -text
|
||||
images/img4.png -text
|
||||
images/img5.png -text
|
||||
images/img6.png -text
|
||||
images/img7.png -text
|
||||
images/img8.png -text
|
||||
images/img9.png -text
|
||||
lang/contact.xml -text
|
||||
lang/contact_ar.php -text
|
||||
lang/contact_ca.php -text
|
||||
lang/contact_de.php -text
|
||||
lang/contact_en.php -text
|
||||
lang/contact_es.php -text
|
||||
lang/contact_fr.php -text
|
||||
lang/contact_fr_tu.php -text
|
||||
lang/contact_pt_br.php -text
|
||||
lang/contact_sk.php -text
|
||||
lang/public_fr.php -text
|
||||
menus/contact.html -text
|
||||
menus/contact.xml -text
|
||||
modeles/formulaire_contact.yaml -text
|
||||
noisettes/formulaire_contact.html -text
|
||||
noisettes/formulaire_contact.yaml -text
|
||||
/plugin.xml -text
|
||||
prive/contenu/message_contact.html -text
|
||||
prive/exec/configurer_contact.html -text
|
||||
prive/infos/message_contact.html -text
|
||||
prive/style_prive_plugin_contact.html -text
|
||||
prive/themes/spip/images/contact-20.png -text
|
@ -0,0 +1,13 @@
|
||||
<?php
|
||||
if (!defined("_ECRIRE_INC_VERSION")) return;
|
||||
function action_effacer_configuration_dist(){
|
||||
|
||||
$securiser_action = charger_fonction('securiser_action', 'inc');
|
||||
$arg = $securiser_action();
|
||||
|
||||
if (!autoriser('configurer'))
|
||||
return false;
|
||||
|
||||
if($arg == 'contact'){effacer_meta($arg);}else{return false;}
|
||||
}
|
||||
?>
|
@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
if (!defined("_ECRIRE_INC_VERSION")) return;
|
||||
|
||||
include_spip('inc/filtres');
|
||||
|
||||
/**
|
||||
* Suppression d'un message du formulaire de contact
|
||||
*/
|
||||
function action_supprimer_message() {
|
||||
|
||||
$securiser_action = charger_fonction('securiser_action', 'inc');
|
||||
$id_message = $securiser_action();
|
||||
/**
|
||||
* Vérifions si nous avons un document
|
||||
*/
|
||||
if($docs = sql_select('id_document','spip_documents_liens','id_objet='.intval($id_message).' AND objet="message"')){
|
||||
include_spip('action/documenter');
|
||||
while($id_doc = sql_fetch($docs)){
|
||||
supprimer_lien_document($id_doc['id_document'], "message", $id_message);
|
||||
}
|
||||
}
|
||||
sql_delete("spip_messages", "id_message=".sql_quote($id_message));
|
||||
sql_delete("spip_auteurs_messages", "id_message=".sql_quote($id_message));
|
||||
}
|
||||
|
||||
?>
|
@ -0,0 +1,72 @@
|
||||
<?php
|
||||
include_spip('inc/meta');
|
||||
|
||||
// Installation et mise à jour
|
||||
function contact_upgrade($nom_meta_version_base, $version_cible){
|
||||
|
||||
$version_actuelle = '0.0';
|
||||
if (
|
||||
(!isset($GLOBALS['meta'][$nom_meta_version_base]))
|
||||
|| (($version_actuelle = $GLOBALS['meta'][$nom_meta_version_base]) != $version_cible)
|
||||
){
|
||||
|
||||
if (version_compare($version_actuelle,'0.0','=')){
|
||||
// Création des tables
|
||||
include_spip('base/create');
|
||||
include_spip('base/abstract_sql');
|
||||
creer_base();
|
||||
|
||||
echo "Création des tables de messageries si inexistantes.<br/>";
|
||||
ecrire_meta($nom_meta_version_base, $version_actuelle=$version_cible, 'non');
|
||||
}
|
||||
|
||||
/*if (version_compare($version_actuelle,'0.5','<')){
|
||||
include_spip('base/create');
|
||||
include_spip('base/abstract_sql');
|
||||
|
||||
// Modification de contact
|
||||
sql_alter('');
|
||||
|
||||
// On change la version
|
||||
echo "Mise à jour du plugin contact en version 0.5<br/>";
|
||||
ecrire_meta($nom_meta_version_base, $version_actuelle=$version_cible, 'non');
|
||||
}*/
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Désinstallation
|
||||
function contact_vider_tables($nom_meta_version_base){
|
||||
|
||||
include_spip('base/abstract_sql');
|
||||
|
||||
// On recupere tous les messages de contact
|
||||
$messages = sql_allfetsel(
|
||||
'id_message',
|
||||
'spip_messages',
|
||||
'type = '.sql_quote('contac')
|
||||
);
|
||||
$messages = array_map('reset', $messages);
|
||||
$in = sql_in(
|
||||
'id_messages',
|
||||
$messages
|
||||
);
|
||||
|
||||
// On supprime les messages
|
||||
sql_delete(
|
||||
'spip_messages',
|
||||
'type = '.sql_quote('contact')
|
||||
);
|
||||
// On supprime les liens
|
||||
sql_delete(
|
||||
'spip_auteurs_messages',
|
||||
$in
|
||||
);
|
||||
|
||||
// On efface la version entregistrée
|
||||
effacer_meta($nom_meta_version_base);
|
||||
|
||||
}
|
||||
|
||||
?>
|
@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
if (!defined("_ECRIRE_INC_VERSION")) return;
|
||||
|
||||
function contact_declarer_tables_principales($tables_principales) {
|
||||
// On vérifie si la table n'a pas déjà été déclarée.
|
||||
if(!$tables_principales['spip_messages']) {
|
||||
// déclaration de la table spip_messages
|
||||
$spip_messages = array(
|
||||
"id_message" => "bigint(21) NOT NULL",
|
||||
"titre" => "text DEFAULT '' NOT NULL",
|
||||
"texte" => "longtext DEFAULT '' NOT NULL",
|
||||
"type" => "varchar(6) DEFAULT '' NOT NULL",
|
||||
"date_heure" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
|
||||
"date_fin" => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
|
||||
"rv" => "varchar(3) DEFAULT '' NOT NULL",
|
||||
"statut" => "varchar(6) DEFAULT '0' NOT NULL",
|
||||
"id_auteur" => "bigint(21) NOT NULL",
|
||||
"maj" => "TIMESTAMP");
|
||||
|
||||
$spip_messages_key = array(
|
||||
"PRIMARY KEY" => "id_message",
|
||||
"KEY id_auteur" => "id_auteur");
|
||||
|
||||
$tables_principales['spip_messages'] = array(
|
||||
'field' => &$spip_messages,
|
||||
'key' => &$spip_messages_key);
|
||||
}
|
||||
return $tables_principales;
|
||||
}
|
||||
|
||||
|
||||
function contact_declarer_tables_interfaces($interface){
|
||||
$interface['table_des_tables']['messages'] = 'messages';
|
||||
$interface['tables_jointures']['spip_messages'][] = 'messages';
|
||||
return $interface;
|
||||
}
|
||||
|
||||
|
||||
function contact_declarer_tables_auxiliaires($tables_auxiliaires){
|
||||
// On vérifie si la table n'a pas déjà été déclarée.
|
||||
if(!$tables_auxiliaires['spip_auteurs_messages']) {
|
||||
// Déclaration de la table spip_auteurs_messages
|
||||
$spip_auteurs_messages = array(
|
||||
"id_auteur" => "bigint(21) DEFAULT '0' NOT NULL",
|
||||
"id_message" => "bigint(21) DEFAULT '0' NOT NULL",
|
||||
"vu" => "CHAR (3)");
|
||||
|
||||
$spip_auteurs_messages_key = array(
|
||||
"PRIMARY KEY" => "id_auteur, id_message",
|
||||
"KEY id_message" => "id_message");
|
||||
|
||||
$tables_auxiliaires['spip_auteurs_messages'] = array(
|
||||
'field' => &$spip_auteurs_messages,
|
||||
'key' => &$spip_auteurs_messages_key);
|
||||
}
|
||||
return $tables_auxiliaires;
|
||||
}
|
||||
?>
|
@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
if (!defined("_ECRIRE_INC_VERSION")) return;
|
||||
|
||||
// Minima requis pour le champs texte; a definir dans un mes_options
|
||||
//define('_TEXTE_MIN','3');
|
||||
|
||||
// Déclaration du pipeline
|
||||
if (!isset($GLOBALS['spip_pipeline']['contact_infos_supplementaires']))
|
||||
$GLOBALS['spip_pipeline']['contact_infos_supplementaires'] = '';
|
||||
|
||||
function contact_infos_supplementaires(){
|
||||
$champs = array(
|
||||
'civilite' => _T('contact:champ_civilite'),
|
||||
'prenom' => _T('contact:champ_prenom'),
|
||||
'nom' => _T('contact:champ_nom'),
|
||||
'organisation' => _T('contact:champ_organisation'),
|
||||
'adresse' => _T('contact:champ_adresse'),
|
||||
'code_postal' => _T('contact:champ_code_postal'),
|
||||
'ville' => _T('contact:champ_ville'),
|
||||
'etat' => _T('contact:champ_etat'),
|
||||
'pays' => _T('contact:champ_pays'),
|
||||
'telephone' => _T('contact:champ_telephone'),
|
||||
'portable' => _T('contact:champ_portable'),
|
||||
'mail' => _T('contact:champ_mail'),
|
||||
'sujet' => _T('contact:champ_sujet'),
|
||||
'texte' => _T('contact:champ_texte'),
|
||||
'infolettre' => _T('contact:champ_infolettre')
|
||||
);
|
||||
|
||||
$champs = pipeline('contact_infos_supplementaires', $champs);
|
||||
return $champs;
|
||||
}
|
||||
|
||||
?>
|
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
if (!defined("_ECRIRE_INC_VERSION")) return;
|
||||
|
||||
/**
|
||||
* Pipeline jqueryui_forcer pour demander au plugin l'insertion des scripts pour .sortable()
|
||||
*
|
||||
* @param array $plugins
|
||||
* @return array
|
||||
*/
|
||||
function contact_jqueryui_forcer($plugins){
|
||||
$plugins[] = "jquery.ui.core";
|
||||
$plugins[] = "jquery.ui.widget";
|
||||
$plugins[] = "jquery.ui.mouse";
|
||||
$plugins[] = "jquery.ui.sortable";
|
||||
return $plugins;
|
||||
}
|
||||
|
||||
?>
|
@ -0,0 +1,12 @@
|
||||
[(#PLUGIN{zvide}|non)
|
||||
[(#REM) Fil d'Ariane ]
|
||||
<p id="hierarchie"><a href="#URL_SITE_SPIP/"><:accueil_site:></a><span class="sep"> > </span><strong class="on"><:contact:titre:></strong></p>
|
||||
|
||||
<div class="contenu-principal">
|
||||
<div class="cartouche">
|
||||
</div>
|
||||
<div class="formulaire_conctact ajax">
|
||||
#FORMULAIRE_CONTACT
|
||||
</div>
|
||||
</div>
|
||||
]
|
@ -0,0 +1,5 @@
|
||||
<page>
|
||||
<nom><:contact:titre_court:></nom>
|
||||
<description><:contact:description_page-contact:></description>
|
||||
<icon>images/contact-24.png</icon>
|
||||
</page>
|
@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
include_spip('inc/presentation');
|
||||
include_spip('exec/contact_select_message');
|
||||
|
||||
function exec_contact_messages() {
|
||||
|
||||
global $connect_id_auteur, $connect_statut, $spip_lang_rtl;
|
||||
|
||||
$commencer_page = charger_fonction('commencer_page', 'inc');
|
||||
echo $commencer_page("Messages de contact", "forum", "contact_messages");
|
||||
|
||||
echo debut_gauche("contact_messages",true);
|
||||
|
||||
echo debut_boite_info(true);
|
||||
|
||||
echo _T('contact:msg_accueil');
|
||||
|
||||
echo fin_boite_info(true);
|
||||
|
||||
|
||||
echo debut_droite("contact_messages", true);
|
||||
|
||||
$messages_vus = array();
|
||||
|
||||
$nouveaux_messages = afficher_ses_messages(_T('contact:msg_nouveaux'), ", spip_auteurs_messages AS lien", "lien.id_auteur=$connect_id_auteur AND vu='non' AND statut='publie' AND type='contac' AND lien.id_message=messages.id_message", $messages_vus, true, false);
|
||||
|
||||
if ($nouveaux_messages)
|
||||
echo $nouveaux_messages;
|
||||
else {
|
||||
echo debut_boite_info(true);
|
||||
echo _T('contact:msg_pas_nouveaux');
|
||||
echo fin_boite_info(true);
|
||||
}
|
||||
|
||||
|
||||
echo afficher_ses_messages('<b>' . _T('contact:msg_lus') . '</b>', ", spip_auteurs_messages AS lien", "lien.id_auteur=$connect_id_auteur AND vu!='non' AND statut='publie' AND type='contac' AND lien.id_message=messages.id_message", $messages_vus, true, false);
|
||||
|
||||
|
||||
echo fin_gauche(), fin_page();
|
||||
|
||||
}
|
||||
?>
|
@ -0,0 +1,68 @@
|
||||
<?php
|
||||
|
||||
if (!defined("_ECRIRE_INC_VERSION")) return;
|
||||
|
||||
// $messages_vus en reference pour interdire l'affichage de message en double
|
||||
|
||||
|
||||
function afficher_ses_messages($titre, $from, $where, &$messages_vus, $afficher_auteurs = false, $important = false) {
|
||||
|
||||
$requete = array('SELECT' => 'messages.id_message, messages.date_heure, messages.date_fin, messages.titre, messages.type, messages.rv', 'FROM' => "spip_messages AS messages$from", 'WHERE' => $where .(!$messages_vus ? '' : ' AND messages.id_message NOT IN ('.join(',', $messages_vus).')'), 'ORDER BY'=> 'date_heure DESC');
|
||||
|
||||
// Même si on ne s'en sert pas (car presenter_liste le demande)
|
||||
$styles = array(array('arial2'), array('arial1', 20), array('arial1', 120));
|
||||
|
||||
$presenter_liste = charger_fonction('presenter_liste', 'inc');
|
||||
$tmp_var = 't_' . substr(md5(join('', $requete)), 0, 4);
|
||||
|
||||
// cette variable est passe par reference et recevra les valeurs du champ indique
|
||||
$les_messages = 'id_message';
|
||||
$res = $presenter_liste($requete, 'presenter_message_boucles', $les_messages, $afficher_auteurs, $important, $styles, $tmp_var, $titre, find_in_path('contact-24.png', 'images/', false));
|
||||
$messages_vus = array_merge($messages_vus, $les_messages);
|
||||
|
||||
if (!$res) return '';
|
||||
else
|
||||
return
|
||||
(debut_cadre_couleur('',true)
|
||||
. $res
|
||||
. fin_cadre_couleur(true));
|
||||
}
|
||||
|
||||
function presenter_message_boucles($row, $afficher_auteurs)
|
||||
{
|
||||
global $connect_id_auteur, $spip_lang_left, $spip_lang_rtl;
|
||||
|
||||
$vals = array();
|
||||
|
||||
$id_message = $row['id_message'];
|
||||
$date = $row["date_heure"];
|
||||
$titre = sinon($row['titre'], _T('ecrire:info_sans_titre'));
|
||||
|
||||
//Titre
|
||||
$s = "<a href='" . generer_url_ecrire("contact_un_message","id_message=$id_message") . "' style='display: block;'>";
|
||||
$s .= typo($titre)."</a>";
|
||||
$vals[] = $s;
|
||||
|
||||
// Auteurs
|
||||
if ($afficher_auteurs) {
|
||||
$auteur = sql_fetsel(
|
||||
"auteur.id_auteur, auteur.nom, auteur.email",
|
||||
"spip_auteurs AS auteur, spip_messages AS message",
|
||||
"message.id_message=$id_message AND auteur.id_auteur=message.id_auteur"
|
||||
);
|
||||
|
||||
$id_auteur = $auteur['id_auteur'];
|
||||
$s = "<a href='" . generer_url_ecrire("auteur_infos","id_auteur=$id_auteur") . "'>".sinon(typo($auteur['nom']), $auteur['email'])."</a>";
|
||||
$vals[] = $s;
|
||||
}
|
||||
|
||||
// Date
|
||||
$s = affdate($date);
|
||||
$s = "<span style='color: #999999'>$s</span>";
|
||||
|
||||
$vals[] = $s;
|
||||
|
||||
return $vals;
|
||||
}
|
||||
|
||||
?>
|
@ -0,0 +1,8 @@
|
||||
<!-- titre=<:contact:titre:> -->
|
||||
<!-- icone=images/contact-24.png -->
|
||||
<!-- logo=images/contact-128.png -->
|
||||
|
||||
#CACHE{0}
|
||||
<div class="ajax">
|
||||
#FORMULAIRE_CONFIGURER_CONTACT
|
||||
</div>
|
@ -0,0 +1,300 @@
|
||||
<!-- nom=contact -->
|
||||
<div class="formulaire_spip formulaire_editer formulaire_#FORM">
|
||||
|
||||
[<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{#ENV{action}}
|
||||
<fieldset>
|
||||
<legend><:contact:configuration_destinataires:></legend>
|
||||
<ul class="decaler">
|
||||
<li class="editer_choix_destinataires haut pleine_largeur">
|
||||
<label><:contact:configuration_destinataires_explication:></label>
|
||||
<B_auteurs>
|
||||
<select name="choix_destinataires[]" id="choix_destinataires" multiple="multiple" size="[(#GRAND_TOTAL|<{26}|?{#GRAND_TOTAL,25})]">
|
||||
<BOUCLE_auteurs(AUTEURS){tous}{email!=''}{par nom}>
|
||||
<option value="#ID_AUTEUR" [(#ID_AUTEUR|in_array{#ENV{choix_destinataires,#ARRAY}}|oui)selected="selected"]>
|
||||
[(#NOM)] (##ID_AUTEUR - [(#ARRAY{0minirezo,info_administrateurs,1comite,info_redacteurs,6forum,info_visiteurs,5poubelle,texte_statut_poubelle,contact,contact:titre}|table_valeur{#STATUT}|_T)[ (#NOM|non)#EMAIL]])
|
||||
</option>
|
||||
</BOUCLE_auteurs>
|
||||
</select>
|
||||
</B_auteurs>
|
||||
</li>
|
||||
<li class="editer_type_choix haut pleine_largeur">
|
||||
<label><:contact:configuration_regle_liste_explication:></label>
|
||||
<div class="choix">
|
||||
<input type="radio" name="type_choix" id="tous" class="radio" value="tous"[ checked="checked"(#ENV{type_choix}|=={tous}|ou{#ENV{type_choix}|non}|oui)] />
|
||||
<label for="tous"><:contact:configuration_destinataires_tous:></label>
|
||||
</div>
|
||||
<div class="choix">
|
||||
<input type="radio" name="type_choix" id="tous_ou" class="radio" value="tous_ou"[ checked="checked"(#ENV{type_choix}|=={tous_ou}|oui)] />
|
||||
<label for="tous_ou"><:contact:configuration_destinataires_tous_ou:></label>
|
||||
</div>
|
||||
<div class="choix">
|
||||
<input type="radio" name="type_choix" id="tous_et" class="radio" value="tous_et"[ checked="checked"(#ENV{type_choix}|=={tous_et}|oui)] />
|
||||
<label for="tous_et"><:contact:configuration_destinataires_tous_et:></label>
|
||||
</div>
|
||||
</li>
|
||||
<li class="editer_type_choix haut pleine_largeur">
|
||||
<div class="choix">
|
||||
<input type="radio" name="type_choix" id="un" class="radio" value="un"[ checked="checked"(#ENV{type_choix}|=={un}|oui)] />
|
||||
<label for="un"><:contact:configuration_destinataires_un:></label>
|
||||
</div>
|
||||
<div class="choix">
|
||||
<input type="radio" name="type_choix" id="un_ou" class="radio" value="un_ou"[ checked="checked"(#ENV{type_choix}|=={un_ou}|oui)] />
|
||||
<label for="un_ou"><:contact:configuration_destinataires_un_ou:></label>
|
||||
</div>
|
||||
<div class="choix">
|
||||
<input type="radio" name="type_choix" id="un_et" class="radio" value="un_et"[ checked="checked"(#ENV{type_choix}|=={un_et}|oui)] />
|
||||
<label for="un_et"><:contact:configuration_destinataires_un_et:></label>
|
||||
</div>
|
||||
</li>
|
||||
<li class="editer_type_choix haut pleine_largeur">
|
||||
<div class="choix">
|
||||
<input type="radio" name="type_choix" id="plusieurs" class="radio" value="plusieurs"[ checked="checked"(#ENV{type_choix}|=={plusieurs}|oui)] />
|
||||
<label for="plusieurs"><:contact:configuration_destinataires_plusieurs:></label>
|
||||
</div>
|
||||
<div class="choix">
|
||||
<input type="radio" name="type_choix" id="plusieurs_ou" class="radio" value="plusieurs_ou"[ checked="checked"(#ENV{type_choix}|=={plusieurs_ou}|oui)] />
|
||||
<label for="plusieurs_ou"><:contact:configuration_destinataires_plusieurs_ou:></label>
|
||||
</div>
|
||||
<div class="choix">
|
||||
<input type="radio" name="type_choix" id="plusieurs_et" class="radio" value="plusieurs_et"[ checked="checked"(#ENV{type_choix}|=={plusieurs_et}|oui)] />
|
||||
<label for="plusieurs_et"><:contact:configuration_destinataires_plusieurs_et:></label>
|
||||
</div>
|
||||
<div class="choix">
|
||||
<input type="checkbox" name="c" id="c" class="checkbox" value="c"[ (#ENV{c}|=={c}|oui)checked="checked"] />
|
||||
<label for="c"><:contact:preselection:></label>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
[(#REM)
|
||||
On récupère les champs possibles
|
||||
Mais on divise en deux :
|
||||
- d'abord les champs choisis
|
||||
- puis les champs qui restent
|
||||
]
|
||||
#SET{champs_possibles, #VAL{rien}|contact_infos_supplementaires}
|
||||
#SET{champs_choisis, #CONFIG{contact/champs,#ARRAY}|array_flip}
|
||||
#SET{champs,#GET{champs_choisis}|array_merge{#GET{champs_possibles}}}
|
||||
<fieldset>
|
||||
<legend><:contact:infos_collecte:></legend>
|
||||
<ol id="editer_champs" class="numeroter">
|
||||
<BOUCLE_champs(POUR){tableau #GET{champs}}>
|
||||
<li class="editer_champ pleine_largeur agrondir" title="<:contact:deplacement_possible:>" style="overflow:visible;">
|
||||
[(#CLE|match{mail|sujet|texte}|oui)
|
||||
<div class="choix">
|
||||
<input type="text" name="champs[(#VAL{[]}|html_entity_decode)]" id="champ_#CLE" class="text" style="display:none;" value="#CLE" readonly='readonly' />
|
||||
<input type="text" name="obligatoires[(#VAL{[]}|html_entity_decode)]" id="obli_#CLE" class="text" style="display:none;" value="#CLE" readonly='readonly' />
|
||||
<label for="champ_#CLE">#VALEUR</label>
|
||||
<label for="obli_#CLE"><em><:contact:champ_impose:></em></label>
|
||||
</div>
|
||||
][(#CLE|match{mail|sujet|texte}|non)
|
||||
<div class="choix">
|
||||
<input type="checkbox" name="champs[(#VAL{[]}|html_entity_decode)]" id="champ_#CLE" class="checkbox" value="#CLE"[ (#CLE|in_array{#ENV{champs,#ARRAY}}|oui)checked="checked"] />
|
||||
<label for="champ_#CLE">#VALEUR</label>
|
||||
</div>
|
||||
<div class="choix">
|
||||
<input type="checkbox" name="obligatoires[(#VAL{[]}|html_entity_decode)]" id="obli_#CLE" class="checkbox" value="#CLE"[ (#CLE|in_array{#ENV{obligatoires,#ARRAY}}|oui)checked="checked"] />
|
||||
<label for="obli_#CLE"><:contact:champ_obligatoire:></label>
|
||||
</div>
|
||||
]
|
||||
</li>
|
||||
</BOUCLE_champs>
|
||||
</ol>
|
||||
</fieldset>
|
||||
[(#PLUGIN{porte_plume,version}|>={1.5}|oui)
|
||||
<fieldset>
|
||||
<legend><:contact:configuration_champs_message:></legend>
|
||||
[<p class="attention">(#EVAL{PORTE_PLUME_PUBLIC}|non|ou{#CONFIG{barre_outils_public}|=={non}|oui})<:contact:configuration_barre_impossible:></p>]
|
||||
<ul>
|
||||
<li class="editer_barre">
|
||||
<label><:contact:configuration_champs_message_explication:></label>
|
||||
<div class="choix">
|
||||
<input type="radio" name="barre" id="no_b" class="radio" value="no_barre"[ checked="checked"(#ENV{barre}|=={no_barre}|ou{[(#CONFIG{contact/barre}|non)]}|oui)] />
|
||||
<label for="no_b"><:contact:configuration_no_barre:></label>
|
||||
</div>
|
||||
<div class="choix">
|
||||
<input type="radio" name="barre" id="bf" class="radio" value="inserer_barre_forum"[ checked="checked"(#ENV{barre}|=={inserer_barre_forum}|oui)] />
|
||||
<label for="bf"><:contact:configuration_barre_forum:></label>
|
||||
</div>
|
||||
<div class="choix">
|
||||
<input type="radio" name="barre" id="no_p" class="radio" value="no_previsualisation"[ checked="checked"(#ENV{barre}|=={no_previsualisation}|oui)] />
|
||||
<label for="no_p"><:contact:configuration_no_previsualisation:></label>
|
||||
</div>
|
||||
<div class="choix">
|
||||
<input type="radio" name="barre" id="b" class="radio" value=""[ checked="checked"(#ENV{barre}|non|et{[(#VAL{mail}|in_array{#CONFIG{contact/obligatoires,#ARRAY}}|oui)]})] />
|
||||
<label for="b"><:contact:configuration_barre_oui:></label>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
]
|
||||
<fieldset>
|
||||
<legend><:contact:configuration_pj:></legend>
|
||||
<ul>
|
||||
<li class="editer_autoriser_pj">
|
||||
[(#REM) : On teste si le plugin facteur est présent pour pourvoir envoyer les pièces jointes ]
|
||||
[(#PLUGIN{facteur}|oui)
|
||||
<div class="choix">
|
||||
<input type="checkbox" name="autoriser_pj" id="autoriser_pj" class="checkbox" value="true" [checked="checked"(#ENV{autoriser_pj}|=={true}|oui)] />
|
||||
<label for="autoriser_pj"><:contact:configuration_pj_autoriser:></label>
|
||||
</div>
|
||||
<label for="nb_max_pj"><:contact:configuration_pj_nb_max:></label>
|
||||
<select name="nb_max_pj" id="nb_max_pj">
|
||||
<option value="1" [selected="selected" (#ENV{nb_max_pj}|=={1}|oui)]>1</option>
|
||||
<option value="2" [selected="selected" (#ENV{nb_max_pj}|=={2}|oui)]>2</option>
|
||||
<option value="3" [selected="selected" (#ENV{nb_max_pj}|=={3}|oui)]>3</option>
|
||||
<option value="4" [selected="selected" (#ENV{nb_max_pj}|=={4}|oui)]>4</option>
|
||||
<option value="5" [selected="selected" (#ENV{nb_max_pj}|=={5}|oui)]>5</option>
|
||||
</select>
|
||||
]
|
||||
|
||||
[(#PLUGIN{facteur}|non)
|
||||
<p class="explication"><:contact:configuration_pj_facteur_absent:></p>
|
||||
]
|
||||
</li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend><:contact:champ_civilite:></legend>
|
||||
<ul>
|
||||
<li class="editer_champ_civi_mademoiselle">
|
||||
<p class="explication"><:contact:champ_civi_explication:></p>
|
||||
<div class="choix">
|
||||
<input type="checkbox" name="champ_civi_mademoiselle" id="champ_civi_mademoiselle" class="checkbox" value="true" [checked="checked"(#ENV{champ_civi_mademoiselle}|=={true}|oui)] />
|
||||
<label for="champ_civi_mademoiselle"><:contact:champ_civi_mademoiselle_ok:></label>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend><:contact:sauv_message:></legend>
|
||||
<ul>
|
||||
<li class="editer_sauvegarder_contacts">
|
||||
<p class="explication"><:contact:sauv_message_explication:></p>
|
||||
<div class="choix">
|
||||
<input type="checkbox" name="sauvegarder_contacts" id="sauvegarder_contacts" class="checkbox" value="true" [checked="checked"(#ENV{sauvegarder_contacts}|=={true}|oui)] />
|
||||
<label for="sauvegarder_contacts"><:contact:sauv_message_ok:></label>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
|
||||
<fieldset>
|
||||
<legend><:contact:configuration_intro:></legend>
|
||||
<ul>
|
||||
<li class="editer_texte pleine_largeur">
|
||||
<p class="explication"><:contact:configuration_intro_explication:></p>
|
||||
<textarea name="texte" id="texte" rows="10" cols="40">#ENV{texte}</textarea>
|
||||
</li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend><:contact:configuration_texteinfolettre:></legend>
|
||||
<ul>
|
||||
<li class="editer_texteinfolettre pleine_largeur">
|
||||
<p class="explication"><:contact:configuration_texteinfolettre_explication:></p>
|
||||
<textarea name="texteinfolettre" id="texteinfolettre" rows="2" cols="40">[(#ENV{texteinfolettre})]</textarea>
|
||||
</li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
<div class="boutons">
|
||||
<input type="submit" name="_cfg_ok" value="<:bouton_enregistrer:>" class="submit" />
|
||||
</div>
|
||||
</div></form>
|
||||
[ (#BOUTON_ACTION{<:contact:bouton_effacer:>,#URL_ACTION_AUTEUR{effacer_configuration,'contact',#SELF},ajax,<:contact:alerte_effacement:>})]
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
;(function($){
|
||||
var contact_sortable = function(){
|
||||
$('ol#editer_champs')
|
||||
.sortable({
|
||||
cursor : 'move',
|
||||
axis : 'y',
|
||||
cancel : 'input, label',
|
||||
forceHelperSize : true,
|
||||
forcePlaceholderSize : true,
|
||||
placeholder : 'cadre-couleur',
|
||||
start : function(event, ui){
|
||||
}
|
||||
});
|
||||
}
|
||||
$(function(){
|
||||
/*
|
||||
$('div.selection').each(function(){
|
||||
if ($('div.non input.radio').is(':checked'))
|
||||
$(this).hide();
|
||||
});
|
||||
$('div.enf').hide();
|
||||
|
||||
$('div.enf input.radio:checked').each(function(){
|
||||
$(this).parent('div').show();
|
||||
$(this).parent('div').siblings('div.enf').show();
|
||||
});
|
||||
|
||||
$('div.par input.radio:checked').each(function(){
|
||||
$(this).parent('div').siblings('div.enf').show();
|
||||
});
|
||||
|
||||
$('div div.par input.radio')
|
||||
.click(function(){
|
||||
if ($(this).is(':checked'))
|
||||
$(this).parent('.par').siblings('div.enf')
|
||||
.slideDown();
|
||||
$('div div.par input.radio').not(':checked').parent('.par').siblings('div.enf')
|
||||
.slideUp();
|
||||
});
|
||||
|
||||
$('div.plus input.radio')
|
||||
.click(function(){
|
||||
if ($(this).is(':checked'))
|
||||
$('div.selection')
|
||||
.slideDown();
|
||||
});
|
||||
|
||||
$('div.non input.radio')
|
||||
.click(function(){
|
||||
if ($(this).is(':checked'))
|
||||
$('div.selection input.checkbox')
|
||||
.attr('checked','');
|
||||
$('div.selection')
|
||||
.slideUp();
|
||||
});
|
||||
*/
|
||||
|
||||
/*$('li.editer_champ div').each(function(){
|
||||
if (!$(this).siblings(':checkbox').is(':checked'))
|
||||
$(this).hide();
|
||||
});
|
||||
|
||||
$('li.editer_champ input.checkbox')
|
||||
.click(function(){
|
||||
if ($(this).is(':checked'))
|
||||
$(this).siblings('div')
|
||||
.slideDown();
|
||||
else
|
||||
$(this).siblings('div')
|
||||
.slideUp();
|
||||
});
|
||||
*/
|
||||
if(typeof($.fn.sortable) == 'undefined'){
|
||||
$.getScript('#CHEMIN{javascript/contact_sortable.js}',function(){
|
||||
contact_sortable();
|
||||
});
|
||||
}else{
|
||||
contact_sortable();
|
||||
}
|
||||
});
|
||||
})(jQuery);
|
||||
</script>
|
@ -0,0 +1,151 @@
|
||||
#CACHE{0}
|
||||
|
||||
<div class="formulaire_spip formulaire_contact formulaire_editer_message_contact" id="formulaire_contact">
|
||||
|
||||
<br class='bugajaxie' />
|
||||
|
||||
[<div class="texte">(#CONFIG{contact/texte}|propre)</div>]
|
||||
|
||||
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
|
||||
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
|
||||
|
||||
<BOUCLE_editable(CONDITION){si #ENV{editable}}>
|
||||
<form method='post' action='#ENV{action}#formulaire_contact' enctype='multipart/form-data'>
|
||||
[(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ]
|
||||
#ACTION_FORMULAIRE{#ENV{action}}
|
||||
|
||||
[(#REM) Previsualisation... ]
|
||||
<BOUCLE_previsu(CONDITION){si #ENV*{erreurs}|table_valeur{previsu}|oui}>
|
||||
<fieldset class="previsu">
|
||||
<legend><:previsualisation:></legend>
|
||||
<ul>
|
||||
[<li><strong><:contact:courriel_de:></strong> : (#ENV{mail})</li>]
|
||||
<BOUCLE_previsu_infos(POUR){tableau #ENV{_champs}}>
|
||||
[(#CLE|match{mail|sujet|texte}|non)
|
||||
[<li><strong>[(#VALEUR)]</strong> : (#ENV{#CLE})</li>]
|
||||
]
|
||||
</BOUCLE_previsu_infos>
|
||||
[<li><strong><:form_prop_sujet:></strong> : (#ENV{sujet})</li>]
|
||||
[<li><div><strong><:info_texte_message:></strong></div>(#ENV{texte}|propre)</li>]
|
||||
<B_previsu_pj>
|
||||
<li>
|
||||
[<strong>(#ENV{erreurs}|table_valeur{infos_pj}|count|>{1}|?{<:contact:form_pj_previsu_pluriel:>,<:contact:form_pj_previsu_singulier:>})</strong>]
|
||||
<ul>
|
||||
<BOUCLE_previsu_pj(POUR){tableau #ENV{erreurs}|table_valeur{infos_pj}}>
|
||||
<li>
|
||||
[<img src="(#ENV*{erreurs}|table_valeur{infos_pj}|table_valeur{#CLE}|table_valeur{vignette}|image_reduire{32}|extraire_attribut{src})" [title="(#ENV*{erreurs}|table_valeur{infos_pj}|table_valeur{#CLE}|table_valeur{mime})"] />]
|
||||
[(#ENV*{erreurs}|table_valeur{infos_pj}|table_valeur{#CLE}|table_valeur{nom})]
|
||||
</li>
|
||||
</BOUCLE_previsu_pj>
|
||||
</ul>
|
||||
</li>
|
||||
</B_previsu_pj>
|
||||
</ul>
|
||||
<p class="boutons"><input type="submit" class="submit" name="confirmer" value="<:form_prop_confirmer_envoi:>" /></p>
|
||||
</fieldset>
|
||||
</BOUCLE_previsu>
|
||||
|
||||
[(#REM) Sinon, formulaire normal ]
|
||||
<fieldset>
|
||||
<legend><:envoyer_message:></legend>
|
||||
<ul>
|
||||
<BOUCLE_choix(CONDITION){si #ENV{choix_destinataires}|non}>
|
||||
[(#REM) Si pas de choix, le destinataire est défini automatiquement ]
|
||||
<BOUCLE_tous(POUR){tableau #ENV{destinataire}}>
|
||||
<li style="display:none;"><input type="hidden" name="destinataire[]" value="#VALEUR" /></li>
|
||||
</BOUCLE_tous>
|
||||
</BOUCLE_choix>
|
||||
[(#REM) Sinon on propose le choix, en select ou en checkbox suivant l'option "type_choix" ]
|
||||
<B_destinataires>
|
||||
<li class="obligatoire[ (#ENV*{erreurs}|table_valeur{destinataire}|oui)erreur]">
|
||||
[(#ENV{type_choix}|match{plusieurs|plusieurs_et|plusieurs_ou}|oui)
|
||||
<label><:contact:form_destinataires:></label>
|
||||
[<span class="erreur_message">(#ENV*{erreurs}|table_valeur{destinataire})</span>]
|
||||
<ul class="choix_mots">
|
||||
]
|
||||
[(#ENV{type_choix}|match{un|un_et|un_ou}|oui)
|
||||
<label for="destinataire"><:contact:form_destinataire:></label>
|
||||
[<span class="erreur_message">(#ENV*{erreurs}|table_valeur{destinataire})</span>]
|
||||
<select name="destinataire[]" id="destinataire">
|
||||
]
|
||||
<BOUCLE_destinataires(AUTEURS){tous}{id_auteur IN #ENV**{choix_destinataires}}{par num nom,nom}>
|
||||
[(#ENV{type_choix}|match{plusieurs|plusieurs_et|plusieurs_ou}|oui)
|
||||
<li class="choix">
|
||||
<input
|
||||
type="checkbox" class="checkbox"
|
||||
name="destinataire[]" id="destinataire#ID_AUTEUR"
|
||||
value="#ID_AUTEUR"[(#ENV{destinataire_selection}|oui)[ (#ID_AUTEUR|in_array{#ENV*{destinataire_selection,#ARRAY}}|oui)checked="checked"]]
|
||||
[(#ENV{destinataire_selection}|non)
|
||||
[(#CONFIG{contact/c}|non)[ (#ID_AUTEUR|in_array{#ENV*{destinataire,#ARRAY}}|ou{[(#ID_AUTEUR|in_array{#ENV*{choix_destinataires,#ARRAY}})]}|oui)checked="checked"]]]
|
||||
/>
|
||||
<label for="destinataire#ID_AUTEUR">#NOM</label>
|
||||
</li>
|
||||
]
|
||||
[(#ENV{type_choix}|match{un|un_et|un_ou}|oui)
|
||||
<option value="#ID_AUTEUR"[ (#ID_AUTEUR|in_array{#ENV*{destinataire,#ARRAY}}|oui)selected="selected"]>#NOM</option>
|
||||
]
|
||||
</BOUCLE_destinataires>
|
||||
[(#ENV{type_choix}|match{plusieurs|plusieurs_et|plusieurs_ou}|oui)
|
||||
</ul>
|
||||
]
|
||||
[(#ENV{type_choix}|match{un|un_et|un_ou}|oui)
|
||||
</select>
|
||||
]
|
||||
</li>
|
||||
</B_destinataires>
|
||||
BUG
|
||||
<//B_destinataires>
|
||||
<//B_choix>
|
||||
|
||||
<BOUCLE_infos(POUR){tableau #ENV{_champs}}>
|
||||
#SET{existe, #CHEMIN{formulaires/contact_champ_#CLE.html}}
|
||||
[(#GET{existe}|oui)
|
||||
[(#INCLURE{fond=formulaires/contact_champ_#CLE,env,name=#CLE,titre=#VALEUR})]
|
||||
]
|
||||
[(#GET{existe}|non)
|
||||
<li class="editer_#CLE saisie_#CLE[ (#CLE|in_array{#ENV{_obligatoires,#ARRAY}}|oui)obligatoire][ (#ENV*{erreurs}|table_valeur{#CLE}|oui)erreur]">
|
||||
<label for="info_#CLE">#VALEUR[ (#CLE|in_array{#ENV{_obligatoires,#ARRAY}}|oui)<strong><:info_obligatoire_02:></strong>]</label>
|
||||
[<span class="erreur_message">(#ENV*{erreurs}|table_valeur{#CLE})</span>]
|
||||
<input type="text" class="text" name="#CLE" id="info_#CLE" value="#ENV{#CLE}" size="30" />
|
||||
</li>
|
||||
]
|
||||
</BOUCLE_infos>
|
||||
|
||||
<B_pj>
|
||||
<li class ='pieces_jointes'>
|
||||
<label>[(#ENV{nb_max_pj}|>{1}|?{<:contact:form_pj_ajouter_pluriel:>,<:contact:form_pj_ajouter_singulier:>})]</label>
|
||||
<ul>
|
||||
<BOUCLE_pj(POUR){tableau #ENV{pj_fichiers}}>
|
||||
<li>
|
||||
[(#ENV*{erreurs}|table_valeur{infos_pj}|table_valeur{#CLE}|table_valeur{message}|oui)
|
||||
<:contact:form_pj_fichier_ajoute:>
|
||||
[<img src="(#ENV*{erreurs}|table_valeur{infos_pj}|table_valeur{#CLE}|table_valeur{vignette}|image_reduire{32}|extraire_attribut{src})" [title="(#ENV*{erreurs}|table_valeur{infos_pj}|table_valeur{#CLE}|table_valeur{mime})"] />]
|
||||
[(#ENV*{erreurs}|table_valeur{infos_pj}|table_valeur{#CLE}|table_valeur{nom})]
|
||||
<input type="hidden" name="pj_enregistrees_nom[#CLE]" value="[(#ENV*{erreurs}|table_valeur{infos_pj}|table_valeur{#CLE}|table_valeur{nom})]"/>
|
||||
<input type="hidden" name="pj_enregistrees_mime[#CLE]" value="[(#ENV*{erreurs}|table_valeur{infos_pj}|table_valeur{#CLE}|table_valeur{mime})]"/>
|
||||
<input type="hidden" name="pj_enregistrees_extension[#CLE]" value="[(#ENV*{erreurs}|table_valeur{infos_pj}|table_valeur{#CLE}|table_valeur{extension})]"/>
|
||||
<input type="hidden" name="pj_enregistrees_vignette[#CLE]" value="[(#ENV*{erreurs}|table_valeur{infos_pj}|table_valeur{#CLE}|table_valeur{vignette})]"/>
|
||||
<input type="submit" name="pj_supprimer_#CLE" value="<:contact:form_pj_supprimer:>"/>
|
||||
]
|
||||
|
||||
[(#ENV*{erreurs}|table_valeur{infos_pj}|table_valeur{#CLE}|table_valeur{message}|non)
|
||||
<input type="file" class="fichier" name="pj_fichiers[#CLE]" title="<:contact:form_pj_importer:>" />
|
||||
]
|
||||
</li>
|
||||
</BOUCLE_pj>
|
||||
</ul>
|
||||
</li>
|
||||
</B_pj>
|
||||
</ul>
|
||||
</fieldset>
|
||||
|
||||
[(#REM) Piege a robots spammeurs ]
|
||||
<p style="display:none;">
|
||||
<label for="contact_nobot"><:antispam_champ_vide:></label>
|
||||
<input type="text" class="text" name="nobot" id="contact_nobot" value="#ENV{nobot}" size="10" />
|
||||
</p>
|
||||
|
||||
<p class="boutons"><input type="submit" class="submit" name="valide" value="<:form_prop_envoyer:>" /></p>
|
||||
</form>
|
||||
</BOUCLE_editable>
|
||||
</div>
|
@ -0,0 +1,396 @@
|
||||
<?php
|
||||
|
||||
include_spip('inc/config');
|
||||
include_spip('configurer/pipelines');
|
||||
|
||||
function formulaires_contact_charger_dist($id_auteur='',$tracer=''){
|
||||
$valeurs = array();
|
||||
|
||||
$valeurs['destinataire'] = array();
|
||||
$valeurs['choix_destinataires'] = '';
|
||||
|
||||
// La liste dans laquelle on pourra éventuellement choisir
|
||||
$choix_destinataires = ($tmp = lire_config('contact/choix_destinataires')) ? $tmp : array();
|
||||
$choix_destinataires = array_map('intval',$choix_destinataires);
|
||||
|
||||
// tableau des type_choix necessitant la prise en compte de $id_auteur
|
||||
$t_c = array('tous_et', 'tous_ou', 'un_et', 'un_ou', 'plusieurs_et', 'plusieurs_ou');
|
||||
$valeurs['type_choix'] = $type_choix = lire_config('contact/type_choix');
|
||||
if( in_array($type_choix,$t_c) ){
|
||||
if(!is_array($id_auteur)){
|
||||
$id_auteur = explode(',',$id_auteur);
|
||||
if(!is_numeric($id_auteur[0]))$id_auteur=array();
|
||||
}
|
||||
}
|
||||
|
||||
$nb_d = count($choix_destinataires);
|
||||
// Rien n'a été défini, on utilise l'auteur 1
|
||||
if ($nb_d == 0){
|
||||
$valeurs['destinataire'][] = 1;
|
||||
}else{
|
||||
$valeurs['destinataire'] = $choix_destinataires;
|
||||
}
|
||||
|
||||
if ($type_choix == 'tous_ou' and $id_auteur){
|
||||
$valeurs['destinataire'] = $id_auteur;
|
||||
}else if ($type_choix == 'tous_et' and $id_auteur){
|
||||
$valeurs['destinataire'] = array_unique(array_merge($valeurs['destinataire'],$id_auteur));
|
||||
}else if (($type_choix == 'un' or $type_choix == 'plusieurs') and $nb_d>1){
|
||||
$valeurs['choix_destinataires'] = $valeurs['destinataire'];
|
||||
}else if ($type_choix == 'un_et' or $type_choix == 'plusieurs_et'){
|
||||
$c_d = array_unique(array_merge($valeurs['destinataire'],$id_auteur));
|
||||
if(count($c_d)>1){
|
||||
$valeurs['choix_destinataires'] = $c_d;
|
||||
}else{
|
||||
$valeurs['destinataire'] = $c_d;
|
||||
}
|
||||
}else if ($type_choix == 'un_ou' or $type_choix == 'plusieurs_ou'){
|
||||
if(count($id_auteur)>1){
|
||||
$valeurs['choix_destinataires'] = $id_auteur;
|
||||
}elseif(count($id_auteur)==1){
|
||||
$valeurs['destinataire'] = $id_auteur;
|
||||
}elseif(count($valeurs['destinataire'])>1){
|
||||
$valeurs['choix_destinataires'] = $valeurs['destinataire'];
|
||||
}
|
||||
}
|
||||
$valeurs['destinataire_selection'] = _request('destinataire');
|
||||
|
||||
// Les infos supplémentaires
|
||||
$champs_possibles = contact_infos_supplementaires();
|
||||
$champs_mini_config = array('mail', 'sujet', 'texte');
|
||||
|
||||
$champs_choisis = lire_config('contact/champs',$champs_mini_config);
|
||||
|
||||
// On envoie un tableau contenant tous les champs choisis et leur titre
|
||||
// DANS L'ORDRE de ce qu'on a récupéré de CFG
|
||||
$champs_choisis = array_flip($champs_choisis);
|
||||
foreach ($champs_choisis as $cle => $valeur){
|
||||
$champs_choisis[$cle] = $champs_possibles[$cle];
|
||||
}
|
||||
$valeurs['_champs'] = $champs_choisis;
|
||||
// Mais aussi tous les champs un par un
|
||||
$valeurs = array_merge(
|
||||
$valeurs,
|
||||
array_map(
|
||||
create_function('', 'return "";'),
|
||||
$champs_choisis
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
$valeurs['_obligatoires'] = $champs_obligatoires = lire_config('contact/obligatoires',$champs_mini_config);
|
||||
|
||||
// Infos sur l'ajout de pièces jointes ou non
|
||||
$autoriser_pj = (lire_config('contact/autoriser_pj') == 'true');
|
||||
$valeurs['autoriser_pj'] = $autoriser_pj;
|
||||
|
||||
// Si on autorise les pièces jointes, on regarde quel est le nombre max de pj.
|
||||
if ($autoriser_pj) {
|
||||
$nb_max_pj = lire_config('contact/nb_max_pj');
|
||||
$valeurs['nb_max_pj'] = $nb_max_pj;
|
||||
// On pré-remplit un tableau pour pouvoir boucler dessus le bon nombre de fois
|
||||
$valeurs['pj_fichiers'] = array_fill(0, $nb_max_pj, '');
|
||||
}
|
||||
|
||||
//Sert à stocker les informations des fichiers plus ou moins bien uploadés lorsqu'il y a des erreurs.
|
||||
$valeurs['pj_nom_enregistrees'] = array();
|
||||
$valeurs['pj_cle_enregistrees'] = array();
|
||||
$valeurs['pj_mime_enregistrees'] = array();
|
||||
|
||||
return $valeurs;
|
||||
}
|
||||
|
||||
function formulaires_contact_verifier_dist($id_auteur='',$tracer=''){
|
||||
$erreurs = array();
|
||||
include_spip('inc/filtres');
|
||||
include_spip('inc/documents');
|
||||
include_spip('inc/charsets');
|
||||
if($tracer){
|
||||
$trace=explode('-',$tracer);
|
||||
if( !(count($trace)==2) or !(intval($trace[1])>0) ){
|
||||
$erreurs['message_erreur'] = 'Une erreur de transmission s\'est produite, merci de renouveller vôtre demande.';
|
||||
}
|
||||
}
|
||||
if (!_request('destinataire'))
|
||||
$erreurs['destinataire'] = _T("info_obligatoire");
|
||||
if (!$adres = _request('mail'))
|
||||
$erreurs['mail'] = _T("info_obligatoire");
|
||||
elseif(!email_valide($adres))
|
||||
$erreurs['mail'] = _T('form_prop_indiquer_email');
|
||||
|
||||
$champs_mini_config = array('mail', 'sujet', 'texte');
|
||||
$champs_choisis = lire_config('contact/champs',$champs_mini_config );
|
||||
$champs_obligatoires = lire_config('contact/obligatoires',$champs_mini_config);
|
||||
if (is_array($champs_choisis) and is_array($champs_obligatoires)){
|
||||
foreach($champs_choisis as $champ){
|
||||
if (!_request($champ) and in_array($champ, $champs_obligatoires))
|
||||
$erreurs[$champ] = _T("info_obligatoire");
|
||||
}
|
||||
}
|
||||
|
||||
if(!(strlen(_request('sujet'))>3))
|
||||
$erreurs['sujet'] = _T('forum_attention_trois_caracteres');
|
||||
|
||||
$texte_min = !defined('_TEXTE_MIN')?10:_TEXTE_MIN;
|
||||
if(!(strlen(_request('texte'))>$texte_min) && !$erreurs['texte'])
|
||||
$erreurs['texte'] = _T('contact:forum_attention_nbre_caracteres',array('nbre_caract'=>$texte_min));
|
||||
|
||||
if ($nobot=_request('nobot'))
|
||||
$erreurs['nobot'] = 'Vous êtes un robot. Méchant robot.';
|
||||
|
||||
// On s'occupe des pièces jointes.
|
||||
$pj_fichiers = $_FILES['pj_fichiers'];
|
||||
|
||||
//Si le répertoire temporaire n'existe pas encore, il faut le créer.
|
||||
$repertoire_temp_pj = _DIR_TMP.'/contact_pj/';
|
||||
if (!is_dir($repertoire_temp_pj)) mkdir($repertoire_temp_pj);
|
||||
|
||||
//Pour les nouvelles pj uploadées
|
||||
if ($pj_fichiers != null) {
|
||||
foreach ($pj_fichiers['name'] as $cle => $nom_pj) {
|
||||
// On commence par transformer le nom du fichier pour éviter les conflits
|
||||
$nom_pj = trim(preg_replace('/[\s]+/', '_', strtolower(translitteration($nom_pj))));
|
||||
// Si le fichier a bien un nom et qu'il n'y a pas d'erreur associé à ce fichier
|
||||
if (($nom_pj != null) && ($pj_fichiers['error'][$cle] == 0)) {
|
||||
//On vérifie qu'un fichier ne porte pas déjà le même nom, sinon on lui donne un nom aléatoire + nom original
|
||||
if (file_exists($repertoire_temp_pj.$nom_pj))
|
||||
$nom_pj = $nom_pj.'_'.rand();
|
||||
|
||||
//déplacement du fichier vers le dossier de réception temporaire
|
||||
if (move_uploaded_file($pj_fichiers['tmp_name'][$cle], $repertoire_temp_pj.$nom_pj)) {
|
||||
$infos_pj[$cle]['message'] = 'ajout fichier';
|
||||
$infos_pj[$cle]['nom'] = $nom_pj;
|
||||
// On en déduit l'extension et du coup la vignette
|
||||
$infos_pj[$cle]['extension'] = strtolower(preg_replace('/^.*\.([\w]+)$/i', '$1', $nom_pj));
|
||||
if (function_exists('vignette_par_defaut'))
|
||||
$vignette = 'vignette_par_defaut';
|
||||
else
|
||||
$vignette = charger_fonction('vignette', 'inc');
|
||||
$infos_pj[$cle]['vignette'] = $vignette($infos_pj[$cle]['extension'], false, true);
|
||||
//On récupère le tye MIME du fichier aussi
|
||||
$infos_pj[$cle]['mime'] = $pj_fichiers['type'][$cle];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Pour les pj qui ont déjà été récupérées avec succes, on remet le tableau des informations sur les pj à jour
|
||||
$pj_enregistrees_nom = _request('pj_enregistrees_nom');
|
||||
$pj_enregistrees_mime = _request('pj_enregistrees_mime');
|
||||
$pj_enregistrees_extension = _request('pj_enregistrees_extension');
|
||||
$pj_enregistrees_vignette = _request('pj_enregistrees_vignette');
|
||||
|
||||
if (is_array($pj_enregistrees_nom))
|
||||
foreach ($pj_enregistrees_nom as $cle => $nom){
|
||||
$infos_pj[$cle]['message'] = 'ajout fichier';
|
||||
$infos_pj[$cle]['nom'] = $nom;
|
||||
$infos_pj[$cle]['mime'] = $pj_enregistrees_mime[$cle];
|
||||
$infos_pj[$cle]['extension'] = $pj_enregistrees_extension[$cle];
|
||||
$infos_pj[$cle]['vignette'] = $pj_enregistrees_vignette[$cle];
|
||||
}
|
||||
|
||||
//Maintenant on vérifie s'il n'y a pas eu une suppression de fichiers
|
||||
$nb_max_pj = lire_config('contact/nb_max_pj');
|
||||
for ($cle=0 ; $cle<$nb_max_pj ; $cle++) {
|
||||
if (_request('pj_supprimer_'.$cle)) {
|
||||
//On récupère le nom de la pièce jointe à supprimer
|
||||
$nom_pj_supprimer = $infos_pj[$cle]['nom'];
|
||||
//On supprime le fichier portant ce nom
|
||||
unlink($repertoire_temp_pj.$nom_pj_supprimer);
|
||||
//On re-propose la possibilité de télécharger un fichier en supprimant les infos du fichier
|
||||
unset($infos_pj[$cle]);
|
||||
}
|
||||
}
|
||||
|
||||
// Si on est pas dans une confirmation et qu'il n'y pas de vraies erreurs on affiche la prévisu du message
|
||||
if (!_request('confirmer') AND !count($erreurs))
|
||||
$erreurs['previsu']=' ';
|
||||
|
||||
// Si on est pas dans une confirmation, on ajoute au contexte les infos des fichiers déjà téléchargés
|
||||
if (!_request('confirmer'))
|
||||
$erreurs['infos_pj'] = $infos_pj;
|
||||
|
||||
return $erreurs;
|
||||
}
|
||||
|
||||
function formulaires_contact_traiter_dist($id_auteur='',$tracer=''){
|
||||
|
||||
include_spip('base/abstract_sql');
|
||||
include_spip('inc/texte');
|
||||
|
||||
$infos = '';
|
||||
|
||||
// On récupère à qui ça va être envoyé
|
||||
$destinataire = _request('destinataire');
|
||||
if (!is_array($destinataire))
|
||||
$destinataire = array($destinataire);
|
||||
$destinataire = array_map('intval', $destinataire);
|
||||
$mail = sql_allfetsel(
|
||||
'email',
|
||||
'spip_auteurs',
|
||||
'id_auteur IN ('.join(', ', $destinataire).')'
|
||||
);
|
||||
$mail = array_map('reset', $mail);
|
||||
// S'il n'y a pas le plugin facteur, on met l'(es) adresse(s) sous forme de chaine de caractères.
|
||||
if (!defined("_DIR_PLUGIN_FACTEUR"))
|
||||
$mail = join(', ', $mail);
|
||||
|
||||
// Les infos supplémentaires
|
||||
$champs_possibles = contact_infos_supplementaires();
|
||||
$champs_mini_config = array('mail', 'sujet', 'texte');
|
||||
$champs_choisis = lire_config('contact/champs',$champs_mini_config);
|
||||
if (is_array($champs_choisis)){
|
||||
foreach($champs_choisis as $champ){
|
||||
if ($reponse_champ = _request($champ)){
|
||||
if( ($champ=='mail') OR ($champ=='sujet') OR ($champ=='texte') ){
|
||||
$posteur[$champ] = $reponse_champ;
|
||||
}else{
|
||||
$infos .= "\n".$champs_possibles[$champ]." : ".$reponse_champ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if($tracer){
|
||||
$trace=explode('-',$tracer);
|
||||
if( (count($trace)==2) and (intval($trace[1])>0) ){
|
||||
$url = generer_url_entite(intval($trace[1]),$trace[0]);
|
||||
if($url){
|
||||
$inforigine= $GLOBALS['meta']['adresse_site']."/".$url;
|
||||
}else{
|
||||
$inforigine= 'info trace non comprise';
|
||||
}
|
||||
}else{
|
||||
$inforigine= 'info trace non comprise';
|
||||
}
|
||||
$inforigine= _T('contact:inforigine')."\n".$inforigine."\n\n";
|
||||
|
||||
}
|
||||
|
||||
// horodatons
|
||||
$horodatage = affdate_heure (date ("Y-m-d H:i:s"));
|
||||
$horodatage = "\n\n"._T('contact:horodatage', array('horodatage'=>$horodatage))."\n\n";
|
||||
$par = _T('contact:par').$posteur['mail']."\n\n";
|
||||
|
||||
$texte = $horodatage.$par.$inforigine.$infos."\n\n".$posteur['texte'];
|
||||
$nom_site = supprimer_tags(extraire_multi($GLOBALS['meta']['nom_site']));
|
||||
$texte .= "\n\n "._T('envoi_via_le_site')." ".$nom_site." ( ".$GLOBALS['meta']['adresse_site']."/ ) \n";
|
||||
|
||||
// Texte a envoyer par mail, sans raccourcis SPIP
|
||||
// On évite de couper les urls
|
||||
define('_MAX_LONG_URL',100000);
|
||||
define('_MAX_COUPE_URL',100000);
|
||||
$texte_final = propre($texte);
|
||||
// Eviter que le facteur machouille les apostrophes
|
||||
if ($GLOBALS['meta']['facteur_filtre_iso_8859']){
|
||||
$texte_final = preg_replace(',’,',"'",$texte_final);
|
||||
}
|
||||
// Sauvegarder un soupcon de liste dans le mail
|
||||
$texte_final = preg_replace (array('/<li>/','/<\/li>/','/<\/ul>/'), array("- ","\n","\n"), $texte_final);
|
||||
$texte_final = supprimer_tags($texte_final);
|
||||
|
||||
// On formate pour les accents
|
||||
// Texte a mettre en base
|
||||
$texte = filtrer_entites($texte);
|
||||
|
||||
// On va vérifie s'il y a des pièces jointes
|
||||
$pj_enregistrees_nom = _request('pj_enregistrees_nom');
|
||||
$pj_enregistrees_mime = _request('pj_enregistrees_mime');
|
||||
$pj_enregistrees_extension = _request('pj_enregistrees_extension');
|
||||
$repertoire_temp_pj = _DIR_TMP.'/contact_pj/';
|
||||
|
||||
// Si oui on les ajoute avec le plugin Facteur
|
||||
if ($pj_enregistrees_nom != null) {
|
||||
//On rajoute des sauts de ligne pour différencier du message.
|
||||
$texte_final = array(
|
||||
'texte' => $texte_final
|
||||
);
|
||||
foreach ($pj_enregistrees_nom as $cle => $nom_pj) {
|
||||
$texte_final['pieces_jointes'][$cle] = array(
|
||||
'chemin' => $repertoire_temp_pj.$nom_pj,
|
||||
'nom' => $nom_pj,
|
||||
'encodage' => 'base64',
|
||||
'mime' => $pj_enregistrees_mime[$cle]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Enregistrement des messages en base de données si on l'a demandé
|
||||
if (lire_config('contact/sauvegarder_contacts')) {
|
||||
// Il s'agit d'un visiteur : on va donc l'enregistrer dans la table auteur pour garder son mail.
|
||||
// Sauf s'il existe déjà.
|
||||
$id_aut = sql_getfetsel(
|
||||
'id_auteur',
|
||||
'spip_auteurs',
|
||||
'email = '.sql_quote($posteur['mail'])
|
||||
);
|
||||
if (!$id_aut){
|
||||
$nom_auteur = trim(_request('prenom').' '._request('nom'));
|
||||
if (!$nom_auteur) $nom_auteur = $posteur['mail'];
|
||||
$id_aut = sql_insertq(
|
||||
'spip_auteurs',
|
||||
array(
|
||||
'nom' => $nom_auteur,
|
||||
'email' => $posteur['mail'],
|
||||
'statut' => 'contact'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// Ensuite on ajoute le message dans la base
|
||||
$id_message = sql_insertq(
|
||||
'spip_messages',
|
||||
array(
|
||||
'titre' => $posteur['sujet'],
|
||||
'statut' => 'publie',
|
||||
'type' => 'contac',
|
||||
'id_auteur' => $id_aut,
|
||||
'date_heure' => date('Y-m-d H:i:s'),
|
||||
'texte' => $texte,
|
||||
'rv' => 'non'
|
||||
)
|
||||
);
|
||||
|
||||
// S'il y a des pièces jointes on les ajoute aux documents de SPIP.
|
||||
if ($pj_enregistrees_nom != null) {
|
||||
//On charge la fonction pour ajouter le document là où il faut
|
||||
$ajouter_document = charger_fonction('ajouter_documents', 'inc');
|
||||
foreach ($pj_enregistrees_nom as $nom_pj) {
|
||||
$id_doc = $ajouter_document($repertoire_temp_pj.$nom_pj, $nom_pj, 'message', $id_message, 'document', $id_document, $titrer=false);
|
||||
}
|
||||
}
|
||||
|
||||
// On lie le message au(x) destinataire(s) concerné(s)
|
||||
foreach ($destinataire as $id_destinataire) {
|
||||
sql_insertq(
|
||||
'spip_auteurs_messages',
|
||||
array(
|
||||
'id_auteur' => $id_destinataire,
|
||||
'id_message' => $id_message,
|
||||
'vu' =>'non')
|
||||
);
|
||||
}
|
||||
|
||||
$memoire = generer_url_ecrire('contact_un_message', 'id_message='.$id_message);
|
||||
if ($pj_enregistrees_nom != null) {
|
||||
$texte_final['texte'] .= "\n\n"._T('contact:consulter_memoire')."\n".$memoire;
|
||||
}
|
||||
else{
|
||||
$texte_final .= "\n\n"._T('contact:consulter_memoire')."\n".$memoire;
|
||||
}
|
||||
}
|
||||
// envoyer le mail maintenant
|
||||
$envoyer_mail = charger_fonction('envoyer_mail','inc');
|
||||
$envoyer_mail($mail, $posteur['sujet'], $texte_final, $posteur['mail'], "X-Originating-IP: ".$GLOBALS['ip']);
|
||||
|
||||
// Maintenant que tout a été envoyé ou enregistré, s'il y avait des PJ il faut supprimer les fichiers
|
||||
if ($pj_enregistrees_nom != null) {
|
||||
foreach ($pj_enregistrees_nom as $cle => $nom_pj) {
|
||||
unlink($repertoire_temp_pj.$nom_pj);
|
||||
}
|
||||
}
|
||||
|
||||
$message = _T('contact:succes', array("equipe_site" => $nom_site));
|
||||
return array('message_ok'=>$message);
|
||||
}
|
||||
|
||||
?>
|
@ -0,0 +1,23 @@
|
||||
<li class="[editer_(#ENV{name})][ saisie_(#ENV{name})][ (#GET{#ENV{name}})][ (#ENV**{erreurs}|table_valeur{#ENV{name}}|oui)erreur]">
|
||||
<fieldset>
|
||||
<legend><:contact:champ_civilite:>[<span class="obligatoire">(#GET{#ENV{name}}|oui)*</span>]</legend>
|
||||
[<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{#ENV{name}})</span>]
|
||||
<div class='choix'>
|
||||
<label for="#ENV{name}_madame">
|
||||
<input type='radio' class='radio' name='#ENV{name}' id='#ENV{name}_madame' value="madame"[ (#ENV{#ENV{name}}|=={madame}|oui)checked="checked"] />
|
||||
<:contact:madame:></label>
|
||||
</div>
|
||||
[(#CONFIG{contact/champ_civi_mademoiselle}|=={true}|oui)
|
||||
<div class='choix'>
|
||||
<label for="#ENV{name}_mademoiselle">
|
||||
<input type='radio' class='radio' name='#ENV{name}' id='#ENV{name}_mademoiselle' value="mademoiselle"[ (#ENV{#ENV{name}}|=={mademoiselle}|oui)checked="checked"] />
|
||||
<:contact:mademoiselle:></label>
|
||||
</div>
|
||||
]
|
||||
<div class='choix'>
|
||||
<label for="#ENV{name}_monsieur">
|
||||
<input type='radio' class='radio' name='#ENV{name}' id='#ENV{name}_monsieur' value="monsieur"[ (#ENV{#ENV{name}}|=={monsieur}|oui)checked="checked"] />
|
||||
<:contact:monsieur:></label>
|
||||
</div>
|
||||
</fieldset>
|
||||
</li>
|
@ -0,0 +1,8 @@
|
||||
<li class="[editer_(#ENV{name})][ saisie_(#ENV{name})][ (#ENV**{erreurs}|table_valeur{#ENV{name}}|oui)erreur]">
|
||||
[<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{#ENV{name}})</span>]
|
||||
<div class='choix'>
|
||||
<label for="#ENV{name}">
|
||||
<input type='checkbox' class='checkbox' name='#ENV{name}' id='#ENV{name}' value="oui"[ (#ENV{#ENV{name}}|=={oui}|oui)checked="checked"] />
|
||||
[(#CONFIG{contact/texteinfolettre}|sinon{<:contact:informez_moi:>})]</label>
|
||||
</div>
|
||||
</li>
|
@ -0,0 +1,5 @@
|
||||
<li class='editer_mail saisie_mail obligatoire[ (#ENV*{erreurs}|table_valeur{mail}|oui)erreur]'>
|
||||
<label for="mail"><:form_pet_votre_email:> <strong><:info_obligatoire_02:></strong></label>
|
||||
[<span class="erreur_message">(#ENV*{erreurs}|table_valeur{mail})</span>]
|
||||
<input type="text" class="text" name="mail" id="mail" value="#ENV{mail}" size="30" />
|
||||
</li>
|
@ -0,0 +1,5 @@
|
||||
<li class='editer_texte saisie_texte obligatoire[ (#ENV*{erreurs}|table_valeur{texte}|oui)erreur]'>
|
||||
<label for="contact_texte"><:info_texte_message:> <strong><:info_obligatoire_02:></strong></label>
|
||||
[<span class="erreur_message">(#ENV*{erreurs}|table_valeur{texte})</span>]
|
||||
<textarea name="texte" id="contact_texte" rows="8" cols="60"[ class="(#CONFIG{contact/barre})"]>#ENV{texte}</textarea>
|
||||
</li>
|
After Width: | Height: | Size: 896 B |
After Width: | Height: | Size: 8.0 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 854 B |
After Width: | Height: | Size: 229 B |
After Width: | Height: | Size: 432 B |
After Width: | Height: | Size: 307 B |
After Width: | Height: | Size: 403 B |
After Width: | Height: | Size: 417 B |
After Width: | Height: | Size: 373 B |
After Width: | Height: | Size: 385 B |
After Width: | Height: | Size: 316 B |
After Width: | Height: | Size: 321 B |