Exemplo n.º 1
0
 /**
  * {@inheritdoc}
  *
  * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  * @SuppressWarnings(PHPMD.NPathComplexity)
  */
 public function renderArray($addressAttributes, $format = null)
 {
     switch ($this->getType()->getCode()) {
         case 'html':
             $dataFormat = ElementFactory::OUTPUT_FORMAT_HTML;
             break;
         case 'pdf':
             $dataFormat = ElementFactory::OUTPUT_FORMAT_PDF;
             break;
         case 'oneline':
             $dataFormat = ElementFactory::OUTPUT_FORMAT_ONELINE;
             break;
         default:
             $dataFormat = ElementFactory::OUTPUT_FORMAT_TEXT;
             break;
     }
     $attributesMetadata = $this->_metadataService->getAllAddressAttributeMetadata();
     $data = array();
     foreach ($attributesMetadata as $attributeMetadata) {
         if (!$attributeMetadata->isVisible()) {
             continue;
         }
         $attributeCode = $attributeMetadata->getAttributeCode();
         if ($attributeCode == 'country_id' && isset($addressAttributes['country_id'])) {
             $data['country'] = $this->_countryFactory->create()->loadByCode($addressAttributes['country_id'])->getName();
         } elseif ($attributeCode == 'region' && isset($addressAttributes['region'])) {
             $data['region'] = __($addressAttributes['region']);
         } elseif (isset($addressAttributes[$attributeCode])) {
             $value = $addressAttributes[$attributeCode];
             $dataModel = $this->_elementFactory->create($attributeMetadata, $value, 'customer_address');
             $value = $dataModel->outputValue($dataFormat);
             if ($attributeMetadata->getFrontendInput() == 'multiline') {
                 $values = $dataModel->outputValue(ElementFactory::OUTPUT_FORMAT_ARRAY);
                 // explode lines
                 foreach ($values as $k => $v) {
                     $key = sprintf('%s%d', $attributeCode, $k + 1);
                     $data[$key] = $v;
                 }
             }
             $data[$attributeCode] = $value;
         }
     }
     if ($this->getType()->getEscapeHtml()) {
         foreach ($data as $key => $value) {
             $data[$key] = $this->escapeHtml($value);
         }
     }
     $format = !is_null($format) ? $format : $this->getFormatArray($addressAttributes);
     return $this->filterManager->template($format, array('variables' => $data));
 }
Exemplo n.º 2
0
 /**
  * Make address Data Object out of an address model
  *
  * @param AbstractAddress $addressModel
  * @param int $defaultBillingId
  * @param int $defaultShippingId
  * @return Address
  */
 public function createAddressFromModel(AbstractAddress $addressModel, $defaultBillingId, $defaultShippingId)
 {
     $addressId = $addressModel->getId();
     $attributes = $this->_metadataService->getAllAddressAttributeMetadata();
     $addressData = array();
     foreach ($attributes as $attribute) {
         $code = $attribute->getAttributeCode();
         if (!is_null($addressModel->getData($code))) {
             $addressData[$code] = $addressModel->getData($code);
         }
     }
     $isDefaultBilling = $addressModel->getData('is_default_billing') === null && intval($addressId) ? $addressId === $defaultBillingId : $addressModel->getData('is_default_billing');
     $isDefaultShipping = $addressModel->getData('is_default_shipping') === null && intval($addressId) ? $addressId === $defaultShippingId : $addressModel->getData('is_default_shipping');
     $this->_addressBuilder->populateWithArray(array_merge($addressData, array(Address::KEY_STREET => $addressModel->getStreet(), Address::KEY_DEFAULT_BILLING => $isDefaultBilling, Address::KEY_DEFAULT_SHIPPING => $isDefaultShipping, Address::KEY_REGION => array(Region::KEY_REGION => $addressModel->getRegion(), Region::KEY_REGION_ID => $addressModel->getRegionId(), Region::KEY_REGION_CODE => $addressModel->getRegionCode()))));
     if ($addressId) {
         $this->_addressBuilder->setId($addressId);
     }
     if ($addressModel->getCustomerId() || $addressModel->getParentId()) {
         $customerId = $addressModel->getCustomerId() ?: $addressModel->getParentId();
         $this->_addressBuilder->setCustomerId($customerId);
     }
     $addressDataObject = $this->_addressBuilder->create();
     return $addressDataObject;
 }
