Example #1
0
 /**
  * !!! 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);
 }