Commit 00c27679 by fezrul

update backend phase 1

parent 5df6d6d4
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
class CreateMenuManagerTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('menu', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name_bm');
$table->string('name_en');
$table->integer('type')->nullable()->comment = '1=sub,2=parent';
$table->string('parent_id')->nullable();
$table->string('route')->nullable();
$table->string('permission')->nullable();
$table->text('icon')->nullable();
$table->integer('order');
$table->integer('status');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('menu');
}
}
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateNotificationUserTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('notification_user', function (Blueprint $table) {
$table->id()->comment = 'Unique id';
$table->integer('fk_users')->nullable()->comment = 'foreign key, relation with table users';
$table->string('url')->nullable()->comment = 'notification url';
$table->string('content')->nullable()->comment = 'notification content';
$table->smallInteger('status')->nullable()->comment = '0-inactive, 1-active';
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('notification_user');
}
}
@extends('web::backend.layouts.base')
@section('content')
<style type="text/css">
.modal { overflow: visible !important; }
.modal-body { overflow-y: visible !important; }
.render {
border: 1px solid #323232;
width: 96px;
min-height: 96px;
padding: 8px;
font-size: 14px;
display: flex;
align-items: center;
flex-flow: wrap;
justify-content: center;
text-align: center;
}
</style>
<div class="row">
sini isi
</div>
@endsection
\ No newline at end of file
<div id="sidebar-list" class="sidebar-menu list-group position-relative animate fadeLeft delay-1" style="overflow: hidden; ">
<div class="sidebar-list-padding app-sidebar sidenav" id="contact-sidenav">
<ul class="contact-list display-grid">
<li class="sidebar-title" style="cursor: none">Sub Menu</li>
<li class="{{ request()->is('admin/user*') ? 'active' : '' }}">
<a href="/admin/user" class="text-sub"><i class="material-icons mr-2">perm_identity</i>Users</a>
</li>
<li class="{{ request()->is('admin/role*') ? 'active' : '' }}">
<a href="/admin/role" class="text-sub"><i class="material-icons mr-2"> history </i>Roles</a>
</li>
<li class="{{ request()->is('admin/permission*') ? 'active' : '' }}">
<a href="/admin/permission" class="text-sub"><i class="material-icons mr-2"> brightness_high </i>Permissions</a>
</li>
<li class="">
<a href="#" class="text-sub"><i class="material-icons mr-2"> clear_all </i>Menu Management </a>
</li>
<li class="">
<a href="#" class="text-sub"><i class="material-icons mr-2"> import_contacts </i>Page Management </a>
</li>
<li class="">
<a href="#" class="text-sub"><i class="material-icons mr-2"> shop_two </i>Widget Management </a>
</li>
</ul>
</div>
</div>
<a href="#" data-target="contact-sidenav" class="sidenav-trigger hide-on-large-only" ><i
class="material-icons" style="color:blue">menu</i></a>
\ No newline at end of file
<!DOCTYPE html>
<!--
Template Name: Rubick - HTML Admin Dashboard Template
Author: Left4code
Website: http://www.left4code.com/
Contact: muhammadrizki@left4code.com
Purchase: https://themeforest.net/user/left4code/portfolio
Renew Support: https://themeforest.net/user/left4code/portfolio
License: You must have a valid license purchased only from themeforest(the above link) in order to legally use the theme for your project.
-->
<html lang="en" class="light">
<!-- BEGIN: Head -->
<head>
<meta charset="utf-8">
<link href="{{ asset('theme/assets/images/lhdn.png') }}" rel="shortcut icon">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Rubick admin is super flexible, powerful, clean & modern responsive tailwind admin template with unlimited possibilities.">
<meta name="keywords" content="admin template, Rubick Admin Template, dashboard template, flat admin template, responsive admin template, web app">
<meta name="author" content="LEFT4CODE">
<title>@yield('site.title', "Welcome Home") | {{ config('app.name') }}</title>
<!-- BEGIN: CSS Assets-->
<link rel="stylesheet" href="{{asset('theme2/assets/css/app.css')}}" />
<!-- BEGIN: VENDOR CSS-->
<link rel="stylesheet" href="{{asset('theme/assets/vendors/vendors.min.css')}}">
<!-- <link rel="stylesheet" href="{{asset('theme/assets/css/themes/horizontal-menu-template/materialize.css')}}">
<link rel="stylesheet" href="{{asset('theme/assets/css/themes/horizontal-menu-template/style.css')}}">
<link rel="stylesheet" href="{{asset('theme/assets/css/layouts/style-horizontal.css')}}">
<link rel="stylesheet" href="{{asset('theme/assets/css/pages/login.css')}}">
<link rel="stylesheet" href="{{asset('theme/assets/css/custom/custom.css')}}"> -->
<link rel="stylesheet" type="text/css" href="{{asset('theme/assets/vendors/sweetalert/sweetalert.css')}}">
<!-- END: CSS Assets-->
</head>
<img src="{{ env('SSOLOGOUT'), '' }}" style="display:none;" />
<!-- END: Head -->
<body class="login" style="
background-color: #efef74;">
@yield('content')
<!-- BEGIN: JS Assets-->
<script src="{{asset('theme2/assets/js/app.js')}}"></script>
<!-- BEGIN VENDOR JS-->
<script src="{{asset('theme/assets/js/vendors.min.js')}}"></script>
<!-- BEGIN VENDOR JS-->
<!-- BEGIN PAGE VENDOR JS-->
<!-- END PAGE VENDOR JS-->
<!-- BEGIN THEME JS-->
<script src="{{asset('theme/assets/js/plugins.js')}}"></script>
<!-- <script src="../../../app-assets/js/search.js"></script>
<script src="{{asset('theme/assets/js/vendors.min.js')}}"></script> -->
<script src="{{asset('theme/assets/js/custom/custom-script.js')}}"></script>
<script src="{{asset('theme/assets/vendors/sweetalert/sweetalert.min.js')}}"></script>
<!-- END: JS Assets-->
<!-- BEGIN PAGE LEVEL JS-->
@if (!empty(Session::get('errors')))
<?php
$error = ( Session::get('errors')->default->messages());
$message = $error['email'][0];
?>
<script type="text/javascript">
swal({
title: '{!! $message !!}',
icon: 'error'
})
</script>
@endif
@include('laravolt::apim.layouts.message')
<!-- END PAGE LEVEL JS-->
</body>
</html>
\ No newline at end of file
<footer class="page-footer footer footer-static footer-dark" style="background-color: #2C2E8E">
<div class="footer-copyright">
<div class="container"></div>
</div>
</footer>
\ No newline at end of file
<?php
use \Carbon\Carbon;
$id = auth()->user()->id;
$notisall = \Overdrive\Web\Model\NotificationTable::where('status','=',0)->where('fk_users','=',$id)
->where('created_at','>',Carbon::now()->subDays(5))->orderBy('created_at','DESC')->get();
?>
<style type="text/css">
.backcolor
{
background-color: #616161 !important;
}
.lines
{
background-color: rgba(255,127,0,var(--tw-bg-opacity)) !important;
}
.borderlines
{
border-color: rgba(255,127,0,var(--tw-bg-opacity)) !important;
}
.color-red
{
color:red !important;
}
.color-white
{
background-color: #ffffff !important;
}
</style>
<div class="top-bar">
<!-- BEGIN: Breadcrumb -->
<div class="-intro-x breadcrumb mr-auto hidden sm:flex">
<div class="p-4">
<div class="font-medium">Welcome, {{auth()->user()->name}}</div>
<div class="text-xs text-theme-28 mt-0.5" style="color:black">{{auth()->user()->roles->implode('name', ', ')}}</div>
</div>
</div>
@if(env('APP_ENV_TITLE')!=null)
<div class="-intro-x breadcrumb mr-auto sm:flex" style="color:#F1F5F8">
<div class="font-medium" style="font-size: 16px">{{env('APP_ENV_TITLE')}}</div>
</div>
@endif
<div class="-intro-x breadcrumb mr-auto hidden sm:flex">
</div>
<!-- END: Breadcrumb -->
<!-- BEGIN: Notifications -->
<div class="intro-x dropdown mr-auto sm:mr-6">
<div onclick="updatenot()" class="dropdown-toggle notification cursor-pointer @if(count($notisall) > 0) animated infinite swing @endif" role="button" aria-expanded="false"> <i class="material-icons">notifications_none</i> <span id="notis">0</span></div>
<div class="notification-content pt-2 dropdown-menu redonot">
<div class="notification-content__box dropdown-menu__content box dark:bg-dark-6" >
<div class="notification-content__title">Notifications</div>
@forelse($notisall as $key => $notis)
<div class="box p-1 cursor-pointer relative flex items-center zoom-in" onclick="updatenotis({{$notis->id}})" style="background-color: aliceblue;margin-bottom: 5px ">
<div class="w-12 h-12 flex-none image-fit mr-1">
<img alt="lhdn" class="rounded-full" src="/theme/assets/images/lhdn-irb-logo.png">
<div class="w-3 h-3 bg-theme-9 absolute right-0 bottom-0 rounded-full border-2 border-white"></div>
</div>
<div class="ml-2 overflow-hidden" style="width: 100%;">
<div class="flex items-center">
<a href="javascript:;" class="font-medium truncate mr-5" style="font-size: 12px">Admin - Laravolt Portal</a>
<div class="text-xs text-gray-500 ml-auto whitespace-nowrap" style="color: black">{{date('d-m-Y h:m:s',strtotime($notis->created_at))}}</div>
</div>
<div class="w-full truncate text-gray-600 mt-0.5" style="font-size: 11px">{{$notis->content}}</div>
</div>
</div>
<hr>
@empty
<div class="py-1 px-2 rounded-full text-xs bg-theme-10 text-white cursor-pointer font-medium gradient-45deg-amber-amber">No New Notification</div>
@endforelse
</div>
</div>
</div>
<!-- END: Notifications -->
<!-- BEGIN: Account Menu -->
<div class="intro-x dropdown w-8 h-8">
<div class="dropdown-toggle w-8 h-8 rounded-full overflow-hidden shadow-lg image-fit zoom-in" role="button" aria-expanded="false">
<img alt="Rubick Tailwind HTML Admin Template" src="{{asset('overide/web/themes/apim/assets/images/profile-1.jpg')}}">
</div>
<div class="dropdown-menu w-56">
<div class="dropdown-menu__content box bg-theme-26 dark:bg-dark-6 text-white" style="background-color: #616161">
<div class="p-4 border-b border-theme-27 dark:border-dark-3 borderlines">
<div class="font-medium">{{auth()->user()->name}}</div>
</div>
<div class="p-2">
<a href="/site/profile" class="flex items-center block p-2 transition duration-300 ease-in-out"> <i data-feather="user" class="w-4 h-4 mr-2"></i> Profile </a>
<div class="p-2 border-t border-theme-27 dark:border-dark-3 borderlines">
@if(Auth::check())
<a href="/auth/logout" class="flex items-center block p-2 transition duration-300 ease-in-out"> <i data-feather="toggle-right" class="w-4 h-4 mr-2"></i> Logout </a>
@else
<a href="/auth/login" class="flex items-center block p-2 transition duration-300 ease-in-out"> <i data-feather="toggle-right" class="w-4 h-4 mr-2"></i> Login </a>
@endif
</div>
</div>
</div>
</div>
</div>
<!-- END: Account Menu -->
</div>
@push('script')
<script type="text/javascript">
function updatenotis(id)
{
//update notis
var ids = id;
$.ajax({
url: "{{ URL::to('backend/notisread/')}}"+"/"+ids,
type: "get",
beforeSend: function ()
{
},
success: function(url)
{
window.location.replace(url);
}
});
// alert('clicked');
}
</script>
@endpush
\ No newline at end of file
<?php
use App\Model\Users;
$users = auth()->user();
use Overdrive\Web\Model\Menus;
$menu = Menus::main()->with('activechild','activechild.activesub')->get();
if (Session::has('locale')) {
$locale = Session::get('locale', Config::get('app.locale'));
} else {
$locale = \Lang::locale();
}
?>
<style type="text/css">
#backcolor
{
/*background-color: #616161;*/
}
.lines
{
background-color: rgba(255,127,0,var(--tw-bg-opacity)) !important;
}
</style>
<!-- BEGIN: Mobile Menu -->
<div class="mobile-menu md:hidden" style="font-size: small;">
<div class="mobile-menu-bar">
<a href="" class="flex mr-auto">
<img alt="Rubick Tailwind HTML Admin Template" class="w-6" style="width: 4.5rem;" src="{{ asset('overide/web/themes/apim/assets/images/logo/materialize-logo-big.png') }}">
</a>
<a href="javascript:;" id="mobile-menu-toggler"> <i data-feather="bar-chart-2" class="w-8 h-8 text-white transform -rotate-90"></i> </a>
</div>
<ul class="border-t border-theme-30 py-5 hidden">
<!-- @if (auth()->user()->status == 1) -->
@foreach($menu as $key => $mainmenu )
@if($mainmenu->status == 1)
@if(count($mainmenu->activechild) > 0)
<!-- parent 1 -->
@if(auth()->user()->hasPermission(json_decode($mainmenu->permission)) || auth()->user()->hasPermission('*'))
<!-- firstlayer -->
<li>
<a href="javascript:;.html" class="menu menu{{ request()->is($mainmenu->route) ? '--active' : '' }}">
<div class="menu__icon"> <i data-feather="layout"></i> </div>
<div class="menu__title">
@if($locale == 'en') {{$mainmenu->name_en}} @else {{$mainmenu->name_bm}} @endif
<div class="menu__sub-icon "> <i data-feather="chevron-down"></i> </div>
</div>
</a>
<?php $childish = ($mainmenu->activechild->implode('route', ','));?>
@foreach($mainmenu->activechild as $childkey => $child)
<?php $childsub = ($child->activesub->implode('route', ',')); ?>
@endforeach
<?php
$childish = explode(',', $childish);
$childsub = explode(',', $childsub);
$combined = array_merge($childish, $childsub);
?>
@if( request()->is(($combined)))
<ul class="menu__sub-open backcolor">
@else
<ul class="backcolor">
@endif
@foreach($mainmenu->activechild as $childkey => $child)
@if(count($child->activesub) > 0)
<!-- parent 2 -->
<!-- secondlayer -->
@if(auth()->user()->hasPermission(json_decode($child->permission)) || auth()->user()->hasPermission('*'))
<li>
<a href="javascript:;.html" class="menu menu{{ request()->is($child->route) ? '--active' : '' }}">
<div class="menu__icon"> <i data-feather="layout"></i> </div>
<div class="menu__title">
@if($locale == 'en') {{$child->name_en}} @else {{$child->name_bm}} @endif
<div class="menu__sub-icon "> <i data-feather="chevron-down"></i> </div>
</div>
</a>
<?php
$subroute = ($child->activesub->implode('route', ','));
$subroute = explode(',', $subroute);
?>
@if( request()->is(($subroute)))
<ul class="menu__sub-open backcolor">
@else
<ul class="backcolor">
@endif
@foreach($child->activesub as $subkey => $sub)
<!-- sub -->
@if(auth()->user()->hasPermission(json_decode($sub->permission)) || auth()->user()->hasPermission('*'))
<li style="margin-left: 33px;">
<a href="/{{$sub->route}}" class="menu menu{{ request()->is($sub->route)? '--active' : '' }}">
<div class="menu__icon"> <i data-feather="list"></i> </div>
<div class="menu__title"> @if($locale == 'en') {{$sub->name_en}} @else {{$sub->name_bm}} @endif </div>
</a>
</li>
@endif
@endforeach
</ul>
</li>
@endif
@else
<!-- child -->
@if(auth()->user()->hasPermission(json_decode($child->permission)) || auth()->user()->hasPermission('*'))
<li>
<a href="/{{$child->route}}" class="menu menu{{ request()->is($child->route)? '--active' : '' }}">
<div class="menu__icon"> <i data-feather="list"></i> </div>
<div class="menu__title"> @if($locale == 'en') {{$child->name_en}} @else {{$child->name_bm}} @endif </div>
</a>
</li>
@endif
@endif
@endforeach
</ul>
</li>
<div class="menu__devider my-6 lines"></div>
@endif
@else
<!-- main -->
@if(auth()->user()->hasPermission(json_decode($mainmenu->permission)) || auth()->user()->hasPermission('*'))
<li>
<a href="/{{$mainmenu->route}}" class="menu menu{{ request()->is($mainmenu->route) ? '--active' : '' }}">
<div class="menu__icon"> <i data-feather="home"></i> </div>
<div class="menu__title">
@if($locale == 'en') {{$mainmenu->name_en}} @else {{$mainmenu->name_bm}} @endif
</div>
</a>
</li>
<div class="menu__devider my-6 lines"></div>
@endif
@endif
@endif
@endforeach
<!-- @elseif(auth()->user()->status == 2)
<li>
<a href="" class="menu menu {{ request()->is('home') ? '--active' : '' }}">
<div class="menu__icon"> <i data-feather="home"></i> </div>
<div class="menu__title">
You are not allowed to use the system
</div>
</a>
</li>
@else
<li>
<a href="" class="menu menu {{ request()->is('home') ? '--active' : '' }}">
<div class="menu__icon"> <i data-feather="home"></i> </div>
<div class="menu__title">
Your Access is still inactive
</div>
</a>
</li>
@endif -->
</ul>
</div>
<!-- END: Mobile Menu -->
@if ($message = Session::get('success'))
<script type="text/javascript">
swal({
title: '{!! $message !!}',
icon: 'success'
})
</script>
@endif
@if ($message = Session::get('error'))
<script type="text/javascript">
swal({
title: '{!! $message !!}',
icon: 'error'
})
</script>
@endif
@if ($message = Session::get('warning'))
<script type="text/javascript">
swal({
title: '{!! $message !!}',
icon: 'warning'
})
</script>
@endif
@if ($message = Session::get('info'))
<script type="text/javascript">
swal({
title: '{!! $message !!}',
icon: 'info'
})
</script>
@endif
\ No newline at end of file
<?php <?php
use Overdrive\Web\Http\Controllers\Frontend;
Route::group( Route::group(
[ [
'namespace' => '\Overdrive\Web\Http\Controllers', 'namespace' => '\Overdrive\Web\Http\Controllers\Frontend',
'prefix' => '', 'prefix' => '',
'as' => 'frontend::', 'as' => 'frontend::',
'middleware' => ['web'], 'middleware' => ['web'],
], ],
function () { function () {
// Route::get('/', 'Frontend@index')->name('frontend.index'); Route::get('/', 'MainController@index')->name('frontend.index');
}
);
Route::group(
[
'namespace' => '\Overdrive\Web\Http\Controllers\Backend',
'prefix' => '',
'as' => 'backend::',
'middleware' => ['web','auth'],
],
function () {
Route::get('/home', 'MainController@index')->name('backend.index');
Route::get('backend/notisread', 'MainController@readNotification')->name('backend.notisread');
} }
); );
......
<?php
namespace Overdrive\Web\Http\Controllers\Backend;
use Illuminate\Contracts\View\View;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller as BaseController;
class MainController extends BaseController
{
public function index()
{
return view('web::backend.dashboard.index');
}
public function readNotification($id)
{
return view('web::frontend.index');
}
}
<?php <?php
namespace Overdrive\Web\Http\Controllers; namespace Overdrive\Web\Http\Controllers\Frontend;
use Illuminate\Contracts\View\View; use Illuminate\Contracts\View\View;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Routing\Controller as BaseController; use Illuminate\Routing\Controller as BaseController;
class Frontend extends BaseController class MainController extends BaseController
{ {
public function index() public function index()
{ {
return view('web::frontend.index'); return view('web::frontend.index');
} }
} }
<?php
namespace Overdrive\Web\Model;
use Illuminate\Database\Eloquent\Model;
class Menus extends Model
{
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'menu';
/**
* undocumented function
*
* @return void
* @author
**/
public function scopeLabel($query)
{
return $query->where('type', '=', '1')->orderBy('order','ASC');
}
public function scopeMain($query)
{
return $query->where('type', '=', '2')->orderBy('order','ASC');
}
public function child()
{
return $this->hasMany('Overdrive\Web\Model\Menus','parent_id','id')->orderBy('order','ASC');
}
public function submenu()
{
return $this->hasMany('Overdrive\Web\Model\Menus','parent_id','id')->orderBy('order','ASC');
}
public function parent()
{
return $this->hasOne('Overdrive\Web\Model\Menus','id','parent_id')->where('type','=','2')->orderBy('order','ASC');
}
// for menu Rendering
public function activechild()
{
return $this->hasMany('Overdrive\Web\Model\Menus','parent_id','id')->where('status',1)->orderBy('order','ASC');
}
public function activesub()
{
return $this->hasMany('Overdrive\Web\Model\Menus','parent_id','id')->where('status',1)->orderBy('order','ASC');
}
}
<?php
namespace Overdrive\Web\Model;
use Illuminate\Database\Eloquent\Model;
class NotificationTable extends Model
{
/**
* The database table used by the model.
* @var string
*/
protected $table = 'notification_user';
/**
* undocumented function
*
* @return void
* @author
**/
}
\ No newline at end of file
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
font-family: 'Material Icons'; font-family: 'Material Icons';
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
src: url(/theme2/assets/fonts/roboto/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2) format('woff2'); src: url(/overide/web/themes/apim/assets/fonts/roboto/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2) format('woff2');
} }
.material-icons { .material-icons {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment