f7cloud_client/apps/calendar/lib/Service/ContactsService.php
root 8b6a0139db f7cloud_client
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-17 22:59:26 +00:00

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;
}
}