Files
faveo/app/Http/Controllers/Client/helpdesk/UnAuthController.php
Manish Verma 3b76605892 Language update
Added different level of language preference functionaloty which can be
set from the new option in top navigation bar
Lanaguage preference can be set as
* System language (Default for all users)
* Session based   (User who are not logged in and want to see they
system in language of their choice can set their preference in browser
session)
* User lever (for authenticated users who have updated their language
preference, system will change into their selected language when they
log into the system)
2018-08-08 15:37:25 +05:30

446 lines
16 KiB
PHP

<?php
namespace App\Http\Controllers\Client\helpdesk;
// controllers
use App\Http\Controllers\Common\PhpMailController;
use App\Http\Controllers\Controller;
// requests
use App\Model\helpdesk\Email\Emails;
// models
use App\Model\helpdesk\Settings\CommonSettings;
use App\Model\helpdesk\Settings\Followup;
use App\Model\helpdesk\Ticket\Ticket_Status;
use App\Model\helpdesk\Ticket\Ticket_Thread;
use App\Model\helpdesk\Ticket\Tickets;
use App\Model\helpdesk\Ticket\TicketToken;
use App\User;
use Hash;
// classes
use Illuminate\Http\Request;
use Lang;
use Session;
/**
* GuestController.
*
* @author Ladybird <info@ladybirdweb.com>
*/
class UnAuthController extends Controller
{
/**
* Create a new controller instance.
*
* @return type void
*/
public function __construct(PhpMailController $PhpMailController)
{
$this->middleware('board');
$this->PhpMailController = $PhpMailController;
}
/**
* Post Check ticket.
*
* @param type CheckTicket $request
* @param type User $user
* @param type Tickets $ticket
* @param type Ticket_Thread $thread
*
* @return type Response
*/
public function PostCheckTicket(Request $request)
{
try {
$validator = \Validator::make($request->all(), [
'email_address' => 'required|email',
'ticket_number' => 'required',
]);
if ($validator->fails()) {
return redirect()->back()
->withErrors($validator)
->withInput()
->with('check', '1');
}
$email = $request->input('email_address');
$ticket_number = $request->input('ticket_number');
// get user details
$user_details = User::where('email', '=', $email)->first();
if ($user_details == null) {
return \Redirect::route('form')->with('fails', Lang::get('lang.sorry_that_email_is not_available_in_this_system'));
}
// get ticket details
$ticket = Tickets::where('ticket_number', '=', $ticket_number)->first();
if ($ticket == null) {
return \Redirect::route('form')->with('fails', Lang::get('lang.there_is_no_such_ticket_number'));
}
if ($ticket->user_id == $user_details->id) {
if ($user_details->role == 'user') {
$username = $user_details->first_name;
} else {
$username = $user_details->first_name.' '.$user_details->last_name;
}
// check for preentered ticket token
$ticket_token = TicketToken::where('ticket_id', '=', $ticket->id)->first();
if ($ticket_token) {
$token = $this->generate_random_ticket_token();
$hashed_token = \Hash::make($token);
$ticket_token->token = $hashed_token;
$ticket_token->save();
} else {
$ticket_token = new TicketToken();
$ticket_token->ticket_id = $ticket->id;
$token = $this->generate_random_ticket_token();
$hashed_token = \Hash::make($token);
$ticket_token->token = $hashed_token;
$ticket_token->save();
}
try {
$this->PhpMailController->sendmail(
$from = $this->PhpMailController->mailfrom('1', '0'), $to = ['name' => $username, 'email' => $user_details->email], $message = ['subject' => 'Ticket link Request ['.$ticket_number.']', 'scenario' => 'check-ticket'], $template_variables = ['user' => $username, 'ticket_link_with_number' => url('show-ticket/'.$ticket->id.'/'.$token)]
);
} catch (\Exception $e) {
}
return redirect()->back()
->with('success', Lang::get('lang.we_have_sent_you_a_link_by_email_please_click_on_that_link_to_view_ticket'));
} else {
return \Redirect::route('form')->with('fails', Lang::get("lang.email_didn't_match_with_ticket_number"));
}
} catch (\Exception $e) {
return \Redirect::route('form')->with('fails', $e->getMessage());
}
}
/**
* generate random string token for ticket.
*
* @param type $length
*
* @return string
*/
public function generate_random_ticket_token($length = 10)
{
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
/**
* function to check the ticket without loggin In.
*
* @param type $ticket_id
* @param type $token
*
* @return type view
*/
public function showTicketCode($ticket_id, $token)
{
try {
$check_token = TicketToken::where('ticket_id', '=', $ticket_id)->first();
if (Hash::check($token, $check_token->token) == true) {
$token_time = CommonSettings::where('option_name', '=', 'ticket_token_time_duration')->first();
$time = $token_time->option_value;
$new_time = date_add($check_token->updated_at, date_interval_create_from_date_string($time.' Hours'));
if (date('Y-m-d H:i:s') > $new_time) {
return redirect()->route('form')->with('fails', Lang::get('lang.sorry_your_ticket_token_has_expired_please_try_to_resend_the_ticket_link_request'));
}
$tickets = Tickets::where('id', '=', $ticket_id)->first();
return view('themes.default1.client.helpdesk.unauth.showticket', compact('tickets', 'token'));
} else {
return redirect()->route('form')->with('fails', Lang::get('lang.sorry_you_are_not_allowed_token_expired'));
}
} catch (Exception $ex) {
return redirect()->route('form')->with('fails', $e->getMessage());
}
}
/**
* Store ratings of the user.
*
* @return type Redirect
*/
public function rating($id, Request $request, \App\Model\helpdesk\Ratings\RatingRef $rating_ref)
{
foreach ($request->all() as $key => $value) {
if (strpos($key, '_') !== false) {
$ratName = str_replace('_', ' ', $key);
} else {
$ratName = $key;
}
$ratID = \App\Model\helpdesk\Ratings\Rating::where('name', '=', $ratName)->first();
$ratingrefs = $rating_ref->where('rating_id', '=', $ratID->id)->where('ticket_id', '=', $id)->first();
if ($ratingrefs !== null) {
$ratingrefs->rating_id = $ratID->id;
$ratingrefs->ticket_id = $id;
$ratingrefs->thread_id = '0';
$ratingrefs->rating_value = $value;
$ratingrefs->save();
} else {
$rating_ref->rating_id = $ratID->id;
$rating_ref->ticket_id = $id;
$rating_ref->thread_id = '0';
$rating_ref->rating_value = $value;
$rating_ref->save();
}
}
return redirect()->back()->with('Success', Lang::get('lang.thank_you_for_your_rating'));
}
/**
* Store Client rating about reply of agent quality.
*
* @return type Redirect
*/
public function ratingReply($id, Request $request, \App\Model\helpdesk\Ratings\RatingRef $rating_ref)
{
foreach ($request->all() as $key => $value) {
$key1 = explode(',', $key);
if (strpos($key1[0], '_') !== false) {
$ratName = str_replace('_', ' ', $key1[0]);
} else {
$ratName = $key1[0];
}
$ratID = \App\Model\helpdesk\Ratings\Rating::where('name', '=', $ratName)->first();
$ratingrefs = $rating_ref->where('rating_id', '=', $ratID->id)->where('thread_id', '=', $key1[1])->first();
if ($ratingrefs !== null) {
$ratingrefs->rating_id = $ratID->id;
$ratingrefs->ticket_id = $id;
$ratingrefs->thread_id = $key1[1];
$ratingrefs->rating_value = $value;
$ratingrefs->save();
} else {
$rating_ref->rating_id = $ratID->id;
$rating_ref->ticket_id = $id;
$rating_ref->thread_id = $key1[1];
$rating_ref->rating_value = $value;
$rating_ref->save();
}
}
return redirect()->back()->with('Success', Lang::get('lang.thank_you_for_your_rating'));
}
/**
* function to change the status of the ticket.
*
* @param type $status
* @param type $id
*
* @return string
*/
public function changeStatus($status, $id)
{
$tickets = Tickets::where('id', '=', $id)->first();
$tickets->status = $status;
$ticket_status = Ticket_Status::where('id', '=', $status)->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;
}
//Auto-close tickets
public function autoCloseTickets()
{
$workflow = \App\Model\helpdesk\Workflow\WorkflowClose::whereId(1)->first();
if ($workflow->condition == 1) {
$overdues = Tickets::where('status', '=', 1)->where('isanswered', '=', 1)->orderBy('id', 'DESC')->get();
if (count($overdues) == 0) {
$tickets = null;
} else {
$i = 0;
foreach ($overdues as $overdue) {
// $sla_plan = Sla_plan::where('id', '=', $overdue->sla)->first();
$ovadate = $overdue->created_at;
$new_date = date_add($ovadate, date_interval_create_from_date_string($workflow->days.' days')).'<br/><br/>';
if (date('Y-m-d H:i:s') > $new_date) {
$i++;
$overdue->status = 3;
$overdue->closed = 1;
$overdue->closed_at = date('Y-m-d H:i:s');
$overdue->save();
// if($workflow->send_email == 1) {
// $this->PhpMailController->sendmail($from = $this->PhpMailController->mailfrom('0', $overdue->dept_id), $to = ['name' => $user_name, 'email' => $email], $message = ['subject' => $ticket_subject.'[#'.$ticket_number.']', 'scenario' => 'close-ticket'], $template_variables = ['ticket_number' => $ticket_number]);
// }
}
}
// dd(count($value));
// if ($i > 0) {
// $tickets = new collection($value);
// } else {
// $tickets = null;
// }
}
} else {
}
}
/**
*@category function to change system's language
*
*@param string $lang //desired language's iso code
*
*@return response
*/
public static function changeLanguage($lang)
{
//if(Cache::has('language'))
//{
// return Cache::get('language');
//} else return 'false';
// Cache::put('language',$)
$path = base_path('resources/lang'); // Path to check available language packages
if (array_key_exists($lang, \Config::get('languages')) && in_array($lang, scandir($path))) {
// dd(array_key_exists($lang, Config::get('languages')));
// app()->setLocale($lang);
\Cache::forever('language', $lang);
// dd(Cache::get('language'));
// dd()
} else {
return false;
}
return true;
}
// Follow up tickets
public function followup()
{
$followup = Followup::whereId('1')->first();
$condition = $followup->condition;
// dd($condition);
switch ($condition) {
case 'everyMinute':
$followup_set = ' + 1 minute';
break;
case 'everyFiveMinutes':
$followup_set = ' + 5 minute';
break;
case 'everyTenMinutes':
$followup_set = ' + 10 minute';
break;
case 'everyThirtyMinutes':
$followup_set = ' + 30 minute';
break;
case 'hourly':
$followup_set = ' + 1 hours';
break;
case 'daily':
$followup_set = ' + 1 day';
break;
case 'weekly':
$followup_set = ' + 7 day';
break;
case 'monthly':
$followup_set = ' + 30 day';
break;
case 'yearly':
$followup_set = ' + 365 day';
break;
}
if ($followup->status = 1) {
$tickets = Tickets::where('id', '>=', 1)->where('status', '!=', 5)->get();
// dd( $tickets);
// $tickets=Tickets::where('id', '>=', 1)->where('status', '!=', 5)->pluck('id');
// dd( $tickets);
// $id=1;
foreach ($tickets as $ticket) {
// $id=1;
// $id++;
// $ticket=Tickets::where('status', '!=', 5)->get();
// dd($ticket);
// if($ticket != null){
// dd('here');
$ck = date('Y-m-d H:i:s', strtotime($ticket->updated_at.$followup_set));
// dd($ck);
$current_time = date('Y-m-d H:i:s');
if ($current_time > $ck) {
$ticket->follow_up = 1;
$ticket->save();
// Tickets::where('id', '=',$id)
// ->update(['follow_up' => 1]);
// }
}
// if($id=2)
// {dd($ticket);}
}
}
}
/**
* Function to chnage user language preference
*
* @param string $lang //desired language's iso code
*
* @category function to change system's language
*
* @return response
*/
public static function changeUserLanguage($lang)
{
$path = base_path('resources/lang'); // Path to check available language packages
if (array_key_exists($lang, \Config::get('languages')) && in_array($lang, scandir($path))) {
if (\Auth::check()) {
$id = \Auth::user()->id;
$user = User::find($id);
$user->user_language = $lang;
$user->save();
} else {
Session::put('language', $lang);
}
}
return redirect()->back();
}
}