Update dashboard admin

This commit is contained in:
Muhammad Raihan Surya 2023-09-01 16:22:38 +07:00
parent f5a3f7a183
commit 9119c40d1d
94 changed files with 5145 additions and 2078 deletions

View File

@ -1,10 +1,11 @@
<?php <?php
namespace App\Http\Controllers; namespace App\Http\Controllers\Admin;
use App\Models\Refund; use App\Models\Refund;
use App\Http\Requests\StoreRefundRequest; use App\Models\Refunds;
use App\Http\Requests\UpdateRefundRequest; use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class RefundController extends Controller class RefundController extends Controller
{ {
@ -13,8 +14,12 @@ class RefundController extends Controller
*/ */
public function index() public function index()
{ {
$refundData = Refund::all(); // $refundData = Refund::all();
return view('Admin.refund.history-refund', ['history_refund' => $refundData]); // return view('Admin.refund.history-refund', ['history_refund' => $refundData]);
return view('admin/refund/history-refund',[
'name'=>'Jilhan Haura',
"history_refund" => Refunds::HistoryRefund()
]);
} }
/** /**
@ -28,7 +33,7 @@ class RefundController extends Controller
/** /**
* Store a newly created resource in storage. * Store a newly created resource in storage.
*/ */
public function store(StoreRefundRequest $request) public function store(Request $request)
{ {
// //
} }
@ -38,7 +43,10 @@ class RefundController extends Controller
*/ */
public function show(Refund $refund) public function show(Refund $refund)
{ {
// return view('admin/refund/detail-refund',[
'name'=>'Jilhan Haura',
"detail_refund"=> Refunds::DetailRefund()
]);
} }
/** /**
@ -52,7 +60,7 @@ class RefundController extends Controller
/** /**
* Update the specified resource in storage. * Update the specified resource in storage.
*/ */
public function update(UpdateRefundRequest $request, Refund $refund) public function update(Request $request, Refund $refund)
{ {
// //
} }

View File

@ -1,10 +1,11 @@
<?php <?php
namespace App\Http\Controllers; namespace App\Http\Controllers\Admin;
use App\Models\Setting; use App\Models\Setting;
use App\Http\Requests\StoreSettingRequest; use App\Models\Settings;
use App\Http\Requests\UpdateSettingRequest; use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class SettingController extends Controller class SettingController extends Controller
{ {
@ -13,7 +14,10 @@ class SettingController extends Controller
*/ */
public function index() public function index()
{ {
// return view('admin/setting/index',[
'name'=>"Jilhan Haura",
"setting" => Settings:: HistorySetting()
]);
} }
/** /**
@ -27,7 +31,7 @@ class SettingController extends Controller
/** /**
* Store a newly created resource in storage. * Store a newly created resource in storage.
*/ */
public function store(StoreSettingRequest $request) public function store(Request $request)
{ {
// //
} }
@ -51,7 +55,7 @@ class SettingController extends Controller
/** /**
* Update the specified resource in storage. * Update the specified resource in storage.
*/ */
public function update(UpdateSettingRequest $request, Setting $setting) public function update(Request $request, Setting $setting)
{ {
// //
} }

View File

@ -1,10 +1,11 @@
<?php <?php
namespace App\Http\Controllers; namespace App\Http\Controllers\Admin;
use App\Models\transaction; use App\Models\Transaction;
use App\Http\Requests\StoretransactionRequest; use App\Models\Transactions;
use App\Http\Requests\UpdatetransactionRequest; use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class TransactionController extends Controller class TransactionController extends Controller
{ {
@ -13,7 +14,10 @@ class TransactionController extends Controller
*/ */
public function index() public function index()
{ {
// return view('admin/transaction/history-transaction', [
'name' => 'Jilhan Haura',
'transaction' => Transactions::allTransactions(),
]);
} }
/** /**
@ -27,7 +31,7 @@ class TransactionController extends Controller
/** /**
* Store a newly created resource in storage. * Store a newly created resource in storage.
*/ */
public function store(StoretransactionRequest $request) public function store(Request $request)
{ {
// //
} }
@ -37,7 +41,10 @@ class TransactionController extends Controller
*/ */
public function show(transaction $transaction) public function show(transaction $transaction)
{ {
// return view('admin/transaction/detail-transaction',[
'name'=>'Jilhn Haura',
'detail_transaction' => Transactions::allDetailTransactions()
]);
} }
/** /**
@ -51,7 +58,7 @@ class TransactionController extends Controller
/** /**
* Update the specified resource in storage. * Update the specified resource in storage.
*/ */
public function update(UpdatetransactionRequest $request, transaction $transaction) public function update(Request $request, transaction $transaction)
{ {
// //
} }

View File

@ -0,0 +1,79 @@
<?php
namespace App\Http\Controllers\Admin;
use App\Models\User;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class UserController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
$list_users = User::where('role','User')->get();
return view('admin.users.list-user', ['name' => 'Muhammad Raihan Surya', 'list_users' => $list_users]);
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*/
public function show(User $user)
{
// dd($user);
return view('admin.users.detail-user',['name'=>"Muhammad Raihan Surya", 'detail_user'=>$user]);
}
/**
* Show the form for editing the specified resource.
*/
public function edit(User $user)
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, User $users)
{
//
}
/**
* Remove the specified resource from storage.
*/
public function destroy(User $user)
{
try{
User::destroy($user->id);
return response()->json([
'message' => 'Berhasil hapus data',
'status' => true
]);
}catch(\Exception $e){
return response()->json([
'message' => 'Gagal hapus data, karena '.$e,
'status' => false
]);
}
}
}

View File

@ -1,12 +1,12 @@
<?php <?php
namespace App\Http\Controllers; namespace App\Http\Controllers\Admin;
use App\Models\Users; use App\Models\Contact;
use App\Http\Requests\StoreUsersRequest; use App\Http\Controllers\Controller;
use App\Http\Requests\UpdateUsersRequest; use Illuminate\Http\Request;
class UsersController extends Controller class ContactController extends Controller
{ {
/** /**
* Display a listing of the resource. * Display a listing of the resource.
@ -27,7 +27,7 @@ class UsersController extends Controller
/** /**
* Store a newly created resource in storage. * Store a newly created resource in storage.
*/ */
public function store(StoreUsersRequest $request) public function store(Request $request)
{ {
// //
} }
@ -35,7 +35,7 @@ class UsersController extends Controller
/** /**
* Display the specified resource. * Display the specified resource.
*/ */
public function show(Users $users) public function show(Contact $contact)
{ {
// //
} }
@ -43,7 +43,7 @@ class UsersController extends Controller
/** /**
* Show the form for editing the specified resource. * Show the form for editing the specified resource.
*/ */
public function edit(Users $users) public function edit(Contact $contact)
{ {
// //
} }
@ -51,7 +51,7 @@ class UsersController extends Controller
/** /**
* Update the specified resource in storage. * Update the specified resource in storage.
*/ */
public function update(UpdateUsersRequest $request, Users $users) public function update(Request $request, Contact $contact)
{ {
// //
} }
@ -59,7 +59,7 @@ class UsersController extends Controller
/** /**
* Remove the specified resource from storage. * Remove the specified resource from storage.
*/ */
public function destroy(Users $users) public function destroy(Contact $contact)
{ {
// //
} }

11
app/Models/Contact.php Normal file
View File

@ -0,0 +1,11 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Contact extends Model
{
use HasFactory;
}

View File

@ -5,76 +5,7 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
// class Refund extends Model{ class Refund extends Model
// protected $table = 'refund';
// use HasFactory;
// }
class Refund
{ {
private static $history_refund=[ use HasFactory;
[
"no"=>"1",
"orderId" => "INV-1234",
"customer" => "Okta",
"seller" => "dodo",
"total" => "Rp. 15000",
"date" => "July 19, 2023 ",
"status"=>"Process Refund"
],
[
"no"=>"2",
"orderId" => "INV-0000",
"customer" => "Selvi",
"seller" => "dedo",
"total" => "Rp. 11000",
"date" => "August 19, 2023 ",
"status"=>"Refund Success"
],
[
"no"=>"3",
"orderId" => "INV-2313",
"customer" => "Septa",
"seller" => "dido",
"total" => "Rp. 15000",
"date" => "July 29, 2023 ",
"status"=>"Process Refund"
],
[
"no"=>"4",
"orderId" => "INV-5664",
"customer" => "Padia",
"seller" => "dedo",
"total" => "Rp. 14000",
"date" => "July 18, 2023 ",
"status"=>"Refunds Refused"
],
[
"no"=>"5",
"orderId" => "INV-9090",
"customer" => "hantu",
"seller" => "dado",
"total" => "Rp. 45000",
"date" => "2023-08-14 ",
"status"=>"Refunds Refused"
]
];
public static $detail_refund=[
[
"orderId" => "INV-9090",
"customer" => "hantu",
"seller" => "dado",
"total" => "Rp. 45000",
"date" => "2023-08-14 ",
"complaint" =>" Lorem ipsum dolor sit, amet consectetur adipisicing elit. Aliquam inventore, sit enim iure itaque fuga voluptates alias, eveniet quos ex reiciendis! Dolore mollitia ea inventore, excepturi hic fugiat id, magnam molestias sint ut enim repellendus, cum dolorum dolores sapiente adipisci tempora nihil omnis! Accusantium, non perspiciatis? Molestias modi debitis perferendis reprehenderit excepturi voluptates? Sit incidunt consequuntur iusto odit sapiente inventore nemo commodi, quam vero magnam temporibus ducimus praesentium assumenda blanditiis possimus perferendis totam placeat maiores. Quae ut id libero atque pariatur veritatis rerum culpa tempore consequatur quod corrupti corporis nobis quia repellendus iste quidem illum, voluptates aspernatur cumque officia. Tenetur.",
"image"=>"assets/images/dashboard/img_2.jpg"
]
];
public static function HistoryRefund(){
return self::$history_refund;
}
public static function DetailRefund(){
return self::$detail_refund;
}
} }

80
app/Models/Refunds.php Normal file
View File

@ -0,0 +1,80 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
// class Refund extends Model{
// protected $table = 'refund';
// use HasFactory;
// }
class Refunds
{
private static $history_refund=[
[
"no"=>"1",
"orderId" => "INV-1234",
"customer" => "Okta",
"seller" => "dodo",
"total" => "Rp. 15000",
"date" => "July 19, 2023 ",
"status"=>"Process Refund"
],
[
"no"=>"2",
"orderId" => "INV-0000",
"customer" => "Selvi",
"seller" => "dedo",
"total" => "Rp. 11000",
"date" => "August 19, 2023 ",
"status"=>"Refund Success"
],
[
"no"=>"3",
"orderId" => "INV-2313",
"customer" => "Septa",
"seller" => "dido",
"total" => "Rp. 15000",
"date" => "July 29, 2023 ",
"status"=>"Process Refund"
],
[
"no"=>"4",
"orderId" => "INV-5664",
"customer" => "Padia",
"seller" => "dedo",
"total" => "Rp. 14000",
"date" => "July 18, 2023 ",
"status"=>"Refunds Refused"
],
[
"no"=>"5",
"orderId" => "INV-9090",
"customer" => "hantu",
"seller" => "dado",
"total" => "Rp. 45000",
"date" => "2023-08-14 ",
"status"=>"Refunds Refused"
]
];
public static $detail_refund=[
[
"orderId" => "INV-9090",
"customer" => "hantu",
"seller" => "dado",
"total" => "Rp. 45000",
"date" => "2023-08-14 ",
"complaint" =>" Lorem ipsum dolor sit, amet consectetur adipisicing elit. Aliquam inventore, sit enim iure itaque fuga voluptates alias, eveniet quos ex reiciendis! Dolore mollitia ea inventore, excepturi hic fugiat id, magnam molestias sint ut enim repellendus, cum dolorum dolores sapiente adipisci tempora nihil omnis! Accusantium, non perspiciatis? Molestias modi debitis perferendis reprehenderit excepturi voluptates? Sit incidunt consequuntur iusto odit sapiente inventore nemo commodi, quam vero magnam temporibus ducimus praesentium assumenda blanditiis possimus perferendis totam placeat maiores. Quae ut id libero atque pariatur veritatis rerum culpa tempore consequatur quod corrupti corporis nobis quia repellendus iste quidem illum, voluptates aspernatur cumque officia. Tenetur.",
"image"=>"assets/images/dashboard/img_2.jpg"
]
];
public static function HistoryRefund(){
return self::$history_refund;
}
public static function DetailRefund(){
return self::$detail_refund;
}
}

View File

@ -5,46 +5,7 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
class Setting class Setting extends Model
{ {
static $History_Setting=[ use HasFactory;
[
"no" => "1",
"month" => "January",
"year" =>"2021",
"persentase" =>"50%",
"status" =>"Active"
],
[
"no" => "2",
"month" => "February",
"year" =>"2022",
"persentase" =>"40%",
"status" =>"Non Active"
],
[
"no" => "3",
"month" => "March",
"year" =>"2023",
"persentase" =>"30%",
"status" =>"Non Active"
],
[
"no" => "4",
"month" => "April",
"year" =>"2021",
"persentase" =>"60%",
"status" =>"Non Active"
],
[
"no" => "5",
"month" => "May",
"year" =>"2023",
"persentase" =>"20%",
"status" =>"Non Active"
]
];
public static function HistorySetting(){
return self::$History_Setting;
}
} }

50
app/Models/Settings.php Normal file
View File

@ -0,0 +1,50 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Settings
{
static $History_Setting=[
[
"no" => "1",
"month" => "January",
"year" =>"2021",
"persentase" =>"50%",
"status" =>"Active"
],
[
"no" => "2",
"month" => "February",
"year" =>"2022",
"persentase" =>"40%",
"status" =>"Non Active"
],
[
"no" => "3",
"month" => "March",
"year" =>"2023",
"persentase" =>"30%",
"status" =>"Non Active"
],
[
"no" => "4",
"month" => "April",
"year" =>"2021",
"persentase" =>"60%",
"status" =>"Non Active"
],
[
"no" => "5",
"month" => "May",
"year" =>"2023",
"persentase" =>"20%",
"status" =>"Non Active"
]
];
public static function HistorySetting(){
return self::$History_Setting;
}
}

View File

@ -0,0 +1,90 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Transactions
{
private static $list_transaction = [
[
'no' => '1',
'orderId' => 'INV-1234',
'customer' => 'Jilhan',
'seller' => 'dodo',
'total' => 'Rp. 15000',
'date' => 'July 19, 2023 ',
'status' => 'paid',
],
[
'no' => '2',
'orderId' => 'INV-0000',
'customer' => 'hmmm',
'seller' => 'dodo',
'total' => 'Rp. 11000',
'date' => 'August 19, 2023 ',
'status' => 'pending',
],
[
'no' => '3',
'orderId' => 'INV-2313',
'customer' => 'nurul',
'seller' => 'dido',
'total' => 'Rp. 15000',
'date' => 'July 29, 2023 ',
'status' => 'unpaid',
],
[
'no' => '4',
'orderId' => 'INV-5664',
'customer' => 'raihan',
'seller' => 'dedo',
'total' => 'Rp. 14000',
'date' => 'July 18, 2023 ',
'status' => 'pending',
],
[
'no' => '5',
'orderId' => 'INV-9090',
'customer' => 'testing',
'seller' => 'dado',
'total' => 'Rp. 45000',
'date' => 'June 19, 2023 ',
'status' => 'paid',
],
];
private static $detail_transaction = [
[
'idTransaction' => 'INV-76899',
'side' => 'SELL',
'marketPair' => 'IDR',
'email' => 'JilhanHaura07@gmail.com',
'amountTransaction' => 'Rp. 900000',
'feeTransaction' => '10%',
'total' => '68,00989.00 IDR',
'paymentDetail' => 'Bank',
'bankName' => 'BNI',
'accountNumber' => '123',
'statusTransaction' => 'Success',
// "tracking_number" => "09102919209",
// "orderId" => "INV-9090",
// "status"=>"Pending",
// "estimated" => "June 20, 2023",
// "tracking_detail1"=> "August 10: processed payment",
// "tracking_detail2"=> "August 12: payment in system",
// "tracking_detail3"=> "August 14: payment has been received by the seller",
],
];
public static function allTransactions()
{
return self::$list_transaction;
}
public static function allDetailTransactions()
{
return self::$detail_transaction;
}
}

View File

@ -7,6 +7,8 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable; use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens; use Laravel\Sanctum\HasApiTokens;
use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Database\Eloquent\Concerns\HasUuids;
class User extends Authenticatable class User extends Authenticatable
{ {
@ -18,9 +20,16 @@ class User extends Authenticatable
* @var array<int, string> * @var array<int, string>
*/ */
protected $fillable = [ protected $fillable = [
'name', 'nama',
'email', 'email',
'password', 'password',
'role_id',
'alamat',
'foto_ktp',
'nohp',
'nik',
'gender',
'status',
]; ];
/** /**
@ -41,5 +50,40 @@ class User extends Authenticatable
protected $casts = [ protected $casts = [
'email_verified_at' => 'datetime', 'email_verified_at' => 'datetime',
'password' => 'hashed', 'password' => 'hashed',
'id' => 'string',
]; ];
//JWT
/**
* Get the identifier that will be stored in the subject claim of the JWT.
*
* @return mixed
*/
public function getJWTIdentifier()
{
return $this->getKey();
}
/**
* Return a key value array, containing any custom claims to be added to the JWT.
*
* @return array
*/
public function getJWTCustomClaims()
{
return [];
}
//JWT
//Relasi
public function pemilik_kontak(){
return $this->hasMany(Contact::class, 'email', 'pemilik_kontak');
}
public function relasi_kontak(){
return $this->hasMany(Contact::class, 'email', 'relasi_kontak');
}
//Relasi
} }

View File

@ -1,55 +0,0 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Users
{
private static $list_users=[
[
"no" => "1",
"userId" => "U1290",
"fullname" => "Tsalsabila Jilhan Haura",
"email" => "jilhanhaura07@gmail.com",
"gender" => "Female",
"date" => "August 23, 2023",
"status" => "Finished"
],
[
"no" => "2",
"userId" => "U4567",
"fullname" => "Boncel",
"email" => "boncel@gmail.com",
"gender" => "Male",
"date" => "August 22, 2023",
"status" => "Progress"
],
];
public static function listUsers(){
return self::$list_users;
}
private static $detail_user=[
[
"userId" => "91029138",
"nik" => "214141413414131414",
"name" => "Jilhan Haura",
"gender" => "Female",
"religion" => "Muslim",
"bloodType" => "AB",
"email" => "jilhanhaura07@gmail.com",
"phoneNumber" => "08909098102099",
"province" => "Sumatera Barat",
"city" => "Padang",
"district" => "Padang",
"village" => "Balai Baru",
"detail" => "Jl Simpang komplek polda balai baru"
]
];
public static function detailUser(){
return self::$detail_user;
}
}

View File

@ -5,89 +5,7 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
class transaction class Transaction extends Model
{ {
private static $list_transaction =[ use HasFactory;
[
"no"=>"1",
"orderId" => "INV-1234",
"customer" => "Jilhan",
"seller" => "dodo",
"total" => "Rp. 15000",
"date" => "July 19, 2023 ",
"status"=>"paid"
],
[
"no"=>"2",
"orderId" => "INV-0000",
"customer" => "hmmm",
"seller" => "dodo",
"total" => "Rp. 11000",
"date" => "August 19, 2023 ",
"status"=>"pending"
],
[
"no"=>"3",
"orderId" => "INV-2313",
"customer" => "nurul",
"seller" => "dido",
"total" => "Rp. 15000",
"date" => "July 29, 2023 ",
"status"=>"unpaid"
],
[
"no"=>"4",
"orderId" => "INV-5664",
"customer" => "raihan",
"seller" => "dedo",
"total" => "Rp. 14000",
"date" => "July 18, 2023 ",
"status"=>"pending"
],
[
"no"=>"5",
"orderId" => "INV-9090",
"customer" => "testing",
"seller" => "dado",
"total" => "Rp. 45000",
"date" => "June 19, 2023 ",
"status"=>"paid"
]
];
private static $detail_transaction=[
[
"idTransaction" => "INV-76899",
"side" =>"SELL",
"marketPair"=>"IDR",
"email" =>"JilhanHaura07@gmail.com",
"amountTransaction" => "Rp. 900000",
"feeTransaction" =>"10%",
"total" => "68,00989.00 IDR",
"paymentDetail" => "Bank",
"bankName" => "BNI",
"accountNumber" => "123",
"statusTransaction" => "Success"
// "tracking_number" => "09102919209",
// "orderId" => "INV-9090",
// "status"=>"Pending",
// "estimated" => "June 20, 2023",
// "tracking_detail1"=> "August 10: processed payment",
// "tracking_detail2"=> "August 12: payment in system",
// "tracking_detail3"=> "August 14: payment has been received by the seller",
],
];
public static function allTransactions()
{
return self::$list_transaction;
}
public static function allDetailTransactions()
{
return self::$detail_transaction;
}
} }

View File

@ -2,14 +2,22 @@
"name": "laravel/laravel", "name": "laravel/laravel",
"type": "project", "type": "project",
"description": "The skeleton application for the Laravel framework.", "description": "The skeleton application for the Laravel framework.",
"keywords": ["laravel", "framework"], "keywords": [
"laravel",
"framework"
],
"license": "MIT", "license": "MIT",
"require": { "require": {
"php": "^8.1", "php": "^8.1",
"guzzlehttp/guzzle": "^7.2", "guzzlehttp/guzzle": "^7.2",
"laravel/framework": "^10.10", "laravel/framework": "^10.10",
"laravel/sanctum": "^3.2", "laravel/sanctum": "^3.2",
"laravel/tinker": "^2.8" "laravel/tinker": "^2.8",
"pusher/pusher-php-server": "^7.2",
"ramsey/uuid": "^4.7",
"thiagoalessio/tesseract_ocr": "^2.12",
"tymon/jwt-auth": "^2.0",
"intervention/image": "^2.7"
}, },
"require-dev": { "require-dev": {
"fakerphp/faker": "^1.9.1", "fakerphp/faker": "^1.9.1",

1086
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -109,7 +109,7 @@ return [
| |
*/ */
'faker_locale' => 'en_US', 'faker_locale' => 'id_ID',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------

View File

@ -40,6 +40,10 @@ return [
'driver' => 'session', 'driver' => 'session',
'provider' => 'users', 'provider' => 'users',
], ],
'api' => [
'driver' => 'jwt',
'provider' => 'users',
]
], ],
/* /*

View File

@ -35,13 +35,17 @@ return [
'key' => env('PUSHER_APP_KEY'), 'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'), 'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'), 'app_id' => env('PUSHER_APP_ID'),
// 'options' => [
// 'cluster' => env('PUSHER_APP_CLUSTER'),
// 'host' => env('PUSHER_HOST') ?: 'api-'.env('PUSHER_APP_CLUSTER', 'mt1').'.pusher.com',
// 'port' => env('PUSHER_PORT', 443),
// 'scheme' => env('PUSHER_SCHEME', 'https'),
// 'encrypted' => true,
// 'useTLS' => env('PUSHER_SCHEME', 'https') === 'https',
// ],
'options' => [ 'options' => [
'cluster' => env('PUSHER_APP_CLUSTER'), 'cluster' => 'ap1',
'host' => env('PUSHER_HOST') ?: 'api-'.env('PUSHER_APP_CLUSTER', 'mt1').'.pusher.com', 'useTLS' => true,
'port' => env('PUSHER_PORT', 443),
'scheme' => env('PUSHER_SCHEME', 'https'),
'encrypted' => true,
'useTLS' => env('PUSHER_SCHEME', 'https') === 'https',
], ],
'client_options' => [ 'client_options' => [
// Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html

80
config/flare.php Normal file
View File

@ -0,0 +1,80 @@
<?php
use Spatie\FlareClient\FlareMiddleware\AddGitInformation;
use Spatie\FlareClient\FlareMiddleware\RemoveRequestIp;
use Spatie\FlareClient\FlareMiddleware\CensorRequestBodyFields;
use Spatie\FlareClient\FlareMiddleware\CensorRequestHeaders;
use Spatie\LaravelIgnition\FlareMiddleware\AddDumps;
use Spatie\LaravelIgnition\FlareMiddleware\AddEnvironmentInformation;
use Spatie\LaravelIgnition\FlareMiddleware\AddExceptionInformation;
use Spatie\LaravelIgnition\FlareMiddleware\AddJobs;
use Spatie\LaravelIgnition\FlareMiddleware\AddLogs;
use Spatie\LaravelIgnition\FlareMiddleware\AddQueries;
use Spatie\LaravelIgnition\FlareMiddleware\AddNotifierName;
return [
/*
|
|--------------------------------------------------------------------------
| Flare API key
|--------------------------------------------------------------------------
|
| Specify Flare's API key below to enable error reporting to the service.
|
| More info: https://flareapp.io/docs/general/projects
|
*/
'key' => env('FLARE_KEY'),
/*
|--------------------------------------------------------------------------
| Middleware
|--------------------------------------------------------------------------
|
| These middleware will modify the contents of the report sent to Flare.
|
*/
'flare_middleware' => [
RemoveRequestIp::class,
AddGitInformation::class,
AddNotifierName::class,
AddEnvironmentInformation::class,
AddExceptionInformation::class,
AddDumps::class,
AddLogs::class => [
'maximum_number_of_collected_logs' => 200,
],
AddQueries::class => [
'maximum_number_of_collected_queries' => 200,
'report_query_bindings' => true,
],
AddJobs::class => [
'max_chained_job_reporting_depth' => 5,
],
CensorRequestBodyFields::class => [
'censor_fields' => [
'password',
'password_confirmation',
],
],
CensorRequestHeaders::class => [
'headers' => [
'API-KEY',
]
]
],
/*
|--------------------------------------------------------------------------
| Reporting log statements
|--------------------------------------------------------------------------
|
| If this setting is `false` log statements won't be sent as events to Flare,
| no matter which error level you specified in the Flare log channel.
|
*/
'send_logs_as_events' => true,
];

279
config/ignition.php Normal file
View File

@ -0,0 +1,279 @@
<?php
use Spatie\Ignition\Solutions\SolutionProviders\BadMethodCallSolutionProvider;
use Spatie\Ignition\Solutions\SolutionProviders\MergeConflictSolutionProvider;
use Spatie\Ignition\Solutions\SolutionProviders\UndefinedPropertySolutionProvider;
use Spatie\LaravelIgnition\Recorders\DumpRecorder\DumpRecorder;
use Spatie\LaravelIgnition\Recorders\JobRecorder\JobRecorder;
use Spatie\LaravelIgnition\Recorders\LogRecorder\LogRecorder;
use Spatie\LaravelIgnition\Recorders\QueryRecorder\QueryRecorder;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\DefaultDbNameSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\GenericLaravelExceptionSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\IncorrectValetDbCredentialsSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\InvalidRouteActionSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\MissingAppKeySolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\MissingColumnSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\MissingImportSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\MissingLivewireComponentSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\MissingMixManifestSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\MissingViteManifestSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\RunningLaravelDuskInProductionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\TableNotFoundSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\UndefinedViewVariableSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\UnknownValidationSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\ViewNotFoundSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\OpenAiSolutionProvider;
use Spatie\LaravelIgnition\Solutions\SolutionProviders\SailNetworkSolutionProvider;
return [
/*
|--------------------------------------------------------------------------
| Editor
|--------------------------------------------------------------------------
|
| Choose your preferred editor to use when clicking any edit button.
|
| Supported: "phpstorm", "vscode", "vscode-insiders", "textmate", "emacs",
| "sublime", "atom", "nova", "macvim", "idea", "netbeans",
| "xdebug", "phpstorm-remote"
|
*/
'editor' => env('IGNITION_EDITOR', 'phpstorm'),
/*
|--------------------------------------------------------------------------
| Theme
|--------------------------------------------------------------------------
|
| Here you may specify which theme Ignition should use.
|
| Supported: "light", "dark", "auto"
|
*/
'theme' => env('IGNITION_THEME', 'auto'),
/*
|--------------------------------------------------------------------------
| Sharing
|--------------------------------------------------------------------------
|
| You can share local errors with colleagues or others around the world.
| Sharing is completely free and doesn't require an account on Flare.
|
| If necessary, you can completely disable sharing below.
|
*/
'enable_share_button' => env('IGNITION_SHARING_ENABLED', true),
/*
|--------------------------------------------------------------------------
| Register Ignition commands
|--------------------------------------------------------------------------
|
| Ignition comes with an additional make command that lets you create
| new solution classes more easily. To keep your default Laravel
| installation clean, this command is not registered by default.
|
| You can enable the command registration below.
|
*/
'register_commands' => env('REGISTER_IGNITION_COMMANDS', false),
/*
|--------------------------------------------------------------------------
| Solution Providers
|--------------------------------------------------------------------------
|
| You may specify a list of solution providers (as fully qualified class
| names) that shouldn't be loaded. Ignition will ignore these classes
| and possible solutions provided by them will never be displayed.
|
*/
'solution_providers' => [
// from spatie/ignition
BadMethodCallSolutionProvider::class,
MergeConflictSolutionProvider::class,
UndefinedPropertySolutionProvider::class,
// from spatie/laravel-ignition
IncorrectValetDbCredentialsSolutionProvider::class,
MissingAppKeySolutionProvider::class,
DefaultDbNameSolutionProvider::class,
TableNotFoundSolutionProvider::class,
MissingImportSolutionProvider::class,
InvalidRouteActionSolutionProvider::class,
ViewNotFoundSolutionProvider::class,
RunningLaravelDuskInProductionProvider::class,
MissingColumnSolutionProvider::class,
UnknownValidationSolutionProvider::class,
MissingMixManifestSolutionProvider::class,
MissingViteManifestSolutionProvider::class,
MissingLivewireComponentSolutionProvider::class,
UndefinedViewVariableSolutionProvider::class,
GenericLaravelExceptionSolutionProvider::class,
OpenAiSolutionProvider::class,
SailNetworkSolutionProvider::class,
],
/*
|--------------------------------------------------------------------------
| Ignored Solution Providers
|--------------------------------------------------------------------------
|
| You may specify a list of solution providers (as fully qualified class
| names) that shouldn't be loaded. Ignition will ignore these classes
| and possible solutions provided by them will never be displayed.
|
*/
'ignored_solution_providers' => [
],
/*
|--------------------------------------------------------------------------
| Runnable Solutions
|--------------------------------------------------------------------------
|
| Some solutions that Ignition displays are runnable and can perform
| various tasks. By default, runnable solutions are only enabled when your
| app has debug mode enabled and the environment is `local` or
| `development`.
|
| Using the `IGNITION_ENABLE_RUNNABLE_SOLUTIONS` environment variable, you
| can override this behaviour and enable or disable runnable solutions
| regardless of the application's environment.
|
| Default: env('IGNITION_ENABLE_RUNNABLE_SOLUTIONS')
|
*/
'enable_runnable_solutions' => env('IGNITION_ENABLE_RUNNABLE_SOLUTIONS'),
/*
|--------------------------------------------------------------------------
| Remote Path Mapping
|--------------------------------------------------------------------------
|
| If you are using a remote dev server, like Laravel Homestead, Docker, or
| even a remote VPS, it will be necessary to specify your path mapping.
|
| Leaving one, or both of these, empty or null will not trigger the remote
| URL changes and Ignition will treat your editor links as local files.
|
| "remote_sites_path" is an absolute base path for your sites or projects
| in Homestead, Vagrant, Docker, or another remote development server.
|
| Example value: "/home/vagrant/Code"
|
| "local_sites_path" is an absolute base path for your sites or projects
| on your local computer where your IDE or code editor is running on.
|
| Example values: "/Users/<name>/Code", "C:\Users\<name>\Documents\Code"
|
*/
'remote_sites_path' => env('IGNITION_REMOTE_SITES_PATH', base_path()),
'local_sites_path' => env('IGNITION_LOCAL_SITES_PATH', ''),
/*
|--------------------------------------------------------------------------
| Housekeeping Endpoint Prefix
|--------------------------------------------------------------------------
|
| Ignition registers a couple of routes when it is enabled. Below you may
| specify a route prefix that will be used to host all internal links.
|
*/
'housekeeping_endpoint_prefix' => '_ignition',
/*
|--------------------------------------------------------------------------
| Settings File
|--------------------------------------------------------------------------
|
| Ignition allows you to save your settings to a specific global file.
|
| If no path is specified, a file with settings will be saved to the user's
| home directory. The directory depends on the OS and its settings but it's
| typically `~/.ignition.json`. In this case, the settings will be applied
| to all of your projects where Ignition is used and the path is not
| specified.
|
| However, if you want to store your settings on a project basis, or you
| want to keep them in another directory, you can specify a path where
| the settings file will be saved. The path should be an existing directory
| with correct write access.
| For example, create a new `ignition` folder in the storage directory and
| use `storage_path('ignition')` as the `settings_file_path`.
|
| Default value: '' (empty string)
*/
'settings_file_path' => '',
/*
|--------------------------------------------------------------------------
| Recorders
|--------------------------------------------------------------------------
|
| Ignition registers a couple of recorders when it is enabled. Below you may
| specify a recorders will be used to record specific events.
|
*/
'recorders' => [
DumpRecorder::class,
JobRecorder::class,
LogRecorder::class,
QueryRecorder::class,
],
/*
* When a key is set, we'll send your exceptions to Open AI to generate a solution
*/
'open_ai_key' => env('IGNITION_OPEN_AI_KEY'),
/*
|--------------------------------------------------------------------------
| Include arguments
|--------------------------------------------------------------------------
|
| Ignition show you stack traces of exceptions with the arguments that were
| passed to each method. This feature can be disabled here.
|
*/
'with_stack_frame_arguments' => true,
/*
|--------------------------------------------------------------------------
| Argument reducers
|--------------------------------------------------------------------------
|
| Ignition show you stack traces of exceptions with the arguments that were
| passed to each method. To make these variables more readable, you can
| specify a list of classes here which summarize the variables.
|
*/
'argument_reducers' => [
\Spatie\Backtrace\Arguments\Reducers\BaseTypeArgumentReducer::class,
\Spatie\Backtrace\Arguments\Reducers\ArrayArgumentReducer::class,
\Spatie\Backtrace\Arguments\Reducers\StdClassArgumentReducer::class,
\Spatie\Backtrace\Arguments\Reducers\EnumArgumentReducer::class,
\Spatie\Backtrace\Arguments\Reducers\ClosureArgumentReducer::class,
\Spatie\Backtrace\Arguments\Reducers\DateTimeArgumentReducer::class,
\Spatie\Backtrace\Arguments\Reducers\DateTimeZoneArgumentReducer::class,
\Spatie\Backtrace\Arguments\Reducers\SymphonyRequestArgumentReducer::class,
\Spatie\LaravelIgnition\ArgumentReducers\ModelArgumentReducer::class,
\Spatie\LaravelIgnition\ArgumentReducers\CollectionArgumentReducer::class,
\Spatie\Backtrace\Arguments\Reducers\StringableArgumentReducer::class,
],
];

20
config/image.php Normal file
View File

@ -0,0 +1,20 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Image Driver
|--------------------------------------------------------------------------
|
| Intervention Image supports "GD Library" and "Imagick" to process images
| internally. You may choose one of them according to your PHP
| configuration. By default PHP's "GD Library" implementation is used.
|
| Supported: "gd", "imagick"
|
*/
'driver' => 'gd'
];

301
config/jwt.php Normal file
View File

@ -0,0 +1,301 @@
<?php
/*
* This file is part of jwt-auth.
*
* (c) Sean Tymon <tymon148@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
/*
|--------------------------------------------------------------------------
| JWT Authentication Secret
|--------------------------------------------------------------------------
|
| Don't forget to set this in your .env file, as it will be used to sign
| your tokens. A helper command is provided for this:
| `php artisan jwt:secret`
|
| Note: This will be used for Symmetric algorithms only (HMAC),
| since RSA and ECDSA use a private/public key combo (See below).
|
*/
'secret' => env('JWT_SECRET'),
/*
|--------------------------------------------------------------------------
| JWT Authentication Keys
|--------------------------------------------------------------------------
|
| The algorithm you are using, will determine whether your tokens are
| signed with a random string (defined in `JWT_SECRET`) or using the
| following public & private keys.
|
| Symmetric Algorithms:
| HS256, HS384 & HS512 will use `JWT_SECRET`.
|
| Asymmetric Algorithms:
| RS256, RS384 & RS512 / ES256, ES384 & ES512 will use the keys below.
|
*/
'keys' => [
/*
|--------------------------------------------------------------------------
| Public Key
|--------------------------------------------------------------------------
|
| A path or resource to your public key.
|
| E.g. 'file://path/to/public/key'
|
*/
'public' => env('JWT_PUBLIC_KEY'),
/*
|--------------------------------------------------------------------------
| Private Key
|--------------------------------------------------------------------------
|
| A path or resource to your private key.
|
| E.g. 'file://path/to/private/key'
|
*/
'private' => env('JWT_PRIVATE_KEY'),
/*
|--------------------------------------------------------------------------
| Passphrase
|--------------------------------------------------------------------------
|
| The passphrase for your private key. Can be null if none set.
|
*/
'passphrase' => env('JWT_PASSPHRASE'),
],
/*
|--------------------------------------------------------------------------
| JWT time to live
|--------------------------------------------------------------------------
|
| Specify the length of time (in minutes) that the token will be valid for.
| Defaults to 1 hour.
|
| You can also set this to null, to yield a never expiring token.
| Some people may want this behaviour for e.g. a mobile app.
| This is not particularly recommended, so make sure you have appropriate
| systems in place to revoke the token if necessary.
| Notice: If you set this to null you should remove 'exp' element from 'required_claims' list.
|
*/
'ttl' => env('JWT_TTL', 60),
/*
|--------------------------------------------------------------------------
| Refresh time to live
|--------------------------------------------------------------------------
|
| Specify the length of time (in minutes) that the token can be refreshed
| within. I.E. The user can refresh their token within a 2 week window of
| the original token being created until they must re-authenticate.
| Defaults to 2 weeks.
|
| You can also set this to null, to yield an infinite refresh time.
| Some may want this instead of never expiring tokens for e.g. a mobile app.
| This is not particularly recommended, so make sure you have appropriate
| systems in place to revoke the token if necessary.
|
*/
'refresh_ttl' => env('JWT_REFRESH_TTL', 20160),
/*
|--------------------------------------------------------------------------
| JWT hashing algorithm
|--------------------------------------------------------------------------
|
| Specify the hashing algorithm that will be used to sign the token.
|
*/
'algo' => env('JWT_ALGO', Tymon\JWTAuth\Providers\JWT\Provider::ALGO_HS256),
/*
|--------------------------------------------------------------------------
| Required Claims
|--------------------------------------------------------------------------
|
| Specify the required claims that must exist in any token.
| A TokenInvalidException will be thrown if any of these claims are not
| present in the payload.
|
*/
'required_claims' => [
'iss',
'iat',
'exp',
'nbf',
'sub',
'jti',
],
/*
|--------------------------------------------------------------------------
| Persistent Claims
|--------------------------------------------------------------------------
|
| Specify the claim keys to be persisted when refreshing a token.
| `sub` and `iat` will automatically be persisted, in
| addition to the these claims.
|
| Note: If a claim does not exist then it will be ignored.
|
*/
'persistent_claims' => [
// 'foo',
// 'bar',
],
/*
|--------------------------------------------------------------------------
| Lock Subject
|--------------------------------------------------------------------------
|
| This will determine whether a `prv` claim is automatically added to
| the token. The purpose of this is to ensure that if you have multiple
| authentication models e.g. `App\User` & `App\OtherPerson`, then we
| should prevent one authentication request from impersonating another,
| if 2 tokens happen to have the same id across the 2 different models.
|
| Under specific circumstances, you may want to disable this behaviour
| e.g. if you only have one authentication model, then you would save
| a little on token size.
|
*/
'lock_subject' => true,
/*
|--------------------------------------------------------------------------
| Leeway
|--------------------------------------------------------------------------
|
| This property gives the jwt timestamp claims some "leeway".
| Meaning that if you have any unavoidable slight clock skew on
| any of your servers then this will afford you some level of cushioning.
|
| This applies to the claims `iat`, `nbf` and `exp`.
|
| Specify in seconds - only if you know you need it.
|
*/
'leeway' => env('JWT_LEEWAY', 0),
/*
|--------------------------------------------------------------------------
| Blacklist Enabled
|--------------------------------------------------------------------------
|
| In order to invalidate tokens, you must have the blacklist enabled.
| If you do not want or need this functionality, then set this to false.
|
*/
'blacklist_enabled' => env('JWT_BLACKLIST_ENABLED', true),
/*
| -------------------------------------------------------------------------
| Blacklist Grace Period
| -------------------------------------------------------------------------
|
| When multiple concurrent requests are made with the same JWT,
| it is possible that some of them fail, due to token regeneration
| on every request.
|
| Set grace period in seconds to prevent parallel request failure.
|
*/
'blacklist_grace_period' => env('JWT_BLACKLIST_GRACE_PERIOD', 0),
/*
|--------------------------------------------------------------------------
| Cookies encryption
|--------------------------------------------------------------------------
|
| By default Laravel encrypt cookies for security reason.
| If you decide to not decrypt cookies, you will have to configure Laravel
| to not encrypt your cookie token by adding its name into the $except
| array available in the middleware "EncryptCookies" provided by Laravel.
| see https://laravel.com/docs/master/responses#cookies-and-encryption
| for details.
|
| Set it to true if you want to decrypt cookies.
|
*/
'decrypt_cookies' => false,
/*
|--------------------------------------------------------------------------
| Providers
|--------------------------------------------------------------------------
|
| Specify the various providers used throughout the package.
|
*/
'providers' => [
/*
|--------------------------------------------------------------------------
| JWT Provider
|--------------------------------------------------------------------------
|
| Specify the provider that is used to create and decode the tokens.
|
*/
'jwt' => Tymon\JWTAuth\Providers\JWT\Lcobucci::class,
/*
|--------------------------------------------------------------------------
| Authentication Provider
|--------------------------------------------------------------------------
|
| Specify the provider that is used to authenticate users.
|
*/
'auth' => Tymon\JWTAuth\Providers\Auth\Illuminate::class,
/*
|--------------------------------------------------------------------------
| Storage Provider
|--------------------------------------------------------------------------
|
| Specify the provider that is used to store tokens in the blacklist.
|
*/
'storage' => Tymon\JWTAuth\Providers\Storage\Illuminate::class,
],
];

50
config/tinker.php Normal file
View File

@ -0,0 +1,50 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Console Commands
|--------------------------------------------------------------------------
|
| This option allows you to add additional Artisan commands that should
| be available within the Tinker environment. Once the command is in
| this array you may execute the command in Tinker using its name.
|
*/
'commands' => [
// App\Console\Commands\ExampleCommand::class,
],
/*
|--------------------------------------------------------------------------
| Auto Aliased Classes
|--------------------------------------------------------------------------
|
| Tinker will not automatically alias classes in your vendor namespaces
| but you may explicitly allow a subset of classes to get aliased by
| adding the names of each of those classes to the following list.
|
*/
'alias' => [
//
],
/*
|--------------------------------------------------------------------------
| Classes That Should Not Be Aliased
|--------------------------------------------------------------------------
|
| Typically, Tinker automatically aliases classes as you require them in
| Tinker. However, you may wish to never alias certain classes, which
| you may accomplish by listing the classes in the following array.
|
*/
'dont_alias' => [
'App\Nova',
],
];

View File

@ -1,23 +0,0 @@
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Refund>
*/
class RefundFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
//
];
}
}

View File

@ -1,23 +0,0 @@
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Setting>
*/
class SettingFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
//
];
}
}

View File

@ -1,23 +0,0 @@
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\transaction>
*/
class TransactionFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
//
];
}
}

View File

@ -18,11 +18,18 @@ class UserFactory extends Factory
public function definition(): array public function definition(): array
{ {
return [ return [
'name' => fake()->name(), 'id' => Str::uuid(),
'nama' => $this->faker->name,
'email' => fake()->unique()->safeEmail(), 'email' => fake()->unique()->safeEmail(),
'email_verified_at' => now(), 'email_verified_at' => now(),
'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
'remember_token' => Str::random(10), 'remember_token' => Str::random(10),
'role' => $this->faker->randomElement(['Admin','User']),
'nik' => $this->faker->nik,
'alamat'=> $this->faker->address,
'nohp'=> $this->faker->phoneNumber(),
'status'=> $this->faker->randomElement(['Progress', 'Finished']),
'gender' => $this->faker->randomElement(['Laki-laki', 'Perempuan']),
]; ];
} }

View File

@ -1,23 +0,0 @@
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Users>
*/
class UsersFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
//
];
}
}

View File

@ -12,11 +12,18 @@ return new class extends Migration
public function up(): void public function up(): void
{ {
Schema::create('users', function (Blueprint $table) { Schema::create('users', function (Blueprint $table) {
$table->id(); $table->uuid('id')->primary;
$table->string('name'); $table->string('nama',255);
$table->string('email')->unique(); $table->string('email',50)->unique();
$table->timestamp('email_verified_at')->nullable(); $table->timestamp('email_verified_at')->nullable();
$table->string('password'); $table->string('password');
$table->string('role');
$table->string('nohp',20);
$table->string('nik',20);
$table->string('alamat',255);
$table->string('foto_ktp')->nullable();
$table->string('status',10);
$table->string('gender');
$table->rememberToken(); $table->rememberToken();
$table->timestamps(); $table->timestamps();
}); });

View File

@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('contacts', function (Blueprint $table) {
$table->id();
$table->string('pemilik_kontak');
$table->string('relasi_kontak');
$table->foreign('pemilik_kontak')->on('users')->references('email');
$table->foreign('relasi_kontak')->on('users')->references('email');
$table->unique(['pemilik_kontak','relasi_kontak']);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('contacts');
}
};

View File

@ -4,6 +4,7 @@ namespace Database\Seeders;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents; // use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder; use Illuminate\Database\Seeder;
use App\Models\User;
class DatabaseSeeder extends Seeder class DatabaseSeeder extends Seeder
{ {
@ -12,7 +13,7 @@ class DatabaseSeeder extends Seeder
*/ */
public function run(): void public function run(): void
{ {
// \App\Models\User::factory(10)->create(); User::factory(100)->create();
// \App\Models\User::factory()->create([ // \App\Models\User::factory()->create([
// 'name' => 'Test User', // 'name' => 'Test User',

View File

@ -1,17 +0,0 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class RefundSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
}
}

View File

@ -1,17 +0,0 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class SettingSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
}
}

View File

@ -1,17 +0,0 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class TransactionSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
}
}

View File

@ -1,17 +0,0 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class UsersSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
}
}

59
docker/8.0/Dockerfile Normal file
View File

@ -0,0 +1,59 @@
FROM ubuntu:20.04
LABEL maintainer="Taylor Otwell"
ARG WWWGROUP
ARG NODE_VERSION=16
ARG POSTGRES_VERSION=13
WORKDIR /var/www/html
ENV DEBIAN_FRONTEND noninteractive
ENV TZ=UTC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt-get update \
&& apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 dnsutils librsvg2-bin fswatch \
&& curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c' | gpg --dearmor | tee /usr/share/keyrings/ppa_ondrej_php.gpg > /dev/null \
&& echo "deb [signed-by=/usr/share/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu focal main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
&& apt-get update \
&& apt-get install -y php8.0-cli php8.0-dev \
php8.0-pgsql php8.0-sqlite3 php8.0-gd php8.0-imagick \
php8.0-curl php8.0-memcached \
php8.0-imap php8.0-mysql php8.0-mbstring \
php8.0-xml php8.0-zip php8.0-bcmath php8.0-soap \
php8.0-intl php8.0-readline php8.0-pcov \
php8.0-msgpack php8.0-igbinary php8.0-ldap \
php8.0-redis php8.0-swoole php8.0-xdebug \
&& curl -sLS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer \
&& curl -sLS https://deb.nodesource.com/setup_$NODE_VERSION.x | bash - \
&& apt-get install -y nodejs \
&& npm install -g npm \
&& curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /usr/share/keyrings/yarnkey.gpg >/dev/null \
&& echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
&& curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /usr/share/keyrings/pgdg.gpg >/dev/null \
&& echo "deb [signed-by=/usr/share/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt focal-pgdg main" > /etc/apt/sources.list.d/pgdg.list \
&& apt-get update \
&& apt-get install -y yarn \
&& apt-get install -y mysql-client \
&& apt-get install -y postgresql-client-$POSTGRES_VERSION \
&& apt-get -y autoremove \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN update-alternatives --set php /usr/bin/php8.0
RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.0
RUN groupadd --force -g $WWWGROUP sail
RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail
COPY start-container /usr/local/bin/start-container
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY php.ini /etc/php/8.0/cli/conf.d/99-sail.ini
RUN chmod +x /usr/local/bin/start-container
EXPOSE 8000
ENTRYPOINT ["start-container"]

7
docker/8.0/php.ini Normal file
View File

@ -0,0 +1,7 @@
[PHP]
post_max_size = 100M
upload_max_filesize = 100M
variables_order = EGPCS
[opcache]
opcache.enable_cli=1

View File

@ -0,0 +1,17 @@
#!/usr/bin/env bash
if [ ! -z "$WWWUSER" ]; then
usermod -u $WWWUSER sail
fi
if [ ! -d /.composer ]; then
mkdir /.composer
fi
chmod -R ugo+rw /.composer
if [ $# -gt 0 ]; then
exec gosu $WWWUSER "$@"
else
exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
fi

View File

@ -0,0 +1,14 @@
[supervisord]
nodaemon=true
user=root
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
[program:php]
command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80
user=sail
environment=LARAVEL_SAIL="1"
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

58
docker/8.1/Dockerfile Normal file
View File

@ -0,0 +1,58 @@
FROM ubuntu:22.04
LABEL maintainer="Taylor Otwell"
ARG WWWGROUP
ARG NODE_VERSION=18
ARG POSTGRES_VERSION=15
WORKDIR /var/www/html
ENV DEBIAN_FRONTEND noninteractive
ENV TZ=UTC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt-get update \
&& apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 dnsutils librsvg2-bin fswatch \
&& curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c' | gpg --dearmor | tee /usr/share/keyrings/ppa_ondrej_php.gpg > /dev/null \
&& echo "deb [signed-by=/usr/share/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
&& apt-get update \
&& apt-get install -y php8.1-cli php8.1-dev \
php8.1-pgsql php8.1-sqlite3 php8.1-gd php8.1-imagick \
php8.1-curl \
php8.1-imap php8.1-mysql php8.1-mbstring \
php8.1-xml php8.1-zip php8.1-bcmath php8.1-soap \
php8.1-intl php8.1-readline \
php8.1-ldap \
php8.1-msgpack php8.1-igbinary php8.1-redis php8.1-swoole \
php8.1-memcached php8.1-pcov php8.1-xdebug \
&& curl -sLS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer \
&& curl -sLS https://deb.nodesource.com/setup_$NODE_VERSION.x | bash - \
&& apt-get install -y nodejs \
&& npm install -g npm \
&& curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /usr/share/keyrings/yarn.gpg >/dev/null \
&& echo "deb [signed-by=/usr/share/keyrings/yarn.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
&& curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /usr/share/keyrings/pgdg.gpg >/dev/null \
&& echo "deb [signed-by=/usr/share/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt jammy-pgdg main" > /etc/apt/sources.list.d/pgdg.list \
&& apt-get update \
&& apt-get install -y yarn \
&& apt-get install -y mysql-client \
&& apt-get install -y postgresql-client-$POSTGRES_VERSION \
&& apt-get -y autoremove \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.1
RUN groupadd --force -g $WWWGROUP sail
RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail
COPY start-container /usr/local/bin/start-container
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY php.ini /etc/php/8.1/cli/conf.d/99-sail.ini
RUN chmod +x /usr/local/bin/start-container
EXPOSE 8000
ENTRYPOINT ["start-container"]

7
docker/8.1/php.ini Normal file
View File

@ -0,0 +1,7 @@
[PHP]
post_max_size = 100M
upload_max_filesize = 100M
variables_order = EGPCS
[opcache]
opcache.enable_cli=1

View File

@ -0,0 +1,17 @@
#!/usr/bin/env bash
if [ ! -z "$WWWUSER" ]; then
usermod -u $WWWUSER sail
fi
if [ ! -d /.composer ]; then
mkdir /.composer
fi
chmod -R ugo+rw /.composer
if [ $# -gt 0 ]; then
exec gosu $WWWUSER "$@"
else
exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
fi

View File

@ -0,0 +1,14 @@
[supervisord]
nodaemon=true
user=root
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
[program:php]
command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80
user=sail
environment=LARAVEL_SAIL="1"
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

59
docker/8.2/Dockerfile Normal file
View File

@ -0,0 +1,59 @@
FROM ubuntu:22.04
LABEL maintainer="Taylor Otwell"
ARG WWWGROUP
ARG NODE_VERSION=18
ARG POSTGRES_VERSION=15
WORKDIR /var/www/html
ENV DEBIAN_FRONTEND noninteractive
ENV TZ=UTC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt-get update \
&& apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 dnsutils librsvg2-bin fswatch \
&& curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c' | gpg --dearmor | tee /etc/apt/keyrings/ppa_ondrej_php.gpg > /dev/null \
&& echo "deb [signed-by=/etc/apt/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
&& apt-get update \
&& apt-get install -y php8.2-cli php8.2-dev \
php8.2-pgsql php8.2-sqlite3 php8.2-gd php8.2-imagick \
php8.2-curl \
php8.2-imap php8.2-mysql php8.2-mbstring \
php8.2-xml php8.2-zip php8.2-bcmath php8.2-soap \
php8.2-intl php8.2-readline \
php8.2-ldap \
php8.2-msgpack php8.2-igbinary php8.2-redis php8.2-swoole \
php8.2-memcached php8.2-pcov php8.2-xdebug \
&& curl -sLS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer \
&& curl -sLS https://deb.nodesource.com/setup_$NODE_VERSION.x | bash - \
&& apt-get install -y nodejs \
&& npm install -g npm \
&& npm install -g pnpm \
&& curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /etc/apt/keyrings/yarn.gpg >/dev/null \
&& echo "deb [signed-by=/etc/apt/keyrings/yarn.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
&& curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /etc/apt/keyrings/pgdg.gpg >/dev/null \
&& echo "deb [signed-by=/etc/apt/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt jammy-pgdg main" > /etc/apt/sources.list.d/pgdg.list \
&& apt-get update \
&& apt-get install -y yarn \
&& apt-get install -y mysql-client \
&& apt-get install -y postgresql-client-$POSTGRES_VERSION \
&& apt-get -y autoremove \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.2
RUN groupadd --force -g $WWWGROUP sail
RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail
COPY start-container /usr/local/bin/start-container
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY php.ini /etc/php/8.2/cli/conf.d/99-sail.ini
RUN chmod +x /usr/local/bin/start-container
EXPOSE 8000
ENTRYPOINT ["start-container"]

7
docker/8.2/php.ini Normal file
View File

@ -0,0 +1,7 @@
[PHP]
post_max_size = 100M
upload_max_filesize = 100M
variables_order = EGPCS
[opcache]
opcache.enable_cli=1

View File

@ -0,0 +1,17 @@
#!/usr/bin/env bash
if [ ! -z "$WWWUSER" ]; then
usermod -u $WWWUSER sail
fi
if [ ! -d /.composer ]; then
mkdir /.composer
fi
chmod -R ugo+rw /.composer
if [ $# -gt 0 ]; then
exec gosu $WWWUSER "$@"
else
exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
fi

View File

@ -0,0 +1,14 @@
[supervisord]
nodaemon=true
user=root
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
[program:php]
command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80
user=sail
environment=LARAVEL_SAIL="1"
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

View File

@ -0,0 +1,6 @@
#!/usr/bin/env bash
mysql --user=root --password="$MYSQL_ROOT_PASSWORD" <<-EOSQL
CREATE DATABASE IF NOT EXISTS testing;
GRANT ALL PRIVILEGES ON \`testing%\`.* TO '$MYSQL_USER'@'%';
EOSQL

View File

@ -0,0 +1,2 @@
SELECT 'CREATE DATABASE testing'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'testing')\gexec

View File

@ -76,7 +76,13 @@
bottom: 0; bottom: 0;
left: 0; left: 0;
width: 100%; width: 100%;
background: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.01) 1%, rgba(0, 0, 0, 0.65) 98%, rgba(0, 0, 0, 0.65) 100%); background: linear-gradient(
to bottom,
rgba(0, 0, 0, 0) 0%,
rgba(0, 0, 0, 0.01) 1%,
rgba(0, 0, 0, 0.65) 98%,
rgba(0, 0, 0, 0.65) 100%
);
padding: 10px; padding: 10px;
} }
.article .article-header .article-title h2 { .article .article-header .article-title h2 {
@ -108,7 +114,11 @@
border-radius: 30px; border-radius: 30px;
font-size: 12px; font-size: 12px;
} }
.article .article-header .article-badge .article-badge-item .ion, .article .article-header .article-badge .article-badge-item .fas, .article .article-header .article-badge .article-badge-item .far, .article .article-header .article-badge .article-badge-item .fab, .article .article-header .article-badge .article-badge-item .fal { .article .article-header .article-badge .article-badge-item .ion,
.article .article-header .article-badge .article-badge-item .fas,
.article .article-header .article-badge .article-badge-item .far,
.article .article-header .article-badge .article-badge-item .fab,
.article .article-header .article-badge .article-badge-item .fal {
margin-right: 3px; margin-right: 3px;
} }
.article.article-style-b .article-details .article-title { .article.article-style-b .article-details .article-title {
@ -399,7 +409,8 @@
table.dataTable { table.dataTable {
border-collapse: collapse !important; border-collapse: collapse !important;
} }
table.dataTable thead th, table.dataTable thead td { table.dataTable thead th,
table.dataTable thead td {
border-bottom: 1px solid #ddd !important; border-bottom: 1px solid #ddd !important;
} }
table.dataTable.no-footer { table.dataTable.no-footer {
@ -440,7 +451,8 @@ div.dataTables_wrapper div.dataTables_processing {
.daterangepicker .input-mini { .daterangepicker .input-mini {
padding-left: 28px !important; padding-left: 28px !important;
} }
.daterangepicker .calendar th, .daterangepicker .calendar td { .daterangepicker .calendar th,
.daterangepicker .calendar td {
padding: 5px; padding: 5px;
font-size: 12px; font-size: 12px;
} }
@ -448,11 +460,13 @@ div.dataTables_wrapper div.dataTables_processing {
.ranges li { .ranges li {
color: #6777ef; color: #6777ef;
} }
.ranges li:hover, .ranges li.active { .ranges li:hover,
.ranges li.active {
background-color: #6777ef; background-color: #6777ef;
} }
.daterangepicker td.active, .daterangepicker td.active:hover { .daterangepicker td.active,
.daterangepicker td.active:hover {
background-color: #6777ef; background-color: #6777ef;
} }
@ -510,7 +524,8 @@ div.dataTables_wrapper div.dataTables_processing {
.fc-view > table { .fc-view > table {
border-color: #f2f2f2; border-color: #f2f2f2;
} }
.fc-view > table tr, .fc-view > table td { .fc-view > table tr,
.fc-view > table td {
border-color: #f2f2f2; border-color: #f2f2f2;
} }
.fc-view > table th { .fc-view > table th {
@ -541,7 +556,8 @@ div.dataTables_wrapper div.dataTables_processing {
top: -0.09em; top: -0.09em;
} }
.fc-basic-view .fc-day-number, .fc-basic-view .fc-week-number { .fc-basic-view .fc-day-number,
.fc-basic-view .fc-week-number {
padding: 10px; padding: 10px;
} }
@ -638,7 +654,8 @@ tr:first-child > td > .fc-day-grid-event {
} }
/* 1.14 Image Preview */ /* 1.14 Image Preview */
.image-preview, #callback-preview { .image-preview,
#callback-preview {
width: 250px; width: 250px;
height: 250px; height: 250px;
border: 2px dashed #ddd; border: 2px dashed #ddd;
@ -649,7 +666,8 @@ tr:first-child > td > .fc-day-grid-event {
color: #ecf0f1; color: #ecf0f1;
} }
.image-preview input, #callback-preview input { .image-preview input,
#callback-preview input {
line-height: 200px; line-height: 200px;
font-size: 200px; font-size: 200px;
position: absolute; position: absolute;
@ -657,7 +675,8 @@ tr:first-child > td > .fc-day-grid-event {
z-index: 10; z-index: 10;
} }
.image-preview label, #callback-preview label { .image-preview label,
#callback-preview label {
position: absolute; position: absolute;
z-index: 5; z-index: 5;
opacity: 0.8; opacity: 0.8;
@ -743,7 +762,8 @@ tr:first-child > td > .fc-day-grid-event {
z-index: 889; z-index: 889;
} }
.jqvmap-zoomin, .jqvmap-zoomout { .jqvmap-zoomin,
.jqvmap-zoomout {
height: auto; height: auto;
width: auto; width: auto;
} }
@ -787,13 +807,19 @@ tr:first-child > td > .fc-day-grid-event {
.profile-widget .profile-widget-items .profile-widget-item:last-child { .profile-widget .profile-widget-items .profile-widget-item:last-child {
border-right: none; border-right: none;
} }
.profile-widget .profile-widget-items .profile-widget-item .profile-widget-item-label { .profile-widget
.profile-widget-items
.profile-widget-item
.profile-widget-item-label {
font-weight: 600; font-weight: 600;
font-size: 12px; font-size: 12px;
letter-spacing: 0.5px; letter-spacing: 0.5px;
color: #34395e; color: #34395e;
} }
.profile-widget .profile-widget-items .profile-widget-item .profile-widget-item-value { .profile-widget
.profile-widget-items
.profile-widget-item
.profile-widget-item-value {
color: #000; color: #000;
font-weight: 600; font-weight: 600;
font-size: 16px; font-size: 16px;
@ -821,12 +847,15 @@ tr:first-child > td > .fc-day-grid-event {
} }
} }
/* 1.18 Select2 */ /* 1.18 Select2 */
.select2-container--default .select2-search--dropdown .select2-search__field:focus { .select2-container--default
.select2-search--dropdown
.select2-search__field:focus {
outline: none; outline: none;
box-shadow: none; box-shadow: none;
} }
.select2-container .select2-selection--multiple, .select2-container .select2-selection--single { .select2-container .select2-selection--multiple,
.select2-container .select2-selection--single {
box-sizing: border-box; box-sizing: border-box;
cursor: pointer; cursor: pointer;
display: block; display: block;
@ -848,7 +877,8 @@ tr:first-child > td > .fc-day-grid-event {
background-color: #fefeff; background-color: #fefeff;
border-color: #95a0f4; border-color: #95a0f4;
} }
.select2-container.select2-container--focus .select2-selection--multiple, .select2-container.select2-container--focus .select2-selection--single { .select2-container.select2-container--focus .select2-selection--multiple,
.select2-container.select2-container--focus .select2-selection--single {
background-color: #fefeff; background-color: #fefeff;
border-color: #95a0f4; border-color: #95a0f4;
} }
@ -865,37 +895,53 @@ tr:first-child > td > .fc-day-grid-event {
padding: 7px; padding: 7px;
} }
.select2-container--default .select2-selection--single .select2-selection__rendered { .select2-container--default
.select2-selection--single
.select2-selection__rendered {
min-height: 42px; min-height: 42px;
line-height: 42px; line-height: 42px;
padding-left: 20px; padding-left: 20px;
padding-right: 20px; padding-right: 20px;
} }
.select2-container--default .select2-selection--multiple .select2-selection__arrow, .select2-container--default .select2-selection--single .select2-selection__arrow { .select2-container--default
.select2-selection--multiple
.select2-selection__arrow,
.select2-container--default
.select2-selection--single
.select2-selection__arrow {
position: absolute; position: absolute;
top: 1px; top: 1px;
right: 1px; right: 1px;
width: 40px; width: 40px;
min-height: 42px; min-height: 42px;
} }
.select2-container--default .select2-selection--multiple .select2-selection__choice { .select2-container--default
.select2-selection--multiple
.select2-selection__choice {
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03);
color: #fff; color: #fff;
padding-left: 10px; padding-left: 10px;
padding-right: 10px; padding-right: 10px;
} }
.select2-container--default .select2-selection--multiple .select2-selection__rendered { .select2-container--default
.select2-selection--multiple
.select2-selection__rendered {
padding-left: 10px; padding-left: 10px;
padding-right: 10px; padding-right: 10px;
} }
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove { .select2-container--default
.select2-selection--multiple
.select2-selection__choice__remove {
margin-right: 5px; margin-right: 5px;
color: #fff; color: #fff;
} }
.select2-container--default .select2-selection--multiple .select2-selection__choice, .select2-container--default
.select2-container--default .select2-results__option[aria-selected=true], .select2-selection--multiple
.select2-container--default .select2-results__option--highlighted[aria-selected] { .select2-selection__choice,
.select2-container--default .select2-results__option[aria-selected="true"],
.select2-container--default
.select2-results__option--highlighted[aria-selected] {
background-color: #6777ef; background-color: #6777ef;
color: #fff; color: #fff;
} }
@ -937,7 +983,8 @@ tr:first-child > td > .fc-day-grid-event {
border-color: #6777ef; border-color: #6777ef;
} }
.selectric-above .selectric-items, .selectric-below .selectric-items { .selectric-above .selectric-items,
.selectric-below .selectric-items {
margin-bottom: 10px; margin-bottom: 10px;
} }
@ -954,13 +1001,14 @@ tr:first-child > td > .fc-day-grid-event {
.selectric-items li:hover { .selectric-items li:hover {
background-color: #f2f2f2; background-color: #f2f2f2;
} }
.selectric-items li.selected, .selectric-items li.highlighted { .selectric-items li.selected,
.selectric-items li.highlighted {
background-color: #6777ef; background-color: #6777ef;
color: #fff; color: #fff;
} }
/* 1.20 Slider */ /* 1.20 Slider */
.slider .owl-nav [class*=owl-] { .slider .owl-nav [class*="owl-"] {
position: absolute; position: absolute;
top: 50%; top: 50%;
left: 35px; left: 35px;
@ -975,14 +1023,14 @@ tr:first-child > td > .fc-day-grid-event {
line-height: 34px; line-height: 34px;
opacity: 0.3; opacity: 0.3;
} }
.slider .owl-nav [class*=owl-]:hover { .slider .owl-nav [class*="owl-"]:hover {
background-color: #000; background-color: #000;
} }
.slider .owl-nav .owl-next { .slider .owl-nav .owl-next {
right: 0; right: 0;
left: initial; left: initial;
} }
.slider:hover .owl-nav [class*=owl-] { .slider:hover .owl-nav [class*="owl-"] {
opacity: 1; opacity: 1;
} }
.slider .slider-caption { .slider .slider-caption {
@ -1010,11 +1058,15 @@ tr:first-child > td > .fc-day-grid-event {
box-sizing: content-box; box-sizing: content-box;
} }
.sparkline-bar, .sparkline-line, .sparkline-inline { .sparkline-bar,
.sparkline-line,
.sparkline-inline {
width: 100%; width: 100%;
} }
.sparkline-bar canvas, .sparkline-line canvas, .sparkline-inline canvas { .sparkline-bar canvas,
.sparkline-line canvas,
.sparkline-inline canvas {
width: 100% !important; width: 100% !important;
} }
@ -1237,27 +1289,32 @@ tr:first-child > td > .fc-day-grid-event {
} }
@media (max-width: 575.98px) { @media (max-width: 575.98px) {
.user-progress .media, .user-details .media { .user-progress .media,
.user-details .media {
text-align: center; text-align: center;
display: inline-block; display: inline-block;
width: 100%; width: 100%;
} }
.user-progress .media img, .user-details .media img { .user-progress .media img,
.user-details .media img {
margin: 0 !important; margin: 0 !important;
margin-bottom: 10px !important; margin-bottom: 10px !important;
} }
.user-progress .media .media-body, .user-details .media .media-body { .user-progress .media .media-body,
.user-details .media .media-body {
width: 100%; width: 100%;
} }
.user-progress .media .media-items, .user-details .media .media-items { .user-progress .media .media-items,
.user-details .media .media-items {
margin: 20px 0; margin: 20px 0;
width: 100%; width: 100%;
} }
.user-progress .list-unstyled-noborder li:last-child, .user-details .list-unstyled-noborder li:last-child { .user-progress .list-unstyled-noborder li:last-child,
.user-details .list-unstyled-noborder li:last-child {
margin-bottom: 0; margin-bottom: 0;
padding-bottom: 0; padding-bottom: 0;
} }
@ -1363,7 +1420,8 @@ tr:first-child > td > .fc-day-grid-event {
padding: 10px; padding: 10px;
} }
.icon-wrap .icon, .new-icons ul li .wi { .icon-wrap .icon,
.new-icons ul li .wi {
font-size: 24px; font-size: 24px;
margin-right: 15px; margin-right: 15px;
width: 30px; width: 30px;
@ -1505,7 +1563,8 @@ tr:first-child > td > .fc-day-grid-event {
background-color: #6777ef; background-color: #6777ef;
border-bottom: none; border-bottom: none;
} }
.tickets .ticket-items .ticket-item.active .ticket-title, .tickets .ticket-items .ticket-item.active .ticket-desc { .tickets .ticket-items .ticket-item.active .ticket-title,
.tickets .ticket-items .ticket-item.active .ticket-desc {
color: #fff !important; color: #fff !important;
} }
.tickets .ticket-items .ticket-item .ticket-title h4 { .tickets .ticket-items .ticket-item .ticket-title h4 {
@ -1844,7 +1903,11 @@ tr:first-child > td > .fc-day-grid-event {
text-decoration: none; text-decoration: none;
border-radius: 0 0 3px 3px; border-radius: 0 0 3px 3px;
} }
.pricing .pricing-cta a .fas, .pricing .pricing-cta a .far, .pricing .pricing-cta a .fab, .pricing .pricing-cta a .fal, .pricing .pricing-cta a .ion { .pricing .pricing-cta a .fas,
.pricing .pricing-cta a .far,
.pricing .pricing-cta a .fab,
.pricing .pricing-cta a .fal,
.pricing .pricing-cta a .ion {
margin-left: 5px; margin-left: 5px;
} }
.pricing .pricing-cta a:hover { .pricing .pricing-cta a:hover {
@ -2059,7 +2122,11 @@ tr:first-child > td > .fc-day-grid-event {
background-color: #3abaf4; background-color: #3abaf4;
color: #fff; color: #fff;
} }
.wizard-steps .wizard-step .wizard-step-icon .fas, .wizard-steps .wizard-step .wizard-step-icon .far, .wizard-steps .wizard-step .wizard-step-icon .fab, .wizard-steps .wizard-step .wizard-step-icon .fal, .wizard-steps .wizard-step .wizard-step-icon .ion { .wizard-steps .wizard-step .wizard-step-icon .fas,
.wizard-steps .wizard-step .wizard-step-icon .far,
.wizard-steps .wizard-step .wizard-step-icon .fab,
.wizard-steps .wizard-step .wizard-step-icon .fal,
.wizard-steps .wizard-step .wizard-step-icon .ion {
font-size: 34px; font-size: 34px;
margin-bottom: 15px; margin-bottom: 15px;
} }

View File

@ -3537,7 +3537,7 @@ body.sidebar-mini .main-sidebar:after {
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03);
content: ' '; content: ' ';
position: fixed; position: fixed;
background-color: #fff; background-color: #900c3f;
width: 65px; width: 65px;
height: 100%; height: 100%;
left: 0; left: 0;

View File

@ -33,25 +33,27 @@
</style> </style>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta content="width=device-width, initial-scale=1, maximum-scale=1, shrink-to-fit=no" name="viewport"> <meta content="width=device-width, initial-scale=1, maximum-scale=1, shrink-to-fit=no" name="viewport">
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>REKBER</title> <title>REKBER</title>
<!-- General CSS Files --> <!-- General CSS Files -->
<link rel="stylesheet" href="assets/modules/bootstrap/css/bootstrap.min.css"> <link rel="stylesheet" href="{{ asset('assets/modules/bootstrap/css/bootstrap.min.css') }}">
<link rel="stylesheet" href="assets/modules/fontawesome/css/all.min.css"> <link rel="stylesheet" href="{{ asset('assets/modules/fontawesome/css/all.min.css') }}">
<link rel="stylesheet" href="https://cdn.materialdesignicons.com/5.4.55/css/materialdesignicons.min.css"> <link rel="stylesheet" href="https://cdn.materialdesignicons.com/5.4.55/css/materialdesignicons.min.css">
<link rel="stylesheet" href="assets/modules/jqvmap/dist/jqvmap.min.css"> <link rel="stylesheet" href="{{ asset('assets/modules/jqvmap/dist/jqvmap.min.css') }}">
<link rel="stylesheet" href="assets/modules/summernote/summernote-bs4.css"> <link rel="stylesheet" href="{{ asset('assets/modules/summernote/summernote-bs4.css') }}">
<link rel="stylesheet" href="assets/modules/owlcarousel2/dist/assets/owl.carousel.min.css"> <link rel="stylesheet" href="{{ asset('assets/modules/owlcarousel2/dist/assets/owl.carousel.min.css') }}">
<link rel="stylesheet" href="assets/modules/owlcarousel2/dist/assets/owl.theme.default.min.css"> <link rel="stylesheet" href="{{ asset('assets/modules/owlcarousel2/dist/assets/owl.theme.default.min.css') }}">
<link rel="stylesheet" type="text/css" <link rel="stylesheet" type="text/css"
href="https://cdn.jsdelivr.net/npm/daterangepicker@3.1.0/daterangepicker.css" /> href="https://cdn.jsdelivr.net/npm/daterangepicker@3.1.0/daterangepicker.css" />
<!-- Template CSS --> <!-- Template CSS -->
<link rel="stylesheet" href="assets/css/style.css"> <link rel="stylesheet" href="{{ asset('assets/css/style.css') }}">
<link rel="stylesheet" href="assets/css/components.css"> <link rel="stylesheet" href="{{ asset('assets/css/components.css') }}">
<!-- CSS Libraries --> <!-- CSS Libraries -->
<link rel="stylesheet" href="assets/modules/datatables/datatables.min.css"> <link rel="stylesheet" href="{{ asset('assets/modules/datatables/datatables.min.css') }}">
<link rel="stylesheet" href="assets/modules/datatables/DataTables-1.10.16/css/dataTables.bootstrap4.min.css"> <link rel="stylesheet"
<link rel="stylesheet" href="assets/modules/datatables/Select-1.2.4/css/select.bootstrap4.min.css"> href="{{ asset('assets/modules/datatables/DataTables-1.10.16/css/dataTables.bootstrap4.min.css') }}">
<link rel="stylesheet" href="{{ asset('assets/modules/datatables/Select-1.2.4/css/select.bootstrap4.min.css') }}">
<!-- Start GA --> <!-- Start GA -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-94034622-3"></script> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-94034622-3"></script>
<script> <script>
@ -114,51 +116,52 @@
<body> <body>
<header class="header-area header-sticky"> <header class="header-area header-sticky">
@include('Admin.layout.header') @include('admin.layout.header')
</header> </header>
<main id="main" style="min-height: 100vh;"> <main id="main" style="min-height: 100vh;">
@include('Admin.layout.sidebar') @include('admin.layout.sidebar')
@yield('content') @yield('content')
</main> </main>
<footer id="footer"> <footer id="footer">
@include('Admin.layout.footer') @include('admin.layout.footer')
</footer> </footer>
<!-- General JS Scripts --> <!-- General JS Scripts -->
<script src="assets/modules/jquery.min.js"></script> <script src="{{ asset('assets/modules/jquery.min.js') }}"></script>
<script src="assets/modules/popper.js"></script> <script src="{{ asset('assets/modules/popper.js') }}"></script>
<script src="assets/modules/tooltip.js"></script> <script src="{{ asset('assets/modules/tooltip.js') }}"></script>
<script src="assets/modules/bootstrap/js/bootstrap.min.js"></script> <script src="{{ asset('assets/modules/bootstrap/js/bootstrap.min.js') }}"></script>
<script src="assets/modules/nicescroll/jquery.nicescroll.min.js"></script> <script src="{{ asset('assets/modules/nicescroll/jquery.nicescroll.min.js') }}"></script>
<script src="assets/modules/moment.min.js"></script> <script src="{{ asset('assets/modules/moment.min.js') }}"></script>
<script src="assets/js/stisla.js"></script> <script src="{{ asset('assets/js/stisla.js') }}"></script>
<script src="//cdn.jsdelivr.net/npm/sweetalert2@10"></script>
<!-- JS Libraies --> <!-- JS Libraies -->
<script src="assets/modules/jquery.sparkline.min.js"></script> <script src="{{ asset('assets/modules/jquery.sparkline.min.js') }}"></script>
<script src="assets/modules/chart.min.js"></script> <script src="{{ asset('assets/modules/chart.min.js') }}"></script>
<script src="assets/modules/owlcarousel2/dist/owl.carousel.min.js"></script> <script src="{{ asset('assets/modules/owlcarousel2/dist/owl.carousel.min.js') }}"></script>
<script src="assets/modules/summernote/summernote-bs4.js"></script> <script src="{{ asset('assets/modules/summernote/summernote-bs4.js') }}"></script>
<script src="assets/modules/chocolat/dist/js/jquery.chocolat.min.js"></script> <script src="{{ asset('assets/modules/chocolat/dist/js/jquery.chocolat.min.js') }}"></script>
<!-- Page Specific JS File --> <!-- Page Specific JS File -->
<script src="assets/js/page/index.js"></script> <script src="{{ asset('assets/js/page/index.js') }}"></script>
<script src="assets/js/page/index-0.js"></script> <script src="{{ asset('assets/js/page/index-0.js') }}"></script>
<!-- JS Libraies --> <!-- JS Libraies -->
<script src="assets/modules/datatables/datatables.min.js"></script> <script src="{{ asset('assets/modules/datatables/datatables.min.js') }}"></script>
<script src="assets/modules/datatables/DataTables-1.10.16/js/dataTables.bootstrap4.min.js"></script> <script src="{{ asset('assets/modules/datatables/DataTables-1.10.16/js/dataTables.bootstrap4.min.js') }}"></script>
<script src="assets/modules/datatables/Select-1.2.4/js/dataTables.select.min.js"></script> <script src="{{ asset('assets/modules/datatables/Select-1.2.4/js/dataTables.select.min.js') }}"></script>
<script src="assets/modules/jquery-ui/jquery-ui.min.js"></script> <script src="{{ asset('assets/modules/jquery-ui/jquery-ui.min.js') }}"></script>
<!-- Page Specific JS File --> <!-- Page Specific JS File -->
<script src="assets/js/page/modules-datatables.js"></script> <script src="{{ asset('assets/js/page/modules-datatables.js') }}"></script>
<!-- Template JS File --> <!-- Template JS File -->
<script src="assets/js/scripts.js"></script> <script src="{{ asset('assets/js/scripts.js') }}"></script>
<script src="assets/js/custom.js"></script> <script src="{{ asset('assets/js/custom.js') }}"></script>
<script src="https://cdn.jsdelivr.net/npm/daterangepicker@3.1.0/daterangepicker.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/daterangepicker@3.1.0/daterangepicker.min.js"></script>
<script src="assets/js/tablesort.js"></script> <script src="{{ asset('assets/js/tablesort.js') }}"></script>
<script> <script>
document.addEventListener('DOMContentLoaded', function() { document.addEventListener('DOMContentLoaded', function() {
const alertCloseButtons = document.querySelectorAll('.alert .btn-close'); const alertCloseButtons = document.querySelectorAll('.alert .btn-close');

View File

@ -8,14 +8,14 @@
</div> </div>
<ul class="sidebar-menu"> <ul class="sidebar-menu">
<li class="menu-header">Dashboard</li> <li class="menu-header">Dashboard</li>
<li><a class="nav-link active" href="/"><i class="fas fa-fire"></i> <span>Dashboard</span></a></li> <li><a class="nav-link active" href="{{route('index')}}"><i class="fas fa-fire"></i> <span>Dashboard</span></a></li>
<li class="menu-header">Starter</li> <li class="menu-header">Starter</li>
<li><a class="nav-link" href="/list_user"><i class="far fa-user"></i> <span>User</span></a></li> <li><a class="nav-link" href="{{route('user.index')}}"><i class="far fa-user"></i> <span>User</span></a></li>
<li><a class="nav-link" href="/history_transaction"><i <li><a class="nav-link" href="{{route('transaction.index')}}"><i
class="fas fa-columns"></i><span>Transaction</span></a></li> class="fas fa-columns"></i><span>Transaction</span></a></li>
<li><a class="nav-link" href="/history_refund"><i class="far fa-square"></i> <span>List Refund</span></a> <li><a class="nav-link" href="{{route('refund.index')}}"><i class="far fa-square"></i> <span>List Refund</span></a>
</li> </li>
<li><a class="nav-link" href="/setting"><i class="fa fa-cog"></i> <span>Setting</span></a></li> <li><a class="nav-link" href="{{route('setting.index')}}"><i class="fas fa-cog"></i> <span>Setting</span></a></li>
</ul> </ul>
</aside> </aside>
</div> </div>

View File

@ -5,7 +5,7 @@
<div class="section-header"> <div class="section-header">
<h1>History Refund</h1> <h1>History Refund</h1>
<div class="section-header-breadcrumb"> <div class="section-header-breadcrumb">
<div class="breadcrumb-item active"><a href="#">Dashboard</a></div> <div class="breadcrumb-item active"><a href="{{route('index')}}">Dashboard</a></div>
<div class="breadcrumb-item">Refund</div> <div class="breadcrumb-item">Refund</div>
<div class="breadcrumb-item">History</div> <div class="breadcrumb-item">History</div>
</div> </div>

View File

@ -23,7 +23,7 @@
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Cancel</button> <button type="button" class="btn btn-danger" data-dismiss="modal">Cancel</button>
<a href="/history_refund" class="btn btn-primary mx-1">Accept Refund</a> <a href="{{route('refund.index')}}" class="btn btn-primary mx-1">Accept Refund</a>
</div> </div>
</div> </div>
</div> </div>

View File

@ -5,7 +5,7 @@
<div class="section-header"> <div class="section-header">
<h1>Setting</h1> <h1>Setting</h1>
<div class="section-header-breadcrumb"> <div class="section-header-breadcrumb">
<div class="breadcrumb-item active"><a href="#">Dashboard</a></div> <div class="breadcrumb-item active"><a href="{{route('index')}}">Dashboard</a></div>
<div class="breadcrumb-item">Setting</div> <div class="breadcrumb-item">Setting</div>
</div> </div>
</div> </div>
@ -49,7 +49,7 @@
<td> <td>
<label class="switch"> <label class="switch">
<input type="checkbox" @if ($settings['status'] === 'Active') checked @endif> <input type="checkbox" @if ($settings['status'] === 'Active') checked @endif>
<span class="slider round" data-on-text="Yes" data-off-text="No"></span> <span class="slider round" data-on-text="Yes" data-off-text="No" id="checkOnOf"></span>
</label> </label>
</td> </td>
</tr> </tr>

View File

@ -75,7 +75,7 @@
</div> </div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<a href="/history_transaction" class="btn btn-primary mx-1">Back</a> <a href="{{route('transaction.index')}}" class="btn btn-primary mx-1">Back</a>
</div> </div>
</div> </div>
</div> </div>

View File

@ -18,7 +18,7 @@
</div> </div>
</div> </div>
<div class="row mt-sm-4"> <div class="row mt-sm-4">
<div class="col-12 col-md-12 col-lg-5"> <div class="col-12 col-md-12 col-lg-3">
<div class="row"> <div class="row">
<div class="col-12"> <div class="col-12">
<div class="activities"> <div class="activities">
@ -81,7 +81,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="col-12 col-md-12 col-lg-7"> <div class="col-12 col-md-12 col-lg-9">
<div class="card"> <div class="card">
<div class="card-body"> <div class="card-body">
<div class="card-title pb-2 m-0"> <div class="card-title pb-2 m-0">

View File

@ -5,7 +5,7 @@
<div class="section-header"> <div class="section-header">
<h1>History Transaction</h1> <h1>History Transaction</h1>
<div class="section-header-breadcrumb"> <div class="section-header-breadcrumb">
<div class="breadcrumb-item active"><a href="#">Dashboard</a></div> <div class="breadcrumb-item active"><a href="{{route('index')}}">Dashboard</a></div>
<div class="breadcrumb-item">Transaction</div> <div class="breadcrumb-item">Transaction</div>
<div class="breadcrumb-item">History</div> <div class="breadcrumb-item">History</div>
</div> </div>
@ -58,7 +58,7 @@
Action Action
</button> </button>
<div class="dropdown-menu"> <div class="dropdown-menu">
<a class="dropdown-item" href="/detail_transaction">Details</a> <a class="dropdown-item" href="{{route('transaction.detail')}}">Details</a>
<a class="dropdown-item" href="#" data-toggle="modal" <a class="dropdown-item" href="#" data-toggle="modal"
data-target="#ModalTransaction">Tracking</a> data-target="#ModalTransaction">Tracking</a>
<a class="dropdown-item" href="#">Delete</a> <a class="dropdown-item" href="#">Delete</a>

View File

@ -5,45 +5,43 @@
<div class="section-header"> <div class="section-header">
<h1>Detail Users</h1> <h1>Detail Users</h1>
<div class="section-header-breadcrumb"> <div class="section-header-breadcrumb">
<div class="breadcrumb-item active"><a href="#">Dashboard</a></div> <div class="breadcrumb-item active"><a href="{{route('index')}}">Dashboard</a></div>
<div class="breadcrumb-item">Users</div> <div class="breadcrumb-item">Users</div>
<div class="breadcrumb-item">Details</div> <div class="breadcrumb-item">Details</div>
</div> </div>
</div> </div>
@foreach ($detail_user as $detailUser)
<div class="row justify-content-center"> <div class="row justify-content-center">
<div class="col-md-6"> <div class="col-md-6">
<div class="card"> <div class="card">
<div class="card-body"> <div class="card-body">
<div class="d-flex justify-content-between align-items-center"> <div class="d-flex justify-content-between align-items-center">
<div class="card-title pb-2 m-0">User Id<br /><span>#{{ $detailUser['userId'] }}</span> <div class="card-title pb-2 m-0">User Id<br /><span>#{{ $detail_user->id }}</span>
</div> </div>
</div> </div>
<div class="d-flex flex-column"> <div class="d-flex flex-column">
<img src="/assets/img/avatar/avatar-6.png" <img src="/assets/img/avatar/avatar-6.png" class="rounded-circle shadow align-self-center"
class="rounded-circle shadow align-self-center" style="max-width: 130px;" style="max-width: 130px;" alt="" srcset="">
alt="" srcset="">
<hr class="border border-1 opacity-75 w-100"> <hr class="border border-1 opacity-75 w-100">
<div class="data-field"> <div class="data-field">
<span class="fw-bold text-start">NIK</span> <span class="fw-bold text-start">NIK</span>
<span class="text-muted ">{{ $detailUser['nik'] }}</span> <span class="text-muted ">{{ $detail_user->nik }}</span>
</div> </div>
<div class="data-field"> <div class="data-field">
<span class="fw-bold text-start">Name</span> <span class="fw-bold text-start">Name</span>
<span class="text-muted ">{{ $detailUser['name'] }}</span> <span class="text-muted ">{{ $detail_user->nama }}</span>
</div> </div>
<div class="data-field"> <div class="data-field">
<span class="fw-bold text-start">Gender</span> <span class="fw-bold text-start">Gender</span>
<span class="text-muted ">{{ $detailUser['gender'] }}</span> <span class="text-muted ">{{ $detail_user->gender }}</span>
</div> </div>
<div class="data-field"> {{-- <div class="data-field">
<span class="fw-bold text-start">Religion</span> <span class="fw-bold text-start">Religion</span>
<span class="text-muted ">{{ $detailUser['religion'] }}</span> <span class="text-muted ">{{ $detail_user }}</span>
</div> </div> --}}
<div class="data-field"> {{-- <div class="data-field">
<span class="fw-bold text-start">Blood Type</span> <span class="fw-bold text-start">Blood Type</span>
<span class="text-muted ">{{ $detailUser['bloodType'] }}</span> <span class="text-muted ">{{ $detail_user['bloodType'] }}</span>
</div> </div> --}}
</div> </div>
<hr class="border border-1 opacity-75 w-100"> <hr class="border border-1 opacity-75 w-100">
<div class="d-flex justify-content-between align-items-center"> <div class="d-flex justify-content-between align-items-center">
@ -54,11 +52,11 @@
<div class="data-field"> <div class="data-field">
<span class="fw-bold text-start">Email</span> <span class="fw-bold text-start">Email</span>
<span class="text-muted ">{{ $detailUser['email'] }}</span> <span class="text-muted ">{{ $detail_user->email }}</span>
</div> </div>
<div class="data-field"> <div class="data-field">
<span class="fw-bold text-start">Phone Number</span> <span class="fw-bold text-start">Phone Number</span>
<span class="text-muted ">{{ $detailUser['phoneNumber'] }}</span> <span class="text-muted ">{{ $detail_user->nohp }}</span>
</div> </div>
<hr class="border border-1 opacity-75 w-100"> <hr class="border border-1 opacity-75 w-100">
<div class="d-flex justify-content-between align-items-center"> <div class="d-flex justify-content-between align-items-center">
@ -66,31 +64,30 @@
<h4>Address</h4> <h4>Address</h4>
</div> </div>
</div> </div>
<div class="data-field"> {{-- <div class="data-field">
<span class="fw-bold text-start">Province</span> <span class="fw-bold text-start">Province</span>
<span class="text-muted ">{{ $detailUser['province'] }}</span> <span class="text-muted ">{{ $detail_user['province'] }}</span>
</div> </div>
<div class="data-field"> <div class="data-field">
<span class="fw-bold text-start">City</span> <span class="fw-bold text-start">City</span>
<span class="text-muted ">{{ $detailUser['city'] }}</span> <span class="text-muted ">{{ $detail_user['city'] }}</span>
</div> </div>
<div class="data-field"> <div class="data-field">
<span class="fw-bold text-start">District</span> <span class="fw-bold text-start">District</span>
<span class="text-muted ">{{ $detailUser['district'] }}</span> <span class="text-muted ">{{ $detail_user['district'] }}</span>
</div> </div>
<div class="data-field"> <div class="data-field">
<span class="fw-bold text-start">Village</span> <span class="fw-bold text-start">Village</span>
<span class="text-muted ">{{ $detailUser['village'] }}</span> <span class="text-muted ">{{ $detail_user['village'] }}</span>
</div> </div> --}}
<div class="data-field"> <div class="data-field">
<span class="fw-bold text-start">Detail</span> <span class="fw-bold text-start">Alamat</span>
<span class="text-muted ">{{ $detailUser['detail'] }}</span> <span class="text-muted ">{{ $detail_user->alamat }}</span>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
@endforeach </section>
</div> </div>
@endsection @endsection

View File

@ -5,7 +5,7 @@
<div class="section-header"> <div class="section-header">
<h1>User</h1> <h1>User</h1>
<div class="section-header-breadcrumb"> <div class="section-header-breadcrumb">
<div class="breadcrumb-item active"><a href="#">Dashboard</a></div> <div class="breadcrumb-item active"><a href="{{route('index')}}">Dashboard</a></div>
<div class="breadcrumb-item">User</div> <div class="breadcrumb-item">User</div>
</div> </div>
</div> </div>
@ -17,50 +17,45 @@
<thead> <thead>
<tr> <tr>
<th class="text-center">#</th> <th class="text-center">#</th>
<th>User Id</th> <th>UID</th>
<th>Avatar</th> <th>Foto Profil</th>
<th>Fullname</th> <th>Nama Panjang</th>
<th>Email</th> <th>Email</th>
<th>Gender</th> {{-- <th>Gender</th> --}}
<th>Due Date</th> <th>Tanggal Daftar</th>
<th>Status</th> <th>Status</th>
<th>Action</th> <th>Aksi</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@foreach ($list_users as $list_user) @foreach ($list_users as $list_user)
<tr> <tr>
<td>{{ $list_user['no'] }}</td> <td>{{ $loop->iteration }}</td>
<td>{{ $list_user['userId'] }}</td> <td>{{ $list_user->id }}</td>
<td> <td>
<figure class="avatar mr-2 avatar-xl"> <figure class="avatar mr-2 avatar-xl">
<img src="assets/img/avatar/avatar-6.png" alt="..."> <img src="{{ asset('assets/img/avatar/avatar-6.png') }}" alt="...">
</figure> </figure>
</td> </td>
<td>{{ $list_user['fullname'] }}</td> <td>{{ $list_user->nama }}</td>
<td>{{ $list_user['email'] }}</td> <td>{{ $list_user->email }}</td>
<td>{{ $list_user['gender'] }}</td> <td>{{ $list_user->created_at }}</td>
<td>{{ $list_user['date'] }}</td>
<td> <td>
@php <div
$statusClass = ''; class="badge {{ $list_user->status == 'Finished' ? 'badge-success' : 'badge-danger' }}">
if ($list_user['status'] === 'Finished') { {{ $list_user->status }}</div>
$statusClass = 'badge-success';
} elseif ($list_user['status'] === 'Progress') {
$statusClass = 'badge-danger';
}
@endphp
<div class="badge {{ $statusClass }}">{{ $list_user['status'] }}</div>
</td> </td>
<td> <td>
<div class="btn-group"> <div class="btn-group">
<button type="button" class="btn btn-primary dropdown-toggle" <button type="button" class="btn btn-primary dropdown-toggle"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Action Aksi
</button> </button>
<div class="dropdown-menu"> <div class="dropdown-menu">
<a class="dropdown-item" href="/detail-user">Details</a> <a class="dropdown-item"
<a class="dropdown-item" href="#">Delete</a> href="{{ route('user.show', $list_user->id) }}">Details</a>
<a class="dropdown-item" href="#"
data-id="{{ $list_user->id }}" id="deleteUser">Delete</a>
</div> </div>
</div> </div>
</td> </td>
@ -74,4 +69,60 @@
</div> </div>
</section> </section>
</div> </div>
<script>
$(function() {
$('#table-1').on('click', '#deleteUser', function() {
const csrfToken = $('meta[name="csrf-token"]').attr('content');
let dataId = $(this).data("id");
Swal.fire({
title: 'Hapus data',
text: 'Apakah yakin ingin menghapus data user ini?',
icon: 'info',
confirmButtonText: 'Ya, hapus!',
showDenyButton: true,
denyButtonText: 'Tidak, jangan hapus!',
}).then((result) => {
if (result.isConfirmed) {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': csrfToken
}
});
$.ajax({
'url': "{{ route('user.destroy', ':user') }}".replace(':user',
dataId),
'type': 'DELETE',
processData: false,
contentType: false,
success: function(response) {
Swal.fire({
title: response.status ? 'Berhasil!' :
'Gagal!',
text: response.message,
icon: response.status ? 'success' : 'error',
confirmButtonText: 'OK'
});
},
error: function(error) {
Swal.fire({
title: 'Gagal!',
text: 'Tidak ada data yang dihapus, karena ' +
error,
icon: 'info'
});
}
});
} else if (result.isDenied) {
Swal.fire({
title: 'Gagal!',
text: 'Tidak ada data yang dihapus',
icon: 'info'
});
}
});
})
});
</script>
@endsection @endsection

View File

@ -0,0 +1,5 @@
@extends('errors::minimal')
@section('title', __('Unauthorized'))
@section('code', '401')
@section('message', __('Unauthorized'))

View File

@ -0,0 +1,5 @@
@extends('errors::minimal')
@section('title', __('Payment Required'))
@section('code', '402')
@section('message', __('Payment Required'))

View File

@ -0,0 +1,5 @@
@extends('errors::minimal')
@section('title', __('Forbidden'))
@section('code', '403')
@section('message', __($exception->getMessage() ?: 'Forbidden'))

View File

@ -0,0 +1,5 @@
@extends('errors::minimal')
@section('title', __('Not Found'))
@section('code', '404')
@section('message', __('Not Found'))

View File

@ -0,0 +1,5 @@
@extends('errors::minimal')
@section('title', __('Page Expired'))
@section('code', '419')
@section('message', __('Page Expired'))

View File

@ -0,0 +1,5 @@
@extends('errors::minimal')
@section('title', __('Too Many Requests'))
@section('code', '429')
@section('message', __('Too Many Requests'))

View File

@ -0,0 +1,5 @@
@extends('errors::minimal')
@section('title', __('Server Error'))
@section('code', '500')
@section('message', __('Server Error'))

View File

@ -0,0 +1,5 @@
@extends('errors::minimal')
@section('title', __('Service Unavailable'))
@section('code', '503')
@section('message', __('Service Unavailable'))

View File

@ -0,0 +1,53 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>@yield('title')</title>
<!-- Styles -->
<style>
html, body {
background-color: #fff;
color: #636b6f;
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-weight: 100;
height: 100vh;
margin: 0;
}
.full-height {
height: 100vh;
}
.flex-center {
align-items: center;
display: flex;
justify-content: center;
}
.position-ref {
position: relative;
}
.content {
text-align: center;
}
.title {
font-size: 36px;
padding: 20px;
}
</style>
</head>
<body>
<div class="flex-center position-ref full-height">
<div class="content">
<div class="title">
@yield('message')
</div>
</div>
</div>
</body>
</html>

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
@extends('Admin.layout.main') @extends('admin.layout.main')
@section('content') @section('content')
<!-- Main Content --> <!-- Main Content -->
<div class="main-content"> <div class="main-content">
@ -371,5 +371,5 @@
</div> </div>
</section> </section>
</div> </div>
@include('Admin.transaction.Tracking') @include('admin.transaction.tracking')
@endsection @endsection

View File

@ -0,0 +1,24 @@
@props([
'url',
'color' => 'primary',
'align' => 'center',
])
<table class="action" align="{{ $align }}" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="{{ $align }}">
<table width="100%" border="0" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="{{ $align }}">
<table border="0" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td>
<a href="{{ $url }}" class="button button-{{ $color }}" target="_blank" rel="noopener">{{ $slot }}</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>

View File

@ -0,0 +1,11 @@
<tr>
<td>
<table class="footer" align="center" width="570" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td class="content-cell" align="center">
{{ Illuminate\Mail\Markdown::parse($slot) }}
</td>
</tr>
</table>
</td>
</tr>

View File

@ -0,0 +1,12 @@
@props(['url'])
<tr>
<td class="header">
<a href="{{ $url }}" style="display: inline-block;">
@if (trim($slot) === 'Laravel')
<img src="https://laravel.com/img/notification-logo.png" class="logo" alt="Laravel Logo">
@else
{{ $slot }}
@endif
</a>
</td>
</tr>

View File

@ -0,0 +1,57 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>{{ config('app.name') }}</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="color-scheme" content="light">
<meta name="supported-color-schemes" content="light">
<style>
@media only screen and (max-width: 600px) {
.inner-body {
width: 100% !important;
}
.footer {
width: 100% !important;
}
}
@media only screen and (max-width: 500px) {
.button {
width: 100% !important;
}
}
</style>
</head>
<body>
<table class="wrapper" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="center">
<table class="content" width="100%" cellpadding="0" cellspacing="0" role="presentation">
{{ $header ?? '' }}
<!-- Email Body -->
<tr>
<td class="body" width="100%" cellpadding="0" cellspacing="0" style="border: hidden !important;">
<table class="inner-body" align="center" width="570" cellpadding="0" cellspacing="0" role="presentation">
<!-- Body content -->
<tr>
<td class="content-cell">
{{ Illuminate\Mail\Markdown::parse($slot) }}
{{ $subcopy ?? '' }}
</td>
</tr>
</table>
</td>
</tr>
{{ $footer ?? '' }}
</table>
</td>
</tr>
</table>
</body>
</html>

View File

@ -0,0 +1,27 @@
<x-mail::layout>
{{-- Header --}}
<x-slot:header>
<x-mail::header :url="config('app.url')">
{{ config('app.name') }}
</x-mail::header>
</x-slot:header>
{{-- Body --}}
{{ $slot }}
{{-- Subcopy --}}
@isset($subcopy)
<x-slot:subcopy>
<x-mail::subcopy>
{{ $subcopy }}
</x-mail::subcopy>
</x-slot:subcopy>
@endisset
{{-- Footer --}}
<x-slot:footer>
<x-mail::footer>
© {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.')
</x-mail::footer>
</x-slot:footer>
</x-mail::layout>

View File

@ -0,0 +1,14 @@
<table class="panel" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td class="panel-content">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td class="panel-item">
{{ Illuminate\Mail\Markdown::parse($slot) }}
</td>
</tr>
</table>
</td>
</tr>
</table>

View File

@ -0,0 +1,7 @@
<table class="subcopy" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td>
{{ Illuminate\Mail\Markdown::parse($slot) }}
</td>
</tr>
</table>

View File

@ -0,0 +1,3 @@
<div class="table">
{{ Illuminate\Mail\Markdown::parse($slot) }}
</div>

View File

@ -0,0 +1,290 @@
/* Base */
body,
body *:not(html):not(style):not(br):not(tr):not(code) {
box-sizing: border-box;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif,
'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
position: relative;
}
body {
-webkit-text-size-adjust: none;
background-color: #ffffff;
color: #718096;
height: 100%;
line-height: 1.4;
margin: 0;
padding: 0;
width: 100% !important;
}
p,
ul,
ol,
blockquote {
line-height: 1.4;
text-align: left;
}
a {
color: #3869d4;
}
a img {
border: none;
}
/* Typography */
h1 {
color: #3d4852;
font-size: 18px;
font-weight: bold;
margin-top: 0;
text-align: left;
}
h2 {
font-size: 16px;
font-weight: bold;
margin-top: 0;
text-align: left;
}
h3 {
font-size: 14px;
font-weight: bold;
margin-top: 0;
text-align: left;
}
p {
font-size: 16px;
line-height: 1.5em;
margin-top: 0;
text-align: left;
}
p.sub {
font-size: 12px;
}
img {
max-width: 100%;
}
/* Layout */
.wrapper {
-premailer-cellpadding: 0;
-premailer-cellspacing: 0;
-premailer-width: 100%;
background-color: #edf2f7;
margin: 0;
padding: 0;
width: 100%;
}
.content {
-premailer-cellpadding: 0;
-premailer-cellspacing: 0;
-premailer-width: 100%;
margin: 0;
padding: 0;
width: 100%;
}
/* Header */
.header {
padding: 25px 0;
text-align: center;
}
.header a {
color: #3d4852;
font-size: 19px;
font-weight: bold;
text-decoration: none;
}
/* Logo */
.logo {
height: 75px;
max-height: 75px;
width: 75px;
}
/* Body */
.body {
-premailer-cellpadding: 0;
-premailer-cellspacing: 0;
-premailer-width: 100%;
background-color: #edf2f7;
border-bottom: 1px solid #edf2f7;
border-top: 1px solid #edf2f7;
margin: 0;
padding: 0;
width: 100%;
}
.inner-body {
-premailer-cellpadding: 0;
-premailer-cellspacing: 0;
-premailer-width: 570px;
background-color: #ffffff;
border-color: #e8e5ef;
border-radius: 2px;
border-width: 1px;
box-shadow: 0 2px 0 rgba(0, 0, 150, 0.025), 2px 4px 0 rgba(0, 0, 150, 0.015);
margin: 0 auto;
padding: 0;
width: 570px;
}
/* Subcopy */
.subcopy {
border-top: 1px solid #e8e5ef;
margin-top: 25px;
padding-top: 25px;
}
.subcopy p {
font-size: 14px;
}
/* Footer */
.footer {
-premailer-cellpadding: 0;
-premailer-cellspacing: 0;
-premailer-width: 570px;
margin: 0 auto;
padding: 0;
text-align: center;
width: 570px;
}
.footer p {
color: #b0adc5;
font-size: 12px;
text-align: center;
}
.footer a {
color: #b0adc5;
text-decoration: underline;
}
/* Tables */
.table table {
-premailer-cellpadding: 0;
-premailer-cellspacing: 0;
-premailer-width: 100%;
margin: 30px auto;
width: 100%;
}
.table th {
border-bottom: 1px solid #edeff2;
margin: 0;
padding-bottom: 8px;
}
.table td {
color: #74787e;
font-size: 15px;
line-height: 18px;
margin: 0;
padding: 10px 0;
}
.content-cell {
max-width: 100vw;
padding: 32px;
}
/* Buttons */
.action {
-premailer-cellpadding: 0;
-premailer-cellspacing: 0;
-premailer-width: 100%;
margin: 30px auto;
padding: 0;
text-align: center;
width: 100%;
}
.button {
-webkit-text-size-adjust: none;
border-radius: 4px;
color: #fff;
display: inline-block;
overflow: hidden;
text-decoration: none;
}
.button-blue,
.button-primary {
background-color: #2d3748;
border-bottom: 8px solid #2d3748;
border-left: 18px solid #2d3748;
border-right: 18px solid #2d3748;
border-top: 8px solid #2d3748;
}
.button-green,
.button-success {
background-color: #48bb78;
border-bottom: 8px solid #48bb78;
border-left: 18px solid #48bb78;
border-right: 18px solid #48bb78;
border-top: 8px solid #48bb78;
}
.button-red,
.button-error {
background-color: #e53e3e;
border-bottom: 8px solid #e53e3e;
border-left: 18px solid #e53e3e;
border-right: 18px solid #e53e3e;
border-top: 8px solid #e53e3e;
}
/* Panels */
.panel {
border-left: #2d3748 solid 4px;
margin: 21px 0;
}
.panel-content {
background-color: #edf2f7;
color: #718096;
padding: 16px;
}
.panel-content p {
color: #718096;
}
.panel-item {
padding: 0;
}
.panel-item p:last-of-type {
margin-bottom: 0;
padding-bottom: 0;
}
/* Utilities */
.break-all {
word-break: break-all;
}

View File

@ -0,0 +1 @@
{{ $slot }}: {{ $url }}

View File

@ -0,0 +1 @@
{{ $slot }}

View File

@ -0,0 +1 @@
[{{ $slot }}]({{ $url }})

View File

@ -0,0 +1,9 @@
{!! strip_tags($header ?? '') !!}
{!! strip_tags($slot) !!}
@isset($subcopy)
{!! strip_tags($subcopy) !!}
@endisset
{!! strip_tags($footer ?? '') !!}

View File

@ -0,0 +1,27 @@
<x-mail::layout>
{{-- Header --}}
<x-slot:header>
<x-mail::header :url="config('app.url')">
{{ config('app.name') }}
</x-mail::header>
</x-slot:header>
{{-- Body --}}
{{ $slot }}
{{-- Subcopy --}}
@isset($subcopy)
<x-slot:subcopy>
<x-mail::subcopy>
{{ $subcopy }}
</x-mail::subcopy>
</x-slot:subcopy>
@endisset
{{-- Footer --}}
<x-slot:footer>
<x-mail::footer>
© {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.')
</x-mail::footer>
</x-slot:footer>
</x-mail::layout>

View File

@ -0,0 +1 @@
{{ $slot }}

View File

@ -0,0 +1 @@
{{ $slot }}

View File

@ -0,0 +1 @@
{{ $slot }}

View File

@ -0,0 +1,58 @@
<x-mail::message>
{{-- Greeting --}}
@if (! empty($greeting))
# {{ $greeting }}
@else
@if ($level === 'error')
# @lang('Whoops!')
@else
# @lang('Hello!')
@endif
@endif
{{-- Intro Lines --}}
@foreach ($introLines as $line)
{{ $line }}
@endforeach
{{-- Action Button --}}
@isset($actionText)
<?php
$color = match ($level) {
'success', 'error' => $level,
default => 'primary',
};
?>
<x-mail::button :url="$actionUrl" :color="$color">
{{ $actionText }}
</x-mail::button>
@endisset
{{-- Outro Lines --}}
@foreach ($outroLines as $line)
{{ $line }}
@endforeach
{{-- Salutation --}}
@if (! empty($salutation))
{{ $salutation }}
@else
@lang('Regards'),<br>
{{ config('app.name') }}
@endif
{{-- Subcopy --}}
@isset($actionText)
<x-slot:subcopy>
@lang(
"If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\n".
'into your web browser:',
[
'actionText' => $actionText,
]
) <span class="break-all">[{{ $displayableActionUrl }}]({{ $actionUrl }})</span>
</x-slot:subcopy>
@endisset
</x-mail::message>

View File

@ -1,12 +1,19 @@
<?php <?php
use App\Http\Controllers\RefundController; use App\Http\Controllers\Admin\RefundController;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
use App\Models\Refunds;
use App\Models\Refund; use App\Models\Refund;
use App\Models\Settings;
use App\Models\Setting; use App\Models\Setting;
use App\Models\transaction; use App\Models\Transactions;
use App\Models\Users; use App\Models\Transaction;
use Illuminate\Foundation\Auth\User; use App\Models\User;
use App\Http\Controllers\Admin\UserController;
use App\Http\Controllers\Admin\SettingController;
use App\Http\Controllers\Admin\TransactionController;
// use Illuminate\Foundation\Auth\User;
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@ -25,71 +32,79 @@ Route::get('/welcome', function () {
Route::get('/', function () { Route::get('/', function () {
return view('index',[ return view('index',[
'name'=>'Jilhan Haura', 'name'=>'Jilhan Haura',
"transaction"=>transaction::allTransactions() "transaction"=>Transactions::allTransactions()
]); ]);
}); })->name('index');
Route::get('/detail_transaction', function () { Route::get('/detail_transaction', function () {
return view('Admin/transaction/detail-transaction',[ return view('admin/transaction/detail-transaction',[
'name'=>'Jilhn Haura', 'name'=>'Jilhn Haura',
'detail_transaction' => transaction::allDetailTransactions() 'detail_transaction' => Transactions::allDetailTransactions()
]); ]);
}); })->name('transaction.detail');
Route::get('/history_transaction', function () { // Route::get('/history_transaction', function () {
return view('Admin/transaction/History_Transaction',[ // return view('admin/transaction/History_Transaction',[
'name'=>'Jilhan Haura', // 'name'=>'Jilhan Haura',
"transaction"=> transaction::allTransactions() // "transaction"=> Transactions::allTransactions()
]); // ]);
}); // });
Route::get('/history_refund', function () { // Route::get('/history_refund', function () {
return view('Admin/refund/history-refund',[ // return view('admin/refund/history-refund',[
'name'=>'Jilhan Haura', // 'name'=>'Jilhan Haura',
"history_refund" => Refund::HistoryRefund() // "history_refund" => Refunds::HistoryRefund()
]); // ]);
}); // });
Route::get('/refund',[RefundController::class,'index']); // Route::get('/refund',[RefundController::class,'index']);
Route::get('/detail_refund',function() { Route::get('/detail_refund',function() {
return view('Admin/refund/detail-refund',[ return view('admin/refund/detail-refund',[
'name'=>'Jilhan Haura', 'name'=>'Jilhan Haura',
"detail_refund"=> Refund::DetailRefund() "detail_refund"=> Refunds::DetailRefund()
]); ]);
}); })->name('refund.detail');
Route::get('/next_detail_refund',function() { Route::get('/next_detail_refund',function() {
return view('Admin/refund/next-detail-refund',[ return view('admin/refund/next-detail-refund',[
'name'=>"Jilhan Haura" 'name'=>"Jilhan Haura"
]); ]);
}); });
Route::get('/list_user',function() { // Route::get('/list_user',function() {
return view('Admin/users/list-user',[ // return view('Admin/users/list-user',[
'name'=>"Jilhan Haura", // 'name'=>"Jilhan Haura",
"list_users" => Users::listUsers() // "list_users" => Users::listUsers()
]); // ]);
}); // });
Route::get('/detail-user',function() { // Route::get('/detail-user',function() {
return view('Admin/users/detail-user',[ // return view('Admin/users/detail-user',[
'name'=>"Jilhan Haura", // 'name'=>"Jilhan Haura",
"detail_user" => Users::detailUser() // "detail_user" => Users::detailUser()
]); // ]);
}); // });
Route::get('/profile',function() { Route::get('/profile',function() {
return view('Admin/profile/index',[ return view('admin/profile/index',[
'name'=>"Jilhan Haura", 'name'=>"Jilhan Haura",
]); ]);
}); });
Route::get('/setting',function() { // Route::get('/setting',function() {
return view('Admin/setting/index',[ // return view('admin/setting/index',[
'name'=>"Jilhan Haura", // 'name'=>"Jilhan Haura",
"setting" => Setting:: HistorySetting() // "setting" => Settings:: HistorySetting()
]); // ]);
}); // });
// -------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------
Route::get('/User', function () { // Route::get('/Ini', function () {
return view('User/index',[ // return view('user/index',[
'name'=>'Jilhan Haura', // 'name'=>'Jilhan Haura',
"transaction"=>transaction::allTransactions() // "transaction"=>Transactions::allTransactions()
]); // ]);
}); // });
Route::resource('user', UserController::class);
Route::resource('transaction', TransactionController::class);
Route::resource('setting',SettingController::class);
Route::resource('refund',RefundController::class);

547
sail Normal file
View File

@ -0,0 +1,547 @@
#!/usr/bin/env bash
UNAMEOUT="$(uname -s)"
# Verify operating system is supported...
case "${UNAMEOUT}" in
Linux*) MACHINE=linux;;
Darwin*) MACHINE=mac;;
*) MACHINE="UNKNOWN"
esac
if [ "$MACHINE" == "UNKNOWN" ]; then
echo "Unsupported operating system [$(uname -s)]. Laravel Sail supports macOS, Linux, and Windows (WSL2)." >&2
exit 1
fi
# Determine if stdout is a terminal...
if test -t 1; then
# Determine if colors are supported...
ncolors=$(tput colors)
if test -n "$ncolors" && test "$ncolors" -ge 8; then
BOLD="$(tput bold)"
YELLOW="$(tput setaf 3)"
GREEN="$(tput setaf 2)"
NC="$(tput sgr0)"
fi
fi
# Function that prints the available commands...
function display_help {
echo "Laravel Sail"
echo
echo "${YELLOW}Usage:${NC}" >&2
echo " sail COMMAND [options] [arguments]"
echo
echo "Unknown commands are passed to the docker-compose binary."
echo
echo "${YELLOW}docker-compose Commands:${NC}"
echo " ${GREEN}sail up${NC} Start the application"
echo " ${GREEN}sail up -d${NC} Start the application in the background"
echo " ${GREEN}sail stop${NC} Stop the application"
echo " ${GREEN}sail restart${NC} Restart the application"
echo " ${GREEN}sail ps${NC} Display the status of all containers"
echo
echo "${YELLOW}Artisan Commands:${NC}"
echo " ${GREEN}sail artisan ...${NC} Run an Artisan command"
echo " ${GREEN}sail artisan queue:work${NC}"
echo
echo "${YELLOW}PHP Commands:${NC}"
echo " ${GREEN}sail php ...${NC} Run a snippet of PHP code"
echo " ${GREEN}sail php -v${NC}"
echo
echo "${YELLOW}Composer Commands:${NC}"
echo " ${GREEN}sail composer ...${NC} Run a Composer command"
echo " ${GREEN}sail composer require laravel/sanctum${NC}"
echo
echo "${YELLOW}Node Commands:${NC}"
echo " ${GREEN}sail node ...${NC} Run a Node command"
echo " ${GREEN}sail node --version${NC}"
echo
echo "${YELLOW}NPM Commands:${NC}"
echo " ${GREEN}sail npm ...${NC} Run a npm command"
echo " ${GREEN}sail npx${NC} Run a npx command"
echo " ${GREEN}sail npm run prod${NC}"
echo
echo "${YELLOW}PNPM Commands:${NC}"
echo " ${GREEN}sail pnpm ...${NC} Run a pnpm command"
echo " ${GREEN}sail pnpx${NC} Run a pnpx command"
echo " ${GREEN}sail pnpm run prod${NC}"
echo
echo "${YELLOW}Yarn Commands:${NC}"
echo " ${GREEN}sail yarn ...${NC} Run a Yarn command"
echo " ${GREEN}sail yarn run prod${NC}"
echo
echo "${YELLOW}Database Commands:${NC}"
echo " ${GREEN}sail mysql${NC} Start a MySQL CLI session within the 'mysql' container"
echo " ${GREEN}sail mariadb${NC} Start a MySQL CLI session within the 'mariadb' container"
echo " ${GREEN}sail psql${NC} Start a PostgreSQL CLI session within the 'pgsql' container"
echo " ${GREEN}sail redis${NC} Start a Redis CLI session within the 'redis' container"
echo
echo "${YELLOW}Debugging:${NC}"
echo " ${GREEN}sail debug ...${NC} Run an Artisan command in debug mode"
echo " ${GREEN}sail debug queue:work${NC}"
echo
echo "${YELLOW}Running Tests:${NC}"
echo " ${GREEN}sail test${NC} Run the PHPUnit tests via the Artisan test command"
echo " ${GREEN}sail phpunit ...${NC} Run PHPUnit"
echo " ${GREEN}sail pest ...${NC} Run Pest"
echo " ${GREEN}sail pint ...${NC} Run Pint"
echo " ${GREEN}sail dusk${NC} Run the Dusk tests (Requires the laravel/dusk package)"
echo " ${GREEN}sail dusk:fails${NC} Re-run previously failed Dusk tests (Requires the laravel/dusk package)"
echo
echo "${YELLOW}Container CLI:${NC}"
echo " ${GREEN}sail shell${NC} Start a shell session within the application container"
echo " ${GREEN}sail bash${NC} Alias for 'sail shell'"
echo " ${GREEN}sail root-shell${NC} Start a root shell session within the application container"
echo " ${GREEN}sail root-bash${NC} Alias for 'sail root-shell'"
echo " ${GREEN}sail tinker${NC} Start a new Laravel Tinker session"
echo
echo "${YELLOW}Sharing:${NC}"
echo " ${GREEN}sail share${NC} Share the application publicly via a temporary URL"
echo " ${GREEN}sail open${NC} Open the site in your browser"
echo
echo "${YELLOW}Binaries:${NC}"
echo " ${GREEN}sail bin ...${NC} Run Composer binary scripts from the vendor/bin directory"
echo
echo "${YELLOW}Customization:${NC}"
echo " ${GREEN}sail artisan sail:publish${NC} Publish the Sail configuration files"
echo " ${GREEN}sail build --no-cache${NC} Rebuild all of the Sail containers"
exit 1
}
# Proxy the "help" command...
if [ $# -gt 0 ]; then
if [ "$1" == "help" ] || [ "$1" == "-h" ] || [ "$1" == "-help" ] || [ "$1" == "--help" ]; then
display_help
fi
else
display_help
fi
# Source the ".env" file so Laravel's environment variables are available...
if [ ! -z "$APP_ENV" ] && [ -f ./.env.$APP_ENV ]; then
source ./.env.$APP_ENV;
elif [ -f ./.env ]; then
source ./.env;
fi
# Define environment variables...
export APP_PORT=${APP_PORT:-80}
export APP_SERVICE=${APP_SERVICE:-"laravel.test"}
export DB_PORT=${DB_PORT:-3306}
export WWWUSER=${WWWUSER:-$UID}
export WWWGROUP=${WWWGROUP:-$(id -g)}
export SAIL_FILES=${SAIL_FILES:-""}
export SAIL_SHARE_DASHBOARD=${SAIL_SHARE_DASHBOARD:-4040}
export SAIL_SHARE_SERVER_HOST=${SAIL_SHARE_SERVER_HOST:-"laravel-sail.site"}
export SAIL_SHARE_SERVER_PORT=${SAIL_SHARE_SERVER_PORT:-8080}
export SAIL_SHARE_SUBDOMAIN=${SAIL_SHARE_SUBDOMAIN:-""}
export SAIL_SHARE_DOMAIN=${SAIL_SHARE_DOMAIN:-"$SAIL_SHARE_SERVER_HOST"}
export SAIL_SHARE_SERVER=${SAIL_SHARE_SERVER:-""}
# Function that outputs Sail is not running...
function sail_is_not_running {
echo "${BOLD}Sail is not running.${NC}" >&2
echo "" >&2
echo "${BOLD}You may Sail using the following commands:${NC} './vendor/bin/sail up' or './vendor/bin/sail up -d'" >&2
exit 1
}
# Define Docker Compose command prefix...
docker compose &> /dev/null
if [ $? == 0 ]; then
DOCKER_COMPOSE=(docker compose)
else
DOCKER_COMPOSE=(docker-compose)
fi
if [ -n "$SAIL_FILES" ]; then
# Convert SAIL_FILES to an array...
IFS=':' read -ra SAIL_FILES <<< "$SAIL_FILES"
for FILE in "${SAIL_FILES[@]}"; do
if [ -f "$FILE" ]; then
DOCKER_COMPOSE+=(-f "$FILE")
else
echo "${BOLD}Unable to find Docker Compose file: '${FILE}'${NC}" >&2
exit 1
fi
done
fi
EXEC="yes"
if [ -z "$SAIL_SKIP_CHECKS" ]; then
# Ensure that Docker is running...
if ! docker info > /dev/null 2>&1; then
echo "${BOLD}Docker is not running.${NC}" >&2
exit 1
fi
# Determine if Sail is currently up...
if "${DOCKER_COMPOSE[@]}" ps "$APP_SERVICE" 2>&1 | grep 'Exit\|exited'; then
echo "${BOLD}Shutting down old Sail processes...${NC}" >&2
"${DOCKER_COMPOSE[@]}" down > /dev/null 2>&1
EXEC="no"
elif [ -z "$("${DOCKER_COMPOSE[@]}" ps -q)" ]; then
EXEC="no"
fi
fi
ARGS=()
# Proxy PHP commands to the "php" binary on the application container...
if [ "$1" == "php" ]; then
shift 1
if [ "$EXEC" == "yes" ]; then
ARGS+=(exec -u sail)
[ ! -t 0 ] && ARGS+=(-T)
ARGS+=("$APP_SERVICE" "php" "$@")
else
sail_is_not_running
fi
# Proxy vendor binary commands on the application container...
elif [ "$1" == "bin" ]; then
shift 1
if [ "$EXEC" == "yes" ]; then
ARGS+=(exec -u sail)
[ ! -t 0 ] && ARGS+=(-T)
ARGS+=("$APP_SERVICE" ./vendor/bin/"$@")
else
sail_is_not_running
fi
# Proxy docker-compose commands to the docker-compose binary on the application container...
elif [ "$1" == "docker-compose" ]; then
shift 1
if [ "$EXEC" == "yes" ]; then
ARGS+=(exec -u sail)
[ ! -t 0 ] && ARGS+=(-T)
ARGS+=("$APP_SERVICE" "${DOCKER_COMPOSE[@]}")
else
sail_is_not_running
fi
# Proxy Composer commands to the "composer" binary on the application container...
elif [ "$1" == "composer" ]; then
shift 1
if [ "$EXEC" == "yes" ]; then
ARGS+=(exec -u sail)
[ ! -t 0 ] && ARGS+=(-T)
ARGS+=("$APP_SERVICE" "composer" "$@")
else
sail_is_not_running
fi
# Proxy Artisan commands to the "artisan" binary on the application container...
elif [ "$1" == "artisan" ] || [ "$1" == "art" ] || [ "$1" == "a" ]; then
shift 1
if [ "$EXEC" == "yes" ]; then
ARGS+=(exec -u sail)
[ ! -t 0 ] && ARGS+=(-T)
ARGS+=("$APP_SERVICE" php artisan "$@")
else
sail_is_not_running
fi
# Proxy the "debug" command to the "php artisan" binary on the application container with xdebug enabled...
elif [ "$1" == "debug" ]; then
shift 1
if [ "$EXEC" == "yes" ]; then
ARGS+=(exec -u sail -e XDEBUG_SESSION=1)
[ ! -t 0 ] && ARGS+=(-T)
ARGS+=("$APP_SERVICE" php artisan "$@")
else
sail_is_not_running
fi
# Proxy the "test" command to the "php artisan test" Artisan command...
elif [ "$1" == "test" ]; then
shift 1
if [ "$EXEC" == "yes" ]; then
ARGS+=(exec -u sail)
[ ! -t 0 ] && ARGS+=(-T)
ARGS+=("$APP_SERVICE" php artisan test "$@")
else
sail_is_not_running
fi
# Proxy the "phpunit" command to "php vendor/bin/phpunit"...
elif [ "$1" == "phpunit" ]; then
shift 1
if [ "$EXEC" == "yes" ]; then
ARGS+=(exec -u sail)
[ ! -t 0 ] && ARGS+=(-T)
ARGS+=("$APP_SERVICE" php vendor/bin/phpunit "$@")
else
sail_is_not_running
fi
# Proxy the "pest" command to "php vendor/bin/pest"...
elif [ "$1" == "pest" ]; then
shift 1
if [ "$EXEC" == "yes" ]; then
ARGS+=(exec -u sail)
[ ! -t 0 ] && ARGS+=(-T)
ARGS+=("$APP_SERVICE" php vendor/bin/pest "$@")
else
sail_is_not_running
fi
# Proxy the "pint" command to "php vendor/bin/pint"...
elif [ "$1" == "pint" ]; then
shift 1
if [ "$EXEC" == "yes" ]; then
ARGS+=(exec -u sail)
[ ! -t 0 ] && ARGS+=(-T)
ARGS+=("$APP_SERVICE" php vendor/bin/pint "$@")
else
sail_is_not_running
fi
# Proxy the "dusk" command to the "php artisan dusk" Artisan command...
elif [ "$1" == "dusk" ]; then
shift 1
if [ "$EXEC" == "yes" ]; then
ARGS+=(exec -u sail)
[ ! -t 0 ] && ARGS+=(-T)
ARGS+=(-e "APP_URL=http://${APP_SERVICE}")
ARGS+=(-e "DUSK_DRIVER_URL=http://selenium:4444/wd/hub")
ARGS+=("$APP_SERVICE" php artisan dusk "$@")
else
sail_is_not_running
fi
# Proxy the "dusk:fails" command to the "php artisan dusk:fails" Artisan command...
elif [ "$1" == "dusk:fails" ]; then
shift 1
if [ "$EXEC" == "yes" ]; then
ARGS+=(exec -u sail)
[ ! -t 0 ] && ARGS+=(-T)
ARGS+=(-e "APP_URL=http://${APP_SERVICE}")
ARGS+=(-e "DUSK_DRIVER_URL=http://selenium:4444/wd/hub")
ARGS+=("$APP_SERVICE" php artisan dusk:fails "$@")
else
sail_is_not_running
fi
# Initiate a Laravel Tinker session within the application container...
elif [ "$1" == "tinker" ] ; then
shift 1
if [ "$EXEC" == "yes" ]; then
ARGS+=(exec -u sail)
[ ! -t 0 ] && ARGS+=(-T)
ARGS+=("$APP_SERVICE" php artisan tinker)
else
sail_is_not_running
fi
# Proxy Node commands to the "node" binary on the application container...
elif [ "$1" == "node" ]; then
shift 1
if [ "$EXEC" == "yes" ]; then
ARGS+=(exec -u sail)
[ ! -t 0 ] && ARGS+=(-T)
ARGS+=("$APP_SERVICE" node "$@")
else
sail_is_not_running
fi
# Proxy NPM commands to the "npm" binary on the application container...
elif [ "$1" == "npm" ]; then
shift 1
if [ "$EXEC" == "yes" ]; then
ARGS+=(exec -u sail)
[ ! -t 0 ] && ARGS+=(-T)
ARGS+=("$APP_SERVICE" npm "$@")
else
sail_is_not_running
fi
# Proxy NPX commands to the "npx" binary on the application container...
elif [ "$1" == "npx" ]; then
shift 1
if [ "$EXEC" == "yes" ]; then
ARGS+=(exec -u sail)
[ ! -t 0 ] && ARGS+=(-T)
ARGS+=("$APP_SERVICE" npx "$@")
else
sail_is_not_running
fi
# Proxy PNPM commands to the "pnpm" binary on the application container...
elif [ "$1" == "pnpm" ]; then
shift 1
if [ "$EXEC" == "yes" ]; then
ARGS+=(exec -u sail)
[ ! -t 0 ] && ARGS+=(-T)
ARGS+=("$APP_SERVICE" pnpm "$@")
else
sail_is_not_running
fi
# Proxy PNPX commands to the "pnpx" binary on the application container...
elif [ "$1" == "pnpx" ]; then
shift 1
if [ "$EXEC" == "yes" ]; then
ARGS+=(exec -u sail)
[ ! -t 0 ] && ARGS+=(-T)
ARGS+=("$APP_SERVICE" pnpx "$@")
else
sail_is_not_running
fi
# Proxy YARN commands to the "yarn" binary on the application container...
elif [ "$1" == "yarn" ]; then
shift 1
if [ "$EXEC" == "yes" ]; then
ARGS+=(exec -u sail)
[ ! -t 0 ] && ARGS+=(-T)
ARGS+=("$APP_SERVICE" yarn "$@")
else
sail_is_not_running
fi
# Initiate a MySQL CLI terminal session within the "mysql" container...
elif [ "$1" == "mysql" ]; then
shift 1
if [ "$EXEC" == "yes" ]; then
ARGS+=(exec)
[ ! -t 0 ] && ARGS+=(-T)
ARGS+=(mysql bash -c)
ARGS+=("MYSQL_PWD=\${MYSQL_PASSWORD} mysql -u \${MYSQL_USER} \${MYSQL_DATABASE}")
else
sail_is_not_running
fi
# Initiate a MySQL CLI terminal session within the "mariadb" container...
elif [ "$1" == "mariadb" ]; then
shift 1
if [ "$EXEC" == "yes" ]; then
ARGS+=(exec)
[ ! -t 0 ] && ARGS+=(-T)
ARGS+=(mariadb bash -c)
ARGS+=("MYSQL_PWD=\${MYSQL_PASSWORD} mysql -u \${MYSQL_USER} \${MYSQL_DATABASE}")
else
sail_is_not_running
fi
# Initiate a PostgreSQL CLI terminal session within the "pgsql" container...
elif [ "$1" == "psql" ]; then
shift 1
if [ "$EXEC" == "yes" ]; then
ARGS+=(exec)
[ ! -t 0 ] && ARGS+=(-T)
ARGS+=(pgsql bash -c)
ARGS+=("PGPASSWORD=\${PGPASSWORD} psql -U \${POSTGRES_USER} \${POSTGRES_DB}")
else
sail_is_not_running
fi
# Initiate a Bash shell within the application container...
elif [ "$1" == "shell" ] || [ "$1" == "bash" ]; then
shift 1
if [ "$EXEC" == "yes" ]; then
ARGS+=(exec -u sail)
[ ! -t 0 ] && ARGS+=(-T)
ARGS+=("$APP_SERVICE" bash "$@")
else
sail_is_not_running
fi
# Initiate a root user Bash shell within the application container...
elif [ "$1" == "root-shell" ] || [ "$1" == "root-bash" ]; then
shift 1
if [ "$EXEC" == "yes" ]; then
ARGS+=(exec)
[ ! -t 0 ] && ARGS+=(-T)
ARGS+=("$APP_SERVICE" bash "$@")
else
sail_is_not_running
fi
# Initiate a Redis CLI terminal session within the "redis" container...
elif [ "$1" == "redis" ] ; then
shift 1
if [ "$EXEC" == "yes" ]; then
ARGS+=(exec)
[ ! -t 0 ] && ARGS+=(-T)
ARGS+=(redis redis-cli)
else
sail_is_not_running
fi
# Share the site...
elif [ "$1" == "share" ]; then
shift 1
if [ "$EXEC" == "yes" ]; then
docker run --init --rm -p "$SAIL_SHARE_DASHBOARD":4040 -t beyondcodegmbh/expose-server:latest share http://host.docker.internal:"$APP_PORT" \
--server-host="$SAIL_SHARE_SERVER_HOST" \
--server-port="$SAIL_SHARE_SERVER_PORT" \
--auth="$SAIL_SHARE_TOKEN" \
--server="$SAIL_SHARE_SERVER" \
--subdomain="$SAIL_SHARE_SUBDOMAIN" \
--domain="$SAIL_SHARE_DOMAIN" \
"$@"
exit
else
sail_is_not_running
fi
# Open the site...
elif [ "$1" == "open" ]; then
shift 1
if [ "$EXEC" == "yes" ]; then
open $APP_URL
exit
else
sail_is_not_running
fi
# Pass unknown commands to the "docker-compose" binary...
else
ARGS+=("$@")
fi
# Run Docker Compose with the defined arguments...
"${DOCKER_COMPOSE[@]}" "${ARGS[@]}"