/library/Ivoz/Provider/Domain/Model/User/UserTrait.php

https://github.com/irontec/ivozprovider · PHP · 367 lines · 214 code · 43 blank · 110 comment · 16 complexity · 28c08695c3e6c3d6e33ba2fd4b951711 MD5 · raw file

  1. <?php
  2. namespace Ivoz\Provider\Domain\Model\User;
  3. use Ivoz\Core\Application\DataTransferObjectInterface;
  4. use Doctrine\Common\Collections\ArrayCollection;
  5. use Doctrine\Common\Collections\Criteria;
  6. /**
  7. * UserTrait
  8. * @codeCoverageIgnore
  9. */
  10. trait UserTrait
  11. {
  12. /**
  13. * @var integer
  14. */
  15. protected $id;
  16. /**
  17. * @var ArrayCollection
  18. */
  19. protected $pickUpRelUsers;
  20. /**
  21. * @var ArrayCollection
  22. */
  23. protected $queueMembers;
  24. /**
  25. * @var ArrayCollection
  26. */
  27. protected $callForwardSettings;
  28. /**
  29. * Constructor
  30. */
  31. protected function __construct()
  32. {
  33. parent::__construct(...func_get_args());
  34. $this->pickUpRelUsers = new ArrayCollection();
  35. $this->queueMembers = new ArrayCollection();
  36. $this->callForwardSettings = new ArrayCollection();
  37. }
  38. abstract protected function sanitizeValues();
  39. /**
  40. * Factory method
  41. * @internal use EntityTools instead
  42. * @param UserDto $dto
  43. * @param \Ivoz\Core\Application\ForeignKeyTransformerInterface $fkTransformer
  44. * @return static
  45. */
  46. public static function fromDto(
  47. DataTransferObjectInterface $dto,
  48. \Ivoz\Core\Application\ForeignKeyTransformerInterface $fkTransformer
  49. ) {
  50. /** @var static $self */
  51. $self = parent::fromDto($dto, $fkTransformer);
  52. if (!is_null($dto->getPickUpRelUsers())) {
  53. $self->replacePickUpRelUsers(
  54. $fkTransformer->transformCollection(
  55. $dto->getPickUpRelUsers()
  56. )
  57. );
  58. }
  59. if (!is_null($dto->getQueueMembers())) {
  60. $self->replaceQueueMembers(
  61. $fkTransformer->transformCollection(
  62. $dto->getQueueMembers()
  63. )
  64. );
  65. }
  66. if (!is_null($dto->getCallForwardSettings())) {
  67. $self->replaceCallForwardSettings(
  68. $fkTransformer->transformCollection(
  69. $dto->getCallForwardSettings()
  70. )
  71. );
  72. }
  73. $self->sanitizeValues();
  74. if ($dto->getId()) {
  75. $self->id = $dto->getId();
  76. $self->initChangelog();
  77. }
  78. return $self;
  79. }
  80. /**
  81. * @internal use EntityTools instead
  82. * @param UserDto $dto
  83. * @param \Ivoz\Core\Application\ForeignKeyTransformerInterface $fkTransformer
  84. * @return static
  85. */
  86. public function updateFromDto(
  87. DataTransferObjectInterface $dto,
  88. \Ivoz\Core\Application\ForeignKeyTransformerInterface $fkTransformer
  89. ) {
  90. parent::updateFromDto($dto, $fkTransformer);
  91. if (!is_null($dto->getPickUpRelUsers())) {
  92. $this->replacePickUpRelUsers(
  93. $fkTransformer->transformCollection(
  94. $dto->getPickUpRelUsers()
  95. )
  96. );
  97. }
  98. if (!is_null($dto->getQueueMembers())) {
  99. $this->replaceQueueMembers(
  100. $fkTransformer->transformCollection(
  101. $dto->getQueueMembers()
  102. )
  103. );
  104. }
  105. if (!is_null($dto->getCallForwardSettings())) {
  106. $this->replaceCallForwardSettings(
  107. $fkTransformer->transformCollection(
  108. $dto->getCallForwardSettings()
  109. )
  110. );
  111. }
  112. $this->sanitizeValues();
  113. return $this;
  114. }
  115. /**
  116. * @internal use EntityTools instead
  117. * @param int $depth
  118. * @return UserDto
  119. */
  120. public function toDto($depth = 0)
  121. {
  122. $dto = parent::toDto($depth);
  123. return $dto
  124. ->setId($this->getId());
  125. }
  126. /**
  127. * @return array
  128. */
  129. protected function __toArray()
  130. {
  131. return parent::__toArray() + [
  132. 'id' => self::getId()
  133. ];
  134. }
  135. /**
  136. * Add pickUpRelUser
  137. *
  138. * @param \Ivoz\Provider\Domain\Model\PickUpRelUser\PickUpRelUserInterface $pickUpRelUser
  139. *
  140. * @return static
  141. */
  142. public function addPickUpRelUser(\Ivoz\Provider\Domain\Model\PickUpRelUser\PickUpRelUserInterface $pickUpRelUser)
  143. {
  144. $this->pickUpRelUsers->add($pickUpRelUser);
  145. return $this;
  146. }
  147. /**
  148. * Remove pickUpRelUser
  149. *
  150. * @param \Ivoz\Provider\Domain\Model\PickUpRelUser\PickUpRelUserInterface $pickUpRelUser
  151. */
  152. public function removePickUpRelUser(\Ivoz\Provider\Domain\Model\PickUpRelUser\PickUpRelUserInterface $pickUpRelUser)
  153. {
  154. $this->pickUpRelUsers->removeElement($pickUpRelUser);
  155. }
  156. /**
  157. * Replace pickUpRelUsers
  158. *
  159. * @param ArrayCollection $pickUpRelUsers of Ivoz\Provider\Domain\Model\PickUpRelUser\PickUpRelUserInterface
  160. * @return static
  161. */
  162. public function replacePickUpRelUsers(ArrayCollection $pickUpRelUsers)
  163. {
  164. $updatedEntities = [];
  165. $fallBackId = -1;
  166. foreach ($pickUpRelUsers as $entity) {
  167. $index = $entity->getId() ? $entity->getId() : $fallBackId--;
  168. $updatedEntities[$index] = $entity;
  169. $entity->setUser($this);
  170. }
  171. $updatedEntityKeys = array_keys($updatedEntities);
  172. foreach ($this->pickUpRelUsers as $key => $entity) {
  173. $identity = $entity->getId();
  174. if (in_array($identity, $updatedEntityKeys)) {
  175. $this->pickUpRelUsers->set($key, $updatedEntities[$identity]);
  176. } else {
  177. $this->pickUpRelUsers->remove($key);
  178. }
  179. unset($updatedEntities[$identity]);
  180. }
  181. foreach ($updatedEntities as $entity) {
  182. $this->addPickUpRelUser($entity);
  183. }
  184. return $this;
  185. }
  186. /**
  187. * Get pickUpRelUsers
  188. * @param Criteria | null $criteria
  189. * @return \Ivoz\Provider\Domain\Model\PickUpRelUser\PickUpRelUserInterface[]
  190. */
  191. public function getPickUpRelUsers(Criteria $criteria = null)
  192. {
  193. if (!is_null($criteria)) {
  194. return $this->pickUpRelUsers->matching($criteria)->toArray();
  195. }
  196. return $this->pickUpRelUsers->toArray();
  197. }
  198. /**
  199. * Add queueMember
  200. *
  201. * @param \Ivoz\Provider\Domain\Model\QueueMember\QueueMemberInterface $queueMember
  202. *
  203. * @return static
  204. */
  205. public function addQueueMember(\Ivoz\Provider\Domain\Model\QueueMember\QueueMemberInterface $queueMember)
  206. {
  207. $this->queueMembers->add($queueMember);
  208. return $this;
  209. }
  210. /**
  211. * Remove queueMember
  212. *
  213. * @param \Ivoz\Provider\Domain\Model\QueueMember\QueueMemberInterface $queueMember
  214. */
  215. public function removeQueueMember(\Ivoz\Provider\Domain\Model\QueueMember\QueueMemberInterface $queueMember)
  216. {
  217. $this->queueMembers->removeElement($queueMember);
  218. }
  219. /**
  220. * Replace queueMembers
  221. *
  222. * @param ArrayCollection $queueMembers of Ivoz\Provider\Domain\Model\QueueMember\QueueMemberInterface
  223. * @return static
  224. */
  225. public function replaceQueueMembers(ArrayCollection $queueMembers)
  226. {
  227. $updatedEntities = [];
  228. $fallBackId = -1;
  229. foreach ($queueMembers as $entity) {
  230. $index = $entity->getId() ? $entity->getId() : $fallBackId--;
  231. $updatedEntities[$index] = $entity;
  232. $entity->setUser($this);
  233. }
  234. $updatedEntityKeys = array_keys($updatedEntities);
  235. foreach ($this->queueMembers as $key => $entity) {
  236. $identity = $entity->getId();
  237. if (in_array($identity, $updatedEntityKeys)) {
  238. $this->queueMembers->set($key, $updatedEntities[$identity]);
  239. } else {
  240. $this->queueMembers->remove($key);
  241. }
  242. unset($updatedEntities[$identity]);
  243. }
  244. foreach ($updatedEntities as $entity) {
  245. $this->addQueueMember($entity);
  246. }
  247. return $this;
  248. }
  249. /**
  250. * Get queueMembers
  251. * @param Criteria | null $criteria
  252. * @return \Ivoz\Provider\Domain\Model\QueueMember\QueueMemberInterface[]
  253. */
  254. public function getQueueMembers(Criteria $criteria = null)
  255. {
  256. if (!is_null($criteria)) {
  257. return $this->queueMembers->matching($criteria)->toArray();
  258. }
  259. return $this->queueMembers->toArray();
  260. }
  261. /**
  262. * Add callForwardSetting
  263. *
  264. * @param \Ivoz\Provider\Domain\Model\CallForwardSetting\CallForwardSettingInterface $callForwardSetting
  265. *
  266. * @return static
  267. */
  268. public function addCallForwardSetting(\Ivoz\Provider\Domain\Model\CallForwardSetting\CallForwardSettingInterface $callForwardSetting)
  269. {
  270. $this->callForwardSettings->add($callForwardSetting);
  271. return $this;
  272. }
  273. /**
  274. * Remove callForwardSetting
  275. *
  276. * @param \Ivoz\Provider\Domain\Model\CallForwardSetting\CallForwardSettingInterface $callForwardSetting
  277. */
  278. public function removeCallForwardSetting(\Ivoz\Provider\Domain\Model\CallForwardSetting\CallForwardSettingInterface $callForwardSetting)
  279. {
  280. $this->callForwardSettings->removeElement($callForwardSetting);
  281. }
  282. /**
  283. * Replace callForwardSettings
  284. *
  285. * @param ArrayCollection $callForwardSettings of Ivoz\Provider\Domain\Model\CallForwardSetting\CallForwardSettingInterface
  286. * @return static
  287. */
  288. public function replaceCallForwardSettings(ArrayCollection $callForwardSettings)
  289. {
  290. $updatedEntities = [];
  291. $fallBackId = -1;
  292. foreach ($callForwardSettings as $entity) {
  293. $index = $entity->getId() ? $entity->getId() : $fallBackId--;
  294. $updatedEntities[$index] = $entity;
  295. $entity->setUser($this);
  296. }
  297. $updatedEntityKeys = array_keys($updatedEntities);
  298. foreach ($this->callForwardSettings as $key => $entity) {
  299. $identity = $entity->getId();
  300. if (in_array($identity, $updatedEntityKeys)) {
  301. $this->callForwardSettings->set($key, $updatedEntities[$identity]);
  302. } else {
  303. $this->callForwardSettings->remove($key);
  304. }
  305. unset($updatedEntities[$identity]);
  306. }
  307. foreach ($updatedEntities as $entity) {
  308. $this->addCallForwardSetting($entity);
  309. }
  310. return $this;
  311. }
  312. /**
  313. * Get callForwardSettings
  314. * @param Criteria | null $criteria
  315. * @return \Ivoz\Provider\Domain\Model\CallForwardSetting\CallForwardSettingInterface[]
  316. */
  317. public function getCallForwardSettings(Criteria $criteria = null)
  318. {
  319. if (!is_null($criteria)) {
  320. return $this->callForwardSettings->matching($criteria)->toArray();
  321. }
  322. return $this->callForwardSettings->toArray();
  323. }
  324. }