Browse Source

import depuis git

svn/root/trunk
abelass@gmail.com 7 years ago
parent
commit
7df699aa61
  1. 20
      .gitattributes
  2. 4
      README.md
  3. 4
      css/reservations_multiples.css
  4. 0
      formulaires/configurer_reservations_multiples.html
  5. 49
      formulaires/configurer_reservations_multiples.php
  6. 46
      inclure/auteurs_multiples.html
  7. 10
      inclure/inc-reservation_connection_extras.html
  8. 7
      inclure/nombre_multiples.html
  9. 14
      lang/paquet-reservations_multiples_fr.php
  10. 29
      lang/reservations_multiples_en.php
  11. 40
      lang/reservations_multiples_fr.php
  12. 30
      paquet.xml
  13. 7
      prive/squelettes/contenu/configurer_reservations_multiples.html
  14. BIN
      prive/themes/spip/images/enlever-16.png
  15. BIN
      prive/themes/spip/images/reservations_multiples-128.png
  16. BIN
      prive/themes/spip/images/reservations_multiples-32.png
  17. BIN
      prive/themes/spip/images/reservations_multiples-64.png
  18. 26
      promotions/reservation_multiple_simple.php
  19. 30
      reservations_multiples_fonctions.php
  20. 318
      reservations_multiples_pipelines.php
  21. 16
      scripts/reservations_multiples.js

20
.gitattributes vendored

@ -1 +1,21 @@
* text=auto !eol
/README.md -text
css/reservations_multiples.css -text
formulaires/configurer_reservations_multiples.html -text svneol=unset#text/plain
formulaires/configurer_reservations_multiples.php -text
inclure/auteurs_multiples.html -text svneol=unset#text/plain
inclure/inc-reservation_connection_extras.html -text svneol=unset#text/plain
inclure/nombre_multiples.html -text svneol=unset#text/plain
lang/paquet-reservations_multiples_fr.php -text
lang/reservations_multiples_en.php -text
lang/reservations_multiples_fr.php -text
/paquet.xml -text svneol=unset#text/plain
prive/squelettes/contenu/configurer_reservations_multiples.html -text svneol=unset#text/plain
prive/themes/spip/images/enlever-16.png -text
prive/themes/spip/images/reservations_multiples-128.png -text
prive/themes/spip/images/reservations_multiples-32.png -text
prive/themes/spip/images/reservations_multiples-64.png -text
promotions/reservation_multiple_simple.php -text
/reservations_multiples_fonctions.php -text
/reservations_multiples_pipelines.php -text
scripts/reservations_multiples.js -text

4
README.md

@ -0,0 +1,4 @@
reservations_multiples
======================
Developement

4
css/reservations_multiples.css

@ -0,0 +1,4 @@
.choix.quantite label, .choix.quantite .explication, .choix.quantite label, .choix.quantite input {
float:left;
margin-right: 0.5em;
}

0
formulaires/configurer_reservations_multiples.html

49
formulaires/configurer_reservations_multiples.php

@ -0,0 +1,49 @@
<?php
// Sécurité
if (!defined('_ECRIRE_INC_VERSION'))
return;
function formulaires_configurer_reservations_multiples_saisies_dist() {
include_spip('inc/config');
$config = lire_config('reservations_multiples', array());
return array( array(
'saisie' => 'fieldset',
'options' => array(
'nom' => 'fieldset_parametres',
'label' => _T('reservations_multiples:cfg_titre_parametrages')
),
'saisies' => array(
array(
'saisie' => 'oui_non',
'options' => array(
'nom' => 'multiple_personnes',
'label' => _T('reservations_multiples:label_multiple_personnes'),
'explication' => _T('reservations_multiples:explication_multiple_personnes'),
'defaut' => $config['multiple_personnes'],
)
),
array(
'saisie' => 'input',
'options' => array(
'nom' => 'nombre_limite',
'label' => _T('reservations_multiples:nombre_limite'),
'afficher_si' => '@multiple_personnes@ == "on"',
'defaut' => $config['nombre_limite'],
)
),
array(
'saisie' => 'oui_non',
'options' => array(
'nom' => 'multiple_inscriptions',
'label' => _T('reservations_multiples:label_multiple_inscriptions'),
'explication' => _T('reservations_multiples:explication_multiple_inscriptions'),
'defaut' => $config['multiple_personnes'],
)
),
),
),);
}
?>

46
inclure/auteurs_multiples.html

@ -0,0 +1,46 @@
#SET{limit,#CONFIG{reservations_multiples/nombre_limite}}
<ul class="auteurs_multiples_0" id="auteurs_multiples">
<li class="editer label"><label><:reservations_multiples:label_reserver_amie:></label>
<B_extras>
<li class="editer multiples_personnes">
<BOUCLE_extras(DATA){source tableau, #ENV{ajouter}}>
<ul id="auteurs_multiples_#COMPTEUR_BOUCLE">
<INCLURE{fond=inclure/inc-reservation_connection_extras,
numero=#COMPTEUR_BOUCLE,
champs_extras_auteurs=#ENV{champs_extras_auteurs_add}|table_valeur{#CLE},env}/>
<li class="editer enlever">
<div class="choix">
<input type="image" name="nr_auteurs" value="[(#COMPTEUR_BOUCLE|=={1}|?{nada,#COMPTEUR_BOUCLE|moins{1}})]" src="#CHEMIN_IMAGE{enlever-16.png}" [ (#HTML5)formnovalidate] alt="plus"/>
<label><:reservations_multiples:label_enlever:></label>
</div>
</li>
</ul>
</BOUCLE_extras>
[(#GET{limit}|>{#TOTAL_BOUCLE}|oui|ou{#GET{limit}|non})<li>
<div class="choix">
<input type="image" name="nr_auteurs" value="[(#COMPTEUR_BOUCLE|plus{1})]"[ src="#CHEMIN_IMAGE{ajouter-16.png}" (#HTML5)formnovalidate] alt ="minus"/>
<label><:reservations_multiples:label_ajouter:></label>
</div>
</li>]
</ul>
</li>
</B_extras>
<li class="editer ajouter">
<div class="choix">
<input type="image" value="1" name="nr_auteurs" src="#CHEMIN_IMAGE{ajouter-16.png}" [ (#HTML5)formnovalidate] alt ="minus"/>
<label><:reservations_multiples:label_ajouter:></label>
</div>
</li>
<//B_extras>
</ul>
<script type="text/javascript">
//<![CDATA[
[(#ENV{nr_auteurs}|et{#ENV{nr_auteurs}|!={nada}}|oui)
$('html, body').animate({
scrollTop: $("#auteurs_multiples_#ENV{nr_auteurs}").offset().top
}, 2000);]
//]]>
</script>

10
inclure/inc-reservation_connection_extras.html

@ -0,0 +1,10 @@
[(#SAISIE{input,nom_#NUMERO,label=<:reservation:label_nom:>,obligatoire=oui})]
[(#SAISIE{input,email_#NUMERO,label=<:reservation:label_email:>,obligatoire=oui})]
[(#REM)Géneration des champs extras auteurs]
#GENERER_SAISIES{#ENV{champs_extras_auteurs}}

7
inclure/nombre_multiples.html

@ -0,0 +1,7 @@
<div class="choix quantite">
<label for="quantite_#ID_EVENEMENT">
<:reservations_detail:label_quantite:>
</label>
<input id="quantite_#ID_EVENEMENT" type="text" class="number" name="quantite[#ID_EVENEMENT]" value="[(#ENV{quantite}|table_valeur{#ID_EVENEMENT}|sinon{1})]"/>
<p class="explication"><:reservations_multiples:explication_quantite:></p>
</div>

14
lang/paquet-reservations_multiples_fr.php

@ -0,0 +1,14 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
if (!defined('_ECRIRE_INC_VERSION')) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
// R
'reservations_multiples_description' => 'Ajoute au plugin Réservations Événement la possibilité de faire des réservations pour plusieurs personnes à la fois.',
'reservations_multiples_nom' => 'Réservations multiples',
'reservations_multiples_slogan' => 'Réserver pour plusieurs personnes à la fois',
);
?>

29
lang/reservations_multiples_en.php

@ -0,0 +1,29 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
if (!defined('_ECRIRE_INC_VERSION')) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
// C
'cfg_titre_parametrages' => 'Paramétrages',
//L
'label_ajouter'=>'Add',
'label_enlever'=>'Remove',
'label_reserver_amie'=>'I would like to register one more person:',
//M
'message_ok_reservations_pour'=>'Réservé pour : @noms@',
//N
'nombre_limite' => 'Nombre limites',
'nombre_limite_explication' => 'Si vide aucune limitation',
// R
'reservations_multiples_titre' => 'Réservations multiples',
// T
'titre_page_configurer_reservations_multiples' => 'Réservations multiples',
);
?>

40
lang/reservations_multiples_fr.php

@ -0,0 +1,40 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
if (!defined('_ECRIRE_INC_VERSION')) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
// C
'cfg_titre_parametrages' => 'Paramétrages',
// E
'explication_multiple_inscriptions' => 'Pour chaque événement il es possible d\'indiquer le nombre de réservations',
'explication_multiple_personnes' => 'Pour chaque personne aditionnelle il est alors possible/nécessaire de renseigner ses détails personnels',
'explication_quantite' => 'Si vide, la quantité sera 1',
//L
'label_ajouter'=>'Ajouter',
'label_enlever'=>'Enlever',
'label_multiple_inscriptions'=>'Permettre d\'indiquer le nombre d\'inscriptions',
'label_multiple_personnes'=>'Permettre l\'inscription de plusieurs personnes',
'label_reserver_amie'=>'J\'aimerai également inscrire une autre persone :',
//M
'message_ok_reservations_pour'=>'Réservé pour : @noms@',
//N
'nom_reservation_multiple_simple'=>'Réservation multiple simple',
'nombre_limite' => 'Nombre limites',
'nombre_limite_explication' => 'Si vide aucune limitation',
// R
'reservations_multiples_titre' => 'Réservations multiples',
// T
'titre_page_configurer_reservations_multiples' => 'Réservations multiples',
'type_lien_multiple_personnes' => 'Réservation multiple, reśervation d\'origine : @reference@',
);
?>

30
paquet.xml

@ -0,0 +1,30 @@
<paquet
prefix="reservations_multiples"
categorie="communication"
version="1.4.0"
etat="test"
compatibilite="[3.0.16;3.1.*]"
logo="prive/themes/spip/images/reservations_multiples-64.png"
documentation=""
>
<nom>Réservations multiples</nom>
<auteur lien='http://websimple.be'>Rainer</auteur>
<licence>GNU/GPL</licence>
<necessite nom="reservation_evenement" compatibilite="[1.19.5;]" />
<utilise nom="reservations_mailsubscribers" compatibilite="[1.2.4;]" />
<pipeline nom="recuperer_fond" inclure="reservations_multiples_pipelines.php" />
<pipeline nom="formulaire_charger" inclure="reservations_multiples_pipelines.php" />
<pipeline nom="formulaire_verifier" inclure="reservations_multiples_pipelines.php" />
<pipeline nom="formulaire_traiter" inclure="reservations_multiples_pipelines.php" />
<pipeline nom="post_insertion" inclure="reservations_multiples_pipelines.php" />
<pipeline nom="insert_head" inclure="reservations_multiples_pipelines.php" />
</paquet>

7
prive/squelettes/contenu/configurer_reservations_multiples.html

@ -0,0 +1,7 @@
[(#AUTORISER{configurer,_reservations_multiples}|sinon_interdire_acces)]
<h1 class="grostitre"><:reservations_multiples:titre_page_configurer_reservations_multiples:></h1>
<div class="ajax">
#FORMULAIRE_CONFIGURER_RESERVATIONS_MULTIPLES
</div>

BIN
prive/themes/spip/images/enlever-16.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 660 B

BIN
prive/themes/spip/images/reservations_multiples-128.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
prive/themes/spip/images/reservations_multiples-32.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
prive/themes/spip/images/reservations_multiples-64.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

26
promotions/reservation_multiple_simple.php

@ -0,0 +1,26 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
// Définition des champs pour le détail du formulaire promotion du plugin promotions (https://github.com/abelass/promotions)
function promotions_reservation_multiple_simple_dist($flux=''){
return array('nom'=>_T('reservations_multiples:nom_reservation_multiple_simple'));
}
// Définition de l'action de la promotion
function promotions_reservation_multiple_simple_action_dist($flux,$promotion=array()){
$nr_auteur=_request('nr_auteur');
$nombre_auteurs=_request('nombre_auteurs');
//Si on est en présence de la première réservation d'une réservation multiple
if($nombre_auteurs and !$nr_auteur){
$flux['data']['applicable']='oui';
}
return $flux;
}
?>

30
reservations_multiples_fonctions.php

@ -0,0 +1,30 @@
<?php
/**
* Utilisations de pipelines par Réservations multiples
*
* @plugin Réservations multiples
* @copyright 2014
* @author Rainer
* @licence GNU/GPL
* @package SPIP\Reservations_multiples\Pipelines
*/
if (!defined('_ECRIRE_INC_VERSION'))
return;
/**
* Retourne la configuration
*
* @return array Données de la configuration
**/
function reservations_multiples_config() {
include_spip('inc/config');
$config = lire_config('reservations_multiples',array());
// Si pas de config on met le défauts
if (count($config) == 0) {
$config = array('multiple_personnes' => 'on');
}
return $config;
}

318
reservations_multiples_pipelines.php

@ -0,0 +1,318 @@
<?php
/**
* Utilisations de pipelines par Réservations multiples
*
* @plugin Réservations multiples
* @copyright 2014
* @author Rainer
* @licence GNU/GPL
* @package SPIP\Reservations_multiples\Pipelines
*/
if (!defined('_ECRIRE_INC_VERSION'))
return;
/**
* Charge les valeurs d'un formulaire
*
* @pipeline formulaire_charger
* @param array $flux Données du pipeline
* @return array Données du pipeline
**/
function reservations_multiples_formulaire_charger($flux) {
$form = $flux['args']['form'];
//Le formulaire reservation
if ($form == 'reservation') {
$config = reservations_multiples_config();
// Si inscription de plusieurs personnes
if ($config['multiple_personnes'] == 'on') {
$champs_extras_auteurs_add = array();
$ajouter = array();
$nombre_auteurs = intval(_request('nr_auteurs')) ? _request('nr_auteurs') : (_request('nombre_auteurs') ? _request('nombre_auteurs') : '');
if (_request('nr_auteurs') == 'nada')
$nombre_auteurs = 0;
$i = 1;
while ($i <= $nombre_auteurs) {
$nr = $i++;
$ajouter[$nr] = $nr;
$flux['data']['nom_' . $nr] = '';
$flux['data']['email_' . $nr] = '';
if ($flux['data']['champs_extras_auteurs']) {
//Adapter les champs extras
foreach ($flux['data']['champs_extras_auteurs'] as $key => $value) {
$flux['data'][$value['options']['nom'] . '_' . $nr] = '';
$champs_extras_auteurs_add[$nr][$key] = $value;
$champs_extras_auteurs_add[$nr][$key]['options']['nom'] = $value['options']['nom'] . '_' . $nr;
}
}
}
$flux['data']['id_reservation_source'] = '';
$flux['data']['type_lien'] = '';
$flux['data']['origine_lien'] = '';
$flux['data']['nombre_auteurs'] = $nombre_auteurs;
$flux['data']['nr_auteurs'] = '';
$flux['data']['champs_extras_auteurs_add'] = $champs_extras_auteurs_add;
$flux['data']['ajouter'] = $ajouter;
$flux['data']['_hidden'] .= '<input type="hidden" name="nombre_auteurs" value="' . $flux['data']['nombre_auteurs'] . '">';
}
}
return $flux;
}
/**
* Vérifie les données d'un formulaire
*
* @pipeline formulaire_verifier
* @param array $flux Données du pipeline
* @return array Données du pipeline
**/
function reservations_multiples_formulaire_verifier($flux) {
$form = $flux['args']['form'];
if ($form == 'reservation') {
$config = reservations_multiples_config();
// Si inscription de plusieurs personnes
if ($config['multiple_personnes'] == 'on') {
//enlever le message d'erreur en attendand de comnprendre d'ou vient ce message qui se met d'office
unset($flux['data']['message_erreur']);
//Une erreur bidon pour éviter ne pas traiter le formulaire lors de modification de nombre de inscrits
if (_request('nr_auteurs')) {
$flux['data'] = array('ajouter' => 'ajouter auteurs', );
}
elseif ($nombre = _request('nombre_auteurs')) {
include_spip('inc/saisies');
include_spip('cextras_pipelines');
$erreurs = array();
if (function_exists('champs_extras_objet')) {
$champs_extras_auteurs = champs_extras_objet(table_objet_sql('auteur'));
//Stocker les valeurs intitiales des champs extras
foreach ($champs_extras_auteurs as $key => $value) {
$$value['options']['nom'] = _request($value['options']['nom']);
}
}
else
$champs_extras_auteurs = array();
//Vérification des champs additionnels
$i = 1;
while ($i <= $nombre) {
$nr = $i++;
//les champs de bases obligatoires
$obligatoires = array(
'nom_' . $nr,
'email_' . $nr
);
//Tester les champs de bases obligatoires
foreach ($obligatoires AS $champ) {
if (!_request($champ))
$erreurs[$champ] = _T("info_obligatoire");
}
if ($email = _request('email_' . $nr)) {
include_spip('inc/filtres');
// la validité du mail
if (!email_valide($email)) {
$erreurs['email_' . $nr] = _T('form_prop_indiquer_email');
}
}
//Vérifier les champs extras
foreach ($champs_extras_auteurs as $key => $value) {
// Adapter les request pour pouvoir faire la vérification des champs extras
set_request($value['options']['nom'], _request($value['options']['nom'] . '_' . $nr));
$e = saisies_verifier($champs_extras_auteurs);
//Adapter le nom du champ
if (is_array($e)) {
foreach ($e AS $champ => $erreur) {
$erreurs[$champ . '_' . $nr] = $erreur;
}
}
}
}
//Remettre les valeurs initiales
foreach ($champs_extras_auteurs as $key => $value) {
set_request($value['options']['nom'], $$value['options']['nom']);
}
$flux['data'] = array_merge($flux['data'], $erreurs);
//remettre le message d'erreur
if (count($flux['data']) > 0)
$flux['data']['message_erreur'] = _T('reservation:message_erreur');
}
}
}
return $flux;
}
/**
* Traite les formulaires d'un formulaire
*
* @pipeline formulaire_traiter
* @param array $flux Données du pipeline
* @return array Données du pipeline
**/
function reservations_multiples_formulaire_traiter($flux) {
$form = $flux['args']['form'];
if ($form == 'reservation' AND $nombre = _request('nombre_auteurs')) {
$config = reservations_multiples_config();
// Si inscription de plusieurs personnes
if ($config['multiple_personnes'] == 'on') {
$noms = array(_request('nom'));
//Enregistrement des champs additionnels
$enregistrer = charger_fonction('reservation_enregistrer', 'inc');
//Lister les messages de retour
preg_match('/<h3>(.*?)<\/h3>/s', $flux['data']['message_ok'], $match);
$titre = $match[0];
preg_match('/<p(.*?)<\/p>/s', $flux['data']['message_ok'], $match);
$intro = $match[0];
preg_match('/<table(.*?)<\/table>/s', $flux['data']['message_ok'], $match);
$message_ok = array($match[0]);
if (function_exists('champs_extras_objet')) {
$champs_extras_auteurs = champs_extras_objet(table_objet_sql('auteur'));
}
else
$champs_extras_auteurs = array();
// ne pas créer de compte spip
set_request('enregistrer', '');
$i = 1;
//inscription aux mailinglistes
if (test_plugin_actif('reservations_mailsubscribers')) {
$inscription = charger_fonction('inscription_mailinglinglistes', 'inc');
}
//Ajouter les références à la réservation d'origine
set_request('type_lien', 'multiple_personnes');
set_request('origine_lien', 'reservations_multiples');
//Enregistrer les réservations
while ($i <= $nombre) {
//recupérer les champs par défaut
$nr = $i++;
$email = _request('email_' . $nr);
set_request('nom', _request('nom_' . $nr));
set_request('email', $email);
$noms[] = _request('nom');
//Vérifier les champs extras
foreach ($champs_extras_auteurs as $key => $value) {
// récupérer les champs extras
set_request($value['options']['nom'], _request($value['options']['nom'] . '_' . $nr));
}
set_request('nr_auteur', $nr);
//Enregistrer
$flux['data'] = $enregistrer('', '', '', $champs_extras_auteurs);
preg_match('/<table(.*?)<\/table>/s', $flux['data']['message_ok'], $match);
$message_ok[] = $match['0'];
$nr = 0;
//inscription aux mailinglistes
if (test_plugin_actif('reservations_mailsubscribers')) {
$inscription($email);
}
}
//Recopiler le messages de retour
$m = $intro;
$m .= $titre;
foreach ($message_ok AS $message) {
$m .= "<h4>$noms[$nr]</h4>";
$m .= $message;
$nr++;
}
$flux['data']['message_ok'] = $m;
}
}
return $flux;
}
/**
* Intervient sur un squelette
*
* @pipeline recuperer_fond
* @param array $flux Données du pipeline
* @return array Données du pipeline
**/
function reservations_multiples_recuperer_fond($flux) {
$fond = $flux['args']['fond'];
$contexte = $flux['data']['contexte'];
if ($fond == 'formulaires/inc-reservation_connection') {
$config = reservations_multiples_config();
if ($config['multiple_personnes'] == 'on') {
$auteurs_multiples = recuperer_fond('inclure/auteurs_multiples', $contexte, array('ajax' => 'oui'));
$flux['data']['texte'] .= $auteurs_multiples;
}
}
if ($fond == 'formulaires/inc-reservation_evenements_champ' or $fond == 'formulaires/inc-reservation_evenements_declinaisons_prix') {
$config = reservations_multiples_config();
if ($config['multiple_inscriptions'] == 'on') {
$flux['data']['texte'] .= recuperer_fond('inclure/nombre_multiples', $contexte);;
}
}
return $flux;
}
/**
* Insère des donnés dans le head public
*
* @pipeline insert_head
* @param array $flux Données du pipeline
* @return array Données du pipeline
**/
function reservations_multiples_insert_head($flux) {
$script = find_in_path('scripts/reservations_multiples.js');
$css = find_in_path('css/reservations_multiples.css');
$flux .= "<link rel='stylesheet' type='text/css' media='all' href='$css' />\n" . "<script type='text/javascript' src='$script'> </script>";
return $flux;
}
/**
* Intervient après l'enregistrement
*
* @pipeline post_insertion
* @param array $flux Données du pipeline
* @return array Données du pipeline
**/
function reservations_multiples_post_insertion($flux) {
if ($flux['args']['table'] == 'spip_reservations' AND _request('nombre_auteurs')) {
spip_log('nr : '._request('nr_auteur'),'teste');
$id_reservation = $flux['args']['id_objet'];
// premier enregisté, on met l'id_reservation_source
if(!_request('nr_auteur') > 0){
set_request('id_reservation_base', $id_reservation);
}
//Puis on recorrige l'id_reservation dans la session
else {
$id_reservation_source = _request('id_reservation_base');
set_request('id_reservation_source', $id_reservation_source );
}
}
return $flux;
}

16
scripts/reservations_multiples.js

@ -0,0 +1,16 @@
// Cacher le champ quantité quand l'événement n'est pas sélectionné
$(document).ready(function() {
var container = '.choix.quantite';
$(container).hide();
$("input.evenement:checked", $(this)).each(function() {
$(this).parent('div').next(container).show(container);
});
$('input.evenement').click(function() {
$(this).parent('div').next(container).toggle(container);
});
});
Loading…
Cancel
Save