CRUD

 CRUD by laravel šŸ‘‡

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Pagination\Paginator;
use App\Company;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\File;

class CompanyController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    private $validationRules = ['name' => 'required'];

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return view('company.list');
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('company.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $this->validate($request, $this->validationRules);
        $this->validationRules['logo'] = 'required|dimensions:min_width=100,min_height=100';

        $company = new company();
        $company->fill($request->all());

        if($request->file('logo'))
        {
         
        //  $company->logo = $this->saveLogo($request->file('logo'), 'images\logo', 'logo');   
         
            $logo = $request->file('logo');
            $extension = $logo->getClientOriginalExtension();
            Storage::disk('public')->put($logo->getFilename().'.'.$extension,  File::get($logo));

            $company->logo = $logo->getFilename().'.'.$extension;      
        }

        if ($company->save()) {

            return redirect()->route('company.index')->with('success'trans('messages.company.create.success'));
        }
        return redirect()->route('company.index')->with('error'trans('messages.company.create.error'));
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit(company $company)
    {
        return view('company.create',['company' => $company]);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, company $company)
    {
        $this->validate($request, $this->validationRules);
            
        $company->fill($request->all());

        // if($request->hasFile('logo'))
        // {
        //     $company->logo = $this->saveLogo($request->file('logo'), 'images\logo', 'logo');    
        // }

        if($request->file('logo'))
        {
            $logo = $request->file('logo');
            $extension = $logo->getClientOriginalExtension();
            Storage::disk('public')->put($logo->getFilename().'.'.$extension,  File::get($logo));

            $company->logo = $logo->getFilename().'.'.$extension;      
        }

        if($company->save())
        {
            return redirect()->route('company.index')->with('success',trans('messages.company.update.success'));
        }

        return redirect()->route('company.index')->with('error',trans('messages.company.update.error'));
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy(company $company)
    {
        if($company->delete())
        {
            return redirect(route('company.index'))->with('success'trans('messages.company.delete.success'));
        }
        
        return redirect(route('company.index'))->with('error'trans('messages.company.delete.error'));
    }

    /**
     * Search companys.
     *
     * @param Request $request
     *
     * @return json
     */
    public function search(Request $request)
    {
        if ($request->ajax()) {

            $currentPage = ($request->start == 0) ? 1 : (($request->start / $request->length) + 1);

            Paginator::currentPageResolver(function () use ($currentPage) {
                return $currentPage;
            });
       
            $startNo = ($request->start == 0) ? 1 : (($request->length) * ($currentPage - 1)) + 1;
            $query = company::selectRaw('companies.*')->orderBy('id','DESC');

            $orderDir = $request->order[0]['dir'];
            $orderColumnId = $request->order[0]['column'];
            $orderColumn = str_replace('"''', $request->columns[$orderColumnId]['name']);

            $query->where(function ($query) use ($request) {

                $query->orWhere('companies.name''like''%' . $request->search['value'] . '%');
            });

            $company = $query->orderBy($orderColumn, $orderDir)
                ->paginate($request->length)->toArray();

            $company['recordsFiltered'] = $company['recordsTotal'] = $company['total'];

            foreach ($company['data'] as $key => $companys) {

                $params = [
                    'company' => $companys['id'],
                ];

                $company['data'][$key]['sr_no'] = $startNo + $key;

                $editRoute = route('company.edit', $params);

                $deleteRoute = route('company.destroy', $params);

                $company['data'][$key]['action'] = '<a href="' . $editRoute .'"><button class="btn btn-primary">Edit</button></a>&nbsp&nbsp';
                $company['data'][$key]['action'] .= '<a href="javascript:void(0);" data-url="' . $deleteRoute . '" class="btnDelete"><button class="btn btn-danger">Delete</button></a>&nbsp&nbsp';
                $company['data'][$key]['logo']  .= '<img src="'.url('uploads/'.$companys['logo']).'" height="50px" width="50px">';
            }

            return response()->json($company);
        }
    }

     /**
     * Save logo.
     *
     * @param $logo,
     * @param $path,
     * @param $prefix,
     * 
     * @return $logoName
    */
    public function saveLogo($logo,$path,$prefix)
    {
        if(!empty($logo))
        {
            $destinationPath = public_path($path);
            $fileName = $prefix.'_'.time().'_'.strtolower(Str::random(6) ).'.'.$logo->getClientOriginalExtension();

            if($logo->move($destinationPath, $fileName)) {
                chmod($destinationPath.'/'.$fileName,0777);
                return $fileName;
            }
        }
        return null;
    }
}

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Company extends Model
{
    /**
     * Table name
     *
     * @var array
     */
    protected $table = 'companies';
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name''email''logo','website_url'
    ];
}

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@extends('layouts.index')

@section('title') Company List

@endsection

@section('content')

<div class="container-fluid text-center">  
<div class="row">
    <a href="{{ route('company.create') }}" ><button class="btn btn-primary">Create Company</button></a>
