/** * Сохранение дополнительных полей * документа */ protected function fieldsSave() { if ($this->fields) { $field_count = 0; foreach ($this->fields as $field_id => $field) { if (isset($field['data']) && count($field['data']) && in_array($field['type'], array_keys(Field::getTypes()))) { foreach ($field['data'] as $data_id => $data) { // Перебираем все значения дополнительных полей if (in_array($field['type'], array_keys(ValueNumeric::getTypes()))) { // Числовой тип $item[$field_count] = substr_count($data_id, 'new') ? new ValueNumeric() : ValueNumeric::findOne($data_id); } elseif (in_array($field['type'], array_keys(ValueString::getTypes()))) { // Строковый тип $item[$field_count] = substr_count($data_id, 'new') ? new ValueString() : ValueString::findOne($data_id); } elseif (in_array($field['type'], array_keys(ValueText::getTypes()))) { // Текстовый тип $item[$field_count] = substr_count($data_id, 'new') ? new ValueText() : ValueText::findOne($data_id); } elseif (in_array($field['type'], array_keys(ValueDate::getTypes()))) { // Тип дата $item[$field_count] = substr_count($data_id, 'new') ? new ValueDate() : ValueDate::findOne($data_id); } $item[$field_count]->document_id = $this->id; $item[$field_count]->field_id = $field_id; $item[$field_count]->type = $field['type']; // Преобразуем дату в формат для хранения в БД if ($field['type'] == 7) { if (isset($data['value']) && $data['value'] != '') { $date = new \DateTime($data['value']); $value = $date->format('Y-m-d'); } else { $value = null; } } else { $value = isset($data['value']) ? $data['value'] : null; } $item[$field_count]->value = $value; $item[$field_count]->position = isset($data['position']) ? $data['position'] : null; // Не сохраняем если значение пустое или равно 0 когда тип Флажок if ($item[$field_count]->value == '' || $item[$field_count]->value == 0 && $item[$field_count]->type == 3) { // Удаляем если значение пустое, но оно есть в базе данных if (!$item[$field_count]->isNewrecord) { $item[$field_count]->delete(); } } else { // Сохраняем если значение не пустое $item[$field_count]->save(); } $field_count++; } } } } }