Language update

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)
This commit is contained in:
Manish Verma
2018-08-08 15:37:25 +05:30
parent 1013c89634
commit 3b76605892
11 changed files with 136 additions and 7 deletions

View File

@@ -48,6 +48,7 @@ class Handler extends ExceptionHandler
*/ */
public function report(Exception $e) public function report(Exception $e)
{ {
dd($e);
Bugsnag::setBeforeNotifyFunction(function ($error) { //set bugsnag Bugsnag::setBeforeNotifyFunction(function ($error) { //set bugsnag
return false; return false;
}); });

View File

@@ -84,6 +84,7 @@ class LanguageController extends Controller
$path = base_path('resources/lang'); $path = base_path('resources/lang');
$values = scandir($path); //Extracts names of directories present in lang directory $values = scandir($path); //Extracts names of directories present in lang directory
$values = array_slice($values, 2); // skips array element $value[0] = '.' & $value[1] = '..' $values = array_slice($values, 2); // skips array element $value[0] = '.' & $value[1] = '..'
$sysLanguage = \Cache::get('language');
return \Datatable::collection(new Collection($values)) return \Datatable::collection(new Collection($values))
->addColumn('language', function ($model) { ->addColumn('language', function ($model) {
if ($model == Config::get('app.fallback_locale')) { if ($model == Config::get('app.fallback_locale')) {
@@ -95,15 +96,15 @@ class LanguageController extends Controller
->addColumn('id', function ($model) { ->addColumn('id', function ($model) {
return $model; return $model;
}) })
->addColumn('status', function ($model) { ->addColumn('status', function ($model) use ($sysLanguage){
if (Lang::getLocale() === $model) { if ($sysLanguage === $model) {
return "<span style='color:green'>".Lang::trans('lang.active').'</span>'; return "<span style='color:green'>".Lang::trans('lang.active').'</span>';
} else { } else {
return "<span style='color:red'>".Lang::trans('lang.inactive').'</span>'; return "<span style='color:red'>".Lang::trans('lang.inactive').'</span>';
} }
}) })
->addColumn('Action', function ($model) { ->addColumn('Action', function ($model) use ($sysLanguage) {
if (Lang::getLocale() === $model) { 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> 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>'; <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 { } else {

View File

@@ -19,6 +19,7 @@ use Hash;
// classes // classes
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Lang; use Lang;
use Session;
/** /**
* GuestController. * GuestController.
@@ -415,4 +416,30 @@ class UnAuthController extends Controller
} }
} }
} }
/**
* Function to chnage user language preference
*
* @param string $lang //desired language's iso code
*
* @category function to change system's language
*
* @return response
*/
public static function changeUserLanguage($lang)
{
$path = base_path('resources/lang'); // Path to check available language packages
if (array_key_exists($lang, \Config::get('languages')) && in_array($lang, scandir($path))) {
if (\Auth::check()) {
$id = \Auth::user()->id;
$user = User::find($id);
$user->user_language = $lang;
$user->save();
} else {
Session::put('language', $lang);
}
}
return redirect()->back();
}
} }

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AlterUsersTableAddUserLanguageColumn extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->string('user_language', 10)->default(null)->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropIfExists('user_language');
});
}
}

3
public/lb-faveo/js/languagechanger.js vendored Normal file
View File

@@ -0,0 +1,3 @@
function changeLang(lang) {
location.href = "swtich-language/"+lang;
}

View File

@@ -156,6 +156,20 @@
</li> </li>
</ul> </ul>
</li> </li>
<li class="dropdown">
<?php $src = Lang::getLocale().'.png'; ?>
<a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="true"><img src="{{asset("lb-faveo/flags/$src")}}"></img> &nbsp;<span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
@foreach($langs as $key => $value)
<?php $src = $key.".png"; ?>
<li><a href="#" id="{{$key}}" onclick="changeLang(this.id)"><img src="{{asset("lb-faveo/flags/$src")}}"></img>&nbsp;{{$value[0]}}&nbsp;
@if(Lang::getLocale() == "ar")
&rlm;
@endif
({{$value[1]}})</a></li>
@endforeach
</ul>
</li>
<li class="dropdown user user-menu"> <li class="dropdown user user-menu">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">
@if(Auth::user()) @if(Auth::user())
@@ -443,7 +457,7 @@
<script src="{{asset("lb-faveo/js/tabby.js")}}"></script> <script src="{{asset("lb-faveo/js/tabby.js")}}"></script>
<!-- CK Editor --> <!-- CK Editor -->
<script src="{{asset("lb-faveo/plugins/filebrowser/plugin.js")}}"></script> <script src="{{asset("lb-faveo/plugins/filebrowser/plugin.js")}}"></script>
<script src="{{asset("lb-faveo/js/languagechanger.js")}}" type="text/javascript"></script>
@yield('FooterInclude') @yield('FooterInclude')
</body> </body>
<script> <script>

View File

@@ -56,6 +56,18 @@
<script src="{{asset("lb-faveo/js/jquery2.1.1.min.js")}}" type="text/javascript"></script> <script src="{{asset("lb-faveo/js/jquery2.1.1.min.js")}}" type="text/javascript"></script>
@yield('HeadInclude') @yield('HeadInclude')
<style type="text/css">
#bar {
border-right: 1px solid rgba(204, 204, 204, 0.41);
}
#bar a{
color: #FFF;
}
#bar a:hover, #bar a:focus{
background-color: #357CA5;
}
</style>
</head> </head>
<body class="skin-blue fixed"> <body class="skin-blue fixed">
<div class="wrapper"> <div class="wrapper">
@@ -173,6 +185,20 @@
</li> </li>
</ul> </ul>
</li> </li>
<li class="dropdown">
<?php $src = Lang::getLocale().'.png'; ?>
<a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="true"><img src="{{asset("lb-faveo/flags/$src")}}"></img> &nbsp;<span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
@foreach($langs as $key => $value)
<?php $src = $key.".png"; ?>
<li><a href="#" id="{{$key}}" onclick="changeLang(this.id)"><img src="{{asset("lb-faveo/flags/$src")}}"></img>&nbsp;{{$value[0]}}&nbsp;
@if(Lang::getLocale() == "ar")
&rlm;
@endif
({{$value[1]}})</a></li>
@endforeach
</ul>
</li>
<!-- User Account: style can be found in dropdown.less --> <!-- User Account: style can be found in dropdown.less -->
<li class="dropdown user user-menu"> <li class="dropdown user user-menu">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">
@@ -325,7 +351,7 @@ $group = App\Model\helpdesk\Agent\Groups::where('id', '=', $agent_group)->first(
<!-- Right side column. Contains the navbar and content of the page --> <!-- Right side column. Contains the navbar and content of the page -->
<div class="content-wrapper"> <div class="content-wrapper">
<!-- Content Header (Page header) --> <!-- Content Header (Page header) -->
<div class="tab-content" style="background-color: white;padding: 0 0px 0 20px"> <div class="tab-content" style="background-color: #80B5D3; position: fixed; width:100% ;padding: 0 0px 0 0px; z-index:999">
<div class="collapse navbar-collapse" id="navbar-collapse"> <div class="collapse navbar-collapse" id="navbar-collapse">
<div class="tabs-content"> <div class="tabs-content">
@if($replacetop==0) @if($replacetop==0)
@@ -495,7 +521,7 @@ $group = App\Model\helpdesk\Agent\Groups::where('id', '=', $agent_group)->first(
});</script> });</script>
<script src="{{asset("lb-faveo/js/tabby.js")}}" type="text/javascript"></script> <script src="{{asset("lb-faveo/js/tabby.js")}}" type="text/javascript"></script>
<script src="{{asset("lb-faveo/js/languagechanger.js")}}" type="text/javascript"></script>
<script src="{{asset("lb-faveo/plugins/filebrowser/plugin.js")}}" type="text/javascript"></script> <script src="{{asset("lb-faveo/plugins/filebrowser/plugin.js")}}" type="text/javascript"></script>
<script src="{{asset("lb-faveo/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.all.min.js")}}" type="text/javascript"></script> <script src="{{asset("lb-faveo/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.all.min.js")}}" type="text/javascript"></script>

View File

@@ -83,6 +83,7 @@
@foreach($pages as $page) @foreach($pages as $page)
<li><a href="{{route('pages',$page->slug)}}">{{$page->name}}</a></li> <li><a href="{{route('pages',$page->slug)}}">{{$page->name}}</a></li>
@endforeach @endforeach
@if(Auth::user()) @if(Auth::user())
<li @yield('myticket')><a href="{{url('mytickets')}}">{!! Lang::get('lang.my_tickets') !!}</a></li> <li @yield('myticket')><a href="{{url('mytickets')}}">{!! Lang::get('lang.my_tickets') !!}</a></li>
@@ -195,6 +196,23 @@
</div> </div>
</div><!-- #login-form --> </div><!-- #login-form -->
@endif @endif
<ul class="nav navbar-nav navbar-menu">
<li class="dropdown">
<?php $src = Lang::getLocale().'.png'; ?>
<a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="true"><img src="{{asset("lb-faveo/flags/$src")}}"></img> &nbsp;<span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
@foreach($langs as $key => $value)
<?php $src = $key.".png"; ?>
<li><a href="#" id="{{$key}}" onclick="changeLang(this.id)"><img src="{{asset("lb-faveo/flags/$src")}}"></img>&nbsp;{{$value[0]}}&nbsp;
@if(Lang::getLocale() == "ar")
&rlm;
@endif
({{$value[1]}})</a></li>
@endforeach
</ul>
</li>
</ul>
</nav><!-- #site-navigation --> </nav><!-- #site-navigation -->
</div><!-- #navbar --> </div><!-- #navbar -->
<div id="header-search" class="site-search clearfix" style="padding-bottom:5px"><!-- #header-search --> <div id="header-search" class="site-search clearfix" style="padding-bottom:5px"><!-- #header-search -->
@@ -415,6 +433,10 @@
<script src="{{asset("lb-faveo/plugins/iCheck/icheck.min.js")}}" type="text/javascript"></script> <script src="{{asset("lb-faveo/plugins/iCheck/icheck.min.js")}}" type="text/javascript"></script>
<script src="{{asset("lb-faveo/js/languagechanger.js")}}" type="text/javascript"></script>
<script src="{{asset("lb-faveo/js/languagechanger.js")}}" type="text/javascript"></script>
<script> <script>
$(function () { $(function () {
//Enable check and uncheck all functionality //Enable check and uncheck all functionality

View File

@@ -776,4 +776,5 @@ Route::group(['middleware' => ['web']], function () {
// $breadcrumbs->parent('dashboard'); // $breadcrumbs->parent('dashboard');
// $breadcrumbs->push(Lang::get('lang.tickets') . '&nbsp; > &nbsp;' . Lang::get('lang.open'), route('open.ticket')); // $breadcrumbs->push(Lang::get('lang.tickets') . '&nbsp; > &nbsp;' . Lang::get('lang.open'), route('open.ticket'));
// }); // });
Route::get('swtich-language/{id}', ['as' => 'switch-user-lang', 'uses' => 'Client\helpdesk\UnAuthController@changeUserLanguage']);
}); });

View File

@@ -28,6 +28,7 @@ return array(
'AddForeignKeysToUsersTable' => $baseDir . '/database/migrations/2016_02_16_140454_add_foreign_keys_to_users_table.php', 'AddForeignKeysToUsersTable' => $baseDir . '/database/migrations/2016_02_16_140454_add_foreign_keys_to_users_table.php',
'Adobe_Font_Metrics' => $vendorDir . '/phenx/php-font-lib/classes/Adobe_Font_Metrics.php', 'Adobe_Font_Metrics' => $vendorDir . '/phenx/php-font-lib/classes/Adobe_Font_Metrics.php',
'AlterTicketSourceTable' => $baseDir . '/database/migrations/2016_08_16_104539_alter_ticket_source_table.php', 'AlterTicketSourceTable' => $baseDir . '/database/migrations/2016_08_16_104539_alter_ticket_source_table.php',
'AlterUsersTableAddUserLanguageColumn' => $baseDir . '/database/migrations/2018_08_08_094653_alter_users_table_add_user_language_column.php',
'Attribute_Translator' => $vendorDir . '/dompdf/dompdf/include/attribute_translator.cls.php', 'Attribute_Translator' => $vendorDir . '/dompdf/dompdf/include/attribute_translator.cls.php',
'Block_Frame_Decorator' => $vendorDir . '/dompdf/dompdf/include/block_frame_decorator.cls.php', 'Block_Frame_Decorator' => $vendorDir . '/dompdf/dompdf/include/block_frame_decorator.cls.php',
'Block_Frame_Reflower' => $vendorDir . '/dompdf/dompdf/include/block_frame_reflower.cls.php', 'Block_Frame_Reflower' => $vendorDir . '/dompdf/dompdf/include/block_frame_reflower.cls.php',

View File

@@ -687,6 +687,7 @@ class ComposerStaticInit598add4b9b35c76d3599603201ccdd6d
'AddForeignKeysToUsersTable' => __DIR__ . '/../..' . '/database/migrations/2016_02_16_140454_add_foreign_keys_to_users_table.php', 'AddForeignKeysToUsersTable' => __DIR__ . '/../..' . '/database/migrations/2016_02_16_140454_add_foreign_keys_to_users_table.php',
'Adobe_Font_Metrics' => __DIR__ . '/..' . '/phenx/php-font-lib/classes/Adobe_Font_Metrics.php', 'Adobe_Font_Metrics' => __DIR__ . '/..' . '/phenx/php-font-lib/classes/Adobe_Font_Metrics.php',
'AlterTicketSourceTable' => __DIR__ . '/../..' . '/database/migrations/2016_08_16_104539_alter_ticket_source_table.php', 'AlterTicketSourceTable' => __DIR__ . '/../..' . '/database/migrations/2016_08_16_104539_alter_ticket_source_table.php',
'AlterUsersTableAddUserLanguageColumn' => __DIR__ . '/../..' . '/database/migrations/2018_08_08_094653_alter_users_table_add_user_language_column.php',
'Attribute_Translator' => __DIR__ . '/..' . '/dompdf/dompdf/include/attribute_translator.cls.php', 'Attribute_Translator' => __DIR__ . '/..' . '/dompdf/dompdf/include/attribute_translator.cls.php',
'Block_Frame_Decorator' => __DIR__ . '/..' . '/dompdf/dompdf/include/block_frame_decorator.cls.php', 'Block_Frame_Decorator' => __DIR__ . '/..' . '/dompdf/dompdf/include/block_frame_decorator.cls.php',
'Block_Frame_Reflower' => __DIR__ . '/..' . '/dompdf/dompdf/include/block_frame_reflower.cls.php', 'Block_Frame_Reflower' => __DIR__ . '/..' . '/dompdf/dompdf/include/block_frame_reflower.cls.php',