</div>  
  <div class="row content">
    <div class="col-sm-12 text-left"> 
    @include('common.flash')
      <table id="participants" class="table table-striped table-bordered nowrap dataTable dt-responsive" style="width:100%">
          <thead>
            <tr>
                <th width="100px">No</th>
                <th>Name</th>
                <th>Email</th>
                <th>Logo</th>
                <th>Url</th>
                <th width="100px">Action</th>
            </tr>
          </thead>
          <tbody>
          </tbody>
        </table>
    </div>
  </div>
</div>
@include('common.forms')
@endsection

@section('js')

<script>

    var table;
    $(function() {
        table = $('#participants').DataTable({
            processingtrue,
            serverSidetrue,
            "ajax": {
                "url":'{{ url(route("company.search"))  }}',
                "type""POST",
                "async"false,
            },
            columns: [
                { data'sr_no' ,name:'sr_no'orderable:false },
                { data'name'name'name'},
                { data'email'name'email'},
                { data'logo'name'logo'},
                { data'website_url'name'website_url'},
                { data'action'name'action'orderablefalse },
            ],
            "aaSorting": [[1,'desc']],
         });
    });

</script>
@endsection



++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@extends('layouts.index')

@section('title') {{ empty($company) ? ' Company' : ' Company' }} @endsection

@section('content')

<div class="container-fluid text-center">  
    <div class="row">
        <h2> Create company</h2>
    </div>   
    <div class="row content">
        <div class="col-sm-12 text-left"> 
        @include('common.flash')
            @if(empty($company))
                <form class="form" name="companystore" id="companystore" method="post" enctype="multipart/form-data" action="{{ route('company.store') }}">
            @else
                <form class="form" name="companyupdate" id="companyupdate" method="post" enctype="multipart/form-data" action="{{ route('company.update', ['company' => $company->id]) }}">
                    @method('PUT')
            @endif

            {{ csrf_field() }}

            <input type="hidden" name="id" id="id" value="{{ $company->id ?? '' }}" />
                <div class="row">
                    <div class="col-md-6">
                        <div class="form-group row">
                            <div class="col-sm-12">
                                <label for="name" class="block">Name *</label>
                            </div>
                            <div class="col-sm-12">
                                <input class="form-control" type="text" value="{{ $company->name ?? '' }}" name="name" id="name" placeholder="Please enter name" tabindex="2"  >
                            </div>
                        </div>      
                    </div>

                    <div class="col-md-6">
                        <div class="form-group row">
                            <div class="col-sm-12">
                                <label for="email" class="col-2 col-form-label">Email<span class="text-danger"></span> </label>
                            </div>
                            <div class="col-sm-12">
                                <input class="form-control" type="email" value="{{ $company->email ?? '' }}" id="email" name="email" placeholder="Please enter email" tabindex="3" />
                            </div>
                        </div>      
                    </div>
                </div>

                <div class="row">
                    <div class="col-md-6">
                        <div class="form-group row">
                            <div class="col-sm-12">
                                <label for="logo" class="col-2 col-form-label">Logo<span class="text-danger"></span> </label>
                            </div>
                            <div class="col-sm-12">
                                <input type="file" id="logo" name="logo" class="dropify" tabindex="3" data-show-remove="false" accept="image/x-png,image/jpg,image/jpeg"  data-allowed-file-extensions="jpg png jpeg " data-default-file="{{ !empty($company->logo) ? url('images/logo/'.$company->logo) : ''}}"/>
                            @if(!empty($company->logo))
                            <br>
                            <img class="card-img-top" src="{{url('uploads/'.$company->logo)}}" alt="{{$company->logo}}" height="50px" width="50px">
                            @endif

                            </div>
                        </div>      
                    </div>

                    <div class="col-md-6">
                        <div class="form-group row">
                            <div class="col-sm-12">
                                <label for="website_url" class="col-2 col-form-label">Site Url<span class="text-danger"></span> </label>
                            </div>
                            <div class="col-sm-12">
                                <input class="form-control" type="text" value="{{ $company->website_url ?? '' }}" id="website_url" name="website_url" placeholder="Please enter website url" tabindex="4" />
                            </div>
                        </div>      
                    </div>

                </div>

                <button type="submit" class="btn btn-info"> {{ empty($company) ? 'Create' : 'Update' }}</button>
            </form>
            </div>
    </div>
</div>
@endsection

@section('js')

@endsection

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

<script>
  $.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN'$('meta[name="csrf-token"]').attr('content')
    }
  });

  $(document).ready(function(){
        setTimeout(function(){$('.alertdisapper').fadeOut();}, 4000);
  });

  var url = $('meta[name="baseUrl"]').attr('content');

    $(document).on("click",'.btnDelete',function(event) {
      var url = $(this).data('url');
      event.preventDefault();
      if (confirm('Are you sure?')) {
              form = $('#deleteForm');
              form.attr('action', url);
              form.submit();
        }
    });

</script>

Comments

Popular posts from this blog

API

Encryption and Decryption By PHP

Seeder