$field = $this->dynamic_fields[$f->{DynamicField::PK}];
if ($field->hasFixedValues()) {
$choices = $field->getValues();
- $f['text_val'] = $choices[$f->field_val];
+ $f->text_val = $choices[$f->field_val];
}
$this->current_values[$f->{DynamicField::PK}][] = array_filter(
(array)$f,
{
if (!isset($this->current_values[$field])) {
$this->current_values[$field][] = [
- 'item_id' => '',
+ 'item_id' => $this->item_id,
'field_form' => $this->dynamic_fields[$field]->getForm(),
- 'val_index' => '',
+ 'val_index' => 1,
'field_val' => '',
'is_new' => true
];
public function setValue($item, $field, $index, $value)
{
$idx = $index - 1;
- if (isset($this->current_values[$field][$idx])) {
- $this->current_values[$field][$idx]['field_val'] = $value;
- } else {
- $this->current_values[$field][$idx] = [
- 'item_id' => $item,
- 'field_form' => $this->dynamic_fields[$field]->getForm(),
- 'val_index' => $index,
- 'field_val' => $value,
- 'is_new' => true
- ];
+ $input = [
+ 'item_id' => $item,
+ 'field_form' => $this->dynamic_fields[$field]->getForm(),
+ 'val_index' => $index,
+ 'field_val' => $value,
+ ];
+
+ if (!isset($this->current_values[$field][$idx])) {
+ $input['is_new'] = true;
}
+
+ $this->current_values[$field][$idx] = $input;
}
/**
'val_index' => $value['val_index'],
'where1' => $value['item_id'],
'where2' => $value['field_id'],
- 'where3' => $value['field_form'],
- 'where4' => $value['old_val_index'] ?? $value['val_index']
+ 'where3' => $value['field_form'], //:val_index
+ 'where4' => $value['old_val_index'] ?? $value['val_index'] //:old_val_index
];
$this->getUpdateStatement()->execute($params);
$this->has_changed = true;
'item_id' => ':item_id',
'field_id' => ':field_id',
'field_form' => ':field_form',
- 'val_index' => ':val_index'
+ 'val_index' => ':old_val_index'
]);
$this->update_stmt = $this->zdb->sql->prepareStatementForSqlObject($update);
}
trait DynamicsTrait
{
+ /** @var string */
+ protected $name_pattern = 'info_field_';
+
+ /** @var array */
protected $dynamics;
/**
foreach ($post as $key => $value) {
// if the field is enabled, check it
if (!isset($disabled[$key])) {
- if (substr($key, 0, 11) == 'info_field_') {
- list($field_id, $val_index) = explode('_', substr($key, 11));
- if (
- is_numeric($field_id)
- && is_numeric($val_index)
- ) {
- if ($fields[$field_id]->isRequired() && (trim($value) === '' || $value == null)) {
- $this->errors[] = str_replace(
- '%field',
- $fields[$field_id]->getName(),
- _T('Missing required field %field')
- );
- } else {
- if ($fields[$field_id] instanceof File) {
- //delete checkbox
- $filename = sprintf(
- 'member_%d_field_%d_value_%d',
- $this->id,
- $field_id,
- $val_index
- );
- unlink(GALETTE_FILES_PATH . $filename);
- $this->dynamics->setValue($this->id, $field_id, $val_index, '');
- } else {
- if ($fields[$field_id] instanceof Date && !empty(trim($value))) {
- //check date format
- try {
- $d = \DateTime::createFromFormat(__("Y-m-d"), $value);
- if ($d === false) {
- //try with non localized date
- $d = \DateTime::createFromFormat("Y-m-d", $value);
- if ($d === false) {
- throw new \Exception('Incorrect format');
- }
- }
- } catch (\Exception $e) {
- $valid = false;
- Analog::log(
- 'Wrong date format. field: ' . $field_id .
- ', value: ' . $value . ', expected fmt: ' .
- __("Y-m-d") . ' | ' . $e->getMessage(),
- Analog::INFO
- );
- $this->errors[] = str_replace(
- array(
- '%date_format',
- '%field'
- ),
- array(
- __("Y-m-d"),
- $fields[$field_id]->getName()
- ),
- _T("- Wrong date format (%date_format) for %field!")
- );
+ if (substr($key, 0, 11) != $this->name_pattern) {
+ continue;
+ }
+
+ list($field_id, $val_index) = explode('_', str_replace($this->name_pattern, '', $key));
+ if (!is_numeric($field_id) || !is_numeric($val_index)) {
+ continue;
+ }
+
+ if ($fields[$field_id]->isRequired() && (trim($value) === '' || $value == null)) {
+ $this->errors[] = str_replace(
+ '%field',
+ $fields[$field_id]->getName(),
+ _T('Missing required field %field')
+ );
+ } else {
+ if ($fields[$field_id] instanceof File) {
+ //delete checkbox
+ $filename = sprintf(
+ 'member_%d_field_%d_value_%d',
+ $this->id,
+ $field_id,
+ $val_index
+ );
+ unlink(GALETTE_FILES_PATH . $filename);
+ $this->dynamics->setValue($this->id, $field_id, $val_index, '');
+ } else {
+ if ($fields[$field_id] instanceof Date && !empty(trim($value))) {
+ //check date format
+ try {
+ $d = \DateTime::createFromFormat(__("Y-m-d"), $value);
+ if ($d === false) {
+ //try with non localized date
+ $d = \DateTime::createFromFormat("Y-m-d", $value);
+ if ($d === false) {
+ throw new \Exception('Incorrect format');
}
}
- //actual field value
- if ($value !== null && trim($value) !== '') {
- $this->dynamics->setValue($this->id, $field_id, $val_index, $value);
- } else {
- $this->dynamics->unsetValue($this->id, $field_id, $val_index);
- }
+ } catch (\Exception $e) {
+ $valid = false;
+ Analog::log(
+ 'Wrong date format. field: ' . $field_id .
+ ', value: ' . $value . ', expected fmt: ' .
+ __("Y-m-d") . ' | ' . $e->getMessage(),
+ Analog::INFO
+ );
+ $this->errors[] = str_replace(
+ array(
+ '%date_format',
+ '%field'
+ ),
+ array(
+ __("Y-m-d"),
+ $fields[$field_id]->getName()
+ ),
+ _T("- Wrong date format (%date_format) for %field!")
+ );
}
}
+ //actual field value
+ if ($value !== null && trim($value) !== '') {
+ $this->dynamics->setValue($this->id, $field_id, $val_index, $value);
+ } else {
+ $this->dynamics->unsetValue($this->id, $field_id, $val_index);
+ }
}
}
}
continue;
}
- if (substr($key, 0, 11) != 'info_field_') {
+ if (substr($key, 0, 11) != $this->name_pattern) {
continue;
}
- list($field_id, $val_index) = explode('_', substr($key, 11));
+ list($field_id, $val_index) = explode('_', str_replace($this->name_pattern, '', $key));
if (!is_numeric($field_id) || !is_numeric($val_index)) {
continue;
}
{
$dfields = [];
foreach ($values as $key => $value) {
- $dfields[str_replace($prefix, 'info_field_', $key)] = $value;
+ $dfields[str_replace($prefix, $this->name_pattern, $key)] = $value;
}
return $this->dynamicsCheck($dfields);
}