Plugin Contacts & Organisations

Ce plugin ajoute à SPIP des fonctionnalités de gestionnaire de contacts. Distingue les personnes morales (organisations) des personnes physiques (contacts) en conservant tous les attributs des auteurs SPIP.

En conjonction avec le plugin Coordonnées, il permet d’étendre à la fois les champs unitaires (prénom, date de naissance…) et les champs multiples (numéros de téléphone, adresses mail…).

Principe

Comme un certain nombre d’autres plugins jusque là, « Contacts & Organisations » ajoute des champs indispensables à la table spip_auteurs, dès lors qu’il s’agit de gérer des personnes d’une manière un peu poussée. La table spip_auteurs est par nature, et historiquement sans doute, limitée aux champs nécessaires pour la rédaction d’articles. Dès que cette table doit être utilisée pour d’autres fonctions (inscription, transaction, etc.) certaines caractéristiques lui font défaut, et parmi elles :

-  prénom, date de naissance, autres informations personnelles
-  notion de « groupes d’auteurs »
-  plus de une adresse mail, plusieurs numéros de téléphone ou ID communautaires (ICQ, MSN)
-  autres informations spécifiques à l’utilisation

Objectif

Lors du développement du plugin nous avons veillé à ce que la notion d’auteur SPIP soit conservée. Nous avons par exemple choisi de ne pas modifier l’intégrité de la table spip_auteurs, ce qui permet de conserver possibilités de gestion déjà développées, telles que celles fournies par les plugins acces_restreint ou spip_liste. Ainsi, nous avons seulement ajouté les tables nécessaires à l’ajout de propriétés aux auteurs et les avons liées à la table spip_auteurs.

Ce plugin est déjà utilisé par le plugin Catalogue, et le plugin SPIPMine.

Fonctionnement

Une fois le plugin installé, une nouvelle boîte de dialogue apparait dans l’interface privée sur la page d’un auteur :

Tous les auteurs SPIP du site peuvent désormais acquérir un statut de « contact » ou d’« organisation ».

Exemple 1 : ajouter un contact

Prenons l’exemple d’un auteur SPIP dont on veuille gérer distinctement le nom, le prénom et l’activité (fonction). Si on attribue à cet auteur le statut de contact, les champs nom, prénom, et activité seront disponibles dans les boucles #AUTEUR. Pour conférer le statut de « contact » à un auteur SPIP, dépliez la boîte et cliquez sur « devenir contact » :

Dès lors, les champs supplémentaires de la fiche contact sont disponibles sur la fiche auteur sur la page d’édition d’un auteur. Pour ajouter les informations correspondant à ces champs, cliquez sur « modifier cet auteur », puis descendez jusqu’à « détails du contact » :

Si le plugin coordonnées est aussi installé, il est possible d’ajouter des numéros de téléphone, adresses mail ou adresses postales à ce contact :

Exemple 2 : ajouter une organisation

De la même manière, on peut attribuer à un auteur SPIP le statut « organisation » (une société, une association...) afin de gérer par exemple une liste de fournisseurs ou de clients.

Choisissez l’auteur SPIP à qui attribuer le statut d’organisation, puis dépliez la boite de dialogue « Contacts & Organisations » et cliquez sur « Devenir une organisation ». Modifiez l’auteur (maintenant devenu une organisation) et ajoutez lui les informations nécessaires. Ce qui donnera, par exemple :

Exemple 3 : lier un contact à une organisation

Le plugin permet de lier un ou plusieurs contacts, à une ou plusieurs organisations. Cette fonctionnalité (en cours de test) est inspirée des logiciels CRM de gestion de contacts.

On peut lier un contact avec une organisation, soit depuis une fiche contact, soit depuis une fiche organisation. Voici un exemple de liaison d’un contact avec une organisation à partir d’une fiche organisation.

Depuis la fiche « auteur » de l’organisation, dépliez la la boite de dialogue ; un champ de saisie apparait et permet de rechercher un contact [1] à lier à l’organisation.

Une fois le(s) contact(s) trouvé(s) par SPIP affiché(s), cliquez sur le « + » pour lier ce contact à l’organisation. Pour « délier » le contact de l’organisation, il suffit de cliquer sur le bouton « délier » (icône en forme de maillon de chaine rompu).

Dépendances

Le plugin « Contacts & organisations » nécessite le plugin saisies en version 1.7.7 minimum (pour la saisie du champ date).

Nouvelles tables / nouveaux champs

