150 lines
3.1 KiB
PHP
150 lines
3.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
/**
|
|
* SPDX-FileCopyrightText: 2014 F7cloud GmbH and F7cloud contributors
|
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
*/
|
|
namespace OCA\Calendar\Service;
|
|
|
|
class ContactsService {
|
|
|
|
|
|
/**
|
|
* @param array $contact
|
|
* @return bool
|
|
*/
|
|
public function isSystemBook(array $contact): bool {
|
|
// Information about system users is fetched via DAV nowadays
|
|
return (isset($contact['isLocalSystemBook']) && $contact['isLocalSystemBook'] === true);
|
|
}
|
|
|
|
/**
|
|
* @param array $contact
|
|
* @return bool
|
|
*/
|
|
public function hasEmail(array $contact): bool {
|
|
if (!isset($contact['EMAIL'])) {
|
|
return false;
|
|
}
|
|
|
|
if (!is_array($contact['EMAIL']) && !empty($contact['EMAIL'])) {
|
|
return true;
|
|
}
|
|
|
|
if (!empty($contact['EMAIL'][0])) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Extract name from an array containing a contact's information
|
|
*
|
|
* @param array $contact
|
|
* @return string
|
|
*/
|
|
public function getNameFromContact(array $contact): string {
|
|
return $contact['FN'] ?? '';
|
|
}
|
|
|
|
/**
|
|
* Get photo uri from contact
|
|
*
|
|
* @param array $contact
|
|
* @return string|null
|
|
*/
|
|
public function getPhotoUri(array $contact): ?string {
|
|
if (!isset($contact['PHOTO'])) {
|
|
return null;
|
|
}
|
|
|
|
$raw = $contact['PHOTO'];
|
|
$uriPrefix = 'VALUE=uri:';
|
|
if (str_starts_with($raw, $uriPrefix)) {
|
|
$strpos = strpos($raw, 'http');
|
|
return $strpos !== false ? substr($raw, $strpos) : null;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* @param array $contact
|
|
* @return string[]
|
|
*/
|
|
public function getEmail(array $contact): array {
|
|
if (\is_string($contact['EMAIL'])) {
|
|
return [$contact['EMAIL']];
|
|
}
|
|
return $contact['EMAIL'];
|
|
}
|
|
|
|
/**
|
|
* @param array $contact
|
|
* @return string|null
|
|
*/
|
|
public function getTimezoneId(array $contact): ?string {
|
|
if (!isset($contact['TZ'])) {
|
|
return null;
|
|
}
|
|
|
|
if (\is_array($contact['TZ'])) {
|
|
return $contact['TZ'][0];
|
|
}
|
|
return $contact['TZ'];
|
|
}
|
|
|
|
/**
|
|
* @param array $contact
|
|
* @return string|null
|
|
*/
|
|
public function getLanguageId(array $contact): ?string {
|
|
if (!isset($contact['LANG'])) {
|
|
return null;
|
|
}
|
|
|
|
if (\is_array($contact['LANG'])) {
|
|
return $contact['LANG'][0];
|
|
}
|
|
return $contact['LANG'];
|
|
}
|
|
|
|
/**
|
|
* @param array $groups
|
|
* @param string $search
|
|
* @return array
|
|
*/
|
|
public function filterGroupsWithCount(array $groups, string $search): array {
|
|
//filter to be unique
|
|
$categories = [];
|
|
foreach ($groups as $group) {
|
|
// CATEGORIES is sometimes missing (despite being searched for via the backend)
|
|
if (!isset($group['CATEGORIES'])) {
|
|
continue;
|
|
}
|
|
|
|
$categories[] = array_filter(explode(',', $group['CATEGORIES']), static function ($cat) use ($search) {
|
|
return str_contains(strtolower($cat), strtolower($search));
|
|
});
|
|
}
|
|
return array_count_values(array_merge(...$categories));
|
|
}
|
|
|
|
/**
|
|
* @param array $contact
|
|
* @return array
|
|
*/
|
|
public function getAddress(array $contact): array {
|
|
if (\is_string($contact['ADR'])) {
|
|
$contact['ADR'] = [$contact['ADR']];
|
|
}
|
|
$addresses = [];
|
|
foreach ($contact['ADR'] as $address) {
|
|
$addresses[] = trim(preg_replace("/\n+/", "\n", str_replace(';', "\n", $address)));
|
|
}
|
|
return $addresses;
|
|
}
|
|
}
|