Changeset 71546 in spip-zone


Ignore:
Timestamp:
Apr 3, 2013, 10:46:43 PM (8 years ago)
Author:
gildas.cotomale@…
Message:

Séparation entre les types de formatage et les types d'usage, et contrôle/affichage suivant le format ;)

Location:
_plugins_/coordonnees/branches/v1t
Files:
13 edited
1 moved

Legend:

Unmodified
Added
Removed
  • _plugins_/coordonnees/branches/v1t/action/editer_email.php

    r71104 r71546  
    6767                $c['id_email'] = $id_email;
    6868                sql_insertq('spip_emails_liens', $c);
    69                 ));
    7069        }
    7170
     
    8180                $c = array();
    8281                foreach (array(
    83                         'email', 'titre',
     82                        'email', 'titre', 'format',
    8483                ) as $champ ) {
    8584                        if (($a = _request($champ)) !== NULL) {
  • _plugins_/coordonnees/branches/v1t/base/coordonnees.php

    r71234 r71546  
    7373        $emails = array(
    7474                "id_email" => "BIGINT NOT NULL auto_increment",
    75                 "titre" => "VARCHAR(255) DEFAULT '' NOT NULL", // peut etre perso, boulot, etc.
     75                "titre" => "VARCHAR(255) DEFAULT '' NOT NULL", // alias: perso, boulot, etc.
     76                "format" => "VARCHAR(9) DEFAULT 'internet' NOT NULL", // pour les vCard : 'internet'|'x400' ; pour nombre de proxy : 'SMTP'|'X400'|'SIP' ...parfois (Lotus) 'Inet'|'X.400' pfff
    7677                "email" => "VARCHAR(255) DEFAULT '' NOT NULL",
    7778                "maj" => "TIMESTAMP"
  • _plugins_/coordonnees/branches/v1t/base/coordonnees_upgrade.php

    r71075 r71546  
    143143
    144144                include_spip('base/upgrade');
    145                 maj_tables('spip_adresses'); //=                $ok &= sql_alter("TABLE spip_adresses ADD region VARCHAR(40) DEFAULT '' NOUT NULL");
    146 
    147                 if ($ok){
     145                maj_tables('spip_adresses'); //=                $ok &= sql_alter("TABLE spip_adresses ADD region VARCHAR(40) DEFAULT '' NOT NULL");
     146
     147                if ($ok){ // "maj_tables" ne renvoit rien... mais le retour de "sql_alter" n'est pas pertinent (sauf en cas d'indisponibilite du serveur ou il renvoit FALSE)
    148148                        spip_log('Tables coordonnées correctement passsées en version 1.6','coordonnees');
    149149                        ecrire_meta($nom_meta_base_version, $current_version="1.6");
     
    179179
    180180                include_spip('base/create');
    181                 creer_base(); //=               $ok &= sql_create("spip_syndic_liens", array('id_syndic'=>"BIGINT NOT NULL DEFAULT 0", 'id_objet'=>"BIGINT NOT NULL DEFAULT 0", 'objet'=>"VARCHAR(25) NOT NULL", 'type'=>"VARCHAR(25) NOT NULL DEFAULT ''", ), array('PRIMARY KEY'=>"id_syndic, id_objet, objet, type", 'KEY id_syndic'=>"id_syndic", false, false ) );
    182 
    183                 if ($ok){ // "create" ne renvoit rien :-/
     181                maj_tables('spip_syndic_liens'); //=            $ok &= sql_create("spip_syndic_liens", array('id_syndic'=>"BIGINT NOT NULL DEFAULT 0", 'id_objet'=>"BIGINT NOT NULL DEFAULT 0", 'objet'=>"VARCHAR(25) NOT NULL", 'type'=>"VARCHAR(25) NOT NULL DEFAULT ''", ), array('PRIMARY KEY'=>"id_syndic, id_objet, objet, type", 'KEY id_syndic'=>"id_syndic", false, false ) );
     182
     183                if ($ok){ // ni "sql_create" ni "maj_tables" ne renvoient rien :-/
    184184                        ecrire_meta($nom_meta_base_version, $current_version="1.8");
     185                }
     186                else return false;
     187        }
     188
     189        // On distingue les formats des types d'usage
     190        if (version_compare($current_version, "1.9", "<")) {
     191                $ok = true;
     192
     193                include_spip('base/upgrade');
     194                maj_tables('spip_emails'); //=          $ok &= sql_alter("TABLE spip_emails ADD format VARCHAR(9) DEFAULT '' NOT NULL");
     195
     196                if ($ok){ // "maj_tables" ne renvoit rien... mais le retour de "sql_alter" n'est pas pertinent (sauf en cas d'indisponibilite du serveur ou il renvoit FALSE)
     197                        ecrire_meta($nom_meta_base_version, $current_version="1.9");
    185198                }
    186199                else return false;
  • _plugins_/coordonnees/branches/v1t/coordonnees_fonctions.php

    r71238 r71546  
    8080 *  Valeur du format d'adresse de courriel (cf. logo_type_).
    8181 *  Les valeurs nativement prises en compte sont les codes normalisees
    82  * IANA/RFC2426 (section 3.3.2) : internet (SMTP) pref x400 (X.400)
    83  *  Ces formats correspondent en fait a des "services" associes, et Internet est
    84  * pour le SMTP par defaut. Aussi, certaines applications ajoutent leur variante
    85  * proprietaire/personnelle : AOL (America On-Line), AppleLink (AppleLink), CIS
    86  * (CompuServe Information Service), eWorld (eWorld), IBMMail (IBM Mail), MCIMail
    87  * (MCI Mail), POWERSHARE (PowerShare), PRODIGY (Prodigy information service),
    88  * TLX (Telex number), TTMail (AT&T Mail), etc. Bien que non pris en charge
    89  * nativement, ils peuvent etre utilise en surchargeant le fichier listant les
    90  * types puis en rajoutant le logo (Compuserve-GIF/JPEG/PNG) dans le repertoire
    91  * "images/" et en donnant l'intitule dans sons fichier de langue perso "lang/perso_??.html"
     82 * IANA/RFC2426 (section 3.3.2) : internet (SMTP) pref x400 (CCITT_F.400/ITU-T_X.400)
     83 * @note
     84 *  Ces formats definis precisement par des RFC sont associes a des "services" ;
     85 * et, pour Internet, certaines applications utilisent leur nom de service
     86 * proprietaire :
     87 * AOL (America On-Line) 1983--???? http://en.wikipedia.org/wiki/America_Online
     88 * AppleLink (Apple Computer's online service) 1986--1994 http://en.wikipedia.org/wiki/AppleLink
     89 * CIS (CompuServe Information Service) 1969--2009 http://en.wikipedia.org/wiki/CompuServe
     90 * eWorld (eWorld) 1994--1996 http://en.wikipedia.org/wiki/EWorld
     91 * IBMMail (IBM Mail) http://en.wikipedia.org/wiki/IBMMAIL
     92 * MCIMail (MCI Mail) 1983--2003 http://en.wikipedia.org/wiki/MCI_Mail
     93 * POWERSHARE (PowerShare : Apple Open Collaboration Environment) 1993-1996 http://en.wikipedia.org/w/Apple_Open_Collaboration_Environment
     94 * PRODIGY (Prodigy information service) 1984--???? http://en.wikipedia.org/wiki/Prodigy_%28online_service%29
     95 * TTMail (AT&T Mail) http://en.wikipedia.org/wiki/AT%26T_Internet_Services ?
     96 * TLX (Telex number), etc. http://www.perlmonks.org/bare/?node_id=168011
     97 * Bien que non geres de base, ils peuvent etre utilise en surchargeant
     98 * "saisie/type_email" puis en rajoutant le logo (Compuserve-GIF/JPEG/PNG) dans
     99 * "images/" et en donnant l'intitule dans "lang/perso_??.php" (ces 3 repertoires
     100 * sont a creer dans votre dossier "squelettes" !)
     101 *   Bien entendu, garder a l'esprit que ces valeurs hors standards ajoutent des
     102 * problemes d'interoperabilite et des disfonctionnements meme dans ces solutions
     103 * proprios http://www.abc.se/~m8827/prog/mailserv.html
     104 *   Mais, in fine, seuls SMTP et X.400 sont largement supportes...
     105 * http://www.powershellcommunity.org/Forums/tabid/54/aft/5249/Default.aspx
     106 * http://www.msexchange.org/articles-tutorials/exchange-server-2010/management-administration/x400-addresses-exchange-2010-part1.html
     107 * http://www.isode.com/whitepapers/ic-6036.html
    92108 * @return string
    93109 *  Balise HTML micro-format (cf. logo_type_)
     
    123139function filtre_logo_type_impp($type_messagerie) {
    124140        return logo_type_('impp', $type_messagerie);
     141}
     142
     143/**
     144 * filtre d'elements du lien hypertexte d'une adresse de courriel
     145 *
     146 * @param string $adresse
     147 *  Valeur de l'email
     148 * @param string $format
     149 *  Type de formatage : internet|x400
     150 * @return string
     151 *  Attributs CLASS et HREF de la balise A
     152**/
     153function filtre_lien_type_mel($adresse, $format='smtp') {
     154        $adresse = trim($adresse);
     155        $prefixe = ''; // defaut
     156        switch (strtolower($format)) {
     157                case 'smtp':
     158                case 'inet':
     159                case 'internet':
     160                        break;
     161                case 'x400':
     162                case 'x500': // encapsule "X.400" pour le courrier electronique
     163                case 'ex': // Exchange : synonyme de X.500
     164                case 'ad': // Active Dircetory : synonyme de X.500
     165                        $delimiteur = ctype_alpha($adresse[0])?';':$adresse[0]; // X.400 recommande le delimiteur ';' ...mais on peut en utiliser un autre comme '/' a condition de le specifier au debut... cf. note 4 de la RFC 1685
     166                        $prefixe = 'IMCEAEX-'.($delimiteur==';'?'_':''); // http://www.outlookforums.com/threads/8929-how-can-i-hide-my-x400-address-going-senders-exchange-2007-when-person-hidden-gal/
     167                        $adresse = str_replace($delimiteur, '_', $adresse); // http://www.experts-exchange.com/Software/Server_Software/Email_Servers/Exchange/A_9650-NDRs-and-the-legacyExchangeDN.html
     168                        break;
     169                case 'ldap': // "LDAP" est l'equivalent "X.500" sur IP (creer initialement pour)
     170                        $prefixe = 'IMCEAEX-_'; // cf "X.500"
     171                        $adresse = str_replace(',', '_', $adresse); // cf "X.500"
     172                        break;
     173                case 'ccmail':
     174                        $adresse = str_replace(' at ', '@', $adresse);
     175                        break;
     176                case 'ms':
     177                        $last_slash = strrpos($adresse, '/');
     178                        $adresse = substr($adresse, $last_slash+1) .'@'. str_replace('/', '.', substr($adresse, 0, $last_slash)); // correspond probablement au UPN http://msdn.microsoft.com/en-us/library/windows/desktop/aa380525%28v=vs.85%29.aspx
     179                        break;
     180                default:
     181                        $prefixe = '';
     182        }
     183        return  " class='email' href='mailto:$prefixe$adresse' ";
    125184}
    126185
  • _plugins_/coordonnees/branches/v1t/formulaires/editer_email.html

    r71104 r71546  
    1616                                [(#SAISIE{type_mel, type, label=<:coordonnees:label_type_email:>})]
    1717                        ]
     18                                [(#SAISIE{type_email, format, label=<:coordonnees:label_format_email:>})]
    1819                                [(#SAISIE{input, email, obligatoire, label=<:coordonnees:label_email:>})]
    1920                        </ul>
  • _plugins_/coordonnees/branches/v1t/formulaires/editer_email.php

    r71104 r71546  
    1616function formulaires_editer_email_verifier_dist($id_email='new', $objet='', $id_objet='', $retour=''){
    1717        $erreurs = formulaires_editer_objet_verifier('email', $id_email, array('email') );
     18        if ( !count($erreurs) AND $format = strtolower(_request('format')) ) { // les champs obligatoires sont renseignes (donc pas d'erreur) et on a specifie un format de mel...
     19                $adresse = trim(_request('email'));
     20                switch ($format) {
     21                        case 'smtp': // SMTP:compte@domaine.tld (RFC5321+5322+6531)
     22                        case 'internet': // (c'est l'equivalent utilise par la RFC )
     23                        case 'inet': // (c'est l'abreviation pour Internet, utilise par Lotus par exemple)
     24                                include_spip('inc/filtres'); // filtre "email_valide"
     25                                $invalidite = !email_valide($adresse);
     26                                break;
     27                        case 'x400': // X400:C=CC;A= ;P=mygot;O=Exchange;S=John;G=Prenom; (RFC1685+1664+1801)
     28                                $invalidite = !( preg_match('/A=([^;]+);/', $adresse) OR (preg_match('/P=([^;]+);/', $adresse) AND strpos($adresse, 'A= ')) ); // Il faut le "ADministration Management Domain Name" (clef A) qui vaut un espace quand on n'utilise que le "PRivate Management Domain Name"
     29                                $dest1 = preg_match('/O=([^;]+);/', $adresse) AND (strpos($adresse, 'OU4=')?(strpos($adresse, 'OU3=')?(strpos($adresse, 'OU2=')?(strpos($adresse, 'OU1=')?TRUE:FALSE):TRUE):TRUE):TRUE); // indiquer le "Organization" et optionnellement "Organizational Unit 1/2/3/4" (mais dans l'ordre : pas de 3 sans 2...)
     30                                $dest2 = preg_match('/CN=([^;]+);/', $adresse) OR (preg_match('/G=([^;]+);/', $adresse) AND preg_match('/S=([^;]+);/', $adresse)); // Une fois dans la place, il faut bien un recipiendaire dont on donne le "Common Name" (Prenom Famille) ou le "Surname" (nom de amille) et le le "Given name" (prenom usuel) qui le composent (les "Initials" et le "generation Qualifier" sont bien facultatifs, tandis que bien que non exige, le "Given name" est souvent discriminant)
     31                                $invalidite &= !( preg_match('/CN=([^;][A-Z]{2});/', $adresse) AND ($dest1 OR $dest2) ); // Outre la passerelle de messagerie, il faut indiquer le "Country code ISO" et le destinataire.
     32                                break; // Quand present, on peut profiter directement des parametres "DDA:rfc-822=name(a)org;DDA:acp-plad=org" ou '(a)' est pour '@' dans l'adresse SMTP selon la RFC 822 et ses successeurs
     33                        case 'ldap': // DN:cn=Prenom Famille,uid=Identifiant,dc=Domaine,dc=tld
     34                                $invalidite = !( preg_match('/dc=([^,][a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]),dc=([a-z]{2,})[,$]/', $adresse) OR preg_match('/c=([^,][A-Z]{2})[,$]/', $adresse) );  // Il faut au moins deux elements (nom et extension) de "Domain Controler" ou "Country code ISO" (mais dans ce cas ne faudrait-il pas obligatoirement les "STate"/"Locality" et/ou "Organization" en plus ?) http://en.wikipedia.org/wiki/LDAP#Usage
     35                                $invalidite &= !( preg_match('/cn=([^,]+)[,$]/', $adresse) OR preg_match('/uid=([^,]+)[,$]/', $adresse) ); // Il faut le "Canonical Name" (Prenom Initial-eventelle Famille) qui est relatif ou le "User IDentifier" qui est absolu et unique
     36                                break; // On pourrait peut-etre simplement envoyer le "Distinguished Name of the entry" a un serveur et voir s'il y a une reponse (i.e. si l'entree existe...) http://en.wikipedia.org/wiki/LDAP#LDAP_URLs
     37                        case 'x500': // X500:/o=Multinationale/ou=filiale France/cn=Recipients of  /cn=compte_utilisateur (exemple de ce que produit Outlook/Exchange)
     38                        case 'ex': // (autre nom en reference a "microsoft EXchange" ou c'est tres utilise http://social.technet.microsoft.com/forums/en-US/exchangesvrdeploylegacy/thread/9911853d-67c9-48ec-af8a-7fd72832d778/ )
     39                        case 'ad': // (autre nom en reference a "microsoft Active Directory" qui est bien un annuaire X.500 http://www.experts-exchange.com/Software/Server_Software/Email_Servers/Exchange/A_9650-NDRs-and-the-legacyExchangeDN.html )
     40                                $invalidite = !preg_match('#/o=([[:alnum:]]+)[/$]#', $adresse) ; // Il faut un structure racine
     41                                $invalidite &= !( preg_match('#/cn=([[:alnum:]]+)[/$]#', $adresse) OR preg_match('#/ou=([[:alnum:]]+)[/$]#', $adresse) ); // Il faut un "Canonical Name" ou un "Organization Unit"
     42                                break; // On pourrait peut-etre simplement envoyer la chaine un serveur et voir s'il y a une reponse (i.e. si l'entree existe...)
     43                        case 'ms': // MS:domainin/domain/user
     44                                $invalidite = !stripos($adresse, '/'); // Un dernier "slash"
     45                                $invalidite = !substr_count($adresse, '/', 2); // Au moins un "slash" et un "domain" de plus de 2 caracteres. en fait faudrait une belle regex pour s'assurer qu'on ne depasse pas la longueur maximale et qu'il n'y a pasde caractere prohibe http://support.microsoft.com/kb/909264
     46                                break; // Il s'agit "domain" NT de windows server : S'il correspond au FQDN alors l'adresse de courriel pourrait etre user@domainin.domain tout simplement ! http://msdn.microsoft.com/en-us/library/windows/desktop/ms675915%28v=vs.85%29.aspx http://support.microsoft.com/kb/244670
     47                        case 'ccmail': // CCMAIL:Name, user at domain
     48                                $invalidite = !strpos($adresse, ' at '); //
     49                                break; // Pourquoi ne pas indiquer le "Full Qualified Domain Name" et remplacer ' at ' par '@' tout simplement ?
     50                        case '': // a partir d'ici mettre vos cas rajoutes si vous surchargez la verif
     51                                $invalidite = FALSE; // cette variable recoit le resultat d'echec de votre validation
     52                                break;
     53                        default: // Pour le reste on fait rien...
     54                                $invalidite = TRUE; // mais on rale au format incompris...
     55                                break; //
     56                }
     57                if ($invalidite)
     58                        $erreurs['email'] = _T('spip:info_email_invalide'); // informer que "Adresse email invalide."
     59        }
    1860        return $erreurs;
    1961}
  • _plugins_/coordonnees/branches/v1t/lang/coordonnees_en.php

    r71238 r71546  
    4848        'label_complement' => 'Additional information',
    4949        'label_email' => 'Email',
     50        'label_format_email' => 'Address format',
    5051        'label_numero' => 'Phone number',
    5152        'label_objets_actifs' => 'Objets',
     
    8889        'type_adr_work' => 'Professionnal', // work delivery
    8990        'type_email_internet' => 'Internet',
    90         'type_email_pref' => 'Prefered',
    9191        'type_email_x400' => 'X.400',
    9292        'type_mel_intl' => 'International',
    9393        'type_mel_home' => 'Personnal',
     94        'type_mel_pref' => 'Prefered',
    9495        'type_mel_work' => 'Professionnal',
    9596        'type_tel_bbs' => 'Bulletin board',
  • _plugins_/coordonnees/branches/v1t/lang/coordonnees_fr.php

    r71238 r71546  
    4646        'label_complement' => 'Complément d\'adresse',
    4747        'label_email' => 'Courriel',
     48        'label_format_email' => 'Format d\'adresse',
    4849        'label_numero' => 'Numéro',
    4950        'label_objets_actifs' => 'Objets',
     
    8889        'type_adr_work' =>  'Professionnelle',
    8990        'type_email_internet' => 'Internet', // SMTP: account@domain-name.tld http://fr.wikipedia.org/wiki/Adresse_%C3%A9lectronique#Le_signe_.C2.AB_.40_.C2.BB
    90         'type_email_pref' => 'Préféré',
    9191        'type_email_x400' => 'X.400', // http://en.wikipedia.org/wiki/X.400#Addressing
    9292        'type_mel_home' => 'Personnel',
    9393        'type_mel_intl' => 'International', // ?
     94        'type_mel_pref' => 'Préféré',
    9495        'type_mel_work' => 'Professionnel',
    9596        'type_tel_bbs' => 'Service de messagerie', // http://fr.wikipedia.org/wiki/Bulletin_Board_System#Les_BBS_du_r.C3.A9seau_t.C3.A9l.C3.A9phonique
  • _plugins_/coordonnees/branches/v1t/lang/coordonnees_sk.php

    r71238 r71546  
    4848        'label_complement' => 'Iné',
    4949        'label_email' => 'E-mail',
     50        'label_format_email' => 'Format d\'adresse', # NEW
    5051        'label_numero' => 'Telefónne číslo',
    5152        'label_objets_actifs' => 'Objekty',
     
    8889        'type_adr_work' =>  'Do práce',
    8990        'type_email_internet' => 'Internet',
    90         'type_email_pref' => 'Preferovaný',
    9191        'type_email_x400' => 'X.400',
    9292        'type_mel_intl' => 'Zahraničie',
    9393        'type_mel_home' => 'Domov',
     94        'type_mel_pref' => 'Preferovaný',
    9495        'type_mel_work' => 'Práca',
    9596        'type_tel_bbs' => 'Odkazová služba',
  • _plugins_/coordonnees/branches/v1t/plugin.xml

    r71075 r71546  
    1717
    1818        <version>1.5.2</version>
    19         <version_base>1.8</version_base>
     19        <version_base>1.9</version_base>
    2020        <etat>dev</etat>
    2121
  • _plugins_/coordonnees/branches/v1t/prive/liste/emails.html

    r71234 r71546  
    88                <tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
    99                        <td class='titre'>
    10                                 [(#TYPE|logo_type_email) ]
     10                                [(#TYPE|logo_type_mel) ]
    1111                                [(#TITRE)]
    1212                        </td>
    1313                        <td class='email'>
    14                                 [(#TYPE|match{x400}|non)<a href="mailto:#EMAIL">]#EMAIL[(#TYPE|match{x400}|non)</a>]
     14                                <!--[(#FORMAT|logo_type_email) ]-->
     15                                <a[(#EMAIL|lien_type_mel{#FORMAT})]>#EMAIL</a>
    1516                        </td>
    1617                        <td class='action'>
     
    2021                                        [(#URL_ECRIRE{email_edit}
    2122                                                |parametre_url{id_email,#ID_EMAIL}
     23                                                |parametre_url{objet,#OBJET}
     24                                                |parametre_url{id_objet,#ID_OBJET}
    2225                                                |parametre_url{retour,[(#ENV{retour,#SELF})]}
    2326                                        )],ajax})]
  • _plugins_/coordonnees/branches/v1t/saisies/type_email.html

    r71000 r71546  
    1414        [(#ENV{cacher_option_intro}|non)<option value="">[(#ENV{option_intro})]</option>]
    1515        <option value="internet"[(#ENV{valeur,#ENV{defaut}}|=={internet}|oui) selected="selected"]><:coordonnees:type_email_internet:></option>
    16         <option value="pref"[(#ENV{valeur,#ENV{defaut}}|=={pref}|oui) selected="selected"]><:coordonnees:type_email_pref:></option>
    1716        <option value="x400"[(#ENV{valeur,#ENV{defaut}}|=={x400}|oui) selected="selected"]><:coordonnees:type_email_x400:></option>
    1817</select>
  • _plugins_/coordonnees/branches/v1t/saisies/type_mel.html

    r71000 r71546  
    1515        <option value="work"[(#ENV{valeur,#ENV{defaut}}|=={work}|oui) selected="selected"]><:coordonnees:type_mel_work:></option>
    1616        <option value="home"[(#ENV{valeur,#ENV{defaut}}|=={home}|oui) selected="selected"]><:coordonnees:type_mel_home:></option>
     17        <option value="pref"[(#ENV{valeur,#ENV{defaut}}|=={pref}|oui) selected="selected"]><:coordonnees:type_mel_pref:></option>
     18        <option value="intl"[(#ENV{valeur,#ENV{defaut}}|=={intl}|oui) selected="selected"]><:coordonnees:type_mel_intl:></option>
    1719</select>
Note: See TracChangeset for help on using the changeset viewer.