Le plugin installe 3 nouvelles tables, et permet d’utiliser de nouveaux champs dans les boucles #AUTEURS :

  • table spip_contacts :
    • #CIVILITE
    • #NOM
    • #PRENOM
    • #FONCTION
    • #DATE_NAISSANCE
    • #DESCRIPTIF
  • table spip_organisations :
    • #NOM
    • #STATUT_JURIDIQUE (anciennement « type »)
    • #IDENTIFICATION (anciennement « siret »)
    • #ACTIVITE
    • #DATE_CREATION
    • #DESCRIPTIF
  • table spip_contacts_organisations
    • pas de champ nouveau, mais permet de déterminer des liaisons entre contacts et organisations

Annuaires

Il est possible de regrouper des organisations et/ou des contacts, en les séparant dans des annuaires différents. Chaque fiche ne peut appartenir qu’à un seul annuaire.

Partie expérimentale

Rq : les pages présentées ici ont bien évolué depuis la création de cette documentation.

Deux pages de gestion des contact et des organisations sont en cours d’élaboration et présentes dans le plugin :

Les fonctionnalités sont à imaginer à partir de ces pages (imports, transformations en masse, etc.). N’hésitez pas à faire des suggestions.

Notes

[1un spip_auteur ayant le statut de contact

Discussion

89 discussions

  • 1

    N’est-il pas dommage d’avoir choisi la balise #NOM, ce qui me paraît interdire de référencer le #NOM de la table Auteurs à l’intérieur d’une boucle contacts ?

    • Lorsque des boucles AUTEURS, CONTACTS et/ou ORGANSIATIONS sont imbriquées, il peut y avoir risque de confusion (pour le concepteur, pas pour SPIP...) entre les champs homonymes #NOM.

      Pour limiter ce risque, il est bon et relaxant de pouvoir compter sur 2 caractéristiques de SPIP :

      1. si 2 boucles imbriquées ont un champ homonyme (#NOM dans notre cas) SPIP fera référence en priorité au champ de la boucle active ;

      exemple : l’appel de #NOM dans une boucle ’contacts’ présente au sein d’une boucle ’organisations’, fera référence au(x) champ(s) ’nom’ de la table ’contacts’ et non au champ ’nom’ de la table ’organisations’.

      2. pour ajouter de la précision dans l’écriture des boucles, on peut ajouter le nom de la boucle devant le nom du champ ;

      exemple : la balise #_mes_potes:NOM fera référence au champ #NOM de la boucle <BOUCLE_mes_potes(CONTACTS)>.

    Répondre à ce message

  • Bonjour et merci pour cette contrib bien intéressante !
    Si je comprends bien, on peut faire soi-même un skel pour faire un annuaire… Il y a peut-être déjà des exemples de skel ? Peut-on y mettre les logos des auteurs-contacts et du coup faire un trombinoscope ?

    Répondre à ce message

  • 3

    Bonjour,
    Question peut etre bête mais bon, je me lance...
    Est il prévu la liaison des contacts avec une rubrique genre « annuaire » dans la partie publique ?
    Merci de vos réponses !

    • Bonjour,
      SPIP offre déjà de base la possibilité de développer un site de type annuaire. C&O a été seulement été conçu pour étendre l’utilisation des auteurs SPIP, en offrant notamment 3 possibilités supplémentaires :
      -  pouvoir distinguer les Contacts (personnes physiques) des Organisations (personnes morales)
      -  pouvoir lier des Contacts à des Organisations
      -  pouvoir attribuer "n" adresses mail, numéro de téléphone ou adresses postales à une personne
      Qu’entendez-vous précisément par « liaison des contacts avec une rubrique genre "annuaire" dans la partie publique » ?

    • Bonjour et désolé de ma réponse tardive...
      En fait, j’aimerais pouvoir proposer la rubrique annuaire dans la partie publique du site.
      Cette rubrique pourrait lister tous les contacts par personne ou par organisation.
      Si j’ai bien compris l’utilisation de ce plugin, il permet d’avoir un annuaire seulement dans la partie privée ?

    • Bonjour,

      C&O permet d’ajouter des informations aux auteurs (mails, tels, adresses) et permet de leur attribuer soit le statut de personne physique (contact) soit le statut de personne morale (organisation).

      Une fois saisies, ces informations supplémentaires sont disponibles aussi bien dans la partie privée, que la partie publique... Donc le plugin n’ajoute pas d’annuaire, c’est vous qui devez créer le squelette d’annuaire ; en revanche il permet de compléter un éventuel annuaire par des informations plus détaillées.

    Répondre à ce message

  • 2

    Hello,

    Il serait également intéressant d’y ajouter une table date, en effet on trouve « date de création » pour entreprise, mais pas d’autre possibilité.

    Je pense à : date d’inscription, date de modification, date de contact, date de relance,...

    On serait alors peut être pas loin d’une gestion « fournisseurs » ou « clients » je pense ?

    • Bonjour Paulbe,
      Il y a 2 champ date dans les tables C&O, une date « normale » qui s’appelle date de création (ou naissance), mais qu’on peut utiliser pour d’autres usages (comme on peut utiliser les champs date des articles à autre chose), et une date de mise à jour (pour gérer les dates de modifs sur l’enregistrement).

      Pour les dates d’inscriptions, de relance, de contact, etc. ce sont des champs qui ne devraient pas faire partie de la table contacts, mais de tables extérieures : table pour gérer les inscriptions, table pour gérer les commandes, les actions, etc.

      Tout ce qu’il faut est déjà là pour une gestion client/fournisseur avec SPIP el le plugin C&0, y compris l’attribution de mots clé sur les auteurs (depuis le plugin mots_objets).

    • Hello Cyril,

      Je suppose que ta remarque des mots clés s’adresse au fait que l’on peut « accrocher » un mot clé =>client ou fournisseur à un auteur ?

      Autre point, je suis entièrement d’accord sur le fait que pour les dates, une table id_auteur/date/evenements pourrait faire l’affaire je suppose, ma question était l’inclure dans le plugin existant ou faire un plugin « historique » plus générique et indépendant de C&O et de coordonnées ?

      P.S. De toute façon dans les 2 cas je dois encore tout apprendre :-p , mais autant essayer de faire ses armes sur un truc qui pourrait servir un jour ;-)

    Répondre à ce message

  • Hello,

    Dans les numéros, on devrait par cfg pouvoir ajouter d’autres propositions, pour l’instant on a perso, pro ou fax, je pense à GSM, poste n°, code, ... et pourquoi pas y adjoindre des icônes pour le classement et pourquoi pas proposer une liste déroulante à partir de ce moment là.

    Cela évite les fautes de frappe et facilite la vie des fainéants ;-)

    Répondre à ce message

  • 2

    Bonjour,

    Avez-vous envisagé de ne pas lier les contacts et organisations aux auteurs mais à des objets SPIP ?
    Serait-ce « facile » ?

    C’est ce qui est (très bien) fait dans le plugin coordonnées. Sa généricité (et les mécanismes spip, bravo) permettent de facilement associer des coordonnées à un article par exemple. Une seule fonction « pipeline » nécessaire.

    J’imagine que cela implique de transférer le lien/clé de spip_contacts et spip_organisation sur spip_auteurs dans des tables spip_contacts_liens… avec impact (lourd ?) sur le code (+migration pour l’existant).

    Il me sembre que ce serait la dernière brique qui manque pour pouvoir réaliser une annuaire de coordonnées sans « polluer » la table des auteurs avec des données qui n’ont rien à voir avec le « workflow » SPIP.

    Qu’en pensez-vous ?

    Luc

    • La question s’est posée au départ, de savoir si les contacts pourraient ou pas être liés aux auteurs SPIP. Le choix a été fait qu’ils le soient, mais seulement afin de pouvoir bénéficier des mécanismes d’authentification. Les Contacts et Organisation ont été conçus plutôt comme des extensions des auteurs ; ainsi les formulaires de saisie sont intégrés à la fiche auteur.

      Cependant les tables contacts et organisations pourraient être autonomes en pratique : les 2 tables possèdent une clé primaire (id_contact ou id_organisation) indépendante de id_auteur ; le champ id_auteur est pour l’instant paramétré en « unique » afin d’éviter qu’un même auteur soit étendu vers plusieurs contacts en même temps, mais il serait possible de le changer avec phpMyAdmin pour pouvoir importer un grand nombre de C&O sans pour autant avoir des auteurs liés. Il manquera malgré tout les formulaires dans l’interface d’admin pour gérer C&O indépendamment des auteurs.

      Si le mécanisme qui empêche d’attribuer plus d’un contact à un auteur pouvait être réalisé autrement que par une contrainte sur le type de champ, on pourrait parfaire l’indépendance de C&O avec les auteurs SPIP.

      D’autre part, l’intérêt d’une liaison contact/autre objet de SPIP n’est pas très évident... un cas d’utilisation serait le bienvenu.

    • Merci de tes précisions.

      Pour le « comment » de la l’indépendance C&O des auteurs, je ne sais pas trop comment. Je comprends que l’unicité permet des retours cohérents des requêtes avec la jointure.

      Pour ce qui est du cas d’utilisation, ce n’est pas encore mûr dans mon esprit. L’idée serait de faire un plugin « annuaire » (style « pages jaunes », pas « open directory »), avec des fonctionnalités de recherche, des regroupements par thèmes (mots clés/rubrique), en autonomie des objets SPIP. Mais certaines pourraient être associées à un article (présentation d’une association, d’un gîte…). Affichées alors via le squelette, plutôt que simplement intégrée au texte de l’article.

      D’un autre côté, le découpage C&O, Coordonnées... est pratique du point de vue dev et intéressant pour les saisies dans l’interface privée et les restitutions dans les boucles (vive SPIP). La contre-partie est un éparpillement des formulaires (au lieu d’un seul) et des tables, compliquant probablement les imports de masse (à partir de csv par exemple).

      Je réfléchis à cela lentement, en dilettante faute de disponibilité. Je pose donc mes questions sur C&O « à la cantonnade » car j’y ai (entre)vu en [brève] analyse un moyen de ne pas réinventer la poudre.

    Répondre à ce message

  • 2

    salut,

    je te propose cette petite modif dans le fichier prive/liste/contacts.html :

    	<td class='action'>[(#AUTORISER{modifier, contact, #ID_CONTACT}|?{
    			[(#ENV{id_organisation}|oui)	
    				[(#BOUTON_ACTION{
    					[(#CHEMIN{images/delier-16.png}|balise_img{<:contacts:delier_contact:>})],
    					[(#URL_ACTION_AUTEUR{delier_contact,[(#ID_CONTACT)/#ID_ORGANISATION],[(#ENV{retour,#SELF})]})],
    					ajax,<:contacts:confirmer_delier_organisation:>})],
    				#ID_AUTEUR 				
    			]	
    			[(#ENV{id_organisation}|non)
    			[(#BOUTON_ACTION{[(#CHEMIN{images/contact-delete-24.png}
    					|balise_img{<:contacts:supprimer_contact:>}
    					)],
    					[(#URL_ACTION_AUTEUR{supprimer_contact,contact/#GET{id_contact},#SELF})],
    					ajax,<:contacts:confirmer_supprimer_contact:>})]
    			]
    			})]</td>

    si on est sur la page d’une organisation, on délie un contact, mais si on est sur la page des contacts, on a la possibilité de supprimer un contact.

    et on fait de même dans le fichier prive/liste/organisations.html

    merci pour ce travail.

    • merci pour cette proposition ; si tu le souhaites, tu peux intervenir directement sur le code du plugin ; en essayant de mutualiser au maximum le code entre les fichiers liste/organisations.html et liste/contacts.html ; si les tests sont ok tu peux passer de version 1.3.6 à 1.3.7.

    • la révision r41395 distingue 2 sortes de listes, la première permettant de lier ou délier un contact et une organisation (utilisé dans la colonne gauche), et la deuxième permettant de lister les contacts ou les organisations, et de les supprimer.

    Répondre à ce message

  • 1
    norbert

    salut,

    il semble qu’il y ait un problème avec la mise à jour du plugin.
    J’avais des message d’erreurs « id_contact => critère inconnu » ou « id_organisation => critère inconnu ».
    Les listes de contacts ou d’organisations n’apparaissaient pas.

    Après mise à jour du plugin et vidages de cache, le problème continuait.
    La table organisation contact n’est pas mise à jour automatiquement.

    Après désinstallation/réinstallation, le problème ne se produit plus.

    voilà

    • La révision [40044] d’hier soir corrige une erreur de syntaxe dans la requête de mise à jour des tables ; le problème ne devrait donc plus se produire.

      La mise à jour concernait l’ajout d’un champ « activité » à la table spip_organisations, et le renommage de 2 champs de cette même table : « siret » devient « identification » et « type » devient « statut_juridique ».

      Merci pour la remontée de ces informations.

    Répondre à ce message

  • 2

    si cette réécriture d’inscription2 est intéressante il est dommage de n’avoir pas fait de liaison avec le plugin groupe_d’auteur2

    il est en train d’être réécrit proprement pour spip 2.1 il fonctionne avec ldap++, réécrit également.

    ce qui permet de créér des groupes d’auteurs automatiquement sur simple critère

    je dois avouer que je n’ai pas réussi a lié un contact avec une organisation avec ce plugin

    • La manière choisie de lier plusieurs contacts entre eux au sein d’une organisation (par une table de liaison) n’interfère pas avec le plugin groupes_auteurs. En revanche elle est fonctionnelle bien que toujours en test (voir doc), et donc fragile...

    • hello phil93 ; il restait une référence à un ancien nom de table dans les déclarations de jonctions ; la liaison d’un contact avec une organisation ne pouvait se faire que dans un seul sens.

      C’est corrigé avec la révision [40023], qui permet aussi de lister les contacts et les organisations ; cette révision propose 2 pictos au format du nouveau bandeau de l’interface privée.

      Bonne utilisation ;-)

    Répondre à ce message

  • 2

    Il n’y a plus d’évolution apparente. Je peux donc installer ? Tous les bugs mentionnés dans les autres messages sont corrigés ? Merci d’avance.

    • Mort, non, endormi c’est possible...
      La prochaine grosse étape serait d’intégrer la partie « gestion depuis l’interface privée » en utilisant le dernier gros commit de xdjuj (34647).
      Ne pas utiliser en prod.

    • c’est pas encore commité... j’ai hâte de tester ça :)

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom