+ return $user;
+ }
+}
+
+class VCard
+{
+ private $iterator = null;
+
+ public function __construct($users, $photos = true, $freetext = null)
+ {
+ $this->iterator = new VCardIterator($photos, $freetext);
+ if (is_array($users)) {
+ foreach ($users as $user) {
+ $this->iterator->add_user($user);
+ }
+ } else {
+ $this->iterator->add_user($users);
+ }
+ }
+
+ public static function escape($text)
+ {
+ return preg_replace('/[,;]/', '\\\\$0', $text);
+ }
+
+ public static function format_adr($params, &$smarty)
+ {
+ // $adr1, $adr2, $adr3, $postcode, $city, $region, $country
+ extract($params['adr']);
+ $adr = trim($adr1);
+ $adr = trim("$adr\n$adr2");
+ $adr = trim("$adr\n$adr3");
+ return VCard::text_encode(';;'
+ . VCard::escape($adr) . ';'
+ . VCard::escape($city) . ';'
+ . VCard::escape($region) . ';'
+ . VCard::escape($postcode) . ';'
+ . VCard::escape($country), false);
+ }
+
+ public static function text_encode($text, $escape = true)
+ {
+ if (is_array($text)) {
+ return implode(',', array_map(array('VCard', 'text_encode'), $text));
+ }
+ if ($escape) {
+ $text = VCard::escape($text);
+ }
+ return preg_replace("/(\r\n|\n|\r)/", '\n', $text);