Merge branch 'development' into change_status

This commit is contained in:
K Naveenraj
2023-10-26 14:16:13 +05:30
committed by GitHub
88 changed files with 3442 additions and 426 deletions

View File

@@ -0,0 +1,7 @@
<?php
return[
'logs' => 'مؤلف',
'system_logs' => 'سجلات النظام',
];

View File

@@ -1,5 +1,6 @@
<?php <?php
return [ return [
'logs' => 'Logs', 'logs' => 'Logs',
'system_logs' => 'System logs',
]; ];

View File

@@ -41,10 +41,10 @@ class="nav-link active"
<div class="container-fluid"> <div class="container-fluid">
<div class="card card-light"> <div class="card card-light">
<div class="card-header"> <div class="card-header">
<h3 class="card-title">System Logs</h3> <h3 class="card-title">{{Lang::get('log::lang.system_logs')}}</h3>
<div class="card-tools"> <div class="card-tools">
<a href="?dl={{ base64_encode($current_file) }}" class="btn btn-primary btn-sm text-white"><span class="fas fa-download"></span> Download file</a> <a href="?dl={{ base64_encode($current_file) }}" class="btn btn-primary btn-sm text-white"><span class="fas fa-download"></span>{{trans('lang.download_file')}}</a>
<a id="delete-log" href="?del={{ base64_encode($current_file) }}" class="btn btn-danger btn-sm text-white"><span class="fas fa-trash"></span> Delete file</a> <a id="delete-log" href="?del={{ base64_encode($current_file) }}" class="btn btn-danger btn-sm text-white"><span class="fas fa-trash"></span>{{trans('lang.delete_file')}}</a>
</div> </div>
</div> </div>
<div class="card-body"> <div class="card-body">
@@ -61,7 +61,7 @@ class="nav-link active"
<div class="col-md-10 table-container"> <div class="col-md-10 table-container">
@if ($logs === null) @if ($logs === null)
<div> <div>
Log file >50M, please download it. {{trans('lang.log_file_50M_please_download_it.')}}
</div> </div>
@else @else
<table id="table-log" class="table table-striped"> <table id="table-log" class="table table-striped">

View File

@@ -0,0 +1,9 @@
<?php
return[
'storage' => 'تخزين',
'root' => 'جذر',
'system_logs' => 'سجلات النظام',
'default' => 'الافتراضي',
'save' => 'حفظ',
];

View File

@@ -13,4 +13,5 @@ return [
'container' => 'Container', 'container' => 'Container',
'endpoint' => 'End Point', 'endpoint' => 'End Point',
'url_type' => 'Url Type', 'url_type' => 'Url Type',
'save' => 'Save',
]; ];

View File

@@ -114,7 +114,7 @@ class="nav-link active"
<!-- /.box-body --> <!-- /.box-body -->
</div> </div>
<div class="card-footer"> <div class="card-footer">
{!! Form::submit('Save',['class'=>'btn btn-success']) !!} {!! Form::submit(Lang::get('storage::lang.save'),['class'=>'btn btn-success']) !!}
{!! Form::close() !!} {!! Form::close() !!}
</div> </div>
<!-- /.box --> <!-- /.box -->

View File

@@ -763,7 +763,7 @@ class SettingsController extends Controller
{ {
$days = Input::get('no_of_days'); $days = Input::get('no_of_days');
if ($days == null) { if ($days == null) {
return redirect()->back()->with('fails', 'Please enter valid no of days'); return redirect()->back()->with('fails', \Illuminate\Support\Facades\Lang::get('lang.please_enter_valid_no_days'));
} }
$date = new DateTime(); $date = new DateTime();
$date->modify($days.' day'); $date->modify($days.' day');

View File

@@ -36,7 +36,7 @@ class UrlSettingController extends Controller
$string = $string_www.$sting_ssl; $string = $string_www.$sting_ssl;
$this->writeHtaccess($string); $this->writeHtaccess($string);
return redirect()->back()->with('success', 'updated'); return redirect()->back()->with('success', trans('lang.updated'));
} catch (Exception $ex) { } catch (Exception $ex) {
dd($ex); dd($ex);

View File

@@ -108,15 +108,15 @@ class OrganizationController extends Controller
<div class="modal-dialog"> <div class="modal-dialog">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h4 class="modal-title">Are You Sure ?</h4> <h4 class="modal-title">'.\Lang::get('lang.are_you_sure').'</h4>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
'.$model->user_name.' '.$model->user_name.'
</div> </div>
<div class="modal-footer justify-content-between"> <div class="modal-footer justify-content-between">
<button type="button" class="btn btn-default" data-dismiss="modal" id="dismis2">Close</button> <button type="button" class="btn btn-default" data-dismiss="modal" id="dismis2">'.\Lang::get('lang.close').'</button>
<a href="'.route('org.delete', $model->id).'"><button class="btn btn-danger">delete</button></a> <a href="'.route('org.delete', $model->id).'"><button class="btn btn-danger">'.\Lang::get('lang.delete').'</button></a>
</div> </div>
</div><!-- /.modal-content --> </div><!-- /.modal-content -->
</div><!-- /.modal-dialog --> </div><!-- /.modal-dialog -->

View File

@@ -437,7 +437,7 @@ class TicketController extends Controller
return response()->json(compact('result')); return response()->json(compact('result'));
} }
$result = ['success' => 'Replyed successfully']; $result = ['success' => Lang::get('lang.you_have_successfully_replied_to_your_ticket')];
return response()->json(compact('result')); return response()->json(compact('result'));
} }

View File

@@ -46,7 +46,7 @@ class ArticleController extends Controller
// checking authentication // checking authentication
$this->middleware('auth'); $this->middleware('auth');
// checking roles // checking roles
$this->middleware('roles'); $this->middleware('role.agent');
SettingsController::language(); SettingsController::language();
} }
@@ -91,15 +91,15 @@ class ArticleController extends Controller
<div class="modal-dialog"> <div class="modal-dialog">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h4 class="modal-title">Delete</h4> <h4 class="modal-title">'.Lang::get('lang.delete').'</h4>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
Are you sure you want to delete <b> '.$model->name.' </b> ? <span>'.Lang::get('lang.are_you_sure_you_want_to_delete').'</span>&nbsp; <b> '.$model->name.' </b> ?
</div> </div>
<div class="modal-footer justify-content-between"> <div class="modal-footer justify-content-between">
<button type="button" class="btn btn-default" data-dismiss="modal" id="dismis2">Close</button> <button type="button" class="btn btn-default" data-dismiss="modal" id="dismis2">'.Lang::get('lang.close').'</button>
<a href='.url("article/delete/$model->slug").'><button class="btn btn-danger">delete</button></a> <a href='.url("article/delete/$model->slug").'><button class="btn btn-danger">'.Lang::get('lang.delete').'</button></a>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -40,7 +40,7 @@ class CategoryController extends Controller
// checking authentication // checking authentication
$this->middleware('auth'); $this->middleware('auth');
// checking roles // checking roles
$this->middleware('roles'); $this->middleware('role.agent');
SettingsController::language(); SettingsController::language();
} }
@@ -150,9 +150,9 @@ class CategoryController extends Controller
try { try {
$category->fill($request->input())->save(); $category->fill($request->input())->save();
return Redirect::back()->with('success', Lang::get('lang.category_inserted_successfully')); return redirect('category')->with('success', Lang::get('lang.category_inserted_successfully'));
} catch (Exception $e) { } catch (Exception $e) {
return Redirect::back()->with('fails', Lang::get('lang.category_not_inserted').'<li>'.$e->getMessage().'</li>'); return redirect('category')->with('fails', Lang::get('lang.category_not_inserted').'<li>'.$e->getMessage().'</li>');
} }
} }

View File

@@ -6,7 +6,6 @@ use App\Http\Controllers\Agent\helpdesk\TicketController;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Http\Requests\kb\PageRequest; use App\Http\Requests\kb\PageRequest;
// request // request
use App\Http\Requests\kb\PageUpdate;
use App\Model\kb\Page; use App\Model\kb\Page;
use Datatable; use Datatable;
// Model // Model
@@ -38,7 +37,7 @@ class PageController extends Controller
// checking authentication // checking authentication
$this->middleware('auth'); $this->middleware('auth');
// checking roles // checking roles
$this->middleware('roles'); $this->middleware('role.agent');
$this->page = $page; $this->page = $page;
SettingsController::language(); SettingsController::language();
} }
@@ -86,20 +85,20 @@ class PageController extends Controller
/* add column Actions */ /* add column Actions */
/* there are action buttons and modal popup to delete a data column */ /* there are action buttons and modal popup to delete a data column */
->addColumn('Actions', function ($model) { ->addColumn('Actions', function ($model) {
return '<span data-toggle="modal" data-target="#deletepage'.$model->id.'"><a href="#" ><button class="btn btn-danger btn-xs"></a> '.\Lang::get('lang.delete').'</button></span>&nbsp;<a href=page/'.$model->slug.'/edit class="btn btn-warning btn-xs">'.\Lang::get('lang.edit').'</a>&nbsp;<a href=pages/'.$model->slug.' class="btn btn-primary btn-xs">'.\Lang::get('lang.view').'</a> return '<span data-toggle="modal" data-target="#deletepage'.$model->id.'"><a href="#" ><button class="btn btn-danger btn-xs"></a> '.\Lang::get('lang.delete').'</button></span>&nbsp;<a href=page/'.$model->id.'/edit class="btn btn-warning btn-xs">'.\Lang::get('lang.edit').'</a>&nbsp;<a href=pages/'.$model->slug.' class="btn btn-primary btn-xs">'.\Lang::get('lang.view').'</a>
<div class="modal fade" id="deletepage'.$model->id.'"> <div class="modal fade" id="deletepage'.$model->id.'">
<div class="modal-dialog"> <div class="modal-dialog">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h4 class="modal-title">Delete</h4> <h4 class="modal-title">'.Lang::get('lang.delete').'</h4>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
Are you sure you want to delete <b>'.$model->name.'</b> ? <span>'.Lang::get('lang.are_you_sure_you_want_to_delete').'</span>&nbsp;<b>'.$model->name.'</b> ?
</div> </div>
<div class="modal-footer justify-content-between"> <div class="modal-footer justify-content-between">
<button type="button" class="btn btn-default" data-dismiss="modal" id="dismis2">Close</button> <button type="button" class="btn btn-default" data-dismiss="modal" id="dismis2">'.Lang::get('lang.close').'</button>
<a href="page/delete/'.$model->id.'"><button class="btn btn-danger">Delete</button></a> <a href="page/delete/'.$model->id.'"><button class="btn btn-danger">'.Lang::get('lang.delete').'</button></a>
</div> </div>
</div> </div>
</div> </div>
@@ -150,7 +149,7 @@ class PageController extends Controller
public function edit($slug) public function edit($slug)
{ {
try { try {
$page = $this->page->where('slug', $slug)->first(); $page = $this->page->where('id', $slug)->first();
return view('themes.default1.agent.kb.pages.edit', compact('page')); return view('themes.default1.agent.kb.pages.edit', compact('page'));
} catch (Exception $e) { } catch (Exception $e) {
@@ -169,7 +168,7 @@ class PageController extends Controller
public function update($slug, PageRequest $request) public function update($slug, PageRequest $request)
{ {
// get pages with respect to slug // get pages with respect to slug
$pages = $this->page->where('slug', $slug)->first(); $pages = $this->page->where('id', $slug)->first();
$sl = $request->input('name'); $sl = $request->input('name');
$slug = Str::slug($sl, '-'); $slug = Str::slug($sl, '-');

View File

@@ -42,7 +42,7 @@ class SettingsController extends Controller
// checking authentication // checking authentication
$this->middleware('auth'); $this->middleware('auth');
// checking roles // checking roles
$this->middleware('roles'); $this->middleware('role.agent');
$this->language(); $this->language();
} }

View File

@@ -410,10 +410,11 @@ class AuthController extends Controller
return \Redirect::route($request->input('referer')); return \Redirect::route($request->input('referer'));
} }
return \Redirect::route('/'); // return \Redirect::route('/');
} else {
return redirect()->intended($this->redirectPath()); return redirect()->intended($this->redirectPath());
} }
return redirect()->intended($this->redirectPath());
} }
} }
} }

View File

@@ -331,17 +331,17 @@ class UnAuthController extends Controller
* *
* @return response * @return response
*/ */
public static function changeLanguage($lang) public static function changeLanguage($ids, $lang)
{ {
// if(Cache::has('language')) /* if(Cache::has('language'))
// { {
// return Cache::get('language'); return Cache::get('language');
// } else return 'false'; } else return 'false';
// Cache::put('language',$); Cache::put('language',$);
$path = base_path('lang'); // Path to check available language packages $path = base_path('lang'); // Path to check available language packages
if (array_key_exists($lang, \Config::get('languages')) && in_array($lang, scandir($path))) { if (array_key_exists($lang, \Config::get('languages')) && in_array($lang, scandir($path))) {
// dd(array_key_exists($lang, Config::get('languages'))); // dd(array_key_exists($lang, Config::get('languages')));
// app()->setLocale($lang); // app()->setLocale($lang);
\Cache::forever('language', $lang); \Cache::forever('language', $lang);
// dd(Cache::get('language')); // dd(Cache::get('language'));
@@ -351,6 +351,22 @@ class UnAuthController extends Controller
} }
return true; return true;
*/
$path = base_path('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();
} }
// Follow up tickets // Follow up tickets
@@ -446,4 +462,84 @@ class UnAuthController extends Controller
return redirect()->back(); return redirect()->back();
} }
public function close($id, Tickets $ticket)
{
$tickets = Tickets::where('id', '=', $id)->first();
$tickets->status = 3;
$ticket_status = Ticket_Status::where('id', '=', 3)->first();
if ($ticket_status->state == 'closed') {
$tickets->closed = $ticket_status->id;
$tickets->closed_at = date('Y-m-d H:i:s');
}
$tickets->save();
$ticket_thread = Ticket_Thread::where('ticket_id', '=', $ticket_status->id)->first();
$ticket_subject = $ticket_thread->title;
$user = User::where('id', '=', $tickets->user_id)->first();
$thread = new Ticket_Thread();
$thread->ticket_id = $tickets->id;
$thread->user_id = $tickets->user_id;
$thread->is_internal = 1;
$thread->body = $ticket_status->message.' '.$user->user_name;
$thread->save();
$email = $user->email;
$user_name = $user->user_name;
$ticket_number = $tickets->ticket_number;
$sending_emails = Emails::where('department', '=', $ticket_status->dept_id)->first();
if ($sending_emails == null) {
$from_email = $this->system_mail();
} else {
$from_email = $sending_emails->id;
}
try {
$this->PhpMailController->sendmail($from = $this->PhpMailController->mailfrom('0', $tickets->dept_id), $to = ['name' => $user_name, 'email' => $email], $message = ['subject' => $ticket_subject.'[#'.$ticket_number.']', 'scenario' => 'close-ticket'], $template_variables = ['ticket_number' => $ticket_number]);
} catch (\Exception $e) {
return 0;
}
return Lang::get('lang.your_ticket_has_been').' '.$ticket_status->state;
}
public function open($id, Tickets $ticket)
{
$ticket_status = $ticket->where('id', '=', $id)->first();
$ticket_status->status = 1;
$ticket_status->reopened_at = date('Y-m-d H:i:s');
$ticket_status->save();
$ticket_status_message = Ticket_Status::where('id', '=', $ticket_status->status)->first();
$thread = new Ticket_Thread();
$user = User::where('id', '=', $ticket->user_id)->first();
$thread->ticket_id = $ticket_status->id;
$thread->user_id = $ticket->user_id;
$thread->is_internal = 1;
$thread->body = $ticket_status->message.' '.$user->user_name;
$thread->save();
return 'your ticket'.$ticket_status->ticket_number.' has been opened';
}
public function resolve($id, Tickets $ticket)
{
$ticket_status = $ticket->where('id', '=', $id)->first();
$ticket_status->status = 2;
$ticket_status->closed = 1;
$ticket_status->closed_at = date('Y-m-d H:i:s');
$ticket_status->save();
$ticket_status_message = Ticket_Status::where('id', '=', $ticket_status->status)->first();
$thread = new Ticket_Thread();
$user = User::where('id', '=', $ticket->user_id)->first();
$thread->ticket_id = $ticket_status->id;
$thread->user_id = $ticket->user_id;
$thread->is_internal = 1;
$thread->save();
return Lang::get('lang.your_ticket_has_been').' '.$ticket_status->state;
}
} }

View File

@@ -124,7 +124,7 @@ class UserController extends Controller
if ($arti) { if ($arti) {
return view('themes.default1.client.kb.article-list.show', compact('arti')); return view('themes.default1.client.kb.article-list.show', compact('arti'));
} else { } else {
return redirect('404'); return Redirect::back()->with('fails', Lang::get('lang.sorry_not_processed'));
} }
} }
@@ -150,7 +150,6 @@ class UserController extends Controller
if (Config::get('database.install') == '%0%') { if (Config::get('database.install') == '%0%') {
return redirect('step1'); return redirect('step1');
} else { } else {
//$categorys = $category->get();
$categorys = $category->get(); $categorys = $category->get();
// $categorys->setPath('home'); // $categorys->setPath('home');
/* direct to view with $article_id */ /* direct to view with $article_id */
@@ -235,7 +234,6 @@ class UserController extends Controller
{ {
$request->validate([ $request->validate([
'comment' => 'required', 'comment' => 'required',
]); ]);
$article = $article->where('slug', $slug)->first(); $article = $article->where('slug', $slug)->first();
@@ -265,7 +263,16 @@ class UserController extends Controller
public function getPage($name, Page $page) public function getPage($name, Page $page)
{ {
$page = $page->where('slug', $name)->first(); $page = $page->where('slug', $name);
if (!Auth::check() || \Auth::user()->role == 'user') {
$page = $page
->where(['status' => 1, 'visibility'=>1])
->first();
} else {
$page = $page->where('status', 1)->first();
}
if ($page) { if ($page) {
return view('themes.default1.client.kb.article-list.pages', compact('page')); return view('themes.default1.client.kb.article-list.pages', compact('page'));
} else { } else {

View File

@@ -214,7 +214,7 @@ class SettingsController extends Controller
try { try {
$widget->save(); $widget->save();
return redirect()->back()->with('success', $widget->name.' Saved Successfully'); return redirect()->back()->with('success', $widget->name.trans('lang.save-successful'));
} catch (Exception $e) { } catch (Exception $e) {
return redirect()->back()->with('fails', $e->errorInfo[2]); return redirect()->back()->with('fails', $e->errorInfo[2]);
} }

View File

@@ -70,7 +70,7 @@ class QueueController extends Controller
} }
} }
return redirect()->back()->with('success', 'Updated'); return redirect()->back()->with('success', trans('lang.updated'));
} catch (Exception $ex) { } catch (Exception $ex) {
return redirect()->back()->with('fails', $ex->getMessage()); return redirect()->back()->with('fails', $ex->getMessage());
} }
@@ -95,7 +95,7 @@ class QueueController extends Controller
$queue->status = 1; $queue->status = 1;
$queue->save(); $queue->save();
return redirect()->back()->with('success', 'Activated'); return redirect()->back()->with('success', trans('lang.activated'));
} catch (Exception $ex) { } catch (Exception $ex) {
return redirect()->back()->with('fails', $ex->getMessage()); return redirect()->back()->with('fails', $ex->getMessage());
} }

View File

