Files
freeu-project/app/Http/Controllers/Admin/ManageFaqController.php
Ritikesh yadav c661166e1d first commit
2024-03-28 14:52:40 +05:30

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);
}
}
}