public function execute() { $f = waRequest::param('f'); $fid = waRequest::param('fid'); $parent = waRequest::param('parent'); $css_class = waRequest::param('css_class'); $new_field = false; if (!$f instanceof waContactField) { $new_field = true; $f = new waContactStringField($fid, '', array('app_id' => 'shop')); } $prefix = 'options'; if ($parent) { $prefix .= '[' . $parent . '][fields]'; } static $ftypes = null; if ($ftypes === null) { $ftypes = array('NameSubfield' => _w('Text (input)'), 'Email' => _w('Text (input)'), 'Address' => _w('Address'), 'Text' => _w('Text (textarea)'), 'String' => _w('Text (input)'), 'Select' => _w('Select'), 'Phone' => _w('Text (input)'), 'IM' => _w('Text (input)'), 'Url' => _w('Text (input)'), 'Date' => _w('Date'), 'Composite' => _w('Composite field group'), 'Checkbox' => _w('Checkbox')); } $form = waContactForm::loadConfig(array('_default_value' => $f), array('namespace' => "{$prefix}[{$fid}]")); // Get default value $default_value = null; if (!$new_field && $f->getParameter('_disabled')) { $settings = wa('shop')->getConfig()->getCheckoutSettings(); if (!isset($settings['contactinfo'])) { $settings = wa('shop')->getConfig()->getCheckoutSettings(true); } $fields_config = ifset($settings['contactinfo']['fields'], array()); if ($parent) { if (!empty($fields_config[$parent]['fields'][$fid]['hidden'])) { $default_value = ifset($fields_config[$parent]['fields'][$fid]['value']); } } else { if (!empty($fields_config[$fid]['hidden'])) { $default_value = ifset($fields_config[$fid]['value']); } } if ($default_value !== null) { $form->setValue('_default_value', $default_value); } } $this->view->assign('f', $f); $this->view->assign('fid', $fid); $this->view->assign('form', $form); $this->view->assign('parent', $parent); $this->view->assign('prefix', $prefix); $this->view->assign('uniqid', 'f' . uniqid()); $this->view->assign('new_field', $new_field); $this->view->assign('tr_classes', $css_class); $this->view->assign('default_value', $default_value); $this->view->assign('ftypes', $ftypes); }
public function validate($data, $contact_id = null) { $errors = parent::validate($data, $contact_id); $email_model = new waContactEmailsModel(); $contact_model = new waContactModel(); if ($this->isMulti()) { if (!empty($data[0]) && $contact_id) { $c = $contact_model->getById($contact_id); if (!$c['password']) { return $errors; } $value = $this->format($data[0], 'value'); $id = $email_model->getContactWithPassword($value); if ($id && $id != $contact_id) { $errors[0] = sprintf(_ws('User with the same %s is already registered'), 'email'); } } } else { $value = $this->format($data, 'value'); if ($value) { if ($contact_id) { $c = $contact_model->getById($contact_id); if (!$c['password']) { return $errors; } } $id = $email_model->getContactWithPassword($value); if ($id && $id != $contact_id) { $errors = sprintf(_ws('User with the same %s is already registered'), 'email'); } } } return $errors; }
public function set(waContact $contact, $value, $params = array(), $add = false) { $value = parent::set($contact, $value, $params, $add); $status = wa()->getEnv() == 'frontend' ? 'unconfirmed' : 'unknown'; if ($this->isMulti()) { foreach ($value as $k => $v) { if (!isset($v['status'])) { $value[$k]['status'] = $status; } } } else { if (!isset($v['status'])) { $value['status'] = $status; } } return $value; }
public function format($data, $format = null) { $data = parent::format($data, $format); if ($format && in_array('html', explode(',', $format))) { if ($this->isMulti()) { if (is_array($data)) { $result = htmlspecialchars($data['value']); if (isset($data['ext']) && $data['ext']) { $ext = $data['ext']; if (isset($this->options['ext'][$ext])) { $ext = _ws($this->options['ext'][$ext]); } $result .= ' <em class="hint">' . htmlspecialchars($ext) . '</em>'; } $data = $result; } } else { if (!is_array($data) || isset($data['value'])) { $data = htmlspecialchars(is_array($data) ? $data['value'] : $data); } } } return $data; }
<?php return array(0 => waContactAddressField::__set_state(array('id' => 'address', 'options' => array('multi' => true, 'ext' => array('work' => 'work', 'home' => 'home', 'shipping' => 'shipping', 'billing' => 'billing'), 'storage' => 'data', 'fields' => array('region' => waContactRegionField::__set_state(array('rm' => NULL, 'id' => 'region', 'options' => array('storage' => 'data'), 'name' => array('en_US' => 'State'), '_type' => 'waContactRegionField')), 'city' => waContactStringField::__set_state(array('id' => 'city', 'options' => array('storage' => 'data', 'validators' => waStringValidator::__set_state(array('messages' => array('required' => 'Нужно заполнить', 'invalid' => 'Неверно', 'max_length' => 'Пожалуйста, не более 0 символов', 'min_length' => 'Пожалуйста, не менее 0 символов'), 'options' => array('required' => false, 'storage' => 'data'), 'errors' => array(), '_type' => 'waStringValidator'))), 'name' => array('en_US' => 'City'), '_type' => 'waContactStringField')), 'street' => waContactStringField::__set_state(array('id' => 'street', 'options' => array('storage' => 'data', 'validators' => waStringValidator::__set_state(array('messages' => array('required' => 'Нужно заполнить', 'invalid' => 'Неверно', 'max_length' => 'Пожалуйста, не более 0 символов', 'min_length' => 'Пожалуйста, не менее 0 символов'), 'options' => array('required' => false, 'storage' => 'data'), 'errors' => array(), '_type' => 'waStringValidator'))), 'name' => array('en_US' => 'Street address'), '_type' => 'waContactStringField')), 'zip' => waContactStringField::__set_state(array('id' => 'zip', 'options' => array('storage' => 'data', 'validators' => waStringValidator::__set_state(array('messages' => array('required' => 'Нужно заполнить', 'invalid' => 'Неверно', 'max_length' => 'Пожалуйста, не более 0 символов', 'min_length' => 'Пожалуйста, не менее 0 символов'), 'options' => array('required' => false, 'storage' => 'data'), 'errors' => array(), '_type' => 'waStringValidator'))), 'name' => array('en_US' => 'ZIP'), '_type' => 'waContactStringField')), 'lng' => waContactHiddenField::__set_state(array('id' => 'lng', 'options' => array('storage' => 'data'), 'name' => array('en_US' => 'Longitude'), '_type' => 'waContactHiddenField')), 'lat' => waContactHiddenField::__set_state(array('id' => 'lat', 'options' => array('storage' => 'data'), 'name' => array('en_US' => 'Latitude'), '_type' => 'waContactHiddenField')), 'country' => waContactCountryField::__set_state(array('model' => NULL, 'validate_range' => true, 'id' => 'country', 'options' => array('defaultOption' => 'Select country', 'storage' => 'data', 'formats' => array('value' => waContactCountryFormatter::__set_state(array('_type' => 'waContactCountryFormatter', 'options' => NULL)))), 'name' => array('en_US' => 'Country'), '_type' => 'waContactCountryField'))), 'formats' => array('js' => waContactAddressOneLineFormatter::__set_state(array('_type' => 'waContactAddressOneLineFormatter', 'options' => NULL)), 'forMap' => waContactAddressForMapFormatter::__set_state(array('_type' => 'waContactAddressForMapFormatter', 'options' => NULL))), 'required' => array(), 'allow_self_edit' => false, 'unique' => false), 'name' => array('en_US' => 'Address'), '_type' => 'waContactAddressField')));