Current File : /home/masbinta/public_html/core/app/Http/Controllers/Admin/PortfolioController.php
<?php

namespace App\Http\Controllers\Admin;

use App\Helpers\Helper;
use App\Models\Service;
use App\Models\Language;
use App\Models\Portfolio;
use Illuminate\Http\Request;
use App\Models\PortfolioImage;
use App\Http\Controllers\Controller;

class PortfolioController extends Controller
{
    public $lang;
    public function __construct()
    {
        $this->lang = Language::where('is_default', 1)->first();
    }

    public function index(Request $request){
        $lang = Language::where('code', $request->language)->first()->id;

        $portfolios = Portfolio::where('language_id', $lang)->orderBy('id', 'DESC')->get();

        return view('admin.portfolio.index', compact('portfolios'));
    }

    public function portfolio_get_category($id){

        $services = Service::where('status', 1)->where('language_id', $id)->get();
        $output = '';

        foreach($services as $service){
            $output .= '<option value="'.$service->id.'">'.$service->title.'</option>';
        }
        return $output;
    }

    // Add Portfolio 
    public function add(){
		  $services = Service::where('status', 1)->get();
		
		
        return view('admin.portfolio.add', compact('services'));
    }


    // Store Portfolio 
    public function store(Request $request){

        $slug = Helper::make_slug($request->title);
        $Portfolios = Portfolio::select('slug')->get();


        $request->validate([
            'image[]' => 'mimes:jpeg,jpg,png',
            'featured_image' => 'required|mimes:jpeg,jpg,png',
            'title' => [
                'required',
                'unique:portfolios,title',
                'max:255',
                function($attribute, $value, $fail) use ($slug, $Portfolios){
                    foreach($Portfolios as $port){
                        if($port->slug == $slug){
                            return $fail('Title already taken!');
                        }
                    }
                }
            ],
            'client_name' => 'required|max:250',
            'start_date' => 'required|max:250',
            'status' => 'required|max:250',
            'service_id' => 'required',
            'content' => 'required',
            'serial_number' => 'required',
            'language_id' => 'required',
        ]);


        $portfolio = new Portfolio();

        if($request->hasFile('featured_image')){

            $file = $request->file('featured_image');
            $extension = $file->getClientOriginalExtension();
            $featured_image = time().rand().'.'.$extension;
            $file->move('assets/front/img/portfolio/', $featured_image);

            $portfolio->featured_image = $featured_image;
        }


        $portfolio->title = $request->title;
        $portfolio->language_id = $request->language_id;
        $portfolio->status = $request->status;
        $portfolio->content = $request->content;
        $portfolio->slug = $slug;
        $portfolio->start_date = $request->start_date;
        $portfolio->submission_date = $request->submission_date;
        $portfolio->link = $request->link;
        $portfolio->service_id = $request->service_id;
        $portfolio->client_name = $request->client_name;
        $portfolio->serial_number = $request->serial_number;
        $portfolio->meta_keywords = $request->meta_keywords;
        $portfolio->meta_description = $request->meta_description;
        $portfolio->save();
        $portfolio_id = $portfolio->id;

  

        if($request->hasFile('image')){
            $files = $request->file('image');
            $count = 1;
            foreach ($files as $file){
                    $extension = $file->getClientOriginalExtension();
                    $image = 'portfolio_'.$count.time().rand().'.'.$extension;
                    $file->move('assets/front/img/portfolio/', $image);
                    $portfolio_slider = new PortfolioImage();
                    $portfolio_slider->image = $image;
                    $portfolio_slider->portfolio_id = $portfolio_id;
                    $portfolio_slider->save();
                    $count++;
            }
        }

        $notification = array(
            'messege' => 'Portfolio Added successfully!',
            'alert' => 'success'
        );
        return redirect()->back()->with('notification', $notification);

    }

