Current File : /home/getxxhzo/app.genicards.com/app/Http/Controllers/LanguageController.php |
<?php
namespace App\Http\Controllers;
use App\Http\Requests\CreateLanguageRequest;
use App\Http\Requests\UpdateLanguageRequest;
use App\Models\Language;
use App\Models\Setting;
use App\Models\User;
use App\Repositories\LanguageRepository;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\View\Factory;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\File;
use Illuminate\View\View;
use Laracasts\Flash\Flash;
use Symfony\Component\HttpKernel\Exception\UnprocessableEntityHttpException;
class LanguageController extends AppBaseController
{
/** @var LanguageRepository */
private $languageRepository;
public function __construct(LanguageRepository $languageRepo)
{
$this->languageRepository = $languageRepo;
}
/**
* Display a listing of the resource.
*
* @return Factory|View
*/
public function index(): View
{
return view('sadmin.languages.index');
}
public function language(): View
{
return view('sadmin.languages.default-language');
}
public function updateStatus(Language $language): JsonResponse
{
if ($language->iso_code == getSuperAdminSettingValue('default_language')) {
return $this->sendError(__('messages.flash.language_status_default'));
} else {
$language->update([
'status' => !$language->status,
]);
return $this->sendSuccess(__('messages.flash.language_status'));
}
}
/**
* Store a newly created resource in storage.
*/
public function store(CreateLanguageRequest $request): JsonResponse
{
$input = $request->all();
$allLanguagesArr = [];
$languages = File::directories(base_path('lang'));
foreach ($languages as $language) {
$allLanguagesArr[] = substr($language, -2);
}
if (in_array($input['iso_code'], $allLanguagesArr)) {
throw new UnprocessableEntityHttpException($input['iso_code'].' '.__('messages.placeholder.lang_already_exists'));
}
$language = $this->languageRepository->create($input);
if (isset($input['flag']) && ! empty($input['flag'])) {
$language->addMedia($input['flag'])->toMediaCollection(Language::LANGUAGE_PATH,
config('app.media_disc'));
}
$translation = $this->languageRepository->translationFileCreate($language);
Artisan::call('lang:js');
return $this->sendResponse($language, __('messages.placeholder.language_save'));
}
/**
* Show the form for editing the specified resource.
*/
public function edit(Language $language): JsonResponse
{
return $this->sendResponse($language, 'Language retrieved successfully.');
}
/**
* Show the form for editing the specified resource.
*/
public function show(Language $language): JsonResponse
{
return $this->sendResponse($language, 'Language retrieved successfully.');
}
/**
* @param Language $language
*/
public function update(UpdateLanguageRequest $request, $id): JsonResponse
{
$language = Language::whereId($id)->firstOrFail();
$input = $request->all();
$this->languageRepository->updateLanguage($input, $language);
return $this->sendSuccess(__('messages.flash.language_update'));
}
/**
* Remove the specified resource from storage.
*
*
* @throws \Exception
*/
public function destroy(Language $language): JsonResponse
{
if ($language->is_default == true) {
return $this->sendError('Default Language can\'t be deleted.');
}
$usesLang = User::whereIsActive(1)->pluck('language')->toArray();
if (in_array($language->iso_code, $usesLang)) {
return $this->sendError('Uses Language can\'t be deleted.');
}
if ($language->iso_code == getSuperAdminSettingValue('default_language')) {
return $this->sendError('Default Setting Language can\'t be deleted.');
}
$path = base_path('lang/').$language->iso_code;
if (\File::exists($path)) {
\File::deleteDirectory($path);
$language->delete();
} else {
return $this->sendError('Language not deleted.');
}
Artisan::call('lang:js');
return $this->sendSuccess('Language deleted successfully.');
}
/**
* @return Application|Factory|\Illuminate\Contracts\View\View|RedirectResponse
*/
public function showTranslation(Language $language, Request $request)
{
$selectedLang = $request->get('name', $language->iso_code);
$selectedFile = $request->get('file', 'messages.php');
$langExists = $this->languageRepository->checkLanguageExistOrNot($selectedLang);
if (! $langExists) {
return redirect()->back()->withErrors($selectedLang.' language not found.');
}
$fileExists = $this->languageRepository->checkFileExistOrNot($selectedLang, $selectedFile);
if (! $fileExists) {
return redirect()->back()->withErrors($selectedFile.' file not found.');
}
$oldLang = app()->getLocale();
$data = $this->languageRepository->getSubDirectoryFiles($selectedLang, $selectedFile);
$data['id'] = $language->id;
app()->setLocale($oldLang);
return view('sadmin.languages.translation-manager.index', compact('selectedLang', 'selectedFile'))->with($data);
}
public function updateTranslation(Language $language, Request $request): RedirectResponse
{
$lName = $language->iso_code;
$fileName = $request->get('file_name');
$fileExists = $this->languageRepository->checkFileExistOrNot($lName, $fileName);
if (! $fileExists) {
return redirect()->back()->withErrors('File not found.');
}
if (! empty($lName)) {
$result = $request->except(['_token', 'translate_language', 'file_name']);
File::put(base_path('lang/').$lName.'/'.$fileName, '<?php return '.var_export($result, true).'?>');
}
Artisan::call('lang:js');
Flash::success(__('messages.flash.language_update'));
return redirect()->route('languages.translation', $language->id);
}
public function getAllLanguage()
{
$getAllLanguage = Language::where('status', 1)->get();
$currentLanguage = Language::where([
'status' => 1,
'iso_code' => getCurrentLanguageName(),
])->value('iso_code');
if (empty($currentLanguage)) {
$currentLanguage = Language::where('status', 1)->value('iso_code');
}
return $this->sendResponse(['getAllLanguage' => $getAllLanguage, 'currentLanguage' => $currentLanguage],
'language retrieve successfully');
}
}