linkmobility-php-client/src/RecipientsList/RecipientsList.php

174 regels
4.1 KiB
PHP

2022-06-20 14:47:33 +02:00
<?php
/**
* This Software is the property of Data Development and is protected
* by copyright law - it is NOT Freeware.
* Any unauthorized use of this software without a valid license
* is a violation of the license agreement and will be prosecuted by
* civil and criminal law.
* http://www.shopmodule.com
*
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com>
* @link http://www.oxidmodule.com
*/
declare(strict_types=1);
namespace D3\LinkmobilityClient\RecipientsList;
use D3\LinkmobilityClient\Client;
2022-06-24 16:00:56 +02:00
use D3\LinkmobilityClient\Exceptions\ExceptionMessages;
use D3\LinkmobilityClient\Exceptions\RecipientException;
2022-06-20 14:47:33 +02:00
use D3\LinkmobilityClient\ValueObject\Recipient;
2022-06-24 16:00:56 +02:00
use Iterator;
use libphonenumber\NumberParseException;
use libphonenumber\PhoneNumberType;
2022-06-24 16:00:56 +02:00
use libphonenumber\PhoneNumberUtil;
2022-06-20 14:47:33 +02:00
2022-06-24 16:00:56 +02:00
class RecipientsList implements RecipientsListInterface, Iterator
2022-06-20 14:47:33 +02:00
{
/**
* @var Client
*/
private $client;
2022-06-20 14:47:33 +02:00
/**
* @var array
*/
private $recipients = [];
2022-07-13 10:41:23 +02:00
public function __construct(Client $client)
{
$this->setClient($client);
}
2022-07-11 15:06:18 +02:00
/**
* @return PhoneNumberUtil
*/
protected function getPhoneNumberUtil(): PhoneNumberUtil
{
return PhoneNumberUtil::getInstance();
}
/**
* @param Recipient $recipient
*
* @return RecipientsListInterface
*/
2022-07-13 10:41:23 +02:00
public function add(Recipient $recipient): RecipientsListInterface
2022-06-20 14:47:33 +02:00
{
2022-07-11 15:06:18 +02:00
$phoneUtil = $this->getPhoneNumberUtil();
try {
2022-07-13 10:41:23 +02:00
$phoneNumber = $phoneUtil->parse($recipient->get(), $recipient->getCountryCode());
2022-06-24 16:00:56 +02:00
2022-07-13 10:41:23 +02:00
if (false === $phoneUtil->isValidNumber($phoneNumber)) {
throw new RecipientException(ExceptionMessages::INVALID_RECIPIENT_PHONE);
2022-06-24 16:00:56 +02:00
} elseif (
false === in_array(
2022-07-13 10:41:23 +02:00
$phoneUtil->getNumberType($phoneNumber),
2022-06-24 16:00:56 +02:00
[
PhoneNumberType::MOBILE,
PhoneNumberType::FIXED_LINE_OR_MOBILE
]
)
) {
2022-07-13 10:41:23 +02:00
throw new RecipientException(ExceptionMessages::NOT_A_MOBILE_NUMBER);
}
2022-07-13 10:41:23 +02:00
$this->recipients[ md5(serialize($recipient)) ] = $recipient;
2022-06-24 16:00:56 +02:00
} catch (NumberParseException $e) {
if ($this->getClient()->hasLogger()) {
$this->getClient()->getLogger()->info($e->getMessage());
}
2022-06-24 16:00:56 +02:00
} catch (RecipientException $e) {
if ($this->getClient()->hasLogger()) {
$this->getClient()->getLogger()->info($e->getMessage());
}
}
2022-07-13 10:41:23 +02:00
return $this;
2022-06-20 14:47:33 +02:00
}
2022-07-11 15:06:18 +02:00
/**
* @return RecipientsListInterface
*/
2022-07-13 10:41:23 +02:00
public function clearRecipents(): RecipientsListInterface
2022-06-20 14:47:33 +02:00
{
$this->recipients = [];
return $this;
2022-06-20 14:47:33 +02:00
}
2022-07-13 10:41:23 +02:00
public function getRecipients(): array
2022-06-20 14:47:33 +02:00
{
return array_values(
array_map(
function (Recipient $recipient) {
return $recipient->get();
},
$this->recipients
)
);
}
2022-06-24 16:00:56 +02:00
/**
* @return array
*/
2022-07-13 10:41:23 +02:00
public function getRecipientsList(): array
2022-06-20 14:47:33 +02:00
{
return $this->recipients;
}
2022-06-24 16:00:56 +02:00
/**
* @return false|mixed
*/
2022-06-20 14:47:33 +02:00
public function current()
{
return current($this->recipients);
}
2022-06-24 16:00:56 +02:00
/**
* @return false|mixed|void
*/
2022-06-20 14:47:33 +02:00
public function next()
{
return next($this->recipients);
}
public function key()
{
return key($this->recipients);
}
public function rewind()
{
2022-07-11 15:06:18 +02:00
reset($this->recipients);
2022-06-20 14:47:33 +02:00
}
2022-06-24 16:00:56 +02:00
public function valid(): bool
2022-06-20 14:47:33 +02:00
{
2022-06-24 16:00:56 +02:00
return current($this->recipients) instanceof Recipient;
2022-06-20 14:47:33 +02:00
}
/**
* @return Client
*/
public function getClient(): Client
{
return $this->client;
}
/**
* @param Client $client
2022-07-11 15:06:18 +02:00
*
* @return RecipientsList
*/
2022-07-13 10:41:23 +02:00
public function setClient(Client $client): RecipientsList
{
$this->client = $client;
2022-07-11 15:06:18 +02:00
return $this;
}
2022-07-13 10:41:23 +02:00
}