findById() public method

public findById ( $id )
Exemplo n.º 1
0
 /**
  * Creates a new contact for the given data.
  *
  * @param array $data
  * @param int|null $id
  * @param bool $patch
  * @param bool $flush
  *
  * @return Contact
  *
  * @throws EntityNotFoundException
  */
 public function save($data, $id = null, $patch = false, $flush = true)
 {
     /*
      * TODO: https://github.com/sulu-io/sulu/pull/1171
      * This method needs to be refactored since in the first
      * iteration the logic was just moved from the Controller to this class due
      * to better reusability.
      */
     $firstName = $this->getProperty($data, 'firstName');
     $lastName = $this->getProperty($data, 'lastName');
     $avatar = $this->getProperty($data, 'avatar');
     if ($id) {
         /** @var Contact $contact */
         $contact = $this->contactRepository->findById($id);
         if (!$contact) {
             throw new EntityNotFoundException($this->contactRepository->getClassName(), $id);
         }
         if (!$patch || $this->getProperty($data, 'account')) {
             $this->setMainAccount($contact, $data);
         }
         if (!$patch || $this->getProperty($data, 'emails')) {
             $this->processEmails($contact, $this->getProperty($data, 'emails', []));
         }
         if (!$patch || $this->getProperty($data, 'phones')) {
             $this->processPhones($contact, $this->getProperty($data, 'phones', []));
         }
         if (!$patch || $this->getProperty($data, 'addresses')) {
             $this->processAddresses($contact, $this->getProperty($data, 'addresses', []));
         }
         if (!$patch || $this->getProperty($data, 'notes')) {
             $this->processNotes($contact, $this->getProperty($data, 'notes', []));
         }
         if (!$patch || $this->getProperty($data, 'faxes')) {
             $this->processFaxes($contact, $this->getProperty($data, 'faxes', []));
         }
         if (!$patch || $this->getProperty($data, 'tags')) {
             $this->processTags($contact, $this->getProperty($data, 'tags', []));
         }
         if (!$patch || $this->getProperty($data, 'urls')) {
             $this->processUrls($contact, $this->getProperty($data, 'urls', []));
         }
         if (!$patch || $this->getProperty($data, 'categories')) {
             $this->processCategories($contact, $this->getProperty($data, 'categories', []));
         }
         if (!$patch || $this->getProperty($data, 'bankAccounts')) {
             $this->processBankAccounts($contact, $this->getProperty($data, 'bankAccounts', []));
         }
     } else {
         $contact = $this->contactRepository->createNew();
     }
     if (!$patch || $firstName !== null) {
         $contact->setFirstName($firstName);
     }
     if (!$patch || $lastName !== null) {
         $contact->setLastName($lastName);
     }
     if (!$patch || $avatar !== null) {
         $this->setAvatar($contact, $avatar);
     }
     // Set title relation on contact
     $this->setTitleOnContact($contact, $this->getProperty($data, 'title'));
     $formOfAddress = $this->getProperty($data, 'formOfAddress');
     if (!is_null($formOfAddress) && is_array($formOfAddress) && array_key_exists('id', $formOfAddress)) {
         $contact->setFormOfAddress($formOfAddress['id']);
     }
     $salutation = $this->getProperty($data, 'salutation');
     if (!empty($salutation)) {
         $contact->setSalutation($salutation);
     }
     $birthday = $this->getProperty($data, 'birthday');
     if (!empty($birthday)) {
         $contact->setBirthday(new DateTime($birthday));
     }
     if (!$id) {
         $parentData = $this->getProperty($data, 'account');
         if ($parentData != null && $parentData['id'] != null && $parentData['id'] != 'null' && $parentData['id'] != '') {
             /** @var AccountInterface $parent */
             $parent = $this->accountRepository->findAccountById($parentData['id']);
             if (!$parent) {
                 throw new EntityNotFoundException(self::$accountContactEntityName, $parentData['id']);
             }
             // Set position on contact
             $position = $this->getPosition($this->getProperty($data, 'position'));
             // create new account-contact relation
             $this->createMainAccountContact($contact, $parent, $position);
         }
         // add urls, phones, emails, tags, bankAccounts, notes, addresses,..
         $this->addNewContactRelations($contact, $data);
         $this->processCategories($contact, $this->getProperty($data, 'categories', []));
     }
     $this->em->persist($contact);
     if ($flush) {
         $this->em->flush();
     }
     return $contact;
 }