Exemplo n.º 3
0
 /**
  * Initialize form object
  *
  * @return $this
  *
  * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  * @SuppressWarnings(PHPMD.NPathComplexity)
  * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  */
 public function initForm()
 {
     $customerData = $this->_backendSession->getCustomerData();
     /** @var \Magento\Framework\Data\Form $form */
     $form = $this->_formFactory->create();
     $fieldset = $form->addFieldset('address_fieldset', array('legend' => __("Edit Customer's Address")));
     $account = $customerData['account'];
     $this->_addressBuilder->populateWithArray(array());
     if (!empty($account) && isset($account['store_id'])) {
         $this->_addressBuilder->setCountryId($this->_coreData->getDefaultCountry($this->_storeManager->getStore($account['store_id'])));
     } else {
         $this->_addressBuilder->setCountryId($this->_coreData->getDefaultCountry());
     }
     $address = $this->_addressBuilder->create();
     $addressForm = $this->_metadataFormFactory->create('customer_address', 'adminhtml_customer_address', AddressConverter::toFlatArray($address));
     $attributes = $addressForm->getAttributes();
     if (isset($attributes['street'])) {
         if ($attributes['street']->getMultilineCount() <= 0) {
             $attributes['street'] = $this->_attributeMetadataBuilder->populate($attributes['street'])->setMultilineCount(self::DEFAULT_STREET_LINES_COUNT)->create();
         }
     }
     foreach ($attributes as $key => $attribute) {
         $attributes[$key] = $this->_attributeMetadataBuilder->populate($attribute)->setFrontendLabel(__($attribute->getFrontendLabel()))->setVisible(false)->create();
     }
     $this->_setFieldset($attributes, $fieldset);
     $regionElement = $form->getElement('region');
     if ($regionElement) {
         $regionElement->setRenderer($this->_regionFactory->create());
     }
     $regionElement = $form->getElement('region_id');
     if ($regionElement) {
         $regionElement->setNoDisplay(true);
     }
     $country = $form->getElement('country_id');
     if ($country) {
         $country->addClass('countries');
     }
     if ($this->isReadonly()) {
         foreach ($this->_metadataService->getAllAddressAttributeMetadata() as $attribute) {
             $element = $form->getElement($attribute->getAttributeCode());
             if ($element) {
                 $element->setReadonly(true, true);
             }
         }
     }
     $customerStoreId = null;
     if (!empty($account) && isset($account['id']) && isset($account['website_id'])) {
         $customerStoreId = $this->_storeManager->getWebsite($account['website_id'])->getDefaultStore()->getId();
     }
     $prefixElement = $form->getElement('prefix');
     if ($prefixElement) {
         $prefixOptions = $this->_customerHelper->getNamePrefixOptions($customerStoreId);
         if (!empty($prefixOptions)) {
             $fieldset->removeField($prefixElement->getId());
             $prefixField = $fieldset->addField($prefixElement->getId(), 'select', $prefixElement->getData(), '^');
             $prefixField->setValues($prefixOptions);
         }
     }
     $suffixElement = $form->getElement('suffix');
     if ($suffixElement) {
         $suffixOptions = $this->_customerHelper->getNameSuffixOptions($customerStoreId);
         if (!empty($suffixOptions)) {
             $fieldset->removeField($suffixElement->getId());
             $suffixField = $fieldset->addField($suffixElement->getId(), 'select', $suffixElement->getData(), $form->getElement('lastname')->getId());
             $suffixField->setValues($suffixOptions);
         }
     }
     $this->assign('customer', $this->_customerBuilder->populateWithArray($account)->create());
     $addressCollection = array();
     foreach ($customerData['address'] as $key => $addressData) {
         $addressCollection[$key] = $this->_addressBuilder->populateWithArray($addressData)->create();
     }
     $this->assign('addressCollection', $addressCollection);
     $form->setValues(AddressConverter::toFlatArray($address));
     $this->setForm($form);
     return $this;
 }