예제 #1
0
 /**
  * @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;
 }
예제 #2
0
 /**
  * @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);
 }
예제 #3
0
 /**
  * @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))];
 }
예제 #4
0
 /**
  * @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);
     }
 }
예제 #5
0
 /**
  * @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;
         }
     }
 }
예제 #6
0
 /**
  * @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);
 }