Untitled
unknown
php
2 years ago
9.4 kB
5
Indexable
<?php namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use App\Models\Frontend; use App\Models\Language; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Facades\File; class LanguageController extends Controller { public function langManage($lang = false) { $pageTitle = 'Language Manager'; $languages = Language::orderBy('is_default', 'desc')->get(); return view('admin.language.lang', compact('pageTitle', 'languages')); } public function langStore(Request $request) { $request->validate([ 'name' => 'required|string|max:40', 'code' => 'required|string|max:40|unique:languages', ]); $data = file_get_contents(resource_path('lang/') . 'en.json'); $json_file = strtolower($request->code) . '.json'; $path = resource_path('lang/') . $json_file; File::put($path, $data); $language = new Language(); if ($request->is_default) { $lang = $language->where('is_default', 1)->first(); if ($lang) { $lang->is_default = 0; $lang->save(); } } $language->name = $request->name; $language->code = strtolower($request->code); $language->is_default = $request->is_default ? 1 : 0; $language->save(); $notify[] = ['success', 'Language added successfully']; return back()->withNotify($notify); } public function langUpdate(Request $request, $id) { $request->validate([ 'name' => 'required', ]); $language = Language::findOrFail($id); if (!$request->is_default) { $defaultLang = Language::where('is_default', 1)->where('id', '!=', $id)->exists(); if (!$defaultLang) { $notify[] = ['error', 'You\'ve to set another language as default before unset this']; return back()->withNotify($notify); } } $language->name = $request->name; $language->is_default = $request->is_default ? 1 : 0; $language->save(); if ($request->is_default) { $lang = Language::where('is_default', 1)->where('id', '!=', $language->id)->first(); if ($lang) { $lang->is_default = 0; $lang->save(); } } $notify[] = ['success', 'Update successfully']; return back()->withNotify($notify); } public function langDelete($id) { $lang = Language::find($id); fileManager()->removeFile(resource_path('lang/') . $lang->code . '.json'); $lang->delete(); $notify[] = ['success', 'Language deleted successfully']; return back()->withNotify($notify); } public function langEdit($id) { $lang = Language::find($id); $pageTitle = "Update " . $lang->name . " Keywords"; $json = file_get_contents(resource_path('lang/') . $lang->code . '.json'); $list_lang = Language::all(); if (empty($json)) { $notify[] = ['error', 'File not found']; return back()->withNotify($notify); } $json = json_decode($json, true); $perPage = getPaginate(); $currentPage = request()->get('page', 1); $offset = ($currentPage - 1) * $perPage; $items = array_slice($json, $offset, $perPage, true); $json = new LengthAwarePaginator( $items, count($json), $perPage, $currentPage, ['path' => url()->current()] ); return view('admin.language.edit_lang', compact('pageTitle', 'json', 'lang', 'list_lang')); } public function langImport(Request $request) { $tolang = Language::find($request->toLangid); if ($request->id != 999) { $fromLang = Language::find($request->id); $json = file_get_contents(resource_path('lang/') . $fromLang->code . '.json'); $keywords = json_decode($json, true); } else { $text = $this->getKeys(); $keywords = explode("\n", $text); } $items = file_get_contents(resource_path('lang/') . $tolang->code . '.json'); foreach ($keywords as $keyword) { $keyword = trim($keyword); if (!array_key_exists($keyword, json_decode($items, true))) { $newArr[$keyword] = $keyword; } } if (isset($newArr)) { $itemData = json_decode($items, true); $result = array_merge($itemData, $newArr); file_put_contents(resource_path('lang/') . $tolang->code . '.json', json_encode($result)); } return 'success'; } public function storeLanguageJson(Request $request, $id) { $lang = Language::find($id); $this->validate($request, [ 'key' => 'required', 'value' => 'required', ]); $items = file_get_contents(resource_path('lang/') . $lang->code . '.json'); $reqKey = trim($request->key); if (array_key_exists($reqKey, json_decode($items, true))) { $notify[] = ['error', "Key already exist"]; return back()->withNotify($notify); } else { $newArr[$reqKey] = trim($request->value); $itemData = json_decode($items, true); $result = array_merge($itemData, $newArr); file_put_contents(resource_path('lang/') . $lang->code . '.json', json_encode($result)); $notify[] = ['success', "Language key added successfully"]; return back()->withNotify($notify); } } public function deleteLanguageJson(Request $request, $id) { $this->validate($request, [ 'key' => 'required', 'value' => 'required', ]); $key = $request->key; $lang = Language::find($id); $data = file_get_contents(resource_path('lang/') . $lang->code . '.json'); $json_arr = json_decode($data, true); unset($json_arr[$key]); file_put_contents(resource_path('lang/') . $lang->code . '.json', json_encode($json_arr)); $notify[] = ['success', "Language key deleted successfully"]; return back()->withNotify($notify); } public function updateLanguageJson(Request $request, $id) { $this->validate($request, [ 'key' => 'required', 'value' => 'required', ]); $key = trim($request->key); $reqValue = $request->value; $lang = Language::find($id); $data = file_get_contents(resource_path('lang/') . $lang->code . '.json'); $json_arr = json_decode($data, true); $json_arr[$key] = $reqValue; file_put_contents(resource_path('lang/') . $lang->code . '.json', json_encode($json_arr)); $notify[] = ['success', 'Language key updated successfully']; return back()->withNotify($notify); } public function getKeys() { $langKeys = []; $dirname = resource_path('views'); foreach ($this->getAllFiles($dirname) as $file) { $langKeys = array_merge($langKeys, $this->getLangKeys($file)); } $frontendData = Frontend::where('data_keys', '!=', 'seo.data')->get(); foreach ($frontendData as $frontend) { foreach ($frontend->data_values as $key => $frontendValue) { if ($key != 'has_image' && !isImage($frontendValue) && !isHtml($frontendValue)) { $langKeys[] = $frontendValue; } } } $langKeys = array_unique($langKeys); $keyText = ''; foreach ($langKeys as $langKey) { $keyText .= "$langKey \n"; } return rtrim($keyText, "\n"); return response()->json($langKeys); } private function getAllFiles($dir) { $root = $dir; $iter = new \RecursiveIteratorIterator ( new \RecursiveDirectoryIterator ($root, \RecursiveDirectoryIterator::SKIP_DOTS), \RecursiveIteratorIterator::SELF_FIRST, \RecursiveIteratorIterator::CATCH_GET_CHILD ); $paths = array($root); foreach ($iter as $path => $dir) { if (!$dir->isDir() && substr($dir, -4) == '.php') { $files[] = $path; } } return $files; } private function getLangKeys($path) { $code = file_get_contents($path); $exp = explode("')", $code); $finalcode = ''; foreach ($exp as $dd) { $finalcode .= $dd . "') "; } preg_match_all("/@lang\(\\'(.*)\\'\)/", $finalcode, $keys); return $this->fixMultiIssue($keys[1]); } private function fixMultiIssue($arr) { $res = array(); foreach ($arr as $keys) { $exp = explode("')", $keys); foreach ($exp as $child) { if (!strpos($child, '@lang') && !strpos($child, '}') && !strpos($child, '<') && !strpos($child, '{') && !strpos($child, '>')) { $res[] = $child; } } } return $res; } }
Editor is loading...
Leave a Comment