retourne 1 return 1; reset($adresses); $i = 0; $adrid_array = Array(); foreach($adresses as $numero => $adr){ $adrid_array[$i] = $numero; $i++; } sort($adrid_array,SORT_NUMERIC); // classe les adrid dans l'ordre croissant $new_adrid = 1; while(list($key,$current_adrid) = each($adrid_array)){ if($current_adrid == $new_adrid) $new_adrid++; else return $new_adrid; //s'ils sont differents, il y a un trou dans la liste des adrid donc new_adrid convient } //si aucun convient, on retourne le plus grand des adrid actuel + 1 return $new_adrid; } function replace_ifset_adr($varname, $i){ $tab = Env::getMixed($varname, Array()); if (isset($tab[$i])) $GLOBALS['adresses'][$i][$varname] = $tab[$i]; } function get_adr_arg($varname, $i) { $tab = Env::getMixed($varname, Array()); return $tab[$i]; } function set_flag_adr($varname,$i){ $tab = Env::getMixed($varname, Array()); if (isset($tab[$i])){ $GLOBALS['adresses'][$i][$varname] = 1; } else $GLOBALS['adresses'][$i][$varname] = '0'; } function replace_address($i){ global $adresses; if(!isset($adresses[$i])){ $adresses[$i]['nouvelle'] = 'ajout'; $adresses[$i]['adrid'] = $i; } replace_ifset_adr('secondaire', $i); set_flag_adr('courrier', $i); replace_ifset_adr('temporaire', $i); if(Env::getInt('adrid_active', $i+1) == $i) $adresses[$i]['active'] = 1; else $adresses[$i]['active'] = 0; replace_ifset_adr('adr1', $i); replace_ifset_adr('adr2', $i); replace_ifset_adr('adr3', $i); replace_ifset_adr('postcode', $i); replace_ifset_adr('city', $i); replace_ifset_adr('cityid', $i); replace_ifset_adr('country', $i); replace_ifset_adr('region', $i); replace_ifset_adr('tel', $i); replace_ifset_adr('fax', $i); replace_ifset_adr('pub', $i); replace_ifset_adr('tel_pub', $i); if (!get_adr_arg('parsevalid', $i)) replace_ifset_adr('txt', $i); $tab = Env::getMixed('numero_formulaire', Array()); if($tab[$i]) $adresses[$i]['numero_formulaire'] = $tab[$i]; else $adresses[$i]['numero_formulaire'] = -1; } function geoloc_adresse($i) { global $adresses; $change = Env::get('change'.$i); if (get_adr_arg('parsevalid', $i) || ($adresses[$i]['txt'] && $change) || (!$adresses[$i]['cityid'])) { require_once('geoloc.inc.php'); // erases the previous address (but not the phone or pub) $adresses[$i] = array_merge($adresses[$i], empty_address()); // localize new address $new = get_address_infos($adresses[$i]['txt']); if (compare_addresses_text($adresses[$i]['txt'], $geotxt = get_address_text($new)) || get_adr_arg('parsevalid', $i)) $adresses[$i] = array_merge($adresses[$i], $new); else { $adresses[$i] = array_merge($adresses[$i], cut_address($adresses[$i]['txt'])); $adresses[$i]['geoloc'] = $geotxt; $adresses[$i]['geoloc_cityid'] = $new['cityid']; } } $adresses[$i]['txt'] = get_address_text($adresses[$i]); } //remplace par les eventuelles nouvelles valeurs : for ($adrid = 1; $adrid <= $nb_adr_max; $adrid++) { $tab = Env::getMixed('adrid', Array()); if(isset($tab[$adrid])){ //cet adrid etait donc present dans le formulaire replace_address($adrid); } if (isset($adresses[$adrid]['txt'])) geoloc_adresse($adrid); } if(Env::get('old_tab', '') == 'adresses' && Env::has('modifier')){ // on ne valide que qd on vient du formulaire $adresses_principales = 0; reset($adresses); foreach($adresses as $adrid => $adr) { //validité de chaque adresse $description = (($adr['numero_formulaire'] > 0)?"Adresse n°{$adr['numero_formulaire']}":"Nouvelle adresse"); if (strlen(strtok($adr['adr1'],"<>{}@~?!§*`|%$^=+")) < strlen($adr['adr1'])) { $str_error = $str_error."Le champ '$description - Ligne 1' contient un caractère interdit.
"; } if (strlen(strtok($adr['adr2'],"<>{}@~?!§*`|%$^=+")) < strlen($adr['adr2'])) { $str_error = $str_error."Le champ '$description - Ligne 2' contient un caractère interdit.
"; } if (strlen(strtok($adr['adr3'],"<>{}@~?!§*`|%$^=+")) < strlen($adr['adr3'])) { $str_error = $str_error."Le champ '$description - Ligne 3' contient un caractère interdit.
"; } if (strlen(strtok($adr['postcode'],"<>{}@~?!§*`|%$^=+")) < strlen($adr['postcode'])) { $str_error = $str_error."Le champ '$description - Code Postal' contient un caractère interdit.
"; } if (strlen(strtok($adr['city'],"<>{}@~?!§*`|%$^=+")) < strlen($adr['postcode'])) { $str_error = $str_error."Le champ '$description - Ville' contient un caractère interdit.
"; } if (strlen(strtok($adr['tel'],"<>{}@&#~\/:;?,!§*_`[]|%$^=\"")) < strlen($adr['tel'])) { $str_error = $str_error."Le champ '$description - Téléphone' contient un caractère interdit.
"; } if (strlen(strtok($adr['fax'],"<>{}@&#~\/:;?,!§*_`[]|%$^=\"")) < strlen($adr['fax'])) { $str_error = $str_error."Le champ '$description - Fax' contient un caractère interdit.
"; } if(!$adr['secondaire']){ if($adresses_principales == 1){ //deja une adresse principale $str_error = $str_error."Tu ne peux avoir qu'une résidence principale.
"; $adresses_principales++;//pour eviter de repeter le message plusieurs fois } else $adresses_principales = 1; } } } //on vire les adresses vides : if(isset($adresses)){ // s'il y en a reset($adresses); foreach($adresses as $adrid => $adr){ if(is_adr_empty($adrid)){ delete_address($adrid); } } } //on génère une éventuelle nouvelle adresse if (!isset($adresses) || (count($adresses) < $nb_adr_max)){ $adrid = generate_new_adrid(); $adresses[$adrid]['adrid'] = $adrid; $adr = &$adresses[$adrid]; $adr['adr1'] = ''; $adr['adr2'] = ''; $adr['adr3'] = ''; $adr['postcode'] = ''; $adr['city'] = ''; $adr['country'] = '00'; $adr['region'] = ''; $adr['tel'] = ''; $adr['fax'] = ''; $adr['secondaire'] = 1; $adr['courrier'] = 0; $adr['active'] = 0; $adr['temporaire'] = 1; $adr['pub'] = 'private'; $adr['tel_pub'] = 'private'; $adr['nouvelle'] = 'new'; //n'est pas issue d'un formulaire (sert dans update_adresses...) } unset($adr); unset($adrid); //tri des adresses : reset($adresses); $i = 1; foreach($adresses as $adrid_ => $adr_){ if(($adresses[$adrid_]['active']) && ($adr_['nouvelle'] != 'new')){ $ordre_des_adrid[$i] = $adrid_; $i++; $est_attribuee[$adrid_] = 1; } else $est_attribuee[$adrid_] = 0; } reset($adresses); foreach($adresses as $adrid_ => $adr_){ if(($adresses[$adrid_]['secondaire'] == 0) && ($est_attribuee[$adrid_] == 0) && ($adr_['nouvelle'] != 'new')){ // principale et non attribuee $ordre_des_adrid[$i] = $adrid_; $i++; $est_attribuee[$adrid_] = 1; } } reset($adresses); foreach($adresses as $adrid_ => $adr_){ if(($adresses[$adrid_]['temporaire'] == 0) && ($est_attribuee[$adrid_] == 0) && ($adr_['nouvelle'] != 'new')){ // permanente et non attribuee $ordre_des_adrid[$i] = $adrid_; $i++; $est_attribuee[$adrid_] = 1; } } reset($adresses); foreach($adresses as $adrid_ => $adr_){ if($est_attribuee[$adrid_] == 0){ // non attribuee $ordre_des_adrid[$i] = $adrid_; $i++; $est_attribuee[$adrid_] = 1; } } $nb_adr = $i - 1; $page->assign_by_ref('ordre_adrid',$ordre_des_adrid); $page->assign('nb_adr',$nb_adr+1); ?>