2024-03-28 14:52:40 +05:30
< ? 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 ()
{
2024-04-09 17:56:07 +05:30
$check = checkSidebarAccess ( 'manage-faq' );
if ( ! $check ) {
abort ( 404 );
}
2024-03-28 14:52:40 +05:30
$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' )
2024-04-09 17:56:07 +05:30
-> where ( 'is_active' , true )
2024-03-28 14:52:40 +05:30
-> select ( 'tags.id' , 'tag_name' )
2024-04-09 17:56:07 +05:30
-> distinct ( 'id' , 'tag_name' )
2024-03-28 14:52:40 +05:30
-> 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 " ,
2024-04-09 17:56:07 +05:30
'tag' => $tag_id ? Tag :: where ( 'id' , $tag_id ) -> value ( 'tag_name' ) : 'No Tag' ,
2024-03-28 14:52:40 +05:30
" data " => $faqs ,
]);
} else {
return response () -> json ([
" status " => " failed " ,
], 400 );
}
}
}