
Added different level of language preference functionaloty which can be set from the new option in top navigation bar Lanaguage preference can be set as * System language (Default for all users) * Session based (User who are not logged in and want to see they system in language of their choice can set their preference in browser session) * User lever (for authenticated users who have updated their language preference, system will change into their selected language when they log into the system)
256 lines
9.9 KiB
PHP
256 lines
9.9 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin\helpdesk;
|
|
|
|
// controllers
|
|
use App;
|
|
// requests
|
|
use App\Http\Controllers\Controller;
|
|
//supports
|
|
use App\Http\Requests;
|
|
use Config;
|
|
//classes
|
|
use File;
|
|
use Illuminate\Support\Collection;
|
|
use Illuminate\Support\Facades\Redirect;
|
|
use Illuminate\Support\Facades\Session;
|
|
use Input;
|
|
use Lang;
|
|
use UnAuth;
|
|
use Validator;
|
|
|
|
/**
|
|
* SlaController.
|
|
*
|
|
* @author Ladybird <info@ladybirdweb.com>
|
|
*/
|
|
class LanguageController extends Controller
|
|
{
|
|
/**
|
|
* Create a new controller instance.
|
|
*
|
|
* @return type void
|
|
*/
|
|
public function __construct()
|
|
{
|
|
$this->middleware('auth');
|
|
$this->middleware('roles');
|
|
}
|
|
|
|
/**
|
|
* Switch language at runtime.
|
|
*
|
|
* @param type "" $lang
|
|
*
|
|
* @return type response
|
|
*/
|
|
public function switchLanguage($lang)
|
|
{
|
|
$changed = UnAuth::changeLanguage($lang);
|
|
if (!$changed) {
|
|
return \Redirect::back()->with('fails', Lang::get('lang.language-error'));
|
|
} else {
|
|
return \Redirect::back();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Shows language page.
|
|
*
|
|
* @return type response
|
|
*/
|
|
public function index()
|
|
{
|
|
return view('themes.default1.admin.helpdesk.language.index');
|
|
}
|
|
|
|
/**
|
|
* Shows Language upload form.
|
|
*
|
|
* @return type response
|
|
*/
|
|
public function getForm()
|
|
{
|
|
return view('themes.default1.admin.helpdesk.language.create');
|
|
}
|
|
|
|
/**
|
|
* Provide language datatable to language page.
|
|
*
|
|
* @return type
|
|
*/
|
|
public function getLanguages()
|
|
{
|
|
$path = base_path('resources/lang');
|
|
$values = scandir($path); //Extracts names of directories present in lang directory
|
|
$values = array_slice($values, 2); // skips array element $value[0] = '.' & $value[1] = '..'
|
|
$sysLanguage = \Cache::get('language');
|
|
return \Datatable::collection(new Collection($values))
|
|
->addColumn('language', function ($model) {
|
|
if ($model == Config::get('app.fallback_locale')) {
|
|
return Config::get('languages.'.$model).' ('.Lang::get('lang.default').')';
|
|
} else {
|
|
return Config::get('languages.'.$model);
|
|
}
|
|
})
|
|
->addColumn('id', function ($model) {
|
|
return $model;
|
|
})
|
|
->addColumn('status', function ($model) use ($sysLanguage){
|
|
if ($sysLanguage === $model) {
|
|
return "<span style='color:green'>".Lang::trans('lang.active').'</span>';
|
|
} else {
|
|
return "<span style='color:red'>".Lang::trans('lang.inactive').'</span>';
|
|
}
|
|
})
|
|
->addColumn('Action', function ($model) use ($sysLanguage) {
|
|
if ($model === $sysLanguage) {
|
|
return "<a href='change-language/".$model."'><input type='button' class='btn btn-info btn-xs btn-flat' disabled value='".Lang::trans('lang.disable')."'/></a>
|
|
<a href='change-language/".$model."' class='btn btn-danger btn-xs btn-flat' disabled><i class='fa fa-trash' style='color:black;'> </i> ".Lang::trans('lang.delete').'</a>';
|
|
} else {
|
|
return "<a href='change-language/".$model."'><input type='button' class='btn btn-info btn-xs btn-flat' value='".Lang::trans('lang.enable')."'/></a>
|
|
<a href='delete-language/".$model."' class='btn btn-danger btn-xs btn-flat'><i class='fa fa-trash' style='color:black;'> </i> ".Lang::trans('lang.delete').'</a>';
|
|
}
|
|
})
|
|
->searchColumns('language', 'id')
|
|
->make();
|
|
}
|
|
|
|
/**
|
|
* handle language file uploading.
|
|
*
|
|
* @return response
|
|
*/
|
|
public function postForm()
|
|
{
|
|
try {
|
|
// getting all of the post data
|
|
$file = [
|
|
'File' => Input::file('File'),
|
|
'language-name' => Input::input('language-name'),
|
|
'iso-code' => Input::input('iso-code'),
|
|
];
|
|
|
|
// setting up rules
|
|
$rules = [
|
|
'File' => 'required|mimes:zip|max:30000',
|
|
'language-name' => 'required',
|
|
'iso-code' => 'required|max:2',
|
|
]; // and for max size
|
|
// doing the validation, passing post data, rules and the messages
|
|
$validator = Validator::make($file, $rules);
|
|
if ($validator->fails()) {
|
|
|
|
// send back to the page with the input data and errors
|
|
return Redirect::back()->withInput()->withErrors($validator);
|
|
} else {
|
|
|
|
//Checking if package already exists or not in lang folder
|
|
$path = base_path('resources/lang');
|
|
if (in_array(strtolower(Input::get('iso-code')), scandir($path))) {
|
|
|
|
//sending back with error message
|
|
Session::flash('fails', Lang::get('lang.package_exist'));
|
|
Session::flash('link', 'change-language/'.strtolower(Input::get('iso-code')));
|
|
|
|
return Redirect::back()->withInput();
|
|
} elseif (!array_key_exists(strtolower(Input::get('iso-code')), Config::get('languages'))) {//Checking Valid ISO code form Languages.php
|
|
//sending back with error message
|
|
Session::flash('fails', Lang::get('lang.iso-code-error'));
|
|
|
|
return Redirect::back()->withInput();
|
|
} else {
|
|
|
|
// checking file is valid.
|
|
if (Input::file('File')->isValid()) {
|
|
$name = Input::file('File')->getClientOriginalName(); //uploaded file's original name
|
|
$destinationPath = base_path('public/uploads/'); // defining uploading path
|
|
$extractpath = base_path('resources/lang').'/'.strtolower(Input::get('iso-code')); //defining extracting path
|
|
mkdir($extractpath); //creating directroy for extracting uploadd file
|
|
//mkdir($destinationPath);
|
|
Input::file('File')->move($destinationPath, $name); // uploading file to given path
|
|
\Zipper::make($destinationPath.'/'.$name)->extractTo($extractpath); //extracting file to give path
|
|
//check if Zip extract foldercontains any subfolder
|
|
$directories = File::directories($extractpath);
|
|
//$directories = glob($extractpath. '/*' , GLOB_ONLYDIR);
|
|
if (!empty($directories)) { //if extract folder contains subfolder
|
|
$success = File::deleteDirectory($extractpath); //remove extracted folder and it's subfolder from lang
|
|
//$success2 = File::delete($destinationPath.'/'.$name);
|
|
if ($success) {
|
|
//sending back with error message
|
|
Session::flash('fails', Lang::get('lang.zipp-error'));
|
|
Session::flash('link2', 'http://www.ladybirdweb.com/support/show/how-to-translate-faveo-into-multiple-languages');
|
|
|
|
return Redirect::back()->withInput();
|
|
}
|
|
} else {
|
|
// sending back with success message
|
|
Session::flash('success', Lang::get('lang.upload-success'));
|
|
Session::flash('link', 'change-language/'.strtolower(Input::get('iso-code')));
|
|
|
|
return Redirect::route('LanguageController');
|
|
}
|
|
} else {
|
|
// sending back with error message.
|
|
Session::flash('fails', Lang::get('lang.file-error'));
|
|
|
|
return Redirect::route('form');
|
|
}
|
|
}
|
|
}
|
|
} catch (\Exception $e) {
|
|
Session::flash('fails', $e->getMessage());
|
|
Redirect::back()->withInput();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* allow user to download language template file.
|
|
*
|
|
* @return type
|
|
*/
|
|
public function download()
|
|
{
|
|
$path = 'downloads'.DIRECTORY_SEPARATOR.'en.zip';
|
|
$file_path = public_path($path);
|
|
|
|
return response()->download($file_path);
|
|
}
|
|
|
|
/**
|
|
* This function is used to delete languages.
|
|
*
|
|
* @param type $lang
|
|
*
|
|
* @return type response
|
|
*/
|
|
public function deleteLanguage($lang)
|
|
{
|
|
if ($lang !== App::getLocale()) {
|
|
if ($lang !== Config::get('app.fallback_locale')) {
|
|
$deletePath = base_path('resources/lang').'/'.$lang; //define file path to delete
|
|
$success = File::deleteDirectory($deletePath); //remove extracted folder and it's subfolder from lang
|
|
if ($success) {
|
|
//sending back with success message
|
|
Session::flash('success', Lang::get('lang.delete-success'));
|
|
|
|
return Redirect::back();
|
|
} else {
|
|
//sending back with error message
|
|
Session::flash('fails', Lang::get('lang.lang-doesnot-exist'));
|
|
|
|
return Redirect::back();
|
|
}
|
|
} else {
|
|
Session::flash('fails', Lang::get('lang.lang-fallback-lang'));
|
|
|
|
return redirect('languages');
|
|
}
|
|
} else {
|
|
Session::flash('fails', Lang::get('lang.active-lang-error'));
|
|
|
|
return redirect('languages');
|
|
}
|
|
}
|
|
}
|