/** * @param Order $order * @param array $data * * @throws ValidationException */ public function validateData(Order $order, array $data) { $result = ValidationResult::create(); $existingID = !empty($data[$this->addresstype . "AddressID"]) ? (int) $data[$this->addresstype . "AddressID"] : 0; if ($existingID) { // If existing address selected, check that it exists in $member->AddressBook if (!Member::currentUserID() || !Member::currentUser()->AddressBook()->byID($existingID)) { $result->error("Invalid address supplied", $this->addresstype . "AddressID"); throw new ValidationException($result); } } else { // Otherwise, require the normal address fields $required = parent::getRequiredFields($order); $addressLabels = singleton('Address')->fieldLabels(false); foreach ($required as $fieldName) { if (empty($data[$fieldName])) { // attempt to get the translated field name $fieldLabel = isset($addressLabels[$fieldName]) ? $addressLabels[$fieldName] : $fieldName; $errorMessage = _t('Form.FIELDISREQUIRED', '{name} is required', array('name' => $fieldLabel)); $result->error($errorMessage, $fieldName); throw new ValidationException($result); } } } }
public function getConstraints(Order $order, $form = null) { $required = parent::getRequiredFields($order); $constraints = []; $namespace = $this->name(); foreach ($required as $requirement) { $constraints[$namespace . '_' . $requirement] = new RequiredIf($namespace . '_' . $this->addresstype . 'ToSameAddress', 'not(:checked)'); } return $constraints; }
public function getConstraints(Order $order, $form = null) { $member = Member::currentUser() ?: $order->Member(); if (!$member || !$member->exists() || !$member->AddressBook()->exists()) { return []; } $required = parent::getRequiredFields($order); $constraints = []; $namespace = $this->name(); foreach ($member->AddressBook() as $address) { foreach ($required as $requirement) { $constraints[$namespace . '_address-' . $address->ID . '[' . $requirement . ']'] = (new RequiredIfStrict($namespace . '_Use', '[value=address-' . $address->ID . ']:checked'))->setMessage(_t('AlternateAddressBookCheckoutComponent.' . $this->addresstype . '-REQUIRED_IF', 'This value is required when ' . strtolower($this->addresstype) . ' to: {address}', ['address' => $address->toString()])); } } if ($this->allowNew) { foreach ($required as $requirement) { $constraints[$namespace . '_new[' . $requirement . ']'] = (new RequiredIfStrict($namespace . '_Use', '[value=new]:checked'))->setMessage(_t('AlternateAddressBookCheckoutComponent.' . $this->addresstype . '-REQUIRED_IF_NEW', 'This value is required when ' . strtolower($this->addresstype) . ' to a new address')); } } return $constraints; }