    // Portfolio  Delete
    public function delete($id){

        $sliders = PortfolioImage::where('portfolio_id', $id)->get();

        foreach ($sliders as $slider){
            unlink('assets/front/img/portfolio/'. $slider->image);
            $slider->delete();
        }

        $portfolio = Portfolio::find($id);
        @unlink('assets/front/img/portfolio/'. $portfolio->featured_image);
        $portfolio->delete();

        
        $notification = array(
            'messege' => 'Portfolio  Deleted successfully!',
            'alert' => 'success'
        );
        return redirect()->back()->with('notification', $notification);
    }

    // Portfolio  Edit
    public function edit($id){
       
        $portfolio = Portfolio::findOrFail($id);
        $blog_lan = $portfolio->language_id;
       
        $services = Service::where('status', 1)->where('language_id', $blog_lan)->get();
        
        $sliders = PortfolioImage::where('portfolio_id', $id)->get();
        
        return view('admin.portfolio.edit', compact('portfolio', 'services', 'sliders'));

    }

    // Portfolio Update
    public function update(Request $request, $id){


        $sliders = $request->sliders;
        if($sliders != null){
            $files = $request->sliders;
            // $count = 1;
             foreach ($files as $file){
                     $slider = PortfolioImage::where('id',  $file)->first();
                     @unlink('assets/front/img/portfolio/'. $slider->image);
                     $slider->delete();
             }
        }


        $slug = Helper::make_slug($request->title);
        $portfolios = Portfolio::select('slug')->get();
        $portfolio = Portfolio::findOrFail($id);

        $request->validate([
            'image[]' => 'mimes:jpeg,jpg,png',
            'featured_image' => 'mimes:jpeg,jpg,png',
            'title' => [
                'required',
                'max:255',
                function($attribute, $value, $fail) use ($slug, $portfolios, $portfolio){
                    foreach($portfolios as $blg){
                        if($portfolio->slug != $slug){
                            if($blg->slug == $slug){
                                return $fail('Title already taken!');
                            }
                        }
                    }
                },
                'unique:portfolios,title,'.$id
            ],
            'client_name' => 'required|max:250',
            'start_date' => 'required|max:250',
            'status' => 'required|max:250',
            'service_id' => 'required',
            'content' => 'required',
            'serial_number' => 'required',
            'language_id' => 'required',

        ]);

        if($request->hasFile('featured_image')){
            @unlink('assets/front/img/portfolio/'. $portfolio->featured_image);

            $file = $request->file('featured_image');
            $extension = $file->getClientOriginalExtension();
            $featured_image = time().rand().'.'.$extension;
            $file->move('assets/front/img/portfolio/', $featured_image);

            $portfolio->featured_image = $featured_image;
            
        }

        $portfolio->title = $request->title;
        $portfolio->language_id = $request->language_id;
        $portfolio->status = $request->status;
        $portfolio->content = $request->content;
        $portfolio->slug = $slug;
        $portfolio->start_date = $request->start_date;
        $portfolio->submission_date = $request->submission_date;
        $portfolio->link = $request->link;
        $portfolio->service_id = $request->service_id;
        $portfolio->client_name = $request->client_name;
        $portfolio->serial_number = $request->serial_number;
        $portfolio->meta_keywords = $request->meta_keywords;
        $portfolio->meta_description = $request->meta_description;
        $portfolio->save();
        $portfolio_id = $portfolio->id;

        if($request->hasFile('image')){
            $files = $request->file('image');
            $count = 1;
            foreach ($files as $file){
                    $extension = $file->getClientOriginalExtension();
                    $image = 'portfolio_'.$count.time().rand().'.'.$extension;
                    $file->move('assets/front/img/portfolio/', $image);
                    $portfolio_slider = new PortfolioImage();
                    $portfolio_slider->image = $image;
                    $portfolio_slider->portfolio_id = $portfolio_id;
                    $portfolio_slider->save();
                    $count++;
            }
        }



        $notification = array(
            'messege' => 'Portfolio Updated successfully!',
            'alert' => 'success'
        );

        return redirect(route('admin.portfolio.index').'?language='.$this->lang->code)->with('notification', $notification);

    }

}