BCardContactSyncService
in package
Synchronise les contacts du carnet d'adresses avec les données d'une carte de visite B-Card.
Lorsqu'une carte de visite est créée ou mise à jour, ce service recherche dans tout le carnet d'adresses (tous utilisateurs confondus) un contact partageant la même adresse e-mail et y reporte les informations de la carte, afin que les fiches enregistrées par des tiers restent à jour. Il marque le contact comme provenant d'une B-Card et horodate la synchronisation dans sa note.
Table of Contents
Properties
- $contactRepository : ContactRepository
- $entityManager : EntityManagerInterface
- $logger : LoggerInterface
Methods
- __construct() : mixed
- canSyncWithExistingContact() : bool
- Vérifie si une BCard peut être synchronisée avec un contact existant
- syncContactWithBCard() : Contact|null
- Synchronise un contact existant avec les données d'une BCard Si le contact existe déjà, met à jour ses informations avec celles de la BCard Si le contact n'existe pas, retourne null
- updateContactFromBCard() : void
- Met à jour un contact existant avec les données d'une BCard
Properties
$contactRepository
private
ContactRepository
$contactRepository
$entityManager
private
EntityManagerInterface
$entityManager
$logger
private
LoggerInterface
$logger
Methods
__construct()
public
__construct(EntityManagerInterface $entityManager, ContactRepository $contactRepository, LoggerInterface $logger) : mixed
Parameters
- $entityManager : EntityManagerInterface
-
Flush des modifications apportées au contact synchronisé.
- $contactRepository : ContactRepository
-
Recherche du contact existant par adresse e-mail.
- $logger : LoggerInterface
-
Journalisation du déroulement de la synchronisation.
canSyncWithExistingContact()
Vérifie si une BCard peut être synchronisée avec un contact existant
public
canSyncWithExistingContact(BusinessCardAize $businessCard, User $bcardOwner) : bool
Retourne false si la carte n'a pas d'e-mail. Sinon, recherche un contact portant cette
adresse et n'accepte la synchronisation que si ce contact existe et appartient à un autre
utilisateur que le propriétaire de la carte. Attention : ce critère est plus restrictif que
celui réellement appliqué par BCardContactSyncService::syncContactWithBCard(), qui
synchronise aussi les contacts du propriétaire.
Méthode de lecture seule, sans effet de bord.
Parameters
- $businessCard : BusinessCardAize
-
Carte de visite candidate.
- $bcardOwner : User
-
Propriétaire de la carte.
Return values
bool —true si un contact d'un autre utilisateur correspond à l'e-mail de la carte.
syncContactWithBCard()
Synchronise un contact existant avec les données d'une BCard Si le contact existe déjà, met à jour ses informations avec celles de la BCard Si le contact n'existe pas, retourne null
public
syncContactWithBCard(BusinessCardAize $businessCard, User $bcardOwner) : Contact|null
Déroulement : si la carte n'a pas d'e-mail, un avertissement est journalisé et null est
retourné. Sinon, le premier contact portant cette adresse est recherché sans filtrer sur son
propriétaire — la synchronisation est donc volontairement globale. L'appartenance du contact
au propriétaire de la carte n'est plus bloquante : elle est seulement journalisée et la mise
à jour se poursuit. Le contact est ensuite alimenté par
BCardContactSyncService::updateContactFromBCard() puis flushé.
Effets de bord : requête de lecture, écriture en base avec flush(), journalisation.
Parameters
- $businessCard : BusinessCardAize
-
Carte de visite source des données.
- $bcardOwner : User
-
Propriétaire de la carte, utilisé uniquement pour la journalisation.
Return values
Contact|null —Contact mis à jour, ou null si la carte n'a pas d'e-mail ou si aucun
contact ne correspond à cette adresse.
updateContactFromBCard()
Met à jour un contact existant avec les données d'une BCard
private
updateContactFromBCard(Contact $contact, BusinessCardAize $businessCard) : void
Chaque champ (prénom, nom, entreprise, intitulé de poste, e-mail, téléphone) n'est recopié
que s'il est renseigné sur la carte : les valeurs vides ou nulles n'écrasent jamais celles du
contact. Le contact est marqué isBCard = true, et une mention
« Synchronisé avec BCard le JJ/MM/AAAA HH:MM » est ajoutée à sa note, concaténée avec
l'existant par un séparateur | — la note grossit donc à chaque synchronisation.
Cette méthode ne flushe pas : la persistance est laissée à l'appelant (BCardContactSyncService::syncContactWithBCard()).
Parameters
- $contact : Contact
-
Contact à mettre à jour (entité managée).
- $businessCard : BusinessCardAize
-
Carte de visite fournissant les valeurs.