/** * Ce script gère l'entretien de la commande et de l'annonce en session : * - inspecte à intervalle régulier les changements des éléments * - appelle la méthode ajax appropriée pour mettre à jour la commande ou annonce en session * - rafraichit la preview papier * * Scripts requis * /ajax/service_ajax.php?client=all&stub=ajaxcommande * /ajax/service_ajax.php?stub=ajaxannonce * /ajax/formulaire.js pour la fonction detecter_changement_formulaire() * /ajax/saisie_annonce/maj_annonce.js */ /** * Methodes de callback (retours ajax) */ var ght_ajax_commande_callback = { instancier : function(result) { if( result===true) gajax_annonce.set_annonce_selon_commande_en_cours(); else alert( 'Erreur lors du chargement...' ); }, creer : function(result) { if( result===true) gajax_annonce.set_annonce_selon_commande_en_cours(); else alert( 'Erreur lors du chargement...' ); }, diffusion_annonce_set_zone : function(result){}, diffusion_annonce_get_zone : function(result){}, diffusion_annonce_set_valeurs : function(result) { commande_maj_preview(); }, diffusion_annonce_get_ : function(result){}, diffusion_annonce_set_ : function(result) { commande_maj_preview(); }, methodes : function(result) { commande_maj_preview(); }, produits_set_ : function(result) { commande_maj_preview(); }, produit_set_ : function(result) { commande_maj_preview(); }, produit_get_ : function(result){} } var ght_ajax_annonce_callback = { set_type_vehicule : function(result) { commande_maj_preview(); }, set_valeurs : function(result) { commande_maj_preview(); }, annonce_set_ : function(result) { commande_maj_preview(); }, contact_set_ : function(result) { commande_maj_preview(); } } var gfunc_preview_callback = function ( ps_html_resultat ) { if( getelement('div_preview') ) { getelement('div_preview').innerHTML = ps_html_resultat; } gb_rafraichissement_preview_en_cours = false; } var gajax_commande ; var gajax_commande_sync ; var gajax_annonce ; var gajax_annonce_sync ; var timer; function initialiser_commande() { gajax_commande_sync = new AjaxCommande(); gajax_annonce_sync = new AjaxAnnonce(); gajax_commande = new AjaxCommande(ght_ajax_commande_callback); gajax_annonce = new AjaxAnnonce(ght_ajax_annonce_callback); commande_maj_preview(); restart_timer(); // on s'arrête là car Commande et Annonce déjà mis en session Ajax par ControleurCommande } /** * point d'entrée du début de la vie des choses */ function commande_verifier_et_maj() { commande_maj(); restart_timer(); } function restart_timer() { clearTimeout(timer); timer = setTimeout( 'commande_verifier_et_maj()', 3000 ); } /** * Cette fonction détecte les modifications effectuées sur le formulaire nommé "form_saisie" * Si au moins un champ est détecté comme modifié, on appelle alors la fonction * commande_maj_selon_champs sur la liste des champs modifiés. De cette façon on s'assure que l'on a une commande * à jour présente dans la session AJAX * * @param pb_synchrone flag optionnel, false par défaut, pour transmetre les informations de facon synchrone via AJAX * @return boolean indiquant si des informations ont été transmises */ function commande_maj( pb_synchrone ) { lsa_champs_modifies = detecter_changement_formulaire( 'form_saisie' ); // bidouille pour détecter si tableau pas vide (pb des tableaux assoc ) lb_au_moins_un_champ_modifie = false; for( ls_champ in lsa_champs_modifies ) { if( ls_champ != 'indexOf' ) { lb_au_moins_un_champ_modifie = true; break; } } if( lb_au_moins_un_champ_modifie ) { commande_maj_selon_champs( lsa_champs_modifies, pb_synchrone ); } return lb_au_moins_un_champ_modifie; } var gb_rafraichissement_preview_en_cours = false; function commande_maj_preview() { if( !gb_rafraichissement_preview_en_cours ) { gb_rafraichissement_preview_en_cours = true; HTML_AJAX.fullcall( 'preview_papier.php', 'UTF-8', false, null, gfunc_preview_callback ); } } /** * Cette fonction permet de transmettre les valeurs contenues des champs * de la liste reçue en paramètre. * @param psa_champs_valeurs liste de champs contenant des valeurs à transmettre * @param pb_synchrone flag optionnel, false par défaut, pour transmettre les informations de facon synchrone via AJAX */ function commande_maj_selon_champs( psa_champs_valeurs, pb_synchrone ) { lsa_methodes = new Array(); lsa_arguments = new Array(); lsa_diffusion_id = new Array(); lsa_diffusion_propriete = new Array(); la_diffusion_valeurs = new Array(); lsa_produit_id = new Array(); lsa_produit_propriete = new Array(); la_produit_valeurs = new Array(); lsa_contact_propriete = new Array(); la_contact_valeurs = new Array(); lsa_commande_propriete = new Array(); la_commande_valeurs = new Array(); if( pb_synchrone == true ) { lajax_annonce = gajax_annonce_sync; lajax_commande = gajax_commande_sync; } else { lajax_annonce = gajax_annonce; lajax_commande = gajax_commande; } // maj des données de l'annonce maj_annonce_selon_champs_valeurs( psa_champs_valeurs, lajax_annonce ); for( ls_champ in psa_champs_valeurs ) { if( ls_champ !='indexOf' ) { l_valeur = psa_champs_valeurs[ls_champ]; //Si le nom de l'input est xxDiffusionAnnonce(XX)->xx if( new RegExp("^.*DiffusionAnnonce\\([0-9]*\\)->", "i").test(ls_champ) ) { li_id_diffusion = ls_champ.substring( ls_champ.indexOf('(') + 1, ls_champ.indexOf(')') ); li_propriete = ls_champ.substring( ls_champ.indexOf('>')+1 ); li_valeur = l_valeur; //si la propriété est le tableau de zones de diffusion if( li_propriete=="zones_diffusions[]" ) { li_propriete="zones_diffusions"; } lsa_diffusion_id.push( li_id_diffusion ); lsa_diffusion_propriete.push( li_propriete ); la_diffusion_valeurs.push( li_valeur ); } //Si le nom de l'input est xxProduit(XX)->xx else if( new RegExp("^.*Produit\\([0-9]*\\)->", "i").test(ls_champ) ) { lsa_produit_id.push( ls_champ.substring(ls_champ.indexOf('(') + 1, ls_champ.indexOf(')')) ); lsa_produit_propriete.push( ls_champ.substring( ls_champ.indexOf('>') + 1) ); la_produit_valeurs.push( l_valeur ); } //Si le nom de l'input est xxContact->xx ou xxAnnonceur->xx else if( new RegExp("^Contact->", "i").test(ls_champ) || new RegExp("^Annonceur->", "i").test(ls_champ) ) { lsa_contact_propriete.push( ls_champ ); la_contact_valeurs.push( l_valeur ); } else if( new RegExp("^Commande->", "i").test(ls_champ) ) { lsa_commande_propriete.push( "set_" + ls_champ.substring(ls_champ.indexOf('>') + 1) ); la_commande_valeurs.push( l_valeur ); } } } if( lsa_diffusion_id.length > 0 ) { lajax_commande.diffusion_annonce_set_valeurs( lsa_diffusion_id, lsa_diffusion_propriete, la_diffusion_valeurs ); } if( lsa_produit_id.length > 0 ) { lajax_commande.produits_set_( lsa_produit_id, lsa_produit_propriete, la_produit_valeurs ); } if( lsa_contact_propriete.length > 0 ) { lajax_annonce.contact_set_( lsa_contact_propriete, la_contact_valeurs ); } if( lsa_commande_propriete.length > 0 ) { lajax_commande.methodes( lsa_commande_propriete, la_commande_valeurs ); } } function envoyer_photo(pi_id_diffuseur) { gajax_commande.diffusion_annonce_set_( pi_id_diffuseur, "photo", getelement('hd_photo#da' + pi_id_diffuseur).value ); } function envoyer_signes_sup(pi_id_ligne_commande, p_valeur) { gajax_commande.ligne_commande_set_( pi_id_ligne_commande, 'quantite', p_valeur ) }