public function setOptions($config) { if (!waRequest::post()) { return $config; } $options = waRequest::post('options'); if (!is_array($options)) { return $config; } $fields_unsorted = waContactFields::getAll(); $config['fields'] = array(); $cfvm = new waContactFieldValuesModel(); foreach ($options as $fld_id => $opts) { if ($fld_id == '%FID%') { continue; } $fld_id_no_ext = explode('.', $fld_id, 2); $field_ext = empty($fld_id_no_ext[1]) ? '' : '.' . $fld_id_no_ext[1]; $fld_id_no_ext = $fld_id_no_ext[0]; $field = ifset($fields_unsorted[$fld_id_no_ext]); // Special treatment for subfields of shipping and billing address: // copy actual settings from address field. if ($field_ext && $fld_id_no_ext == 'address') { $existing_subfields = $field->getFields(); // Sanity check if (!is_array($opts) || empty($options['address']) || !is_array($options['address']) || empty($options['address']['fields']) || !is_array($options['address']['fields'])) { continue; } // Copy settings if subfield is turned on, or required, or is hidden $fields = array(); foreach ($options['address']['fields'] as $sf_id => $sf_opts) { if (!empty($sf_opts['required']) || !empty($sf_opts['_disabled']) && !empty($sf_opts['_default_value_enabled']) && empty($sf_opts['_deleted']) || !empty($opts['fields'][$sf_id])) { if (!$field_ext || isset($existing_subfields[$sf_id])) { $fields[$sf_id] = $sf_opts; } } } $opts['fields'] = $fields; } if ($field) { if (!empty($opts['_deleted'])) { waContactFields::deleteField($field); unset($fields_unsorted[$fld_id_no_ext]); continue; } $new_field = false; } else { $field = self::createFromOpts($opts, $fields_unsorted); if (!$field || $field instanceof waContactCompositeField) { continue; } // For conditional fields, update ID in database: replace temporary id with new one if ($field instanceof waContactConditionalField) { $cfvm->changeField($fld_id_no_ext, $field->getId()); } $fld_id = $field->getId() . $field_ext; $new_field = true; } list($local_opts, $sys_opts) = self::tidyOpts($field, $fld_id, $opts); if ($local_opts === null || $sys_opts === null) { continue; } // Write to system config. if (!$field_ext) { $field->setParameters($sys_opts); $fields_unsorted[$fld_id_no_ext] = $field; if ($new_field) { waContactFields::createField($field); waContactFields::enableField($field, 'person'); $fields_unsorted[$field->getId()] = $field; } else { if ($sys_opts) { waContactFields::updateField($field); waContactFields::enableField($field, 'person'); } } } $config['fields'][$fld_id] = $local_opts; } // Delete garbage from wa_contact_field_values $cfvm->exec("DELETE FROM wa_contact_field_values WHERE field RLIKE '__[0-9]+\$'"); return $config; }
$field = waContactFields::get('sex', 'all'); if ($field && $field->getParameter('storage') == 'info') { $p = $field->getParameter('localized_names'); if (isset($p['en_US']) && $p['en_US'] == 'Sex') { $p['en_US'] = 'Gender'; $field->setParameter('localized_names', $p); waContactFields::updateField($field); } } // make enable main fields for person $main_fields = array('name', 'title', 'firstname', 'middlename', 'lastname', 'jobtitle', 'company'); $sort = 0; foreach ($main_fields as $f_id) { $field = waContactFields::get($f_id, 'all'); if ($field) { waContactFields::updateField($field); waContactFields::enableField($field, 'person', $sort); $sort += 1; } } // make enable main fields for company $main_fields = array('name', 'company'); $sort = 0; foreach ($main_fields as $f_id) { $field = waContactFields::get($f_id, 'all'); if ($field) { waContactFields::updateField($field); waContactFields::enableField($field, 'company', $sort); $sort += 1; } }