예제 #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;
 }