Updates core.
[platal.git] / include / vcard.inc.php
CommitLineData
89460d9c 1<?php
2/***************************************************************************
5e1513f6 3 * Copyright (C) 2003-2011 Polytechnique.org *
89460d9c 4 * http://opensource.polytechnique.org/ *
5 * *
6 * This program is free software; you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation; either version 2 of the License, or *
9 * (at your option) any later version. *
10 * *
11 * This program is distributed in the hope that it will be useful, *
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14 * GNU General Public License for more details. *
15 * *
16 * You should have received a copy of the GNU General Public License *
17 * along with this program; if not, write to the Free Software *
18 * Foundation, Inc., *
19 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
20 ***************************************************************************/
21
5d42c993 22class VCard extends PlVCard
89460d9c 23{
6713fc49 24 private $profile_list = array();
29b12e6e 25 private $count = 0;
26 private $freetext = null;
27 private $photos = true;
89460d9c 28
5d42c993 29 public function __construct($photos = true, $freetext = null)
89460d9c 30 {
5d42c993 31 PlVCard::$folding = false;
29b12e6e 32 $this->freetext = $freetext;
33 $this->photos = $photos;
89460d9c 34 }
35
6713fc49 36 public function addProfile($profile)
89460d9c 37 {
6713fc49
RB
38 $profile = Profile::get($profile);
39 if ($profile) {
40 $this->profile_list[] = $profile;
3ce06e37
FB
41 $this->count++;
42 }
89460d9c 43 }
44
6713fc49
RB
45 public function addProfiles(array $profiles) {
46 foreach ($profiles as $profile) {
47 $this->addProfile($profile);
5d42c993 48 }
89460d9c 49 }
50
5d42c993 51 protected function fetch()
89460d9c 52 {
6713fc49 53 return PlIteratorUtils::fromArray($this->profile_list);
29b12e6e 54 }
89460d9c 55
6713fc49 56 protected function buildEntry($pf)
29b12e6e 57 {
29b12e6e 58 global $globals;
3e6cd673 59 $pf = $pf['value'];
89460d9c 60
3e6cd673 61 $entry = new PlVCardEntry($pf->firstNames(), $pf->lastNames(), null, null, $pf->nickname);
6713fc49
RB
62
63 $user = $pf->owner();
5d42c993
FB
64
65 // Free text
6713fc49 66 $freetext = '(' . $pf->promo . ')';
29b12e6e 67 if ($this->freetext) {
5d42c993
FB
68 $freetext .= "\n" . $this->freetext;
69 }
5d42c993 70 $entry->set('NOTE', $freetext);
79dceea9 71 if ($pf->mobile) {
6713fc49 72 $entry->addTel(null, $pf->mobile, false, true, true, false, true, true);
5d42c993
FB
73 }
74
75 // Emails
6713fc49
RB
76 if (!is_null($user)) {
77 $entry->addMail(null, $user->bestalias, true);
78 $entry->addMail(null, $user->bestalias_alternate);
79 if ($user->forlife != $user->bestalias) {
80 $entry->addMail(null, $user->forlife);
81 $entry->addMail(null, $user->forlife_alternate);
82 }
5d42c993
FB
83 }
84
85 // Homes
598c57f6 86 $adrs = $pf->iterAddresses(Profile::ADDRESS_PERSO);
6713fc49 87 while ($adr = $adrs->next()) {
79dceea9
FB
88 if (!$adr->postalCode || !$adr->locality || !$adr->country) {
89 $group = $entry->addHome($adr->text, null, null, null,
90 null, $adr->administrativeArea, null,
91 $adr->hasFlag('current'), $adr->hasFlag('mail'), $adr->hasFlag('mail'));
92 } else {
e7fb8e06 93 $group = $entry->addHome(trim(Geocoder::getFirstLines($adr->text, $adr->postalCode, 4)), null, null, $adr->postalCode,
79dceea9
FB
94 $adr->locality, $adr->administrativeArea, $adr->country,
95 $adr->hasFlag('current'), $adr->hasFlag('mail'), $adr->hasFlag('mail'));
96 }
3e6cd673 97 foreach ($adr->phones() as $phone) {
0b53817f 98 if ($phone->link_type == Phone::TYPE_FIXED) {
3e6cd673
FB
99 $entry->addTel($group, $phone->display, false, true, true, false, false,
100 $adr->hasFlag('current') && empty($pf->mobile));
0b53817f 101 } else if ($phone->link_type == Phone::TYPE_FAX) {
3e6cd673
FB
102 $entry->addTel($group, $phone->display, true, false, false, false, false, false);
103 }
5d42c993
FB
104 }
105 }
106
107 // Pro
598c57f6 108 $adrs = $pf->iterAddresses(Profile::ADDRESS_PRO);
6713fc49 109 while ($adr = $adrs->next()) {
79dceea9
FB
110 if (!$adr->postalCode || !$adr->locality || !$adr->country) {
111 $group = $entry->addWork(null, null, null, null,
112 $adr->text, null, null, null,
113 null, $adr->administrativeArea, null);
114 } else {
115 // TODO : link address to company
116 $group = $entry->addWork(null, null, null, null,
e7fb8e06 117 trim(Geocoder::getFirstLines($adr->text, $adr->postalCode, 4)), null, null, $adr->postalCode,
79dceea9
FB
118 $adr->locality, $adr->administrativeArea, $adr->country);
119 }
3e6cd673 120 foreach ($adr->phones() as $phone) {
0b53817f 121 if ($phone->link_type == Phone::TYPE_FIXED) {
3e6cd673 122 $entry->addTel($group, $phone->display);
0b53817f 123 } else if ($phone->link_type == Phone::TYPE_FAX) {
3e6cd673 124 $entry->addTel($group, $phone->display, true);
a86b9767 125 }
3e6cd673 126 }
89460d9c 127 }
128
5d42c993 129 // Melix
6713fc49 130 if (!is_null($user)) {
06a548e5 131 $alias = $user->emailAliases();
fab7a90a 132 if (!is_null($alias) && $pf->alias_pub == 'public') {
6713fc49
RB
133 $entry->addMail(null, $alias);
134 }
5d42c993
FB
135 }
136
137 // Custom fields
6713fc49 138 if (!is_null($user)) {
01c8c98b 139 $groups = $user->groups(true, true);
6713fc49 140 if (count($groups)) {
2998edf1 141 $gn = DirEnum::getOptions(DirEnum::GROUPESX);
6713fc49
RB
142 $gns = array();
143 foreach (array_keys($groups) as $gid) {
144 $gns[$gid] = $gn[$gid];
145 }
146 $entry->set('X-GROUPS', join(', ', $gns));
147 }
5d42c993 148 }
6713fc49
RB
149
150 $binets = $pf->getBinets();
151
152 if (count($binets)) {
2998edf1 153 $bn = DirEnum::getOptions(DirEnum::BINETS);
6713fc49
RB
154 $bns = array();
155 foreach ($binets as $bid) {
156 $bns[$bid] = $bn[$bid];
157 }
3e6cd673 158 $entry->set('X-BINETS', join(', ', $bns));
5d42c993 159 }
6713fc49 160 if (!empty($pf->section)) {
17717c87 161 $entry->set('X-SECTION', $pf->section);
5d42c993 162 }
eaf30d86 163
5d42c993 164 // Photo
917c4d11 165 if ($this->photos) {
166 $res = XDB::query(
a104d709 167 "SELECT attach, attachmime
3e6cd673
FB
168 FROM profile_photos AS p
169 WHERE p.pid = {?}", $pf->id());
917c4d11 170 if ($res->numRows()) {
5d42c993
FB
171 list($data, $type) = $res->fetchOneRow();
172 $entry->setPhoto($data, strtoupper($type));
29b12e6e 173 }
29b12e6e 174 }
5d42c993 175 return $entry;
89460d9c 176 }
89460d9c 177}
178
a7de4ef7 179// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
89460d9c 180?>