@@ -36,9 +36,9 @@ class TaskRequest extends Request
public function messages() public function messages()
{ {
return [ return [
'fetching-commands.required_if' => 'Please choose your Email Fetching timing', 'fetching-commands.required_if' => trans('lang.Please_choose_your_Email_Fetching_timing'),
'notification-commands.required_if' => 'Please choose your Email Notification timing', 'notification-commands.required_if' => trans('lang.Please_choose_your_ Email_ Notification_timing'),
'work-commands.required_if' => 'Please choose your Auto-close Workflow timing', 'work-commands.required_if' => trans('lang.Please_choose_your_Auto-close_Workflow_timing'),
'workflow-dailyAt.required_if' => 'Please enter the time for Auto-close Workflow timing', 'workflow-dailyAt.required_if' => 'Please enter the time for Auto-close Workflow timing',
'notification-dailyAt.required_if' => 'Please enter the time for Email Notification timing', 'notification-dailyAt.required_if' => 'Please enter the time for Email Notification timing',
'fetching-dailyAt.required_if' => 'Please enter the time for Email Fetching timing', 'fetching-dailyAt.required_if' => 'Please enter the time for Email Fetching timing',

View File

@@ -24,8 +24,7 @@ class ArticleRequest extends Request
public function rules() public function rules()
{ {
return [ return [
'name' => 'required', 'name' => 'required|unique:kb_article',
//'slug' => 'required|unique:kb_article',
'description' => 'required', 'description' => 'required',
'category_id' => 'required', 'category_id' => 'required',
]; ];

View File

@@ -23,11 +23,14 @@ class ArticleUpdate extends Request
*/ */
public function rules() public function rules()
{ {
$id = $this->segments()[1]; //$id = $this->segments()[1];
$segments = $this->segments();
$id = isset($segments[1]) ? $segments[1] : null;
return [ return [
'name' => 'required', 'name' => 'required|unique:kb_article,name,'.$id,
'slug' => 'required|unique:kb_article,slug,'.$id.',id', 'slug' => 'required|unique:kb_article,slug,'.$id,
'description' => 'required', 'description' => 'required',
'category_id' => 'required', 'category_id' => 'required',
]; ];

View File

@@ -23,10 +23,11 @@ class PageRequest extends Request
*/ */
public function rules() public function rules()
{ {
$slug = $this->segment(2); $id = $this->segment(2);
return [ return [
'name' => 'required|unique:kb_pages,slug,'.$slug, 'name' => 'required|unique:kb_pages,name,'.$id,
'description' => 'required',
]; ];
} }
} }

View File

@@ -8,6 +8,7 @@ use Illuminate\Support\Facades\Route;
use Illuminate\Support\ServiceProvider; use Illuminate\Support\ServiceProvider;
use Laravel\Dusk\DuskServiceProvider; use Laravel\Dusk\DuskServiceProvider;
use Queue; use Queue;
use URL;
class AppServiceProvider extends ServiceProvider class AppServiceProvider extends ServiceProvider
{ {
@@ -39,6 +40,7 @@ class AppServiceProvider extends ServiceProvider
}); });
Route::singularResourceParameters(false); Route::singularResourceParameters(false);
$this->composer(); $this->composer();
URL::forceScheme('https');
} }
public function composer() public function composer()

25
lang/ar/datatables.php Normal file
View File

@@ -0,0 +1,25 @@
<?php
return [
'sEmptyTable' => 'لا تتوفر بيانات في الجدول',
'sInfo' => 'عرض _START_ إلى _END_ من إجمالي _TOTAL_ إدخال',
'sInfoEmpty' => 'عرض 0 إلى 0 من إجمالي 0 إدخال',
'sInfoFiltered' => '(منتقاة من إجمالي _MAX_ إدخال)',
'sInfoPostFix' => '',
'sInfoThousands' => ',',
'sLengthMenu' => '_MENU_ سجل لكل صفحة',
'sLoadingRecords' => 'جارٍ التحميل...',
'sProcessing' => 'جارٍ المعالجة...',
'sSearch' => 'بحث:',
'sZeroRecords' => 'لم يتم العثور على سجلات مطابقة',
'oPaginate' => [
'sFirst' => 'الأول',
'sLast' => 'الأخير',
'sNext' => 'التالي',
'sPrevious' => 'السابق',
],
'oAria' => [
'sSortAscending' => ': تفعيل لفرز العمود تصاعديًا',
'sSortDescending' => ': تفعيل لفرز العمود تنازليًا',
],
];

1716
lang/ar/lang.php Normal file

File diff suppressed because it is too large Load Diff

19
lang/ar/pagination.php Normal file
View File

@@ -0,0 +1,19 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Pagination Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used by the paginator library to build
| the simple pagination links. You are free to change them to anything
| you want to customize your views to better match your application.
|
*/
'previous' => '&laquo; السابق',
'next' => 'التالي &raquo;',
];

22
lang/ar/passwords.php Normal file
View File

@@ -0,0 +1,22 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Password Reminder Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are the default lines which match reasons
| that are given by the password broker for a password update attempt
| has failed, such as for an invalid token or invalid new password.
|
*/
'password' => 'يجب أن تحتوي كلمات المرور على الأقل ستة أحرف وتتطابق مع التأكيد.',
'user' => 'لا يمكننا العثور على مستخدم بهذا البريد الإلكتروني.',
'token' => 'رمز إعادة تعيين كلمة المرور غير صالح.',
'sent' => 'لقد أرسلنا رابط إعادة تعيين كلمة المرور إلى بريدك الإلكتروني!',
'reset' => 'تم إعادة تعيين كلمة المرور الخاصة بك!',
];

108
lang/ar/validation.php Normal file
View File

@@ -0,0 +1,108 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used by
| the validator class. Some of these rules have multiple versions such
| as the size rules. Feel free to tweak each of these messages here.
|
*/
'accepted' => 'يجب قبول :attribute.',
'active_url' => ':attribute ليس عنوان URL صالحًا.',
'after' => 'يجب أن يكون :attribute تاريخًا بعد :date.',
'alpha' => 'يمكن أن يحتوي :attribute على أحرف فقط.',
'alpha_dash' => 'يمكن أن يحتوي :attribute على أحرف وأرقام وشرطات فقط.',
'alpha_num' => 'يمكن أن يحتوي :attribute على أحرف وأرقام فقط.',
'array' => 'يجب أن يكون :attribute مصفوفة.',
'before' => 'يجب أن يكون :attribute تاريخًا قبل :date.',
'between' => [
'numeric' => 'يجب أن يكون :attribute بين :min و :max.',
'file' => 'يجب أن يكون حجم :attribute بين :min و :max كيلوبايت.',
'string' => 'يجب أن يكون طول :attribute بين :min و :max أحرف.',
'array' => 'يجب أن يحتوي :attribute على عدد بين :min و :max عناصر.',
],
'boolean' => 'يجب أن تكون قيمة حقل :attribute صحيحة أو خاطئة.',
'confirmed' => 'تأكيد :attribute غير مطابق.',
'date' => ':attribute ليس تاريخًا صالحًا.',
'date_format' => ':attribute لا يتطابق مع الصيغة :format.',
'different' => ':attribute و :other يجب أن يكونا مختلفين.',
'digits' => 'يجب أن يحتوي :attribute على :digits أرقام.',
'digits_between' => 'يجب أن يكون طول :attribute بين :min و :max أرقام.',
'email' => ':attribute يجب أن يكون عنوان بريد إلكتروني صالح.',
'filled' => 'حقل :attribute مطلوب.',
'exists' => ':attribute المحدد غير صالح.',
'image' => ':attribute يجب أن يكون صورة.',
'in' => ':attribute المحدد غير صالح.',
'integer' => 'يجب أن يكون :attribute عددًا صحيحًا.',
'ip' => 'يجب أن يكون :attribute عنوان IP صالحًا.',
'max' => [
'numeric' => 'لا يجب أن يكون :attribute أكبر من :max.',
'file' => 'لا يجب أن يتجاوز حجم :attribute :max كيلوبايت.',
'string' => 'لا يجب أن يتجاوز طول :attribute :max أحرف.',
'array' => 'لا يجب أن يحتوي :attribute على أكثر من :max عناصر.',
],
'mimes' => 'يجب أن يكون :attribute ملفًا من النوع: :values.',
'min' => [
'numeric' => 'يجب أن يكون :attribute على الأقل :min.',
'file' => 'يجب أن يكون حجم :attribute على الأقل :min كيلوبايت.',
'string' => 'يجب أن يكون طول :attribute على الأقل :min أحرف.',
'array' => 'يجب أن يحتوي :attribute على الأقل :min عناصر.',
],
'not_in' => ':attribute المحدد غير صالح.',
'numeric' => 'يجب أن يكون :attribute عددًا.',
'regex' => 'تنسيق :attribute غير صالح.',
'required' => 'حقل :attribute مطلوب.',
'required_if' => 'حقل :attribute مطلوب عندما يكون :other هو :value.',
'required_with' => 'حقل :attribute مطلوب عندما يكون :values موجودًا.',
'required_with_all' => 'حقل :attribute مطلوب عندما يكون :values موجودًا.',
'required_without' => 'حقل :attribute مطلوب عندما لا يكون :values موجودًا.',
'required_without_all' => 'حقل :attribute مطلوب عندما لا يكون أي من :values موجودًا.',
'same' => ':attribute و :other يجب أن يتطابقا.',
'size' => [
'numeric' => 'يجب أن يكون :attribute بحجم :size.',
'file' => 'يجب أن يكون حجم :attribute :size كيلوبايت.',
'string' => 'يجب أن يكون طول :attribute :size أحرف.',
'array' => 'يجب أن يحتوي :attribute على :size عنصرًا.',
],
'unique' => ':attribute تم أخذه بالفعل.',
'url' => 'تنسيق :attribute غير صالح.',
'timezone' => 'يجب أن يكون :attribute منطقة صالحة.',
/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute.rule" to name the lines. This makes it quick to
| specify a specific custom language line for a given attribute rule.
|
*/
'custom' => [
'attribute-name' => [
'rule-name' => 'رسالة مخصصة',
],
],
/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap attribute place-holders
| with something more reader friendly such as E-Mail Address instead
| of "email". This simply helps us make messages a little cleaner.
|
*/
'attributes' => [
'email' => 'عنوان البريد الإلكتروني',
'password' => 'كلمة المرور',
// Add more attribute translations in Arabic as needed
],
];

View File

@@ -1158,4 +1158,6 @@ return [
'selected-user-is-already-the-owner' => 'Der ausgewählte Benutzer ist bereits Inhaber dieses Tickets.', 'selected-user-is-already-the-owner' => 'Der ausgewählte Benutzer ist bereits Inhaber dieses Tickets.',
//updated 15-5-2017 //updated 15-5-2017
'session-expired' => 'Die Sitzung ist abgelaufen oder ungültig. Bitte versuchen Sie es erneut.', 'session-expired' => 'Die Sitzung ist abgelaufen oder ungültig. Bitte versuchen Sie es erneut.',
//updated 10-10-2023
'what_should_be_done_with_content_owned_by_this_user'=> 'Was soll mit Inhalten geschehen, die diesem Benutzer gehören',
]; ];

View File

@@ -1283,7 +1283,7 @@ return [
|------------------------------------------------ |------------------------------------------------
| Error Pages | Error Pages
|------------------------------------------------ |------------------------------------------------
*/'knowledge_base' => 'knowledge base', */
'not_found' => 'Not found', 'not_found' => 'Not found',
'oops_page_not_found' => 'Oops! Page not found', 'oops_page_not_found' => 'Oops! Page not found',
'we_could_not_find_the_page_you_were_looking_for' => 'We could not find the page you were looking for', 'we_could_not_find_the_page_you_were_looking_for' => 'We could not find the page you were looking for',
@@ -1568,7 +1568,6 @@ return [
'deleted_user_directory' => 'Deleted User Directory', 'deleted_user_directory' => 'Deleted User Directory',
'restore' => 'Restore', 'restore' => 'Restore',
'user_restore_successfully' => 'User restore successfully', 'user_restore_successfully' => 'User restore successfully',
/*** updates 28-11-2016***/ /*** updates 28-11-2016***/
'apply' => 'Apply', 'apply' => 'Apply',
@@ -1606,58 +1605,85 @@ return [
'session-expired' => 'Session expired or invalid, please try again.', 'session-expired' => 'Session expired or invalid, please try again.',
//update since v1.10 //update since v1.10
'your_helpdesk_is_ready' => 'Your Helpdesk is Ready!', 'your_helpdesk_is_ready' => 'Your Helpdesk is Ready!',
'all_right_sparky_you_have_made_it' => 'All right, sparky! Youve made it through the installation.', 'all_right_sparky_you_have_made_it' => 'All right, sparky! Youve made it through the installation.',
'next_step' => 'Next Step', 'next_step' => 'Next Step',
'login_to_faveo' => 'Login to Faveo', 'login_to_faveo' => 'Login to Faveo',
'learn_more' => 'Learn More', 'learn_more' => 'Learn More',
'video_walk_through' => 'Video walk through', 'video_walk_through' => 'Video walk through',
'email_support' => 'Email Support', 'email_support' => 'Email Support',
'not-answered' => 'Not answered', 'not-answered' => 'Not answered',
'default-fallback' => 'Fallback language', 'default-fallback' => 'Fallback language',
'system-language' => 'System\'s default language', 'system-language' => 'System\'s default language',
'set_as_sys_lang' => 'Make default', 'set_as_sys_lang' => 'Make default',
'filtered-results' => 'Filtered results', 'filtered-results' => 'Filtered results',
'methon_not_allowed' => 'Method not allowed', 'methon_not_allowed' => 'Method not allowed',
'confirm-to-proceed' => 'Are you sure?', 'confirm-to-proceed' => 'Are you sure?',
'change-ticket-status-to' => 'Change status of tickets to ', 'change-ticket-status-to' => 'Change status of tickets to ',
'your-ticket-status-changed' => 'Your ticket\'s status has been changed.', 'your-ticket-status-changed' => 'Your ticket\'s status has been changed.',
'reload-be-patient-message' => 'Please be patient we are reloading the page.', 'reload-be-patient-message' => 'Please be patient we are reloading the page.',
'status-changed-successfully' => 'Status changed successfully.', 'status-changed-successfully' => 'Status changed successfully.',
'system-outgoing-incoming-mail-not-configured' => 'You have not configured system mail. Faveo can\'t fetch tickets from mail or send mail to users without it.', 'system-outgoing-incoming-mail-not-configured' => 'You have not configured system mail. Faveo can\'t fetch tickets from mail or send mail to users without it.',
'confihure-the-mail-now' => 'Click here to configure the mail.', 'confihure-the-mail-now' => 'Click here to configure the mail.',
'system-mail-not-configured-agent-message' => 'System incoming and outgoing email settings are not configured. Please contct your system\'s admin and report the problem.', 'system-mail-not-configured-agent-message' => 'System incoming and outgoing email settings are not configured. Please contct your system\'s admin and report the problem.',
'ticket-assigned-successfully' => 'Selected tickets have been assigned sucessfully.', 'ticket-assigned-successfully' => 'Selected tickets have been assigned sucessfully.',
'canned_response_deleted' => 'Canned response deleted successfully', 'canned_response_deleted' => 'Canned response deleted successfully',
'no-dummy-data' => 'Your system is in production, we could not find dummy data installed in your system.', 'no-dummy-data' => 'Your system is in production, we could not find dummy data installed in your system.',
'dummy_data_installation_message' => 'You are using Faveo with dummy data, which should be used only for testing purpose. Your system will not fetch or send any mail as dummy data has minimal configuration settings. We recommend not to feed any live data in the system till you are testing the system. Once you are done with testing clear all dummy data and configure system settings to get started with the system.', 'dummy_data_installation_message' => 'You are using Faveo with dummy data, which should be used only for testing purpose. Your system will not fetch or send any mail as dummy data has minimal configuration settings. We recommend not to feed any live data in the system till you are testing the system. Once you are done with testing clear all dummy data and configure system settings to get started with the system.',
'clear-dummy-data-agent-message' => 'Your Faveo system has been installed with dummy data which should be used only for testing purpose. Your system will not fetch or send any mail as dummy data has minimal configuration settings. We recommend not to feed any live data in the system till you are testing the system. Once you are done with testing contact your system admin to clean dummy data and configure system settings.', 'clear-dummy-data-agent-message' => 'Your Faveo system has been installed with dummy data which should be used only for testing purpose. Your system will not fetch or send any mail as dummy data has minimal configuration settings. We recommend not to feed any live data in the system till you are testing the system. Once you are done with testing contact your system admin to clean dummy data and configure system settings.',
'clear-dummy-data' => 'to clear dummy data.', 'clear-dummy-data' => 'to clear dummy data.',
'delete_dummy_data' => 'Clean dummy data', 'delete_dummy_data' => 'Clean dummy data',
'plugin-with-dummy-data-error-message' => 'You\'ve installed Faveo with dummy data for testing. Plugins can only be used in live/production mode. If you are done with testing clear dummy data and start using Faveo in live/production mode.', 'plugin-with-dummy-data-error-message' => 'You\'ve installed Faveo with dummy data for testing. Plugins can only be used in live/production mode. If you are done with testing clear dummy data and start using Faveo in live/production mode.',
'clean-data-box-title' => 'Cleaning Dummy data will perform following actions', 'clean-data-box-title' => 'Cleaning Dummy data will perform following actions',
'clean-dummy-ticket-conversation' => 'Clean all dummy tickets and their conversations.', 'clean-dummy-ticket-conversation' => 'Clean all dummy tickets and their conversations.',
'clean-dummy-notification' => 'Clean all dummy notifications.', 'clean-dummy-notification' => 'Clean all dummy notifications.',
'clean-dummy-users' => 'Clean all dummy users and their data.', 'clean-dummy-users' => 'Clean all dummy users and their data.',
'clean-other-data' => 'Clean dummy departments, teams, labels, tags etc.', 'clean-other-data' => 'Clean dummy departments, teams, labels, tags etc.',
'clean-user-created-data' => 'Clean all data created during testing with dummy data.', 'clean-user-created-data' => 'Clean all data created during testing with dummy data.',
'clean-data-btn' => 'Clear data', 'clean-data-btn' => 'Clear data',
'clean-confirm' => 'Yes I want to clean dummy data', 'clean-confirm' => 'Yes I want to clean dummy data',
'do-not-refresh' => '(Please do not use "Refresh" or "Back" button)', 'do-not-refresh' => '(Please do not use "Refresh" or "Back" button)',
'cleaning-in-progress' => 'Cleaning in progress, please wait while we are cleaning your database', 'cleaning-in-progress' => 'Cleaning in progress, please wait while we are cleaning your database',
'cleaning-database' => 'Cleaning dummy data from database.', 'cleaning-database' => 'Cleaning dummy data from database.',
'native-name' => 'Native name', 'native-name' => 'Native name',
'choose' => 'Choose', 'choose' => 'Choose',
'going-overdue-today' => 'This ticket will become overdue today.', 'going-overdue-today' => 'This ticket will become overdue today.',
'ticket_has_attachments' => 'This ticket contains attachment(s)', 'ticket_has_attachments' => 'This ticket contains attachment(s)',
'is_overdue' => 'This ticket is marked as overdue', 'is_overdue' => 'This ticket is marked as overdue',
'ticket_has_collaborator' => 'This ticket has collaborator(s)', 'ticket_has_collaborator' => 'This ticket has collaborator(s)',
'ticket_created_source' => 'This ticket is created via :source', 'ticket_created_source' => 'This ticket is created via :source',
'ticket-has-x-priority' => 'This ticket has :priority priority', 'ticket-has-x-priority' => 'This ticket has :priority priority',
'clean-forever' => 'delete permanently', 'clean-forever' => 'delete permanently',
'mail-sent-to-job-for-process' => 'Mail has been sent to job for process, it will appear in your mailbox once it gets processed by your selected queue service. If you don\'t recieve the mail check logs for errors or warnings.', 'mail-sent-to-job-for-process' => 'Mail has been sent to job for process, it will appear in your mailbox once it gets processed by your selected queue service. If you don\'t recieve the mail check logs for errors or warnings.',
'click-here-to-see-more-details' => 'Click here to see more details', 'click-here-to-see-more-details' => 'Click here to see more details',
'category_list' => 'Category list', 'category_list' => 'Category list',
'check_ticket' => 'Check ticket', 'check_ticket' => 'Check ticket',
'search_result' => 'Search Results', 'search_result' => 'Search Results',
'already_got_an_account?' => 'Already got an account?',
'message-choose' => 'Choose File(s)',
'Ticket details' => 'Ticket Conversation',
'provider' => 'Providers',
'facebook' => 'Facebook',
'google' => 'Google',
'github' => 'Github',
'twitter' => 'Twitter',
'linkedin' => 'Linkedin',
'bitbucket' => 'Bitbucket',
'Please_choose_your_Email_Fetching_timing' => 'Please choose your Email Fetching timing',
'Please_choose_your_ Email_ Notification_timing' => 'Please choose your Email Notification timing',
'Please_choose_your_Auto-close_Workflow_timing' => 'Please choose your Auto-close Workflow timing',
'lockout_period:' => 'Lockout Period:',
'Lockout_Message:' => 'Lockout Message:',
'please_enter_valid_no_days' => 'Please enter valid no of days',
'author' => 'Author',
'what_should_be_done_with_content_owned_by_this_user' => 'What should be done with content owned by this user',
'ticket_conversation' => 'Ticket Conversation',
'download_file' => 'Download file',
'delete_file' => 'Delete file',
'log_file_50M_please_download_it.' => 'Log file >50M, please download it.',
'support' => 'Support',
'optional' => 'Optional',
'activated' => 'Activated',
'add-child' => 'Add Child',
'save-successful' => ' Saved Successfully',
]; ];

View File

@@ -671,7 +671,7 @@ return [
'form_name' => 'Nombre del formulario', 'form_name' => 'Nombre del formulario',
'view_this_form' => 'Ver este formulario', 'view_this_form' => 'Ver este formulario',
'delete_from' => 'Eliminar formulario', 'delete_from' => 'Eliminar formulario',
'are_you_sure_you_want_to_delete' => 'estas seguro que quieres borrarlo', 'are_you_sure_you_want_to_delete' => 'Estas seguro que quieres borrarlo',
'close' => 'Cerca', 'close' => 'Cerca',
'instructions' => 'Instrucciones', 'instructions' => 'Instrucciones',
'instructions_on_creating_form' => 'Seleccione el tipo de campo que desea agregar al formulario de abajo y haga clic en el menú desplegable "Tipo". No olvide establecer las opciones de campo si el tipo es select, checkbox o radio. Separe cada opción con una coma. Una vez que haya terminado de crear el formulario, puede guardar el formulario haciendo clic en el botón "Guardar formulario"', 'instructions_on_creating_form' => 'Seleccione el tipo de campo que desea agregar al formulario de abajo y haga clic en el menú desplegable "Tipo". No olvide establecer las opciones de campo si el tipo es select, checkbox o radio. Separe cada opción con una coma. Una vez que haya terminado de crear el formulario, puede guardar el formulario haciendo clic en el botón "Guardar formulario"',
@@ -1664,4 +1664,6 @@ Puede ingresar el número de días de registros de base de datos que se eliminar
//updates 22-2-2017 //updates 22-2-2017
'invalid-date-range' => 'Invalid date range', 'invalid-date-range' => 'Invalid date range',
//updated 10-10-2023
'what_should_be_done_with_content_owned_by_this_user' => '¿Qué se debe hacer con el contenido propiedad de este usuario',
]; ];

