<?php
/***************************************************************************
- * Copyright (C) 2003-2010 Polytechnique.org *
+ * Copyright (C) 2003-2011 Polytechnique.org *
* http://opensource.polytechnique.org/ *
* *
* This program is free software; you can redistribute it and/or modify *
private $count = 0;
private $freetext = null;
private $photos = true;
+ private $visibility;
public function __construct($photos = true, $freetext = null)
{
PlVCard::$folding = false;
+ $this->visibility = new ProfileVisibility(ProfileVisibility::VIS_PRIVATE);
$this->freetext = $freetext;
$this->photos = $photos;
}
public function addProfile($profile)
{
- $profile = Profile::get($profile);
+ $profile = Profile::get($profile, Profile::FETCH_ALL, $this->visibility);
if ($profile) {
$this->profile_list[] = $profile;
$this->count++;
protected function buildEntry($pf)
{
global $globals;
+ $pf = $pf['value'];
- $entry = new PlVCardEntry($pf->firstNames(), $pf->lastNames, null, null, $pf->nickname);
+ $entry = new PlVCardEntry($pf->firstNames(), $pf->lastNames(), null, null, $pf->nickname);
$user = $pf->owner();
$freetext .= "\n" . $this->freetext;
}
$entry->set('NOTE', $freetext);
- // Mobile
- if (!empty($pf->mobile)) {
+ if ($pf->mobile) {
$entry->addTel(null, $pf->mobile, false, true, true, false, true, true);
}
// Emails
if (!is_null($user)) {
$entry->addMail(null, $user->bestalias, true);
- $entry->addMail(null, $user->bestalias_alternate);
if ($user->forlife != $user->bestalias) {
$entry->addMail(null, $user->forlife);
+ }
+ if ($user->forlife_alternate != $user->bestalias) {
$entry->addMail(null, $user->forlife_alternate);
}
}
// Homes
- $adrs = $pf->getAddresses(Profile::ADDRESS_PERSO);
+ $adrs = $pf->iterAddresses(Profile::ADDRESS_PERSO);
while ($adr = $adrs->next()) {
- // TODO : find a way to fetch only the "street" part of the address
- $group = $entry->addHome($adr['text'], null, null, $adr['postalCode'],
- $adr['locality'], $adr['administrativeArea'], $adr['country'],
- $adr['current'], $adr['mail'], $adr['mail']);
- if (!empty($adr['fixed_tel'])) {
- $entry->addTel($group, $adr['fixed_tel'], false, true, true, false, false, $adr['current'] && empty($pf->mobile));
+ if (!$adr->postalCode || !$adr->locality || !$adr->country) {
+ $group = $entry->addHome($adr->text, null, null, null,
+ null, $adr->administrativeArea, null,
+ $adr->hasFlag('current'), $adr->hasFlag('mail'), $adr->hasFlag('mail'));
+ } else {
+ $group = $entry->addHome(trim(Geocoder::getFirstLines($adr->text, $adr->postalCode, 4)), null, null, $adr->postalCode,
+ $adr->locality, $adr->administrativeArea, $adr->country,
+ $adr->hasFlag('current'), $adr->hasFlag('mail'), $adr->hasFlag('mail'));
}
- if (!empty($adr['fax_tel'])) {
- $entry->addTel($group, $adr['fax_tel'], true, false, false, false, false, false);
+ foreach ($adr->phones() as $phone) {
+ if ($phone->link_type == Phone::TYPE_FIXED) {
+ $entry->addTel($group, $phone->display, false, true, true, false, false,
+ $adr->hasFlag('current') && empty($pf->mobile));
+ } else if ($phone->link_type == Phone::TYPE_FAX) {
+ $entry->addTel($group, $phone->display, true, false, false, false, false, false);
+ }
}
}
// Pro
- $adrs = $pf->getAddresses(Profile::ADDRESS_PRO);
- while ($adr = $adrs->next()) {
- // TODO : link address to company
- $group = $entry->addWork(null, null, null, null,
- $adr['text'], null, null, $adr['postalCode'],
- $adr['locality'], $adr['administrativeArea'], $adr['country']);
- if (!empty($adr['fixed_tel'])) {
- $entry->addTel($group, $adr['fixed_tel']);
+ $jobs = $pf->getJobs();
+ foreach ($jobs as $job) {
+ $terms_array = array();
+ foreach ($job->terms as $term) {
+ $terms_array[] = $term->full_name;
}
- if (!empty($adr['fax_tel'])) {
- $entry->addTel($group, $adr['display_tel'], true);
+ $terms = implode(', ', $terms_array);
+ if ($job->address) {
+ if (!$job->address->postalCode || !$job->address->locality || !$job->address->country) {
+ $group = $entry->addWork($job->company->name, null, $job->description, $terms,
+ $job->address->text, null, null, null,
+ null, $job->address->administrativeArea, null);
+ } else {
+ $group = $entry->addWork($job->company->name, null, $job->description, $terms,
+ trim(Geocoder::getFirstLines($job->address->text, $job->address->postalCode, 4)),
+ null, null, $job->address->postalCode,
+ $job->address->locality, $job->address->administrativeArea, $job->address->country);
+ }
+ } else {
+ $group = $entry->addWork($job->company->name, null, $job->description, $terms,
+ null, null, null, null,
+ null, null, null);
+ }
+ if ($job->user_email) {
+ $entry->addMail($group, $job->user_email);
}
- /* TODO : fetch email for jobs, too
- if (!empty($pro['email'])) {
- $entry->addMail($group, $pro['email']);
+ foreach ($job->phones as $phone) {
+ if ($phone->type == Phone::TYPE_MOBILE) {
+ $entry->addTel($group, $phone->display, false, true, true, false, true);
+ } else if ($phone->type == Phone::TYPE_FAX) {
+ $entry->addTel($group, $phone->display, true);
+ } else {
+ $entry->addTel($group, $phone->display, false, true, true);
}
- */
+ }
}
// Melix
if (!is_null($user)) {
$alias = $user->emailAlias();
- if (!is_null($alias)) {
+ if (!is_null($alias) && $pf->alias_pub == 'public') {
$entry->addMail(null, $alias);
}
}
// Custom fields
if (!is_null($user)) {
- $groups = $user->groups();
+ $groups = $user->groups(true, true);
if (count($groups)) {
- require_once "directory.enums.inc.php";
$gn = DirEnum::getOptions(DirEnum::GROUPESX);
$gns = array();
foreach (array_keys($groups) as $gid) {
$binets = $pf->getBinets();
if (count($binets)) {
- require_once "directory.enums.inc.php";
$bn = DirEnum::getOptions(DirEnum::BINETS);
$bns = array();
foreach ($binets as $bid) {
$bns[$bid] = $bn[$bid];
}
- $entry->set('X-BINETS', join(', ', $bid));
+ $entry->set('X-BINETS', join(', ', $bns));
}
if (!empty($pf->section)) {
- require_once "directory.enums.inc.php";
- $sections = DirEnum::getOptions(DirEnum::SECTIONS);
- $entry->set('X-SECTION', $sections[$pf->section]);
+ $entry->set('X-SECTION', $pf->section);
}
// Photo
if ($this->photos) {
$res = XDB::query(
"SELECT attach, attachmime
- FROM photo AS p
- WHERE p.uid = {?}", $pf->id());
+ FROM profile_photos
+ WHERE pid = {?} AND pub IN ('public', {?})",
+ $pf->id(), $this->visibility->level());
if ($res->numRows()) {
list($data, $type) = $res->fetchOneRow();
$entry->setPhoto($data, strtoupper($type));