/** * @param Contact $contact * @param ContactAddress $address * @return array * @throws BadRequestHttpException */ protected function update(Contact $contact, ContactAddress $address) { $responseData = array('saved' => false, 'contact' => $contact); if ($this->getRequest()->getMethod() == 'GET' && !$address->getId()) { $address->setFirstName($contact->getFirstName()); $address->setLastName($contact->getLastName()); if (!$contact->getAddresses()->count()) { $address->setPrimary(true); } } if ($address->getOwner() && $address->getOwner()->getId() != $contact->getId()) { throw new BadRequestHttpException('Address must belong to contact'); } elseif (!$address->getOwner()) { $contact->addAddress($address); } // Update contact's modification date when an address is changed $contact->setUpdatedAt(new \DateTime('now', new \DateTimeZone('UTC'))); if ($this->get('orocrm_contact.form.handler.contact_address')->process($address)) { $this->getDoctrine()->getManager()->flush(); $responseData['entity'] = $address; $responseData['saved'] = true; } $responseData['form'] = $this->get('orocrm_contact.contact_address.form')->createView(); return $responseData; }
/** * @Route("/info/{id}", name="orocrm_contact_info", requirements={"id"="\d+"}) * * @Template * @AclAncestor("orocrm_contact_view") */ public function infoAction(Contact $contact) { if (!$this->getRequest()->get('_wid')) { return $this->redirect($this->get('router')->generate('orocrm_contact_view', ['id' => $contact->getId()])); } return array('entity' => $contact); }
/** * @param Contact $contact * @return array */ protected function createContactView(Contact $contact) { return ['id' => $contact->getId(), 'url' => $this->router->generate('orocrm_contact_view', array('id' => $contact->getId())), 'fullName' => $this->entityNameResolver->getName($contact), 'avatar' => null, 'permissions' => array('view' => $this->securityFacade->isGranted('VIEW', $contact))]; }
/** * @param Contact $contact * * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ protected function fixRequest($contact) { $formAlias = $this->getFormAlias(); $contactData = $this->getRequest()->request->get($formAlias); if (array_key_exists('accounts', $contactData)) { $accounts = $contactData['accounts']; $appendAccounts = array_key_exists('appendAccounts', $contactData) ? $contactData['appendAccounts'] : array(); $removeAccounts = array_key_exists('removeAccounts', $contactData) ? $contactData['removeAccounts'] : array(); if ($contact->getId()) { foreach ($contact->getAccounts() as $account) { if (!in_array($account->getId(), $accounts)) { $removeAccounts[] = $account->getId(); } } } $contactData['appendAccounts'] = array_merge($appendAccounts, $accounts); $contactData['removeAccounts'] = $removeAccounts; unset($contactData['accounts']); $this->getRequest()->request->set($formAlias, $contactData); } // @todo: just a temporary workaround until new API is implemented // - convert country name to country code (as result we accept both the code and the name) // also it will be good to accept ISO3 code in future, need to be discussed with product owners // - convert region name to region code (as result we accept the combined code, code and name) // - move region name to region_text field for unknown region if (array_key_exists('addresses', $contactData)) { foreach ($contactData['addresses'] as &$address) { if (!empty($address['country'])) { $countryCode = $this->getCountryCodeByName($address['country']); if (!empty($countryCode)) { $address['country'] = $countryCode; } } if (!empty($address['region']) && !$this->isRegionCombinedCodeByCode($address['region'])) { if (!empty($address['country'])) { $regionId = $this->getRegionCombinedCodeByCode($address['country'], $address['region']); if (!empty($regionId)) { $address['region'] = $regionId; } else { $regionId = $this->getRegionCombinedCodeByName($address['country'], $address['region']); if (!empty($regionId)) { $address['region'] = $regionId; } else { $address['region_text'] = $address['region']; unset($address['region']); } } } else { $address['region_text'] = $address['region']; unset($address['region']); } } } $this->getRequest()->request->set($formAlias, $contactData); } }
/** * @param Contact $contactEntity * @param EntityManager $em */ protected function scheduleSync(Contact $contactEntity, EntityManager $em) { if ($contactEntity->getId() && !isset($this->processIds[$contactEntity->getId()])) { $magentoCustomer = $em->getRepository('OroCRMMagentoBundle:Customer')->findOneBy(['contact' => $contactEntity]); if ($this->isTwoWaySyncEnabled($magentoCustomer)) { $this->processIds[$contactEntity->getId()] = $magentoCustomer; } } }
/** * @param Contact $entity * * @SuppressWarnings(PHPMD.NPathComplexity) */ protected function fixRequestAttributes($entity) { $formAlias = $this->getFormAlias(); $contactData = $this->getRequest()->request->get($formAlias); if (array_key_exists('accounts', $contactData)) { $accounts = $contactData['accounts']; $appendAccounts = array_key_exists('appendAccounts', $contactData) ? $contactData['appendAccounts'] : array(); $removeAccounts = array_key_exists('removeAccounts', $contactData) ? $contactData['removeAccounts'] : array(); if ($entity->getId()) { foreach ($entity->getAccounts() as $account) { if (!in_array($account->getId(), $accounts)) { $removeAccounts[] = $account->getId(); } } } $contactData['appendAccounts'] = array_merge($appendAccounts, $accounts); $contactData['removeAccounts'] = $removeAccounts; unset($contactData['accounts']); $this->getRequest()->request->set($formAlias, $contactData); } // @todo: just a temporary workaround until new API is implemented // - convert country name to country code (as result we accept both the code and the name) // also it will be good to accept ISO3 code in future, need to be discussed with product owners // - convert region name to region code (as result we accept the combined code, code and name) // - move region name to region_text field for unknown region if (array_key_exists('addresses', $contactData)) { foreach ($contactData['addresses'] as &$address) { AddressApiUtils::fixAddress($address, $this->get('doctrine.orm.entity_manager')); } $this->getRequest()->request->set($formAlias, $contactData); } parent::fixRequestAttributes($entity); }