/** * !!! 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; }
public function destroy($dic_id, $id, $check_ajax = true) { if ($check_ajax && !Request::ajax()) { App::abort(404); } $dic = Dictionary::where(is_numeric($dic_id) ? 'id' : 'slug', $dic_id)->first(); if (!$this->checkDicPermission($dic)) { App::abort(404); } $this->dicval_permission($dic, 'dicval_delete'); $json_request = array('status' => FALSE, 'responseText' => ''); $element = DicVal::where('id', $id)->with('allfields', 'alltextfields', 'metas', 'seos', 'related_dicvals')->first(); $this->callHook('before_all', $dic); $this->callHook('before_destroy', $dic, $element); if (is_object($element)) { #Helper::dd("UPDATE " . (new DicVal())->getTable() . " SET lft = lft - 1, rgt = rgt - 1 WHERE dic_id = '" . $element->dic_id . "' AND lft > " . $element->rgt . ""); #Helper::tad($element); if (@count($element->allfields)) { #foreach ($element->allfields as $el) # $el->delete(); $temp_ids = Dic::makeLists($element->allfields, false, 'id'); DicFieldVal::whereIn('id', $temp_ids)->delete(); } if (@count($element->alltextfields)) { $temp_ids = Dic::makeLists($element->alltextfields, false, 'id'); DicTextFieldVal::whereIn('id', $temp_ids)->delete(); } if (@count($element->metas)) { #foreach ($element->metas as $el) # $el->delete(); $temp_ids = Dic::makeLists($element->metas, false, 'id'); DicValMeta::whereIn('id', $temp_ids)->delete(); } if (@count($element->seos)) { $temp_ids = Dic::makeLists($element->seos, false, 'id'); Seo::whereIn('id', $temp_ids)->delete(); } if (@count($element->related_dicvals)) { foreach ($element->related_dicvals as $el) { if (is_object($el) && isset($el->pivot) && is_object($el->pivot)) { $el->pivot->delete(); } } } if ((int) $element->rgt > 0) { DB::update(DB::raw("UPDATE " . (new DicVal())->getTable() . " SET lft = lft - 2, rgt = rgt - 2 WHERE dic_id = '" . $element->dic_id . "' AND lft > " . $element->rgt . "")); } $element->delete(); } $this->callHook('after_destroy', $dic, $element); $this->callHook('after_store_update_destroy', $dic, $element); $this->callHook('after_store_update_destroy_order', $dic, $element); $json_request['responseText'] = 'Удалено'; $json_request['status'] = TRUE; return Response::json($json_request, 200); }