Afin de boucler un projet, je souhaitais pouvoir associer un "contact", au sens générique, pas au sens Joomla, à un article Joomla sous la forme d'un module.
Cependant, lorsque votre organsiation possède déjà une gestion de contacts sous la forme d'annuaire, et que je peux exporter au format VCF une carte de visite, ne serait il pas interessant d'exporter mes contacts depuis l'annuaire d'entreprise pour les intégrer dans Joomla ?
Le besoin n'est aucunement une recherche ou tout autre gestion d'ensembles de contacts. Non, le besoin du projet est plutôt : "J'ai un annuaire de contacts, parmi ces contacts, il y a des responsables de production d'écrits qui peuvent/doivent être associés à une partie de mon site Joomla. Alors au lieu de tout resaisir, j'exporte la carte de visite de la personne au format VCF et je l'adjoinds à un article, dans un module qui affichera le contenu"
De plus, lors du changement de personnel, je n'ai juste à récupérer le VCF de la personne nouvellement affectée et je change ce fichier dans mon module. Simple !
helper.php
<?php
class modCarteDeVisite{
public static function getCarte($params){
$document = JFactory::getDocument()->addstyleSheet('modules/mod_cartevisite/style.css');
//require_once('vCard.php'); //Bibliotheque externe de gestion des vCards - Inutilisé car tout parsé
$vCardArray = json_decode("__DOCUMENTS__/vCards/".$params->get("cartevisite"), true);
$vCard = new vCard("__DOCUMENTS__/vCards/".$params->get("cartevisite"), //Chemin vers le fichier vCard
false, //texte bur de la vCard à la place du fichier
array( // Option
// This lets you get single values for elements that could contain multiple values but have only one value.
// This defaults to false so every value that could have multiple values is returned as array.
'Collapse' => false
)
);
$tab_associatif = (array)$vCard;
foreach ($vCard -> photo as $photo) { //Emails (il peut y envoir plusieurs)
echo "<div class=\"fiche-annuaire-photo\"><img src=\"data:image/png;base64,".$photo["Value"]."\"></div>";
//Dans la config du module, je peux autoriser ou non le téléchargement de la vCard
if ($params["telechargementVCF"] == 1)
{
echo '<div id="box-vcard">';
echo '<a class="vcard" href="/__DOCUMENTS__/vCards/'.$params->get("cartevisite").'">';
echo 'Telecharger la carte';
echo '</a></div>';
}
}
echo '<div class="">';
if (isset($vCard -> n[0]["LastName"])){
echo "<div class=\"lastname\">".($vCard -> n[0]["LastName"] )."</div>"; //Nom. Dans notre cas, ce n'est pas le nom
}
if (isset($vCard -> n[0]["Prefixes"])){
echo "<div class=\"prefixe\">".($vCard -> n[0]["Prefixes"] )."</div>"; //Nom additionnel
}
if (isset($vCard -> n[0]["Suffixes"])){
echo "<div class=\"suffixe\">".($vCard -> n[0]["Suffixes"] )."</div>"; //Nom additionnel
}
if (isset($vCard -> fn[0])){
echo "<div class=\"nom-complet\>".($vCard -> fn[0] )."</div>"; //Nom complet ()envoyé dans le mail. Ex : Boron Didier Ingénieur
}
if (isset($vCard -> org[0]["Unit1"])){
echo "<div>".($vCard -> org[0]["Unit1"] )."</div>"; //Chemin héirarchique d'accès au bureau
}
if (isset($vCard -> title[0])){
echo "<div class=\"fonction\">".($vCard -> title[0] )."</div>"; //Titre de la fonction de la personne
}
if (isset($vCard -> fn[0])){
echo "<div class=\"patronyme\">".($vCard -> fn[0])."</div>"; //Nom + échelon éventuel
}
//On récupére les téléphones
foreach ($vCard -> tel as $telephones) {
echo "<div class=\"telephones\">".$telephones["Value"]."</div>"; //Une personne peut avoir unr n° Interne + externe
}
if (isset($vCard -> adr[0]["Locality"])){
if (isset($vCard -> adr[0]["POBox"])){ //Boite postale
echo "<div>".($vCard -> adr[0]["POBox"] )."</div>";
}
if (isset($vCard -> adr[0]["ExtendedAddress"])){ //Données complémentaires pour l'adresse
echo "<div class=\"adresse-postale\">".($vCard -> adr[0]["ExtendedAddress"] )."</div>";
}
if (isset($vCard -> adr[0]["StreetAddress"])){ //Adresse physique
echo "<div class=\"rue\">".($vCard -> adr[0]["StreetAddress"] )."</div>";
}
if (isset($vCard -> adr[0]["Locality"])){ //Localité
echo "<div class=\"complement-adresse\">".($vCard -> adr[0]["PostalCode"] )." ".($vCard -> adr[0]["Locality"] )."</div>";
}
if (isset($vCard -> adr[0]["Region"])){ //Région
echo "<div class=\"region\">".($vCard -> adr[0]["Region"] )."</div>";
}
if (isset($vCard -> adr[0]["Country"])){ //Pays
echo "<div>".($vCard -> adr[0]["Country"] )."</div>";
}
foreach ($vCard -> email as $emails) { //Emails (il peut y envoir plusieurs, dont des mails "fonctionnels")
echo "<div class=\"email\">".$emails["Value"]."</div>";
}
}
if (isset($vCard -> org[0]["Unit1"])){
echo "<div class=\"section\">".($vCard -> org[0]["Unit1"])."</div>";
}
if (isset($vCard -> org[0]["Unit2"])){
echo "<div class=\"section\">".($vCard -> org[0]["Unit2"])."</div>";
}
echo "</div>";
}
}
?>
mod_cartevisite.php
<?php
defined('_JEXEC') or die;
require_once dirname(__FILE__).'/helper.php';
$hello = modCarteDeVisite::getCarte($params);
require JmoduleHelper::getLayoutPath('mod_cartevisite');
mod_cartevisite.xml
<?xml version="1.0" encoding="utf-8" ?>
<extension type="module" version="1.0.0" client="site" method="upgrade">
<name>Carte de visite</name>
<author>Sébastien LHUILLIER</author>
<version>1.0.0</version>
<description>Petit module permettant d'afficher une carte de visite au format VCF</description>
<files>
<filename>mod_cartevisite.xml</filename>
<filename module="mod_cartevisite">mod_cartevisite.php</filename>
<filename>helper.php</filename>
<filename>tmpl/default.php</filename>
<filename>tmpl/index.html</filename>
</files>
<config>
<fields name="params">
<fieldset name="basic">
<field name="noteVCF"
type="note"
class="alert"
close="false"
label="Note" description="Les cartes de visites au format VCF doivent d'abord être uploadées dans le dossier vcards pour pou
voir les avoir dans la liste déroulante." />
<field name="cartevisite"
type="filelist"
directory="__DOCUMENTS__/vCards"
label="Sélectionnez le fichier VCF"
description="C'est a partir d'un fichier VCF que ce module générera la carte de visite"
accept="text/vcard"
hide_none="true"
hide_default="true"/>
<field name="telechargementVCF"
type="checkbox"
label="Autoriser le téléchargement de la carte"
description="Il est possible d'autoriser ou interdire le téléchargement de la carte de visite"
value="1" />
</fieldset>
</fields>
</config>
</extension>
style.css
.telecharger ::before{
content:"\1F5AB";
}
.fiche-annuaire-photo{
margin:15px;
float:right;
}
.lastname{
font-weight:bold;
}
.lastname::before{
content:"Identité ministérielle : ";
color:blue;
}
.firstname{
font-weight:bold;
}
.firstname::before{
content:"Nom patronymique : ";
color:blue;
}
.fonction{
font-weight:bold;
}
.fonction::before{
content:"Fonction : ";
color:blue;
}
.prefixe{
font-weight:bold;
}
.prefixe::before{
content:"Prefixe : ";
color:blue;
}
.suffixe{
font-weight:bold;
}
.suffixe::before{
content:"Suffixe : ";
color:blue;
}
.nom-complet{
font-weight:bold;
}
.nom-complet::before{
content:"Nom complet : ";
color:blue;
}
.telephones{
font-weight:bold;
}
.telephones::before{
content:"Téléphone : ";
color:blue;
}
.adresse-postale{
font-weight:bold;
}
.adresse-postale::before{
content:"Adresse postale : ";
color:blue;
float:left;
}
.rue{
font-weight:bold;
}
.complement-adresse{
font-weight:bold;
}
.complement-adresse::before{
content:"Complément d'adresse : ";
color:blue;
float:left;
}
.region{
font-weight:bold;
}
.region::before{
content:"Région : ";
color:blue;
float:left;
}
.email{
font-weight:bold;
}
.patronyme{
font-weight:bold;
}
.patronyme::before{
content:"Patronyme : " ;
color:blue;
float:left;
}
.section{
font-weight:bold;
}
.section::before{
content:"Section : " ;
color:blue;
float:left;
}
.vcard{
font-weight:bold;
float:right;
height:100px;
padding-top
}
.vcard::before{
color:blue;
float:left;
content:"\1F4C7";
}
#box-vcard{
min-width:200px;
}