Viewing File: /home/ubuntu/vedadeals-backend-base/app/Http/Controllers/Admin/BannerController.php

<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;

use Illuminate\Http\Request;

use App\Helpers\Helper;

use DB, Exception, Setting, Hash, Storage;

use App\Models\{ Banner, Product };

use App\Http\Requests\Admin\Banner\{ BannerPostRequest, BannerGetRequest };

class BannerController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    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 banners_index()
     *
     * @uses to list the banners
     *
     * @created Karthick
     *
     * @updated  
     *
     * @param
     *
     * @return to banners index page
     */

    public function banners_index(Request $request) {

        $base_query = Banner::with(['product'])->orderBy('created_at','DESC');

        if($request->filled('search_key')) {

            $base_query = $base_query->where(function ($query) use ($request) {
                                $query->where('title', "LIKE", "%" . $request->search_key . "%");
                                $query->orWhere('link', "LIKE", "%" . $request->search_key . "%");
                            });
        }

        if($request->filled('type')) {

            $base_query = $base_query->where('type', $request->type);   
        }

        if($request->filled('status')) {

            $base_query = $base_query->where('status', $request->status);
            
        } 

        $banners = $base_query->paginate($this->take);
        
        return view('admin.banners.index')
                    ->with('page', 'banners')
                    ->with('sub_page', 'banners-view')
                    ->with('banners', $banners);
    
    }

    /**
     * @method banners_create()
     *
     * @uses To create a new bannner
     *
     * @created  Karthick
     *
     * @updated 
     *
     * @param create a new object
     * 
     * @return to create bannner page
     *
     */
    public function banners_create() {

        $banner = new Banner;

        $user_products = Product::Available()->get(['id', 'name']);
 
        return view('admin.banners.create')
                    ->with('page', 'banners')
                    ->with('sub_page', 'banners-create')
                    ->with(compact(['banner', 'user_products']));           
    }

    /**
     * @method banners_edit()
     *
     * @uses to edit bannner details based on the banner_id
     *
     * @created Karthick
     *
     * @updated 
     *
     * @param object $request - banner_id
     * 
     * @return to edit bannner page 
     *
     */
    public function banners_edit(BannerGetRequest $request) {

        try {

            $banner = Banner::find($request->banner_id);

            $user_products = Product::Available()->get(['id', 'name']);

            return view('admin.banners.edit')
                    ->with('page' , 'banners')
                    ->with('sub_page','banners-create')
                    ->with(compact(['banner', 'user_products']));  
            
        } catch(Exception $e) {

            return redirect()->route('admin.banners.index')->with('flash_error', $e->getMessage());
        }
    
    }

    /**
     * @method banners_save()
     *
     * @uses to save the bannner details of new/existing object based on banner_id
     *
     * @created Karthick
     *
     * @updated
     *
     * @param object $request - banner_id
     *
     * @return view bannner page
     *
     */
    public function banners_save(BannerPostRequest $request) {
            
        try {

            DB::begintransaction();

            $check = Banner::when(request('banner_id'), function($query){
                                $query->where('id', '!=', request('banner_id'));
                            })->where(['type' => BANNER_PRODUCT, 'product_id' => request('product_id')])
                            ->exists();

            if($check) {

                throw new Exception(tr('banner_already_exists_for_this_product'));
            }

            if($request->type == BANNER) {

                $banner = Banner::updateOrCreate(['id' => $request->banner_id], $request->validated());
            
                if($request->hasFile('picture')) {

                    $request->banner_id ? Helper::storage_delete_file($banner->picture, BANNER_FILE_PATH) : ''; 

                    $banner->picture = Helper::storage_upload_file($request->file('picture'), BANNER_FILE_PATH);

                    $banner->save();
                }

            } elseif($request->type == BANNER_PRODUCT) {

                $product = Product::find($request->product_id);

                $banner = Banner::updateOrCreate(['id' => $request->banner_id],
                    ['type' => $request->type,
                    'product_id' => $product->id,
                    'product_unique_id' => $product->unique_id,
                    'title' => $product->name ? : '',
                    'description' => $product->description ? : '',
                    'link' => Setting::get('frontend_url')."product/$product->unique_id",
                    'picture' => $product->file ? : '',
                ]);

            }

            if($banner) {

                DB::commit();

                $message = $request->banner_id ? tr('banner_updated_success') : tr('banner_created_success');

                return redirect(route('admin.banners.view', ['banner_id' => $banner->id ]))->with('flash_success', $message);

            }

            throw new Exception(tr('banner_save_failed'));
            
        } catch(Exception $e){ 

            DB::rollback();

            return back()->withInput()->with('flash_error', $e->getMessage());

        } 

    }

    /**
     * @method banners_view()
     *
     * @uses to view the bannner details based on banner_id
     *
     * @created Karthick 
     *
     * @updated 
     *
     * @param object $request - banner_id
     * 
     * @return View page
     *
     */
    public function banners_view(BannerGetRequest $request) {
       
        try {
      
            $banner = Banner::find($request->banner_id);   

            return view('admin.banners.view')
                        ->with('page', 'banners')
                        ->with('sub_page', 'banners-view')
                        ->with('banner',$banner);
            
        } catch (Exception $e) {

            return redirect()->route('admin.banners.index')->with('flash_error', $e->getMessage());
        }
    
    }


    /**
     * @method banners_status
     *
     * @uses to change bannner status as DECLINED/APPROVED based on banner_id
     *
     * @created Karthick
     *
     * @updated 
     *
     * @param object $request - banner_id
     * 
     * @return response success/failure message
     *
     **/
    public function banners_status(BannerGetRequest $request) {

        try {

            DB::beginTransaction();

            $banner = Banner::find($request->banner_id);

            $result = $banner->update(['status' => $banner->status ? DECLINED : APPROVED]);

            if($result) {

                DB::commit();

                $message = $banner->status ? tr('banner_approve_success') : tr('banner_decline_success');

                return back()->with('flash_success', $message);
            }
            
            throw new Exception(tr('banner_status_change_failed'));

        } catch(Exception $e) {

            DB::rollback();

            return redirect()->route('admin.banners.index')->with('flash_error', $e->getMessage());

        }

    }

    /**
     * @method banners_delete()
     *
     * @uses to delete the bannner details based on banner_id
     *
     * @created Karthick 
     *
     * @updated  
     *
     * @param object $request - banner_id
     * 
     * @return response of success/failure details with view page
     *
     */
    public function banners_delete(BannerGetRequest $request) {

        try {

            DB::begintransaction();

            $banner = Banner::find($request->banner_id);

            if($banner->delete()) {

                DB::commit();

                return redirect()->route('admin.banners.index')->with('flash_success',tr('banner_deleted_success'));   

            } 
            
            throw new Exception(tr('banner_delete_failed'));
            
        } catch(Exception $e){

            DB::rollback();

            return back()->with('flash_error', $e->getMessage());

        }       
         
    }
}
Back to Directory File Manager