View File

@@ -1563,5 +1563,7 @@ return [
'selected-user-is-already-the-owner' => 'L\'utilisateur sélectionné est déjà le propriétaire du ticket.', 'selected-user-is-already-the-owner' => 'L\'utilisateur sélectionné est déjà le propriétaire du ticket.',
//updated 15-5-2017 //updated 15-5-2017
'session-expired' => 'Session expired or invalid, please try again.', 'session-expired' => 'Session expired or invalid, please try again.',
//updated 10-10-2023
'what_should_be_done_with_content_owned_by_this_user' => 'Que faire du contenu appartenant à cet utilisateur',
]; ];

View File

@@ -1594,4 +1594,7 @@ return [
'all-users' => 'Tutti gli utenti', 'all-users' => 'Tutti gli utenti',
//update 21-12-2016 //update 21-12-2016
'selected-user-is-already-the-owner' => 'L\'utente selezionato è già il proprietario del ticket.', 'selected-user-is-already-the-owner' => 'L\'utente selezionato è già il proprietario del ticket.',
//updated 10-10-2023
'what_should_be_done_with_content_owned_by_this_user' => 'Cosa si dovrebbe fare con i contenuti di proprietà di questo utente',
]; ];

View File

@@ -1609,4 +1609,6 @@ return [
'selected-user-is-already-the-owner' => 'Selected user is already the owner of this ticket.', 'selected-user-is-already-the-owner' => 'Selected user is already the owner of this ticket.',
//updated 15-5-2017 //updated 15-5-2017
'session-expired' => 'Session expired or invalid, please try again.', 'session-expired' => 'Session expired or invalid, please try again.',
//updated 10-10-2023
'what_should_be_done_with_content_owned_by_this_user' => 'Wat moet er gebeuren met de inhoud die eigendom is van deze gebruiker',
]; ];

View File

@@ -1552,5 +1552,7 @@ return [
'selected-user-is-already-the-owner' => 'O usuário selecionado já é o proprietário deste ticket.', 'selected-user-is-already-the-owner' => 'O usuário selecionado já é o proprietário deste ticket.',
//updated 15-5-2017 //updated 15-5-2017
'session-expired' => 'Sessão expirada ou inválida, tente novamente.', 'session-expired' => 'Sessão expirada ou inválida, tente novamente.',
//updated 10-10-2023
'what_should_be_done_with_content_owned_by_this_user' => 'O que deve ser feito com o conteúdo de propriedade deste usuário',
]; ];

View File

@@ -1554,5 +1554,7 @@ return [
'selected-user-is-already-the-owner' => 'Selected user is already the owner of this ticket.', 'selected-user-is-already-the-owner' => 'Selected user is already the owner of this ticket.',
//updated 15-5-2017 //updated 15-5-2017
'session-expired' => 'Session expired or invalid, please try again.', 'session-expired' => 'Session expired or invalid, please try again.',
//updated 10-10-2023
'what_should_be_done_with_content_owned_by_this_user' => 'O que deve ser feito com o conteúdo de propriedade deste usuário',
]; ];

View File

@@ -1651,4 +1651,6 @@ return [
'ticket-has-x-priority' => 'Приоритет заявки - :priority', 'ticket-has-x-priority' => 'Приоритет заявки - :priority',
'clean-forever' => 'удалить навсегда', 'clean-forever' => 'удалить навсегда',
'mail-sent-to-job-for-process' => 'Почта была отправлена на задание для обработки, она появится в вашем почтовом ящике после обработки выбранной службой очереди. Если вы не получаете почту, проверьте журнал на наличие ошибок или предупреждений.', 'mail-sent-to-job-for-process' => 'Почта была отправлена на задание для обработки, она появится в вашем почтовом ящике после обработки выбранной службой очереди. Если вы не получаете почту, проверьте журнал на наличие ошибок или предупреждений.',
//updated 10-10-2023
'what_should_be_done_with_content_owned_by_this_user' => 'Что следует делать с контентом, принадлежащим этому пользователю',
]; ];

View File

@@ -1709,4 +1709,6 @@ return [
'ticket_type_updated_successfully' => '工单类型更新成功', 'ticket_type_updated_successfully' => '工单类型更新成功',
'ticket_type_deleted_successfully' => '工单类型删除成功', 'ticket_type_deleted_successfully' => '工单类型删除成功',
'create_new_ticket' => '创建工单', 'create_new_ticket' => '创建工单',
//updated 10-10-2023
'what_should_be_done_with_content_owned_by_this_user' => '应如何处理该用户拥有的内容',
]; ];

View File

@@ -8,6 +8,7 @@
convertWarningsToExceptions="true" convertWarningsToExceptions="true"
processIsolation="false" processIsolation="false"
stopOnFailure="false"> stopOnFailure="false">
<testsuites> <testsuites>
<testsuite name="all"> <testsuite name="all">
<directory>./tests/</directory> <directory>./tests/</directory>
@@ -34,4 +35,3 @@
<env name="DB_INSTALL" value="1"/> <env name="DB_INSTALL" value="1"/>
</php> </php>
</phpunit> </phpunit>

View File

@@ -82,7 +82,7 @@
<div> <div>
<h3 class="box-title" align="center">Forgot your password</h3> <h3 class="box-title" align="center">{{trans('lang.forgot_password')}}</h3>
</div> </div>
<!-- form open --> <!-- form open -->

View File

@@ -171,7 +171,7 @@
<div class="checkbox icheck" align="center"> <div class="checkbox icheck" align="center">
<label class="mb-0"> <label class="mb-0">
Already got an account? <a href="{{url('auth/login')}}" class="text-center">{!! Lang::get('lang.login') !!}</a> {{trans('lang.already_got_an_account?')}} <a href="{{url('auth/login')}}" class="text-center">{!! Lang::get('lang.login') !!}</a>
</label> </label>
</div> </div>
<div class="row"> <div class="row">

View File

