<% /****************************************************************************** * Copyright (c) 2000-2004 e-Deal * * e-Deal S.A. * 55 rue Brillat Savarin * 75013 Paris * France * * T: +33 (0)1 53 80 80 30 * F: +33 (0)1 73 01 69 77 * http://www.e-deal.com * * La diffusion de ce code source sous quelque forme que ce soit sans * l'autorisation de E-DEAL est interdite. * * Vous êtes autorisés à modifier ce code source uniquement pour votre usage * propre et sous réserve que les mentions de copyright demeurent intactes. * * Ce code est fourni en l'état. Aucune garantie d'aucune sorte, explicite ou * implicite n'est donnée. En aucun cas E-DEAL ne pourra être tenu pour * responsable des dommages pouvant résulter de l'utilisation de ce code * source. * * CVS Info for $RCSfile$ * * $Revision$ * $Author$ $Date$ ******************************************************************************/ %><%@page session="true" import="com.edeal.frontline.*,java.util.*"%> // Ce fichier contient les fonctions de contrôle de saisie // // La fonction principale est checkField(-, -, -, -, -) <% final org.apache.commons.logging.Log logger = org.apache.commons.logging.LogFactory.getLog(getClass()); String contextPath = (String)session.getAttribute("contextPath"); FlContext context = null; if(contextPath != null) { context = Frontline.getContext(contextPath); } else { context = Frontline.getContext(request.getContextPath()); } DataDictionary dico = context.getDataDictionary(); if (context.isFullUnicode() || context.isDbOracle()) { response.setContentType("application/x-javascript; charset=UTF-8"); } else { response.setContentType("application/x-javascript; charset=ISO-8859-1"); } FlLocale locale = FlLocale.getInstance(session); %> //================================================== // Declaration des formats par défaut //================================================== <%-- var separateurDecimal = "<%= dfs.getDecimalSeparator() %>"; var separateurMilliers = "<%= dfs.getGroupingSeparator() %>"; var dateFormatIn = "dd/mm/yy"; var dateFormatOut = "DD/MM/yyyy"; var hourSeparator = ":"; --%> var centuryLimit = 90; var separateurDecimal = "<%= FlLocale.getInstance(session).getDecimalSeparator() %>"; var separateurMilliers = "<%= FlLocale.getInstance(session).getGroupingSeparator() %>"; var dateFormatIn = "<%= FlLocale.getInstance(session).getInputJavascriptDateFormat() %>"; var dateFormatOut = "<%= FlLocale.getInstance(session).getOutputJavascriptDateFormat() %>"; var dateSeparator = "<%= FlLocale.getInstance(session).getDateSeparator() %>"; var hourSeparator = "<%= FlLocale.getInstance(session).getHourSeparator() %>"; //================================================== // tempStatus ecrit un message dans la barre d'état // et l'enlève automatiquement au bout de 4 sec //================================================== function tempStatus(message) { window.status = message; window.setTimeout("window.status=''", 4000); } //================================================== // myReplace remplace une sous-chaine sans la // considérer comme une expression régulière regex //================================================== function myReplace(str, oldStr, newStr) { return str.split(oldStr).join(newStr); } //================================================== // removeLeadingZeros enlève les 0 du début de la // chaine afin d'éviter qu'elle ne soit considérée // comme un entier en base 8 ou 16 //================================================== function removeLeadingZeros(str) { if (str == '') return str; var i = 0; while (i < str.length && str.substr(i , 1) == '0') i++; if (i == str.length) return '0'; return str.substr(i); } //================================================== // checkDate controle si une chaine (non vide) // peut être intertprétée en date étant donné // un format d'entrée Si c'est le cas, elle // elle rend la date suivant un format de retour, // sinon elle rend la chaine vide //================================================== function checkDate(strDate, srcFormat, dstFormat) { // Le format : // mm, MM, dd, DD, yy, yyyy //-------------------------------------------------- // On verifie que le format d'entrée est acceptable //-------------------------------------------------- var srcFmt = srcFormat.split(dateSeparator); var srcIndex = new Array(-1, -1, -1); var i; if(srcFmt.length != 3) { return ''; } for(i = 0; i < 3; i++) { if(srcFmt[i].toLowerCase() == 'dd') { srcIndex[0] = i; } else if(srcFmt[i].toLowerCase() == 'mm') { srcIndex[1] = i; } else if(srcFmt[i].toLowerCase() == 'yy' || srcFmt[i].toLowerCase() == 'yyyy') { srcIndex[2] = i; } else { return ''; } } for(i = 0; i < 3; i++) { if(srcIndex[i] == -1) return ''; } //-------------------------------------------------- // On verifie si le format de retour est acceptable //-------------------------------------------------- var dstIndex; var dstFmt; if (!dstFormat || dstFormat == '') { dstFmt = srcFmt; dstIndex = srcIndex; } else { dstFmt = dstFormat.split(dateSeparator); dstIndex = new Array(-1, -1, -1); if(dstFmt.length != 3) return ''; for(i = 0; i < 3; i++) { if(dstFmt[i].toLowerCase() == 'dd') { dstIndex[0] = i; } else if(dstFmt[i].toLowerCase() == 'mm') { dstIndex[1] = i; } else if(dstFmt[i].toLowerCase() == 'yy' || dstFmt[i].toLowerCase() == 'yyyy') { dstIndex[2] = i; } else { return ''; } } for(i = 0; i < 3; i++) { if(dstIndex[i] == -1) return ''; } } //-------------------------------------------------- // Les formats sont OK, on vérifie la valeur donnée //-------------------------------------------------- var majFmt = new Array('DD', 'MM', 'YY'); var unsortedDate = strDate.split(dateSeparator); if (unsortedDate.length != 3) return ''; for(i = 0; i < 3; i++) { // if(isNaN(unsortedDate[i])) { if(isNaN(removeLeadingZeros(unsortedDate[i]))) { return ''; } } var sortDate = new Array(3); for(i = 0; i < 3; i++) { // sortDate[i] = parseInt(unsortedDate[srcIndex[i]]); sortDate[i] = parseInt(removeLeadingZeros(unsortedDate[srcIndex[i]])); // modif // rajouté par RaF pour 赩ter que dd/mm/ se transforme en dd/mm/NaN if (isNaN(sortDate[i])) { return ''; } // fin modif } // vérification du mois if(sortDate[1] < 1 || sortDate[1] > 12) { return ''; } // passage à 4 chiffres de l'année if(sortDate[2] < 100) { if(sortDate[2] > centuryLimit) { sortDate[2] += 1900; } else { sortDate[2] += 2000; } } // vérification du jours var maxDays; switch (sortDate[1]) { case 2: if((sortDate[2] % 4) == 0 && (!((sortDate[2] % 100) == 0) || (sortDate[2] % 400) == 0)) { maxDays = 29; } else { maxDays = 28; } break; case 4: case 6: case 9: case 11: maxDays = 30; default: maxDays = 31; } if(sortDate[0] < 1 || sortDate[0] > maxDays) return ''; //-------------------------------------------------- // La valeur donnée est OK, // on la rend selon le format de retour //-------------------------------------------------- for(i = 0; i < 3; i++) { if(dstFmt[dstIndex[i]].substring(0, 2) == majFmt[i]) { unsortedDate[dstIndex[i]] = '0000' + sortDate[i].toString(); unsortedDate[dstIndex[i]] = unsortedDate[dstIndex[i]].substring(unsortedDate[dstIndex[i]].length - dstFmt[dstIndex[i]].length); } else { unsortedDate[dstIndex[i]] = sortDate[i].toString(); if(unsortedDate[dstIndex[i]].length > dstFmt[dstIndex[i]].length) { unsortedDate[dstIndex[i]] = parseInt(unsortedDate[dstIndex[i]].substring(unsortedDate[dstIndex[i]].length - dstFmt[dstIndex[i]].length)).toString(); } } } return unsortedDate.join(dateSeparator); } //================================================== // checkHour verifie si une chaine peut être // inteprétée en une heure. Le second paramètre // est le séparateur des heures / minutes //================================================== function checkHour(strHour, key) { var dstHour = new Array(0, 0); var srcHour = strHour.split(key); if(srcHour.length == 2) { for(i = 0; i < 2; i++) { dstHour[i] = srcHour[i]; } } else { if(strHour.length <= 2) { dstHour[0] = strHour; } else if(strHour.length <= 4) { dstHour[0] = strHour.substring(0, strHour.length - 2); dstHour[1] = strHour.substring(strHour.length - 2); } else { return ''; } } var hourLimit = new Array(23, 59); for(i = 0; i < 2; i++) { if(isNaN(dstHour[i])) { return ''; } else if(parseInt(dstHour[i]) < 0 || parseInt(dstHour[i]) > hourLimit[i]) { return ''; } else { dstHour[i] = '00' + dstHour[i]; dstHour[i] = dstHour[i].substring(dstHour[i].length - 2); } } return dstHour.join(key); } //================================================== // checkEmail contrôle si une chaine peut être // syntaxiquement considérée comme une adresse // e-mail, si c'est le cas elle rend la valeur // d'entrée sinon elle rend la chaine vide. //================================================== --> function checkEmail(laValeur) { var re = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,32}(?:\.[a-z]{2,32})?)$/i; if (re.test(laValeur)) return laValeur; else return ""; } //================================================== // checkInteger essaie de convertir une chaine en // un nombre entier; si elle y arrive, elle rend // une chaine qu'est le nombre trouvé reformatté // avec l'éventuel séparateur de milliers. //================================================== function checkInteger(laValeur , sepMil) { var sep=separateurMilliers; var valTxt; var i; var j; var c; var res=""; var neg=0; if (sepMil) sep = sepMil; valTxt = removeLeadingZeros(laValeur); valTxt = myReplace(valTxt, " ", ""); valTxt = myReplace(valTxt, sep, ""); if (valTxt == null || valTxt == '') { valTxt = '0'; } for (i=0 ; i0) if (c<"0" || c>"9") return ""; else if ((c<"0" || c>"9") && c!="-") return ""; } nVal = parseInt(valTxt); if (isNaN(nVal)) return ""; valTxt = nVal.toString(); if (valTxt.substr(0 , 1) == "-") { neg = 1; valTxt = valTxt.substr(1); } res=""; for (j=0 , i=valTxt.length-1 ; i>=0 ; i-- , j++) { if (j!=0 && j%3 == 0) res = sep + res; res = valTxt.substr(i , 1) + res; } if (neg == 1) res = "-" + res; return res; } //================================================== // checkFloat essaie de convertir une chaine en // un nombre réel; si elle y arrive, elle rend // une chaine qu'est le nombre trouvé reformatté // avec le séparateur de décimaux et l'éventuel // séparateur de milliers. //================================================== function checkFloat(laValeur , sepDeci, sepMil) { var sep=separateurMilliers; var sepDec=separateurDecimal; var valTxt; var i; var j; var c; var res=""; var neg=0; var pos; var sepDec; if (sepMil) sep = sepMil; if (sepDeci) sepDec = sepDeci; if (laValeur != '0' && laValeur != ('0' + sepDec + '0')) { valTxt = removeLeadingZeros(laValeur); } else { valTxt = laValeur; } valTxt = myReplace(valTxt, " ", ""); valTxt = myReplace(valTxt, sep, ""); valTxt = myReplace(valTxt , sepDec , "."); for (i=0 ; i0) if ((c<"0" || c>"9") && c!=".") return ""; else if ((c<"0" || c>"9") && c!="." && c!="-") return ""; } if ( valTxt.indexOf(".") > -1 && valTxt.lastIndexOf(".") != valTxt.indexOf(".") ) return ""; nVal = parseFloat(valTxt); if (isNaN(nVal)) return ""; valTxt = nVal.toString(); if (valTxt.substr(0 , 1) == "-") { neg = 1; valTxt = valTxt.substr(1); } pos = valTxt.indexOf("."); if (pos == -1) { partieEntiere = valTxt; partieDecimale = ""; } else if (pos == 0) { partieEntiere = "0"; partieDecimale = valTxt.substr(1); } else { partieEntiere = valTxt.substr(0, pos); partieDecimale = valTxt.substr(pos+1); } res=""; for (j=0 , i=partieEntiere.length-1 ; i>=0 ; i-- , j++) { if (j!=0 && j%3 == 0) res = sep + res; res = partieEntiere.substr(i , 1) + res; } if (neg == 1) res = "-" + res; if (partieDecimale != "") res = res + sepDec + partieDecimale; return res; } //================================================== // checkString permet d'appliquer un format sur une // chaîne de caractères. Le format est spécifié // dans le second paramètre. Il vaut 'lower', // 'upper', 'capitalize' ou 'remaccents' (to remove accents). //================================================== function checkString(val, op) { if (val == '') { return ''; } if (op.toLowerCase() == 'upper') { return val.toUpperCase(); } else if (op.toLowerCase() == 'lower') { return val.toLowerCase(); } else if (op.toLowerCase() == 'capitalize') { result = val.substring(0,1).toUpperCase(); for (i=1 ; i -1) { result = result.replace('à', 'a'); } while(result.indexOf('â') > -1) { result = result.replace('â', 'a'); } while(result.indexOf('ä') > -1) { result = result.replace('ä', 'a'); } while(result.indexOf('ç') > -1) { result = result.replace('ç', 'c'); } while(result.indexOf('é') > -1) { result = result.replace('é', 'e'); } while(result.indexOf('è') > -1) { result = result.replace('è', 'e'); } while(result.indexOf('ê') > -1) { result = result.replace('ê', 'e'); } while(result.indexOf('ë') > -1) { result = result.replace('ë', 'e'); } while(result.indexOf('ï') > -1) { result = result.replace('ï', 'i'); } while(result.indexOf('î') > -1) { result = result.replace('î', 'i'); } while(result.indexOf('ô') > -1) { result = result.replace('ô', 'o'); } while(result.indexOf('ö') > -1) { result = result.replace('ö', 'o'); } while(result.indexOf('ù') > -1) { result = result.replace('ù', 'u'); } while(result.indexOf('û') > -1) { result = result.replace('û', 'u'); } while(result.indexOf('ü') > -1) { result = result.replace('ü', 'u'); } return result; } else { return val; } } function checkUrl(val) { if (val == '') { return ''; } if (val.substring(0,7).toLowerCase() == 'http://'.toLowerCase()) { if (val.substring(7,8) !='' ){ return true; }else { return false; } } else if (val.substring(0,6).toLowerCase() == 'ftp://'.toLowerCase()) { if (val.substring(6,7) !='' ){ return true; }else { return false; } } else if (val.substring(0,8).toLowerCase() == 'https://'.toLowerCase()) { if (val.substring(8,9) !='' ){ return true; }else { return false; } } else if (val.substring(0,4).toLowerCase() == 'www.'.toLowerCase()) { if (val.substring(4,5) !='' ){ return true; }else { return false; } } else { return false } } // checkField est la fonction qui regroupe tous les tests function checkField(laValeur , leType , estOblig , format1 , format2) { if (laValeur == "") if (estOblig) return false; else return true; if (leType.toLowerCase() == "date") return checkDate(laValeur , format1 , format2) if (leType.toLowerCase() == "hour") return checkHour(laValeur , format1); if (leType.toLowerCase() == "email") return checkEmail(laValeur); if (leType.toLowerCase() == "integer") return checkInteger(laValeur , format1); if (leType.toLowerCase() == "float") return checkFloat(laValeur , format1 , format2); if (leType.toLowerCase() == "string") return checkString(laValeur , format1); return laValeur; } //================================================== // toSysNum prend en premier paramètre une valeur // numérique en chaine, en second paramètre le // séparateur de décimaux, en 3eme paramètre le // séparateur de milliers; et rend une chaine // prête pour un parse. //================================================== function toSysNum(valeur , sepDeci , sepMil) { var sep=separateurMilliers; var sepDec=separateurDecimal; if (sepMil) sep = sepMil; if (sepDeci) sepDec = sepDeci; var res; res = myReplace(valeur , " " , ""); res = myReplace(res , sep , ""); res = myReplace(res , sepDec , "."); return res; } //================================================== // prepNumsForSubmit prend en premier paramètre le // séparateur de décimaux, en second paramètre le // séparateur de milliers; les paramètres suivants // étant les 'Field' à reformatter. //================================================== function prepNumsForSubmit() { args = prepNumsForSubmit.arguments; sepDec = args[0]; sepMil = args[1]; for (i=2 ; i0 si (date1, hour1) > (date2, hour2) // <0 si (date1, hour1) < (date2, hour2) //============================================================= function compareDate(date1, hour1, date2, hour2, formatDate, sepHeure) { fDate = dateFormatOut; sep = hourSeparator; if (formatDate) { fDate = formatDate; } if (sepHeure) { sep = sepHeure; } var d1; var h1; var d2; var h2; if (date1) { d1 = date1; } else { d1 = checkField("01/01/1970", "date", false, dateFormatOut, fDate); } if (hour1) { h1 = hour1; } else { h1 = checkField("00:00", "hour", false, hourSeparator, sep); } if (date2) { d2 = date2; } else { d2 = checkField("01/01/1970", "date", false, dateFormatOut, fDate); } if (hour2) { h2 = hour2; } else { h2 = checkField("00:00", "hour", false, hourSeparator, sep); } //controle s1 = checkHour(h1 , sep); s2 = checkDate(d1, fDate, 'MM/DD/yyyy'); s3 = checkHour( h2 , sep); s4 = checkDate(d2, fDate, 'MM/DD/yyyy'); startTime = new Date(s2.concat(" ").concat(s1)); endTime = new Date(s4.concat(" ").concat(s3)); millidiff = startTime - endTime; return millidiff; } <% /****************************************************************************** * CVS Log File * * $Log$ * Revision 1.13 2010-09-14 16:41:52 jeanseb * allow email to have 4 chars extension * * Revision 1.12 2010/02/17 10:40:44 jeanseb * erroneous chars * * Revision 1.11 2009/10/29 09:15:35 jeanseb * bug fix: if Oracle, the js has to be considered as UTF8 * * Revision 1.10 2008/03/25 14:23:16 brian * On accepte la valeur '0' (avant on la remplace avec '') * * Revision 1.9 2008/01/25 18:20:01 brian * Fixed bug where integer zeros where getting cleared out as invalid * * Revision 1.8 2008/01/23 19:36:51 sali * fix bug on compare date * * Revision 1.7 2008/01/07 13:32:58 nomar * bug CIBLAGE V2:PreNumsForSubmit() * * Revision 1.6 2007/07/06 17:40:45 sali * correction bug 636: compareDate with locale * * Revision 1.5 2007/05/22 15:02:23 nomar * log system (Phase1 pour *.jsp) * * Revision 1.4 2006/11/16 21:18:57 omourad * adding date separator * * Revision 1.3 2005/10/14 12:35:19 raphael * utilisation du sŽparateur d'heure de la locale correction des accents * * Revision 1.2 2005/08/24 07:50:08 raphael * dŽsactivation de prepNUmForSubmit et de prepAutoNumsForSubmit * * Revision 1.1 2005/06/07 09:02:14 raphael * version initiale * * Revision 1.2 2005/02/28 19:07:09 imad * Fixed thousands separator bug * * Revision 1.1 2004/07/23 18:20:32 brian * Initial Revision * *****************************************************************************/ %>