%PDF- %PDF-
| Direktori : /www/varak.net/nextcloud.varak.net/apps/circles/lib/Model/ |
| Current File : /www/varak.net/nextcloud.varak.net/apps/circles/lib/Model/DavCard.php |
<?php
/**
* SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Circles\Model;
use JsonSerializable;
use OCA\Circles\Tools\Traits\TArrayTools;
/**
* Class DavCard
*
* @package OCA\Circles\Model
*/
class DavCard implements JsonSerializable {
use TArrayTools;
public const TYPE_CONTACT = 1;
public const TYPE_LOCAL = 2;
// const TYPE_FEDERATED = 3;
/** @var int */
private $addressBookId = 0;
/** @var string */
private $owner = '';
/** @var string */
private $cardUri = '';
/** @var string */
private $contactId = '';
/** @var string */
private $fn = '';
/** @var array */
private $emails = [];
/** @var array */
private $clouds = [];
/** @var array */
private $groups = [];
/** @var DeprecatedCircle[] */
private $circles = [];
/** @var string */
private $userId = '';
public function __construct() {
}
/**
* @return int
*/
public function getAddressBookId(): int {
return $this->addressBookId;
}
/**
* @param int $addressBookId
*
* @return DavCard
*/
public function setAddressBookId(int $addressBookId): self {
$this->addressBookId = $addressBookId;
return $this;
}
/**
* @return string
*/
public function getOwner(): string {
return $this->owner;
}
/**
* @param string $owner
*
* @return DavCard
*/
public function setOwner(string $owner): self {
$this->owner = $owner;
return $this;
}
/**
* @return string
*/
public function getCardUri(): string {
return $this->cardUri;
}
/**
* @param string $cardUri
*
* @return DavCard
*/
public function setCardUri(string $cardUri): self {
$this->cardUri = $cardUri;
return $this;
}
/**
* @return string
*/
public function getUniqueId(): string {
return $this->getAddressBookId() . '/' . $this->getCardUri();
}
/**
* @return string
*/
public function getContactId(): string {
return $this->contactId;
}
/**
* @param string $contactId
*
* @return DavCard
*/
public function setContactId(string $contactId): self {
$this->contactId = $contactId;
return $this;
}
/**
* @return string
*/
public function getFn(): string {
return $this->fn;
}
/**
* @param string $fn
*
* @return DavCard
*/
public function setFn(string $fn): self {
$this->fn = $fn;
return $this;
}
/**
* @return array
*/
public function getEmails(): array {
return $this->emails;
}
/**
* @param array $emails
*
* @return DavCard
*/
public function setEmails(array $emails): self {
$this->emails = $emails;
return $this;
}
/**
* @return array
*/
public function getClouds(): array {
return $this->clouds;
}
/**
* @param array $clouds
*
* @return DavCard
*/
public function setClouds(array $clouds): self {
$this->clouds = $clouds;
return $this;
}
/**
* @return array
*/
public function getGroups(): array {
return $this->groups;
}
/**
* @param array $groups
*
* @return DavCard
*/
public function setGroups(array $groups): self {
$this->groups = $groups;
return $this;
}
/**
* @return DeprecatedCircle[]
*/
public function getCircles(): array {
return $this->circles;
}
/**
* @param DeprecatedCircle $circle
*
* @return $this
*/
public function addCircle(DeprecatedCircle $circle): self {
$this->circles[] = $circle;
return $this;
}
/**
* @param array $circles
*
* @return DavCard
*/
public function setCircles(array $circles): self {
$this->circles = $circles;
return $this;
}
/**
* @return string
*/
public function getUserId(): string {
return $this->userId;
}
/**
* @param string $userId
*
* @return DavCard
*/
public function setUserId(string $userId): self {
$this->userId = $userId;
return $this;
}
/**
* @param array $data
*/
public function import(array $data) {
$this->setAddressBookId($this->get('addressBookId', $data));
$this->setOwner($this->get('owner', $data));
$this->setCardUri($this->get('cardUri', $data));
$this->setContactId($this->get('contactId', $data));
$this->setFn($this->get('fn', $data));
$this->setEmails($this->getArray('emails', $data));
$this->setClouds($this->getArray('clouds', $data));
$this->setGroups($this->getArray('groups', $data));
$this->setUserId($this->get('userId', $data));
}
/**
* @param string $dav
*/
public function importFromDav(string $dav) {
$data = $this->parseDav($dav);
$this->setContactId($this->get('UID', $data));
$this->setFn($this->get('FN', $data));
$this->setEmails($this->getArray('EMAILS', $data));
$this->setClouds($this->getArray('CLOUDS', $data));
$this->setGroups($this->getArray('CATEGORIES', $data));
}
/**
* get essential data from the dav content
* (also don't think we need regex)
*
* @param string $dav
*
* @return array
*/
private function parseDav(string $dav): array {
$result = [
'UID' => '',
'FN' => '',
'EMAILS' => [],
'CLOUDS' => [],
'CATEGORIES' => []
];
$data = preg_split('/\R/', $dav);
foreach ($data as $entry) {
if (trim($entry) === '' || strpos($entry, ':') === false) {
continue;
}
[$k, $v] = explode(':', $entry, 2);
$k = strtoupper($k);
if (strpos($entry, ';') !== false) {
[$k] = explode(';', $entry, 2);
}
switch ($k) {
case 'UID':
case 'FN':
$result[$k] = $v;
break;
case 'EMAIL':
if ($v !== '') {
$result['EMAILS'][] = $v;
}
break;
case 'CLOUD':
if ($v !== '') {
$result['CLOUDS'][] = $v;
}
break;
case 'CATEGORIES':
if (strpos($v, ',') === false) {
$result['CATEGORIES'] = [$v];
} else {
$result['CATEGORIES'] = explode(',', $v);
}
break;
}
}
return $result;
}
/**
* @return array
*/
public function jsonSerialize(): array {
return [
'addressBookId' => $this->getAddressBookId(),
'owner' => $this->getOwner(),
'cardUri' => $this->getCardUri(),
'contactId' => $this->getContactId(),
'uniqueId' => $this->getUniqueId(),
'fn' => $this->getFn(),
'emails' => $this->getEmails(),
'clouds' => $this->getClouds(),
'groups' => $this->getGroups(),
'userId' => $this->getUserId()
];
}
}