public function postAjaxCheckDicvalSlugUnique() { $input = Input::all(); #Helper::dd(Input::all()); $json_request = array('status' => FALSE, 'responseText' => ''); $dic_id = Input::get('_dic_id'); $dic = Dic::find($dic_id); /** * Если словарь не найден - сообщаем об ошибке */ if (!is_object($dic)) { $json_request['responseText'] = 'Вы пытаетесь добавить запись в несуществующую сущность'; return Response::json($json_request, 200); } $id = Input::get('_id'); $slug = trim(Input::get('slug')); $name = Input::get('name'); $element = new DicVal(); if ($id) { $element = DicVal::find($id); } if (!is_object($element)) { $element = new DicVal(); } switch ((int) $dic->make_slug_from_name) { case 1: $input['slug'] = Helper::translit($input['name']); break; case 2: if (!$dic->hide_slug && !@$input['slug']) { $input['slug'] = Helper::translit($input['name']); } break; case 3: if ($dic->hide_slug && $element->slug == '') { $input['slug'] = Helper::translit($input['name']); } break; case 4: $input['slug'] = Helper::translit($input['name'], false); break; case 5: if (!$dic->hide_slug && !@$input['slug']) { $input['slug'] = Helper::translit($input['name'], false); } break; case 6: if ($dic->hide_slug && $element->slug == '') { $input['slug'] = Helper::translit($input['name'], false); } break; case 7: $input['slug'] = $input['name']; break; case 8: if (!$dic->hide_slug && !@$input['slug']) { $input['slug'] = $input['name']; } break; case 9: if ($dic->hide_slug && $element->slug == '') { $input['slug'] = $input['name']; } break; } $new_slug = $input['slug']; $json_request['new_slug'] = $new_slug; #Helper::d($new_slug); #Helper::tad($input); /** * Ищем записи в текущем словаре с новым системным именем */ $dicval = DicVal::where('slug', $new_slug)->where('dic_id', $dic_id); /** * Если мы редактируем существующую запись - исключаем ее ID из проверки */ if ($element->id) { $dicval = $dicval->where('id', '!=', $element->id); } $dicval = $dicval->first(); #Helper::ta($dicval); if (is_object($dicval)) { $json_request['responseText'] = 'Запись с таким системным именем уже существует'; $json_request['also_exists'] = $dicval->id; } else { $json_request['status'] = TRUE; } return Response::json($json_request, 200); }
/** * !!! NEED TO ADD RELATED_DICVALS SUPPORT !!! * * @param $dic_slug * @param $dicval_id * @param $array * * @return bool|\Illuminate\Support\Collection|null|static */ public static function refresh($dic_slug, $dicval_id, $array) { #Helper::d($dic_slug); #Helper::d($array); ## Find DIC $dic = Dic::where('slug', $dic_slug)->first(); if (!is_object($dic)) { return false; } ## Find dicval $dicval = DicVal::find($dicval_id); if (!is_object($dicval)) { return false; } if ($dicval->dic_id != $dic->id) { $dicval->dic_id = $dic->id; } if (isset($array['slug'])) { $dicval->slug = $array['slug']; } if (isset($array['name'])) { $dicval->name = $array['name']; } $dicval->save(); ## UPDATE FIELDS if (@isset($array['fields']) && is_array($array['fields']) && count($array['fields'])) { #$fields = new Collection(); foreach ($array['fields'] as $key => $value) { $dicval_field_search_array = array('dicval_id' => $dicval->id, 'key' => $key); if (is_array($value) && isset($value['language'])) { $dicval_field_search_array['language'] = @$value['language'] ?: NULL; } $dicval_field = DicFieldVal::firstOrNew($dicval_field_search_array); $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_search_array = array('dicval_id' => $dicval->id, 'language' => $locale_sign, 'key' => $key); $dicval_field = DicFieldVal::firstOrNew($dicval_field_search_array); $dicval_field->value = is_array($value) ? @$value['value'] : $value; $dicval_field->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_field_search_array = array('dicval_id' => $dicval->id, 'key' => $key); if (is_array($value) && isset($value['language'])) { $dicval_field_search_array['language'] = @$value['language'] ?: NULL; } $dicval_field = DicTextFieldVal::firstOrNew($dicval_field_search_array); $dicval_field->value = is_array($value) ? @$value['value'] : $value; $dicval_field->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_field_search_array = array('dicval_id' => $dicval->id, 'language' => $locale_sign, 'key' => $key); $dicval_field = DicTextFieldVal::firstOrNew($dicval_field_search_array); $dicval_field->value = is_array($value) ? @$value['value'] : $value; $dicval_field->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_field_search_array = array('dicval_id' => $dicval->id, 'language' => $locale_sign); $dicval_field = DicValMeta::firstOrNew($dicval_field_search_array); $dicval_field->name = is_array($value) ? @$value['name'] : $value; $dicval_field->save(); #$temp[] = $dicval_meta; } #$metas[$locale_sign] = $temp; } #$dicval->relations['metas'] = $metas; } $dicval->load('allfields', 'alltextfields', 'metas'); ## RETURN DICVAL return $dicval; }
$dics = Dic::modifyKeys($dics, 'slug'); $lists = Dic::makeLists($dics, 'values', 'name', 'id'); #Helper::tad($lists); #Helper::tad($dics); if (isset($lists['course']) && count($lists['course'])) { foreach ($lists['course'] as $id => $name) { $lists['course'][$id] = $name . ' (' . $dics['course'][$id]->name . ')'; } } #Helper::tad($lists); */ /** * Добавляем доп. элементы в меню, в данном случае: выпадающие поля для организации фильтрации записей по их свойствам */ #$menus[] = Helper::getDicValMenuDropdown('course_id', 'Все курсы', $lists['course'], $dic); #$menus[] = Helper::getDicValMenuDropdown('format_id', 'Все форматы', $lists['format'], $dic); if (null != ($cid = Input::get('filter.fields.course_id')) && null !== ($course = DicVal::find($cid))) { #$course->load('fields'); #$menus[] = array('raw' => '<strong>' . $course->name . '</strong>'); $url = action('entity.edit', array('dic_id' => 'course', $course->id)); $menus[] = ['link' => $url, 'title' => '<i class="fa fa-arrow-circle-left"></i> К курсу', 'class' => 'btn btn-default']; $url = action('entity.index', array('dic_id' => $dic->slug)) . '?' . urlencode('filter[fields][course_id]') . '=' . $course->id; $menus[] = ['link' => $url, 'title' => $course->name, 'class' => 'btn btn-default']; } return $menus; }, 'hooks' => array('before_index_view' => function ($dic, &$dicvals) { #$dicvals = DicLib::loadImages($dicvals, ['image']); }, 'after_store_update_destroy_order' => function ($dic = NULL, $dicval = NULL) { Cache::forget('dic_' . $dic->slug); }), 'disable_listing_without_filter' => ['fields' => ['course_id'], 'message' => 'Сначала выберите курс.']);