Viewing File: /home/ubuntu/vedadeals-backend-base/app/Http/Controllers/Admin/ReviewController.php
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Helpers\Helper;
use App\Models\{ User, Product, Review, ReviewFile };
use App\Http\Requests\Admin\Review\{ ReviewGetRequest, ReviewPostRequest };
use DB, Exception, Setting;
class ReviewController extends Controller
{
public function __construct(Request $request) {
$this->middleware('auth:admin');
$this->skip = $request->skip ? : 0;
$this->take = $request->take ? : Setting::get('admin_take_count', TAKE_COUNT);
}
/**
* @method reviews_index()
*
* @uses to list the reviews
*
* @created Karthick
*
* @updated
*
* @param
*
* @return to reviews index page
*/
public function reviews_index(Request $request) {
$base_query = Review::with(['user:id,name', 'product:id,name'])->orderBy('created_at','DESC');
if($request->filled('search_key')) {
$base_query = $base_query->when($request->filled('status'), function ($query) use ($request) {
$query->where('status', $request->status);
})->where(function($query) use ($request) {
$query->Where('review', "LIKE", "%". $request->search_key . "%");
})->orWhereHas('user', function($query) use($request) {
$query->Where('name', "LIKE", "%". $request->search_key . "%");
})->orWhereHas('product', function($query) use($request) {
$query->Where('name', "LIKE", "%". $request->search_key . "%");
});
}
if($request->filled('status')) {
$base_query = $base_query->where('status', $request->status);
}
$reviews = $base_query->paginate($this->take);
return view('admin.reviews.index')
->with('page', 'reviews')
->with('sub_page', 'reviews-view')
->with(compact(['reviews']));
}
/**
* @method reviews_edit()
*
* @uses to edit review details based on the review_id
*
* @created Karthick
*
* @updated
*
* @param object $request - review_id
*
* @return to edit review page
*
*/
public function reviews_edit(ReviewGetRequest $request) {
try {
$review = Review::find($request->review_id);
$users = User::orderBy('name')->get(['id', 'name']);
$products = Product::orderBy('name')->get(['id', 'name']);
return view('admin.reviews.edit')
->with('page' , 'reviews')
->with('sub_page','reviews-edit')
->with(compact(['review', 'users', 'products']));
} catch(Exception $e) {
return redirect()->route('admin.products.index')->with('flash_error', $e->getMessage());
}
}
/**
* @method reviews_save()
*
* @uses to save the review details of existing object based on review_id
*
* @created Karthick
*
* @updated
*
* @param object $request - review_id
*
* @return view review page
*
*/
public function reviews_save(ReviewPostRequest $request) {
try {
DB::begintransaction();
$review = Review::updateOrCreate(['id' => $request->review_id], $request->validated());
if($review) {
if($request->has('review_files')) {
$is_default_file = ReviewFile::where(['review_id' => $review->id, 'is_default' => YES])->exists();
foreach($request->review_files as $key => $file) {
$file_url = Helper::storage_upload_file($file, REVIEW_FILE_PATH);
$file_type = in_array($file->getClientOriginalExtension(), ['jpg', 'jpeg', 'png']) ? IMAGE : VIDEO;
$review_file = ReviewFile::Create(['review_id' => $review->id, 'file' => $file_url, 'file_type' => $file_type]);
if(!$is_default_file && $key == 0) {
$review_file->update(['is_default' => YES]);
$review->update(['file' => $file_url]);
}
}
}
DB::commit();
return redirect(route('admin.reviews.view', ['review_id' => $review->id ]))->with('flash_success', tr('review_updated_success'));
}
throw new Exception(tr('review_save_failed'));
} catch(Exception $e){
DB::rollback();
return back()->withInput()->with('flash_error', $e->getMessage());
}
}
/**
* @method reviews_view()
*
* @uses to view the review details based on review_id
*
* @created Karthick
*
* @updated
*
* @param object $request - review_id
*
* @return View page
*
*/
public function reviews_view(ReviewGetRequest $request) {
try {
$review = Review::find($request->review_id);
$review_files = ReviewFile::where(['review_id' => $review->id])->get(['id', 'file']);
return view('admin.reviews.view')
->with('page', 'reviews')
->with('sub_page', 'reviews-view')
->with(compact(['review','review_files']));
} catch (Exception $e) {
return redirect()->route('admin.reviews.index')->with('flash_error', $e->getMessage());
}
}
/**
* @method reviews_status
*
* @uses to change review status as DECLINED/APPROVED based on review_id
*
* @created Karthick
*
* @updated
*
* @param object $request - review_id
*
* @return response success/failure message
*
**/
public function reviews_status(ReviewGetRequest $request) {
try {
DB::beginTransaction();
$review = Review::find($request->review_id);
$result = $review->update(['status' => $review->status ? DECLINED : APPROVED]);
if($result) {
DB::commit();
$message = $review->status ? tr('review_approved_success') : tr('review_declined_success');
return back()->with('flash_success', $message);
}
throw new Exception(tr('review_status_change_failed'));
} catch(Exception $e) {
DB::rollback();
return redirect()->route('admin.reviews.index')->with('flash_error', $e->getMessage());
}
}
/**
* @method reviews_delete()
*
* @uses to delete the review details based on review_id
*
* @created Karthick
*
* @updated
*
* @param object $request - review_id
*
* @return response of success/failure details with view page
*
*/
public function reviews_delete(ReviewGetRequest $request) {
try {
DB::begintransaction();
$review = Review::find($request->review_id);
if($review->delete()) {
DB::commit();
return redirect()->route('admin.reviews.index')->with('flash_success', tr('review_deleted_success'));
}
throw new Exception(tr('review_delete_failed'));
} catch(Exception $e){
DB::rollback();
return back()->with('flash_error', $e->getMessage());
}
}
/**
* @method review_file_delete()
*
* @uses to delete the a review file based on review_file_id
*
* @created Karthick
*
* @updated
*
* @param object $request - review_file_id
*
* @return response of success/failure details with view page
*
*/
public function review_file_delete(Request $request) {
try {
$rules = ['review_file_id' => ['required', 'exists:review_files,id']];
Helper::custom_validator($request->all(), $rules, []);
$review_file = ReviewFile::find($request->review_file_id);
$review_files_count = ReviewFile::where(['review_id' => $review_file->review_id])->count();
if($review_files_count == 1) {
throw new Exception(tr('file_delete_error_only_one_file_exists'));
}
$result = false;
DB::begintransaction();
if($review_file->is_default == YES) {
$new_default_file = ReviewFile::firstWhere(['review_id' => $review_file->review_id, 'is_default' => NO]);
if(!$new_default_file) {
throw new Exception(tr('file_delete_error_only_one_file_exists'));
}
$new_default_file->update(['is_default' => YES]);
}
if($review_file->delete()) {
DB::commit();
return back()->with('flash_success', tr('file_deleted_success'));
}
throw new Exception(tr('file_delete_failed'));
} catch(Exception $e){
DB::rollback();
return back()->with('flash_error', $e->getMessage());
}
}
}
Back to Directory
File Manager