From 3087496c02e6435f8d9dd539184932909601643c Mon Sep 17 00:00:00 2001 From: Aan Choesni Herlingga <aanchoesni@unesa.ac.id> Date: Thu, 26 Dec 2019 12:47:44 +0700 Subject: [PATCH] master gallery --- app/Http/Controllers/Webprofile/Backend/GalleryController.php | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ app/Repositories/Webprofile/GalleryRepository.php | 21 ++++++++++++++++----- database/migrations/2019_11_12_113102_create_galeries_table.php | 2 +- public/js/master/gallery.js | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ resources/views/webprofile/backend/gallery/create.blade.php | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ resources/views/webprofile/backend/gallery/edit.blade.php | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ resources/views/webprofile/backend/gallery/index.blade.php | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ resources/views/webprofile/backend/sliders/edit.blade.php | 6 +++--- routes/webprofile/backend.php | 1 + 9 files changed, 499 insertions(+), 9 deletions(-) create mode 100644 app/Http/Controllers/Webprofile/Backend/GalleryController.php create mode 100644 public/js/master/gallery.js create mode 100644 resources/views/webprofile/backend/gallery/create.blade.php create mode 100644 resources/views/webprofile/backend/gallery/edit.blade.php create mode 100644 resources/views/webprofile/backend/gallery/index.blade.php diff --git a/app/Http/Controllers/Webprofile/Backend/GalleryController.php b/app/Http/Controllers/Webprofile/Backend/GalleryController.php new file mode 100644 index 0000000..5214c24 --- /dev/null +++ b/app/Http/Controllers/Webprofile/Backend/GalleryController.php @@ -0,0 +1,111 @@ +<?php + +namespace App\Http\Controllers\Webprofile\Backend; + +use Illuminate\Http\Request; +use App\Http\Controllers\Controller; +use App\Repositories\Webprofile\GalleryRepository; + +class GalleryController extends Controller +{ + private $repo; + + public function __construct(GalleryRepository $repo) + { + $this->repo = $repo; + } + /** + * Display a listing of the resource. + * + * @return \Illuminate\Http\Response + */ + public function index(Request $request) + { + if ($request->ajax()) { + $data = $this->repo->get(null, null, ['created_at', 'desc']); + return $this->repo->datatable($data); + } + + return view('webprofile.backend.gallery.index')->withTitle(trans('feature.gallery')); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create() + { + return view('webprofile.backend.gallery.create')->withTitle(trans('feature.create_gallery')); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + $this->repo->store($request, 'gallery'); + + return redirect()->route('gallery.index'); + } + + /** + * 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($id) + { + $data = $this->repo->findId($id); + + $data = [ + 'data' => $data, + ]; + + return view('webprofile.backend.gallery.edit', $data)->withTitle(trans('feature.edit_gallery')); + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update(Request $request, $id) + { + $gallery = $this->repo->findId($id); + $edit = $this->repo->update($request, $gallery, 'gallery'); + + return redirect()->route('gallery.index'); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $data = $this->repo->findId($id); + $this->repo->destroy($data, 'gallery'); + + return response()->json(['done']); + } +} diff --git a/app/Repositories/Webprofile/GalleryRepository.php b/app/Repositories/Webprofile/GalleryRepository.php index f179038..15a003c 100644 --- a/app/Repositories/Webprofile/GalleryRepository.php +++ b/app/Repositories/Webprofile/GalleryRepository.php @@ -3,10 +3,10 @@ namespace App\Repositories\Webprofile; use App\Models\Webprofile\Gallery; -use App\Repositories\Repository; +use App\Repositories\StorageRepository; use DataTables; -class GalleryRepository extends Repository +class GalleryRepository extends StorageRepository { protected $model; @@ -32,17 +32,28 @@ class GalleryRepository extends Repository public function datatable($data) { + $setting = webprofilesetting(); + return DataTables::of($data) ->addIndexColumn() ->addColumn('action', function ($row) { - $btn = '<a href="javascript:void(0)" data-toggle="tooltip" data-id="' . $row->id . '" data-original-title="Edit" class="edit btn btn-warning btn-round btn-sm edit">Edit</a>'; + $btn = '<a href="' . url('/webprofile/gallery/' . $row->id . '/edit') . '" data-toggle="tooltip" data-id="' . $row->id . '" data-original-title="' . trans('label.edit') . '" class="edit btn btn-warning btn-round btn-sm edit">' . trans('label.edit') . '</a>'; - $btn = $btn . ' <a href="javascript:void(0)" data-toggle="tooltip" data-id="' . $row->id . '" data-original-title="Delete" class="btn btn-danger btn-round btn-sm delete">Delete</a>'; + $btn = $btn . ' <a href="javascript:void(0)" data-toggle="tooltip" data-id="' . $row->id . '" data-original-title="' . trans('label.delete') . '" class="btn btn-danger btn-round btn-sm delete">' . trans('label.delete') . '</a>'; $btn = $btn . '<br>'; return $btn; }) + ->addColumn('gallery', function ($row) use ($setting) { + if ($setting['external_storage'] == 1) { + $str = '<img src="' . $setting['url_static'] . '/' . $setting['directory'] . '/gallery/' . $row->gallery . '" height="100" width="auto">'; + } else { + $str = '<img src="' . url('/storage/gallery/' . $row->gallery) . '" height="100" width="auto">'; + } + + return $str; + }) ->addColumn('status', function ($row) { if ($row->is_active == true) { $str = '<div style="color: green;"><i class="fa fa-check"></i></div>'; @@ -51,7 +62,7 @@ class GalleryRepository extends Repository } return $str; }) - ->rawColumns(['action', 'status']) + ->rawColumns(['action', 'status', 'gallery']) ->make(true); } } diff --git a/database/migrations/2019_11_12_113102_create_galeries_table.php b/database/migrations/2019_11_12_113102_create_galeries_table.php index a4ab74a..f754c42 100644 --- a/database/migrations/2019_11_12_113102_create_galeries_table.php +++ b/database/migrations/2019_11_12_113102_create_galeries_table.php @@ -17,7 +17,7 @@ class CreateGaleriesTable extends Migration $table->string('id', 36)->primary(); $table->string('title'); $table->text('decription')->nullable(); - $table->string('images')->nullable(); + $table->string('gallery')->nullable(); $table->string('userid_created', 36)->nullable(); $table->string('userid_updated', 36)->nullable(); $table->boolean('is_active')->nullable(); diff --git a/public/js/master/gallery.js b/public/js/master/gallery.js new file mode 100644 index 0000000..89d01e7 --- /dev/null +++ b/public/js/master/gallery.js @@ -0,0 +1,84 @@ +$(function () { + $.ajaxSetup({ + headers: { + 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') + } + }); + + var table = $('.data-table').DataTable({ + processing: true, + serverSide: true, + responsive: true, + ajax: url, + columns: [ + { data: 'DT_RowIndex', name: 'DT_RowIndex' }, + { data: 'gallery', name: 'gallery' }, + { data: 'status', name: 'status' }, + { data: 'action', name: 'action', orderable: false, searchable: false }, + ], + columnDefs: [ + { className: 'text-center', targets: [0, 2, 3]}, + { className: 'text-left', targets: [1]}, + ], + }); + + $("body").on("click", ".delete", function (e) { + e.preventDefault(); + var id = $(this).data('id'); + + swal({ + title: "Apakah Anda Yakin?", + text: "Anda akan menghapus data ini!", + type: "warning", + showCancelButton: true, + confirmButtonColor: "#DD6B55", + confirmButtonText: "Yes", + cancelButtonText: "No", + closeOnConfirm: false, + closeOnCancel: false + }, + function (isConfirm) { + if (isConfirm) { + swal.close(); + setTimeout(function () { + $.ajax({ + dataType: 'json', + type: 'DELETE', + url: url + '/' + id, + headers: { + 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') + }, + }).done(function (data) { + table.draw(); + swal({ + title: "Data berhasil dihapus!", + type: "success", + timer: "3000" + }); + }); + }, 1000); // 1 second delay + } + else { + swal("Dibatalkan", "Data batal dihapus", "error"); + } + } + ); + }); + +}); + +$(function () { + //iCheck for checkbox and radio inputs + $('input[type="checkbox"].minimal, input[type="radio"].minimal').iCheck({ + checkboxClass: 'icheckbox_minimal-blue', + radioClass: 'iradio_minimal-blue' + }); +}); + +function printErrorMsg(msg) { + $(".print-error-msg").find("ul").html(''); + $(".print-error-msg").css('display', 'block'); + $.each(msg, function (key, value) { + $(".print-error-msg").find("ul").append('<li>' + value + '</li>'); + }); +} diff --git a/resources/views/webprofile/backend/gallery/create.blade.php b/resources/views/webprofile/backend/gallery/create.blade.php new file mode 100644 index 0000000..6278004 --- /dev/null +++ b/resources/views/webprofile/backend/gallery/create.blade.php @@ -0,0 +1,104 @@ +@extends('webprofile.backend.layouts.master') + +@section('title') + {{ $title }} +@stop + +@section('breadcrumbs') +<li><a href="{{ url('dashboard') }}">@lang('label.dashboard')</a></li> +<li class="active">@lang('feature.create_gallery')</li> +@stop + +@section('content') +{!! Form::open(array('url' => route('gallery.store'), 'method' => 'POST', 'id' => 'gallery', 'class' => 'form-horizontal', 'files' => true)) !!} +{!! csrf_field() !!} +<!-- page start--> +<div class="row"> + <div class="col-md-9"> + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title"><strong>@lang('label.create')</strong> @lang('feature.gallery')</h3> + </div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12"> + <div class="form-group @if ($errors->has('title')) has-error @endif"> + <label class="col-md-2 control-label">@lang('label.name') @lang('feature.gallery')</label> + <div class="col-md-10"> + {{ Form::text('title', old('title'), ['class' => 'form-control']) }} + @if ($errors->has('title')) + <label id="login-error" class="error" for="login">{{$errors->first('title')}}</label> + @endif + </div> + </div> + <center> + <div class="form-group"> + <img id="uploadPreview" style="width: 500px; height: 100%;" src="{{URL::to('https://statik.unesa.ac.id/perpus_konten_statik/uploads/slider/slider.png')}}"/><br> + </div> + <div class="form-group"> + {{ Form::file('gallery', ['class'=>'fileinput btn-danger', 'id'=>'uploadImage', 'data-filename-placement'=>'inside', 'title'=>trans('label.upload'), 'onchange'=>'PreviewImage();', 'accept'=>'image/jpeg,image/png']) }} + </div> + </center> + </div> + </div> + </div> + </div> + </div> + <div class="col-md-3"> + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title"><strong>@lang('label.publish')</strong></h3> + <ul class="panel-controls"> + <li><a href="#" class="panel-collapse"><span class="fa fa-angle-down"></span></a></li> + </ul> + </div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12"> + <div class="form-group"> + <label class="col-md-2 control-label">@lang('label.status')</label> + <div class="col-md-6"> + <center> + <label class="switch"> + {{ Form::checkbox('is_active', 1, true) }} + <span></span> + </label> + </center> + </div> + </div> + </div> + </div> + </div> + <div class="panel-footer"> + </div> + </div> + </div> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-footer"> + <button class="btn btn-info pull-right">@lang('label.save')</button> + </div> + </div> + </div> +</div> +{!! Form::close() !!} +<!-- page end--> +@stop + +@section('script') +<script src="{!!asset('backend/js/plugins/bootstrap/bootstrap-datepicker.js') !!}"></script> +<script src="{!!asset('backend/js/plugins/bootstrap/bootstrap-timepicker.min.js') !!}"></script> +<script src="{!!asset('backend/js/plugins/bootstrap/bootstrap-file-input.js') !!}"></script> +<script src="{!!asset('backend/js/plugins/summernote/summernote.js') !!}"></script> + +<script type="text/javascript"> + function PreviewImage() { + var oFReader = new FileReader(); + oFReader.readAsDataURL(document.getElementById("uploadImage").files[0]); + + oFReader.onload = function (oFREvent) { + document.getElementById("uploadPreview").src = oFREvent.target.result; + }; + }; +</script> +@stop diff --git a/resources/views/webprofile/backend/gallery/edit.blade.php b/resources/views/webprofile/backend/gallery/edit.blade.php new file mode 100644 index 0000000..87ede8a --- /dev/null +++ b/resources/views/webprofile/backend/gallery/edit.blade.php @@ -0,0 +1,114 @@ +@extends('webprofile.backend.layouts.master') + +@section('title') + {{ $title }} +@stop + +@section('breadcrumbs') +<li><a href="{{ url('dashboard') }}">@lang('label.dashboard')</a></li> +<li class="active">@lang('feature.edit_gallery')</li> +@stop + +@section('content') +<!-- page start--> +<div class="row"> + {!! Form::model($data, ['route' => ['gallery.update', $data->id], 'method'=>'patch', 'files' => true]) !!} + {!! csrf_field() !!} + <!-- page start--> + <div class="row"> + <div class="col-md-9"> + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title"><strong>@lang('label.edit')</strong> @lang('feature.gallery')</h3> + </div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12"> + <div class="form-group @if ($errors->has('title')) has-error @endif"> + <label class="col-md-2 control-label">@lang('label.name') @lang('feature.gallery')</label> + <div class="col-md-10"> + {{ Form::text('title', old('title'), ['class' => 'form-control']) }} + @if ($errors->has('title')) + <label id="login-error" class="error" for="login">{{$errors->first('title')}}</label> + @endif + </div> + </div> + <center> + <div class="form-group"> + @if($data->gallery) + @if (webprofilesetting()['external_storage'] == 1) + <img id="uploadPreview" style="width: 500px; height: 100%;" src="{{ url(webprofilesetting()['url_static'].'/'.webprofilesetting()['directory'].'/gallery/'.$data->gallery) }}"/><br> + @else + <img id="uploadPreview" style="width: 500px; height: 100%;" src="{{ url('/storage/gallery/'.$data->gallery) }}"/><br> + @endif + @else + <img id="uploadPreview" style="width: 500px; height: 100%;" src="{{ url('https://statik.unesa.ac.id/perpus_konten_statik/uploads/slider/slider.png') }}"/><br> + @endif + </div> + <div class="form-group"> + {{ Form::file('gallery', array('class'=>'fileinput btn-danger', 'id'=>'uploadImage', 'data-filename-placement'=>'inside', 'title'=>'Upload', 'onchange'=>'PreviewImage();', 'accept'=>'image/jpeg,image/png')) }} + </div> + </center> + </div> + </div> + </div> + </div> + </div> + <div class="col-md-3"> + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title"><strong>Terbitkan</strong></h3> + <ul class="panel-controls"> + <li><a href="#" class="panel-collapse"><span class="fa fa-angle-down"></span></a></li> + </ul> + </div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12"> + <div class="form-group"> + <label class="col-md-2 control-label">Status</label> + <div class="col-md-6"> + <center><label class="switch"> + {{ Form::checkbox('is_active', 1, true) }} + <span></span> + </label></center> + </div> + </div> + </div> + </div> + </div> + <div class="panel-footer"> + </div> + </div> + </div> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-footer"> + <button class="btn btn-info pull-right">Simpan</button> + </div> + </div> + </div> + </div> + {!! Form::close() !!} +</div> +<!-- page end--> +@stop + +@section('script') +<script src="https://statik.unesa.ac.id/spn_konten_statik/plugins/select2/select2.full.min.js"></script> +{!! Html::script('https://statik.unesa.ac.id/profileunesa_konten_statik/admin/js/plugins/bootstrap/bootstrap-datepicker.js') !!} +{!! Html::script('https://statik.unesa.ac.id/profileunesa_konten_statik/admin/js/plugins/bootstrap/bootstrap-timepicker.min.js') !!} +{!! Html::script('https://statik.unesa.ac.id/profileunesa_konten_statik/admin/js/plugins/bootstrap/bootstrap-file-input.js') !!} +{!! Html::script('https://statik.unesa.ac.id/profileunesa_konten_statik/admin/js/plugins/summernote/summernote.js') !!} +<script type="text/javascript"> + function PreviewImage() { + var oFReader = new FileReader(); + oFReader.readAsDataURL(document.getElementById("uploadImage").files[0]); + + oFReader.onload = function (oFREvent) { + document.getElementById("uploadPreview").src = oFREvent.target.result; + }; + }; + $('#categories').select2(); +</script> +@stop diff --git a/resources/views/webprofile/backend/gallery/index.blade.php b/resources/views/webprofile/backend/gallery/index.blade.php new file mode 100644 index 0000000..fee89fb --- /dev/null +++ b/resources/views/webprofile/backend/gallery/index.blade.php @@ -0,0 +1,65 @@ +@extends('webprofile.backend.layouts.master') + +@section('assets') + <link rel="stylesheet" href="{!! asset('backend/js/datatables.net-bs/css/dataTables.bootstrap.min.css') !!}"> + <meta name="csrf-token" content="{{ csrf_token() }}"> +@endsection + +@section('title') + {{ $title }} +@stop + +@section('breadcrumbs') +<li><a href="{{ url('dashboard') }}">@lang('label.dashboard')</a></li> +<li class="active">@lang('feature.gallery')</li> +@stop + +@section('content') +<!-- page start--> +<div class="row"> + <div class="col-lg-12"> + <!-- START DEFAULT DATATABLE --> + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">{!! $title !!}</h3> + <a class="btn btn-info" href="{{URL::to('webprofile/gallery/create')}}" style="margin: 0cm 0px 0cm 10px;">@lang('label.create')</a> + <ul class="panel-controls"> + <li><a href="#" class="panel-collapse"><span class="fa fa-angle-down"></span></a></li> + </ul> + </div> + <div class="panel-body"> + <table class="table table-hover data-table" width="100%"> + <thead> + <tr> + <th width="7%" style="text-align: center;">@lang('label.number')</th> + <th style="text-align: center;">@lang('feature.gallery')</th> + <th width="10%" style="text-align: center;">@lang('label.status')</th> + <th align="center" width="10%" style="text-align: center;">@lang('label.action')</th> + </tr> + </thead> + <tbody> + </tbody> + </table> + </div> + </div> + <!-- END DEFAULT DATATABLE --> + </div> +</div> +<!-- page end--> +@stop + +@section('script') +<script src="{!!asset('backend/js/datatables.net/js/jquery.dataTables.min.js') !!}"></script> +<script src="{!!asset('backend/js/datatables.net-bs/js/dataTables.bootstrap.min.js') !!}"></script> + +<script src="{{ url('backend/assets/plugins/jquery-datatable/buttons/dataTables.buttons.min.js') }}"></script> +<script src="{{ url('backend/assets/plugins/jquery-datatable/buttons/buttons.bootstrap4.min.js') }}"></script> +<script src="{{ url('backend/assets/plugins/jquery-datatable/buttons/buttons.colVis.min.js') }}"></script> +<script src="{{ url('backend/assets/plugins/jquery-datatable/buttons/buttons.html5.min.js') }}"></script> +<script src="{{ url('backend/assets/plugins/jquery-datatable/buttons/buttons.print.min.js') }}"></script> + +<script> + var url = "{{ route('gallery.index') }}"; +</script> +{{ Html::script('js/master/gallery.js') }} +@stop diff --git a/resources/views/webprofile/backend/sliders/edit.blade.php b/resources/views/webprofile/backend/sliders/edit.blade.php index 5b29908..9f9ab29 100644 --- a/resources/views/webprofile/backend/sliders/edit.blade.php +++ b/resources/views/webprofile/backend/sliders/edit.blade.php @@ -35,11 +35,11 @@ </div> <center> <div class="form-group"> - @if($data->images) + @if($data->slider) @if (webprofilesetting()['external_storage'] == 1) - <img id="uploadPreview" style="width: 500px; height: 100%;" src="{{ url(webprofilesetting()['url_static'].'/'.webprofilesetting()['directory'].'/slider/'.$data->images) }}"/><br> + <img id="uploadPreview" style="width: 500px; height: 100%;" src="{{ url(webprofilesetting()['url_static'].'/'.webprofilesetting()['directory'].'/slider/'.$data->slider) }}"/><br> @else - <img id="uploadPreview" style="width: 500px; height: 100%;" src="{{ url('/storage/slider/'.$data->images) }}"/><br> + <img id="uploadPreview" style="width: 500px; height: 100%;" src="{{ url('/storage/slider/'.$data->slider) }}"/><br> @endif @else <img id="uploadPreview" style="width: 500px; height: 100%;" src="{{ url('https://statik.unesa.ac.id/perpus_konten_statik/uploads/slider/slider.png') }}"/><br> diff --git a/routes/webprofile/backend.php b/routes/webprofile/backend.php index aa9cad5..3a79ec4 100644 --- a/routes/webprofile/backend.php +++ b/routes/webprofile/backend.php @@ -8,6 +8,7 @@ Route::group(['middleware' => 'auth'], function () { Route::resource('informations', 'InformationController'); Route::resource('settings', 'SettingController'); Route::resource('sliders', 'SliderController'); + Route::resource('gallery', 'GalleryController'); }); // }); }); -- libgit2 0.26.0