Viewing file: ResponderController.php (15.98 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace App\Http\Controllers\Customer;
use App\Http\Controllers\Controller; use App\Models\Keyword; use App\Models\KeywordGroup; use App\Models\KeywordText; use App\Models\Responder; use App\Models\ResponderDetail; use App\Models\SmsTemplate; use GuzzleHttp\Client; use Illuminate\Http\Request; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Date; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Validator;
class ResponderController extends Controller {
public function index(){ return view('customer.responder.index'); }
public function getAll(){ $authUser=auth('customer')->user();
$responders= $authUser->responders(); return datatables()->of($responders) ->addColumn('created_at',function($q){
return formatDate($q->created_at); }) ->addColumn('action',function($q){ return "<a class='btn btn-sm btn-info' href='" . route('customer.responders.edit', [$q->id]) . "' title='Edit'><i class='fa fa-pencil-alt'></i></a> " . '<button class="btn btn-sm btn-danger" data-message="Are you sure you want to delete this responder?" data-action=' . route('customer.responders.destroy', [$q]) . ' data-input={"_method":"delete"} data-toggle="modal" data-target="#modal-confirm" title="Delete"><i class="fa fa-trash"></i></button>'; }) ->addColumn('status',function($q){ $status=''; if($q->status=='active'){ $status='<span class="badge badge-success">'.ucfirst($q->status).'</span>'; }else{ $status='<span class="badge badge-danger">'.ucfirst($q->status).'</span>'; } return $status; }) ->rawColumns(['action','status']) ->toJson();
}
function generateChildLoop($all_responders){
$html_data='';
foreach ($all_responders as $key=>$s_responder){
$style=$s_responder->style?$s_responder->style:"position:relative;left:0;top:0;"; $templates=''; if($s_responder->template && json_decode($s_responder->template)){ $templates=SmsTemplate::whereIn('id', json_decode($s_responder->template))->pluck('title')->toArray(); $templates=implode(',', $templates); }
if($s_responder->parent_id){
$this->generateChildLoop($s_responder->responders);
$html_data .= '<div class="draggable-item get_style_'.$s_responder->id.'" data-id="'.$s_responder->id.'" id="start_' . $s_responder->id . '" style='.$style.'> <div class="p-2"> <div> <span class="box-element-title"> Node # <span class="node-counter">' . $s_responder->id . '</span> </span>
<span class="float-right box-element-icon-section"> <i class="fa fa-file d-none"></i> <i data-detail-id="' . $s_responder->id . '" data-parent-node="' . $s_responder->parent_id . '" class="fa fa-eye ml-1 preview_modal preview_element_' . $s_responder->id . '"></i> <i class="fa fa-copy d-none ml-1"></i>
<i data-id="start_'.$s_responder->id.'" data-parent-node="' . $s_responder->parent_id . '" data-parent-id="' . $s_responder->id . '" data-current-node="' . $s_responder->id . '" class="add_new_element fa fa-plus ml-1"></i>
<i data-parent-node="' . $s_responder->parent_id . '" data-current-node="' . $s_responder->id . '" data-detail-id="' . $s_responder->id . '" class="delete_element fa fa-trash ml-1"></i> </span> </div> <h6 class="mb-1 box-element-secondary-title d-none"> 0 replied(2) </h6> <h6 class="mb-1 box-element-secondary-title d-none"> 0 clicked(2) </h6> <h6 class="mb-1 box-element-secondary-title d-none"> 0 listened(2) </h6> <h6 class="mb-1 box-element-secondary-title"><strong>Keyword</strong>: <span class="keyword_section_' . $s_responder->id . '">'.$s_responder->keyword.'</span></h6> <h6 class="mb-1 box-element-secondary-title"><strong>Intend</strong>: <span class="show_intends_'.$s_responder->id.'">'.$templates.'</span></h6> </div> <div class="start_dot"><div class="dot-black"></div></div> <div class="end_dot"><div class="dot-black"></div></div> </div>';
} else { $html_data .= '<div class="draggable-item get_style_'.$s_responder->id.'" data-id="'.$s_responder->id.'" id="start_' . $s_responder->id . '" style='.$style.'> <div class="p-2"> <div> <span class="box-element-title"> Node # <span class="node-counter">' . $s_responder->id . '</span> </span>
<span class="float-right box-element-icon-section"> <i class="fa fa-file d-none"></i> <i data-detail-id="' . $s_responder->id . '" data-parent-node="' . $s_responder->parent_id . '" class="fa fa-eye ml-1 preview_modal preview_element_' . $s_responder->id . '"></i> <i class="fa fa-copy d-none ml-1"></i>
<i data-id="start_'.$s_responder->id.'" data-parent-node="root" data-parent-id="' . $s_responder->id . '" data-current-node="' . $s_responder->id . '" class="add_new_element fa fa-plus ml-1"></i>
<i data-parent-node="' . $s_responder->parent_id . '" data-current-node="' . $s_responder->id . '" data-detail-id="' . $s_responder->id . '" class="delete_element fa fa-trash ml-1"></i> </span> </div> <h6 class="mb-1 box-element-secondary-title d-none"> 0 replied(2) </h6> <h6 class="mb-1 box-element-secondary-title d-none"> 0 clicked(2) </h6> <h6 class="mb-1 box-element-secondary-title d-none"> 0 listened(2) </h6> <h6 class="mb-1 box-element-secondary-title"><strong>Keyword</strong>: <span class="keyword_section_' . $s_responder->id . '">'.$s_responder->keyword.'</span></h6> <h6 class="mb-1 box-element-secondary-title"><strong>Intend</strong>: <span class="show_intends_'.$s_responder->id.'">'.$templates.'</span></h6> </div> <div class="start_dot"><div class="dot-black"></div></div> <div class="end_dot"><div class="dot-black"></div></div> </div>';
} }
return $html_data;
}
public function create(){
$data['contact_groups']=auth('customer')->user()->active_groups;
return view('customer.responder.create', $data); }
public function store(Request $request){
$request->validate([ 'name'=>'required', 'status'=>'required|in:active,inactive' ]);
$responder=new Responder(); $responder->customer_id=auth('customer')->user()->id; $responder->name=$request->name; $responder->status=$request->status; $responder->save();
return redirect()->route('customer.responders.edit', $responder); }
public function edit(Responder $responder) { $data['responder']=$responder;
$data['contact_groups']=auth('customer')->user()->active_groups;
$data['keyword_groups']=auth('customer')->user()->keyword_groups()->get(); $return_html= $this->generateChildLoop($responder->details);
$data['return_html']=$return_html;
return view('customer.responder.create', $data); }
public function destroy(Responder $responder) { if ($responder->details) { ResponderDetail::where('responder_id', $responder->id)->delete(); }
$responder->delete();
return redirect()->back()->with('success', 'Responder with details successfully deleted'); }
public function redponder_detail(Request $request) { $responder_detail=ResponderDetail::where('responder_id', $request->responder_id)->where('id', $request->detail_id)->first();
if(!$responder_detail){ return response()->json(['status'=>'failed', 'message'=>'Invalid Request']); }
return response()->json(['status'=>'success', 'data'=>$responder_detail]);
} public function create_responder_details(Request $request) {
$responder=Responder::where('customer_id', auth('customer')->user()->id)->where('id', $request->responder_id)->first(); if(!$responder){ return response()->json(['status'=>'failed', 'message'=>'Something went wrong, try again after sometimes']); }
$responder_detail=new ResponderDetail(); $responder_detail->responder_id=$responder->id; if($request->parent_id) { $responder_detail->parent_id=$request->parent_id; } $responder_detail->save();
return response()->json(['status'=>'success', 'data'=>$responder_detail->id,'message'=>'Responder Successfully Updated']); }
public function detail_store(Request $request) {
// $validator = Validator::make($request->all(), [ // 'title' => 'required|unique:posts|max:255', // 'body' => 'required', // ]); // // if ($validator->fails()) { // // } DB::beginTransaction();
$responder_detail=ResponderDetail::where('responder_id', $request->responder_id)->where('id', $request->id)->first(); if(!$responder_detail){ return response()->json(['status'=>'failed', 'message'=>'Invalid Request']); }
$responder_detail->group=$request->group_id; $responder_detail->keyword=$request->keywords; $responder_detail->template=$request->templates?json_encode($request->templates):null; $responder_detail->keyword_groups=$request->keyword_groups?json_encode($request->keyword_groups):null; $responder_detail->style=$request->style?json_encode($request->style):null; $responder_detail->save();
if($request->keywords) { $responder_detail->keyword_texts()->delete();
$keywords = explode(',', $request->keywords); if($keywords && is_array($keywords)) { foreach ($keywords as $keyword) { $position = getTextPosition($keyword, '%'); $responder_kw_text = new KeywordText(); $responder_kw_text->customer_id = auth('customer')->user()->id; $responder_kw_text->responder_detail_id = $responder_detail->id; $responder_kw_text->key = $keyword; $responder_kw_text->position = $position; $responder_kw_text->save(); } } }
if($request->keyword_groups) { $keyword_groups = KeywordGroup::where('customer_id', auth('customer')->user()->id)->whereIn('name', $request->keyword_groups)->get();
$keywordIds = []; foreach ($keyword_groups as $keyword_group) { if ($keyword_group->keyword_ids) { foreach (json_decode($keyword_group->keyword_ids) as $ids) { $keywordIds[] = $ids; } } } $keywordIds = array_unique($keywordIds); $allKeywords = Keyword::where('customer_id', auth('customer')->user()->id)->whereIn('id', $keywordIds)->get(); foreach ($allKeywords as $k_word) {
$position = getTextPosition($k_word->word, '%'); $responder_kw_text = new KeywordText(); $responder_kw_text->customer_id = auth('customer')->user()->id; $responder_kw_text->responder_detail_id = $responder_detail->id; $responder_kw_text->key = $k_word->word; $responder_kw_text->position = $position ? $position : 'left'; $responder_kw_text->save();
} }
DB::commit(); return response()->json(['status'=>'success','data'=>$responder_detail]);
}
public function getTemplates(Request $request){
$sms_templates=SmsTemplate::where('customer_id', auth('customer')->user()->id)->where('status', 'active') ->orderByDesc('created_at')->get();
return response()->json(['status'=>'success', 'data'=>$sms_templates]); }
public function saveTemplates(Request $request){
try{ $user = auth('customer')->user();
$template =new SmsTemplate(); $template->customer_id = $user->id; $template->title = $request->title; $template->status = 'active'; $template->body = $request->body; $template->save();
return response()->json(['status'=>'success', 'message'=>'Template Successfully Created']);
}catch(\Exception $ex){ return response()->json(['status'=>'failed', 'message'=>$ex->getMessage()]); }
}
public function delete_detail(Request $request) { $detail=ResponderDetail::where('id', $request->id)->first(); if(!$detail){ return response()->json(['status'=>'failed', 'message'=>'Invalid Response Detail']); } if($detail->responders){ ResponderDetail::whereIn('id', $detail->responders->pluck('id'))->delete(); }
$detail->delete();
return response()->json(['status'=>'success', 'message'=>'Response Detail Successfully Deleted']);
}
}
|