/library/Ivoz/Provider/Domain/Model/IvrEntry/IvrEntryAbstract.php

https://github.com/irontec/ivozprovider · PHP · 460 lines · 214 code · 67 blank · 179 comment · 5 complexity · 43c7309686de980c8a46cae96efde240 MD5 · raw file

  1. <?php
  2. namespace Ivoz\Provider\Domain\Model\IvrEntry;
  3. use Assert\Assertion;
  4. use Ivoz\Core\Application\DataTransferObjectInterface;
  5. use Ivoz\Core\Domain\Model\ChangelogTrait;
  6. use Ivoz\Core\Domain\Model\EntityInterface;
  7. /**
  8. * IvrEntryAbstract
  9. * @codeCoverageIgnore
  10. */
  11. abstract class IvrEntryAbstract
  12. {
  13. /**
  14. * @var string
  15. */
  16. protected $entry;
  17. /**
  18. * comment: enum:number|extension|voicemail|conditional
  19. * @var string
  20. */
  21. protected $routeType;
  22. /**
  23. * @var string | null
  24. */
  25. protected $numberValue;
  26. /**
  27. * @var \Ivoz\Provider\Domain\Model\Ivr\IvrInterface
  28. */
  29. protected $ivr;
  30. /**
  31. * @var \Ivoz\Provider\Domain\Model\Locution\LocutionInterface | null
  32. */
  33. protected $welcomeLocution;
  34. /**
  35. * @var \Ivoz\Provider\Domain\Model\Extension\ExtensionInterface | null
  36. */
  37. protected $extension;
  38. /**
  39. * @var \Ivoz\Provider\Domain\Model\User\UserInterface | null
  40. */
  41. protected $voiceMailUser;
  42. /**
  43. * @var \Ivoz\Provider\Domain\Model\ConditionalRoute\ConditionalRouteInterface | null
  44. */
  45. protected $conditionalRoute;
  46. /**
  47. * @var \Ivoz\Provider\Domain\Model\Country\CountryInterface | null
  48. */
  49. protected $numberCountry;
  50. use ChangelogTrait;
  51. /**
  52. * Constructor
  53. */
  54. protected function __construct($entry, $routeType)
  55. {
  56. $this->setEntry($entry);
  57. $this->setRouteType($routeType);
  58. }
  59. abstract public function getId();
  60. public function __toString()
  61. {
  62. return sprintf(
  63. "%s#%s",
  64. "IvrEntry",
  65. $this->getId()
  66. );
  67. }
  68. /**
  69. * @return void
  70. * @throws \Exception
  71. */
  72. protected function sanitizeValues()
  73. {
  74. }
  75. /**
  76. * @param null $id
  77. * @return IvrEntryDto
  78. */
  79. public static function createDto($id = null)
  80. {
  81. return new IvrEntryDto($id);
  82. }
  83. /**
  84. * @internal use EntityTools instead
  85. * @param IvrEntryInterface|null $entity
  86. * @param int $depth
  87. * @return IvrEntryDto|null
  88. */
  89. public static function entityToDto(EntityInterface $entity = null, $depth = 0)
  90. {
  91. if (!$entity) {
  92. return null;
  93. }
  94. Assertion::isInstanceOf($entity, IvrEntryInterface::class);
  95. if ($depth < 1) {
  96. return static::createDto($entity->getId());
  97. }
  98. if ($entity instanceof \Doctrine\ORM\Proxy\Proxy && !$entity->__isInitialized()) {
  99. return static::createDto($entity->getId());
  100. }
  101. /** @var IvrEntryDto $dto */
  102. $dto = $entity->toDto($depth-1);
  103. return $dto;
  104. }
  105. /**
  106. * Factory method
  107. * @internal use EntityTools instead
  108. * @param IvrEntryDto $dto
  109. * @return self
  110. */
  111. public static function fromDto(
  112. DataTransferObjectInterface $dto,
  113. \Ivoz\Core\Application\ForeignKeyTransformerInterface $fkTransformer
  114. ) {
  115. Assertion::isInstanceOf($dto, IvrEntryDto::class);
  116. $self = new static(
  117. $dto->getEntry(),
  118. $dto->getRouteType()
  119. );
  120. $self
  121. ->setNumberValue($dto->getNumberValue())
  122. ->setIvr($fkTransformer->transform($dto->getIvr()))
  123. ->setWelcomeLocution($fkTransformer->transform($dto->getWelcomeLocution()))
  124. ->setExtension($fkTransformer->transform($dto->getExtension()))
  125. ->setVoiceMailUser($fkTransformer->transform($dto->getVoiceMailUser()))
  126. ->setConditionalRoute($fkTransformer->transform($dto->getConditionalRoute()))
  127. ->setNumberCountry($fkTransformer->transform($dto->getNumberCountry()))
  128. ;
  129. $self->initChangelog();
  130. return $self;
  131. }
  132. /**
  133. * @internal use EntityTools instead
  134. * @param IvrEntryDto $dto
  135. * @return self
  136. */
  137. public function updateFromDto(
  138. DataTransferObjectInterface $dto,
  139. \Ivoz\Core\Application\ForeignKeyTransformerInterface $fkTransformer
  140. ) {
  141. Assertion::isInstanceOf($dto, IvrEntryDto::class);
  142. $this
  143. ->setEntry($dto->getEntry())
  144. ->setRouteType($dto->getRouteType())
  145. ->setNumberValue($dto->getNumberValue())
  146. ->setIvr($fkTransformer->transform($dto->getIvr()))
  147. ->setWelcomeLocution($fkTransformer->transform($dto->getWelcomeLocution()))
  148. ->setExtension($fkTransformer->transform($dto->getExtension()))
  149. ->setVoiceMailUser($fkTransformer->transform($dto->getVoiceMailUser()))
  150. ->setConditionalRoute($fkTransformer->transform($dto->getConditionalRoute()))
  151. ->setNumberCountry($fkTransformer->transform($dto->getNumberCountry()));
  152. return $this;
  153. }
  154. /**
  155. * @internal use EntityTools instead
  156. * @param int $depth
  157. * @return IvrEntryDto
  158. */
  159. public function toDto($depth = 0)
  160. {
  161. return self::createDto()
  162. ->setEntry(self::getEntry())
  163. ->setRouteType(self::getRouteType())
  164. ->setNumberValue(self::getNumberValue())
  165. ->setIvr(\Ivoz\Provider\Domain\Model\Ivr\Ivr::entityToDto(self::getIvr(), $depth))
  166. ->setWelcomeLocution(\Ivoz\Provider\Domain\Model\Locution\Locution::entityToDto(self::getWelcomeLocution(), $depth))
  167. ->setExtension(\Ivoz\Provider\Domain\Model\Extension\Extension::entityToDto(self::getExtension(), $depth))
  168. ->setVoiceMailUser(\Ivoz\Provider\Domain\Model\User\User::entityToDto(self::getVoiceMailUser(), $depth))
  169. ->setConditionalRoute(\Ivoz\Provider\Domain\Model\ConditionalRoute\ConditionalRoute::entityToDto(self::getConditionalRoute(), $depth))
  170. ->setNumberCountry(\Ivoz\Provider\Domain\Model\Country\Country::entityToDto(self::getNumberCountry(), $depth));
  171. }
  172. /**
  173. * @return array
  174. */
  175. protected function __toArray()
  176. {
  177. return [
  178. 'entry' => self::getEntry(),
  179. 'routeType' => self::getRouteType(),
  180. 'numberValue' => self::getNumberValue(),
  181. 'ivrId' => self::getIvr()->getId(),
  182. 'welcomeLocutionId' => self::getWelcomeLocution() ? self::getWelcomeLocution()->getId() : null,
  183. 'extensionId' => self::getExtension() ? self::getExtension()->getId() : null,
  184. 'voiceMailUserId' => self::getVoiceMailUser() ? self::getVoiceMailUser()->getId() : null,
  185. 'conditionalRouteId' => self::getConditionalRoute() ? self::getConditionalRoute()->getId() : null,
  186. 'numberCountryId' => self::getNumberCountry() ? self::getNumberCountry()->getId() : null
  187. ];
  188. }
  189. // @codeCoverageIgnoreStart
  190. /**
  191. * Set entry
  192. *
  193. * @param string $entry
  194. *
  195. * @return static
  196. */
  197. protected function setEntry($entry)
  198. {
  199. Assertion::notNull($entry, 'entry value "%s" is null, but non null value was expected.');
  200. Assertion::maxLength($entry, 40, 'entry value "%s" is too long, it should have no more than %d characters, but has %d characters.');
  201. $this->entry = $entry;
  202. return $this;
  203. }
  204. /**
  205. * Get entry
  206. *
  207. * @return string
  208. */
  209. public function getEntry(): string
  210. {
  211. return $this->entry;
  212. }
  213. /**
  214. * Set routeType
  215. *
  216. * @param string $routeType
  217. *
  218. * @return static
  219. */
  220. protected function setRouteType($routeType)
  221. {
  222. Assertion::notNull($routeType, 'routeType value "%s" is null, but non null value was expected.');
  223. Assertion::maxLength($routeType, 25, 'routeType value "%s" is too long, it should have no more than %d characters, but has %d characters.');
  224. Assertion::choice($routeType, [
  225. IvrEntryInterface::ROUTETYPE_NUMBER,
  226. IvrEntryInterface::ROUTETYPE_EXTENSION,
  227. IvrEntryInterface::ROUTETYPE_VOICEMAIL,
  228. IvrEntryInterface::ROUTETYPE_CONDITIONAL
  229. ], 'routeTypevalue "%s" is not an element of the valid values: %s');
  230. $this->routeType = $routeType;
  231. return $this;
  232. }
  233. /**
  234. * Get routeType
  235. *
  236. * @return string
  237. */
  238. public function getRouteType(): string
  239. {
  240. return $this->routeType;
  241. }
  242. /**
  243. * Set numberValue
  244. *
  245. * @param string $numberValue | null
  246. *
  247. * @return static
  248. */
  249. protected function setNumberValue($numberValue = null)
  250. {
  251. if (!is_null($numberValue)) {
  252. Assertion::maxLength($numberValue, 25, 'numberValue value "%s" is too long, it should have no more than %d characters, but has %d characters.');
  253. }
  254. $this->numberValue = $numberValue;
  255. return $this;
  256. }
  257. /**
  258. * Get numberValue
  259. *
  260. * @return string | null
  261. */
  262. public function getNumberValue()
  263. {
  264. return $this->numberValue;
  265. }
  266. /**
  267. * Set ivr
  268. *
  269. * @param \Ivoz\Provider\Domain\Model\Ivr\IvrInterface $ivr
  270. *
  271. * @return static
  272. */
  273. public function setIvr(\Ivoz\Provider\Domain\Model\Ivr\IvrInterface $ivr)
  274. {
  275. $this->ivr = $ivr;
  276. return $this;
  277. }
  278. /**
  279. * Get ivr
  280. *
  281. * @return \Ivoz\Provider\Domain\Model\Ivr\IvrInterface
  282. */
  283. public function getIvr()
  284. {
  285. return $this->ivr;
  286. }
  287. /**
  288. * Set welcomeLocution
  289. *
  290. * @param \Ivoz\Provider\Domain\Model\Locution\LocutionInterface $welcomeLocution | null
  291. *
  292. * @return static
  293. */
  294. protected function setWelcomeLocution(\Ivoz\Provider\Domain\Model\Locution\LocutionInterface $welcomeLocution = null)
  295. {
  296. $this->welcomeLocution = $welcomeLocution;
  297. return $this;
  298. }
  299. /**
  300. * Get welcomeLocution
  301. *
  302. * @return \Ivoz\Provider\Domain\Model\Locution\LocutionInterface | null
  303. */
  304. public function getWelcomeLocution()
  305. {
  306. return $this->welcomeLocution;
  307. }
  308. /**
  309. * Set extension
  310. *
  311. * @param \Ivoz\Provider\Domain\Model\Extension\ExtensionInterface $extension | null
  312. *
  313. * @return static
  314. */
  315. protected function setExtension(\Ivoz\Provider\Domain\Model\Extension\ExtensionInterface $extension = null)
  316. {
  317. $this->extension = $extension;
  318. return $this;
  319. }
  320. /**
  321. * Get extension
  322. *
  323. * @return \Ivoz\Provider\Domain\Model\Extension\ExtensionInterface | null
  324. */
  325. public function getExtension()
  326. {
  327. return $this->extension;
  328. }
  329. /**
  330. * Set voiceMailUser
  331. *
  332. * @param \Ivoz\Provider\Domain\Model\User\UserInterface $voiceMailUser | null
  333. *
  334. * @return static
  335. */
  336. protected function setVoiceMailUser(\Ivoz\Provider\Domain\Model\User\UserInterface $voiceMailUser = null)
  337. {
  338. $this->voiceMailUser = $voiceMailUser;
  339. return $this;
  340. }
  341. /**
  342. * Get voiceMailUser
  343. *
  344. * @return \Ivoz\Provider\Domain\Model\User\UserInterface | null
  345. */
  346. public function getVoiceMailUser()
  347. {
  348. return $this->voiceMailUser;
  349. }
  350. /**
  351. * Set conditionalRoute
  352. *
  353. * @param \Ivoz\Provider\Domain\Model\ConditionalRoute\ConditionalRouteInterface $conditionalRoute | null
  354. *
  355. * @return static
  356. */
  357. protected function setConditionalRoute(\Ivoz\Provider\Domain\Model\ConditionalRoute\ConditionalRouteInterface $conditionalRoute = null)
  358. {
  359. $this->conditionalRoute = $conditionalRoute;
  360. return $this;
  361. }
  362. /**
  363. * Get conditionalRoute
  364. *
  365. * @return \Ivoz\Provider\Domain\Model\ConditionalRoute\ConditionalRouteInterface | null
  366. */
  367. public function getConditionalRoute()
  368. {
  369. return $this->conditionalRoute;
  370. }
  371. /**
  372. * Set numberCountry
  373. *
  374. * @param \Ivoz\Provider\Domain\Model\Country\CountryInterface $numberCountry | null
  375. *
  376. * @return static
  377. */
  378. protected function setNumberCountry(\Ivoz\Provider\Domain\Model\Country\CountryInterface $numberCountry = null)
  379. {
  380. $this->numberCountry = $numberCountry;
  381. return $this;
  382. }
  383. /**
  384. * Get numberCountry
  385. *
  386. * @return \Ivoz\Provider\Domain\Model\Country\CountryInterface | null
  387. */
  388. public function getNumberCountry()
  389. {
  390. return $this->numberCountry;
  391. }
  392. // @codeCoverageIgnoreEnd
  393. }