/** * Добавляет запись в словарь. * Первый параметр - системное имя словаря * Второй параметр - массив указанной выше структуры, с данными и полями записи * * @param $dic_slug * @param $array * @return DicVal */ public static function inject($dic_slug, $array, $dicval_id = NULL) { #Helper::d($dic_slug); #Helper::d($array); ## Find DIC $dic = Dic::where('slug', $dic_slug)->first(); if (!is_object($dic)) { return false; } ## Create DICVAL $dicval = new DicVal(); $dicval->dic_id = $dic->id; $dicval->dic_id = $dic->id; $dicval->slug = @$array['slug'] ?: NULL; $dicval->name = @$array['name'] ?: NULL; $dicval->save(); ## CREATE FIELDS if (@isset($array['fields']) && is_array($array['fields']) && count($array['fields'])) { $fields = new Collection(); foreach ($array['fields'] as $key => $value) { $dicval_field = new DicFieldVal(); $dicval_field->dicval_id = $dicval->id; $dicval_field->language = is_array($value) && isset($value['language']) ? @$value['language'] : NULL; $dicval_field->key = $key; $dicval_field->value = is_array($value) ? @$value['value'] : $value; $dicval_field->save(); $fields[] = $dicval_field; } $dicval->relations['fields'] = $fields; } ## CREATE FIELDS_I18N if (@isset($array['fields_i18n']) && is_array($array['fields_i18n']) && count($array['fields_i18n'])) { $fields_i18n = new Collection(); foreach ($array['fields_i18n'] as $locale_sign => $fields) { if (!@is_array($fields) || !@count($fields)) { continue; } $temp = new Collection(); foreach ($fields as $key => $value) { $dicval_field_i18n = new DicFieldVal(); $dicval_field_i18n->dicval_id = $dicval->id; $dicval_field_i18n->language = $locale_sign; $dicval_field_i18n->key = $key; $dicval_field_i18n->value = is_array($value) ? @$value['value'] : $value; $dicval_field_i18n->save(); $temp[] = $dicval_field_i18n; } $fields_i18n[$locale_sign] = $temp; } $dicval->relations['fields_i18n'] = $fields_i18n; } ## CREATE TEXT FIELDS if (@isset($array['textfields']) && is_array($array['textfields']) && count($array['textfields'])) { $textfields = new Collection(); foreach ($array['textfields'] as $key => $value) { $dicval_textfield = new DicTextFieldVal(); $dicval_textfield->dicval_id = $dicval->id; $dicval_textfield->language = is_array($value) && isset($value['language']) ? @$value['language'] : NULL; $dicval_textfield->key = $key; $dicval_textfield->value = is_array($value) ? @$value['value'] : $value; $dicval_textfield->save(); $textfields[] = $dicval_textfield; } $dicval->relations['textfields'] = $textfields; } ## CREATE TEXT FIELDS_I18N if (@isset($array['textfields_i18n']) && is_array($array['textfields_i18n']) && count($array['textfields_i18n'])) { $textfields_i18n = new Collection(); foreach ($array['textfields_i18n'] as $locale_sign => $textfields) { if (!@is_array($textfields) || !@count($textfields)) { continue; } $temp = new Collection(); foreach ($textfields as $key => $value) { $dicval_textfield_i18n = new DicTextFieldVal(); $dicval_textfield_i18n->dicval_id = $dicval->id; $dicval_textfield_i18n->language = $locale_sign; $dicval_textfield_i18n->key = $key; $dicval_textfield_i18n->value = is_array($value) ? @$value['value'] : $value; $dicval_textfield_i18n->save(); $temp[] = $dicval_textfield_i18n; } $textfields_i18n[$locale_sign] = $temp; } $dicval->relations['textfields_i18n'] = $textfields_i18n; } ## CREATE META if (@isset($array['meta']) && is_array($array['meta']) && count($array['meta'])) { $metas = new Collection(); foreach ($array['meta'] as $locale_sign => $fields) { if (!@is_array($fields) || !@count($fields)) { continue; } $temp = new Collection(); foreach ($fields as $key => $value) { $dicval_meta = new DicValMeta(); $dicval_meta->dicval_id = $dicval->id; $dicval_meta->language = $locale_sign; $dicval_meta->name = is_array($value) ? @$value['name'] : $value; $dicval_meta->save(); $temp[] = $dicval_meta; } $metas[$locale_sign] = $temp; } $dicval->relations['metas'] = $metas; } ## CREATE RELATED DICVALS if (isset($array['related_dicvals']) && is_array($array['related_dicvals']) && count($array['related_dicvals'])) { $temp = new Collection(); foreach ($array['related_dicvals'] as $dicval_parent_filed => $related_dicvals) { if (!@is_array($related_dicvals) || !@count($related_dicvals)) { continue; } #Helper::d($related_dicvals); foreach ($related_dicvals as $related_dicval) { $dicval_rel = new DicValRel(); $dicval_rel->dicval_parent_id = $dicval->id; $dicval_rel->dicval_child_id = @$related_dicval['dicval_child_id']; $dicval_rel->dicval_parent_dic_id = @$related_dicval['dicval_parent_dic_id']; $dicval_rel->dicval_child_dic_id = @$related_dicval['dicval_child_dic_id']; $dicval_rel->dicval_parent_field = $dicval_parent_filed; $dicval_rel->save(); $temp[] = $dicval_rel; } } $dicval->relations['related_dicvals'] = $temp; } ## RETURN EXTRACTED DICVAL return $dicval; }