Esempio n. 1
0
 /**
  * Добавляет запись в словарь.
  * Первый параметр - системное имя словаря
  * Второй параметр - массив указанной выше структуры, с данными и полями записи
  *
  * @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;
 }
Esempio n. 2
0
         * Сделать это нужно при первой же необходимости использования 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-запросом