/** * Get required fields by address type * * @param string $atype Address type code * * @return array */ public function getRequiredFieldsByType($atype) { $list = parent::getRequiredFieldsByType($atype); if ('express_checkout_return' === \XLite::getController()->getAction()) { $list = array_diff($list, array('phone')); } return $list; }
/** * This object will be used if another one is not passed * * @return \XLite\Model\Address */ protected function getDefaultModelObject() { if (!isset($this->address)) { $addressId = $this->getAddressId(); if (isset($addressId)) { $this->address = \XLite\Core\Database::getRepo('XLite\\Model\\Address')->find($this->getAddressId()); } else { $this->address = new \XLite\Model\Address(); $profileId = $this->getProfileId(); if (0 < intval($profileId)) { $profile = \XLite\Core\Database::getRepo('XLite\\Model\\Profile')->find($profileId); if (isset($profile)) { $this->address->setProfile($profile); } } } } return $this->address; }
protected function prepareAddressData(array $data) { unset($data['save_in_book']); $requiredFields = \XLite\Core\Database::getRepo('XLite\\Model\\AddressField')->getShippingRequiredFields(); foreach ($requiredFields as $fieldName) { if (!isset($data[$fieldName]) && \XLite\Model\Address::getDefaultFieldValue($fieldName)) { $data[$fieldName] = \XLite\Model\Address::getDefaultFieldValue($fieldName); } } return $data; }
/** * Return Country field value. if no country defined we should use '' value * * @param \XLite\Model\Address $address Address model (could be shipping or billing address) * * @return string */ protected function getCountryField($address) { return $address->getCountry() ? $address->getCountry()->getCode() : ''; }
/** * getDefaultValue * * @return string */ protected function getDefaultValue() { $country = \XLite\Model\Address::getDefaultFieldValue('country'); return $country ? $country->getCode() : ''; }
/** * Check - if country code is selected option in "SELECT" tag. * * @param string $countryCode Code of country to check. * * @return boolean */ protected function isSelectedCountry($countryCode) { $country = $this->getParam(static::PARAM_COUNTRY); if ('' == $country) { $countryObj = \XLite\Model\Address::getDefaultFieldValue('country'); $country = $countryObj ? $countryObj->getCode() : ''; } return $country === $countryCode; }
/** * Format name for request. (firstname + lastname from shipping/billing address) * * @param \XLite\Model\Address $address Address model (could be shipping or billing address) * * @return string */ protected function getFormattedName($address) { return $address->getFirstname() . ' ' . $address->getLastname(); }
/** * Get field value * * @param string $fieldName Field name * @param boolean $processValue Process value flag OPTIONAL * * @return string */ public function getFieldValue($fieldName, $processValue = false) { $result = ''; $address = $this->getAddressInfo(); if ($this->getCart() && $this->getCart()->getProfile() && 'email' == $fieldName) { $result = $this->getCart()->getProfile()->getLogin(); } elseif ($this->getCart() && $this->getCart()->getProfile() && 'password' == $fieldName) { $result = \XLite\Core\Session::getInstance()->createProfilePassword; } elseif (isset($address)) { $methodName = 'get' . \XLite\Core\Converter::getInstance()->convertToCamelCase($fieldName); // $methodName assembled from 'get' + camelized $fieldName $result = $address->{$methodName}(); if ($result && false !== $processValue) { switch ($fieldName) { case 'state_id': $result = $address->getCountry()->hasStates() ? $address->getState()->getState() : null; break; case 'custom_state': $result = $address->getCountry()->hasStates() ? null : $result; break; case 'country_code': $result = $address->getCountry()->getCountry(); break; case 'type': $result = $address->getTypeName(); break; default: } } } elseif (in_array($fieldName, array('country_code', 'state_id', 'custom_state', 'zipcode'))) { $result = \XLite\Model\Address::getDefaultFieldPlainValue($fieldName); } return $result; }
/** * Get default customer address * * @return array */ public static function getDefaultAddress() { $config = \XLite\Core\Config::getInstance()->Shipping; $state = \XLite\Model\Address::getDefaultFieldValue('state'); $country = \XLite\Model\Address::getDefaultFieldValue('country'); return array('address' => $config->anonymous_address, 'city' => \XLite\Model\Address::getDefaultFieldValue('city'), 'state' => $state ? $state->getCode() : '', 'custom_state' => \XLite\Model\Address::getDefaultFieldValue('custom_state'), 'zipcode' => \XLite\Model\Address::getDefaultFieldValue('zipcode'), 'country' => $country ? $country->getCode() : '', 'type' => $config->anonymous_address_type); }
/** * Get country * * @return XLite\Model\Country */ public function getCountry() { $result = $this->country; if (!$result) { $countryField = \XLite\Core\Database::getRepo('XLite\\Model\\AddressField')->findOneBy(array('serviceName' => 'country_code', 'enabled' => false)); if ($countryField) { $result = \XLite\Model\Address::getDefaultFieldValue('country'); } } return $result; }
/** * Check - address is billing address or not * * @param \XLite\Model\Address $address Address * * @return boolean */ protected function isBilling(\XLite\Model\Address $address) { return $this->getOrder()->getProfile()->getBillingAddress() && $address->getAddressId() == $this->getOrder()->getProfile()->getBillingAddress()->getAddressId(); }
/** * Get state * * @return \XLite\Model\State */ protected function getState() { $address = $this->getAddress(); $state = null; // From getDestinationAddress() if ($address && isset($address['state']) && $address['state']) { $state = \XLite\Core\Database::getRepo('XLite\\Model\\State')->find($address['state']); } elseif ($this->getCart()->getProfile() && $this->getCart()->getProfile()->getShippingAddress() && $this->getCart()->getProfile()->getShippingAddress()->getState()) { // From shipping address $state = $this->getCart()->getProfile()->getShippingAddress()->getState(); } elseif (!$address && \XLite\Model\Address::getDefaultFieldValue('custom_state')) { // From config $state = new \XLite\Model\State(); $state->setState(\XLite\Model\Address::getDefaultFieldValue('custom_state')); } return $state; }
/** * Prepare the specific data format for address * * @param \XLite\Model\Address $address Address * * @return array */ public static function prepareAddressData($address) { return $address ? array('address' => $address->getStreet(), 'city' => $address->getCity(), 'state' => $address->getState()->getStateId(), 'custom_state' => $address->getCustomState(), 'zipcode' => $address->getZipcode(), 'country' => $address->getCountry() ? $address->getCountry()->getCode() : '', 'type' => $address->getType() ?: \XLite\Core\Config::getInstance()->Shipping->anonymous_address_type) : null; }
/** * Return specific data for address entry. Helper. * * @param \XLite\Model\Address $address Address * @param boolean $showEmpty Show empty fields OPTIONAL * * @return array */ protected function getAddressSectionData(\XLite\Model\Address $address, $showEmpty = false) { $result = array(); $hasStates = $address->getCountry() ? $address->getCountry()->hasStates() : false; foreach (\XLite\Core\Database::getRepo('XLite\\Model\\AddressField')->findAllEnabled() as $field) { $method = 'get' . \Includes\Utils\Converter::convertToCamelCase($field->getViewGetterName() ?: $field->getServiceName()); $addressFieldValue = $address->{$method}(); $cssFieldName = $field->getCSSFieldName(); switch ($field->getServiceName()) { case 'state_id': $addressFieldValue = $hasStates ? $addressFieldValue : null; if (null === $addressFieldValue && $hasStates) { $addressFieldValue = $address->getCustomState(); } break; case 'custom_state': $addressFieldValue = $hasStates ? null : $address->getCustomState(); $cssFieldName = $hasStates ? $cssFieldName : 'address-state'; break; default: } if ($addressFieldValue || $showEmpty) { $result[$field->getServiceName()] = array('css_class' => $cssFieldName, 'title' => $field->getName(), 'value' => $addressFieldValue); } } return $result; }
/** * Get list item class name * * @param \XLite\Model\Address $address Address * @param integer $i Address position in addresses list * * @return string */ public function getItemClassName(\XLite\Model\Address $address, $i) { $class = 'address-' . $address->getAddressId(); if ($this->isSelectedAddress($address)) { $class .= ' selected'; } if (0 == $i % $this->columnsNumber) { $class .= ' last'; } return $class; }
/** * Sanitize * * @param mixed $data Daa * * @return mixed */ public function sanitize($data) { // Check country if (!isset($data[static::FIELD_COUNTRY]) && !$this->isFieldAvailable(static::FIELD_COUNTRY)) { $data[static::FIELD_COUNTRY] = \XLite\Model\Address::getDefaultFieldValue('country')->getCode(); } // Get country $countryCodeValidator = new \XLite\Core\Validator\Pair\Simple(); $countryCodeValidator->setName(static::FIELD_COUNTRY); $countryCodeValidator->setValidator(new \XLite\Core\Validator\String\ObjectId\Country(true)); $country = $countryCodeValidator->getValidator()->sanitize($data[static::FIELD_COUNTRY]); // Get state if ($country->hasStates()) { $stateValidator = new \XLite\Core\Validator\String\ObjectId\State(true); $state = $stateValidator->sanitize($data[static::FIELD_STATE]); } elseif (!empty($data[static::FIELD_CUSTOM_STATE])) { $state = new \XLite\Model\State(); $state->setState($data[static::FIELD_CUSTOM_STATE]); $state->setCountry($country); $data[static::FIELD_STATE] = $data[static::FIELD_CUSTOM_STATE]; } else { $state = null; } return array('country' => $country, 'state' => $state, static::FIELD_COUNTRY => $data[static::FIELD_COUNTRY], static::FIELD_STATE => $state ? $data[static::FIELD_STATE] : null); }
/** * Get field value * * @param string $fieldName Field name * @param \XLite\Model\Address $address Field name * @param boolean $processValue Process value flag OPTIONAL * * @return string */ public function getFieldValue($fieldName, \XLite\Model\Address $address, $processValue = false) { $result = ''; if (null !== $address) { $methodName = 'get' . \XLite\Core\Converter::getInstance()->convertToCamelCase($fieldName); // $methodName assembled from 'get' + camelized $fieldName $result = $address->{$methodName}(); if ($result && false !== $processValue) { switch ($fieldName) { case 'state_id': $result = $address->getCountry()->hasStates() ? $address->getState()->getState() : null; break; case 'custom_state': $result = $address->getCountry()->hasStates() ? null : $result; break; case 'country_code': $result = $address->getCountry()->getCountry(); break; case 'type': $result = $address->getTypeName(); break; default: } } } return $result; }
/** * Check - address is billing address or not * * @param \XLite\Model\Address $address Address * * @return boolean */ protected function isBilling(\XLite\Model\Address $address) { return $address->getIsBilling(); }
/** * {@inheritDoc} */ public function prepareEntityBeforeCommit($type) { $this->__initializer__ && $this->__initializer__->__invoke($this, 'prepareEntityBeforeCommit', array($type)); return parent::prepareEntityBeforeCommit($type); }
public function testCheckAddress() { // Prepare address and save it in database $origAddress = new \XLite\Model\Address(); $origAddress->map($this->addressFields); $origAddress->setState(\XLite\Core\Database::getRepo('XLite\\Model\\State')->findOneByCountryAndCode('US', 'NY')); $origAddress->setCountry(\XLite\Core\Database::getRepo('XLite\\Model\\Country')->find('US')); $origAddress->setProfile(\XLite\Core\Database::getRepo('XLite\\Model\\Profile')->find(1)); $address = $origAddress->cloneEntity(); $origAddress->create(); // Test: new address should not be created as it is identical $this->assertFalse($address->create(), "Check that address is not created (all fields are identical)"); foreach (\XLite\Model\Address::getAddressFields() as $field) { $address = $origAddress->cloneEntity(); if ('state_id' == $field) { $address->setState(\XLite\Core\Database::getRepo('XLite\\Model\\State')->findOneByCountryAndCode('US', 'CA')); } elseif ('country_code' == $field) { $address->setCountry(\XLite\Core\Database::getRepo('XLite\\Model\\Country')->find('GB')); } elseif ('custom_state' != $field) { $address->map($this->addressFields); $methodName = 'set' . \XLite\Core\Converter::getInstance()->convertToCamelCase($field); $this->assertTrue(method_exists($address, $methodName), "Check if method exists ({$methodName})"); $modifiedField = $this->addressFields[$field] . '2'; $address->{$methodName}($modifiedField); } // Test: new address must be created as one of fields is modified $this->assertTrue($address->create(), "Check if address is created ({$field})"); } }
/** * Change shipping method * @todo: refactor (decompose) * * @return void */ protected function doActionChangeMethod() { $methodId = \XLite\Core\Request::getInstance()->methodId; $cart = $this->getCart(); if (null !== $methodId && $cart->getShippingId() != $methodId) { $cart->setLastShippingId($methodId); $cart->setShippingId($methodId); $address = $this->getCartProfile()->getShippingAddress(); if (!$address) { // Default address $profile = $this->getCartProfile(); $address = new \XLite\Model\Address(); $addr = $this->getAddress(); // Country $c = 'US'; if ($addr && isset($addr['country'])) { $c = $addr['country']; $country = \XLite\Core\Database::getRepo('XLite\\Model\\Country')->find($c); } elseif (\XLite\Model\Address::getDefaultFieldValue('country')) { $country = \XLite\Model\Address::getDefaultFieldValue('country'); } else { $country = \XLite\Core\Database::getRepo('XLite\\Model\\Country')->find($c); } if ($country) { $address->setCountry($country); } // State $state = null; if ($addr && !empty($addr['state'])) { $state = \XLite\Core\Database::getRepo('XLite\\Model\\State')->find($addr['state']); } elseif (!$addr && \XLite\Model\Address::getDefaultFieldValue('state')) { $state = \XLite\Model\Address::getDefaultFieldValue('state'); } if ($state) { $address->setState($state); } // Zip code if (\XLite\Model\Address::getDefaultFieldValue('zipcode')) { $address->setZipcode(\XLite\Model\Address::getDefaultFieldValue('zipcode')); } $address->setProfile($profile); $address->setIsShipping(true); $profile->addAddresses($address); \XLite\Core\Database::getEM()->persist($address); } $this->updateCart(); } $this->valid = true; $this->setSilenceClose(); }