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;
 }
Exemple #5
0
<?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')));