/** * Добавляет запись в словарь. * Первый параметр - системное имя словаря * Второй параметр - массив указанной выше структуры, с данными и полями записи * * @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; }
* Сделать это нужно при первой же необходимости использования select-multiple. */ $value = (array) $value; $value = array_flip($value); foreach ($value as $v => $null) { $value[$v] = array('dicval_child_dic' => 'scope'); } $element->related_dicvals()->sync($value); return @count($value); }, 'value_modifier' => function ($value, $element) { $return = is_object($element) && $element->id ? $element->related_dicvals()->get()->lists('id') : ($return = array()); return $return; }), 'basic' => array('no_label' => true, 'title' => 'Чекбокс обычный', 'type' => 'checkbox', 'label_class' => 'normal_checkbox'), 'type_ids' => array('title' => 'Группа чекбоксов', 'type' => 'checkboxes', 'columns' => 2, 'values' => $lists['ontrade_types'], 'handler' => function ($value, $element, $field_name = 'type_ids') use($lists_ids) { $value = DicLib::formatDicValRel($value, $field_name, $element->dic_id, $lists_ids['ontrade_types']); #$element->related_dicvals($field_name)->sync($value); DicValRel::where('dicval_parent_id', $element->id)->where('dicval_parent_field', $field_name)->delete(); if (count($value)) { foreach ($value as $v => $val) { $element->related_dicvals($field_name)->attach($v, $val); } } return @count($value); }, 'value_modifier' => function ($value, $element, $field_name = 'type_ids') { $return = is_object($element) && $element->id ? $element->related_dicvals($field_name)->get()->lists('name', 'id') : ($return = array()); return $return; }), 'promise_id' => array('title' => 'Обещание', 'type' => 'textline', 'view_text' => @$lists['promises'][$dicval->promise_id]), 'map' => array('type' => 'custom', 'content' => View::make('system.views.map_google_block', ['element' => $dicval])->render(), 'scripts' => View::make('system.views.map_google_script', ['element' => $dicval, 'geo_prefix' => '"Россия, Ростов-на-Дону, "', 'default_lat' => '47.25221300', 'default_lng' => '39.69359700', 'default_zoom' => '11'])->render())); }, 'menus' => function ($dic, $dicval = NULL) { $menus = array(); $menus[] = array('raw' => '<br/>'); /** * Предзагружаем словари для дальнейшего использования, одним SQL-запросом