@@ -81,9 +81,9 @@ class="nav-link active"
@endif @endif
<td> <td>
{!! Form::open(['route'=>['groups.destroy', $group->id],'method'=>'DELETE']) !!} {!! Form::open(['route'=>['groups.destroy', $group->id],'method'=>'DELETE']) !!}
<a href="{{route('groups.edit', $group->id)}}" class="btn btn-primary btn-xs"><i class="fas fa-edit"> </i> Edit</a> <a href="{{route('groups.edit', $group->id)}}" class="btn btn-primary btn-xs"><i class="fas fa-edit"> </i> {{trans('lang.edit')}}</a>
<!-- To pop up a confirm Message --> <!-- To pop up a confirm Message -->
{!! Form::button('<i class="fas fa-trash"> </i> Delete', {!! Form::button('<i class="fas fa-trash"> </i>'.trans('lang.delete'),
['type' => 'submit', ['type' => 'submit',
'class'=> 'btn btn-danger btn-xs', 'class'=> 'btn btn-danger btn-xs',
'onclick'=>'return confirm("Are you sure?")']) 'onclick'=>'return confirm("Are you sure?")'])

View File

@@ -114,15 +114,15 @@ class="nav-link active"
<td>{!! UTC::usertimezone($email->updated_at) !!}</td> <td>{!! UTC::usertimezone($email->updated_at) !!}</td>
<td> <td>
{!! Form::open(['route'=>['emails.destroy', $email->id],'method'=>'DELETE']) !!} {!! Form::open(['route'=>['emails.destroy', $email->id],'method'=>'DELETE']) !!}
<a href="{{route('emails.edit', $email->id)}}" class="btn btn-primary btn-xs"><i class="fas fa-edit"> </i> Edit</a> <a href="{{route('emails.edit', $email->id)}}" class="btn btn-primary btn-xs"><i class="fas fa-edit"> </i>{{Lang::get('lang.edit')}}</a>
<!-- To pop up a confirm Message --> <!-- To pop up a confirm Message -->
@if($default_email == $email->id) @if($default_email == $email->id)
{!! Form::button('<i class="fas fa-trash"> </i> Delete', {!! Form::button('<i class="fas fa-trash"> </i>'.Lang::get('lang.delete'),
['class'=> 'btn btn-danger btn-xs '. $disabled]) ['class'=> 'btn btn-danger btn-xs '. $disabled])
!!} !!}
@else @else
{!! Form::button('<i class="fas fa-trash"> </i> Delete', {!! Form::button('<i class="fas fa-trash"> </i>'.Lang::get('lang.delete'),
['type' => 'submit', ['type' => 'submit',
'class'=> 'btn btn-danger btn-xs', 'class'=> 'btn btn-danger btn-xs',
'onclick'=>'return confirm("Are you sure?")']) 'onclick'=>'return confirm("Are you sure?")'])

View File

@@ -73,7 +73,7 @@ class="nav-link active"
{!! link_to_route('forms.show', Lang::get('lang.view_this_form') ,[$form->id],['id'=>'View','class'=>'btn btn-primary btn-sm']) !!} {!! link_to_route('forms.show', Lang::get('lang.view_this_form') ,[$form->id],['id'=>'View','class'=>'btn btn-primary btn-sm']) !!}
</div> </div>
<div class="btn-group"> <div class="btn-group">
{!! link_to_route('forms.add.child', 'Add Child' ,[$form->id],['id'=>'add-child','class'=>'btn btn-primary btn-sm']) !!} {!! link_to_route('forms.add.child', Lang::get('lang.add-child') ,[$form->id],['id'=>'add-child','class'=>'btn btn-primary btn-sm']) !!}
</div> </div>
<div class="btn-group"> <div class="btn-group">
<button class="btn btn-danger btn-sm" data-toggle="modal" data-target="#delete{{$form->id}}">{!! Lang::get('lang.delete_from') !!} <button class="btn btn-danger btn-sm" data-toggle="modal" data-target="#delete{{$form->id}}">{!! Lang::get('lang.delete_from') !!}

View File

@@ -87,8 +87,8 @@ class="nav-link active"
<div class="form-group col-sm-3 {{ $errors->has('ispublic') ? 'has-error' : '' }}"> <div class="form-group col-sm-3 {{ $errors->has('ispublic') ? 'has-error' : '' }}">
{!! Form::label('ispublic',Lang::get('lang.visibility')) !!}&nbsp;<span class="text-red"> *</span><br/> {!! Form::label('ispublic',Lang::get('lang.visibility')) !!}&nbsp;<span class="text-red"> *</span><br/>
<input type="radio" name="ispublic" value="1" checked>&nbsp;&nbsp;Public&nbsp;&nbsp; <input type="radio" name="ispublic" value="1" checked>{{Lang::get('lang.public')}}
<input type="radio" name="ispublic" value="0" >&nbsp;&nbsp;Private <input type="radio" name="ispublic" value="0" >&nbsp;&nbsp;{{Lang::get('lang.private')}}
</div> </div>
</div> </div>
<!-- Admin Note : Textarea : --> <!-- Admin Note : Textarea : -->

View File

@@ -66,8 +66,8 @@ class="nav-link active"
</a> </a>
<div class="btn-group" id="toggle_event_editing" style="float: right; margin-bottom: 10"> <div class="btn-group" id="toggle_event_editing" style="float: right; margin-bottom: 10">
<button type="button" class="btn {{$user_status->status == '0' ? 'btn-info' : 'btn-default'}} locked_active">Inactive</button> <button type="button" class="btn {{$user_status->status == '0' ? 'btn-info' : 'btn-default'}} locked_active">{{Lang::get('lang.inactive')}}</button>
<button type="button" class="btn {{$user_status->status == '1' ? 'btn-info' : 'btn-default'}} unlocked_inactive">Active</button> <button type="button" class="btn {{$user_status->status == '1' ? 'btn-info' : 'btn-default'}} unlocked_inactive">{{Lang::get('lang.active')}}</button>
</div> </div>
</div> </div>
<div class="priority-table" style="padding-top: 10px"> <div class="priority-table" style="padding-top: 10px">

View File

@@ -282,7 +282,7 @@ class="nav-link active"
<td> <td>
<select class="form-control" onChange="selectdata({!! $i !!})" id="selected{!! $i !!}" name="action[{!! $i !!}][a]" required> <select class="form-control" onChange="selectdata({!! $i !!})" id="selected{!! $i !!}" name="action[{!! $i !!}][a]" required>
<option value="">-- {!! Lang::get('lang.select_an_action') !!} --</option> <option value="">-- {!! Lang::get('lang.select_an_action') !!} --</option>
<optgroup label="Ticket"> <optgroup label={{trans('lang.ticket')}}>
<option value="reject" <?php <option value="reject" <?php
if ($workflow_action->condition == 'reject') { if ($workflow_action->condition == 'reject') {
echo "selected='selected'"; echo "selected='selected'";

View File

@@ -33,7 +33,7 @@ class="nav-link active"
@section('content') @section('content')
@if (count($errors) > 0) @if (count($errors) > 0)
<div class="alert alert-danger"> <div class="alert alert-danger">
<strong>Whoops!</strong> There were some problems with your input.<br><br> <strong>{{Lang::get('lang.woops')}}</strong> {{Lang::get('lang.theirisproblem')}}<br><br>
<ul> <ul>
@foreach ($errors->all() as $error) @foreach ($errors->all() as $error)
<li>{{ $error }}</li> <li>{{ $error }}</li>

View File

@@ -656,7 +656,7 @@
</div> </div>
<div class="card card-light"> <div class="card card-light">
<div class="card-header"> <div class="card-header">
<h3 class="card-title">Logs</h3> <h3 class="card-title">{{Lang::get('log::lang.logs')}}</h3>
</div> </div>
<!-- /.box-header --> <!-- /.box-header -->
<div class="card-body"> <div class="card-body">
@@ -671,7 +671,7 @@
</span> </span>
</a> </a>
</div> </div>
<div class="text-center text-sm">Logs</div> <div class="text-center text-sm">{{Lang::get('log::lang.logs')}}</div>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -108,7 +108,7 @@ class="nav-link active"
<div class="col-md-2"> <div class="col-md-2">
<!-- logo --> <!-- logo -->
{!! Form::label('logo',Lang::get('lang.logo')) !!} {!! Form::label('logo',Lang::get('lang.logo')) !!}
<div class="btn bg-olive btn-file" style="color:blue"> Upload file <div class="btn bg-olive btn-file" style="color:blue"> {{Lang::get('lang.upload_file')}}
{!! Form::file('logo') !!} {!! Form::file('logo') !!}
</div> </div>
</div> </div>

View File

@@ -1,7 +1,7 @@
{!! Form::model($emails,['url' => 'post-scheduler', 'method' => 'PATCH']) !!} {!! Form::model($emails,['url' => 'post-scheduler', 'method' => 'PATCH']) !!}
@if (count($errors) > 0) @if (count($errors) > 0)
<div class="alert alert-danger"> <div class="alert alert-danger">
<strong>Whoops!</strong> There were some problems with your input.<br><br> <strong>{{Lang::get('lang.woops')}}</strong> {{Lang::get('lang.theirisproblem')}}<br><br>
<ul> <ul>
@foreach ($errors->all() as $error) @foreach ($errors->all() as $error)
<li>{{ $error }}</li> <li>{{ $error }}</li>

View File

@@ -7,7 +7,7 @@
<div class="box-body table-responsive"style="overflow:hidden;"> <div class="box-body table-responsive"style="overflow:hidden;">
@if (count($errors) > 0) @if (count($errors) > 0)
<div class="alert alert-danger"> <div class="alert alert-danger">
<strong>Whoops!</strong> There were some problems with your input.<br><br> <strong>{{Lang::get('lang.woops')}}</strong> {{Lang::get('lang.theirisproblem')}}<br><br>
<ul> <ul>
@foreach ($errors->all() as $error) @foreach ($errors->all() as $error)
<li>{{ $error }}</li> <li>{{ $error }}</li>

View File

@@ -85,8 +85,13 @@ class="nav-link active"
<div class="card-body"> <div class="card-body">
{!! Datatable::table() {!! Datatable::table()
->addColumn('Name','Description','Author','Website','Version') // these are the column headings to be shown ->addColumn(
->setUrl('getplugin') // this is the route where data will be retrieved trans('lang.name'),
trans('lang.description'), // Translate the 'Description' column heading
trans('lang.author'), // Translate the 'Author' column heading
trans('lang.website'), // Translate the 'Website' column heading
trans('lang.version') // Translate the 'Version' column heading
) ->setUrl('getplugin') // this is the route where data will be retrieved
->render() !!} ->render() !!}
</div> </div>
</div> </div>

View File

@@ -56,8 +56,8 @@ class="nav-link active"
<td>{!! $rating->display_order !!}</td> <td>{!! $rating->display_order !!}</td>
<td>{!! $rating->rating_area !!}</td> <td>{!! $rating->rating_area !!}</td>
<td> <td>
{!! link_to_route('rating.edit','Edit Ratings',[$rating->id],['class'=>'btn btn-primary btn-sm']) !!} {!! link_to_route('rating.edit',trans('lang.edit_ratings'),[$rating->id],['class'=>'btn btn-primary btn-sm']) !!}
<button class="btn btn-danger btn-sm" data-toggle="modal" data-target="#delete{{$rating->id}}">Delete</button> <button class="btn btn-danger btn-sm" data-toggle="modal" data-target="#delete{{$rating->id}}">{{trans('lang.delete')}}</button>
<div class="modal fade" id="delete{{$rating->id}}"> <div class="modal fade" id="delete{{$rating->id}}">
<div class="modal-dialog"> <div class="modal-dialog">
<div class="modal-content"> <div class="modal-content">

View File

@@ -65,7 +65,7 @@ class="nav-link active"
<div class="form-group {{ $errors->has('lockout_message') ? 'has-error' : '' }}"> <div class="form-group {{ $errors->has('lockout_message') ? 'has-error' : '' }}">
<div class="row"> <div class="row">
<div class="col-md-3"> <div class="col-md-3">
<label for="title">Lockout Message: <span class="text-red"> *</span></label> <label for="title">{{trans('lang.Lockout_Message:')}}<span class="text-red"> *</span></label>
</div> </div>
<div class="col-md-9"> <div class="col-md-9">
<div class="callout callout-default" style="font-style: oblique;">{!! Lang::get('lang.security_msg1') !!}</div> <div class="callout callout-default" style="font-style: oblique;">{!! Lang::get('lang.security_msg1') !!}</div>
@@ -87,7 +87,7 @@ class="nav-link active"
<div class="form-group {{ $errors->has('lockout_period') ? 'has-error' : '' }}"> <div class="form-group {{ $errors->has('lockout_period') ? 'has-error' : '' }}">
<div class="row"> <div class="row">
<div class="col-md-3"> <div class="col-md-3">
<label for="title">Lockout Period: <span class="text-red"> *</span></label> <label for="title">{{trans('lang.lockout_period:')}}<span class="text-red"> *</span></label>
</div> </div>
<div class="col-md-8"> <div class="col-md-8">
<div class="callout callout-default" style="font-style: oblique;">{!! Lang::get('lang.security_msg3') !!}</div> <div class="callout callout-default" style="font-style: oblique;">{!! Lang::get('lang.security_msg3') !!}</div>

View File

@@ -20,7 +20,7 @@ class="nav-link active"
@stop @stop
<!-- header --> <!-- header -->
@section('PageHeader') @section('PageHeader')
<h1>Social Media</h1> <h1>{{\Illuminate\Support\Facades\Lang::get('lang.social-media')}}</h1>
@stop @stop
<!-- /header --> <!-- /header -->
<!-- breadcrumbs --> <!-- breadcrumbs -->
@@ -32,7 +32,7 @@ class="nav-link active"
@section('content') @section('content')
@if (count($errors) > 0) @if (count($errors) > 0)
<div class="alert alert-danger"> <div class="alert alert-danger">
<strong>Whoops!</strong> There were some problems with your input.<br><br> <strong>{{Lang::get('lang.woops')}}</strong> {{Lang::get('lang.theirisproblem')}}<br><br>
<ul> <ul>
@foreach ($errors->all() as $error) @foreach ($errors->all() as $error)
<li>{{ $error }}</li> <li>{{ $error }}</li>
@@ -59,7 +59,7 @@ class="nav-link active"
@endif @endif
<div class="card card-light"> <div class="card card-light">
<div class="card-header"> <div class="card-header">
<h3 class="card-title">Social Media</h3> <h3 class="card-title">{{trans('lang.social-media')}}</h3>
</div> </div>
<div class="card-body"> <div class="card-body">
@@ -67,89 +67,83 @@ class="nav-link active"
<table class="table table-bordered table-striped"> <table class="table table-bordered table-striped">
<thead> <thead>
<tr> <tr>
<th>Provider</th> <th>{{trans('lang.provider')}}</th>
<th>Status</th> <th>{{trans('lang.status')}}</th>
<th>Action</th> <th>{{trans('lang.action')}}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td>Facebook</td> <td>{{\Illuminate\Support\Facades\Lang::get('lang.facebook')}}</td>
<td> <td>
@if($social->checkActive('facebook')===true) @if($social->checkActive('facebook')===true)
<span style="color: green">Active</span> <span style="color: green">{{trans('lang.active')}}</span>
@else @else
<span style="color: red">Inactive</span> <span style="color: red">{{trans('lang.inactive')}}</span>
@endif @endif
</td> </td>
<td> <td>
<a href="{{url('social/media/facebook')}}" class="btn btn-primary">Settings</a> <a href="{{url('social/media/facebook')}}" class="btn btn-primary">{{trans('lang.settings')}}</a> </td>
</td>
</tr> </tr>
<tr> <tr>
<td>Google</td> <td>{{\Illuminate\Support\Facades\Lang::get('lang.google')}}</td>
<td> <td>
@if($social->checkActive('google')===true) @if($social->checkActive('google')===true)
<span style="color: green">Active</span> <span style="color: green">{{trans('lang.active')}}</span>
@else @else
<span style="color: red">Inactive</span> <span style="color: red">{{trans('lang.inactive')}}</span>
@endif @endif
</td> </td>
<td> <td>
<a href="{{url('social/media/google')}}" class="btn btn-primary">Settings</a> <a href="{{url('social/media/google')}}" class="btn btn-primary">{{trans('lang.settings')}}</a> </td>
</td>
</tr> </tr>
<tr> <tr>
<td>Github</td> <td>{{\Illuminate\Support\Facades\Lang::get('lang.github')}}</td>
<td> <td>
@if($social->checkActive('github')===true) @if($social->checkActive('github')===true)
<span style="color: green">Active</span> <span style="color: green">{{trans('lang.active')}}</span>
@else @else
<span style="color: red">Inactive</span> <span style="color: red">{{trans('lang.inactive')}}</span>
@endif @endif
</td> </td>
<td> <td>
<a href="{{url('social/media/github')}}" class="btn btn-primary">Settings</a> <a href="{{url('social/media/github')}}" class="btn btn-primary">{{trans('lang.settings')}}</a> </td>
</td>
</tr> </tr>
<tr> <tr>
<td>Twitter</td> <td>{{\Illuminate\Support\Facades\Lang::get('lang.twitter')}}</td>
<td> <td>
@if($social->checkActive('twitter')===true) @if($social->checkActive('twitter')===true)
<span style="color: green">Active</span> <span style="color: green">{{trans('lang.active')}}</span>
@else @else
<span style="color: red">Inactive</span> <span style="color: red">{{trans('lang.inactive')}}</span>
@endif @endif
</td> </td>
<td> <td>
<a href="{{url('social/media/twitter')}}" class="btn btn-primary">Settings</a> <a href="{{url('social/media/twitter')}}" class="btn btn-primary">{{trans('lang.settings')}}</a> </td>
</td>
</tr> </tr>
<tr> <tr>
<td>Linkedin</td> <td>{{\Illuminate\Support\Facades\Lang::get('lang.linkedin')}}</td>
<td> <td>
@if($social->checkActive('linkedin')===true) @if($social->checkActive('linkedin')===true)
<span style="color: green">Active</span> <span style="color: green">{{trans('lang.active')}}</span>
@else @else
<span style="color: red">Inactive</span> <span style="color: red">{{trans('lang.inactive')}}</span>
@endif @endif
</td> </td>
<td> <td>
<a href="{{url('social/media/linkedin')}}" class="btn btn-primary">Settings</a> <a href="{{url('social/media/linkedin')}}" class="btn btn-primary">{{trans('lang.settings')}}</a> </td>
</td>
</tr> </tr>
<tr> <tr>
<td>Bitbucket</td> <td>{{\Illuminate\Support\Facades\Lang::get('lang.bitbucket')}}</td>
<td> <td>
@if($social->checkActive('bitbucket')===true) @if($social->checkActive('bitbucket')===true)
<span style="color: green">Active</span> <span style="color: green">{{trans('lang.active')}}</span>
@else @else
<span style="color: red">Inactive</span> <span style="color: red">{{trans('lang.inactive')}}</span>
@endif @endif
</td> </td>
<td> <td>
<a href="{{url('social/media/bitbucket')}}" class="btn btn-primary">Settings</a> <a href="{{url('social/media/bitbucket')}}" class="btn btn-primary">{{trans('lang.settings')}}</a> </td>
</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>

View File

@@ -33,7 +33,7 @@ class="nav-link active"
{!! Form::open(['url' => 'social/media/'.$provider, 'method' => 'POST']) !!} {!! Form::open(['url' => 'social/media/'.$provider, 'method' => 'POST']) !!}
@if (count($errors) > 0) @if (count($errors) > 0)
<div class="alert alert-danger"> <div class="alert alert-danger">
<strong>Whoops!</strong> There were some problems with your input.<br><br> <strong>{{Lang::get('lang.woops')}}</strong> {{Lang::get('lang.theirisproblem')}}<br><br>
<ul> <ul>
@foreach ($errors->all() as $error) @foreach ($errors->all() as $error)
<li>{{ $error }}</li> <li>{{ $error }}</li>
@@ -103,10 +103,10 @@ class="nav-link active"
{!! Form::label('status',Lang::get('lang.status')) !!} {!! Form::label('status',Lang::get('lang.status')) !!}
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<p>{!! Form::radio('status',1,$social->checkActive($provider))!!} Active</p> <p>{!! Form::radio('status',1,$social->checkActive($provider)) .Lang::get('lang.active')!!}</p>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<p>{!! Form::radio('status',0,$social->checkInactive($provider)) !!} Inactive</p> <p>{!! Form::radio('status',0,$social->checkInactive($provider)) .Lang::get('lang.inactive')!!} </p>
</div> </div>
<div class="col-md-12"> <div class="col-md-12">
<i>Activate login via {{ucfirst($provider)}}</i> <i>Activate login via {{ucfirst($provider)}}</i>

View File

@@ -90,7 +90,7 @@ class="nav-link active"
<!-- Default Priority: Required : manual : Dropdowm --> <!-- Default Priority: Required : manual : Dropdowm -->
<div class="form-group col-md-6 {{ $errors->has('priority') ? 'has-error' : '' }}"> <div class="form-group col-md-6 {{ $errors->has('priority') ? 'has-error' : '' }}">
{!! Form::label('priority',Lang::get('lang.default_priority')) !!} {!! Form::label('priority',Lang::get('lang.default_priority')) !!}
{!!Form::select('priority', [''=>'select a priority','Priorities'=>$priority->pluck('priority_desc','priority_id')->toArray()],null,['class' => 'form-control']) !!} {!!Form::select('priority', [''=>Lang::get('lang.select_a_priority'),Lang::get('lang.priorities')=>$priority->pluck('priority_desc','priority_id')->toArray()],null,['class' => 'form-control']) !!}
</div> </div>
</div> </div>
<div class="row"> <div class="row">

View File

@@ -34,7 +34,7 @@ class="nav-link active"
@if (count($errors) > 0) @if (count($errors) > 0)
<div class="alert alert-danger"> <div class="alert alert-danger">
<strong>Whoops!</strong> There were some problems with your input.<br><br> <strong>{{Lang::get('lang.woops')}}</strong> {{Lang::get('lang.theirisproblem')}} <br><br>
<ul> <ul>
@foreach ($errors->all() as $error) @foreach ($errors->all() as $error)
<li>{{ $error }}</li> <li>{{ $error }}</li>
@@ -61,7 +61,7 @@ class="nav-link active"
@endif @endif
<div class="card card-light"> <div class="card card-light">
<div class="card-header"> <div class="card-header">
<h3 class="card-title">URL Settings</h3> <h3 class="card-title">URL {{trans('lang.settings')}}</h3>
</div> </div>
<div class="card-body"> <div class="card-body">

View File

@@ -690,7 +690,7 @@
<li class="nav-item"> <li class="nav-item">
<a href="{{ url('logs') }}" @yield('Log') class="nav-link"> <a href="{{ url('logs') }}" @yield('Log') class="nav-link">
<i class="nav-icon fas fa-lock"></i> <i class="nav-icon fas fa-lock"></i>
<p>Logs</p> <p>{{Lang::get('log::lang.logs')}}</p>
</a> </a>
</li> </li>
@endif @endif

View File

@@ -153,7 +153,7 @@ class="nav-item d-none d-sm-inline-block active"
<div class="row"> <div class="row">
<div class='col-sm-2'> <div class='col-sm-2'>
{!! Form::label('date', 'Start Date:') !!} {!! Form::label('date', trans('lang.start_date')) !!}
{!! Form::text('start_date',null,['class'=>'form-control','id'=>'datepicker4'])!!} {!! Form::text('start_date',null,['class'=>'form-control','id'=>'datepicker4'])!!}
</div> </div>
@@ -184,7 +184,7 @@ class="nav-item d-none d-sm-inline-block active"
<div class='col-sm-2'> <div class='col-sm-2'>
{!! Form::label('start_time', 'End Date:') !!} {!! Form::label('start_time', trans('lang.end_date')) !!}
{!! Form::text('end_date',null,['class'=>'form-control','id'=>'datetimepicker3'])!!} {!! Form::text('end_date',null,['class'=>'form-control','id'=>'datetimepicker3'])!!}
</div> </div>
@@ -202,7 +202,7 @@ class="nav-item d-none d-sm-inline-block active"
<div class='col-sm-1'> <div class='col-sm-1'>
{!! Form::label('filter', 'Filter:',['style' => 'visibility:hidden;']) !!}<br> {!! Form::label('filter', 'Filter:',['style' => 'visibility:hidden;']) !!}<br>
<input type="submit" class="btn btn-primary"> <button type="submit" class="btn btn-primary">{{trans('lang.submit')}}</button>
</div> </div>
</div> </div>
@@ -253,9 +253,9 @@ class="nav-item d-none d-sm-inline-block active"
$statuses = $flattened->keys(); $statuses = $flattened->keys();
?> ?>
<tr> <tr>
<th>Department</th> <th>{{trans('lang.department')}}</th>
@forelse($statuses as $status) @forelse($statuses as $status)
<th>{!! $status !!}</th> <th>{{trans('lang.'.strtolower($status))}}</th>
@empty @empty
@endforelse @endforelse

View File

@@ -140,7 +140,7 @@ if (Auth::user()->role == 'agent') {
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<label>{!! Lang::get('lang.select-pparent-ticket') !!}</label> <label>{!! Lang::get('lang.select-pparent-ticket') !!}</label>
<select class="form-control" id="select-merge-parent" name='p_id' data-placeholder="{!! Lang::get('lang.select_tickets') !!}" style="width: 100%;"><option value=""></option></select> <select class="form-control" id="select-merge-parent" name='p_id' data-placeholder="{!! Lang::get('lang.select_tickets') !!}" style="width: 100%;"><option value=""> {{trans('lang.optional')}}</option></select>
</div> </div>
</div> </div>
<div class="row"> <div class="row">

View File

@@ -1,4 +1,4 @@
@extends('themes.default1.agent.layout.agent') @extends('themes.default1.agent.layout.agent')
@section('Users') @section('Users')
class="nav-link active" class="nav-link active"
@@ -40,20 +40,20 @@ class="nav-link active"
@endif @endif
<div class="card card-light"> <div class="card card-light">
<div class="card-header"> <div class="card-header">
<h3 class="card-title">{{Lang::get('lang.organization_list')}}</h3> <h3 class="card-title">{{Lang::get('lang.organization_list')}}</h3>
<div class="card-tools"> <div class="card-tools">
<a href="{{route('organizations.create')}}" class="btn btn-default btn-tool"><i class="fas fa-plus"> </i> {{Lang::get('lang.create_organization')}}</a> <a href="{{route('organizations.create')}}" class="btn btn-default btn-tool"><i class="fas fa-plus"> </i> {{Lang::get('lang.create_organization')}}</a>
</div> </div>
</div> </div>
<div class="card-body"> <div class="card-body">
{!! Datatable::table() {!! Datatable::table()
->addColumn(Lang::get('lang.name'), ->addColumn(Lang::get('lang.name'),
Lang::get('lang.website'), Lang::get('lang.website'),

View File

@@ -138,7 +138,7 @@ class="active"
<div class='col-sm-1'> <div class='col-sm-1'>
{!! Form::label('filter', 'Filter:',['style' => 'visibility:hidden;']) !!}<br> {!! Form::label('filter', 'Filter:',['style' => 'visibility:hidden;']) !!}<br>
<input type="submit" class="btn btn-primary" value="Submit" id="submit"> <input type="submit" class="btn btn-primary" value="{{trans('lang.submit')}}" id="submit">
</div> </div>
<br/> <br/>
<div class="col-md-4"> <div class="col-md-4">
@@ -149,9 +149,9 @@ class="active"
<div class="float-right"> <div class="float-right">
<div class="btn-group"> <div class="btn-group">
<button type="button" class="btn btn-default" id="click_day">Day</button> <button type="button" class="btn btn-default" id="click_day">{{trans('lang.day')}}</button>
<button type="button" class="btn btn-default" id="click_week">Week</button> <button type="button" class="btn btn-default" id="click_week">{{trans('lang.week')}}</button>
<button type="button" class="btn btn-default" id="click_month">Month</button> <button type="button" class="btn btn-default" id="click_month">{{trans('lang.month')}}</button>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -213,7 +213,7 @@ if (Auth::user()->role == 'agent') {
</div> </div>
<div class="modal-footer justify-content-between"> <div class="modal-footer justify-content-between">
<button type="button" class="btn btn-default no">{{Lang::get('lang.cancel')}}</button> <button type="button" class="btn btn-default no">{{Lang::get('lang.cancel')}}</button>
<button type="button" class="btn btn-primary yes" data-dismiss="modal">{{Lang::get('lang.ok')}}</button> <button type="button" class="btn btn-primary yes" data-dismiss="modal">{{Lang::get('lang.yes')}}</button>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -57,7 +57,7 @@
<div class="col-md-6"> <div class="col-md-6">
{!! Form::open(['id'=>'merge-form','method' => 'PATCH'] )!!} {!! Form::open(['id'=>'merge-form','method' => 'PATCH'] )!!}
<label>{!! Lang::get('lang.title') !!}</label> <label>{!! Lang::get('lang.title') !!}</label>
<input type="text" name='title' class="form-control" value="" placeholder="Optional" /> <input type="text" name='title' class="form-control" value="" placeholder="{{trans('lang.optional')}}" />
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<label>{!! Lang::get('lang.select-pparent-ticket') !!}</label> <label>{!! Lang::get('lang.select-pparent-ticket') !!}</label>

View File

@@ -262,7 +262,7 @@ class="active"
</div> </div>
<div class="col-md-5"> <div class="col-md-5">
<?php $Priority = App\Model\helpdesk\Ticket\Ticket_Priority::where('status','=',1)->get(); ?> <?php $Priority = App\Model\helpdesk\Ticket\Ticket_Priority::where('status','=',1)->get(); ?>
{!! Form::select('priority', ['Priority'=>$Priority->pluck('priority_desc','priority_id')->toArray()],null,['class' => 'form-control select']) !!} {!! Form::select('priority', [Lang::get('lang.priorities')=>$Priority->pluck('priority_desc','priority_id')->toArray()],null,['class' => 'form-control select']) !!}
</div> </div>
</div> </div>

View File

@@ -117,7 +117,7 @@ if (Request::has('assigned'))
@elseif($activepage == 'overdue') @elseif($activepage == 'overdue')
{{Lang::get('lang.overdue')}} {{Lang::get('lang.overdue')}}
@elseif($activepage == 'closed') @elseif($activepage == 'closed')
{{Lang::get('lang.closed')}} {{-- {{Lang::get('lang.closed')}}--}}
@elseif($activepage == 'approval') @elseif($activepage == 'approval')
{{Lang::get('lang.approval')}} {{Lang::get('lang.approval')}}
@elseif($activepage == 0) @elseif($activepage == 0)
@@ -185,7 +185,7 @@ if (Request::has('assigned'))
@foreach($statuses as $ticket_status) @foreach($statuses as $ticket_status)
<a href="javascript:;" class="dropdown-item" onclick="changeStatus({!! $ticket_status -> id !!}, '{!! $ticket_status->name !!}')" <a href="javascript:;" class="dropdown-item" onclick="changeStatus({!! $ticket_status -> id !!}, '{!! $ticket_status->name !!}')"
data-toggle="modal" data-target="#myModal"> data-toggle="modal" data-target="#myModal">
{!! $ticket_status->name !!} {{trans('lang.'.strtolower($ticket_status->name)) }}
</a> </a>
@endforeach @endforeach
</div> </div>

View File

@@ -1,4 +1,5 @@
@extends('themes.default1.agent.layout.agent') @extends('themes.default1.agent.layout.agent')
<meta charset="utf-8">
@section('Tickets') @section('Tickets')
class="nav-link active" class="nav-link active"
@@ -138,17 +139,17 @@ if ($thread->title != "") {
if ($group->can_edit_ticket == 1) { if ($group->can_edit_ticket == 1) {
?> ?>
<button type="button" class="btn btn-sm btn-default btn-tool"> <button type="button" class="btn btn-sm btn-default btn-tool">
<i class="fas fa-edit" style="color:green;"></i> Edit <i class="fas fa-edit" style="color:green;"></i> {{trans('lang.edit')}}
</button> <?php } ?> </button> <?php } ?>
<?php if ($group->can_assign_ticket == 1) { ?> <?php if ($group->can_assign_ticket == 1) { ?>
<button type="button" class="btn btn-sm btn-default btn-tool"> <button type="button" class="btn btn-sm btn-default btn-tool">
<i class="fas fa-hand-point-right" style="color:orange;"></i> Assign <i class="fas fa-hand-point-right" style="color:orange;"></i> {{trans('lang.assign')}}
</button> <?php } ?> </button> <?php } ?>
@if($tickets->assigned_to == Auth::user()->id) @if($tickets->assigned_to == Auth::user()->id)
<button type="button" id="surrender_button" class="btn btn-sm btn-default btn-tool" data-toggle="modal" data-target="#surrender"> <button type="button" id="surrender_button" class="btn btn-sm btn-default btn-tool" data-toggle="modal" data-target="#surrender">
<i class="fas fa-arrows-alt" style="color:red;"></i> Surrender <i class="fas fa-arrows-alt" style="color:red;"></i> {{trans('lang.surrender')}}
</button> </button>
@endif @endif
@@ -156,7 +157,7 @@ if ($thread->title != "") {
<?php \Illuminate\Support\Facades\Event::dispatch('show-add-event-btn', []); ?> <?php \Illuminate\Support\Facades\Event::dispatch('show-add-event-btn', []); ?>
<a href="{{url('ticket/print/'.$tickets->id)}}" target="_blank" class="btn btn-default btn-tool btn-sm"> <a href="{{url('ticket/print/'.$tickets->id)}}" target="_blank" class="btn btn-default btn-tool btn-sm">
<i class="fas fa-print"></i> Generate PDF <i class="fas fa-print"></i> {{trans('lang.generate_pdf')}}
</a> <div class="btn-group"> </a> <div class="btn-group">
<button type="button" class="btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown" id="d1"><i class="fas fa-exchange-alt" style="color:teal;" id="hidespin"> </i><i class="fa fa-spinner fa-spin" style="color:teal; display:none;" id="spin"></i> <button type="button" class="btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown" id="d1"><i class="fas fa-exchange-alt" style="color:teal;" id="hidespin"> </i><i class="fa fa-spinner fa-spin" style="color:teal; display:none;" id="spin"></i>
{!! Lang::get('lang.change_status') !!} <span class="caret"></span> {!! Lang::get('lang.change_status') !!} <span class="caret"></span>
@@ -200,7 +201,7 @@ if ($thread->title != "") {
<?php } <?php }
?> ?>
<?php if ($group->can_ban_email == 1) { ?> <?php if ($group->can_ban_email == 1) { ?>
<a href="#" class="dropdown-item" data-toggle="modal" data-target="#banemail"><i class="fas fa-ban" style="color:red;"></i> {!! Lang::get('lang.ban_email') !!}</a> <a href="#" class="dropdown-item" data-toggle="modal" data-target="#banemail"><i class="fas fa-ban" style="color:red;"></i> {{trans('lang.ban_email')}}</a>
<?php <?php
\Illuminate\Support\Facades\Event::dispatch('ticket.details.more.list',[$tickets]); \Illuminate\Support\Facades\Event::dispatch('ticket.details.more.list',[$tickets]);
} }
@@ -328,7 +329,7 @@ if ($thread->title != "") {
<div class="card-header"> <div class="card-header">
<h3 class="card-title">Actions</h3> <h3 class="card-title">{{trans('lang.action')}}</h3>
</div> </div>
<div class="card-body"> <div class="card-body">
@@ -515,7 +516,7 @@ if ($thread->title != "") {
<div class="card card-light"> <div class="card card-light">
<div class="card-header"> <div class="card-header">
<h3 class="card-title">Ticket Conversation</h3> <h3 class="card-title">{{trans('lang.ticket_conversation')}}</h3>
</div> </div>
<div class="card-body"> <div class="card-body">
@@ -923,7 +924,7 @@ if ($thread->title != "") {
<div class="modal-footer justify-content-between"> <div class="modal-footer justify-content-between">
<button type="button" class="btn btn-default" data-dismiss="modal" id="dismis2">{!! Lang::get('lang.close') !!}</button> <button type="button" class="btn btn-default" data-dismiss="modal" id="dismis2">{!! Lang::get('lang.close') !!}</button>
<button id="ban" type="button" class="btn btn-warning" >{!! Lang::get('lang.ban_email') !!}</button> <button id="ban" type="button" class="btn btn-warning" >{{trans('lang.ban_email')}}</button>
</div> </div>
</div><!-- /.modal-content --> </div><!-- /.modal-content -->
</div><!-- /.modal-dialog --> </div><!-- /.modal-dialog -->
@@ -1829,17 +1830,21 @@ if ($thread->title != "") {
$("#t1").hide(); $("#t1").hide();
$("#show3").show(); $("#show3").show();
$('html, body').animate({ $('html, body').animate({
scrollTop: $("#form3").offset().top scrollTop: $("#inboxactions").offset().top
}, 500); }, 500);
}, },
success: function(json) { success: function(json) {
$("#show3").hide();
$("#t1").show();
setTimeout(function () {
location.reload();
}, 4000);
$("#alert21").show(); $("#alert21").show();
$('#message-success2').html(json.result.success); $('#message-success2').html(json.result.success);
location.reload();
// $('html, body').animate({ scrollTop: $("#heading").offset().top }, 500);
}, },
error: function(json) {
error: function(json) {
$("#show3").hide(); $("#show3").hide();
$("#t1").show(); $("#t1").show();
var res = ""; var res = "";
@@ -1851,6 +1856,7 @@ if ($thread->title != "") {
} }
}) })
return false; return false;
}); });
// Surrender // Surrender
$('#Surrender').on('click', function() { $('#Surrender').on('click', function() {
@@ -2152,7 +2158,7 @@ echo $ticket_data->title;
// $("#alert21").show(); // $("#alert21").show();
// $('#message-success2').html(message); // $('#message-success2').html(message);
$('#replybtn').attr('disabled', false); $('#replybtn').attr('disabled', false);
// setInterval(function(){$("#alert21").hide(); },8000); // setInterval(function(){$("#alert21").hide(); },8000);
} else if (response == 1 || response == 4){ } else if (response == 1 || response == 4){
// alert(response); // alert(response);
// var message = "{{Lang::get('lang.access-ticket')}}"+locktime/(60*1000) // var message = "{{Lang::get('lang.access-ticket')}}"+locktime/(60*1000)

View File

@@ -93,7 +93,7 @@ class="nav-link active"
</div> </div>
<div class="card-body"> <div class="card-body">
{!!$table->render('vendor.Chumper.template')!!} {!!$table->render('vendor.Chumper.template')!!}
{!! $table->script('vendor.Chumper.user-javascript') !!} {!! $table->script('vendor.Chumper.user-javascript') !!}

View File

@@ -1296,9 +1296,9 @@ class="nav-link active"
</div> </div>
<div class="modal-body"> <div class="modal-body">
What should be done with content owned by this user?</br>
<p>{!! Lang::get('lang.what_should_be_done_with_content_owned_by_this_user') !!}?</p>
<br>
<?php $user = App\User::where('id', $users->id)->first(); ?> <?php $user = App\User::where('id', $users->id)->first(); ?>
@if($user->role == 'agent') @if($user->role == 'agent')
{!! Form::label('delete_all_content',Lang::get('lang.delete_all_content')) !!} <span class="text-red"> *</span> {!! Form::label('delete_all_content',Lang::get('lang.delete_all_content')) !!} <span class="text-red"> *</span>

View File

@@ -83,7 +83,7 @@ class="nav-item menu-open"
<div class="form-group col-sm-12 {{ $errors->has('description') ? 'has-error' : '' }}"> <div class="form-group col-sm-12 {{ $errors->has('description') ? 'has-error' : '' }}">
{!! Form::label('description',Lang::get('lang.description')) !!} {!! Form::label('description',Lang::get('lang.description')) !!}
<span class="text-red"> *</span>
<div class="form-group" style="background-color:white"> <div class="form-group" style="background-color:white">
{!! Form::textarea('description',null,['class' => 'form-control color','size' => '110x15','id'=>'myNicEditor','placeholder'=>Lang::get('lang.enter_the_description')]) !!} {!! Form::textarea('description',null,['class' => 'form-control color','size' => '110x15','id'=>'myNicEditor','placeholder'=>Lang::get('lang.enter_the_description')]) !!}
</div> </div>

View File

@@ -35,7 +35,7 @@ class="nav-item menu-open"
@section('content') @section('content')
{!! Form::model($page,['url' => 'page/'.$page->slug, 'method' => 'PATCH','files'=>true]) !!} {!! Form::model($page,['url' => 'page/'.$page->id, 'method' => 'PATCH','files'=>true]) !!}
@if(Session::has('errors')) @if(Session::has('errors'))
<?php //dd($errors); ?> <?php //dd($errors); ?>
@@ -130,7 +130,7 @@ class="nav-item menu-open"
</div> </div>
<div class="card-footer"> <div class="card-footer">
{!! Form::submit(Lang::get('lang.publish'),['class'=>'btn btn-primary'])!!} {!! Form::submit(Lang::get('lang.publish'),['class'=>'btn btn-primary'])!!}
</div> </div>
</div> </div>

View File

@@ -310,7 +310,7 @@
class="img-size-50"> class="img-size-50">
</li> </li>
<li class="dropdown-footer"><a class="text-dark" href="{{ url('notifications-list')}}">View all</a> <li class="dropdown-footer"><a class="text-dark" href="{{ url('notifications-list')}}">{{trans('lang.view_all')}}</a>
</ul> </ul>
</div> </div>
</li> </li>
@@ -445,6 +445,7 @@
<li class="nav-header">{!! Lang::get('lang.Departments') !!}</li> <li class="nav-header">{!! Lang::get('lang.Departments') !!}</li>
<?php <?php
$flattened = $department->flatMap(function ($values) { $flattened = $department->flatMap(function ($values) {
return $values->keyBy('status'); return $values->keyBy('status');
@@ -472,7 +473,7 @@
<a href="#" @if($dept2 === $name) @yield('ticket-bar') @endif class="nav-link"> <a href="#" @if($dept2 === $name) @yield('ticket-bar') @endif class="nav-link">
<i class="nav-icon fas fa-folder-open"></i> <i class="nav-icon fas fa-folder-open"></i>
<p>{!! $name !!}<i class="right fas fa-angle-left"></i></p> <p>{!!trans('lang.'.strtolower($name))!!}<i class="right fas fa-angle-left"></i></p>
</a> </a>
@foreach($statuses as $status) @foreach($statuses as $status)
@@ -483,7 +484,7 @@
<li class="nav-item"> <li class="nav-item">
<a href="{!! url('tickets?departments='.$name.'&status='.$dept->get($status)->status) !!}" @if($status2 == $dept->get($status)->status && $dept2 === $name) @yield('inbox') @endif class="nav-link"> <a href="{!! url('tickets?departments='.$name.'&status='.$dept->get($status)->status) !!}" @if($status2 == $dept->get($status)->status && $dept2 === $name) @yield('inbox') @endif class="nav-link">
<i class="far fa-circle nav-icon"></i> <i class="far fa-circle nav-icon"></i>
<p>{!!$dept->get($status)->status !!}</p> <p>{!!trans('lang.'.strtolower($dept->get($status)->status)) !!}</p>
<small class="right badge badge-success">{{$dept->get($status)->count}}</small> <small class="right badge badge-success">{{$dept->get($status)->count}}</small>
</a> </a>
</li> </li>

View File

@@ -9,7 +9,7 @@
@stop @stop
@section('sidebar') @section('sidebar')
<li class="nav-header">KNOWLEDGE BASE</li> <li class="nav-header">{{strtoupper(trans('lang.knowledge_base'))}}</li>
<li @yield('category-menu-parent') class="nav-item"> <li @yield('category-menu-parent') class="nav-item">

View File

@@ -138,7 +138,8 @@ class="nav-item active"
<td class="mailbox-priority"><spam>{{$priority->priority}}</spam></td> <td class="mailbox-priority"><spam>{{$priority->priority}}</spam></td>
<td class="mailbox-last-reply" style="color: {!! $rep !!}">{!! $username !!}</td> <td class="mailbox-last-reply" style="color: {!! $rep !!}">{!! $username !!}</td>
<td class="mailbox-last-activity">{!! $title->updated_at !!}</td> <?php $updated = $title->updated_at ?>
<td class="mailbox-last-activity">{!! UTC::usertimezone($updated) !!}</td>
<?php $status = App\Model\helpdesk\Ticket\Ticket_Status::where('id', '=', $ticket->status)->first(); ?> <?php $status = App\Model\helpdesk\Ticket\Ticket_Status::where('id', '=', $ticket->status)->first(); ?>
<td class="mailbox-date">{!! $status->name !!}</td> <td class="mailbox-date">{!! $status->name !!}</td>
</tr> </tr>

View File

@@ -1,174 +1,265 @@
@extends('themes.default1.client.layout.client') @extends('themes.default1.client.layout.client')
@section('content') @section('content')
<?php <?php
$thread = App\Model\helpdesk\Ticket\Ticket_Thread::where('ticket_id', '=', $tickets->id)->first(); $thread = App\Model\helpdesk\Ticket\Ticket_Thread::where('ticket_id', '=', $tickets->id)->first();
//$user = App\User::where('id','=',$id1)->first(); //$user = App\User::where('id','=',$id1)->first();
?> ?>
<style type="text/css">
.caret {
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-top: 4px solid;
display: inline-block;
height: 0;
margin-left: 2px;
vertical-align: middle;
width: 0;
}
.mailbox-attachments li{float:left;width:200px;border:1px solid #eee;margin-bottom:10px;margin-right:10px}
.mailbox-attachment-name{font-weight:bold;color:#666;word-break: break-word;}
.mailbox-attachment-icon,.mailbox-attachment-info,.mailbox-attachment-size{display:block}
.mailbox-attachment-info{padding:10px;background:#f4f4f4;height: auto;}
.mailbox-attachment-size{color:#999;font-size:12px}
.mailbox-attachment-icon{text-align:center;font-size:65px;color:#666;padding:20px 10px}
.mailbox-attachment-icon.has-img{padding:0}
.mailbox-attachment-icon.has-img>img{max-width:100%;height:auto}
#clearfix {display: inline-block!important;list-style-type: none!important;}
.ml40 {margin-left: -40px!important;}
</style>
<!-- Main content --> <!-- Main content -->
<div class="box box-primary"> <div id="content" class="site-content col-sm-12">
<div class="box-header">
<div class="row">
<div class="col-md-9">
<section class="content-header"><h3 class="box-title"><i class="fa fa-user"> </i> {{$thread->title}} </h3> ( {{$tickets->ticket_number}} )
</section>
</div>
<div class="col-md-3">
<div class="pull-right">
<!-- <button type="button" class="btn btn-default"><i class="fa fa-edit" style="color:green;"> </i> Edit</button> -->
{{-- <button type="button" class="btn btn-default"><i class="fa fa-print" style="color:blue;"> </i> {!! link_to_route('ticket.print','Print',[$tickets->id]) !!}</button> --}}
<!-- </div> -->
<div class="btn-group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"><i class="fa fa-exchange" style="color:teal;"> </i>
{!! Lang::get('lang.change_status') !!} <span class="caret"></span>
</button>
<?php $statuses = \App\Model\helpdesk\Ticket\Ticket_Status::all(); ?>
<ul class="dropdown-menu" id='cc_page'> <article class="hentry">
@foreach($statuses as $status) <header class="entry-header">
<?php if ($status->name == 'Deleted' or $status->name == 'Accepted') continue; ?> <div class="row">
<li class="search_r"><a href="#" onclick="changeStatus({!! $status->id !!})"><i class="{!! $status->icon_class !!}" style="color:#FFD600;"> </i>{!! $status->name !!}</a>
</li>
@endforeach
</ul> <div class="col-sm-9">
</div>
<h3 class="entry-title"><i class="fas fa-ticket-alt"> </i> {{$thread->title}}
<small> ( {{$tickets->ticket_number}} ) </small>
</h3>
</div>
<div class="col-sm-3 text-right">
<div>
<button class="btn btn-light dropdown-toggle" type="button" id="dropdownMenuButton" data-bs-toggle="dropdown" aria-expanded="false" style="background-color: whitesmoke">
<i class="fas fa-exchange-alt" style="color:teal;"> </i>
{!! Lang::get('lang.change_status') !!}
<span class="caret"></span>
</button>
<?php $statuses = \App\Model\helpdesk\Ticket\Ticket_Status::all(); ?>
<div class="dropdown-menu">
<a class="dropdown-item" href="#" id="open">
<i class="fas fa-folder-open" style="color:#FFD600;"> </i> {!! Lang::get('lang.open') !!}
</a>
<a class="dropdown-item" href="#" id="close">
<i class="fas fa-check" style="color:#15F109;"> </i> {!! Lang::get('lang.close') !!}
</a>
<a class="dropdown-item" href="#" id="resolved">
<i class="fas fa-check-circle " style="color:#0EF1BE;"> </i> {!! Lang::get('lang.resolved') !!}
</a>
</div>
</div>
{!! Form::close() !!} {!! Form::close() !!}
</div> </div>
</div> </div>
</div>
<br/> <br/>
<div class="row"> <div class="row">
<div class="col-md-12">
<div class="alert alert-success alert-dismissable" id="alert11" style="display:none;"> <div class="col-md-12 mb-1">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
<i class="fa fa-check-circle"></i> <span id="message-success1"> <div class="ticketratings float-right">
</span>
</div> <table>
<div class="ticketratings pull-right">
<table><tbody> <tbody>
<?php $ratings = App\Model\helpdesk\Ratings\Rating::orderby('display_order')->get(); ?> <?php $ratings = App\Model\helpdesk\Ratings\Rating::orderby('display_order')->get(); ?>
<form id="foo"> <form id="foo">
{!! csrf_field() !!} {!! csrf_field() !!}
@foreach($ratings as $rating) @foreach($ratings as $rating)
@if($rating->rating_area == 'Helpdesk Area') @if($rating->rating_area == 'Helpdesk Area')
<?php <?php
$rating_value = App\Model\helpdesk\Ratings\RatingRef::where('rating_id', '=', $rating->id)->where('ticket_id', '=', $tickets->id)->first(); $rating_value = App\Model\helpdesk\Ratings\RatingRef::where('rating_id', '=', $rating->id)->where('ticket_id', '=', $tickets->id)->first();
if ($rating_value == null) { if ($rating_value == null) {
$ratingval = '0'; $ratingval = '0';
} else { } else {
$ratingval = $rating_value->rating_value; $ratingval = $rating_value->rating_value;
} }
?> ?>
<tr>
<th><div class="ticketratingtitle">{!! $rating->name !!} &nbsp;</div></th>&nbsp <tr>
<td>
<?php for ($i = 1; $i <= $rating->rating_scale; $i++) { ?> <th><div class="ticketratingtitle">{!! $rating->name !!} &nbsp;</div></th>&nbsp
<input type="radio" class="star" id="star5" name="{!! $rating->name !!}" value="{!! $i !!}"<?php echo ($ratingval == $i) ? 'checked' : '' ?> />
<?php } ?> <td>
</td>
</tr> <?php for ($i = 1; $i <= $rating->rating_scale; $i++) { ?>
@endif <input type="radio" class="star" id="star5" name="{!! $rating->name !!}" value="{!! $i !!}"<?php echo ($ratingval == $i) ? 'checked' : '' ?> />
<?php } ?>
</td>
</tr>
@endif
@endforeach @endforeach
</form></tbody> </table> </form>
</tbody>
</table>
</div> </div>
</div> </div>
</div> </div>
</div> </header>
<div class="box-body" style="margin-bottom:-10px">
<div class="row"> <div class="entry-content clearfix">
<div id="loader" style="display:none;">
<div class="col-xs-5"> <div class="col-md-12 offset-md-5" id="loader" style="display:none;">
</div>
<div class="col-xs-1"> <img src="{{asset("lb-faveo/media/images/gifloader.gif")}}"><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
<img src="{{asset("lb-faveo/media/images/gifloader.gif")}}"><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
</div>
<div class="col-xs-6">
</div>
</div> </div>
<section class="content" id="refresh" style="margin-bottom:-10px;margin-top:-10px">
<div class="col-md-12"> <div id="refresh">
<div>
<?php <?php
$priority = App\Model\helpdesk\Ticket\Ticket_Priority::where('priority_id', '=', $tickets->priority_id)->first(); $priority = App\Model\helpdesk\Ticket\Ticket_Priority::where('priority_id', '=', $tickets->priority_id)->first();
?> ?>
<div class="callout callout-default "> <div class="alert alert-secondary">
<div class="row"> <div class="row">
<div class="col-md-3"> <div class="col-md-3">
<?php <?php
$sla = $tickets->sla; $sla = $tickets->sla;
$SlaPlan = App\Model\helpdesk\Manage\Sla_plan::where('id', '=', 1)->first(); $SlaPlan = App\Model\helpdesk\Manage\Sla_plan::where('id', '=', $sla)->first();
?> ?>
<b>{!! Lang::get('lang.sla_plan') !!}: {{$SlaPlan->grace_period}} </b> <b>{!! Lang::get('lang.sla_plan') !!}: {{$SlaPlan->grace_period}} </b>
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
<b>{!! Lang::get('lang.created_date') !!}: </b> {{ UTC::usertimezone($tickets->created_at) }} <b>{!! Lang::get('lang.created_date') !!}: </b> {{ UTC::usertimezone($tickets->created_at) }}
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
<b>{!! Lang::get('lang.due_date') !!}: </b> <b>{!! Lang::get('lang.due_date') !!}: </b>
<?php <?php
$time = $tickets->created_at; $time = $tickets->created_at;
$time = date_create($time); $time = date_create($time);
date_add($time, date_interval_create_from_date_string($SlaPlan->grace_period)); date_add($time, date_interval_create_from_date_string($SlaPlan->grace_period));
echo UTC::usertimezone(date_format($time, 'd/m/Y H:i:s')); echo UTC::usertimezone(date_format($time, 'Y-m-d H:i:s'));
?> ?>
</div> </div>
<div class="col-md-3"> <div class="col-md-3">
<?php $response = App\Model\helpdesk\Ticket\Ticket_Thread::where('ticket_id', '=', $tickets->id)->where('is_internal', '=', 0)->get(); ?> <?php $response = App\Model\helpdesk\Ticket\Ticket_Thread::where('ticket_id', '=', $tickets->id)->where('is_internal', '=', 0)->get(); ?>
@foreach($response as $last) @foreach($response as $last)
<?php $ResponseDate = $last->created_at; ?> <?php $ResponseDate = $last->created_at; ?>
@endforeach @endforeach
<b>{!! Lang::get('lang.last_response') !!}: </b> {{ UTC::usertimezone($ResponseDate)}} <b>{!! Lang::get('lang.last_response') !!}: </b> {{ UTC::usertimezone($ResponseDate)}}
</div> </div>
</div> </div>
</div> </div>
</div>
<div class="col-md-6">
<table class="table table-hover">
<!-- <tr><th></th><th></th></tr> -->
<tr><td><b>{!! Lang::get('lang.status') !!}:</b></td> <?php $status = App\Model\helpdesk\Ticket\Ticket_Status::where('id', '=', $tickets->status)->first(); ?>
@if($status->id == 1)
<td title="{{$status->properties}}" style="color:orange">{{$status->name}}</td></tr>
@elseif($status->id == 2)
<td title="{{$status->properties}}" style="color:green">{{$status->name}}</td></tr>
@elseif($status->id == 3)
<td title="{{$status->properties}}" style="color:green">{{$status->name}}</td></tr>
@endif
<tr><td><b>{!! Lang::get('lang.priority') !!}:</b></td> <?php $priority = App\Model\helpdesk\Ticket\Ticket_Priority::where('priority_id', '=', $tickets->priority_id)->first(); ?>
@if($priority->priority_id == 1)
<td title="{{$priority->priority_desc}}" style="color:green">{{$priority->priority_desc}}</td>
@elseif($priority->priority_id == 2)
<td title="{{$priority->priority_desc}}" style="color:orange">{{$priority->priority_desc}}</td>
@elseif($priority->priority_id == 3)
<td title="{{$priority->priority_desc}}" style="color:red">{{$priority->priority_desc}}</td>
@endif
</tr>
<tr><td><b>{!! Lang::get('lang.department') !!}:</b></td>
<?php
$help_topic = App\Model\helpdesk\Manage\Help_topic::where('id', '=', $tickets->help_topic_id)->first();
$department = App\Model\helpdesk\Agent\Department::where('id', '=', $help_topic->department)->first();
?>
<td title="{{ $department->name }}">{!! $department->name !!}</td></tr>
</table>
<!-- </div> -->
</div> </div>
<div class="col-md-6">
<!-- <div class="callout callout-success"> --> <div class="row">
<table class="table table-hover">
<!-- <tr><th></th><th></th></tr> --> <div class="col-md-6">
<tr><td><b>{!! Lang::get('lang.help_topic') !!}:</b></td> <?php $help_topic = App\Model\helpdesk\Manage\Help_topic::where('id', '=', $tickets->help_topic_id)->first(); ?><td title="{{$help_topic->topic}}">{{$help_topic->topic}}</td></tr>
<tr><td><b>{!! Lang::get('lang.last_message') !!}:</b></td> <td>{{ucwords($last->poster)}}</td></tr> <table class="table">
</table>
</div> <tr>
<!-- </div> -->
</section> <td><b>{!! Lang::get('lang.status') !!}:</b></td>
</div>
<?php $status = App\Model\helpdesk\Ticket\Ticket_Status::where('id', '=', $tickets->status)->first(); ?>
@if($status->id == 1)
<td title="{{$status->properties}}" style="color:orange">{{$status->name}}</td>
@elseif($status->id == 2)
<td title="{{$status->properties}}" style="color:green">{{$status->name}}</td>
@elseif($status->id == 3)
<td title="{{$status->properties}}" style="color:green">{{$status->name}}</td>
@endif
</tr>
<tr>
<td><b>{!! Lang::get('lang.priority') !!}:</b></td>
<?php $priority = App\Model\helpdesk\Ticket\Ticket_Priority::where('priority_id', '=', $tickets->priority_id)->first(); ?>
@if($priority->priority_id == 1)
<td title="{{$priority->priority_desc}}" style="color:green">{{$priority->priority_desc}}</td>
@elseif($priority->priority_id == 2)
<td title="{{$priority->priority_desc}}" style="color:orange">{{$priority->priority_desc}}</td>
@elseif($priority->priority_id == 3)
<td title="{{$priority->priority_desc}}" style="color:red">{{$priority->priority_desc}}</td>
@endif
</tr>
<tr>
<td><b>{!! Lang::get('lang.department') !!}:</b></td>
<?php
$help_topic = App\Model\helpdesk\Manage\Help_topic::where('id', '=', $tickets->help_topic_id)->first();
$department = App\Model\helpdesk\Agent\Department::where('id', '=', $help_topic->department)->first();
?>
<td title="{{ $department->name }}">{!! $department->name !!}</td>
</tr>
</table>
</div>
<div class="col-md-6">
<table class="table">
<tr>
<td><b>{!! Lang::get('lang.help_topic') !!}:</b></td>
<?php $help_topic = App\Model\helpdesk\Manage\Help_topic::where('id', '=', $tickets->help_topic_id)->first(); ?>
<td title="{{$help_topic->topic}}">{{$help_topic->topic}}</td>
</tr>
<tr>
<td><b>{!! Lang::get('lang.last_message') !!}:</b></td>
<td>{{ucwords($last->poster)}}</td>
</tr>
</table>
</div>
</div> </div>
</div> </div>
<div class="comments-area mb-0" id="comments">
<?php <?php
$conversations = App\Model\helpdesk\Ticket\Ticket_Thread::where('ticket_id', '=', $tickets->id)->where('is_internal', '=', 0)->paginate(10); $conversations = App\Model\helpdesk\Ticket\Ticket_Thread::where('ticket_id', '=', $tickets->id)->where('is_internal', '=', 0)->paginate(10);
foreach ($conversations as $conversation) { foreach ($conversations as $conversation) {
@@ -179,12 +270,13 @@ foreach ($conversations as $conversation) {
$time = $ConvDate[1]; $time = $ConvDate[1];
$time = substr($time, 0, -3); $time = substr($time, 0, -3);
if (isset($data) && $date == $data) { if (isset($data) && $date == $data) {
} else { } else {
$data = $ConvDate[0]; $data = $ConvDate[0];
} }
$role = App\User::where('id', '=', $conversation->user_id)->first(); $role = App\User::where('id', '=', $conversation->user_id)->first();
$attachment = App\Model\helpdesk\Ticket\Ticket_attachments::where('thread_id', '=', $conversation->id)->first(); $attachment = App\Model\helpdesk\Ticket\Ticket_attachments::where('thread_id', '=', $conversation->id)->first();
if ($attachment == null) { if ($attachment == null) {
$body = $conversation->body; $body = $conversation->body;
@@ -193,9 +285,9 @@ foreach ($conversations as $conversation) {
$attachments = App\Model\helpdesk\Ticket\Ticket_attachments::where('thread_id', '=', $conversation->id)->orderBy('id', 'DESC')->get(); $attachments = App\Model\helpdesk\Ticket\Ticket_attachments::where('thread_id', '=', $conversation->id)->orderBy('id', 'DESC')->get();
foreach ($attachments as $attachment) { foreach ($attachments as $attachment) {
if ($attachment->type == 'pdf') { if ($attachment->type == 'pdf') {
} elseif ($attachment->type == 'docx') { } elseif ($attachment->type == 'docx') {
} else { } else {
$image = @imagecreatefromstring($attachment->file); $image = @imagecreatefromstring($attachment->file);
ob_start(); ob_start();
@@ -209,7 +301,7 @@ foreach ($conversations as $conversation) {
$start = "<head>"; $start = "<head>";
$end = "</head>"; $end = "</head>";
if (strpos($string, $start) == false || strpos($string, $start) == false) { if (strpos($string, $start) == false || strpos($string, $start) == false) {
} else { } else {
$ini = strpos($string, $start); $ini = strpos($string, $start);
$ini += strlen($start); $ini += strlen($start);
@@ -225,7 +317,7 @@ foreach ($conversations as $conversation) {
$start = "<head>"; $start = "<head>";
$end = "</head>"; $end = "</head>";
if (strpos($string, $start) == false || strpos($string, $start) == false) { if (strpos($string, $start) == false || strpos($string, $start) == false) {
} else { } else {
$ini = strpos($string, $start); $ini = strpos($string, $start);
$ini += strlen($start); $ini += strlen($start);
@@ -237,8 +329,9 @@ foreach ($conversations as $conversation) {
?> ?>
<ol class="comment-list" > <ol class="comment-list" >
<li class="comment"> <li class="comment">
<article class="comment-body"> <article class="comment-body">
<footer class="comment-meta"<?php if ($role->role == "user") { ?> style="background-color: hsla(100, 100%, 51%, 0.15)" <?php } else { ?> style="background-color:#FFFCB3" <?php } ?> > <footer class="comment-meta"<?php if ($role->role == "user") { ?> style="background-color: hsla(100, 100%, 51%, 0.15)" <?php } else { ?> style="background-color:#FFFCB3" <?php } ?> >
<div class="comment-author"> <div class="comment-author">
<img src="{{$role->profile_pic}}"alt="" height="50" width="50" class="avatar" <?php if ($role->role == "user") { ?>style="box-shadow: 0 1px 3px #00FF26;" <?php } else { ?> style="box-shadow: 0 1px 3px #FFEC00;" <?php } ?> > <img src="{{$role->profile_pic}}"alt="" height="50" width="50" class="avatar" <?php if ($role->role == "user") { ?>style="box-shadow: 0 1px 3px #00FF26;" <?php } else { ?> style="box-shadow: 0 1px 3px #FFEC00;" <?php } ?> >
@@ -247,7 +340,7 @@ foreach ($conversations as $conversation) {
@else @else
<b class="fn"><a href="#" rel="external" class="url">{{$role->first_name." ".$role->last_name}}</a></b> <b class="fn"><a href="#" rel="external" class="url">{{$role->first_name." ".$role->last_name}}</a></b>
<div class="ticketratings pull-right"> <table><tbody> <div class="ticketratings pull-right"> <table><tbody>
@foreach($ratings as $rating) @foreach($ratings as $rating)
@if($rating->rating_area == 'Comment Area') @if($rating->rating_area == 'Comment Area')
<?php <?php
$rating_value = App\Model\helpdesk\Ratings\RatingRef::where('rating_id', '=', $rating->id)->where('thread_id', '=', $conversation->id)->first(); $rating_value = App\Model\helpdesk\Ratings\RatingRef::where('rating_id', '=', $rating->id)->where('thread_id', '=', $conversation->id)->first();
@@ -269,7 +362,7 @@ foreach ($conversations as $conversation) {
<input type="radio" class="star" id="star3" name="rating" value="3"<?php echo ($tickets->rating == '3') ? 'checked' : '' ?>/> <input type="radio" class="star" id="star3" name="rating" value="3"<?php echo ($tickets->rating == '3') ? 'checked' : '' ?>/>
<input type="radio" class="star" id="star2" name="rating" value="4"<?php echo ($tickets->rating == '4') ? 'checked' : '' ?>/> <input type="radio" class="star" id="star2" name="rating" value="4"<?php echo ($tickets->rating == '4') ? 'checked' : '' ?>/>
<input type="radio" class="star" id="star1" name="rating" value="5"<?php echo ($tickets->rating == '5') ? 'checked' : '' ?> />--> <input type="radio" class="star" id="star1" name="rating" value="5"<?php echo ($tickets->rating == '5') ? 'checked' : '' ?> />-->
</td> </td>
</tr> </tr>
</form> </form>
@endif @endif
@@ -325,7 +418,7 @@ foreach ($conversations as $conversation) {
</ul> </ul>
</div> </div>
</article><!-- .comment-body --> </article><!-- .comment-body -->
</li><!-- .comment --> </li><!-- .comment -->
</ol> </ol>
<?php <?php
@@ -335,7 +428,7 @@ foreach ($conversations as $conversation) {
<?php } <?php }
?> ?>
<div class="pull-right" style="margin-top:-30px;margin-bottom:-30px"> <div class="pull-right" style="margin-top:-30px;margin-bottom:-30px">
<?php echo $conversations->setPath(route('show.ticket', ['id' => $tickets->id, 'token' => $token]))->render(); ?> <?php echo $conversations->setPath(route('show.ticket', ['ids' => $tickets->id, 'code' => $token]))->render(); ?>
</div> </div>
<br/><br/> <br/><br/>
@if(Session::has('success1')) @if(Session::has('success1'))
@@ -355,48 +448,77 @@ foreach ($conversations as $conversation) {
</div> </div>
@endif @endif
<?php $id2 = $tickets->id; ?> <?php $id2 = $tickets->id; ?>
<div id="respond" class="comment-respond form-border">
<h3 id="reply-title" class="comment-reply-title section-title"><i class="line" style="border-color: rgb(0, 154, 186);"></i>{!! Lang::get('lang.leave_a_reply') !!}</h3> <div id="respond" class="comment-respond form-border">
{!! Form::open(['url'=>'post-ticket-reply/'.$tickets->id.'#formabc']) !!}
<div class="row"> <h3 id="reply-title" class="comment-reply-title section-title"><i class="line"></i>{!! Lang::get('lang.leave_a_reply') !!}</h3>
<div class="form-group"> @if(Auth::user())
<div class="col-md-12"> {!! Form::open(['url'=>'post/reply/'.$id2.'#formabc']) !!}
<div class="form-group "> @else
<textarea class="form-control" name="comment" cols="30" rows="8"></textarea> {!! Form::open(['url'=>'post-ticket-reply/'.$tickets->id.'#formabc']) !!}
@endif
<div class="row">
<div class="col-md-12">
<div class="form-group " style="background-color: white">
<textarea class="form-control" id="reply-input" name="comment" cols="30" rows="8" ></textarea>
</div>
</div>
</div>
<div class="text-right">
<button type="submit" onClick="return checkFunction();" class="btn btn-custom btn-lg" style="background-color: #009aba; hov: #00c0ef; color: #fff">{!! Lang::get('lang.post_comment') !!}</button>
</div>
{!! Form::close() !!}
</div> </div>
</div> </div>
</div> </div>
</div> </article>
<div class="text-right">
<button type="submit" class="btn btn-custom btn-lg">{!! Lang::get('lang.post_comment') !!}</button>
</div>
{!! Form::close() !!}
</div> </div>
<script type="text/javascript"> <script type="text/javascript">
// $("#cc_page").on('click', '.search_r', function() {
// var search_r = $('a', this).attr('id'); $("#cc_page").on('click', '.search_r', function () {
// $.ajax({ var search_r = $('a', this).attr('id');
// type: "GET", $.ajax({
// url: "../ticket/status/{{$tickets->id}}/" + search_r, type: "GET",
// beforeSend: function() { url: "../../show/change-status/"+ id +"/"+ {!! $tickets->id !!},
// $("#refresh").hide(); beforeSend: function () {
// $("#loader").show(); $("#refresh").hide();
// }, $("#loader").show();
// success: function(response) { },
// $("#refresh").load("../show-ticket/{!! $tickets->id !!}/{!! $token !!} #refresh"); success: function (response) {
// $("#refresh").show(); $("#refresh").load("../show-ticket/{!! $tickets->id !!}/{!! $token !!} #refresh");
// $("#loader").hide(); $("#refresh").show();
// var message = response; $("#loader").hide();
// $("#alert11").show(); var message = response;
// $('#message-success1').html(message); $("#alert11").show();
// setInterval(function() { $('#message-success1').html(message);
// $("#alert11").hide(); setInterval(function () {
// }, 4000); $("#alert11").hide();
// } }, 4000);
// }); }
// return false; });
// }); return false;
});
$(function() {
//Add text editor
$("textarea").summernote({
height: 300,
tabsize: 2,
toolbar: [
['style', ['bold', 'italic', 'underline', 'clear']],
['font', ['strikethrough', 'superscript', 'subscript']],
['fontsize', ['fontsize']],
['color', ['color']],
['para', ['ul', 'ol', 'paragraph']],
['height', ['height']]
]
});
});
$(document).ready(function() { $(document).ready(function() {
var Data = $('input[name="rating"]:checked').val(); var Data = $('input[name="rating"]:checked').val();
@@ -473,5 +595,97 @@ foreach ($conversations as $conversation) {
}) })
return false; return false;
} }
jQuery(document).ready(function () {
// Close a ticket
$('#close').on('click', function (e) {
$.ajax({
type: "POST",
url: "../../show/close/{!! $tickets->id !!}",
data:{"_token": "{{ csrf_token() }}"},
beforeSend: function () {
$("#refresh").hide();
$("#loader").show();
},
success: function (response) {
$("#refresh").load("../../show-ticket/{!! $tickets->id !!}/{!! $token !!} #refresh");
$("#refresh").show();
$("#loader").hide();
// $("#d1").trigger("click");
// var message = "Success! Your Ticket have been Closed";
// $("#alert11").show();
// $('#message-success1').html(message);
// setInterval(function(){
// $("#alert11").hide();
// setTimeout(function() {
// var link = document.querySelector('#load-inbox');
// if(link) {
// link.click();
// }
// }, 500);
// },2000);
}
})
return false;
});
// Resolved a ticket
$('#resolved').on('click', function (e) {
$.ajax({
type: "POST",
url: "../../show/resolve/{!! $tickets->id !!}",
data:{"_token": "{{ csrf_token() }}"},
beforeSend: function () {
$("#refresh").hide();
$("#loader").show();
},
success: function (response) {
$("#refresh").load("../../show-ticket/{!! $tickets->id !!}/{!! $token !!} #refresh");
$("#refresh").show();
$("#loader").hide();
var message = "Success! Your Ticket have been Resolved";
$("#alert11").show();
$('#message-success1').html(message);
setInterval(function () {
$("#alert11").hide();
setTimeout(function () {
var link = document.querySelector('#load-inbox');
if (link) {
link.click();
}
}, 500);
}, 2000);
}
})
return false;
});
// Open a ticket
$('#open').on('click', function (e) {
$.ajax({
type: "POST",
url: "../../show/open/{!! $tickets->id !!}",
data:{"_token": "{{ csrf_token() }}"},
beforeSend: function () {
$("#refresh").hide();
$("#loader").show();
},
success: function (response) {
$("#refresh").load("../../show-ticket/{!! $tickets->id !!}/{!! $token !!} #refresh");
$("#refresh").show();
$("#loader").hide();
var message = "Success! Your Ticket have been Opened";
$("#alert11").show();
$('#message-success1').html(message);
setInterval(function () {
$("#alert11").hide();
}, 4000);
}
})
return false;
});
});
</script> </script>
@stop @stop

View File

@@ -138,7 +138,7 @@ $category_id = $all->pluck('category_id')->toArray();
<div class="col-md-4" style="border:#f4f4f4;"> <div class="col-md-4" style="border:#f4f4f4;">
<div data-v-43e70d45="" class="banner-wrapper user-data text-center clearfix" id="ban_ner" style="border-width: 5px 1px 1px; border-style: solid; border-color: rgb(0, 154, 186); border-image: initial; width: 90%" > <div data-v-43e70d45="" class="banner-wrapper user-data text-center clearfix" id="ban_ner" style="border-width: 5px 1px 1px; border-style: solid; border-color: rgb(0, 154, 186); border-image: initial; width: 90%" >
<img id="user_avatar" src="{{Auth::user()->profile_pic}}" class="avatar" alt="User Image" style="margin-left: 5% "> <img id="user_avatar" src="{{Auth::user()->profile_pic}}" class="avatar" alt="User Image" style="margin-left: 5% ">
<div STYLE="margin-left:5%"><strong>Hello</strong></div> <div STYLE="margin-left:5%"><strong>{{trans('lang.hello')}}</strong></div>
<p class="banner-title ellipsize_first_name h4" STYLE="margin-left: 5%">{{Auth::user()->first_name." ".Auth::user()->last_name}}</p> <p class="banner-title ellipsize_first_name h4" STYLE="margin-left: 5%">{{Auth::user()->first_name." ".Auth::user()->last_name}}</p>
<div class="banner-content" id="dropdown_content"> <div class="banner-content" id="dropdown_content">
<p data-v-43e70d45="">If you are not? </p> <p data-v-43e70d45="">If you are not? </p>
@@ -254,9 +254,22 @@ $category_id = $all->pluck('category_id')->toArray();
$(".form-group").removeClass("has-error"); $(".form-group").removeClass("has-error");
// Perform your custom validation here // Perform your custom validation here
var name = $("#comment-name").val().trim(); var nameElement = $("#comment-name");
var email = $("#comment-email").val().trim(); var emailElement = $("#comment-email");
var comment = $("#comment-comment").val().trim(); var commentElement = $("#comment-comment");
if (nameElement.length > 0) {
var name = nameElement.val().trim();
}
if (emailElement.length > 0) {
var email = emailElement.val().trim();
}
if (commentElement.length > 0) {
var comment = commentElement.val().trim();
}
// Flag to track if there are any errors // Flag to track if there are any errors
var hasErrors = false; var hasErrors = false;

View File

@@ -160,7 +160,11 @@
</ul> </ul>
</li> </li>
<?php $pages = App\Model\kb\Page::where('status', '1')->where('visibility', '1')->get(); <?php
if(!Auth::check() || Auth::user()->role == 'user')
$pages = App\Model\kb\Page::where('status', '1')->where('visibility', '1')->get();
else
$pages = App\Model\kb\Page::where('status', '1')->get();
?> ?>
@if(count($pages)) @if(count($pages))
<li @yield('pages') class="nav-item dropdown"> <li @yield('pages') class="nav-item dropdown">
@@ -191,7 +195,7 @@
<img id="user_avatar" src="{{Auth::user()->profile_pic}}"class="avatar" alt="User Image" height="70" width="70"/> <img id="user_avatar" src="{{Auth::user()->profile_pic}}"class="avatar" alt="User Image" height="70" width="70"/>
<div><strong>Hello</strong></div> <div><strong>{{trans('lang.hello')}}</strong></div>
<p class="banner-title ellipsize_first_name h4">{{Auth::user()->first_name." ".Auth::user()->last_name}}</p> <p class="banner-title ellipsize_first_name h4">{{Auth::user()->first_name." ".Auth::user()->last_name}}</p>
@@ -312,12 +316,12 @@
<div id="header-search" class="site-search clearfix" style="margin-right: 90%; width: 100%"><!-- #header-search --> <div id="header-search" class="site-search clearfix" style="margin-right: 90%; width: 100%"><!-- #header-search -->
{!!Form::open(['route' => 'client.search','class'=>'search-form clearfix'])!!} {!!Form::open(['route' => 'client.search','class'=>'search-form clearfix'])!!}
<div class="form-border" style="z-index: 0;width: 95%;"> <div class="form-border" style="z-index: 0;width: 85%;">
<div class="form-inline"> <div class="form-inline ">
<div class="form-group input-group" style="width: 100%;"> <div class="form-group input-group " style="width: 98% ">
<input type="text" name="s" class="search-field form-control input-lg mr-3" title="Enter search term" placeholder="Have a question? Type your search term here..." required> <input type="text" name="s" class="search-field form-control" title="Enter search term" placeholder="{{trans('lang.have_a_question?_type_your_search_term_here')}}" required="" style="width: 80%">
<span class="input-group-btn"> <span class="input-group-btn">
<button type="submit" class="btn btn-custom btn-md" style="border-color: rgb(0, 192, 239); background-color: rgb(0, 154, 186);">Search</button> <button type="submit" class="btn btn-custom btn-md " style="margin-left: 20% ;background-color: #009aba; hov: #00c0ef; color: #fff ">{{trans('lang.search')}}</button>
</span> </span>
</div> </div>
</div><!----><!----></div> </div><!----><!----></div>

View File

@@ -44,7 +44,7 @@ class="nav-link active"
<h3 class="card-title">{!! Lang::get('lang.list_of_templates_sets') !!}</h3> <h3 class="card-title">{!! Lang::get('lang.list_of_templates_sets') !!}</h3>
<div class="card-tools"> <div class="card-tools">
<button class="btn btn-default btn-tool" data-toggle="modal" data-target="#create" title="Create" id="2create"> <button class="btn btn-default btn-tool" data-toggle="modal" data-target="#create" title="Create" id="2create">
<i class="fas fa-plus"> </i> Create <i class="fas fa-plus"> </i> {{Lang::get('lang.create')}}
</button> </button>
</div> </div>
</div><!-- /.box-header --> </div><!-- /.box-header -->
@@ -134,7 +134,7 @@ class="nav-link active"
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<span>Are you sure you want to Delete ?</span> <span>{{Lang::get('lang.are_you_sure_you_want_to_delete')}}</span>&nbsp;
</div> </div>
<div class="modal-footer justify-content-between"> <div class="modal-footer justify-content-between">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button> <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>

View File

@@ -30,6 +30,29 @@ foreach($segments as $seg){
"sPaginationType": "full_numbers", "sPaginationType": "full_numbers",
"bProcessing": true, "bProcessing": true,
"lengthMenu": [[10, 25, 50, 100, 500], [10, 25, 50, 100, 500]], "lengthMenu": [[10, 25, 50, 100, 500], [10, 25, 50, 100, 500]],
"oLanguage": {
"sEmptyTable": "{!! Lang::get('datatables.sEmptyTable') !!}",
"sInfo": "{!! Lang::get('datatables.sInfo') !!}",
"sInfoEmpty": "{!! Lang::get('datatables.sInfoEmpty') !!}",
"sInfoFiltered": "{!! Lang::get('datatables.sInfoFiltered') !!}",
"sInfoPostFix": "{!! Lang::get('datatables.sInfoPostFix') !!}",
"sInfoThousands": "{!! Lang::get('datatables.sInfoThousands') !!}",
"sLengthMenu": "{!! Lang::get('datatables.sLengthMenu') !!}",
"sLoadingRecords": "{!! Lang::get('datatables.sLoadingRecords') !!}",
"sProcessing": "{!! Lang::get('datatables.sProcessing') !!}",
"sSearch": "{!! Lang::get('datatables.sSearch') !!}",
"sZeroRecords": "{!! Lang::get('datatables.sZeroRecords') !!}",
"oPaginate": {
"sFirst": "{!! Lang::get('datatables.oPaginate.sFirst') !!}",
"sLast": "{!! Lang::get('datatables.oPaginate.sLast') !!}",
"sNext": "{!! Lang::get('datatables.oPaginate.sNext') !!}",
"sPrevious": "{!! Lang::get('datatables.oPaginate.sPrevious') !!}"
},
"oAria": {
"sSortAscending": "{!! Lang::get('datatables.oAria.sSortAscending') !!}",
"sSortDescending": "{!! Lang::get('datatables.oAria.sortDescending') !!}"
},
},
"ajax": { "ajax": {
url: "{{url('filter')}}", url: "{{url('filter')}}",
data: function (d) { data: function (d) {

View File

@@ -26,6 +26,29 @@ foreach($segments as $seg){
"sPaginationType": "full_numbers", "sPaginationType": "full_numbers",
"bProcessing": true, "bProcessing": true,
"bServerSide": true, "bServerSide": true,
"oLanguage": {
"sEmptyTable": "{!! Lang::get('datatables.sEmptyTable') !!}",
"sInfo": "{!! Lang::get('datatables.sInfo') !!}",
"sInfoEmpty": "{!! Lang::get('datatables.sInfoEmpty') !!}",
"sInfoFiltered": "{!! Lang::get('datatables.sInfoFiltered') !!}",
"sInfoPostFix": "{!! Lang::get('datatables.sInfoPostFix') !!}",
"sInfoThousands": "{!! Lang::get('datatables.sInfoThousands') !!}",
"sLengthMenu": "{!! Lang::get('datatables.sLengthMenu') !!}",
"sLoadingRecords": "{!! Lang::get('datatables.sLoadingRecords') !!}",
"sProcessing": "{!! Lang::get('datatables.sProcessing') !!}",
"sSearch": "{!! Lang::get('datatables.sSearch') !!}",
"sZeroRecords": "{!! Lang::get('datatables.sZeroRecords') !!}",
"oPaginate": {
"sFirst": "{!! Lang::get('datatables.oPaginate.sFirst') !!}",
"sLast": "{!! Lang::get('datatables.oPaginate.sLast') !!}",
"sNext": "{!! Lang::get('datatables.oPaginate.sNext') !!}",
"sPrevious": "{!! Lang::get('datatables.oPaginate.sPrevious') !!}"
},
"oAria": {
"sSortAscending": "{!! Lang::get('datatables.oAria.sSortAscending') !!}",
"sSortDescending": "{!! Lang::get('datatables.oAria.sortDescending') !!}"
},
},
"ajax": { "ajax": {
url: "{{url('user-list')}}", url: "{{url('user-list')}}",
data: function (d) { data: function (d) {

View File

@@ -347,6 +347,7 @@ Route::middleware('web')->group(function () {
Route::post('/newticket/post', [Agent\helpdesk\TicketController::class, 'post_newticket'])->name('post.newticket'); /* Post Create New Ticket */ Route::post('/newticket/post', [Agent\helpdesk\TicketController::class, 'post_newticket'])->name('post.newticket'); /* Post Create New Ticket */
Route::get('/thread/{id}', [Agent\helpdesk\TicketController::class, 'thread'])->name('ticket.thread'); /* Get Thread by ID */ Route::get('/thread/{id}', [Agent\helpdesk\TicketController::class, 'thread'])->name('ticket.thread'); /* Get Thread by ID */
Route::get('ticket/tooltip', [Agent\helpdesk\TicketController::class, 'getTooltip'])->name('ticket.tooltip');
Route::post('/thread/reply/{id}', [Agent\helpdesk\TicketController::class, 'reply'])->name('ticket.reply'); /* Patch Thread Reply */ Route::post('/thread/reply/{id}', [Agent\helpdesk\TicketController::class, 'reply'])->name('ticket.reply'); /* Patch Thread Reply */
Route::patch('/internal/note/{id}', [Agent\helpdesk\TicketController::class, 'InternalNote'])->name('Internal.note'); /* Patch Internal Note */ Route::patch('/internal/note/{id}', [Agent\helpdesk\TicketController::class, 'InternalNote'])->name('Internal.note'); /* Patch Internal Note */
@@ -525,7 +526,7 @@ Route::middleware('web')->group(function () {
Route::get('check_ticket/{id}', [Client\helpdesk\GuestController::class, 'get_ticket_email'])->name('check_ticket'); //detail ticket information Route::get('check_ticket/{id}', [Client\helpdesk\GuestController::class, 'get_ticket_email'])->name('check_ticket'); //detail ticket information
// show ticket via have a ticket // show ticket via have a ticket
Route::get('show-ticket/{id}/{code}', [Client\helpdesk\UnAuthController::class, 'showTicketCode'])->name('show.ticket'); //detail ticket information Route::get('show-ticket/{ids}/{code}', [Client\helpdesk\UnAuthController::class, 'showTicketCode'])->name('show.ticket'); //detail ticket information
//testing ckeditor //testing ckeditor
//=================================================================================== //===================================================================================
@@ -709,6 +710,10 @@ Route::middleware('web')->group(function () {
Route::post('show/rating/{id}', [Client\helpdesk\UnAuthController::class, 'rating'])->name('show.rating'); /* Get overall Ratings */ Route::post('show/rating/{id}', [Client\helpdesk\UnAuthController::class, 'rating'])->name('show.rating'); /* Get overall Ratings */
Route::post('show/rating2/{id}', [Client\helpdesk\UnAuthController::class, 'ratingReply'])->name('show.rating2'); /* Get reply Ratings */ Route::post('show/rating2/{id}', [Client\helpdesk\UnAuthController::class, 'ratingReply'])->name('show.rating2'); /* Get reply Ratings */
Route::get('show/change-status/{status}/{id}', [Client\helpdesk\UnAuthController::class, 'changeStatus'])->name('show.change.status'); /* Get reply Ratings */ Route::get('show/change-status/{status}/{id}', [Client\helpdesk\UnAuthController::class, 'changeStatus'])->name('show.change.status'); /* Get reply Ratings */
Route::post('show/close/{id}', [Client\helpdesk\UnAuthController::class, 'close'])->name('show.close'); /* Get reply Ratings */
Route::post('show/open/{id}', [Client\helpdesk\UnAuthController::class, 'open'])->name('show.open'); /* Get reply Ratings */
Route::post('show/resolve/{id}', [Client\helpdesk\UnAuthController::class, 'resolve'])->name('show.resolve'); /* Get reply Ratings */
/* get the home page */ /* get the home page */
Route::get('knowledgebase', [Client\kb\UserController::class, 'home'])->name('home'); Route::get('knowledgebase', [Client\kb\UserController::class, 'home'])->name('home');
/* get the faq value to user */ /* get the faq value to user */
@@ -801,7 +806,11 @@ Route::middleware('web')->group(function () {
// }); // });
Route::get('check_ticket/swtich-language/{id}', [Client\helpdesk\UnAuthController::class, 'changeUserLanguage']); Route::get('check_ticket/swtich-language/{id}', [Client\helpdesk\UnAuthController::class, 'changeUserLanguage']);
Route::get('category-list/swtich-language/{id}', [Client\helpdesk\UnAuthController::class, 'changeUserLanguage']); Route::get('category-list/swtich-language/{id}', [Client\helpdesk\UnAuthController::class, 'changeUserLanguage']);
Route::get('show/swtich-language/{id}', [Client\helpdesk\UnAuthController::class, 'changeUserLanguage']); Route::get('show-ticket/{ids}/swtich-language/{id}', [Client\helpdesk\UnAuthController::class, 'changeLanguage']);
Route::get('pages/swtich-language/{id}', [Client\helpdesk\UnAuthController::class, 'changeUserLanguage'])->name('switch-user-lang'); Route::get('pages/swtich-language/{id}', [Client\helpdesk\UnAuthController::class, 'changeUserLanguage'])->name('switch-user-lang');
Route::get('swtich-language/{id}', [Client\helpdesk\UnAuthController::class, 'changeUserLanguage'])->name('switch-user-lang'); Route::get('swtich-language/{id}', [Client\helpdesk\UnAuthController::class, 'changeUserLanguage'])->name('switch-user-lang');
Route::get('thread/swtich-language/{id}', [Client\helpdesk\UnAuthController::class, 'changeUserLanguage'])->name('switch-user-lang');
Route::get('ticket/swtich-language/{id}', [Client\helpdesk\UnAuthController::class, 'changeUserLanguage'])->name('switch-user-lang');
Route::get('social/swtich-language/{id}', [Client\helpdesk\UnAuthController::class, 'changeUserLanguage'])->name('switch-user-lang');
Route::get('language/swtich-language/{id}', [Client\helpdesk\UnAuthController::class, 'changeUserLanguage'])->name('switch-user-lang');
}); });

View File

@@ -0,0 +1,243 @@
<?php
namespace Tests\Unit;
use App\Http\Requests\kb\ArticleRequest;
use App\Http\Requests\kb\ArticleUpdate;
use App\Http\Requests\kb\CategoryRequest;
use App\Model\kb\Article;
use App\Model\kb\Category;
use App\Model\kb\Relationship;
use App\User;
use Faker\Factory as FakerFactory;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Lang;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str;
use Tests\TestCase;
class ArticleControllerTest extends TestCase
{
//use DatabaseTransactions;
protected $user; // Declare a user property
// Set up the authenticated user before each test
public function setUp(): void
{
parent::setUp();
$faker = FakerFactory::create();
//Create User -> Agent
//$str = Str::random(10);
$str = 'demopass';
$password = Hash::make($str);
$email = $faker->unique()->email();
$user = new User([
'first_name' => $faker->firstName(),
'last_name' => $faker->lastName(),
'email' => $email,
'user_name' => $faker->unique()->userName(),
'password' => $password,
'assign_group' => 1,
'primary_dpt' => 1,
'active' => 1,
'role' => 'agent',
'agent_tzone' => 81,
]);
$user->save();
// Check if data is inserted
$this->assertDatabaseHas('users', ['email'=>$email]);
// Authenticate as the created user
$this->actingAs($user);
$this->assertAuthenticated();
}
/** @test */
public function it_can_display_the_article_index_page()
{
$response = $this->get(route('article.index'));
$response->assertStatus(200);
}
public function testStoreArticleWithCategories()
{
// Create a Category model for testing
$data = [
'name' => 'Test Category',
'description' => 'Test Category Description',
];
$validator = Validator::make($data, (new CategoryRequest())->rules());
$this->assertTrue($validator->passes());
$response = $this->post(route('category.store'), $data);
$response->assertStatus(302);
$response->assertSessionHas('success');
$this->assertDatabaseHas('kb_category', $data);
$category = Category::latest()->first();
// Article data
$articleData = [
'name' => 'Test Article',
'description'=> 'Test Article Description',
'category_id'=> $category->id,
'year' => '2023',
'month' => '10',
'day' => '03',
'hour' => '12',
'minute' => '30',
];
$articleRequest = new ArticleRequest($articleData);
// Act
try {
$validator = Validator::make($articleData, (new ArticleRequest())->rules());
$this->assertTrue($validator->passes());
$response = $this->post(route('article.store'), $articleData);
$response->assertStatus(200);
} catch (Exception $e) {
$response = null;
}
// Assert
if ($response) {
$response->assertStatus(200); // Check if the response status code is a redirect (302)
$article = Article::latest()->first();
$article_relationship = new Relationship();
$article_relationship->category_id = $category->id;
$article_relationship->article_id = $article->id;
$article_relationship->save();
// Verify that the article was created and the category relationship exists
$this->assertDatabaseHas('kb_article', [
'name' => $articleData['name'],
'slug' => Str::slug($articleData['name'], '-'),
'publish_time' => $articleData['year'].'-'.$articleData['month'].'-'.$articleData['day'].' '.$articleData['hour'].':'.$articleData['minute'].':00',
]);
// Check if the category relationship exists
$this->assertDatabaseHas('kb_article_relationship', [
'category_id' => $category->id,
'article_id' => Article::latest()->first()->id, // Get the ID of the latest created article
]);
} else {
$this->fail('Exception thrown: '.$e->getMessage());
}
}
public function testEditArticle()
{
// Arrange
$article = Article::latest()->first(); // Create a sample Article for testing
$relationship = Relationship::latest()->first(); // Create a sample Relationship for testing
$category = Category::latest()->first(); // Create a sample Category for testing
$assign = $relationship->where('article_id', 'id')->pluck('category_id');
$category = $category->pluck('id', 'name');
$response = $this->get(
"/article/{$article->id}/edit",
['category' => $category,
'article' => $article,
'assign' => $assign,
]
);
$response->assertStatus(200);
}
public function testUpdateArticle()
{
$article = Article::latest()->first();
$category = Category::latest()->first();
$data = [
'id' => $article->id,
'name' => 'Updated Article Name',
'description' => 'Updated Description',
'slug' => Str::slug('Updated Article Name', '-'),
'category_id' => [1, 2],
'year' => '2023',
'month' => '10',
'day' => '03',
'hour' => '2',
'minute' => '20',
];
$validator = Validator::make($data, (new ArticleUpdate())->rules());
$this->assertTrue($validator->passes());
$response = $this->put(route('article.update', $article->id), $data);
$response->assertStatus(302);
$article_relationship = Relationship::latest()->first();
$article_relationship = $article_relationship->where('article_id', $article->id);
$article_relationship->delete();
$article = Article::latest()->first();
$relation = new Relationship();
$relation->category_id = $category->id;
$relation->article_id = $article->id;
$relation->save();
}
/** @test */
public function it_can_delete_a_category()
{
// Create a sample article, relationship
$article = Article::latest()->first();
$relationship = Relationship::find($article->id);
// Ensure the destroy route works as expected
$response = $this->get("/article/delete/{$article->slug}");
// Assert that success message is flashed
$response->assertSessionHas('success', Lang::get('lang.article_deleted_successfully'));
// Create a category
$category = Category::latest()->first();
// Create a related relationship (you may need to adjust this based on your actual relationships)
$relation = Relationship::find($category->id);
// Call the destroy method with the category ID
$response = $this->get("/category/delete/{$category->id}");
// Assert that the category is deleted from the database
$this->assertDatabaseMissing('kb_category', ['id' => $category->id]);
}
public function it_cannot_delete_a_article_if_related()
{
// Create a category
$article = Article::find(1);
// Call the destroy method with the category ID (without creating related records)
$response = $this->get("/article/delete/{$article->slug}");
// Assert that the category is not deleted from the database
$this->assertDatabaseHas('kb_article', ['id' => $article->id]);
// Assert that the response is a redirect
$response->assertRedirect();
// Assert that the response has a failure message
$response->assertSessionHas('fails', Lang::get('lang.article_not_deleted'));
}
}

View File

@@ -0,0 +1,233 @@
<?php
namespace Tests\Unit;
use App\Http\Requests\kb\CategoryRequest;
use App\Model\kb\Category;
use App\Model\kb\Relationship;
use App\User;
use Faker\Factory as FakerFactory;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Lang;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str;
use Tests\TestCase;
class CategoryControllerTest extends TestCase
{
//use DatabaseTransactions;
protected $user; // Declare a user property
// Set up the authenticated user before each test
public function setUp(): void
{
parent::setUp();
$faker = FakerFactory::create();
//Create User -> Agent
//$str = Str::random(10);
$str = 'demopass';
$password = Hash::make($str);
$email = $faker->unique()->email();
$user = new User([
'first_name' => $faker->firstName(),
'last_name' => $faker->lastName(),
'email' => $email,
'user_name' => $faker->unique()->userName(),
'password' => $password,
'assign_group' => 1,
'primary_dpt' => 1,
'active' => 1,
'role' => 'agent',
'agent_tzone' => 81,
]);
$user->save();
// Check if data is inserted
$this->assertDatabaseHas('users', ['email'=>$email]);
// Authenticate as the created user
$this->actingAs($user);
$this->assertAuthenticated();
}
/** @test */
public function it_can_display_the_category_index_page()
{
$response = $this->get(route('category.index'));
$response->assertStatus(200);
}
public function testValidationPasses()
{
$data = [
'name' => 'New Category',
'description' => 'Category Description',
];
$validator = Validator::make($data, (new CategoryRequest())->rules());
$this->assertTrue($validator->passes());
$response = $this->post(route('category.store'), $data);
$response->assertStatus(302);
$response->assertSessionHas('success');
$this->assertDatabaseHas('kb_category', $data);
}
public function testValidationFailsWhenNameMissing()
{
$data = [
'description' => 'Category Description',
];
$validator = Validator::make($data, (new CategoryRequest())->rules());
$this->assertFalse($validator->passes());
$this->assertTrue($validator->fails());
$this->assertTrue($validator->errors()->has('name'));
}
public function testValidationFailsWhenNameExceedsMaxLength()
{
$data = [
'name' => str_repeat('A', 251),
'description' => 'Category Description',
];
$validator = Validator::make($data, (new CategoryRequest())->rules());
$this->assertFalse($validator->passes());
$this->assertTrue($validator->fails());
$this->assertTrue($validator->errors()->has('name'));
}
public function testValidationFailsWhenNameNotUnique()
{
$data = [
'name' => 'Greetings',
'description' => 'Category Description',
];
$validator = Validator::make($data, (new CategoryRequest())->rules());
$this->assertFalse($validator->passes());
$this->assertTrue($validator->fails());
$this->assertTrue($validator->errors()->has('name'));
}
public function testValidationFailsWhenDescriptionMissing()
{
$data = [
'name' => 'New Category',
];
$validator = Validator::make($data, (new CategoryRequest())->rules());
$this->assertFalse($validator->passes());
$this->assertTrue($validator->fails());
$this->assertTrue($validator->errors()->has('description'));
}
public function testEditCategory()
{
$category = Category::latest()->first();
$categories = Category::pluck('name', 'id')->toArray();
$response = $this->get(
"/category/{$category->id}/edit",
['category' => $category,
'categories' => $categories,
]
);
$response->assertStatus(200);
}
/** @test */
public function it_can_update_an_existing_category()
{
// Retrieve an existing category from the database
$category = Category::latest()->first();
$data = [
'name' => 'Updated Category Name',
'description' => 'Updated Description',
];
$validator = Validator::make($data, (new CategoryRequest())->rules());
$this->assertTrue($validator->passes());
$response = $this->put(route('category.update', $category->id), $data);
$response->assertStatus(302);
$response->assertSessionHas('success');
$this->assertDatabaseHas('kb_category', $data);
}
/** @test */
public function it_cannot_update_an_existing_category()
{
// Retrieve an existing category from the database
$category = Category::latest()->first();
$data = [
'name' => 'Greetings',
'description' => 'Updated Description',
];
$validator = Validator::make($data, (new CategoryRequest())->rules());
$this->assertFalse($validator->passes());
$response = $this->put(route('category.update', $category->id), $data);
$response->assertStatus(302);
$this->assertTrue($validator->fails());
$this->assertTrue($validator->errors()->has('name'));
}
/** @test */
public function it_can_delete_a_category()
{
// Create a category
$category = Category::latest()->first();
// Create a related relationship (you may need to adjust this based on your actual relationships)
$relation = Relationship::find($category->id);
// Call the destroy method with the category ID
$response = $this->get("/category/delete/{$category->id}");
// Assert that the category is deleted from the database
$this->assertDatabaseMissing('kb_category', ['id' => $category->id]);
// Assert that the response is a redirect
$response->assertRedirect();
// Assert that the response has a success message
$response->assertSessionHas('success', Lang::get('lang.category_deleted_successfully'));
}
/** @test */
public function it_cannot_delete_a_category_if_related()
{
// Create a category
$category = Category::find(1);
// Call the destroy method with the category ID (without creating related records)
$response = $this->get("/category/delete/{$category->id}");
// Assert that the category is not deleted from the database
$this->assertDatabaseHas('kb_category', ['id' => $category->id]);
// Assert that the response is a redirect
$response->assertRedirect();
// Assert that the response has a failure message
$response->assertSessionHas('fails', Lang::get('lang.category_not_deleted'));
}
}

View File

@@ -0,0 +1,184 @@
<?php
namespace Tests\Unit;
use App\Http\Requests\kb\PageRequest;
use App\Model\kb\Page;
use App\User;
use Faker\Factory as FakerFactory;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Tests\TestCase;
class PageControllerTest extends TestCase
{
use DatabaseTransactions;
protected $user; // Declare a user property
// Set up the authenticated user before each test
public function setUp(): void
{
parent::setUp();
$faker = FakerFactory::create();
//Create User -> Agent
//$str = Str::random(10);
$str = 'demopass';
$password = Hash::make($str);
$email = $faker->unique()->email();
$user = new User([
'first_name' => $faker->firstName(),
'last_name' => $faker->lastName(),
'email' => $email,
'user_name' => $faker->unique()->userName(),
'password' => $password,
'assign_group' => 1,
'primary_dpt' => 1,
'active' => 1,
'role' => 'agent',
'agent_tzone' => 81,
]);
$user->save();
// Check if data is inserted
$this->assertDatabaseHas('users', ['email'=>$email]);
// Authenticate as the created user
$this->actingAs($user);
$this->assertAuthenticated();
}
/** @test */
public function it_can_display_the_page_index_page()
{
$response = $this->get(route('page.index'));
$response->assertStatus(200);
}
public function testCreateMethod()
{
$response = $this->get('/page/create');
$response->assertStatus(200);
}
public function testValidationPasses()
{
$data = [
'name' => 'New Page',
'description' => 'Page Description',
];
$validator = Validator::make($data, (new PageRequest())->rules());
$this->assertTrue($validator->passes());
$response = $this->post(route('page.store'), $data);
$response->assertStatus(302);
$response->assertSessionHas('success');
$this->assertDatabaseHas('kb_pages', $data);
}
public function testValidationFailsWhenNameMissing()
{
$data = [
'description' => 'Page Description',
];
$validator = Validator::make($data, (new PageRequest())->rules());
$this->assertFalse($validator->passes());
$this->assertTrue($validator->fails());
$this->assertTrue($validator->errors()->has('name'));
}
public function testValidationFailsWhenNameNotUnique()
{
$data = [
'name' => 'Page1',
'description' => 'Page Description',
];
$validator = Validator::make($data, (new PageRequest())->rules());
$this->assertFalse($validator->passes());
$this->assertTrue($validator->fails());
$this->assertTrue($validator->errors()->has('name'));
}
public function testValidationFailsWhenDescriptionMissing()
{
$data = [
'name' => 'New',
];
$validator = Validator::make($data, (new PageRequest())->rules());
$this->assertFalse($validator->passes());
$this->assertTrue($validator->fails());
$this->assertTrue($validator->errors()->has('description'));
}
public function testEditPage()
{
$page = Page::latest()->first();
$response = $this->get('/page/'.$page->id.'/edit');
$response->assertStatus(200);
}
public function testUpdatePage()
{
$page = Page::latest()->first();
$data = [
'name' => 'Updated Page Name',
'description' => 'Updated Description',
];
$validator = Validator::make($data, (new PageRequest())->rules());
$this->assertTrue($validator->passes());
$response = $this->put('/page/'.$page->id, $data);
$response->assertStatus(302); // Assuming a successful update redirects
$this->assertDatabaseHas('kb_pages', $data);
// You can add more assertions as needed.
}
public function testCannotUpdatePage()
{
$page = Page::latest()->first();
$data = [
'name' => 'Page1',
'description' => 'Updated Description',
];
$validator = Validator::make($data, (new PageRequest())->rules());
$this->assertFalse($validator->passes());
$response = $this->put('/page/'.$page->id, $data);
$response->assertStatus(302);
$this->assertTrue($validator->fails());
$this->assertTrue($validator->errors()->has('name'));
}
public function testDestroyMethod()
{
$page = Page::latest()->first();
$response = $this->delete('/page/'.$page->id);
$response->assertStatus(302); // Assuming a successful deletion redirects
$this->assertDatabaseMissing('kb_pages', ['id' => $page->id]);
// You can add more assertions as needed.
}
}

View File

@@ -13,12 +13,12 @@ use Tests\TestCase;
class TicketControllerTest extends TestCase class TicketControllerTest extends TestCase
{ {
use DatabaseTransactions; use DatabaseTransactions;
/** /**
* A basic unit test example. * A basic unit test example.
* *
* @return void * @return void
*/ */
public function test_user_change_the_status() public function test_user_change_the_status()
{ {
$str = 'Demopass@1'; $str = 'Demopass@1';
@@ -49,10 +49,12 @@ class TicketControllerTest extends TestCase
'source' => 1, 'source' => 1,
] ]
); );
$ticket->save(); $ticket->save();
$ticket->dept_id = 1; $ticket->dept_id = 1;
$ticket->save(); $ticket->save();
$ticket_thread = new Ticket_Thread( $ticket_thread = new Ticket_Thread(
[ [
'ticket_id' => $ticket->id, 'ticket_id' => $ticket->id,
@@ -69,7 +71,6 @@ class TicketControllerTest extends TestCase
$response = $this->post(route('select_all'), [ $response = $this->post(route('select_all'), [
'select_all' => [$ticket->id], 'select_all' => [$ticket->id],
'submit' => 'Open', 'submit' => 'Open',
]); ]);
@@ -87,5 +88,6 @@ class TicketControllerTest extends TestCase
$response->assertStatus(302); // Adjust this as needed $response->assertStatus(302); // Adjust this as needed
$this->assertEquals(3, $ticket->fresh()->status); // Adjust this as needed $this->assertEquals(3, $ticket->fresh()->status); // Adjust this as needed
$response->assertSessionHas('success', Lang::get('lang.tickets_have_been_closed')); $response->assertSessionHas('success', Lang::get('lang.tickets_have_been_closed'));
} }
} }