PageRenderTime 39ms CodeModel.GetById 12ms RepoModel.GetById 1ms app.codeStats 0ms

/app/models/Contact/ContactsFacade.php

https://gitlab.com/kubiq/eveblues
PHP | 153 lines | 106 code | 21 blank | 26 comment | 8 complexity | e4f037262f4782550b7b660e7a87a3cd MD5 | raw file
  1. <?php
  2. namespace EveBlues\Model\Contact;
  3. use EveBlues\Crest\Crest;
  4. use EveBlues\Model\Alliance\AlliancesRepository;
  5. use EveBlues\Model\ApiKey\ApiKey;
  6. use EveBlues\Model\ApiKey\ApiKeysRepository;
  7. use EveBlues\Model\Character\Character;
  8. use EveBlues\Model\Character\CharactersFacade;
  9. use EveBlues\Model\Character\CharactersRepository;
  10. use EveBlues\Model\Corporation\CorporationsRepository;
  11. use EveBlues\Model\User\User;
  12. use EveBlues\XmlApi\XmlApi;
  13. use Nette\Application\BadRequestException;
  14. use Nette\Application\ForbiddenRequestException;
  15. /**
  16. * @author Jakub Pistek <mail@jakubpistek.cz>
  17. */
  18. class ContactsFacade {
  19. /** @var CharacterContactsRepository */
  20. private $characterContactsRepository;
  21. /** @var ContactLabelsRepository */
  22. private $labelsRepository;
  23. /** @var ApiKeysRepository */
  24. private $apiKeysRepository;
  25. /** @var CharactersRepository */
  26. private $charactersRepository;
  27. /** @var Crest */
  28. private $crest;
  29. /** @var CorporationContactsRepository */
  30. private $corporationContactsRepository;
  31. /** @var AllianceContactsRepository */
  32. private $allianceContactsRepository;
  33. /** @var CorporationsRepository */
  34. private $corporationsRepository;
  35. /** @var AlliancesRepository */
  36. private $alliancesRepository;
  37. /** @var XmlApi */
  38. private $xmlApi;
  39. /** @var CharactersFacade */
  40. private $charactersFacade;
  41. /** @var ContactsService */
  42. private $contactsService;
  43. public function __construct(
  44. ApiKeysRepository $apiKeysRepository,
  45. AlliancesRepository $alliancesRepository,
  46. Crest $crest,
  47. CorporationsRepository $corporationsRepository,
  48. CharactersRepository $charactersRepository,
  49. CharactersFacade $charactersFacade,
  50. CharacterContactsRepository $characterContactsRepository,
  51. CorporationContactsRepository $corporationContactsRepository,
  52. AllianceContactsRepository $allianceContactsRepository,
  53. ContactLabelsRepository $labelsRepository,
  54. ContactsService $contactsService,
  55. XmlApi $xmlApi
  56. ) {
  57. $this->characterContactsRepository = $characterContactsRepository;
  58. $this->labelsRepository = $labelsRepository;
  59. $this->apiKeysRepository = $apiKeysRepository;
  60. $this->charactersRepository = $charactersRepository;
  61. $this->crest = $crest;
  62. $this->corporationContactsRepository = $corporationContactsRepository;
  63. $this->allianceContactsRepository = $allianceContactsRepository;
  64. $this->corporationsRepository = $corporationsRepository;
  65. $this->alliancesRepository = $alliancesRepository;
  66. $this->xmlApi = $xmlApi;
  67. $this->charactersFacade = $charactersFacade;
  68. $this->contactsService = $contactsService;
  69. }
  70. public function getContacts(User $owner, ApiKey $apiKey, int $characterId) :Character {
  71. /** @var Character $character */
  72. $character = $this->charactersRepository->getById($characterId);
  73. if (!$character) {
  74. throw new BadRequestException();
  75. }
  76. if ($owner !== $apiKey->owner) {
  77. throw new ForbiddenRequestException();
  78. }
  79. $contactData = $this->xmlApi->getContactList($apiKey, $character->id);
  80. $character->isDownloaded = true;
  81. $this->charactersRepository->persistAndFlush($character);
  82. $labels = $this->labelsRepository->createNew($character, $contactData['contactLabels']);
  83. $contacts = $this->characterContactsRepository->createNew($character, $labels, $contactData['contactList']);
  84. $this->createCharacterContacts($contacts);
  85. // nechci kontakty pokud je corpa NPC
  86. if (!$character->corporation->isNpc) {
  87. $contacts = $this->corporationContactsRepository->createNew($character->corporation, $contactData['corporateContactList']);
  88. $this->createCharacterContacts($contacts);
  89. }
  90. if ($character->corporation->alliance) {
  91. $contacts = $this->allianceContactsRepository->createNew($character->corporation->alliance, $contactData['allianceContactList']);
  92. $this->createCharacterContacts($contacts);
  93. }
  94. return $character;
  95. }
  96. public function copyContacts(Character $from, Character $to) {
  97. $filteredContacts = $this->contactsService->filterContacts(
  98. $from->contacts,
  99. $from->corporation->contacts,
  100. $from->corporation->alliance->contacts
  101. );
  102. // foreach ($from->contacts as $contact) {
  103. // if ($contact->type === Contact::TYPE_CHARACTER) {
  104. // $this->crest->addContact($to, $contact);
  105. // break;
  106. // }
  107. // }
  108. }
  109. /**
  110. * @param CharacterContact[]|CorporationContact[]|AllianceContact[] $contacts
  111. */
  112. private function createCharacterContacts($contacts) {
  113. foreach ($contacts as $contact) {
  114. switch ($contact->type) {
  115. case Contact::TYPE_CHARACTER:
  116. if (!$this->charactersRepository->getById($contact->subjectId)) {
  117. $this->charactersRepository->createNewStub($contact->subjectId, $contact->subjectName);
  118. }
  119. break;
  120. case Contact::TYPE_CORPORATION:
  121. if (!$this->corporationsRepository->getById($contact->subjectId)) {
  122. $this->corporationsRepository->createNewStub($contact->subjectId, $contact->subjectName);
  123. }
  124. break;
  125. case Contact::TYPE_ALLIANCE:
  126. if (!$this->alliancesRepository->getById($contact->subjectId)) {
  127. $this->alliancesRepository->createNewStub($contact->subjectId, $contact->subjectName);
  128. }
  129. }
  130. }
  131. }
  132. }