262 lines
9.4 KiB
PHP
262 lines
9.4 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Resources\TagResource;
|
|
use App\Http\Resources\TagResourceCollection;
|
|
use App\Models\Admin\Tag;
|
|
use Illuminate\Http\Request;
|
|
use App\Models\Admin\FAQ;
|
|
use App\Models\Admin\Pages;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Validator;
|
|
|
|
class ManageFaqController extends Controller
|
|
{
|
|
// manage faq page
|
|
public function index()
|
|
{
|
|
$faq_data = FAQ::with('tag')->get();
|
|
return view('Admin.Pages.manage_cms.manage_faq.manage_faq', ['faq_data' => $faq_data]);
|
|
}
|
|
|
|
public function show($id)
|
|
{
|
|
// $faq_data = FAQ::where('id',$id)->where('is_active','1')->first();
|
|
// $faq_data = FAQ::find($id)->tag;
|
|
$faq_data = Tag::join('faq', 'tags.id', '=', 'faq.tag_id')->where('faq.id', $id)->get(['faq.*', 'tags.tag_name']);
|
|
return view('Admin.Pages.manage_cms.manage_faq.view_faq', ['faq_data' => $faq_data[0]]);
|
|
}
|
|
|
|
public function add_faq()
|
|
{
|
|
$page_list = Pages::where('is_active', 1)->get();
|
|
$tags = Tag::all();
|
|
return view('Admin.Pages.manage_cms.manage_faq.add_faq', ['page_list' => $page_list, 'tags' => $tags]);
|
|
}
|
|
|
|
public function store_faq(Request $request)
|
|
{
|
|
$validator = Validator::make(
|
|
$request->all(),
|
|
[
|
|
// "question" => 'required|unique:faq,faq_question,tag_id'.$request->input('tag'),
|
|
"question" => [
|
|
'required',
|
|
function ($attribute, $value, $fail) {
|
|
// check question is unique in that table
|
|
$question_exists = FAQ::where('faq_question', $value)->where('tag_id', request()->input('tag'))->count() > 0;
|
|
|
|
if ($question_exists) {
|
|
$fail('The ' . $attribute . ' must be unique.');
|
|
}
|
|
}
|
|
],
|
|
"answer" => 'required',
|
|
"faq_type" => 'required',
|
|
"tag" => 'required',
|
|
],
|
|
[
|
|
'question.required' => 'Question is required',
|
|
'question.unique' => 'Question should be unique',
|
|
'answer.required' => 'Answer is required',
|
|
'faq_type.required' => 'Faq Type is required',
|
|
'tag.required' => 'Tag Name is required',
|
|
]
|
|
);
|
|
// dd($request->all());
|
|
// return $request->all();
|
|
$validationMessage = validationErrorMessage($validator);
|
|
if ($validationMessage) {
|
|
return response()->json(
|
|
[
|
|
"status" => 400,
|
|
"message" => $validationMessage
|
|
]
|
|
);
|
|
}
|
|
if (isset($request->question)) {
|
|
$tag = Tag::find($request->tag);
|
|
$faq = new FAQ();
|
|
$faq->faq_question = $request->question;
|
|
$faq->faq_answer = $request->answer;
|
|
$faq->faq_page = "null";
|
|
$faq->faq_type = $request->faq_type;
|
|
$faq->is_active = '1';
|
|
$tag->FAQ()->save($faq);
|
|
// $request->session()->flash('message', 'Faq added successfully');
|
|
return response(['status' => 200]);
|
|
} else {
|
|
// $request->session()->flash('message', 'Fields are missing');
|
|
return response(['status' => 204]);
|
|
}
|
|
}
|
|
|
|
// fetch faq data for update with page list(pages links)
|
|
public function edit_faq($id)
|
|
{
|
|
$faq_data = FAQ::where('id', $id)->first();
|
|
$page_list = Pages::where('is_active', 1)->get();
|
|
$tags = Tag::all();
|
|
// return $page_list;
|
|
return view('Admin.Pages.manage_cms.manage_faq.edit_faq', ['faq_data' => $faq_data, 'page_list' => $page_list, 'tags' => $tags]);
|
|
}
|
|
|
|
// update faq data
|
|
public function update_faq(Request $request)
|
|
{
|
|
// dd("hello");
|
|
$validator = Validator::make(
|
|
$request->all(),
|
|
[
|
|
"question" => [
|
|
'required',
|
|
function ($attribute, $value, $fail) {
|
|
// check question is unique in that table
|
|
// $question_exists = FAQ::where('id', 'NOT IN', request()->input('faq_id'))->get();
|
|
$question_exists = DB::select("select * from faq where id<>'" . request()->input('faq_id') . "' and faq_question='" . request()->input('question') . "' and tag_id='" . request()->input('tag_id') . "' ");
|
|
|
|
if ($question_exists) {
|
|
$fail('The ' . $attribute . ' must be unique.');
|
|
}
|
|
}
|
|
],
|
|
"answer" => 'required',
|
|
'tag_id' => 'required',
|
|
"faq_type" => 'required',
|
|
],
|
|
[
|
|
'question.required' => 'Question is required',
|
|
// 'question.unique' =>'Question should be unique',
|
|
'answer.required' => 'Answer is required',
|
|
// 'page.required' =>'Page is required',
|
|
'required' => 'The :attribute field must be required',
|
|
]
|
|
);
|
|
$validationMessage = validationErrorMessage($validator);
|
|
if ($validationMessage) {
|
|
return response()->json(["status" => 400, "message" => $validationMessage]);
|
|
}
|
|
|
|
$updateFaq = FAQ::where('id', $request->faq_id)->update([
|
|
'tag_id' => $request->tag_id,
|
|
'faq_question' => $request->question,
|
|
'faq_answer' => $request->answer,
|
|
'faq_type' => $request->faq_type,
|
|
]);
|
|
|
|
if ($updateFaq) {
|
|
return response()->json(['status' => 200, 'message' => 'Faq Data Updated']);
|
|
}
|
|
return response()->json(['status' => 400, 'message' => 'Faq Data Could Not Be Updated']);
|
|
}
|
|
|
|
// delete faq data by id
|
|
public function delete_faq(Request $request, $id)
|
|
{
|
|
$faq = FAQ::where('id', $id)->delete();
|
|
|
|
if ($faq) {
|
|
// $request->session()->flash('message', 'Faq deleted successfully');
|
|
return response(['status' => 200, 'message' => 'Faq deleted successfully']);
|
|
} else {
|
|
// $request->session()->flash('message', 'Something went wrong! Try again');
|
|
return response(['status' => 204, 'message' => 'Something went wrong! Try again']);
|
|
}
|
|
}
|
|
|
|
// faq status changing active/inactive on toggle
|
|
public function update_status(Request $request)
|
|
{
|
|
$id = $request->id;
|
|
$status = $request->status == 1 ? 0 : 1;
|
|
$updateStatus = Faq::where('id', $id)->update([
|
|
'is_active' => $status
|
|
]);
|
|
if (!$updateStatus) {
|
|
return response()->json(['status' => 400, 'message' => 'Error Changing Faq Status!']);
|
|
}
|
|
return response()->json(['status' => 200, 'message' => 'Status Changed!']);
|
|
}
|
|
|
|
public function faqList()
|
|
{
|
|
$faqList = FAQ::where('is_active', 1)->get();
|
|
if (!$faqList) {
|
|
return response()->json(['status' => 400, 'message' => 'No FAQs'], 400);
|
|
}
|
|
return response()->json(['status' => 200, 'data' => $faqList], 200);
|
|
}
|
|
|
|
public function faqListForFrontend()
|
|
{
|
|
$tags = $this->tagWithFaqs()->getData();
|
|
// $tagName = Tag::has('faq')->orderBy('tag_name','ASC')->get(['id', 'tag_name']);
|
|
$tagName = Tag::has('faq')->orderBy(\DB::raw('(id = 49) DESC, tag_name, id'))->get(['id', 'tag_name']);
|
|
return view('Frontend.Pages.resources.faqs', ['tags' => $tags->data, 'tagName' => $tagName]);
|
|
}
|
|
|
|
// faq api
|
|
public function tagWithFaqs()
|
|
{
|
|
try {
|
|
return (new TagResourceCollection(Tag::has('faq')->orderBy(\DB::raw('(id = 49) DESC, tag_name, id'))->with('faq', function ($query) {
|
|
$query->where('is_active', true)
|
|
->where('faq.faq_type', '1');
|
|
})->get()))
|
|
->response()
|
|
->setStatusCode(200);
|
|
} catch (\Exception $e) {
|
|
return response()->json(['message' => $e->getMessage()], 400);
|
|
}
|
|
}
|
|
|
|
public function getAllTagsRelatedToFaq()
|
|
{
|
|
$tags = Tag::query()
|
|
->join('faq', 'tags.id', 'faq.tag_id')
|
|
->where('is_active',true)
|
|
->select('tags.id', 'tag_name')
|
|
->distinct('id','tag_name')
|
|
->get();
|
|
if ($tags) {
|
|
return response()->json([
|
|
"status" => "success",
|
|
"data" => $tags
|
|
]);
|
|
} else {
|
|
return response()->json([
|
|
"status" => "failed",
|
|
], 400);
|
|
}
|
|
}
|
|
|
|
public function getAllFaqs(Request $request)
|
|
{
|
|
if ($request->method() == 'POST') {
|
|
$tag_id = $request->tag_id;
|
|
}
|
|
|
|
$faqs = FAQ::query()
|
|
->when(request('tag_id'), function ($query) use ($tag_id) {
|
|
$query->where('tag_id', $tag_id);
|
|
})
|
|
->where('is_active', true)
|
|
->select('id', 'faq_question', 'faq_answer')
|
|
->get();
|
|
|
|
if ($faqs) {
|
|
return response()->json([
|
|
"status" => "success",
|
|
'tag' => $tag_id ? Tag::where('id',$tag_id)->value('tag_name') : 'No Tag',
|
|
"data" => $faqs,
|
|
]);
|
|
} else {
|
|
return response()->json([
|
|
"status" => "failed",
|
|
], 400);
|
|
}
|
|
}
|
|
}
|