From f5a3f7a18348c7b197b3ccf703dca0ac515e51a8 Mon Sep 17 00:00:00 2001 From: Raihan Surya Date: Thu, 31 Aug 2023 15:22:01 +0700 Subject: [PATCH 01/16] Backend admin --- .env.example | 59 ------------------- .../2023_08_21_031635_create_users_table.php | 27 --------- 2 files changed, 86 deletions(-) delete mode 100644 .env.example delete mode 100644 database/migrations/2023_08_21_031635_create_users_table.php diff --git a/.env.example b/.env.example deleted file mode 100644 index ea0665b..0000000 --- a/.env.example +++ /dev/null @@ -1,59 +0,0 @@ -APP_NAME=Laravel -APP_ENV=local -APP_KEY= -APP_DEBUG=true -APP_URL=http://localhost - -LOG_CHANNEL=stack -LOG_DEPRECATIONS_CHANNEL=null -LOG_LEVEL=debug - -DB_CONNECTION=mysql -DB_HOST=127.0.0.1 -DB_PORT=3306 -DB_DATABASE=laravel -DB_USERNAME=root -DB_PASSWORD= - -BROADCAST_DRIVER=log -CACHE_DRIVER=file -FILESYSTEM_DISK=local -QUEUE_CONNECTION=sync -SESSION_DRIVER=file -SESSION_LIFETIME=120 - -MEMCACHED_HOST=127.0.0.1 - -REDIS_HOST=127.0.0.1 -REDIS_PASSWORD=null -REDIS_PORT=6379 - -MAIL_MAILER=smtp -MAIL_HOST=mailpit -MAIL_PORT=1025 -MAIL_USERNAME=null -MAIL_PASSWORD=null -MAIL_ENCRYPTION=null -MAIL_FROM_ADDRESS="hello@example.com" -MAIL_FROM_NAME="${APP_NAME}" - -AWS_ACCESS_KEY_ID= -AWS_SECRET_ACCESS_KEY= -AWS_DEFAULT_REGION=us-east-1 -AWS_BUCKET= -AWS_USE_PATH_STYLE_ENDPOINT=false - -PUSHER_APP_ID= -PUSHER_APP_KEY= -PUSHER_APP_SECRET= -PUSHER_HOST= -PUSHER_PORT=443 -PUSHER_SCHEME=https -PUSHER_APP_CLUSTER=mt1 - -VITE_APP_NAME="${APP_NAME}" -VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}" -VITE_PUSHER_HOST="${PUSHER_HOST}" -VITE_PUSHER_PORT="${PUSHER_PORT}" -VITE_PUSHER_SCHEME="${PUSHER_SCHEME}" -VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" diff --git a/database/migrations/2023_08_21_031635_create_users_table.php b/database/migrations/2023_08_21_031635_create_users_table.php deleted file mode 100644 index b3bb22f..0000000 --- a/database/migrations/2023_08_21_031635_create_users_table.php +++ /dev/null @@ -1,27 +0,0 @@ -id(); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('users'); - } -}; From 9119c40d1d74302cc4be3d0726b71b954facfe19 Mon Sep 17 00:00:00 2001 From: Raihan Surya Date: Fri, 1 Sep 2023 16:22:38 +0700 Subject: [PATCH 02/16] Update dashboard admin --- .../{ => Admin}/RefundController.php | 26 +- .../{ => Admin}/SettingController.php | 16 +- .../{ => Admin}/TransactionController.php | 23 +- app/Http/Controllers/Admin/UserController.php | 79 + .../ContactController.php} | 20 +- app/Models/Contact.php | 11 + app/Models/Refund.php | 75 +- app/Models/Refunds.php | 80 + app/Models/Setting.php | 45 +- app/Models/Settings.php | 50 + app/Models/Transactions.php | 90 + app/Models/User.php | 46 +- app/Models/Users.php | 55 - app/Models/transaction.php | 88 +- composer.json | 12 +- composer.lock | 1086 +++++-- config/app.php | 2 +- config/auth.php | 4 + config/broadcasting.php | 16 +- config/flare.php | 80 + config/ignition.php | 279 ++ config/image.php | 20 + config/jwt.php | 301 ++ config/tinker.php | 50 + database/factories/RefundFactory.php | 23 - database/factories/SettingFactory.php | 23 - database/factories/TransactionFactory.php | 23 - database/factories/UserFactory.php | 9 +- database/factories/UsersFactory.php | 23 - .../2014_10_12_000000_create_users_table.php | 13 +- ...023_09_01_044300_create_contacts_table.php | 32 + ...9_01_073859_create_transactions_table.php} | 0 database/seeders/DatabaseSeeder.php | 3 +- database/seeders/RefundSeeder.php | 17 - database/seeders/SettingSeeder.php | 17 - database/seeders/TransactionSeeder.php | 17 - database/seeders/UsersSeeder.php | 17 - docker/8.0/Dockerfile | 59 + docker/8.0/php.ini | 7 + docker/8.0/start-container | 17 + docker/8.0/supervisord.conf | 14 + docker/8.1/Dockerfile | 58 + docker/8.1/php.ini | 7 + docker/8.1/start-container | 17 + docker/8.1/supervisord.conf | 14 + docker/8.2/Dockerfile | 59 + docker/8.2/php.ini | 7 + docker/8.2/start-container | 17 + docker/8.2/supervisord.conf | 14 + docker/mysql/create-testing-database.sh | 6 + docker/pgsql/create-testing-database.sql | 2 + public/assets/css/components.css | 2483 +++++++++-------- public/assets/css/style.css | 2 +- resources/views/Admin/layout/main.blade.php | 75 +- .../views/Admin/layout/sidebar.blade.php | 10 +- .../Admin/refund/history-refund.blade.php | 2 +- .../Admin/refund/next-detail-refund.blade.php | 2 +- resources/views/Admin/setting/index.blade.php | 4 +- .../Admin/transaction/Tracking.blade.php | 2 +- .../transaction/detail-transaction.blade.php | 4 +- ...lade.php => history-transaction.blade.php} | 4 +- .../views/Admin/users/detail-user.blade.php | 123 +- .../views/Admin/users/list-user.blade.php | 103 +- resources/views/errors/401.blade.php | 5 + resources/views/errors/402.blade.php | 5 + resources/views/errors/403.blade.php | 5 + resources/views/errors/404.blade.php | 5 + resources/views/errors/419.blade.php | 5 + resources/views/errors/429.blade.php | 5 + resources/views/errors/500.blade.php | 5 + resources/views/errors/503.blade.php | 5 + resources/views/errors/layout.blade.php | 53 + resources/views/errors/minimal.blade.php | 34 + resources/views/index.blade.php | 4 +- .../views/vendor/mail/html/button.blade.php | 24 + .../views/vendor/mail/html/footer.blade.php | 11 + .../views/vendor/mail/html/header.blade.php | 12 + .../views/vendor/mail/html/layout.blade.php | 57 + .../views/vendor/mail/html/message.blade.php | 27 + .../views/vendor/mail/html/panel.blade.php | 14 + .../views/vendor/mail/html/subcopy.blade.php | 7 + .../views/vendor/mail/html/table.blade.php | 3 + .../views/vendor/mail/html/themes/default.css | 290 ++ .../views/vendor/mail/text/button.blade.php | 1 + .../views/vendor/mail/text/footer.blade.php | 1 + .../views/vendor/mail/text/header.blade.php | 1 + .../views/vendor/mail/text/layout.blade.php | 9 + .../views/vendor/mail/text/message.blade.php | 27 + .../views/vendor/mail/text/panel.blade.php | 1 + .../views/vendor/mail/text/subcopy.blade.php | 1 + .../views/vendor/mail/text/table.blade.php | 1 + .../vendor/notifications/email.blade.php | 58 + routes/web.php | 117 +- sail | 547 ++++ 94 files changed, 5145 insertions(+), 2078 deletions(-) rename app/Http/Controllers/{ => Admin}/RefundController.php (55%) rename app/Http/Controllers/{ => Admin}/SettingController.php (70%) rename app/Http/Controllers/{ => Admin}/TransactionController.php (57%) create mode 100644 app/Http/Controllers/Admin/UserController.php rename app/Http/Controllers/{UsersController.php => User/ContactController.php} (61%) create mode 100644 app/Models/Contact.php create mode 100644 app/Models/Refunds.php create mode 100644 app/Models/Settings.php create mode 100644 app/Models/Transactions.php delete mode 100644 app/Models/Users.php create mode 100644 config/flare.php create mode 100644 config/ignition.php create mode 100644 config/image.php create mode 100644 config/jwt.php create mode 100644 config/tinker.php delete mode 100644 database/factories/RefundFactory.php delete mode 100644 database/factories/SettingFactory.php delete mode 100644 database/factories/TransactionFactory.php delete mode 100644 database/factories/UsersFactory.php create mode 100644 database/migrations/2023_09_01_044300_create_contacts_table.php rename database/migrations/{2023_08_16_044542_create_transactions_table.php => 2023_09_01_073859_create_transactions_table.php} (100%) delete mode 100644 database/seeders/RefundSeeder.php delete mode 100644 database/seeders/SettingSeeder.php delete mode 100644 database/seeders/TransactionSeeder.php delete mode 100644 database/seeders/UsersSeeder.php create mode 100644 docker/8.0/Dockerfile create mode 100644 docker/8.0/php.ini create mode 100644 docker/8.0/start-container create mode 100644 docker/8.0/supervisord.conf create mode 100644 docker/8.1/Dockerfile create mode 100644 docker/8.1/php.ini create mode 100644 docker/8.1/start-container create mode 100644 docker/8.1/supervisord.conf create mode 100644 docker/8.2/Dockerfile create mode 100644 docker/8.2/php.ini create mode 100644 docker/8.2/start-container create mode 100644 docker/8.2/supervisord.conf create mode 100644 docker/mysql/create-testing-database.sh create mode 100644 docker/pgsql/create-testing-database.sql rename resources/views/Admin/transaction/{History_Transaction.blade.php => history-transaction.blade.php} (97%) create mode 100644 resources/views/errors/401.blade.php create mode 100644 resources/views/errors/402.blade.php create mode 100644 resources/views/errors/403.blade.php create mode 100644 resources/views/errors/404.blade.php create mode 100644 resources/views/errors/419.blade.php create mode 100644 resources/views/errors/429.blade.php create mode 100644 resources/views/errors/500.blade.php create mode 100644 resources/views/errors/503.blade.php create mode 100644 resources/views/errors/layout.blade.php create mode 100644 resources/views/errors/minimal.blade.php create mode 100644 resources/views/vendor/mail/html/button.blade.php create mode 100644 resources/views/vendor/mail/html/footer.blade.php create mode 100644 resources/views/vendor/mail/html/header.blade.php create mode 100644 resources/views/vendor/mail/html/layout.blade.php create mode 100644 resources/views/vendor/mail/html/message.blade.php create mode 100644 resources/views/vendor/mail/html/panel.blade.php create mode 100644 resources/views/vendor/mail/html/subcopy.blade.php create mode 100644 resources/views/vendor/mail/html/table.blade.php create mode 100644 resources/views/vendor/mail/html/themes/default.css create mode 100644 resources/views/vendor/mail/text/button.blade.php create mode 100644 resources/views/vendor/mail/text/footer.blade.php create mode 100644 resources/views/vendor/mail/text/header.blade.php create mode 100644 resources/views/vendor/mail/text/layout.blade.php create mode 100644 resources/views/vendor/mail/text/message.blade.php create mode 100644 resources/views/vendor/mail/text/panel.blade.php create mode 100644 resources/views/vendor/mail/text/subcopy.blade.php create mode 100644 resources/views/vendor/mail/text/table.blade.php create mode 100644 resources/views/vendor/notifications/email.blade.php create mode 100644 sail diff --git a/app/Http/Controllers/RefundController.php b/app/Http/Controllers/Admin/RefundController.php similarity index 55% rename from app/Http/Controllers/RefundController.php rename to app/Http/Controllers/Admin/RefundController.php index f28ed3c..d12e157 100644 --- a/app/Http/Controllers/RefundController.php +++ b/app/Http/Controllers/Admin/RefundController.php @@ -1,10 +1,11 @@ $refundData]); + // $refundData = Refund::all(); + // 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. */ - public function store(StoreRefundRequest $request) + public function store(Request $request) { // } @@ -38,7 +43,10 @@ class RefundController extends Controller */ 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. */ - public function update(UpdateRefundRequest $request, Refund $refund) + public function update(Request $request, Refund $refund) { // } @@ -64,4 +72,4 @@ class RefundController extends Controller { // } -} \ No newline at end of file +} diff --git a/app/Http/Controllers/SettingController.php b/app/Http/Controllers/Admin/SettingController.php similarity index 70% rename from app/Http/Controllers/SettingController.php rename to app/Http/Controllers/Admin/SettingController.php index 45a8ef7..83196f3 100644 --- a/app/Http/Controllers/SettingController.php +++ b/app/Http/Controllers/Admin/SettingController.php @@ -1,10 +1,11 @@ "Jilhan Haura", + "setting" => Settings:: HistorySetting() + ]); } /** @@ -27,7 +31,7 @@ class SettingController extends Controller /** * 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. */ - public function update(UpdateSettingRequest $request, Setting $setting) + public function update(Request $request, Setting $setting) { // } diff --git a/app/Http/Controllers/TransactionController.php b/app/Http/Controllers/Admin/TransactionController.php similarity index 57% rename from app/Http/Controllers/TransactionController.php rename to app/Http/Controllers/Admin/TransactionController.php index 78f8f90..adcbc44 100644 --- a/app/Http/Controllers/TransactionController.php +++ b/app/Http/Controllers/Admin/TransactionController.php @@ -1,10 +1,11 @@ 'Jilhan Haura', + 'transaction' => Transactions::allTransactions(), + ]); } /** @@ -27,7 +31,7 @@ class TransactionController extends Controller /** * 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) { - // + 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. */ - public function update(UpdatetransactionRequest $request, transaction $transaction) + public function update(Request $request, transaction $transaction) { // } diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php new file mode 100644 index 0000000..e832c7d --- /dev/null +++ b/app/Http/Controllers/Admin/UserController.php @@ -0,0 +1,79 @@ +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 + ]); + } + } +} diff --git a/app/Http/Controllers/UsersController.php b/app/Http/Controllers/User/ContactController.php similarity index 61% rename from app/Http/Controllers/UsersController.php rename to app/Http/Controllers/User/ContactController.php index ed374ce..e9cc1d6 100644 --- a/app/Http/Controllers/UsersController.php +++ b/app/Http/Controllers/User/ContactController.php @@ -1,12 +1,12 @@ "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; - } -} \ No newline at end of file + use HasFactory; +} diff --git a/app/Models/Refunds.php b/app/Models/Refunds.php new file mode 100644 index 0000000..55765a5 --- /dev/null +++ b/app/Models/Refunds.php @@ -0,0 +1,80 @@ +"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; + } +} diff --git a/app/Models/Setting.php b/app/Models/Setting.php index f4249ea..0fe60af 100644 --- a/app/Models/Setting.php +++ b/app/Models/Setting.php @@ -5,46 +5,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; -class Setting +class Setting extends Model { - 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; - } -} \ No newline at end of file + use HasFactory; +} diff --git a/app/Models/Settings.php b/app/Models/Settings.php new file mode 100644 index 0000000..6603b6f --- /dev/null +++ b/app/Models/Settings.php @@ -0,0 +1,50 @@ + "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; + } +} diff --git a/app/Models/Transactions.php b/app/Models/Transactions.php new file mode 100644 index 0000000..b424369 --- /dev/null +++ b/app/Models/Transactions.php @@ -0,0 +1,90 @@ + '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; + } +} diff --git a/app/Models/User.php b/app/Models/User.php index 4d7f70f..275f98f 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -7,6 +7,8 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laravel\Sanctum\HasApiTokens; +use Tymon\JWTAuth\Contracts\JWTSubject; +use Illuminate\Database\Eloquent\Concerns\HasUuids; class User extends Authenticatable { @@ -18,9 +20,16 @@ class User extends Authenticatable * @var array */ protected $fillable = [ - 'name', + 'nama', 'email', 'password', + 'role_id', + 'alamat', + 'foto_ktp', + 'nohp', + 'nik', + 'gender', + 'status', ]; /** @@ -41,5 +50,40 @@ class User extends Authenticatable protected $casts = [ 'email_verified_at' => 'datetime', '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 } diff --git a/app/Models/Users.php b/app/Models/Users.php deleted file mode 100644 index af24443..0000000 --- a/app/Models/Users.php +++ /dev/null @@ -1,55 +0,0 @@ - "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; - } -} \ No newline at end of file diff --git a/app/Models/transaction.php b/app/Models/transaction.php index b7bb85e..b6f6bb0 100644 --- a/app/Models/transaction.php +++ b/app/Models/transaction.php @@ -5,89 +5,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; -class transaction +class Transaction extends Model { - 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; - } -} \ No newline at end of file + use HasFactory; +} diff --git a/composer.json b/composer.json index e1fb449..25f541e 100644 --- a/composer.json +++ b/composer.json @@ -2,14 +2,22 @@ "name": "laravel/laravel", "type": "project", "description": "The skeleton application for the Laravel framework.", - "keywords": ["laravel", "framework"], + "keywords": [ + "laravel", + "framework" + ], "license": "MIT", "require": { "php": "^8.1", "guzzlehttp/guzzle": "^7.2", "laravel/framework": "^10.10", "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": { "fakerphp/faker": "^1.9.1", diff --git a/composer.lock b/composer.lock index 62b62d5..c70835a 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "aa322c53454393ed775cfe4807d54a50", + "content-hash": "051f567ac5cf2db555525f2a0ee59015", "packages": [ { "name": "brick/math", @@ -567,22 +567,22 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.7.0", + "version": "7.8.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5" + "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/fb7566caccf22d74d1ab270de3551f72a58399f5", - "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1110f66a6530a40fe7aea0378fe608ee2b2248f9", + "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0", - "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", + "guzzlehttp/promises": "^1.5.3 || ^2.0.1", + "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -673,7 +673,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.7.0" + "source": "https://github.com/guzzle/guzzle/tree/7.8.0" }, "funding": [ { @@ -689,7 +689,7 @@ "type": "tidelift" } ], - "time": "2023-05-21T14:04:53+00:00" + "time": "2023-08-27T10:20:53+00:00" }, { "name": "guzzlehttp/promises", @@ -776,16 +776,16 @@ }, { "name": "guzzlehttp/psr7", - "version": "2.6.0", + "version": "2.6.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "8bd7c33a0734ae1c5d074360512beb716bef3f77" + "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/8bd7c33a0734ae1c5d074360512beb716bef3f77", - "reference": "8bd7c33a0734ae1c5d074360512beb716bef3f77", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/be45764272e8873c72dbe3d2edcfdfcc3bc9f727", + "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727", "shasum": "" }, "require": { @@ -872,7 +872,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.6.0" + "source": "https://github.com/guzzle/psr7/tree/2.6.1" }, "funding": [ { @@ -888,20 +888,20 @@ "type": "tidelift" } ], - "time": "2023-08-03T15:06:02+00:00" + "time": "2023-08-27T10:13:57+00:00" }, { "name": "guzzlehttp/uri-template", - "version": "v1.0.1", + "version": "v1.0.2", "source": { "type": "git", "url": "https://github.com/guzzle/uri-template.git", - "reference": "b945d74a55a25a949158444f09ec0d3c120d69e2" + "reference": "61bf437fc2197f587f6857d3ff903a24f1731b5d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/uri-template/zipball/b945d74a55a25a949158444f09ec0d3c120d69e2", - "reference": "b945d74a55a25a949158444f09ec0d3c120d69e2", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/61bf437fc2197f587f6857d3ff903a24f1731b5d", + "reference": "61bf437fc2197f587f6857d3ff903a24f1731b5d", "shasum": "" }, "require": { @@ -909,15 +909,11 @@ "symfony/polyfill-php80": "^1.17" }, "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", "phpunit/phpunit": "^8.5.19 || ^9.5.8", "uri-template/tests": "1.0.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, "autoload": { "psr-4": { "GuzzleHttp\\UriTemplate\\": "src" @@ -956,7 +952,7 @@ ], "support": { "issues": "https://github.com/guzzle/uri-template/issues", - "source": "https://github.com/guzzle/uri-template/tree/v1.0.1" + "source": "https://github.com/guzzle/uri-template/tree/v1.0.2" }, "funding": [ { @@ -972,20 +968,104 @@ "type": "tidelift" } ], - "time": "2021-10-07T12:57:01+00:00" + "time": "2023-08-27T10:19:19+00:00" }, { - "name": "laravel/framework", - "version": "v10.19.0", + "name": "intervention/image", + "version": "2.7.2", "source": { "type": "git", - "url": "https://github.com/laravel/framework.git", - "reference": "b8557e4a708a1bd2bc8229bd53feecfa2ac1c6fb" + "url": "https://github.com/Intervention/image.git", + "reference": "04be355f8d6734c826045d02a1079ad658322dad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/b8557e4a708a1bd2bc8229bd53feecfa2ac1c6fb", - "reference": "b8557e4a708a1bd2bc8229bd53feecfa2ac1c6fb", + "url": "https://api.github.com/repos/Intervention/image/zipball/04be355f8d6734c826045d02a1079ad658322dad", + "reference": "04be355f8d6734c826045d02a1079ad658322dad", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "guzzlehttp/psr7": "~1.1 || ^2.0", + "php": ">=5.4.0" + }, + "require-dev": { + "mockery/mockery": "~0.9.2", + "phpunit/phpunit": "^4.8 || ^5.7 || ^7.5.15" + }, + "suggest": { + "ext-gd": "to use GD library based image processing.", + "ext-imagick": "to use Imagick based image processing.", + "intervention/imagecache": "Caching extension for the Intervention Image library" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + }, + "laravel": { + "providers": [ + "Intervention\\Image\\ImageServiceProvider" + ], + "aliases": { + "Image": "Intervention\\Image\\Facades\\Image" + } + } + }, + "autoload": { + "psr-4": { + "Intervention\\Image\\": "src/Intervention/Image" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Oliver Vogel", + "email": "oliver@intervention.io", + "homepage": "https://intervention.io/" + } + ], + "description": "Image handling and manipulation library with support for Laravel integration", + "homepage": "http://image.intervention.io/", + "keywords": [ + "gd", + "image", + "imagick", + "laravel", + "thumbnail", + "watermark" + ], + "support": { + "issues": "https://github.com/Intervention/image/issues", + "source": "https://github.com/Intervention/image/tree/2.7.2" + }, + "funding": [ + { + "url": "https://paypal.me/interventionio", + "type": "custom" + }, + { + "url": "https://github.com/Intervention", + "type": "github" + } + ], + "time": "2022-05-21T17:30:32+00:00" + }, + { + "name": "laravel/framework", + "version": "v10.21.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "96b15c7ac382a9adb4a56d40c640e782d669a112" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/96b15c7ac382a9adb4a56d40c640e782d669a112", + "reference": "96b15c7ac382a9adb4a56d40c640e782d669a112", "shasum": "" }, "require": { @@ -1172,20 +1252,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-08-15T13:42:57+00:00" + "time": "2023-08-29T13:55:56+00:00" }, { "name": "laravel/prompts", - "version": "v0.1.5", + "version": "v0.1.6", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "d880a909df144a4bf5760ebd09aba114f79d9adc" + "reference": "b514c5620e1b3b61221b0024dc88def26d9654f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/d880a909df144a4bf5760ebd09aba114f79d9adc", - "reference": "d880a909df144a4bf5760ebd09aba114f79d9adc", + "url": "https://api.github.com/repos/laravel/prompts/zipball/b514c5620e1b3b61221b0024dc88def26d9654f4", + "reference": "b514c5620e1b3b61221b0024dc88def26d9654f4", "shasum": "" }, "require": { @@ -1218,22 +1298,22 @@ ], "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.1.5" + "source": "https://github.com/laravel/prompts/tree/v0.1.6" }, - "time": "2023-08-15T14:29:44+00:00" + "time": "2023-08-18T13:32:23+00:00" }, { "name": "laravel/sanctum", - "version": "v3.2.5", + "version": "v3.2.6", "source": { "type": "git", "url": "https://github.com/laravel/sanctum.git", - "reference": "8ebda85d59d3c414863a7f4d816ef8302faad876" + "reference": "217e8a2bc5aa6a827ced97fcb76504029d3115d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sanctum/zipball/8ebda85d59d3c414863a7f4d816ef8302faad876", - "reference": "8ebda85d59d3c414863a7f4d816ef8302faad876", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/217e8a2bc5aa6a827ced97fcb76504029d3115d7", + "reference": "217e8a2bc5aa6a827ced97fcb76504029d3115d7", "shasum": "" }, "require": { @@ -1246,9 +1326,9 @@ }, "require-dev": { "mockery/mockery": "^1.0", - "orchestra/testbench": "^7.0|^8.0", + "orchestra/testbench": "^7.28.2|^8.8.3", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^9.6" }, "type": "library", "extra": { @@ -1286,7 +1366,7 @@ "issues": "https://github.com/laravel/sanctum/issues", "source": "https://github.com/laravel/sanctum" }, - "time": "2023-05-01T19:39:51+00:00" + "time": "2023-08-22T13:21:11+00:00" }, { "name": "laravel/serializable-closure", @@ -1350,16 +1430,16 @@ }, { "name": "laravel/tinker", - "version": "v2.8.1", + "version": "v2.8.2", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "04a2d3bd0d650c0764f70bf49d1ee39393e4eb10" + "reference": "b936d415b252b499e8c3b1f795cd4fc20f57e1f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/04a2d3bd0d650c0764f70bf49d1ee39393e4eb10", - "reference": "04a2d3bd0d650c0764f70bf49d1ee39393e4eb10", + "url": "https://api.github.com/repos/laravel/tinker/zipball/b936d415b252b499e8c3b1f795cd4fc20f57e1f3", + "reference": "b936d415b252b499e8c3b1f795cd4fc20f57e1f3", "shasum": "" }, "require": { @@ -1372,6 +1452,7 @@ }, "require-dev": { "mockery/mockery": "~1.3.3|^1.4.2", + "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^8.5.8|^9.3.3" }, "suggest": { @@ -1412,22 +1493,162 @@ ], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.8.1" + "source": "https://github.com/laravel/tinker/tree/v2.8.2" }, - "time": "2023-02-15T16:40:09+00:00" + "time": "2023-08-15T14:27:00+00:00" }, { - "name": "league/commonmark", - "version": "2.4.0", + "name": "lcobucci/clock", + "version": "2.3.0", "source": { "type": "git", - "url": "https://github.com/thephpleague/commonmark.git", - "reference": "d44a24690f16b8c1808bf13b1bd54ae4c63ea048" + "url": "https://github.com/lcobucci/clock.git", + "reference": "c7aadcd6fd97ed9e199114269c0be3f335e38876" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/d44a24690f16b8c1808bf13b1bd54ae4c63ea048", - "reference": "d44a24690f16b8c1808bf13b1bd54ae4c63ea048", + "url": "https://api.github.com/repos/lcobucci/clock/zipball/c7aadcd6fd97ed9e199114269c0be3f335e38876", + "reference": "c7aadcd6fd97ed9e199114269c0be3f335e38876", + "shasum": "" + }, + "require": { + "php": "~8.1.0 || ~8.2.0", + "stella-maris/clock": "^0.1.7" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "infection/infection": "^0.26", + "lcobucci/coding-standard": "^9.0", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-deprecation-rules": "^1.1.1", + "phpstan/phpstan-phpunit": "^1.3.2", + "phpstan/phpstan-strict-rules": "^1.4.4", + "phpunit/phpunit": "^9.5.27" + }, + "type": "library", + "autoload": { + "psr-4": { + "Lcobucci\\Clock\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Luís Cobucci", + "email": "lcobucci@gmail.com" + } + ], + "description": "Yet another clock abstraction", + "support": { + "issues": "https://github.com/lcobucci/clock/issues", + "source": "https://github.com/lcobucci/clock/tree/2.3.0" + }, + "funding": [ + { + "url": "https://github.com/lcobucci", + "type": "github" + }, + { + "url": "https://www.patreon.com/lcobucci", + "type": "patreon" + } + ], + "time": "2022-12-19T14:38:11+00:00" + }, + { + "name": "lcobucci/jwt", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/jwt.git", + "reference": "55564265fddf810504110bd68ca311932324b0e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/55564265fddf810504110bd68ca311932324b0e9", + "reference": "55564265fddf810504110bd68ca311932324b0e9", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "ext-openssl": "*", + "lcobucci/clock": "^2.0", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "infection/infection": "^0.20", + "lcobucci/coding-standard": "^6.0", + "mikey179/vfsstream": "^1.6", + "phpbench/phpbench": "^0.17", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-deprecation-rules": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/php-invoker": "^3.1", + "phpunit/phpunit": "^9.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Lcobucci\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Luís Cobucci", + "email": "lcobucci@gmail.com", + "role": "Developer" + } + ], + "description": "A simple library to work with JSON Web Token and JSON Web Signature", + "keywords": [ + "JWS", + "jwt" + ], + "support": { + "issues": "https://github.com/lcobucci/jwt/issues", + "source": "https://github.com/lcobucci/jwt/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/lcobucci", + "type": "github" + }, + { + "url": "https://www.patreon.com/lcobucci", + "type": "patreon" + } + ], + "time": "2021-09-28T19:18:28+00:00" + }, + { + "name": "league/commonmark", + "version": "2.4.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/3669d6d5f7a47a93c08ddff335e6d945481a1dd5", + "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5", "shasum": "" }, "require": { @@ -1520,7 +1741,7 @@ "type": "tidelift" } ], - "time": "2023-03-24T15:16:10+00:00" + "time": "2023-08-30T16:55:00+00:00" }, { "name": "league/config", @@ -1911,25 +2132,29 @@ }, { "name": "nesbot/carbon", - "version": "2.68.1", + "version": "2.69.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "4f991ed2a403c85efbc4f23eb4030063fdbe01da" + "reference": "4308217830e4ca445583a37d1bf4aff4153fa81c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4f991ed2a403c85efbc4f23eb4030063fdbe01da", - "reference": "4f991ed2a403c85efbc4f23eb4030063fdbe01da", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4308217830e4ca445583a37d1bf4aff4153fa81c", + "reference": "4308217830e4ca445583a37d1bf4aff4153fa81c", "shasum": "" }, "require": { "ext-json": "*", "php": "^7.1.8 || ^8.0", + "psr/clock": "^1.0", "symfony/polyfill-mbstring": "^1.0", "symfony/polyfill-php80": "^1.16", "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" }, + "provide": { + "psr/clock-implementation": "1.0" + }, "require-dev": { "doctrine/dbal": "^2.0 || ^3.1.4", "doctrine/orm": "^2.7", @@ -2009,7 +2234,7 @@ "type": "tidelift" } ], - "time": "2023-06-20T18:29:04+00:00" + "time": "2023-08-03T09:00:52+00:00" }, { "name": "nette/schema", @@ -2302,6 +2527,142 @@ ], "time": "2023-02-08T01:06:31+00:00" }, + { + "name": "paragonie/random_compat", + "version": "v9.99.100", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", + "shasum": "" + }, + "require": { + "php": ">= 7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/random_compat/issues", + "source": "https://github.com/paragonie/random_compat" + }, + "time": "2020-10-15T08:29:30+00:00" + }, + { + "name": "paragonie/sodium_compat", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/paragonie/sodium_compat.git", + "reference": "e592a3e06d1fa0d43988c7c7d9948ca836f644b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/e592a3e06d1fa0d43988c7c7d9948ca836f644b6", + "reference": "e592a3e06d1fa0d43988c7c7d9948ca836f644b6", + "shasum": "" + }, + "require": { + "paragonie/random_compat": ">=1", + "php": "^5.2.4|^5.3|^5.4|^5.5|^5.6|^7|^8" + }, + "require-dev": { + "phpunit/phpunit": "^3|^4|^5|^6|^7|^8|^9" + }, + "suggest": { + "ext-libsodium": "PHP < 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security.", + "ext-sodium": "PHP >= 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security." + }, + "type": "library", + "autoload": { + "files": [ + "autoload.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com" + }, + { + "name": "Frank Denis", + "email": "jedisct1@pureftpd.org" + } + ], + "description": "Pure PHP implementation of libsodium; uses the PHP extension if it exists", + "keywords": [ + "Authentication", + "BLAKE2b", + "ChaCha20", + "ChaCha20-Poly1305", + "Chapoly", + "Curve25519", + "Ed25519", + "EdDSA", + "Edwards-curve Digital Signature Algorithm", + "Elliptic Curve Diffie-Hellman", + "Poly1305", + "Pure-PHP cryptography", + "RFC 7748", + "RFC 8032", + "Salpoly", + "Salsa20", + "X25519", + "XChaCha20-Poly1305", + "XSalsa20-Poly1305", + "Xchacha20", + "Xsalsa20", + "aead", + "cryptography", + "ecdh", + "elliptic curve", + "elliptic curve cryptography", + "encryption", + "libsodium", + "php", + "public-key cryptography", + "secret-key cryptography", + "side-channel resistant" + ], + "support": { + "issues": "https://github.com/paragonie/sodium_compat/issues", + "source": "https://github.com/paragonie/sodium_compat/tree/v1.20.0" + }, + "time": "2023-04-30T00:54:53+00:00" + }, { "name": "phpoption/phpoption", "version": "1.9.1", @@ -2377,6 +2738,54 @@ ], "time": "2023-02-25T19:38:58+00:00" }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, { "name": "psr/container", "version": "2.0.2", @@ -2817,6 +3226,67 @@ }, "time": "2023-07-31T14:32:22+00:00" }, + { + "name": "pusher/pusher-php-server", + "version": "7.2.3", + "source": { + "type": "git", + "url": "https://github.com/pusher/pusher-http-php.git", + "reference": "416e68dd5f640175ad5982131c42a7a666d1d8e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pusher/pusher-http-php/zipball/416e68dd5f640175ad5982131c42a7a666d1d8e9", + "reference": "416e68dd5f640175ad5982131c42a7a666d1d8e9", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "guzzlehttp/guzzle": "^7.2", + "paragonie/sodium_compat": "^1.6", + "php": "^7.3|^8.0", + "psr/log": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "overtrue/phplint": "^2.3", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Pusher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Library for interacting with the Pusher REST API", + "keywords": [ + "events", + "messaging", + "php-pusher-server", + "publish", + "push", + "pusher", + "real time", + "real-time", + "realtime", + "rest", + "trigger" + ], + "support": { + "issues": "https://github.com/pusher/pusher-http-php/issues", + "source": "https://github.com/pusher/pusher-http-php/tree/7.2.3" + }, + "time": "2023-05-17T16:00:06+00:00" + }, { "name": "ralouphie/getallheaders", "version": "3.0.3", @@ -3043,17 +3513,64 @@ "time": "2023-04-15T23:01:58+00:00" }, { - "name": "symfony/console", - "version": "v6.3.2", + "name": "stella-maris/clock", + "version": "0.1.7", "source": { "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "aa5d64ad3f63f2e48964fc81ee45cb318a723898" + "url": "https://github.com/stella-maris-solutions/clock.git", + "reference": "fa23ce16019289a18bb3446fdecd45befcdd94f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/aa5d64ad3f63f2e48964fc81ee45cb318a723898", - "reference": "aa5d64ad3f63f2e48964fc81ee45cb318a723898", + "url": "https://api.github.com/repos/stella-maris-solutions/clock/zipball/fa23ce16019289a18bb3446fdecd45befcdd94f8", + "reference": "fa23ce16019289a18bb3446fdecd45befcdd94f8", + "shasum": "" + }, + "require": { + "php": "^7.0|^8.0", + "psr/clock": "^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "StellaMaris\\Clock\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andreas Heigl", + "role": "Maintainer" + } + ], + "description": "A pre-release of the proposed PSR-20 Clock-Interface", + "homepage": "https://gitlab.com/stella-maris/clock", + "keywords": [ + "clock", + "datetime", + "point in time", + "psr20" + ], + "support": { + "source": "https://github.com/stella-maris-solutions/clock/tree/0.1.7" + }, + "time": "2022-11-25T16:15:06+00:00" + }, + { + "name": "symfony/console", + "version": "v6.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/eca495f2ee845130855ddf1cf18460c38966c8b6", + "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6", "shasum": "" }, "require": { @@ -3114,7 +3631,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.3.2" + "source": "https://github.com/symfony/console/tree/v6.3.4" }, "funding": [ { @@ -3130,7 +3647,7 @@ "type": "tidelift" } ], - "time": "2023-07-19T20:17:28+00:00" + "time": "2023-08-16T10:10:12+00:00" }, { "name": "symfony/css-selector", @@ -3560,16 +4077,16 @@ }, { "name": "symfony/http-foundation", - "version": "v6.3.2", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "43ed99d30f5f466ffa00bdac3f5f7aa9cd7617c3" + "reference": "cac1556fdfdf6719668181974104e6fcfa60e844" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/43ed99d30f5f466ffa00bdac3f5f7aa9cd7617c3", - "reference": "43ed99d30f5f466ffa00bdac3f5f7aa9cd7617c3", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/cac1556fdfdf6719668181974104e6fcfa60e844", + "reference": "cac1556fdfdf6719668181974104e6fcfa60e844", "shasum": "" }, "require": { @@ -3617,7 +4134,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.3.2" + "source": "https://github.com/symfony/http-foundation/tree/v6.3.4" }, "funding": [ { @@ -3633,20 +4150,20 @@ "type": "tidelift" } ], - "time": "2023-07-23T21:58:39+00:00" + "time": "2023-08-22T08:20:46+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.3.3", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "d3b567f0addf695e10b0c6d57564a9bea2e058ee" + "reference": "36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/d3b567f0addf695e10b0c6d57564a9bea2e058ee", - "reference": "d3b567f0addf695e10b0c6d57564a9bea2e058ee", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb", + "reference": "36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb", "shasum": "" }, "require": { @@ -3655,7 +4172,7 @@ "symfony/deprecation-contracts": "^2.5|^3", "symfony/error-handler": "^6.3", "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/http-foundation": "^6.2.7", + "symfony/http-foundation": "^6.3.4", "symfony/polyfill-ctype": "^1.8" }, "conflict": { @@ -3663,7 +4180,7 @@ "symfony/cache": "<5.4", "symfony/config": "<6.1", "symfony/console": "<5.4", - "symfony/dependency-injection": "<6.3", + "symfony/dependency-injection": "<6.3.4", "symfony/doctrine-bridge": "<5.4", "symfony/form": "<5.4", "symfony/http-client": "<5.4", @@ -3687,7 +4204,7 @@ "symfony/config": "^6.1", "symfony/console": "^5.4|^6.0", "symfony/css-selector": "^5.4|^6.0", - "symfony/dependency-injection": "^6.3", + "symfony/dependency-injection": "^6.3.4", "symfony/dom-crawler": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", "symfony/finder": "^5.4|^6.0", @@ -3730,7 +4247,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.3.3" + "source": "https://github.com/symfony/http-kernel/tree/v6.3.4" }, "funding": [ { @@ -3746,7 +4263,7 @@ "type": "tidelift" } ], - "time": "2023-07-31T10:33:00+00:00" + "time": "2023-08-26T13:54:49+00:00" }, { "name": "symfony/mailer", @@ -3914,16 +4431,16 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", "shasum": "" }, "require": { @@ -3938,7 +4455,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3976,7 +4493,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" }, "funding": [ { @@ -3992,20 +4509,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354" + "reference": "875e90aeea2777b6f135677f618529449334a612" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", + "reference": "875e90aeea2777b6f135677f618529449334a612", "shasum": "" }, "require": { @@ -4017,7 +4534,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4057,7 +4574,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" }, "funding": [ { @@ -4073,20 +4590,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "639084e360537a19f9ee352433b84ce831f3d2da" + "reference": "ecaafce9f77234a6a449d29e49267ba10499116d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", - "reference": "639084e360537a19f9ee352433b84ce831f3d2da", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d", + "reference": "ecaafce9f77234a6a449d29e49267ba10499116d", "shasum": "" }, "require": { @@ -4100,7 +4617,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4144,7 +4661,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.0" }, "funding": [ { @@ -4160,20 +4677,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:30:37+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", "shasum": "" }, "require": { @@ -4185,7 +4702,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4228,7 +4745,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" }, "funding": [ { @@ -4244,20 +4761,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + "reference": "42292d99c55abe617799667f454222c54c60e229" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", + "reference": "42292d99c55abe617799667f454222c54c60e229", "shasum": "" }, "require": { @@ -4272,7 +4789,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4311,7 +4828,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" }, "funding": [ { @@ -4327,20 +4844,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-07-28T09:04:16+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" + "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", - "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179", + "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179", "shasum": "" }, "require": { @@ -4349,7 +4866,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4387,7 +4904,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.28.0" }, "funding": [ { @@ -4403,20 +4920,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", "shasum": "" }, "require": { @@ -4425,7 +4942,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4470,7 +4987,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" }, "funding": [ { @@ -4486,20 +5003,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-php83", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "508c652ba3ccf69f8c97f251534f229791b52a57" + "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/508c652ba3ccf69f8c97f251534f229791b52a57", - "reference": "508c652ba3ccf69f8c97f251534f229791b52a57", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", + "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", "shasum": "" }, "require": { @@ -4509,7 +5026,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4522,7 +5039,10 @@ ], "psr-4": { "Symfony\\Polyfill\\Php83\\": "" - } + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4547,7 +5067,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.28.0" }, "funding": [ { @@ -4563,20 +5083,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-08-16T06:22:46+00:00" }, { "name": "symfony/polyfill-uuid", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "f3cf1a645c2734236ed1e2e671e273eeb3586166" + "reference": "9c44518a5aff8da565c8a55dbe85d2769e6f630e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/f3cf1a645c2734236ed1e2e671e273eeb3586166", - "reference": "f3cf1a645c2734236ed1e2e671e273eeb3586166", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/9c44518a5aff8da565c8a55dbe85d2769e6f630e", + "reference": "9c44518a5aff8da565c8a55dbe85d2769e6f630e", "shasum": "" }, "require": { @@ -4591,7 +5111,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4629,7 +5149,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.28.0" }, "funding": [ { @@ -4645,20 +5165,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/process", - "version": "v6.3.2", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "c5ce962db0d9b6e80247ca5eb9af6472bd4d7b5d" + "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/c5ce962db0d9b6e80247ca5eb9af6472bd4d7b5d", - "reference": "c5ce962db0d9b6e80247ca5eb9af6472bd4d7b5d", + "url": "https://api.github.com/repos/symfony/process/zipball/0b5c29118f2e980d455d2e34a5659f4579847c54", + "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54", "shasum": "" }, "require": { @@ -4690,7 +5210,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.3.2" + "source": "https://github.com/symfony/process/tree/v6.3.4" }, "funding": [ { @@ -4706,7 +5226,7 @@ "type": "tidelift" } ], - "time": "2023-07-12T16:00:22+00:00" + "time": "2023-08-07T10:39:22+00:00" }, { "name": "symfony/routing", @@ -5208,16 +5728,16 @@ }, { "name": "symfony/var-dumper", - "version": "v6.3.3", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "77fb4f2927f6991a9843633925d111147449ee7a" + "reference": "2027be14f8ae8eae999ceadebcda5b4909b81d45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/77fb4f2927f6991a9843633925d111147449ee7a", - "reference": "77fb4f2927f6991a9843633925d111147449ee7a", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2027be14f8ae8eae999ceadebcda5b4909b81d45", + "reference": "2027be14f8ae8eae999ceadebcda5b4909b81d45", "shasum": "" }, "require": { @@ -5272,7 +5792,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.3.3" + "source": "https://github.com/symfony/var-dumper/tree/v6.3.4" }, "funding": [ { @@ -5288,7 +5808,56 @@ "type": "tidelift" } ], - "time": "2023-07-31T07:08:24+00:00" + "time": "2023-08-24T14:51:05+00:00" + }, + { + "name": "thiagoalessio/tesseract_ocr", + "version": "2.12.0", + "source": { + "type": "git", + "url": "https://github.com/thiagoalessio/tesseract-ocr-for-php.git", + "reference": "0f10bd7b02bdcba59c4fbd98fbd93a56f93b09b7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thiagoalessio/tesseract-ocr-for-php/zipball/0f10bd7b02bdcba59c4fbd98fbd93a56f93b09b7", + "reference": "0f10bd7b02bdcba59c4fbd98fbd93a56f93b09b7", + "shasum": "" + }, + "require": { + "php": "^5.3 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/php-code-coverage": "^2.2.4 || ^9.0.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "thiagoalessio\\TesseractOCR\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "thiagoalessio", + "email": "thiagoalessio@me.com" + } + ], + "description": "A wrapper to work with Tesseract OCR inside PHP.", + "keywords": [ + "OCR", + "Tesseract", + "text recognition" + ], + "support": { + "irc": "irc://irc.freenode.net/tesseract-ocr-for-php", + "issues": "https://github.com/thiagoalessio/tesseract-ocr-for-php/issues", + "source": "https://github.com/thiagoalessio/tesseract-ocr-for-php" + }, + "time": "2021-06-04T21:21:33+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -5343,6 +5912,90 @@ }, "time": "2023-01-03T09:29:04+00:00" }, + { + "name": "tymon/jwt-auth", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/tymondesigns/jwt-auth.git", + "reference": "b0868a5b00801889a9e0c81a737963d8004e708c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tymondesigns/jwt-auth/zipball/b0868a5b00801889a9e0c81a737963d8004e708c", + "reference": "b0868a5b00801889a9e0c81a737963d8004e708c", + "shasum": "" + }, + "require": { + "illuminate/auth": "^9.0|^10.0", + "illuminate/contracts": "^9.0|^10.0", + "illuminate/http": "^9.0|^10.0", + "illuminate/support": "^9.0|^10.0", + "lcobucci/jwt": "^4.0", + "nesbot/carbon": "^2.0", + "php": "^8.0" + }, + "require-dev": { + "illuminate/console": "^9.0|^10.0", + "illuminate/database": "^9.0|^10.0", + "illuminate/routing": "^9.0|^10.0", + "mockery/mockery": ">=0.9.9", + "phpunit/phpunit": "^9.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "1.0-dev", + "dev-2.x": "2.0-dev" + }, + "laravel": { + "aliases": { + "JWTAuth": "Tymon\\JWTAuth\\Facades\\JWTAuth", + "JWTFactory": "Tymon\\JWTAuth\\Facades\\JWTFactory" + }, + "providers": [ + "Tymon\\JWTAuth\\Providers\\LaravelServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Tymon\\JWTAuth\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sean Tymon", + "email": "tymon148@gmail.com", + "homepage": "https://tymon.xyz", + "role": "Developer" + } + ], + "description": "JSON Web Token Authentication for Laravel and Lumen", + "homepage": "https://github.com/tymondesigns/jwt-auth", + "keywords": [ + "Authentication", + "JSON Web Token", + "auth", + "jwt", + "laravel" + ], + "support": { + "issues": "https://github.com/tymondesigns/jwt-auth/issues", + "source": "https://github.com/tymondesigns/jwt-auth" + }, + "funding": [ + { + "url": "https://www.patreon.com/seantymon", + "type": "patreon" + } + ], + "time": "2023-02-16T16:29:41+00:00" + }, { "name": "vlucas/phpdotenv", "version": "v5.5.0", @@ -5753,16 +6406,16 @@ }, { "name": "laravel/pint", - "version": "v1.11.0", + "version": "v1.12.0", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "88e835bf922b94017778bde89ef8f215e1ea40db" + "reference": "08bcf51e520a5e5aea458fc600ac4869f6934a66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/88e835bf922b94017778bde89ef8f215e1ea40db", - "reference": "88e835bf922b94017778bde89ef8f215e1ea40db", + "url": "https://api.github.com/repos/laravel/pint/zipball/08bcf51e520a5e5aea458fc600ac4869f6934a66", + "reference": "08bcf51e520a5e5aea458fc600ac4869f6934a66", "shasum": "" }, "require": { @@ -5775,7 +6428,7 @@ "require-dev": { "friendsofphp/php-cs-fixer": "^3.21.1", "illuminate/view": "^10.5.1", - "laravel-zero/framework": "^10.1.1", + "laravel-zero/framework": "^10.1.2", "mockery/mockery": "^1.5.1", "nunomaduro/larastan": "^2.5.1", "nunomaduro/termwind": "^1.15.1", @@ -5815,20 +6468,20 @@ "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2023-08-15T15:30:00+00:00" + "time": "2023-08-30T07:53:32+00:00" }, { "name": "laravel/sail", - "version": "v1.23.3", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "e5536ac1df10eacd72a6569dc1b0db49b9ddbb85" + "reference": "c8a621d7b69ab2e568d97a20f837ca733a224006" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/e5536ac1df10eacd72a6569dc1b0db49b9ddbb85", - "reference": "e5536ac1df10eacd72a6569dc1b0db49b9ddbb85", + "url": "https://api.github.com/repos/laravel/sail/zipball/c8a621d7b69ab2e568d97a20f837ca733a224006", + "reference": "c8a621d7b69ab2e568d97a20f837ca733a224006", "shasum": "" }, "require": { @@ -5880,7 +6533,7 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2023-08-14T14:22:21+00:00" + "time": "2023-08-27T14:26:11+00:00" }, { "name": "mockery/mockery", @@ -6232,16 +6885,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "10.1.3", + "version": "10.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "be1fe461fdc917de2a29a452ccf2657d325b443d" + "reference": "cd59bb34756a16ca8253ce9b2909039c227fff71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/be1fe461fdc917de2a29a452ccf2657d325b443d", - "reference": "be1fe461fdc917de2a29a452ccf2657d325b443d", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/cd59bb34756a16ca8253ce9b2909039c227fff71", + "reference": "cd59bb34756a16ca8253ce9b2909039c227fff71", "shasum": "" }, "require": { @@ -6298,7 +6951,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.3" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.4" }, "funding": [ { @@ -6306,20 +6959,20 @@ "type": "github" } ], - "time": "2023-07-26T13:45:28+00:00" + "time": "2023-08-31T14:04:38+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "4.0.2", + "version": "4.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "5647d65443818959172645e7ed999217360654b6" + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/5647d65443818959172645e7ed999217360654b6", - "reference": "5647d65443818959172645e7ed999217360654b6", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", "shasum": "" }, "require": { @@ -6359,7 +7012,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.0.2" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" }, "funding": [ { @@ -6367,7 +7020,7 @@ "type": "github" } ], - "time": "2023-05-07T09:13:23+00:00" + "time": "2023-08-31T06:24:48+00:00" }, { "name": "phpunit/php-invoker", @@ -6434,16 +7087,16 @@ }, { "name": "phpunit/php-text-template", - "version": "3.0.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "9f3d3709577a527025f55bcf0f7ab8052c8bb37d" + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/9f3d3709577a527025f55bcf0f7ab8052c8bb37d", - "reference": "9f3d3709577a527025f55bcf0f7ab8052c8bb37d", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", "shasum": "" }, "require": { @@ -6481,7 +7134,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.0" + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" }, "funding": [ { @@ -6489,7 +7143,7 @@ "type": "github" } ], - "time": "2023-02-03T06:56:46+00:00" + "time": "2023-08-31T14:07:24+00:00" }, { "name": "phpunit/php-timer", @@ -6897,16 +7551,16 @@ }, { "name": "sebastian/complexity", - "version": "3.0.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "e67d240970c9dc7ea7b2123a6d520e334dd61dc6" + "reference": "c70b73893e10757af9c6a48929fa6a333b56a97a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/e67d240970c9dc7ea7b2123a6d520e334dd61dc6", - "reference": "e67d240970c9dc7ea7b2123a6d520e334dd61dc6", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/c70b73893e10757af9c6a48929fa6a333b56a97a", + "reference": "c70b73893e10757af9c6a48929fa6a333b56a97a", "shasum": "" }, "require": { @@ -6942,7 +7596,8 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/3.0.0" + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.0.1" }, "funding": [ { @@ -6950,7 +7605,7 @@ "type": "github" } ], - "time": "2023-02-03T06:59:47+00:00" + "time": "2023-08-31T09:55:53+00:00" }, { "name": "sebastian/diff", @@ -7224,16 +7879,16 @@ }, { "name": "sebastian/lines-of-code", - "version": "2.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "17c4d940ecafb3d15d2cf916f4108f664e28b130" + "reference": "649e40d279e243d985aa8fb6e74dd5bb28dc185d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/17c4d940ecafb3d15d2cf916f4108f664e28b130", - "reference": "17c4d940ecafb3d15d2cf916f4108f664e28b130", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/649e40d279e243d985aa8fb6e74dd5bb28dc185d", + "reference": "649e40d279e243d985aa8fb6e74dd5bb28dc185d", "shasum": "" }, "require": { @@ -7269,7 +7924,8 @@ "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.0" + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.1" }, "funding": [ { @@ -7277,7 +7933,7 @@ "type": "github" } ], - "time": "2023-02-03T07:08:02+00:00" + "time": "2023-08-31T09:25:50+00:00" }, { "name": "sebastian/object-enumerator", @@ -7697,16 +8353,16 @@ }, { "name": "spatie/ignition", - "version": "1.9.0", + "version": "1.10.1", "source": { "type": "git", "url": "https://github.com/spatie/ignition.git", - "reference": "de24ff1e01814d5043bd6eb4ab36a5a852a04973" + "reference": "d92b9a081e99261179b63a858c7a4b01541e7dd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ignition/zipball/de24ff1e01814d5043bd6eb4ab36a5a852a04973", - "reference": "de24ff1e01814d5043bd6eb4ab36a5a852a04973", + "url": "https://api.github.com/repos/spatie/ignition/zipball/d92b9a081e99261179b63a858c7a4b01541e7dd1", + "reference": "d92b9a081e99261179b63a858c7a4b01541e7dd1", "shasum": "" }, "require": { @@ -7776,20 +8432,20 @@ "type": "github" } ], - "time": "2023-06-28T13:24:59+00:00" + "time": "2023-08-21T15:06:37+00:00" }, { "name": "spatie/laravel-ignition", - "version": "2.2.0", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-ignition.git", - "reference": "dd15fbe82ef5392798941efae93c49395a87d943" + "reference": "4ed813d16edb5a1ab0d7f4b1d116c37ee8cdf3c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/dd15fbe82ef5392798941efae93c49395a87d943", - "reference": "dd15fbe82ef5392798941efae93c49395a87d943", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/4ed813d16edb5a1ab0d7f4b1d116c37ee8cdf3c0", + "reference": "4ed813d16edb5a1ab0d7f4b1d116c37ee8cdf3c0", "shasum": "" }, "require": { @@ -7868,7 +8524,7 @@ "type": "github" } ], - "time": "2023-06-28T13:51:52+00:00" + "time": "2023-08-23T06:24:34+00:00" }, { "name": "symfony/yaml", @@ -8002,5 +8658,5 @@ "php": "^8.1" }, "platform-dev": [], - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.3.0" } diff --git a/config/app.php b/config/app.php index 4c231b4..f2b7863 100644 --- a/config/app.php +++ b/config/app.php @@ -109,7 +109,7 @@ return [ | */ - 'faker_locale' => 'en_US', + 'faker_locale' => 'id_ID', /* |-------------------------------------------------------------------------- diff --git a/config/auth.php b/config/auth.php index 9548c15..04998ad 100644 --- a/config/auth.php +++ b/config/auth.php @@ -40,6 +40,10 @@ return [ 'driver' => 'session', 'provider' => 'users', ], + 'api' => [ + 'driver' => 'jwt', + 'provider' => 'users', + ] ], /* diff --git a/config/broadcasting.php b/config/broadcasting.php index 2410485..546f4f2 100644 --- a/config/broadcasting.php +++ b/config/broadcasting.php @@ -35,13 +35,17 @@ return [ 'key' => env('PUSHER_APP_KEY'), 'secret' => env('PUSHER_APP_SECRET'), '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' => [ - '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', + 'cluster' => 'ap1', + 'useTLS' => true, ], 'client_options' => [ // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html diff --git a/config/flare.php b/config/flare.php new file mode 100644 index 0000000..a4896f3 --- /dev/null +++ b/config/flare.php @@ -0,0 +1,80 @@ + 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, +]; diff --git a/config/ignition.php b/config/ignition.php new file mode 100644 index 0000000..a77d972 --- /dev/null +++ b/config/ignition.php @@ -0,0 +1,279 @@ + 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//Code", "C:\Users\\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, + ], +]; diff --git a/config/image.php b/config/image.php new file mode 100644 index 0000000..2b1d2c3 --- /dev/null +++ b/config/image.php @@ -0,0 +1,20 @@ + 'gd' + +]; diff --git a/config/jwt.php b/config/jwt.php new file mode 100644 index 0000000..f83234d --- /dev/null +++ b/config/jwt.php @@ -0,0 +1,301 @@ + + * + * 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, + + ], + +]; diff --git a/config/tinker.php b/config/tinker.php new file mode 100644 index 0000000..c187942 --- /dev/null +++ b/config/tinker.php @@ -0,0 +1,50 @@ + [ + // 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', + ], + +]; diff --git a/database/factories/RefundFactory.php b/database/factories/RefundFactory.php deleted file mode 100644 index 1957399..0000000 --- a/database/factories/RefundFactory.php +++ /dev/null @@ -1,23 +0,0 @@ - - */ -class RefundFactory extends Factory -{ - /** - * Define the model's default state. - * - * @return array - */ - public function definition(): array - { - return [ - // - ]; - } -} diff --git a/database/factories/SettingFactory.php b/database/factories/SettingFactory.php deleted file mode 100644 index eb11ef9..0000000 --- a/database/factories/SettingFactory.php +++ /dev/null @@ -1,23 +0,0 @@ - - */ -class SettingFactory extends Factory -{ - /** - * Define the model's default state. - * - * @return array - */ - public function definition(): array - { - return [ - // - ]; - } -} diff --git a/database/factories/TransactionFactory.php b/database/factories/TransactionFactory.php deleted file mode 100644 index 4a159bf..0000000 --- a/database/factories/TransactionFactory.php +++ /dev/null @@ -1,23 +0,0 @@ - - */ -class TransactionFactory extends Factory -{ - /** - * Define the model's default state. - * - * @return array - */ - public function definition(): array - { - return [ - // - ]; - } -} diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php index a6ecc0a..96256d6 100644 --- a/database/factories/UserFactory.php +++ b/database/factories/UserFactory.php @@ -18,11 +18,18 @@ class UserFactory extends Factory public function definition(): array { return [ - 'name' => fake()->name(), + 'id' => Str::uuid(), + 'nama' => $this->faker->name, 'email' => fake()->unique()->safeEmail(), 'email_verified_at' => now(), 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password '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']), ]; } diff --git a/database/factories/UsersFactory.php b/database/factories/UsersFactory.php deleted file mode 100644 index 8ffe10c..0000000 --- a/database/factories/UsersFactory.php +++ /dev/null @@ -1,23 +0,0 @@ - - */ -class UsersFactory extends Factory -{ - /** - * Define the model's default state. - * - * @return array - */ - public function definition(): array - { - return [ - // - ]; - } -} diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index 444fafb..2c435f8 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -12,11 +12,18 @@ return new class extends Migration public function up(): void { Schema::create('users', function (Blueprint $table) { - $table->id(); - $table->string('name'); - $table->string('email')->unique(); + $table->uuid('id')->primary; + $table->string('nama',255); + $table->string('email',50)->unique(); $table->timestamp('email_verified_at')->nullable(); $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->timestamps(); }); diff --git a/database/migrations/2023_09_01_044300_create_contacts_table.php b/database/migrations/2023_09_01_044300_create_contacts_table.php new file mode 100644 index 0000000..94371bd --- /dev/null +++ b/database/migrations/2023_09_01_044300_create_contacts_table.php @@ -0,0 +1,32 @@ +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'); + } +}; diff --git a/database/migrations/2023_08_16_044542_create_transactions_table.php b/database/migrations/2023_09_01_073859_create_transactions_table.php similarity index 100% rename from database/migrations/2023_08_16_044542_create_transactions_table.php rename to database/migrations/2023_09_01_073859_create_transactions_table.php diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index a9f4519..2218bde 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -4,6 +4,7 @@ namespace Database\Seeders; // use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; +use App\Models\User; class DatabaseSeeder extends Seeder { @@ -12,7 +13,7 @@ class DatabaseSeeder extends Seeder */ public function run(): void { - // \App\Models\User::factory(10)->create(); + User::factory(100)->create(); // \App\Models\User::factory()->create([ // 'name' => 'Test User', diff --git a/database/seeders/RefundSeeder.php b/database/seeders/RefundSeeder.php deleted file mode 100644 index 1d4f47b..0000000 --- a/database/seeders/RefundSeeder.php +++ /dev/null @@ -1,17 +0,0 @@ - /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"] diff --git a/docker/8.0/php.ini b/docker/8.0/php.ini new file mode 100644 index 0000000..39dcbca --- /dev/null +++ b/docker/8.0/php.ini @@ -0,0 +1,7 @@ +[PHP] +post_max_size = 100M +upload_max_filesize = 100M +variables_order = EGPCS + +[opcache] +opcache.enable_cli=1 diff --git a/docker/8.0/start-container b/docker/8.0/start-container new file mode 100644 index 0000000..b864399 --- /dev/null +++ b/docker/8.0/start-container @@ -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 diff --git a/docker/8.0/supervisord.conf b/docker/8.0/supervisord.conf new file mode 100644 index 0000000..9d28479 --- /dev/null +++ b/docker/8.0/supervisord.conf @@ -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 diff --git a/docker/8.1/Dockerfile b/docker/8.1/Dockerfile new file mode 100644 index 0000000..043ddb4 --- /dev/null +++ b/docker/8.1/Dockerfile @@ -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"] diff --git a/docker/8.1/php.ini b/docker/8.1/php.ini new file mode 100644 index 0000000..39dcbca --- /dev/null +++ b/docker/8.1/php.ini @@ -0,0 +1,7 @@ +[PHP] +post_max_size = 100M +upload_max_filesize = 100M +variables_order = EGPCS + +[opcache] +opcache.enable_cli=1 diff --git a/docker/8.1/start-container b/docker/8.1/start-container new file mode 100644 index 0000000..b864399 --- /dev/null +++ b/docker/8.1/start-container @@ -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 diff --git a/docker/8.1/supervisord.conf b/docker/8.1/supervisord.conf new file mode 100644 index 0000000..9d28479 --- /dev/null +++ b/docker/8.1/supervisord.conf @@ -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 diff --git a/docker/8.2/Dockerfile b/docker/8.2/Dockerfile new file mode 100644 index 0000000..56cdb24 --- /dev/null +++ b/docker/8.2/Dockerfile @@ -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"] diff --git a/docker/8.2/php.ini b/docker/8.2/php.ini new file mode 100644 index 0000000..39dcbca --- /dev/null +++ b/docker/8.2/php.ini @@ -0,0 +1,7 @@ +[PHP] +post_max_size = 100M +upload_max_filesize = 100M +variables_order = EGPCS + +[opcache] +opcache.enable_cli=1 diff --git a/docker/8.2/start-container b/docker/8.2/start-container new file mode 100644 index 0000000..b864399 --- /dev/null +++ b/docker/8.2/start-container @@ -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 diff --git a/docker/8.2/supervisord.conf b/docker/8.2/supervisord.conf new file mode 100644 index 0000000..9d28479 --- /dev/null +++ b/docker/8.2/supervisord.conf @@ -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 diff --git a/docker/mysql/create-testing-database.sh b/docker/mysql/create-testing-database.sh new file mode 100644 index 0000000..aeb1826 --- /dev/null +++ b/docker/mysql/create-testing-database.sh @@ -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 diff --git a/docker/pgsql/create-testing-database.sql b/docker/pgsql/create-testing-database.sql new file mode 100644 index 0000000..d84dc07 --- /dev/null +++ b/docker/pgsql/create-testing-database.sql @@ -0,0 +1,2 @@ +SELECT 'CREATE DATABASE testing' +WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'testing')\gexec diff --git a/public/assets/css/components.css b/public/assets/css/components.css index e011983..3eb1ff6 100644 --- a/public/assets/css/components.css +++ b/public/assets/css/components.css @@ -49,1846 +49,1909 @@ */ /* 1.1 Article */ .article { - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); - background-color: #fff; - border-radius: 3px; - border: none; - position: relative; - margin-bottom: 30px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); + background-color: #fff; + border-radius: 3px; + border: none; + position: relative; + margin-bottom: 30px; } .article .article-header { - height: 170px; - position: relative; - overflow: hidden; + height: 170px; + position: relative; + overflow: hidden; } .article .article-header .article-image { - background-color: #fbfbfb; - background-position: center; - background-size: cover; - background-repeat: no-repeat; - width: 100%; - height: 100%; - z-index: -1; + background-color: #fbfbfb; + background-position: center; + background-size: cover; + background-repeat: no-repeat; + width: 100%; + height: 100%; + z-index: -1; } .article .article-header .article-title { - position: absolute; - bottom: 0; - left: 0; - 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%); - padding: 10px; + position: absolute; + bottom: 0; + left: 0; + 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% + ); + padding: 10px; } .article .article-header .article-title h2 { - font-size: 16px; - line-height: 24px; + font-size: 16px; + line-height: 24px; } .article .article-header .article-title h2 a { - font-weight: 700; - text-decoration: none; - color: #fff; + font-weight: 700; + text-decoration: none; + color: #fff; } .article .article-details { - background-color: #fff; - padding: 20px; - line-height: 24px; + background-color: #fff; + padding: 20px; + line-height: 24px; } .article .article-details .article-cta { - text-align: center; + text-align: center; } .article .article-header .article-badge { - position: absolute; - bottom: 10px; - left: 10px; + position: absolute; + bottom: 10px; + left: 10px; } .article .article-header .article-badge .article-badge-item { - padding: 7px 15px; - font-weight: 600; - color: #fff; - border-radius: 30px; - font-size: 12px; + padding: 7px 15px; + font-weight: 600; + color: #fff; + border-radius: 30px; + 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 { - margin-right: 3px; +.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; } .article.article-style-b .article-details .article-title { - margin-bottom: 10px; + margin-bottom: 10px; } .article.article-style-b .article-details .article-title h2 { - line-height: 22px; + line-height: 22px; } .article.article-style-b .article-details .article-title a { - font-size: 16px; - font-weight: 600; + font-size: 16px; + font-weight: 600; } .article.article-style-b .article-details p { - color: #34395e; + color: #34395e; } .article.article-style-b .article-details .article-cta { - text-align: right; + text-align: right; } .article.article-style-c .article-header { - height: 233px; + height: 233px; } .article.article-style-c .article-details .article-category { - text-transform: uppercase; - margin-bottom: 5px; - letter-spacing: 1px; - color: #34395e; + text-transform: uppercase; + margin-bottom: 5px; + letter-spacing: 1px; + color: #34395e; } .article.article-style-c .article-details .article-category a { - font-size: 10px; - color: #34395e; - font-weight: 700; + font-size: 10px; + color: #34395e; + font-weight: 700; } .article.article-style-c .article-details .article-title { - margin-bottom: 10px; + margin-bottom: 10px; } .article.article-style-c .article-details .article-title h2 { - line-height: 22px; + line-height: 22px; } .article.article-style-c .article-details .article-title a { - font-size: 16px; - font-weight: 600; + font-size: 16px; + font-weight: 600; } .article.article-style-c .article-details p { - color: #34395e; + color: #34395e; } .article.article-style-c .article-user { - display: inline-block; - width: 100%; - margin-top: 20px; + display: inline-block; + width: 100%; + margin-top: 20px; } .article.article-style-c .article-user img { - border-radius: 50%; - float: left; - width: 45px; - margin-right: 15px; + border-radius: 50%; + float: left; + width: 45px; + margin-right: 15px; } .article.article-style-c .article-user .user-detail-name { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; } .article.article-style-c .article-user .user-detail-name a { - font-weight: 700; + font-weight: 700; } @media (max-width: 575.98px) { - .article .article-style-c .article-header { - height: 225px; - } + .article .article-style-c .article-header { + height: 225px; + } } @media (min-width: 768px) and (max-width: 991.98px) { - .article { - margin-bottom: 40px; - } - .article .article-header { - height: 195px !important; - } - .article.article-style-c .article-header { - height: 155px; - } + .article { + margin-bottom: 40px; + } + .article .article-header { + height: 195px !important; + } + .article.article-style-c .article-header { + height: 155px; + } } @media (max-width: 1024px) { - .article.article-style-c .article-header { - height: 216px; - } - .article .article-header { - height: 155px; - } + .article.article-style-c .article-header { + height: 216px; + } + .article .article-header { + height: 155px; + } } /* 1.2 Author */ .author-box .author-box-left { - float: left; - text-align: center; - padding-left: 5px; + float: left; + text-align: center; + padding-left: 5px; } .author-box .author-box-left .btn { - padding: 5px 15px; - font-size: 12px; - border-radius: 30px; + padding: 5px 15px; + font-size: 12px; + border-radius: 30px; } .author-box .author-box-picture { - width: 100px; - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); + width: 100px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); } .author-box .author-box-details { - margin-left: 135px; + margin-left: 135px; } .author-box .author-box-name { - font-size: 18px; + font-size: 18px; } .author-box .author-box-name a { - font-weight: 600; + font-weight: 600; } .author-box .author-box-job { - font-weight: 600; - letter-spacing: 0.5px; - font-size: 12px; - color: #34395e; + font-weight: 600; + letter-spacing: 0.5px; + font-size: 12px; + color: #34395e; } .author-box .author-box-description { - line-height: 26px; - margin-top: 15px; + line-height: 26px; + margin-top: 15px; } @media (max-width: 575.98px) { - .author-box .author-box-left { - float: none; - } - .author-box .author-box-details { - margin-left: 0; - margin-top: 15px; - text-align: center; - } + .author-box .author-box-left { + float: none; + } + .author-box .author-box-details { + margin-left: 0; + margin-top: 15px; + text-align: center; + } } /* 1.3 Avatar Item */ .avatar-item { - position: relative; - margin-bottom: 20px; + position: relative; + margin-bottom: 20px; } .avatar-item img { - border-radius: 50%; + border-radius: 50%; } .avatar-item .avatar-badge { - position: absolute; - bottom: -5px; - right: 0; - background-color: #fff; - color: #000; - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); - border-radius: 50%; - text-align: center; - line-height: 25px; - width: 25px; - height: 25px; + position: absolute; + bottom: -5px; + right: 0; + background-color: #fff; + color: #000; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); + border-radius: 50%; + text-align: center; + line-height: 25px; + width: 25px; + height: 25px; } /* 1.4 Browser */ .browser { - display: inline-block; - width: 60px; - height: 60px; - background-size: 100%; + display: inline-block; + width: 60px; + height: 60px; + background-size: 100%; } .browser.browser-chrome { - background-image: url("../img/browsers/chrome.png"); + background-image: url("../img/browsers/chrome.png"); } .browser.browser-firefox { - background-image: url("../img/browsers/firefox.png"); + background-image: url("../img/browsers/firefox.png"); } .browser.browser-internet-explorer { - background-image: url("../img/browsers/internet-explorer.png"); + background-image: url("../img/browsers/internet-explorer.png"); } .browser.browser-opera { - background-image: url("../img/browsers/opera.png"); + background-image: url("../img/browsers/opera.png"); } .browser.browser-safari { - background-image: url("../img/browsers/safari.png"); + background-image: url("../img/browsers/safari.png"); } /* 1.5 Chat */ .chat-box .chat-content { - background-color: #f9f9f9 !important; - height: 300px; - overflow: hidden; - padding-top: 25px !important; + background-color: #f9f9f9 !important; + height: 300px; + overflow: hidden; + padding-top: 25px !important; } .chat-box .chat-content .chat-item { - display: inline-block; - width: 100%; - margin-bottom: 25px; + display: inline-block; + width: 100%; + margin-bottom: 25px; } .chat-box .chat-content .chat-item.chat-right img { - float: right; + float: right; } .chat-box .chat-content .chat-item.chat-right .chat-details { - margin-left: 0; - margin-right: 70px; - text-align: right; + margin-left: 0; + margin-right: 70px; + text-align: right; } .chat-box .chat-content .chat-item.chat-right .chat-details .chat-text { - text-align: left; - background-color: #6777ef; - color: #fff; + text-align: left; + background-color: #6777ef; + color: #fff; } .chat-box .chat-content .chat-item > img { - float: left; - width: 50px; - border-radius: 50%; + float: left; + width: 50px; + border-radius: 50%; } .chat-box .chat-content .chat-item .chat-details { - margin-left: 70px; + margin-left: 70px; } .chat-box .chat-content .chat-item .chat-details .chat-text { - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); - background-color: #fff; - padding: 10px 15px; - border-radius: 3px; - width: auto; - display: inline-block; - font-size: 12px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); + background-color: #fff; + padding: 10px 15px; + border-radius: 3px; + width: auto; + display: inline-block; + font-size: 12px; } .chat-box .chat-content .chat-item .chat-details .chat-text img { - max-width: 100%; - margin-bottom: 10px; + max-width: 100%; + margin-bottom: 10px; } .chat-box .chat-content .chat-item.chat-typing .chat-details .chat-text { - background-image: url("../img/typing.svg"); - height: 40px; - width: 60px; - background-position: center; - background-size: 60%; - background-repeat: no-repeat; + background-image: url("../img/typing.svg"); + height: 40px; + width: 60px; + background-position: center; + background-size: 60%; + background-repeat: no-repeat; } .chat-box .chat-content .chat-item .chat-details .chat-time { - margin-top: 5px; - font-size: 12px; - font-weight: 500; - opacity: 0.6; + margin-top: 5px; + font-size: 12px; + font-weight: 500; + opacity: 0.6; } .chat-box .chat-form { - padding: 0; - position: relative; + padding: 0; + position: relative; } .chat-box .chat-form .form-control { - border: none; - padding: 15px; - height: 50px; - padding-right: 70px; - font-size: 13px; - font-weight: 500; - box-shadow: none; - outline: none; + border: none; + padding: 15px; + height: 50px; + padding-right: 70px; + font-size: 13px; + font-weight: 500; + box-shadow: none; + outline: none; } .chat-box .chat-form .btn { - padding: 0; - width: 40px; - height: 40px; - border-radius: 50%; - position: absolute; - top: 50%; - right: -5px; - -webkit-transform: translate(-50%, -50%); - transform: translate(-50%, -50%); - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); + padding: 0; + width: 40px; + height: 40px; + border-radius: 50%; + position: absolute; + top: 50%; + right: -5px; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); } .chat-box .chat-form .btn i { - margin-left: 0; + margin-left: 0; } /* 1.6 Chocolat */ .chocolat-wrapper { - z-index: 890; + z-index: 890; } .chocolat-overlay { - background-color: #000; + background-color: #000; } /* 1.7 Custom Tab */ [data-tab-group] { - display: none; + display: none; } [data-tab-group].active { - display: block; + display: block; } /* 1.8 DataTables */ table.dataTable { - border-collapse: collapse !important; + border-collapse: collapse !important; } -table.dataTable thead th, table.dataTable thead td { - border-bottom: 1px solid #ddd !important; +table.dataTable thead th, +table.dataTable thead td { + border-bottom: 1px solid #ddd !important; } table.dataTable.no-footer { - border-bottom: 1px solid #ddd !important; + border-bottom: 1px solid #ddd !important; } .dataTables_wrapper { - padding: 0 !important; - font-size: 13px !important; + padding: 0 !important; + font-size: 13px !important; } .dataTables_wrapper .dataTables_paginate .paginate_button { - padding: 0 !important; - margin: 0 !important; - float: left; + padding: 0 !important; + margin: 0 !important; + float: left; } div.dataTables_wrapper div.dataTables_processing { - font-size: 0 !important; - background-image: url("../img/spinner.svg") !important; - background-color: #fff; - background-size: 100%; - width: 50px !important; - height: 50px; - border: none; - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); - top: 50% !important; - left: 50% !important; - -webkit-transform: translate(-50%, -50%) !important; - transform: translate(-50%, -50%) !important; - margin: 0 !important; - opacity: 1 !important; + font-size: 0 !important; + background-image: url("../img/spinner.svg") !important; + background-color: #fff; + background-size: 100%; + width: 50px !important; + height: 50px; + border: none; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); + top: 50% !important; + left: 50% !important; + -webkit-transform: translate(-50%, -50%) !important; + transform: translate(-50%, -50%) !important; + margin: 0 !important; + opacity: 1 !important; } /* 1.9 Date Range Picker */ .daterangepicker.dropdown-menu { - width: auto; + width: auto; } .daterangepicker .input-mini { - padding-left: 28px !important; + padding-left: 28px !important; } -.daterangepicker .calendar th, .daterangepicker .calendar td { - padding: 5px; - font-size: 12px; +.daterangepicker .calendar th, +.daterangepicker .calendar td { + padding: 5px; + font-size: 12px; } .ranges li { - color: #6777ef; + color: #6777ef; } -.ranges li:hover, .ranges li.active { - background-color: #6777ef; +.ranges li:hover, +.ranges li.active { + background-color: #6777ef; } -.daterangepicker td.active, .daterangepicker td.active:hover { - background-color: #6777ef; +.daterangepicker td.active, +.daterangepicker td.active:hover { + background-color: #6777ef; } /* 1.10 Dropzone */ .dropzone { - border: 2px dashed #6777ef; - min-height: 240px; - text-align: center; + border: 2px dashed #6777ef; + min-height: 240px; + text-align: center; } .dropzone .dz-message { - font-size: 24px; - color: #34395e; - margin: 3.4em; + font-size: 24px; + color: #34395e; + margin: 3.4em; } .dropzone .dz-preview .dz-details { - padding: 2.2em 1em; + padding: 2.2em 1em; } .dropzone .dz-preview .dz-image { - border-radius: 3px; + border-radius: 3px; } @media (max-width: 575.98px) { - .dropzone .dz-message { - margin: 2em; - } + .dropzone .dz-message { + margin: 2em; + } } @media (min-width: 576px) and (max-width: 767.98px) { - .dropzone .dz-message { - margin: 2.75em; - } + .dropzone .dz-message { + margin: 2.75em; + } } /* 1.11 Flag Icon */ .flag-icon { - width: 50px; - height: 35px; - display: inline-block; - background-size: 100%; + width: 50px; + height: 35px; + display: inline-block; + background-size: 100%; } .flag-icon.flag-icon-shadow { - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); } /* 1.12 Full Calendar */ .fc-toolbar h2 { - font-size: 16px; - margin-top: 4px; + font-size: 16px; + margin-top: 4px; } .fc-view { - border-color: #f2f2f2; - color: #34395e !important; - font-weight: 500; - padding: 10px; + border-color: #f2f2f2; + color: #34395e !important; + font-weight: 500; + padding: 10px; } .fc-view > table { - border-color: #f2f2f2; + border-color: #f2f2f2; } -.fc-view > table tr, .fc-view > table td { - border-color: #f2f2f2; +.fc-view > table tr, +.fc-view > table td { + border-color: #f2f2f2; } .fc-view > table th { - border-color: #f2f2f2; - color: #34395e !important; - font-weight: 500; - padding: 10px; + border-color: #f2f2f2; + color: #34395e !important; + font-weight: 500; + padding: 10px; } .fc-view-container > .fc-view { - padding: 0; + padding: 0; } .fc-view { - color: #666; - text-align: right; + color: #666; + text-align: right; } .fc-view > table td { - color: #666; - text-align: right; + color: #666; + text-align: right; } .fc-unthemed td.fc-today { - background-color: #f2f2f2; + background-color: #f2f2f2; } .fc button .fc-icon { - top: -0.09em; + top: -0.09em; } -.fc-basic-view .fc-day-number, .fc-basic-view .fc-week-number { - padding: 10px; +.fc-basic-view .fc-day-number, +.fc-basic-view .fc-week-number { + padding: 10px; } .fc-day-grid-event .fc-content { - padding: 5px 10px; - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); + padding: 5px 10px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); } tr:first-child > td > .fc-day-grid-event { - margin-bottom: 10px; + margin-bottom: 10px; } .fc-state-default { - border-radius: 3px; - background-color: #f2f2f2; - background-image: none; - border: none; - box-shadow: none; - text-transform: capitalize; - font-weight: 500; + border-radius: 3px; + background-color: #f2f2f2; + background-image: none; + border: none; + box-shadow: none; + text-transform: capitalize; + font-weight: 500; } .fc button { - height: auto; - padding: 10px 15px; - text-shadow: none; - border-radius: 0; + height: auto; + padding: 10px 15px; + text-shadow: none; + border-radius: 0; } .fc button.fc-state-active { - background-color: #6777ef; - color: #fff; + background-color: #6777ef; + color: #fff; } /* 1.13 Gallery */ .gallery { - display: inline-block; - width: 100%; + display: inline-block; + width: 100%; } .gallery .gallery-item { - float: left; - display: inline-block; - width: 50px; - height: 50px; - background-repeat: no-repeat; - background-size: cover; - background-position: center; - border-radius: 3px; - margin-right: 7px; - margin-bottom: 7px; - cursor: pointer; - transition: all 0.5s; - position: relative; + float: left; + display: inline-block; + width: 50px; + height: 50px; + background-repeat: no-repeat; + background-size: cover; + background-position: center; + border-radius: 3px; + margin-right: 7px; + margin-bottom: 7px; + cursor: pointer; + transition: all 0.5s; + position: relative; } .gallery .gallery-item:hover { - opacity: 0.8; + opacity: 0.8; } .gallery .gallery-hide { - display: none; + display: none; } .gallery .gallery-more:after { - content: " "; - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - z-index: 1; - background-color: rgba(0, 0, 0, 0.5); - border-radius: 3px; + content: " "; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + z-index: 1; + background-color: rgba(0, 0, 0, 0.5); + border-radius: 3px; } .gallery .gallery-more div { - text-align: center; - line-height: 50px; - font-weight: 600; - position: relative; - z-index: 2; - color: #fff; + text-align: center; + line-height: 50px; + font-weight: 600; + position: relative; + z-index: 2; + color: #fff; } .gallery.gallery-md .gallery-item { - width: 78px; - height: 78px; - margin-right: 10px; - margin-bottom: 10px; + width: 78px; + height: 78px; + margin-right: 10px; + margin-bottom: 10px; } .gallery.gallery-md .gallery-more div { - line-height: 78px; + line-height: 78px; } .gallery.gallery-fw .gallery-item { - width: 100%; - margin-bottom: 15px; + width: 100%; + margin-bottom: 15px; } .gallery.gallery-fw .gallery-more div { - font-size: 20px; + font-size: 20px; } /* 1.14 Image Preview */ -.image-preview, #callback-preview { - width: 250px; - height: 250px; - border: 2px dashed #ddd; - border-radius: 3px; - position: relative; - overflow: hidden; - background-color: #ffffff; - color: #ecf0f1; +.image-preview, +#callback-preview { + width: 250px; + height: 250px; + border: 2px dashed #ddd; + border-radius: 3px; + position: relative; + overflow: hidden; + background-color: #ffffff; + color: #ecf0f1; } -.image-preview input, #callback-preview input { - line-height: 200px; - font-size: 200px; - position: absolute; - opacity: 0; - z-index: 10; +.image-preview input, +#callback-preview input { + line-height: 200px; + font-size: 200px; + position: absolute; + opacity: 0; + z-index: 10; } -.image-preview label, #callback-preview label { - position: absolute; - z-index: 5; - opacity: 0.8; - cursor: pointer; - background-color: #bdc3c7; - width: 150px; - height: 50px; - font-size: 12px; - line-height: 50px; - text-transform: uppercase; - top: 0; - left: 0; - right: 0; - bottom: 0; - margin: auto; - text-align: center; +.image-preview label, +#callback-preview label { + position: absolute; + z-index: 5; + opacity: 0.8; + cursor: pointer; + background-color: #bdc3c7; + width: 150px; + height: 50px; + font-size: 12px; + line-height: 50px; + text-transform: uppercase; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + text-align: center; } .audio-preview { - background: #ffffff; - width: auto; - padding: 20px; - display: inline-block; + background: #ffffff; + width: auto; + padding: 20px; + display: inline-block; } .audio-upload { - cursor: pointer; - background-color: #bdc3c7; - color: #ecf0f1; - padding: 20px; - font-size: 20px; - text-transform: uppercase; + cursor: pointer; + background-color: #bdc3c7; + color: #ecf0f1; + padding: 20px; + font-size: 20px; + text-transform: uppercase; } /* 1.15 IonIcons */ .ionicons { - padding: 0; - margin: 0; - display: flex; - flex-wrap: wrap; + padding: 0; + margin: 0; + display: flex; + flex-wrap: wrap; } .ionicons li { - width: calc(100% / 8); - font-size: 40px; - padding: 40px 20px; - list-style: none; - text-align: center; - border-radius: 3px; - position: relative; - cursor: pointer; + width: calc(100% / 8); + font-size: 40px; + padding: 40px 20px; + list-style: none; + text-align: center; + border-radius: 3px; + position: relative; + cursor: pointer; } .ionicons li:hover { - opacity: 0.8; + opacity: 0.8; } .ionicons li .icon-name { - position: absolute; - top: 100%; - left: 50%; - width: 100%; - -webkit-transform: translate(-50%, -100%); - transform: translate(-50%, -100%); - font-family: "Segoe UI"; - font-size: 12px; - margin-top: 10px; - line-height: 22px; - background-color: #f9f9f9; - border-radius: 3px; - padding: 10px; - display: none; + position: absolute; + top: 100%; + left: 50%; + width: 100%; + -webkit-transform: translate(-50%, -100%); + transform: translate(-50%, -100%); + font-family: "Segoe UI"; + font-size: 12px; + margin-top: 10px; + line-height: 22px; + background-color: #f9f9f9; + border-radius: 3px; + padding: 10px; + display: none; } /* 1.16 jQVmap */ .jqvmap-circle { - display: inline-block; - width: 13px; - height: 13px; - background-color: #fff; - border: 3px solid #6777ef; - border-radius: 50%; + display: inline-block; + width: 13px; + height: 13px; + background-color: #fff; + border: 3px solid #6777ef; + border-radius: 50%; } .jqvmap-label { - z-index: 889; + z-index: 889; } -.jqvmap-zoomin, .jqvmap-zoomout { - height: auto; - width: auto; +.jqvmap-zoomin, +.jqvmap-zoomout { + height: auto; + width: auto; } /* 1.17 Profile */ .profile-widget { - margin-top: 35px; + margin-top: 35px; } .profile-widget .profile-widget-picture { - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); - float: left; - width: 100px; - margin: -35px -5px 0 30px; - position: relative; - z-index: 1; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); + float: left; + width: 100px; + margin: -35px -5px 0 30px; + position: relative; + z-index: 1; } .profile-widget .profile-widget-header { - display: inline-block; - width: 100%; - margin-bottom: 10px; + display: inline-block; + width: 100%; + margin-bottom: 10px; } .profile-widget .profile-widget-items { - display: flex; - position: relative; + display: flex; + position: relative; } .profile-widget .profile-widget-items:after { - content: " "; - position: absolute; - bottom: 0; - left: -25px; - right: 0; - height: 1px; - background-color: #f2f2f2; + content: " "; + position: absolute; + bottom: 0; + left: -25px; + right: 0; + height: 1px; + background-color: #f2f2f2; } .profile-widget .profile-widget-items .profile-widget-item { - flex: 1; - text-align: center; - border-right: 1px solid #f2f2f2; - padding: 10px 0; + flex: 1; + text-align: center; + border-right: 1px solid #f2f2f2; + padding: 10px 0; } .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 { - font-weight: 600; - font-size: 12px; - letter-spacing: 0.5px; - color: #34395e; +.profile-widget + .profile-widget-items + .profile-widget-item + .profile-widget-item-label { + font-weight: 600; + font-size: 12px; + letter-spacing: 0.5px; + color: #34395e; } -.profile-widget .profile-widget-items .profile-widget-item .profile-widget-item-value { - color: #000; - font-weight: 600; - font-size: 16px; +.profile-widget + .profile-widget-items + .profile-widget-item + .profile-widget-item-value { + color: #000; + font-weight: 600; + font-size: 16px; } .profile-widget .profile-widget-description { - padding: 20px; - line-height: 26px; + padding: 20px; + line-height: 26px; } .profile-widget .profile-widget-description .profile-widget-name { - font-size: 16px; - margin-bottom: 10px; - font-weight: 600; + font-size: 16px; + margin-bottom: 10px; + font-weight: 600; } @media (max-width: 575.98px) { - .profile-widget .profile-widget-picture { - left: 50%; - -webkit-transform: translate(-50%, 0); - transform: translate(-50%, 0); - margin: 40px 0; - float: none; - } - .profile-widget .profile-widget-items .profile-widget-item { - border-top: 1px solid #f2f2f2; - } + .profile-widget .profile-widget-picture { + left: 50%; + -webkit-transform: translate(-50%, 0); + transform: translate(-50%, 0); + margin: 40px 0; + float: none; + } + .profile-widget .profile-widget-items .profile-widget-item { + border-top: 1px solid #f2f2f2; + } } /* 1.18 Select2 */ -.select2-container--default .select2-search--dropdown .select2-search__field:focus { - outline: none; - box-shadow: none; +.select2-container--default + .select2-search--dropdown + .select2-search__field:focus { + outline: none; + box-shadow: none; } -.select2-container .select2-selection--multiple, .select2-container .select2-selection--single { - box-sizing: border-box; - cursor: pointer; - display: block; - min-height: 42px; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-user-select: none; - outline: none; - background-color: #fdfdff; - border-color: #e4e6fc; +.select2-container .select2-selection--multiple, +.select2-container .select2-selection--single { + box-sizing: border-box; + cursor: pointer; + display: block; + min-height: 42px; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-user-select: none; + outline: none; + background-color: #fdfdff; + border-color: #e4e6fc; } .select2-dropdown { - border-color: #e4e6fc !important; + border-color: #e4e6fc !important; } .select2-container.select2-container--open .select2-selection--multiple { - background-color: #fefeff; - border-color: #95a0f4; + background-color: #fefeff; + border-color: #95a0f4; } -.select2-container.select2-container--focus .select2-selection--multiple, .select2-container.select2-container--focus .select2-selection--single { - background-color: #fefeff; - border-color: #95a0f4; +.select2-container.select2-container--focus .select2-selection--multiple, +.select2-container.select2-container--focus .select2-selection--single { + background-color: #fefeff; + border-color: #95a0f4; } .select2-container.select2-container--open .select2-selection--single { - background-color: #fefeff; - border-color: #95a0f4; + background-color: #fefeff; + border-color: #95a0f4; } .select2-results__option { - padding: 10px; + padding: 10px; } .select2-search--dropdown .select2-search__field { - padding: 7px; + padding: 7px; } -.select2-container--default .select2-selection--single .select2-selection__rendered { - min-height: 42px; - line-height: 42px; - padding-left: 20px; - padding-right: 20px; +.select2-container--default + .select2-selection--single + .select2-selection__rendered { + min-height: 42px; + line-height: 42px; + padding-left: 20px; + padding-right: 20px; } -.select2-container--default .select2-selection--multiple .select2-selection__arrow, .select2-container--default .select2-selection--single .select2-selection__arrow { - position: absolute; - top: 1px; - right: 1px; - width: 40px; - min-height: 42px; +.select2-container--default + .select2-selection--multiple + .select2-selection__arrow, +.select2-container--default + .select2-selection--single + .select2-selection__arrow { + position: absolute; + top: 1px; + right: 1px; + width: 40px; + min-height: 42px; } -.select2-container--default .select2-selection--multiple .select2-selection__choice { - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); - color: #fff; - padding-left: 10px; - padding-right: 10px; +.select2-container--default + .select2-selection--multiple + .select2-selection__choice { + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); + color: #fff; + padding-left: 10px; + padding-right: 10px; } -.select2-container--default .select2-selection--multiple .select2-selection__rendered { - padding-left: 10px; - padding-right: 10px; +.select2-container--default + .select2-selection--multiple + .select2-selection__rendered { + padding-left: 10px; + padding-right: 10px; } -.select2-container--default .select2-selection--multiple .select2-selection__choice__remove { - margin-right: 5px; - color: #fff; +.select2-container--default + .select2-selection--multiple + .select2-selection__choice__remove { + margin-right: 5px; + color: #fff; } -.select2-container--default .select2-selection--multiple .select2-selection__choice, -.select2-container--default .select2-results__option[aria-selected=true], -.select2-container--default .select2-results__option--highlighted[aria-selected] { - background-color: #6777ef; - color: #fff; +.select2-container--default + .select2-selection--multiple + .select2-selection__choice, +.select2-container--default .select2-results__option[aria-selected="true"], +.select2-container--default + .select2-results__option--highlighted[aria-selected] { + background-color: #6777ef; + color: #fff; } .select2-results__option { - padding-right: 10px 15px; + padding-right: 10px 15px; } /* 1.19 Selectric */ .selectric { - background-color: #fdfdff; - border-color: #e4e6fc; - min-height: 42px; - border-radius: 3px; - padding-left: 10px; - padding-right: 10px; + background-color: #fdfdff; + border-color: #e4e6fc; + min-height: 42px; + border-radius: 3px; + padding-left: 10px; + padding-right: 10px; } .selectric:hover { - background-color: #fdfdff; - border-color: #e4e6fc; + background-color: #fdfdff; + border-color: #e4e6fc; } .selectric:focus { - background-color: #fefeff; - border-color: #95a0f4; + background-color: #fefeff; + border-color: #95a0f4; } .selectric .label { - font-size: 13px; - background-color: transparent; - line-height: 44px; - min-height: 42px; + font-size: 13px; + background-color: transparent; + line-height: 44px; + min-height: 42px; } .selectric .button { - background-color: transparent; - line-height: 44px; - min-height: 42px; + background-color: transparent; + line-height: 44px; + min-height: 42px; } .selectric-open .selectric { - border-color: #6777ef; + border-color: #6777ef; } -.selectric-above .selectric-items, .selectric-below .selectric-items { - margin-bottom: 10px; +.selectric-above .selectric-items, +.selectric-below .selectric-items { + margin-bottom: 10px; } .selectric-items { - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); - border-radius: 3px; - background-color: #fff; - border: none; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); + border-radius: 3px; + background-color: #fff; + border: none; } .selectric-items li { - font-size: 13px; - padding: 10px 15px; + font-size: 13px; + padding: 10px 15px; } .selectric-items li:hover { - background-color: #f2f2f2; + background-color: #f2f2f2; } -.selectric-items li.selected, .selectric-items li.highlighted { - background-color: #6777ef; - color: #fff; +.selectric-items li.selected, +.selectric-items li.highlighted { + background-color: #6777ef; + color: #fff; } /* 1.20 Slider */ -.slider .owl-nav [class*=owl-] { - position: absolute; - top: 50%; - left: 35px; - -webkit-transform: translate(-50%, -50%); - transform: translate(-50%, -50%); - margin: 0; - background-color: #000; - border-radius: 50%; - color: #fff; - width: 40px; - height: 40px; - line-height: 34px; - opacity: 0.3; +.slider .owl-nav [class*="owl-"] { + position: absolute; + top: 50%; + left: 35px; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + margin: 0; + background-color: #000; + border-radius: 50%; + color: #fff; + width: 40px; + height: 40px; + line-height: 34px; + opacity: 0.3; } -.slider .owl-nav [class*=owl-]:hover { - background-color: #000; +.slider .owl-nav [class*="owl-"]:hover { + background-color: #000; } .slider .owl-nav .owl-next { - right: 0; - left: initial; + right: 0; + left: initial; } -.slider:hover .owl-nav [class*=owl-] { - opacity: 1; +.slider:hover .owl-nav [class*="owl-"] { + opacity: 1; } .slider .slider-caption { - position: absolute; - bottom: 10px; - left: 0; - width: 100%; - z-index: 1; - background-color: rgba(0, 0, 0, 0.3); - color: #fff; - padding: 10px; + position: absolute; + bottom: 10px; + left: 0; + width: 100%; + z-index: 1; + background-color: rgba(0, 0, 0, 0.3); + color: #fff; + padding: 10px; } .slider .slider-caption .slider-title { - font-size: 16px; - font-weight: 700; - margin-bottom: 5px; + font-size: 16px; + font-weight: 700; + margin-bottom: 5px; } .slider .slider-caption .slider-description { - line-height: 26px; - opacity: 0.8; + line-height: 26px; + opacity: 0.8; } /* 1.21 Sparkline */ .jqstooltip { - box-sizing: content-box; + box-sizing: content-box; } -.sparkline-bar, .sparkline-line, .sparkline-inline { - width: 100%; +.sparkline-bar, +.sparkline-line, +.sparkline-inline { + width: 100%; } -.sparkline-bar canvas, .sparkline-line canvas, .sparkline-inline canvas { - width: 100% !important; +.sparkline-bar canvas, +.sparkline-line canvas, +.sparkline-inline canvas { + width: 100% !important; } /* 1.22 Statistics */ .statistic-details { - display: flex; - flex-wrap: wrap; + display: flex; + flex-wrap: wrap; } .statistic-details .statistic-details-item { - flex: 1; - padding: 17px 10px; - text-align: center; + flex: 1; + padding: 17px 10px; + text-align: center; } .statistic-details .statistic-details-item .detail-chart { - margin-bottom: 10px; - padding: 0 20px; + margin-bottom: 10px; + padding: 0 20px; } .statistic-details .statistic-details-item .detail-name { - font-size: 12px; - margin-top: 5px; - color: #34395e; - letter-spacing: 0.3px; + font-size: 12px; + margin-top: 5px; + color: #34395e; + letter-spacing: 0.3px; } .statistic-details .statistic-details-item .detail-value { - font-size: 18px; - font-weight: 700; + font-size: 18px; + font-weight: 700; } @media (max-width: 575.98px) { - .statistic-details { - flex-wrap: wrap; - } - .statistic-details .statistic-details-item { - flex: initial; - width: 50%; - } + .statistic-details { + flex-wrap: wrap; + } + .statistic-details .statistic-details-item { + flex: initial; + width: 50%; + } } /* 1.23 Summary */ .summary { - display: inline-block; - width: 100%; + display: inline-block; + width: 100%; } .summary .summary-info { - background-color: #eaf2f4; - padding: 50px 0; - text-align: center; - border-radius: 3px; + background-color: #eaf2f4; + padding: 50px 0; + text-align: center; + border-radius: 3px; } .summary .summary-info h4 { - font-weight: 600; + font-weight: 600; } .summary .summary-item { - margin-top: 20px; + margin-top: 20px; } .summary .summary-item h6 { - font-size: 12px; - font-weight: 600; - margin-top: 5px; - margin-bottom: 20px; + font-size: 12px; + font-weight: 600; + margin-top: 5px; + margin-bottom: 20px; } /* 1.24 Summernote */ .note-editor.note-frame { - border-radius: 3px; - border: 1px solid #ededed; - box-shadow: none; + border-radius: 3px; + border: 1px solid #ededed; + box-shadow: none; } .note-toolbar { - padding: 0 0 5px 5px !important; - position: relative !important; + padding: 0 0 5px 5px !important; + position: relative !important; } .note-toolbar.card-header { - height: auto; - display: block; - min-height: auto; + height: auto; + display: block; + min-height: auto; } .note-toolbar .note-btn { - font-size: 12px; - background-color: transparent; - box-shadow: none; - border-color: transparent; + font-size: 12px; + background-color: transparent; + box-shadow: none; + border-color: transparent; } /* 1.25 Sweet Alert */ .swal-button { - border-radius: 3px; - font-size: 16px; + border-radius: 3px; + font-size: 16px; } .swal-button:focus { - box-shadow: none; + box-shadow: none; } .swal-button.swal-button--confirm { - box-shadow: 0 2px 6px #acb5f6; - background-color: #6777ef; + box-shadow: 0 2px 6px #acb5f6; + background-color: #6777ef; } .swal-button.swal-button--confirm:focus { - opacity: 0.8; + opacity: 0.8; } .swal-footer { - text-align: center; + text-align: center; } .swal-text { - text-align: center; - line-height: 24px; - font-weight: 500; + text-align: center; + line-height: 24px; + font-weight: 500; } /* 1.26 Tags Input */ .bootstrap-tagsinput { - background-color: #fdfdff; - border-color: #e4e6fc; - display: block; - height: 46px; - box-shadow: none; - overflow: auto; + background-color: #fdfdff; + border-color: #e4e6fc; + display: block; + height: 46px; + box-shadow: none; + overflow: auto; } .bootstrap-tagsinput input { - height: 100%; - padding: 0 8px; + height: 100%; + padding: 0 8px; } .bootstrap-tagsinput .tag { - background-color: #6777ef; - border-radius: 3px; - padding: 5px 10px; + background-color: #6777ef; + border-radius: 3px; + padding: 5px 10px; } .bootstrap-tagsinput .tag:first-child { - margin-left: 5px; + margin-left: 5px; } .bootstrap-tagsinput:focus { - background-color: #fefeff; - border-color: #95a0f4; + background-color: #fefeff; + border-color: #95a0f4; } /* 1.27 Time Picker */ .bootstrap-timepicker-widget table td a span { - margin-left: 0 !important; + margin-left: 0 !important; } /* 1.28 Toast */ #toast-container > div { - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); - padding: 20px 20px 20px 50px; - opacity: 1; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); + padding: 20px 20px 20px 50px; + opacity: 1; } #toast-container > .toast { - background-image: none !important; + background-image: none !important; } #toast-container > .toast:before { - position: absolute; - left: 17px; - top: 25px; - font-family: "Ionicons"; - font-size: 24px; - line-height: 18px; - color: #fff; + position: absolute; + left: 17px; + top: 25px; + font-family: "Ionicons"; + font-size: 24px; + line-height: 18px; + color: #fff; } #toast-container > .toast-warning:before { - content: ""; + content: ""; } #toast-container > .toast-error:before { - content: ""; + content: ""; } #toast-container > .toast-info:before { - content: ""; - color: #000; + content: ""; + color: #000; } #toast-container > .toast-success:before { - content: ""; + content: ""; } .toast.toast-error { - background-color: #fc544b; + background-color: #fc544b; } .toast.toast-warning { - background-color: #ffa426; + background-color: #ffa426; } .toast.toast-success { - background-color: #63ed7a; + background-color: #63ed7a; } .toast.toast-info { - background-color: #fff; + background-color: #fff; } .toast.toast-info .toast-title { - color: #000; + color: #000; } .toast.toast-info .toast-message { - color: #000; - margin-top: 5px; + color: #000; + margin-top: 5px; } /* 1.29 User Item */ .user-item { - text-align: center; + text-align: center; } .user-item img { - border-radius: 50%; - padding-left: 20px; - padding-right: 20px; + border-radius: 50%; + padding-left: 20px; + padding-right: 20px; } .user-item .user-details { - margin-top: 10px; + margin-top: 10px; } .user-item .user-details .user-name { - font-weight: 600; - color: #191d21; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; + font-weight: 600; + color: #191d21; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } .user-item .user-details .user-cta { - margin-top: 10px; + margin-top: 10px; } .user-item .user-details .user-cta .btn { - padding: 5px 15px; - font-size: 12px; - border-radius: 30px; + padding: 5px 15px; + font-size: 12px; + border-radius: 30px; } @media (max-width: 575.98px) { - .user-progress .media, .user-details .media { - text-align: center; - display: inline-block; - width: 100%; - } + .user-progress .media, + .user-details .media { + text-align: center; + display: inline-block; + width: 100%; + } - .user-progress .media img, .user-details .media img { - margin: 0 !important; - margin-bottom: 10px !important; - } + .user-progress .media img, + .user-details .media img { + margin: 0 !important; + margin-bottom: 10px !important; + } - .user-progress .media .media-body, .user-details .media .media-body { - width: 100%; - } + .user-progress .media .media-body, + .user-details .media .media-body { + width: 100%; + } - .user-progress .media .media-items, .user-details .media .media-items { - margin: 20px 0; - width: 100%; - } + .user-progress .media .media-items, + .user-details .media .media-items { + margin: 20px 0; + width: 100%; + } - .user-progress .list-unstyled-noborder li:last-child, .user-details .list-unstyled-noborder li:last-child { - margin-bottom: 0; - padding-bottom: 0; - } + .user-progress .list-unstyled-noborder li:last-child, + .user-details .list-unstyled-noborder li:last-child { + margin-bottom: 0; + padding-bottom: 0; + } - .user-progress .media .media-progressbar { - margin-top: 10px; - } - .user-progress .media .media-cta { - margin-top: 20px; - margin-left: 0; - } + .user-progress .media .media-progressbar { + margin-top: 10px; + } + .user-progress .media .media-cta { + margin-top: 20px; + margin-left: 0; + } } /* 1.30 Weather */ .weather .weather-icon { - float: left; - width: 150px; - text-align: center; - line-height: 40px; + float: left; + width: 150px; + text-align: center; + line-height: 40px; } .weather .weather-icon span { - font-size: 60px; - margin-top: 30px; + font-size: 60px; + margin-top: 30px; } .weather .weather-desc { - margin-left: 160px; + margin-left: 160px; } .weather .weather-desc h4 { - font-size: 70px; - font-weight: 200; - margin: 0; - margin-top: 30px; - margin-bottom: 5px; - line-height: 56px; + font-size: 70px; + font-weight: 200; + margin: 0; + margin-top: 30px; + margin-bottom: 5px; + line-height: 56px; } .weather .weather-desc .weather-text { - font-size: 12px; - color: #34395e; - font-weight: 600; - letter-spacing: 1px; - text-transform: uppercase; - margin-top: 10px; + font-size: 12px; + color: #34395e; + font-weight: 600; + letter-spacing: 1px; + text-transform: uppercase; + margin-top: 10px; } .weather .weather-desc ul { - margin: 15px 0 13px 0; - padding: 0; + margin: 15px 0 13px 0; + padding: 0; } .weather ul li { - display: inline-block; - margin-right: 10px; - padding: 10px; - line-height: 1; - border-radius: 3px; - border: 2px solid #6777ef; - font-size: 10px; - font-weight: 500; - color: #6777ef; - text-transform: uppercase; - letter-spacing: 1px; - margin-bottom: 10px; + display: inline-block; + margin-right: 10px; + padding: 10px; + line-height: 1; + border-radius: 3px; + border: 2px solid #6777ef; + font-size: 10px; + font-weight: 500; + color: #6777ef; + text-transform: uppercase; + letter-spacing: 1px; + margin-bottom: 10px; } @media (max-width: 575.98px) { - .weather { - text-align: center; - } - .weather .weather-icon { - float: none; - width: auto; - } - .weather .weather-icon span { - margin-top: 20px; - } - .weather .weather-desc { - margin-left: 0; - } + .weather { + text-align: center; + } + .weather .weather-icon { + float: none; + width: auto; + } + .weather .weather-icon span { + margin-top: 20px; + } + .weather .weather-desc { + margin-left: 0; + } } /* 1.31 Weather Icon */ .icon-wrap { - display: inline-block; - padding-left: 15px; - padding-right: 15px; - margin-bottom: 25px; - width: calc(100% / 4); + display: inline-block; + padding-left: 15px; + padding-right: 15px; + margin-bottom: 25px; + width: calc(100% / 4); } .icon-wrap .icon { - float: left; - width: 40px; - font-family: "weathericons"; - font-size: 20px; + float: left; + width: 40px; + font-family: "weathericons"; + font-size: 20px; } .icon-wrap .icon_unicode { - width: 100%; - padding-left: 45px; - color: #34395e; + width: 100%; + padding-left: 45px; + color: #34395e; } .new-icons ul { - padding: 0; - margin: 0; - list-style: none; + padding: 0; + margin: 0; + list-style: none; } .new-icons ul li { - padding: 10px; + padding: 10px; } -.icon-wrap .icon, .new-icons ul li .wi { - font-size: 24px; - margin-right: 15px; - width: 30px; - text-align: center; +.icon-wrap .icon, +.new-icons ul li .wi { + font-size: 24px; + margin-right: 15px; + width: 30px; + text-align: center; } /* 1.32 PWStrength */ .pwindicator { - margin-top: 4px; - width: 150px; + margin-top: 4px; + width: 150px; } .pwindicator .bar { - height: 2px; + height: 2px; } .pw-very-weak .bar { - background: #d00; - width: 30px; + background: #d00; + width: 30px; } .pw-very-weak .label { - color: #d00; + color: #d00; } .pw-weak .bar { - background: #d00; - width: 60px; + background: #d00; + width: 60px; } .pw-weak .label { - color: #d00; + color: #d00; } .pw-mediocre .bar { - background: #f3f01a; - width: 90px; + background: #f3f01a; + width: 90px; } .pw-mediocre .label { - color: #f3f01a; + color: #f3f01a; } .pw-strong .bar { - background: #f3b31a; - width: 120px; + background: #f3b31a; + width: 120px; } .pw-strong .label { - color: #f3b31a; + color: #f3b31a; } .pw-very-strong .bar { - background: #0d0; - width: 150px; + background: #0d0; + width: 150px; } .pw-very-strong .label { - color: #0d0; + color: #0d0; } /* 1.33 Product */ .product-item { - text-align: center; + text-align: center; } .product-item .product-image { - display: inline-block; - overflow: hidden; - width: 80px; - height: 80px; - border-radius: 3px; - margin-bottom: 10px; + display: inline-block; + overflow: hidden; + width: 80px; + height: 80px; + border-radius: 3px; + margin-bottom: 10px; } .product-item .product-name { - color: #34395e; - font-weight: 700; - margin-bottom: 3px; + color: #34395e; + font-weight: 700; + margin-bottom: 3px; } .product-item .product-review { - color: #ffa426; - margin-bottom: 3px; + color: #ffa426; + margin-bottom: 3px; } .product-item .product-cta { - margin-top: 5px; + margin-top: 5px; } .product-item .product-cta a { - margin-top: 10px; - padding-left: 15px; - padding-right: 15px; + margin-top: 10px; + padding-left: 15px; + padding-right: 15px; } /* 1.34 Ticket */ .tickets-list .ticket-item { - text-decoration: none; - display: inline-block; - width: 100%; - padding: 20px; - border-bottom: 1px solid #f9f9f9; + text-decoration: none; + display: inline-block; + width: 100%; + padding: 20px; + border-bottom: 1px solid #f9f9f9; } .tickets-list .ticket-item.ticket-more { - padding: 15px; - text-align: center; - font-weight: 600; - font-size: 12px; + padding: 15px; + text-align: center; + font-weight: 600; + font-size: 12px; } .tickets-list .ticket-item .ticket-title h4 { - font-size: 16px; - font-weight: 700; + font-size: 16px; + font-weight: 700; } .tickets-list .ticket-item .ticket-info { - display: flex; - font-size: 12px; - font-weight: 500; - color: #34395e; - letter-spacing: 0.5px; + display: flex; + font-size: 12px; + font-weight: 500; + color: #34395e; + letter-spacing: 0.5px; } .tickets-list .ticket-item .ticket-info .bullet { - margin: 0 10px; + margin: 0 10px; } .tickets { - display: flex; + display: flex; } .tickets .ticket-items { - width: 30%; - padding-right: 30px; + width: 30%; + padding-right: 30px; } .tickets .ticket-items .ticket-item { - display: inline-block; - width: 100%; - padding: 25px 15px; - border-bottom: 1px solid #f9f9f9; - cursor: pointer; - transition: all 0.5s; + display: inline-block; + width: 100%; + padding: 25px 15px; + border-bottom: 1px solid #f9f9f9; + cursor: pointer; + transition: all 0.5s; } .tickets .ticket-items .ticket-item:hover { - background-color: rgba(63, 82, 227, 0.03); + background-color: rgba(63, 82, 227, 0.03); } .tickets .ticket-items .ticket-item:hover .ticket-title { - color: #6777ef; + color: #6777ef; } .tickets .ticket-items .ticket-item.active { - box-shadow: 0 2px 6px #acb5f6; - border-radius: 3px; - background-color: #6777ef; - border-bottom: none; + box-shadow: 0 2px 6px #acb5f6; + border-radius: 3px; + background-color: #6777ef; + border-bottom: none; } -.tickets .ticket-items .ticket-item.active .ticket-title, .tickets .ticket-items .ticket-item.active .ticket-desc { - color: #fff !important; +.tickets .ticket-items .ticket-item.active .ticket-title, +.tickets .ticket-items .ticket-item.active .ticket-desc { + color: #fff !important; } .tickets .ticket-items .ticket-item .ticket-title h4 { - font-size: 13px; - letter-spacing: 0.3px; + font-size: 13px; + letter-spacing: 0.3px; } .tickets .ticket-items .ticket-item .ticket-title h4 .badge { - padding: 7px 10px; - margin-left: 5px; + padding: 7px 10px; + margin-left: 5px; } .tickets .ticket-items .ticket-item .ticket-desc { - display: flex; - font-size: 11px; - font-weight: 500; - color: #34395e; - letter-spacing: 0.5px; + display: flex; + font-size: 11px; + font-weight: 500; + color: #34395e; + letter-spacing: 0.5px; } .tickets .ticket-items .ticket-item .ticket-desc .bullet { - margin: 0 10px; + margin: 0 10px; } .tickets .ticket-content { - width: 70%; + width: 70%; } .tickets .ticket-content .ticket-header { - display: flex; + display: flex; } .tickets .ticket-content .ticket-header .ticket-sender-picture { - width: 50px; - height: 50px; - border-radius: 3px; - overflow: hidden; - margin-right: 20px; + width: 50px; + height: 50px; + border-radius: 3px; + overflow: hidden; + margin-right: 20px; } .tickets .ticket-content .ticket-header .ticket-sender-picture img { - width: 100%; + width: 100%; } .tickets .ticket-content .ticket-header .ticket-detail .ticket-title h4 { - font-size: 18px; - font-weight: 700; + font-size: 18px; + font-weight: 700; } .tickets .ticket-content .ticket-header .ticket-detail .ticket-info { - display: flex; - letter-spacing: 0.3px; - font-size: 12px; - font-weight: 500; - color: #34395e; + display: flex; + letter-spacing: 0.3px; + font-size: 12px; + font-weight: 500; + color: #34395e; } .tickets .ticket-content .ticket-header .ticket-detail .ticket-info .bullet { - margin: 0 10px; + margin: 0 10px; } .tickets .ticket-divider { - height: 1px; - width: 100%; - display: inline-block; - background-color: #f2f2f2; + height: 1px; + width: 100%; + display: inline-block; + background-color: #f2f2f2; } .tickets .ticket-description { - color: #34395e; - font-weight: 500; - margin-top: 30px; - line-height: 28px; + color: #34395e; + font-weight: 500; + margin-top: 30px; + line-height: 28px; } .tickets .ticket-description p { - margin-bottom: 20px; + margin-bottom: 20px; } .tickets .ticket-description .ticket-form { - margin-top: 40px; + margin-top: 40px; } .tickets .ticket-description .ticket-form .note-editable { - color: #34395e; - font-weight: 500; + color: #34395e; + font-weight: 500; } .tickets .ticket-description .ticket-form .note-editable p { - margin-bottom: 5px; + margin-bottom: 5px; } @media (min-width: 576px) and (max-width: 767.98px) { - .tickets { - display: inline-block; - } - .tickets .ticket-items { - width: 100%; - margin-bottom: 30px; - padding: 0; - display: none; - } - .tickets .ticket-content { - width: 100%; - } + .tickets { + display: inline-block; + } + .tickets .ticket-items { + width: 100%; + margin-bottom: 30px; + padding: 0; + display: none; + } + .tickets .ticket-content { + width: 100%; + } } @media (min-width: 768px) and (max-width: 991.98px) { - .tickets { - flex-wrap: wrap; - margin: 0 -15px; - } - .tickets .ticket-items { - width: 100%; - display: flex; - flex-wrap: nowrap; - padding: 0; - margin-bottom: 15px; - padding: 15px; - overflow: auto; - } - .tickets .ticket-items .ticket-item { - flex-basis: 50%; - flex-grow: 0; - flex-shrink: 0; - } - .tickets .ticket-content { - margin: 15px; - width: 100%; - } + .tickets { + flex-wrap: wrap; + margin: 0 -15px; + } + .tickets .ticket-items { + width: 100%; + display: flex; + flex-wrap: nowrap; + padding: 0; + margin-bottom: 15px; + padding: 15px; + overflow: auto; + } + .tickets .ticket-items .ticket-item { + flex-basis: 50%; + flex-grow: 0; + flex-shrink: 0; + } + .tickets .ticket-content { + margin: 15px; + width: 100%; + } } /* 1.35 Owl Carousel */ .owl-theme .owl-item { - padding: 10px 0; + padding: 10px 0; } .owl-theme .owl-dots { - margin-top: 20px !important; + margin-top: 20px !important; } .owl-theme .owl-dots .owl-dot.active span { - background-color: #6777ef; + background-color: #6777ef; } /* 1.36 Activities */ .activities { - display: flex; - flex-wrap: wrap; + display: flex; + flex-wrap: wrap; } .activities .activity { - width: 100%; - display: flex; - position: relative; + width: 100%; + display: flex; + position: relative; } .activities .activity:before { - content: " "; - position: absolute; - left: 25px; - top: 0; - width: 2px; - height: 100%; - background-color: #6777ef; + content: " "; + position: absolute; + left: 25px; + top: 0; + width: 2px; + height: 100%; + background-color: #6777ef; } .activities .activity:last-child:before { - display: none; + display: none; } .activities .activity .activity-icon { - width: 50px; - height: 50px; - border-radius: 3px; - line-height: 50px; - font-size: 20px; - text-align: center; - margin-right: 20px; - border-radius: 50%; - flex-shrink: 0; - text-align: center; - z-index: 1; + width: 50px; + height: 50px; + border-radius: 3px; + line-height: 50px; + font-size: 20px; + text-align: center; + margin-right: 20px; + border-radius: 50%; + flex-shrink: 0; + text-align: center; + z-index: 1; } .activities .activity .activity-detail { - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); - background-color: #fff; - border-radius: 3px; - border: none; - position: relative; - margin-bottom: 30px; - position: relative; - padding: 15px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); + background-color: #fff; + border-radius: 3px; + border: none; + position: relative; + margin-bottom: 30px; + position: relative; + padding: 15px; } .activities .activity .activity-detail:before { - content: ""; - font-family: "Font Awesome 5 Free"; - font-weight: 900; - font-size: 20px; - position: absolute; - left: -8px; - color: #fff; + content: ""; + font-family: "Font Awesome 5 Free"; + font-weight: 900; + font-size: 20px; + position: absolute; + left: -8px; + color: #fff; } .activities .activity .activity-detail h4 { - font-size: 18px; - color: #191d21; + font-size: 18px; + color: #191d21; } .activities .activity .activity-detail p { - margin-bottom: 0; + margin-bottom: 0; } /* 1.37 Activities */ .invoice { - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); - background-color: #fff; - border-radius: 3px; - border: none; - position: relative; - margin-bottom: 30px; - padding: 40px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); + background-color: #fff; + border-radius: 3px; + border: none; + position: relative; + margin-bottom: 30px; + padding: 40px; } .invoice .invoice-title .invoice-number { - float: right; - font-size: 20px; - font-weight: 700; - margin-top: -45px; + float: right; + font-size: 20px; + font-weight: 700; + margin-top: -45px; } .invoice hr { - margin-top: 40px; - margin-bottom: 40px; - border-top-color: #f9f9f9; + margin-top: 40px; + margin-bottom: 40px; + border-top-color: #f9f9f9; } .invoice .invoice-detail-item { - margin-bottom: 15px; + margin-bottom: 15px; } .invoice .invoice-detail-item .invoice-detail-name { - letter-spacing: 0.3px; - color: #98a6ad; - margin-bottom: 4px; + letter-spacing: 0.3px; + color: #98a6ad; + margin-bottom: 4px; } .invoice .invoice-detail-item .invoice-detail-value { - font-size: 18px; - color: #34395e; - font-weight: 700; + font-size: 18px; + color: #34395e; + font-weight: 700; } .invoice .invoice-detail-item .invoice-detail-value.invoice-detail-value-lg { - font-size: 24px; + font-size: 24px; } @media (min-width: 768px) and (max-width: 991.98px) { - .table-invoice table { - min-width: 800px; - } + .table-invoice table { + min-width: 800px; + } } /* 1.38 Empty States */ .empty-state { - text-align: center; - display: flex; - align-items: center; - justify-content: center; - flex-direction: column; - padding: 40px; + text-align: center; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + padding: 40px; } .empty-state .empty-state-icon { - position: relative; - background-color: #6777ef; - width: 80px; - height: 80px; - line-height: 100px; - border-radius: 5px; + position: relative; + background-color: #6777ef; + width: 80px; + height: 80px; + line-height: 100px; + border-radius: 5px; } .empty-state .empty-state-icon i { - font-size: 40px; - color: #fff; - position: relative; - z-index: 1; + font-size: 40px; + color: #fff; + position: relative; + z-index: 1; } .empty-state h2 { - font-size: 20px; - margin-top: 30px; + font-size: 20px; + margin-top: 30px; } .empty-state p { - font-size: 16px; + font-size: 16px; } /* 1.39 Pricing */ .pricing { - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); - background-color: #fff; - border-radius: 3px; - border: none; - position: relative; - margin-bottom: 30px; - text-align: center; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); + background-color: #fff; + border-radius: 3px; + border: none; + position: relative; + margin-bottom: 30px; + text-align: center; } .pricing.pricing-highlight .pricing-title { - background-color: #6777ef; - color: #fff; + background-color: #6777ef; + color: #fff; } .pricing.pricing-highlight .pricing-cta a { - background-color: #6777ef; - color: #fff; + background-color: #6777ef; + color: #fff; } .pricing.pricing-highlight .pricing-cta a:hover { - background-color: #394eea !important; + background-color: #394eea !important; } .pricing .pricing-padding { - padding: 40px; + padding: 40px; } .pricing .pricing-title { - font-size: 10px; - font-weight: 700; - text-transform: uppercase; - letter-spacing: 2.5px; - background-color: #f3f6f8; - color: #6777ef; - border-radius: 0 0 3px 3px; - display: inline-block; - padding: 5px 15px; + font-size: 10px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 2.5px; + background-color: #f3f6f8; + color: #6777ef; + border-radius: 0 0 3px 3px; + display: inline-block; + padding: 5px 15px; } .pricing .pricing-price { - margin-bottom: 45px; + margin-bottom: 45px; } .pricing .pricing-price div:first-child { - font-weight: 600; - font-size: 50px; + font-weight: 600; + font-size: 50px; } .pricing .pricing-details { - text-align: left; - display: inline-block; + text-align: left; + display: inline-block; } .pricing .pricing-details .pricing-item { - display: flex; - margin-bottom: 15px; + display: flex; + margin-bottom: 15px; } .pricing .pricing-details .pricing-item .pricing-item-icon { - width: 20px; - height: 20px; - line-height: 20px; - border-radius: 50%; - text-align: center; - background-color: #63ed7a; - color: #fff; - margin-right: 10px; + width: 20px; + height: 20px; + line-height: 20px; + border-radius: 50%; + text-align: center; + background-color: #63ed7a; + color: #fff; + margin-right: 10px; } .pricing .pricing-details .pricing-item .pricing-item-icon i { - font-size: 11px; + font-size: 11px; } .pricing .pricing-cta { - margin-top: 20px; + margin-top: 20px; } .pricing .pricing-cta a { - display: block; - padding: 20px 40px; - background-color: #f3f6f8; - text-transform: uppercase; - letter-spacing: 2.5px; - font-size: 14px; - font-weight: 700; - text-decoration: none; - border-radius: 0 0 3px 3px; + display: block; + padding: 20px 40px; + background-color: #f3f6f8; + text-transform: uppercase; + letter-spacing: 2.5px; + font-size: 14px; + font-weight: 700; + text-decoration: none; + 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 { - margin-left: 5px; +.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; } .pricing .pricing-cta a:hover { - background-color: #e3eaef; + background-color: #e3eaef; } /* 1.40 Hero */ .hero { - border-radius: 3px; - padding: 55px; - display: flex; - justify-content: center; - flex-direction: column; - position: relative; + border-radius: 3px; + padding: 55px; + display: flex; + justify-content: center; + flex-direction: column; + position: relative; } .hero.hero-bg-image { - background-position: center; - background-size: cover; + background-position: center; + background-size: cover; } .hero.hero-bg-image:before { - content: " "; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: rgba(0, 0, 0, 0.5); - z-index: 0; - border-radius: 3px; + content: " "; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.5); + z-index: 0; + border-radius: 3px; } .hero.hero-bg-image.hero-bg-parallax { - background-attachment: fixed; + background-attachment: fixed; } .hero .hero-inner { - position: relative; - z-index: 1; + position: relative; + z-index: 1; } .hero h2 { - font-size: 24px; + font-size: 24px; } .hero p { - margin-bottom: 0; - font-size: 16px; - letter-spacing: 0.3px; + margin-bottom: 0; + font-size: 16px; + letter-spacing: 0.3px; } /* 1.41 Avatar */ @@ -1896,187 +1959,191 @@ tr:first-child > td > .fc-day-grid-event { * Thanks to Spectre.css */ .avatar { - background: #6777ef; - border-radius: 50%; - color: #e3eaef; - display: inline-block; - font-size: 16px; - font-weight: 300; - margin: 0; - position: relative; - vertical-align: middle; - line-height: 1.28; - height: 45px; - width: 45px; + background: #6777ef; + border-radius: 50%; + color: #e3eaef; + display: inline-block; + font-size: 16px; + font-weight: 300; + margin: 0; + position: relative; + vertical-align: middle; + line-height: 1.28; + height: 45px; + width: 45px; } .avatar.avatar-xs { - font-size: 6px; - height: 15px; - width: 15px; + font-size: 6px; + height: 15px; + width: 15px; } .avatar.avatar-sm { - font-size: 12px; - height: 30px; - width: 30px; + font-size: 12px; + height: 30px; + width: 30px; } .avatar.avatar-lg { - font-size: 23px; - height: 60px; - width: 60px; + font-size: 23px; + height: 60px; + width: 60px; } .avatar.avatar-xl { - font-size: 30px; - height: 75px; - width: 75px; + font-size: 30px; + height: 75px; + width: 75px; } .avatar img { - border-radius: 50%; - height: 100%; - position: relative; - width: 100%; - z-index: 1; + border-radius: 50%; + height: 100%; + position: relative; + width: 100%; + z-index: 1; } .avatar .avatar-icon { - background: #fff; - bottom: 14.64%; - height: 50%; - padding: 0.1rem; - position: absolute; - right: 14.64%; - transform: translate(50%, 50%); - width: 50%; - z-index: 2; + background: #fff; + bottom: 14.64%; + height: 50%; + padding: 0.1rem; + position: absolute; + right: 14.64%; + transform: translate(50%, 50%); + width: 50%; + z-index: 2; } .avatar .avatar-presence { - background: #fff; - bottom: 14.64%; - height: 50%; - padding: 0.1rem; - position: absolute; - right: 14.64%; - transform: translate(50%, 50%); - width: 50%; - z-index: 2; - background: #bcc3ce; - border-radius: 50%; - box-shadow: 0 0 0 0.1rem #fff; - height: 0.5em; - width: 0.5em; + background: #fff; + bottom: 14.64%; + height: 50%; + padding: 0.1rem; + position: absolute; + right: 14.64%; + transform: translate(50%, 50%); + width: 50%; + z-index: 2; + background: #bcc3ce; + border-radius: 50%; + box-shadow: 0 0 0 0.1rem #fff; + height: 0.5em; + width: 0.5em; } .avatar .avatar-presence.online { - background: #63ed7a; + background: #63ed7a; } .avatar .avatar-presence.busy { - background: #fc544b; + background: #fc544b; } .avatar .avatar-presence.away { - background: #ffa426; + background: #ffa426; } .avatar[data-initial]::before { - color: currentColor; - content: attr(data-initial); - left: 50%; - position: absolute; - top: 50%; - transform: translate(-50%, -50%); - z-index: 1; + color: currentColor; + content: attr(data-initial); + left: 50%; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); + z-index: 1; } /* 1.42 Wizard */ .wizard-steps { - display: flex; - margin: 0 -10px; - margin-bottom: 60px; - counter-reset: wizard-counter; + display: flex; + margin: 0 -10px; + margin-bottom: 60px; + counter-reset: wizard-counter; } .wizard-steps .wizard-step { - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); - background-color: #fff; - border-radius: 3px; - border: none; - position: relative; - margin-bottom: 30px; - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.05); - padding: 30px; - text-align: center; - flex-grow: 1; - flex-basis: 0; - margin: 0 10px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); + background-color: #fff; + border-radius: 3px; + border: none; + position: relative; + margin-bottom: 30px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.05); + padding: 30px; + text-align: center; + flex-grow: 1; + flex-basis: 0; + margin: 0 10px; } .wizard-steps .wizard-step:before { - counter-increment: wizard-counter; - content: counter(wizard-counter); - position: absolute; - bottom: -40px; - left: 50%; - transform: translateX(-50%); - width: 20px; - height: 20px; - line-height: 21px; - font-size: 10px; - font-weight: 700; - border-radius: 50%; - background-color: #e3eaef; + counter-increment: wizard-counter; + content: counter(wizard-counter); + position: absolute; + bottom: -40px; + left: 50%; + transform: translateX(-50%); + width: 20px; + height: 20px; + line-height: 21px; + font-size: 10px; + font-weight: 700; + border-radius: 50%; + background-color: #e3eaef; } .wizard-steps .wizard-step.wizard-step-active { - box-shadow: 0 2px 6px #acb5f6; - background-color: #6777ef; - color: #fff; + box-shadow: 0 2px 6px #acb5f6; + background-color: #6777ef; + color: #fff; } .wizard-steps .wizard-step.wizard-step-active:before { - background-color: #6777ef; - color: #fff; + background-color: #6777ef; + color: #fff; } .wizard-steps .wizard-step.wizard-step-success { - background-color: #63ed7a; - color: #fff; + background-color: #63ed7a; + color: #fff; } .wizard-steps .wizard-step.wizard-step-success:before { - background-color: #63ed7a; - color: #fff; + background-color: #63ed7a; + color: #fff; } .wizard-steps .wizard-step.wizard-step-danger { - background-color: #fc544b; - color: #fff; + background-color: #fc544b; + color: #fff; } .wizard-steps .wizard-step.wizard-step-danger:before { - background-color: #fc544b; - color: #fff; + background-color: #fc544b; + color: #fff; } .wizard-steps .wizard-step.wizard-step-warning { - background-color: #ffa426; - color: #fff; + background-color: #ffa426; + color: #fff; } .wizard-steps .wizard-step.wizard-step-warning:before { - background-color: #ffa426; - color: #fff; + background-color: #ffa426; + color: #fff; } .wizard-steps .wizard-step.wizard-step-info { - background-color: #3abaf4; - color: #fff; + background-color: #3abaf4; + color: #fff; } .wizard-steps .wizard-step.wizard-step-info:before { - background-color: #3abaf4; - color: #fff; + background-color: #3abaf4; + 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 { - font-size: 34px; - margin-bottom: 15px; +.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; + margin-bottom: 15px; } .wizard-steps .wizard-step .wizard-step-label { - font-size: 10px; - text-transform: uppercase; - letter-spacing: 1px; - font-weight: 700; + font-size: 10px; + text-transform: uppercase; + letter-spacing: 1px; + font-weight: 700; } @media (max-width: 575.98px) { - .wizard-steps { - display: block; - } - .wizard-steps .wizard-step { - margin-bottom: 50px; - } + .wizard-steps { + display: block; + } + .wizard-steps .wizard-step { + margin-bottom: 50px; + } } /*# sourceMappingURL=components.css.map */ diff --git a/public/assets/css/style.css b/public/assets/css/style.css index d23859d..0295f4a 100644 --- a/public/assets/css/style.css +++ b/public/assets/css/style.css @@ -3537,7 +3537,7 @@ body.sidebar-mini .main-sidebar:after { box-shadow: 0 4px 8px rgba(0, 0, 0, 0.03); content: ' '; position: fixed; - background-color: #fff; + background-color: #900c3f; width: 65px; height: 100%; left: 0; diff --git a/resources/views/Admin/layout/main.blade.php b/resources/views/Admin/layout/main.blade.php index e12686a..58f67b3 100644 --- a/resources/views/Admin/layout/main.blade.php +++ b/resources/views/Admin/layout/main.blade.php @@ -33,25 +33,27 @@ + REKBER - - + + - - - - + + + + - - + + - - - + + + - - - - - - + + + + + + + + - - - - - + + + + + - - + + - - - - + + + + - + - - + + - + @endsection diff --git a/resources/views/errors/401.blade.php b/resources/views/errors/401.blade.php new file mode 100644 index 0000000..5c586db --- /dev/null +++ b/resources/views/errors/401.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Unauthorized')) +@section('code', '401') +@section('message', __('Unauthorized')) diff --git a/resources/views/errors/402.blade.php b/resources/views/errors/402.blade.php new file mode 100644 index 0000000..3bc23ef --- /dev/null +++ b/resources/views/errors/402.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Payment Required')) +@section('code', '402') +@section('message', __('Payment Required')) diff --git a/resources/views/errors/403.blade.php b/resources/views/errors/403.blade.php new file mode 100644 index 0000000..a5506f0 --- /dev/null +++ b/resources/views/errors/403.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Forbidden')) +@section('code', '403') +@section('message', __($exception->getMessage() ?: 'Forbidden')) diff --git a/resources/views/errors/404.blade.php b/resources/views/errors/404.blade.php new file mode 100644 index 0000000..7549540 --- /dev/null +++ b/resources/views/errors/404.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Not Found')) +@section('code', '404') +@section('message', __('Not Found')) diff --git a/resources/views/errors/419.blade.php b/resources/views/errors/419.blade.php new file mode 100644 index 0000000..c09216e --- /dev/null +++ b/resources/views/errors/419.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Page Expired')) +@section('code', '419') +@section('message', __('Page Expired')) diff --git a/resources/views/errors/429.blade.php b/resources/views/errors/429.blade.php new file mode 100644 index 0000000..f01b07b --- /dev/null +++ b/resources/views/errors/429.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Too Many Requests')) +@section('code', '429') +@section('message', __('Too Many Requests')) diff --git a/resources/views/errors/500.blade.php b/resources/views/errors/500.blade.php new file mode 100644 index 0000000..d9e95d9 --- /dev/null +++ b/resources/views/errors/500.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Server Error')) +@section('code', '500') +@section('message', __('Server Error')) diff --git a/resources/views/errors/503.blade.php b/resources/views/errors/503.blade.php new file mode 100644 index 0000000..c5a9dde --- /dev/null +++ b/resources/views/errors/503.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Service Unavailable')) +@section('code', '503') +@section('message', __('Service Unavailable')) diff --git a/resources/views/errors/layout.blade.php b/resources/views/errors/layout.blade.php new file mode 100644 index 0000000..019c2cd --- /dev/null +++ b/resources/views/errors/layout.blade.php @@ -0,0 +1,53 @@ + + + + + + + @yield('title') + + + + + +
+
+
+ @yield('message') +
+
+
+ + diff --git a/resources/views/errors/minimal.blade.php b/resources/views/errors/minimal.blade.php new file mode 100644 index 0000000..db69f25 --- /dev/null +++ b/resources/views/errors/minimal.blade.php @@ -0,0 +1,34 @@ + + + + + + + @yield('title') + + + + + + +
+
+
+
+ @yield('code') +
+ +
+ @yield('message') +
+
+
+
+ + diff --git a/resources/views/index.blade.php b/resources/views/index.blade.php index 928bf69..6758763 100644 --- a/resources/views/index.blade.php +++ b/resources/views/index.blade.php @@ -1,4 +1,4 @@ -@extends('Admin.layout.main') +@extends('admin.layout.main') @section('content')
@@ -371,5 +371,5 @@
- @include('Admin.transaction.Tracking') + @include('admin.transaction.tracking') @endsection diff --git a/resources/views/vendor/mail/html/button.blade.php b/resources/views/vendor/mail/html/button.blade.php new file mode 100644 index 0000000..4a9bf7d --- /dev/null +++ b/resources/views/vendor/mail/html/button.blade.php @@ -0,0 +1,24 @@ +@props([ + 'url', + 'color' => 'primary', + 'align' => 'center', +]) + + + + + diff --git a/resources/views/vendor/mail/html/footer.blade.php b/resources/views/vendor/mail/html/footer.blade.php new file mode 100644 index 0000000..3ff41f8 --- /dev/null +++ b/resources/views/vendor/mail/html/footer.blade.php @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/resources/views/vendor/mail/html/header.blade.php b/resources/views/vendor/mail/html/header.blade.php new file mode 100644 index 0000000..56197f8 --- /dev/null +++ b/resources/views/vendor/mail/html/header.blade.php @@ -0,0 +1,12 @@ +@props(['url']) + + + +@if (trim($slot) === 'Laravel') + +@else +{{ $slot }} +@endif + + + diff --git a/resources/views/vendor/mail/html/layout.blade.php b/resources/views/vendor/mail/html/layout.blade.php new file mode 100644 index 0000000..e55f6a6 --- /dev/null +++ b/resources/views/vendor/mail/html/layout.blade.php @@ -0,0 +1,57 @@ + + + +{{ config('app.name') }} + + + + + + + + + + + + + + + diff --git a/resources/views/vendor/mail/html/message.blade.php b/resources/views/vendor/mail/html/message.blade.php new file mode 100644 index 0000000..f272460 --- /dev/null +++ b/resources/views/vendor/mail/html/message.blade.php @@ -0,0 +1,27 @@ + +{{-- Header --}} + + +{{ config('app.name') }} + + + +{{-- Body --}} +{{ $slot }} + +{{-- Subcopy --}} +@isset($subcopy) + + +{{ $subcopy }} + + +@endisset + +{{-- Footer --}} + + +© {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.') + + + diff --git a/resources/views/vendor/mail/html/panel.blade.php b/resources/views/vendor/mail/html/panel.blade.php new file mode 100644 index 0000000..2975a60 --- /dev/null +++ b/resources/views/vendor/mail/html/panel.blade.php @@ -0,0 +1,14 @@ + + + + + + diff --git a/resources/views/vendor/mail/html/subcopy.blade.php b/resources/views/vendor/mail/html/subcopy.blade.php new file mode 100644 index 0000000..790ce6c --- /dev/null +++ b/resources/views/vendor/mail/html/subcopy.blade.php @@ -0,0 +1,7 @@ + + + + + diff --git a/resources/views/vendor/mail/html/table.blade.php b/resources/views/vendor/mail/html/table.blade.php new file mode 100644 index 0000000..a5f3348 --- /dev/null +++ b/resources/views/vendor/mail/html/table.blade.php @@ -0,0 +1,3 @@ +
+{{ Illuminate\Mail\Markdown::parse($slot) }} +
diff --git a/resources/views/vendor/mail/html/themes/default.css b/resources/views/vendor/mail/html/themes/default.css new file mode 100644 index 0000000..2483b11 --- /dev/null +++ b/resources/views/vendor/mail/html/themes/default.css @@ -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; +} diff --git a/resources/views/vendor/mail/text/button.blade.php b/resources/views/vendor/mail/text/button.blade.php new file mode 100644 index 0000000..97444eb --- /dev/null +++ b/resources/views/vendor/mail/text/button.blade.php @@ -0,0 +1 @@ +{{ $slot }}: {{ $url }} diff --git a/resources/views/vendor/mail/text/footer.blade.php b/resources/views/vendor/mail/text/footer.blade.php new file mode 100644 index 0000000..3338f62 --- /dev/null +++ b/resources/views/vendor/mail/text/footer.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/mail/text/header.blade.php b/resources/views/vendor/mail/text/header.blade.php new file mode 100644 index 0000000..aaa3e57 --- /dev/null +++ b/resources/views/vendor/mail/text/header.blade.php @@ -0,0 +1 @@ +[{{ $slot }}]({{ $url }}) diff --git a/resources/views/vendor/mail/text/layout.blade.php b/resources/views/vendor/mail/text/layout.blade.php new file mode 100644 index 0000000..ec58e83 --- /dev/null +++ b/resources/views/vendor/mail/text/layout.blade.php @@ -0,0 +1,9 @@ +{!! strip_tags($header ?? '') !!} + +{!! strip_tags($slot) !!} +@isset($subcopy) + +{!! strip_tags($subcopy) !!} +@endisset + +{!! strip_tags($footer ?? '') !!} diff --git a/resources/views/vendor/mail/text/message.blade.php b/resources/views/vendor/mail/text/message.blade.php new file mode 100644 index 0000000..80bce21 --- /dev/null +++ b/resources/views/vendor/mail/text/message.blade.php @@ -0,0 +1,27 @@ + + {{-- Header --}} + + + {{ config('app.name') }} + + + + {{-- Body --}} + {{ $slot }} + + {{-- Subcopy --}} + @isset($subcopy) + + + {{ $subcopy }} + + + @endisset + + {{-- Footer --}} + + + © {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.') + + + diff --git a/resources/views/vendor/mail/text/panel.blade.php b/resources/views/vendor/mail/text/panel.blade.php new file mode 100644 index 0000000..3338f62 --- /dev/null +++ b/resources/views/vendor/mail/text/panel.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/mail/text/subcopy.blade.php b/resources/views/vendor/mail/text/subcopy.blade.php new file mode 100644 index 0000000..3338f62 --- /dev/null +++ b/resources/views/vendor/mail/text/subcopy.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/mail/text/table.blade.php b/resources/views/vendor/mail/text/table.blade.php new file mode 100644 index 0000000..3338f62 --- /dev/null +++ b/resources/views/vendor/mail/text/table.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/notifications/email.blade.php b/resources/views/vendor/notifications/email.blade.php new file mode 100644 index 0000000..678e259 --- /dev/null +++ b/resources/views/vendor/notifications/email.blade.php @@ -0,0 +1,58 @@ + +{{-- 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) + $level, + default => 'primary', + }; +?> + +{{ $actionText }} + +@endisset + +{{-- Outro Lines --}} +@foreach ($outroLines as $line) +{{ $line }} + +@endforeach + +{{-- Salutation --}} +@if (! empty($salutation)) +{{ $salutation }} +@else +@lang('Regards'),
+{{ config('app.name') }} +@endif + +{{-- Subcopy --}} +@isset($actionText) + +@lang( + "If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\n". + 'into your web browser:', + [ + 'actionText' => $actionText, + ] +) [{{ $displayableActionUrl }}]({{ $actionUrl }}) + +@endisset +
diff --git a/routes/web.php b/routes/web.php index 5f6bc1f..0dcb79d 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,12 +1,19 @@ 'Jilhan Haura', - "transaction"=>transaction::allTransactions() + "transaction"=>Transactions::allTransactions() ]); -}); +})->name('index'); Route::get('/detail_transaction', function () { - return view('Admin/transaction/detail-transaction',[ + return view('admin/transaction/detail-transaction',[ 'name'=>'Jilhn Haura', - 'detail_transaction' => transaction::allDetailTransactions() + 'detail_transaction' => Transactions::allDetailTransactions() ]); -}); -Route::get('/history_transaction', function () { - return view('Admin/transaction/History_Transaction',[ - 'name'=>'Jilhan Haura', - "transaction"=> transaction::allTransactions() - ]); -}); -Route::get('/history_refund', function () { - return view('Admin/refund/history-refund',[ - 'name'=>'Jilhan Haura', - "history_refund" => Refund::HistoryRefund() - ]); -}); -Route::get('/refund',[RefundController::class,'index']); +})->name('transaction.detail'); +// Route::get('/history_transaction', function () { +// return view('admin/transaction/History_Transaction',[ +// 'name'=>'Jilhan Haura', +// "transaction"=> Transactions::allTransactions() +// ]); +// }); +// Route::get('/history_refund', function () { +// return view('admin/refund/history-refund',[ +// 'name'=>'Jilhan Haura', +// "history_refund" => Refunds::HistoryRefund() +// ]); +// }); +// Route::get('/refund',[RefundController::class,'index']); Route::get('/detail_refund',function() { - return view('Admin/refund/detail-refund',[ + return view('admin/refund/detail-refund',[ 'name'=>'Jilhan Haura', - "detail_refund"=> Refund::DetailRefund() + "detail_refund"=> Refunds::DetailRefund() ]); -}); +})->name('refund.detail'); Route::get('/next_detail_refund',function() { - return view('Admin/refund/next-detail-refund',[ + return view('admin/refund/next-detail-refund',[ 'name'=>"Jilhan Haura" ]); }); -Route::get('/list_user',function() { - return view('Admin/users/list-user',[ - 'name'=>"Jilhan Haura", - "list_users" => Users::listUsers() - ]); -}); -Route::get('/detail-user',function() { - return view('Admin/users/detail-user',[ - 'name'=>"Jilhan Haura", - "detail_user" => Users::detailUser() - ]); -}); +// Route::get('/list_user',function() { +// return view('Admin/users/list-user',[ +// 'name'=>"Jilhan Haura", +// "list_users" => Users::listUsers() +// ]); +// }); +// Route::get('/detail-user',function() { +// return view('Admin/users/detail-user',[ +// 'name'=>"Jilhan Haura", +// "detail_user" => Users::detailUser() +// ]); +// }); Route::get('/profile',function() { - return view('Admin/profile/index',[ + return view('admin/profile/index',[ 'name'=>"Jilhan Haura", ]); }); -Route::get('/setting',function() { - return view('Admin/setting/index',[ - 'name'=>"Jilhan Haura", - "setting" => Setting:: HistorySetting() - ]); -}); +// Route::get('/setting',function() { +// return view('admin/setting/index',[ +// 'name'=>"Jilhan Haura", +// "setting" => Settings:: HistorySetting() +// ]); +// }); // -------------------------------------------------------------------------------------------- -Route::get('/User', function () { - return view('User/index',[ - 'name'=>'Jilhan Haura', - "transaction"=>transaction::allTransactions() - ]); -}); \ No newline at end of file +// Route::get('/Ini', function () { +// return view('user/index',[ +// 'name'=>'Jilhan Haura', +// "transaction"=>Transactions::allTransactions() +// ]); +// }); + +Route::resource('user', UserController::class); + +Route::resource('transaction', TransactionController::class); + +Route::resource('setting',SettingController::class); + +Route::resource('refund',RefundController::class); diff --git a/sail b/sail new file mode 100644 index 0000000..1511f67 --- /dev/null +++ b/sail @@ -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[@]}" From cf169944974642667d2dafefb40827df299d33a6 Mon Sep 17 00:00:00 2001 From: Raihan Surya Date: Mon, 4 Sep 2023 15:46:15 +0700 Subject: [PATCH 03/16] Penambahan Controller User dan Admin --- .../Controllers/API/LoginApiController.php | 127 ++++++ .../Controllers/Login/LoginController.php | 209 ++++++++++ .../RefundDescriptionController.php | 65 +++ .../TransactionDescriptionController.php | 65 +++ app/Http/Controllers/User/UserTransaction.php | 65 +++ app/Models/Contact.php | 20 + app/Models/Refund.php | 18 + app/Models/RefundDescription.php | 28 ++ app/Models/Setting.php | 12 + app/Models/TransactionDescription.php | 33 ++ app/Models/User.php | 11 + app/Models/transaction.php | 47 +++ database/factories/UserFactory.php | 4 +- .../2014_10_12_000000_create_users_table.php | 6 +- ...08_01_073859_create_transactions_table.php | 43 ++ ...2023_08_16_044527_create_refunds_table.php | 14 +- ...023_08_27_074453_create_settings_table.php | 4 + ..._create_transaction_descriptions_table.php | 34 ++ ...3526_create_refund_descriptions_table.php} | 9 +- database/seeders/DatabaseSeeder.php | 24 +- public/assets/css/main.css | 54 +++ public/assets/js/main.js | 321 +++++++++++++++ resources/views/{ => Admin}/index.blade.php | 0 resources/views/Admin/layout/main.blade.php | 2 +- .../views/User/contact/add-contact.blade.php | 45 +++ .../views/User/contact/contact.blade.php | 63 +++ .../User/contact/delete-contact.blade.php | 38 ++ .../User/contact/detail-contact.blade.php | 62 +++ resources/views/User/index.blade.php | 185 +++------ resources/views/User/layout/header.blade.php | 6 +- resources/views/User/layout/main.blade.php | 172 ++++---- resources/views/User/layout/sidebar.blade.php | 46 ++- resources/views/User/profile/index.blade.php | 377 ++++++++++++++++++ .../views/User/refund/detail-refund.blade.php | 56 +++ .../User/refund/history-refund.blade.php | 53 +++ resources/views/User/refund/refund.blade.php | 74 ++++ .../Pembeli/bayar-transaction.blade.php | 33 ++ .../Pembeli/detail-transaction.blade.php | 289 ++++++++++++++ .../Pembeli/end-transaction.blade.php | 16 + .../Pembeli/invoice-transaction.blade.php | 129 ++++++ .../Pembeli/new-transaction.blade.php | 133 ++++++ .../Pembeli/refund-transaction.blade.php | 66 +++ .../Pembeli/transaction-pembeli.blade.php | 93 +++++ .../transaction/Penjual/tracking.blade.php | 116 ++++++ .../Penjual/transaction-penjual.blade.php | 80 ++++ routes/api.php | 17 + routes/web.php | 33 +- 47 files changed, 3133 insertions(+), 264 deletions(-) create mode 100644 app/Http/Controllers/API/LoginApiController.php create mode 100644 app/Http/Controllers/Login/LoginController.php create mode 100644 app/Http/Controllers/RefundDescriptionController.php create mode 100644 app/Http/Controllers/TransactionDescriptionController.php create mode 100644 app/Http/Controllers/User/UserTransaction.php create mode 100644 app/Models/RefundDescription.php create mode 100644 app/Models/TransactionDescription.php create mode 100644 database/migrations/2023_08_01_073859_create_transactions_table.php create mode 100644 database/migrations/2023_09_04_022513_create_transaction_descriptions_table.php rename database/migrations/{2023_09_01_073859_create_transactions_table.php => 2023_09_04_023526_create_refund_descriptions_table.php} (56%) create mode 100644 public/assets/css/main.css create mode 100644 public/assets/js/main.js rename resources/views/{ => Admin}/index.blade.php (100%) create mode 100644 resources/views/User/contact/add-contact.blade.php create mode 100644 resources/views/User/contact/contact.blade.php create mode 100644 resources/views/User/contact/delete-contact.blade.php create mode 100644 resources/views/User/contact/detail-contact.blade.php create mode 100644 resources/views/User/profile/index.blade.php create mode 100644 resources/views/User/refund/detail-refund.blade.php create mode 100644 resources/views/User/refund/history-refund.blade.php create mode 100644 resources/views/User/refund/refund.blade.php create mode 100644 resources/views/User/transaction/Pembeli/bayar-transaction.blade.php create mode 100644 resources/views/User/transaction/Pembeli/detail-transaction.blade.php create mode 100644 resources/views/User/transaction/Pembeli/end-transaction.blade.php create mode 100644 resources/views/User/transaction/Pembeli/invoice-transaction.blade.php create mode 100644 resources/views/User/transaction/Pembeli/new-transaction.blade.php create mode 100644 resources/views/User/transaction/Pembeli/refund-transaction.blade.php create mode 100644 resources/views/User/transaction/Pembeli/transaction-pembeli.blade.php create mode 100644 resources/views/User/transaction/Penjual/tracking.blade.php create mode 100644 resources/views/User/transaction/Penjual/transaction-penjual.blade.php diff --git a/app/Http/Controllers/API/LoginApiController.php b/app/Http/Controllers/API/LoginApiController.php new file mode 100644 index 0000000..bdff943 --- /dev/null +++ b/app/Http/Controllers/API/LoginApiController.php @@ -0,0 +1,127 @@ +middleware('auth:api', ['except' => ['login', 'register', 'hai']]); + } + + /** + * Get a JWT via given credentials. + * + * @return \Illuminate\Http\JsonResponse + */ + public function login() + { + // $request->validate([ + // 'email' => 'required|string|email', + // 'password' => 'required', + // ]); + + $credentials = request(['email', 'password']); + + if (!($token = auth()->attempt($credentials))) { + return response()->json(['error' => 'Unauthorized'], 401); + } + + return $this->respondWithToken($token); + } + + /** + * Get the authenticated User. + * + * @return \Illuminate\Http\JsonResponse + */ + public function me() + { + return response()->json(Auth::user()); + } + + public function hai() + { + return response()->json([ + 'message' => 'Hello from API', + ]); + } + + /** + * Log the user out (Invalidate the token). + * + * @return \Illuminate\Http\JsonResponse + */ + public function logout() + { + auth()->logout(); + + return response()->json(['message' => 'Successfully logged out']); + } + + /** + * Refresh a token. + * + * @return \Illuminate\Http\JsonResponse + */ + public function refresh() + { + return $this->respondWithToken(Auth::refresh()); + } + + /** + * Get the token array structure. + * + * @param string $token + * + * @return \Illuminate\Http\JsonResponse + */ + protected function respondWithToken($token) + { + return response()->json([ + 'user' => auth()->user(), + 'access_token' => $token, + 'token_type' => 'bearer', + 'expires_in' => Auth::factory()->getTTL() * 60, + // 'status' => auth()->check(), + ]); + } + + public function register(Request $request) + { + $request->validate([ + 'name' => 'required|string|max:255', + 'email' => 'required|string|email|unique:users', + 'password' => 'required|string|min:8', + ]); + + $user = User::create([ + 'name' => $request->name, + 'email' => $request->email, + 'password' => Hash::make($request->password), + ]); + + return response()->json([ + 'message' => 'User created successfully', + 'user' => $user, + ]); + } + + // public function check() + // { + // return response()->json([ + // 'status' => auth()->check(), + // ]); + // } +} diff --git a/app/Http/Controllers/Login/LoginController.php b/app/Http/Controllers/Login/LoginController.php new file mode 100644 index 0000000..adae662 --- /dev/null +++ b/app/Http/Controllers/Login/LoginController.php @@ -0,0 +1,209 @@ +middleware('auth:api', ['except' => ['login', 'authenticate', 'register', 'hai']]); + } + + public function login() + { + return view('index'); + } + + /** + * Get a JWT via given credentials. + * + * @return \Illuminate\Http\JsonResponse + */ + public function authenticate(Request $request) + { + $credentials = $request->validate([ + 'email' => ['required', 'email'], + 'password' => ['required', 'min:8'], + ]); + + if (Auth::attempt($credentials)) { + if (Auth::user()->status == 'Finished') { + $request->session()->regenerate(); + + if (ucwords(Auth::user()->role) == 'Admin') { + return redirect()->intended('/dashboard'); + } else { + return redirect()->intended('/'); + } + } else { + Session::flash('message', 'Akun Tidak Ditemukan'); + return redirect()->back(); + } + } + + return redirect()->back() + ->withErrors([ + 'email' => 'Email dengan'.$credentials['email'].' tidak tersedia.', + ]) + ->onlyInput('email'); + } + + public function hai() + { + echo 'sukses'; + } + + /** + * Log the user out (Invalidate the token). + * + * @return \Illuminate\Http\JsonResponse + */ + public function logout(Request $request) + { + Auth::logout(); + + $request->session()->invalidate(); + + $request->session()->regenerateToken(); + + return redirect()->route('login'); + } + + public function registerStore(Request $request) + { + $validatedData = $request->validate([ + 'nama' => 'required|max:255', + 'email' => 'required|string|email|unique:users', + 'password' => 'required|string|min:8', + 'nohp' => 'required', + 'nik' => 'required', + 'alamat' => 'required', + 'foto_ktp' => 'required|image|mimes:jpeg,svg,png,jpg', + 'foto_wajah' => 'required|image|mimes:jpeg,svg,png,jpg', + 'foto_profil' => 'image|mimes:jpeg,svg,png,jpg', + 'gender' => 'required', + ]); + + // $validatedData['email_verified_at'] = now(); + + $fotoKTP = ''; + $fotoWajah = ''; + $fotoProfil =''; + if ($request->hasFile('foto_ktp') && $request->hasFile('foto_wajah')) { + // $namaGambarOri = $request->file('foto-gambar')->getClientOriginalName(); + // $namaGambar = round(microtime(true) * 1000) . '-' . str_replace(' ', '-', $namaGambarOri); + $tipeFotoKtp = $request->file('foto_ktp')->getClientMimeType(); + $tipeFotoWajah = $request->file('foto_wajah')->getClientMimeType(); + $fotoKTP = 'Foto-KTP-' . $request->nama . '.' . $tipeFotoKtp; + $fotoWajah = 'Foto-Wajah' . $request->nama . '.' . $tipeFotoWajah; + // Simpan foto + $request->file('foto-ktp')->storeAs('public/foto-ktp', $fotoKTP); + $request->file('foto-wajah')->storeAs('public/foto-wajah', $fotoWajah); + } + + if($request->hasFile('foto_profil')){ + $tipeFotoProfil = $request->file('foto_profil')->getClientMimeType(); + $fotoProfil = 'Foto-Profil-' . $request->nama . '.' . $tipeFotoProfil; + // Simpan foto + $request->file('foto-profil')->storeAs('public/foto-profil', $fotoProfil); + } + + //OCR + try { + $imagePath = storage_path('foto-ktp/' . $validatedData['foto-ktp']); + + $image = Image::make($imagePath); + + $image->greyscale(); // Convert to grayscale + $image->contrast(10); // Increase contrast, adjust the value as needed + + $preprocessedImagePath = storage_path('preprocessed_image.jpg'); + $image->save($preprocessedImagePath); + + $result = (new TesseractOCR($preprocessedImagePath))->run(); + + // (5) Normalize + + $lines = explode("\n", $result); + $nikOCR = ''; + $nikInputan = $request->nik; + $namaInputan = $request->nama; + + foreach ($lines as $line) { + // normalize NIK + if (strpos($line, 'NIK') !== false) { + $nikOCR = preg_replace('/[^0-9]/', '', $line); + } + + // Mencari nama + if (strpos($line, $namaInputan) !== false) { + $namaOCR = trim(substr($line, strpos($line, ':') + 1)); + } + } + + //Selesai + + $percent = 0.0; + + if (similar_text($nikInputan, $nikOCR, $percent) >= 70 && similar_text($namaOCR, $namaOCR, $percent) >= 70) { + $validatedData['status'] = 'Progress'; + } else { + $validatedData['status'] = 'Pending'; + } + } catch (\Exception $e) { + $validatedData['status'] = 'Pending'; + } + //OCR + + //Deteksi wajah belum + + $validatedData['remember_token'] = Str::random(10); + $validatedData['password'] = Hash::make($request->password); + User::create([ + 'id' => Str::uuid(), + 'nama' => $validatedData['nama'], + 'email' => $validatedData['email'], + 'email_verified_at' => null, + 'password' => $validatedData['password'], + 'role' => 'User', + 'nohp' => $validatedData['nohp'], + 'nik' => $validatedData['nik'], + 'alamat' => $validatedData['alamat'], + 'foto_ktp' => $fotoKTP, + 'foto_wajah' => $fotoWajah, + 'status' => $validatedData['status'], + 'gender' => $validatedData['gender'], + 'remember_token' => Str::random(10), + ]); + return redirect('/login')->with('daftar', 'Daftar berhasil, silahkan login'); + } + + public function register() + { + return view('index'); + } + + public function approveUser(Request $request) + { + } + + public function deniedUser(Request $request) + { + } +} diff --git a/app/Http/Controllers/RefundDescriptionController.php b/app/Http/Controllers/RefundDescriptionController.php new file mode 100644 index 0000000..f7a69c5 --- /dev/null +++ b/app/Http/Controllers/RefundDescriptionController.php @@ -0,0 +1,65 @@ + + */ + protected $fillable = [ + 'pemilik_kontak', + 'relasi_kontak', + ]; + + //Relasi + public function pemilik_kontak(){ + return $this->belongsTo(User::class, 'email', 'pemilik_kontak'); + } + + public function relasi_kontak(){ + return $this->belongsTo(User::class, 'email', 'relasi_kontak'); + } + //Relasi } diff --git a/app/Models/Refund.php b/app/Models/Refund.php index 42ab336..1748f78 100644 --- a/app/Models/Refund.php +++ b/app/Models/Refund.php @@ -8,4 +8,22 @@ use Illuminate\Database\Eloquent\Model; class Refund extends Model { use HasFactory; + + /** + * The attributes that are mass assignable. + * + * @var array + */ + protected $fillable = [ + 'order_id', + 'total', + 'due_date', + 'status', + ]; + + //Relasi + public function orders(){ + return $this->belongsTo(Transaction::class, 'order_id', 'order_id'); + } + //Relasi } diff --git a/app/Models/RefundDescription.php b/app/Models/RefundDescription.php new file mode 100644 index 0000000..258393c --- /dev/null +++ b/app/Models/RefundDescription.php @@ -0,0 +1,28 @@ + + */ + protected $fillable = [ + 'refund_id', + 'filename', + 'type', + ]; + + //Relasi + public function refunds(){ + return $this->belongsTo(Refund::class, 'refund_id', 'id'); + } + //Relasi +} diff --git a/app/Models/Setting.php b/app/Models/Setting.php index 0fe60af..914ce0c 100644 --- a/app/Models/Setting.php +++ b/app/Models/Setting.php @@ -8,4 +8,16 @@ use Illuminate\Database\Eloquent\Model; class Setting extends Model { use HasFactory; + + /** + * The attributes that are mass assignable. + * + * @var array + */ + protected $fillable = [ + 'bulan', + 'tahun', + 'diskon', + 'status', + ]; } diff --git a/app/Models/TransactionDescription.php b/app/Models/TransactionDescription.php new file mode 100644 index 0000000..b2dd450 --- /dev/null +++ b/app/Models/TransactionDescription.php @@ -0,0 +1,33 @@ + + */ + protected $fillable = [ + 'order_id', + 'user', + 'judul', + 'deskripsi' + ]; + + //Relasi + public function order(){ + return $this->belongsTo(Transaction::class, 'order_id', 'order_id'); + } + + public function user(){ + return $this->belongsTo(User::class, 'email', 'user'); + } + //Relasi +} diff --git a/app/Models/User.php b/app/Models/User.php index 275f98f..6d5be26 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -26,6 +26,7 @@ class User extends Authenticatable 'role_id', 'alamat', 'foto_ktp', + 'foto_wajah', 'nohp', 'nik', 'gender', @@ -77,6 +78,7 @@ class User extends Authenticatable //JWT + //Relasi public function pemilik_kontak(){ return $this->hasMany(Contact::class, 'email', 'pemilik_kontak'); @@ -85,5 +87,14 @@ class User extends Authenticatable public function relasi_kontak(){ return $this->hasMany(Contact::class, 'email', 'relasi_kontak'); } + + public function pembeli(){ + return $this->hasMany(Transaction::class, 'email', 'pembeli'); + } + + public function penjual(){ + return $this->hasMany(Transaction::class, 'email', 'penjual'); + } //Relasi + } diff --git a/app/Models/transaction.php b/app/Models/transaction.php index b6f6bb0..876a965 100644 --- a/app/Models/transaction.php +++ b/app/Models/transaction.php @@ -8,4 +8,51 @@ use Illuminate\Database\Eloquent\Model; class Transaction extends Model { use HasFactory; + + /** + * The attributes that are mass assignable. + * + * @var array + */ + protected $fillable = [ + 'pembeli', + 'penjual', + 'judul_transaksi', + 'deskripsi transaksi', + 'persentase_keuntungan', + 'total_keuntungan', + 'harga', + 'biaya_admin', + 'total_harga', + 'signature_key', + 'metode_pembayaran', + 'status', + 'batas_pembayaran', + 'batas_pengiriman_barang', + ]; + + /** + * The attributes that should be cast. + * + * @var array + */ + protected $casts = [ + 'batas_pembayaran' => 'datetime', + 'batas_pengiriman_barang' => 'datetime', + 'order_id' => 'string', + ]; + + //Relasi + public function pembeli(){ + return $this->belongsTo(User::class, 'email', 'pembeli'); + } + + public function penjual(){ + return $this->belongsTo(User::class, 'email', 'penjual'); + } + + public function refunds(){ + return $this->hasMany(Refund::class, 'order_id', 'order_id'); + } + //Relasi } diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php index 96256d6..919963d 100644 --- a/database/factories/UserFactory.php +++ b/database/factories/UserFactory.php @@ -24,8 +24,8 @@ class UserFactory extends Factory 'email_verified_at' => now(), 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password 'remember_token' => Str::random(10), - 'role' => $this->faker->randomElement(['Admin','User']), - 'nik' => $this->faker->nik, + 'role' => 'User', + 'nik' => $this->faker->nik($this->faker->randomElement(['male', 'female']),$this->faker->dateTimeBetween('-65 years', '-18 years')), 'alamat'=> $this->faker->address, 'nohp'=> $this->faker->phoneNumber(), 'status'=> $this->faker->randomElement(['Progress', 'Finished']), diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index 2c435f8..4d16b72 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -17,13 +17,15 @@ return new class extends Migration $table->string('email',50)->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); - $table->string('role'); + $table->string('role',10); $table->string('nohp',20); $table->string('nik',20); $table->string('alamat',255); $table->string('foto_ktp')->nullable(); + $table->string('foto_wajah')->nullable(); + $table->string('foto_profil')->nullable(); $table->string('status',10); - $table->string('gender'); + $table->string('gender',15); $table->rememberToken(); $table->timestamps(); }); diff --git a/database/migrations/2023_08_01_073859_create_transactions_table.php b/database/migrations/2023_08_01_073859_create_transactions_table.php new file mode 100644 index 0000000..498d4ec --- /dev/null +++ b/database/migrations/2023_08_01_073859_create_transactions_table.php @@ -0,0 +1,43 @@ +uuid('order_id')->primary(); //order_id + $table->string('pembeli'); // untuk customer_details + $table->string('penjual'); //merchant_name + $table->string('judul_transaksi'); // item_details -> item_name + $table->string('deskripsi_transaksi'); + $table->double('persentase_keuntungan'); // persentase keuntungan + $table->double('total_keuntungan'); // perolehan keuntungan + $table->double('harga'); // harga sebelum penambahan + $table->double('biaya_admin'); // biaya tambahan + $table->double('total_harga'); // gross amount + $table->string('signature_key'); + $table->string('metode_pembayaran'); + $table->string('status'); // transaction_status + $table->timestamp('batas_pembayaran'); + $table->timestamp('batas_pengiriman_barang'); + $table->timestamps(); + $table->foreign('pembeli')->on('users')->references('email'); + $table->foreign('penjual')->on('users')->references('email'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('transactions'); + } +}; diff --git a/database/migrations/2023_08_16_044527_create_refunds_table.php b/database/migrations/2023_08_16_044527_create_refunds_table.php index 4dbb28f..80f1aad 100644 --- a/database/migrations/2023_08_16_044527_create_refunds_table.php +++ b/database/migrations/2023_08_16_044527_create_refunds_table.php @@ -13,12 +13,12 @@ return new class extends Migration { Schema::create('refunds', function (Blueprint $table) { $table->id(); - $table->integer('orderId'); - $table->string('customerName'); - $table->string('sellerName'); - $table->string('total'); - $table->timestamp('dueDate'); - $table->string('status'); + $table->foreignUuid('order_id'); + $table->double('total',10); + $table->timestamp('due_date'); + $table->string('status',20); + + $table->foreign('order_id')->on('transactions')->references('order_id'); }); } @@ -29,4 +29,4 @@ return new class extends Migration { Schema::dropIfExists('refunds'); } -}; \ No newline at end of file +}; diff --git a/database/migrations/2023_08_27_074453_create_settings_table.php b/database/migrations/2023_08_27_074453_create_settings_table.php index 3f09f88..adbd1db 100644 --- a/database/migrations/2023_08_27_074453_create_settings_table.php +++ b/database/migrations/2023_08_27_074453_create_settings_table.php @@ -13,6 +13,10 @@ return new class extends Migration { Schema::create('settings', function (Blueprint $table) { $table->id(); + $table->string('bulan',20); + $table->string('tahun',5); + $table->double('diskon',5); + $table->string('status',15); $table->timestamps(); }); } diff --git a/database/migrations/2023_09_04_022513_create_transaction_descriptions_table.php b/database/migrations/2023_09_04_022513_create_transaction_descriptions_table.php new file mode 100644 index 0000000..a5822f7 --- /dev/null +++ b/database/migrations/2023_09_04_022513_create_transaction_descriptions_table.php @@ -0,0 +1,34 @@ +id(); + $table->foreignUuid('order_id'); + $table->string('user'); + $table->string('judul'); + $table->string('deskripsi'); + $table->timestamps(); + + $table->foreign('order_id')->on('transactions')->references('order_id'); + $table->foreign('user')->on('users')->references('email'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('transaction_descriptions'); + } +}; diff --git a/database/migrations/2023_09_01_073859_create_transactions_table.php b/database/migrations/2023_09_04_023526_create_refund_descriptions_table.php similarity index 56% rename from database/migrations/2023_09_01_073859_create_transactions_table.php rename to database/migrations/2023_09_04_023526_create_refund_descriptions_table.php index 30e302a..6481bc8 100644 --- a/database/migrations/2023_09_01_073859_create_transactions_table.php +++ b/database/migrations/2023_09_04_023526_create_refund_descriptions_table.php @@ -11,9 +11,14 @@ return new class extends Migration */ public function up(): void { - Schema::create('transactions', function (Blueprint $table) { + Schema::create('refund_descriptions', function (Blueprint $table) { $table->id(); + $table->foreignId('refund_id'); + $table->string('filename'); + $table->string('type'); $table->timestamps(); + + $table->foreign('refund_id')->on('refunds')->references('id'); }); } @@ -22,6 +27,6 @@ return new class extends Migration */ public function down(): void { - Schema::dropIfExists('transactions'); + Schema::dropIfExists('refund_descriptions'); } }; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 2218bde..9bc2e50 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -5,6 +5,9 @@ namespace Database\Seeders; // use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; use App\Models\User; +use Illuminate\Support\Str; +use Faker\Factory as FakerFactory; +use Faker\Provider\id_ID\Person as Person; class DatabaseSeeder extends Seeder { @@ -13,11 +16,24 @@ class DatabaseSeeder extends Seeder */ public function run(): void { + $faker = FakerFactory::create(); + $faker->addProvider(new Person($faker)); + + User::factory()->create([ + 'id' => Str::uuid(), + 'nama' => $faker->name, + 'email' => fake()->unique()->safeEmail(), + 'email_verified_at' => now(), + 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password + 'remember_token' => Str::random(10), + 'role' => 'Admin', + 'nik' => $faker->nik($faker->randomElement(['male','female']), $faker->dateTimeBetween('-65 years', '-18 years')), + 'alamat'=> $faker->address, + 'nohp'=> $faker->phoneNumber(), + 'status'=> $faker->randomElement(['Progress', 'Finished']), + 'gender' => $faker->randomElement(['Laki-laki', 'Perempuan']), + ]); User::factory(100)->create(); - // \App\Models\User::factory()->create([ - // 'name' => 'Test User', - // 'email' => 'test@example.com', - // ]); } } diff --git a/public/assets/css/main.css b/public/assets/css/main.css new file mode 100644 index 0000000..e29ef20 --- /dev/null +++ b/public/assets/css/main.css @@ -0,0 +1,54 @@ + +/*-------------------------------------------------------------- +# Profie Page +--------------------------------------------------------------*/ +.profile .profile-card img { + max-width: 120px; +} + +.profile .profile-card h2 { + font-size: 24px; + font-weight: 700; + color: #2c384e; + margin: 10px 0 0 0; +} + +.profile .profile-card h3 { + font-size: 18px; +} + +.profile .profile-card .social-links a { + font-size: 20px; + display: inline-block; + color: rgba(1, 41, 112, 0.5); + line-height: 0; + margin-right: 10px; + transition: 0.3s; +} + +.profile .profile-card .social-links a:hover { + color: #012970; +} + +.profile .profile-overview .row { + margin-bottom: 20px; + font-size: 15px; +} + +.profile .profile-overview .card-title { + color: #012970; +} + +.profile .profile-overview .label { + font-weight: 600; + color: rgba(1, 41, 112, 0.6); +} + +.profile .profile-edit label { + font-weight: 600; + color: rgba(1, 41, 112, 0.6); +} + +.profile .profile-edit img { + max-width: 120px; +} diff --git a/public/assets/js/main.js b/public/assets/js/main.js new file mode 100644 index 0000000..5cdf267 --- /dev/null +++ b/public/assets/js/main.js @@ -0,0 +1,321 @@ +/** +* Template Name: NiceAdmin +* Updated: Aug 30 2023 with Bootstrap v5.3.1 +* Template URL: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/ +* Author: BootstrapMade.com +* License: https://bootstrapmade.com/license/ +*/ +(function() { + "use strict"; + + /** + * Easy selector helper function + */ + const select = (el, all = false) => { + el = el.trim() + if (all) { + return [...document.querySelectorAll(el)] + } else { + return document.querySelector(el) + } + } + + /** + * Easy event listener function + */ + const on = (type, el, listener, all = false) => { + if (all) { + select(el, all).forEach(e => e.addEventListener(type, listener)) + } else { + select(el, all).addEventListener(type, listener) + } + } + + /** + * Easy on scroll event listener + */ + const onscroll = (el, listener) => { + el.addEventListener('scroll', listener) + } + + /** + * Sidebar toggle + */ + if (select('.toggle-sidebar-btn')) { + on('click', '.toggle-sidebar-btn', function(e) { + select('body').classList.toggle('toggle-sidebar') + }) + } + + /** + * Search bar toggle + */ + if (select('.search-bar-toggle')) { + on('click', '.search-bar-toggle', function(e) { + select('.search-bar').classList.toggle('search-bar-show') + }) + } + + /** + * Navbar links active state on scroll + */ + let navbarlinks = select('#navbar .scrollto', true) + const navbarlinksActive = () => { + let position = window.scrollY + 200 + navbarlinks.forEach(navbarlink => { + if (!navbarlink.hash) return + let section = select(navbarlink.hash) + if (!section) return + if (position >= section.offsetTop && position <= (section.offsetTop + section.offsetHeight)) { + navbarlink.classList.add('active') + } else { + navbarlink.classList.remove('active') + } + }) + } + window.addEventListener('load', navbarlinksActive) + onscroll(document, navbarlinksActive) + + /** + * Toggle .header-scrolled class to #header when page is scrolled + */ + let selectHeader = select('#header') + if (selectHeader) { + const headerScrolled = () => { + if (window.scrollY > 100) { + selectHeader.classList.add('header-scrolled') + } else { + selectHeader.classList.remove('header-scrolled') + } + } + window.addEventListener('load', headerScrolled) + onscroll(document, headerScrolled) + } + + /** + * Back to top button + */ + let backtotop = select('.back-to-top') + if (backtotop) { + const toggleBacktotop = () => { + if (window.scrollY > 100) { + backtotop.classList.add('active') + } else { + backtotop.classList.remove('active') + } + } + window.addEventListener('load', toggleBacktotop) + onscroll(document, toggleBacktotop) + } + + /** + * Initiate tooltips + */ + var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')) + var tooltipList = tooltipTriggerList.map(function(tooltipTriggerEl) { + return new bootstrap.Tooltip(tooltipTriggerEl) + }) + + /** + * Initiate quill editors + */ + if (select('.quill-editor-default')) { + new Quill('.quill-editor-default', { + theme: 'snow' + }); + } + + if (select('.quill-editor-bubble')) { + new Quill('.quill-editor-bubble', { + theme: 'bubble' + }); + } + + if (select('.quill-editor-full')) { + new Quill(".quill-editor-full", { + modules: { + toolbar: [ + [{ + font: [] + }, { + size: [] + }], + ["bold", "italic", "underline", "strike"], + [{ + color: [] + }, + { + background: [] + } + ], + [{ + script: "super" + }, + { + script: "sub" + } + ], + [{ + list: "ordered" + }, + { + list: "bullet" + }, + { + indent: "-1" + }, + { + indent: "+1" + } + ], + ["direction", { + align: [] + }], + ["link", "image", "video"], + ["clean"] + ] + }, + theme: "snow" + }); + } + + /** + * Initiate TinyMCE Editor + */ + const useDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches; + const isSmallScreen = window.matchMedia('(max-width: 1023.5px)').matches; + + tinymce.init({ + selector: 'textarea.tinymce-editor', + plugins: 'preview importcss searchreplace autolink autosave save directionality code visualblocks visualchars fullscreen image link media template codesample table charmap pagebreak nonbreaking anchor insertdatetime advlist lists wordcount help charmap quickbars emoticons', + editimage_cors_hosts: ['picsum.photos'], + menubar: 'file edit view insert format tools table help', + toolbar: 'undo redo | bold italic underline strikethrough | fontfamily fontsize blocks | alignleft aligncenter alignright alignjustify | outdent indent | numlist bullist | forecolor backcolor removeformat | pagebreak | charmap emoticons | fullscreen preview save print | insertfile image media template link anchor codesample | ltr rtl', + toolbar_sticky: true, + toolbar_sticky_offset: isSmallScreen ? 102 : 108, + autosave_ask_before_unload: true, + autosave_interval: '30s', + autosave_prefix: '{path}{query}-{id}-', + autosave_restore_when_empty: false, + autosave_retention: '2m', + image_advtab: true, + link_list: [{ + title: 'My page 1', + value: 'https://www.tiny.cloud' + }, + { + title: 'My page 2', + value: 'http://www.moxiecode.com' + } + ], + image_list: [{ + title: 'My page 1', + value: 'https://www.tiny.cloud' + }, + { + title: 'My page 2', + value: 'http://www.moxiecode.com' + } + ], + image_class_list: [{ + title: 'None', + value: '' + }, + { + title: 'Some class', + value: 'class-name' + } + ], + importcss_append: true, + file_picker_callback: (callback, value, meta) => { + /* Provide file and text for the link dialog */ + if (meta.filetype === 'file') { + callback('https://www.google.com/logos/google.jpg', { + text: 'My text' + }); + } + + /* Provide image and alt text for the image dialog */ + if (meta.filetype === 'image') { + callback('https://www.google.com/logos/google.jpg', { + alt: 'My alt text' + }); + } + + /* Provide alternative source and posted for the media dialog */ + if (meta.filetype === 'media') { + callback('movie.mp4', { + source2: 'alt.ogg', + poster: 'https://www.google.com/logos/google.jpg' + }); + } + }, + templates: [{ + title: 'New Table', + description: 'creates a new table', + content: '
' + }, + { + title: 'Starting my story', + description: 'A cure for writers block', + content: 'Once upon a time...' + }, + { + title: 'New list with dates', + description: 'New List with dates', + content: '
cdate
mdate

My List

' + } + ], + template_cdate_format: '[Date Created (CDATE): %m/%d/%Y : %H:%M:%S]', + template_mdate_format: '[Date Modified (MDATE): %m/%d/%Y : %H:%M:%S]', + height: 600, + image_caption: true, + quickbars_selection_toolbar: 'bold italic | quicklink h2 h3 blockquote quickimage quicktable', + noneditable_class: 'mceNonEditable', + toolbar_mode: 'sliding', + contextmenu: 'link image table', + skin: useDarkMode ? 'oxide-dark' : 'oxide', + content_css: useDarkMode ? 'dark' : 'default', + content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:16px }' + }); + + /** + * Initiate Bootstrap validation check + */ + var needsValidation = document.querySelectorAll('.needs-validation') + + Array.prototype.slice.call(needsValidation) + .forEach(function(form) { + form.addEventListener('submit', function(event) { + if (!form.checkValidity()) { + event.preventDefault() + event.stopPropagation() + } + + form.classList.add('was-validated') + }, false) + }) + + /** + * Initiate Datatables + */ + const datatables = select('.datatable', true) + datatables.forEach(datatable => { + new simpleDatatables.DataTable(datatable); + }) + + /** + * Autoresize echart charts + */ + const mainContainer = select('#main'); + if (mainContainer) { + setTimeout(() => { + new ResizeObserver(function() { + select('.echart', true).forEach(getEchart => { + echarts.getInstanceByDom(getEchart).resize(); + }) + }).observe(mainContainer); + }, 200); + } + + })(); \ No newline at end of file diff --git a/resources/views/index.blade.php b/resources/views/Admin/index.blade.php similarity index 100% rename from resources/views/index.blade.php rename to resources/views/Admin/index.blade.php diff --git a/resources/views/Admin/layout/main.blade.php b/resources/views/Admin/layout/main.blade.php index 58f67b3..1e6cd73 100644 --- a/resources/views/Admin/layout/main.blade.php +++ b/resources/views/Admin/layout/main.blade.php @@ -136,7 +136,7 @@ - + diff --git a/resources/views/User/contact/add-contact.blade.php b/resources/views/User/contact/add-contact.blade.php new file mode 100644 index 0000000..059e990 --- /dev/null +++ b/resources/views/User/contact/add-contact.blade.php @@ -0,0 +1,45 @@ + \ No newline at end of file diff --git a/resources/views/User/contact/contact.blade.php b/resources/views/User/contact/contact.blade.php new file mode 100644 index 0000000..3a97c7a --- /dev/null +++ b/resources/views/User/contact/contact.blade.php @@ -0,0 +1,63 @@ +@extends('user.layout.main') +@section('content') +
+
+ +
+

Manajemen Contact

+
+ + + + +
+
+ + {{-- tabel list kontak --}} +
+
+
+
+
+ +
+
+
+
+ + + + + + + + + + + + @foreach ($contacts as $key => $contact) + + + + + + + + @endforeach + +
#EmailNamePhoneAction
{{ ++$key }}{{ $contact['email'] }}{{ $contact['name'] }}{{ $contact['phone'] }} + + {{-- Detail --}} + +
+
+
+
+
+
+ @extends('user.contact.detail-contact') + @extends('user.contact.delete-contact') + @extends('user.contact.add-contact') + +@endsection + diff --git a/resources/views/User/contact/delete-contact.blade.php b/resources/views/User/contact/delete-contact.blade.php new file mode 100644 index 0000000..63cccf9 --- /dev/null +++ b/resources/views/User/contact/delete-contact.blade.php @@ -0,0 +1,38 @@ + + + \ No newline at end of file diff --git a/resources/views/User/contact/detail-contact.blade.php b/resources/views/User/contact/detail-contact.blade.php new file mode 100644 index 0000000..82ede87 --- /dev/null +++ b/resources/views/User/contact/detail-contact.blade.php @@ -0,0 +1,62 @@ +{{-- @extends('user.layout.main') +@section('content') +
+
--}} +{{--
+
+
+

Detail Contact

+
+
+
+ @foreach ($detail_contact as $detail) +

Name: {{ $detail_contact->inputNama }}

+

No HP: {{ $detail_contact->inputNoHP }}

+

Email: {{ $detail_contact->inputEmail }}

+

Alamat: {{ $detail_contact->inputAlamat }}

+ + @endforeach +
+
+
+
--}} +{{--
+
+@endsection --}} + + diff --git a/resources/views/User/index.blade.php b/resources/views/User/index.blade.php index 0d1a4ed..e5c70b5 100644 --- a/resources/views/User/index.blade.php +++ b/resources/views/User/index.blade.php @@ -1,4 +1,4 @@ -@extends('User.layout.main') +@extends('user.layout.main') @section('content')
@@ -69,7 +69,7 @@

Total Refund

- 100 + 190
@@ -84,147 +84,72 @@
-

Total user

+

Total Transaction

- 100
+ 109
-
-
-

Transaction Summary Weekly progress

-
-
- - December 30, 2014 - January 28, 2015 -
-
-
+
+
+

INCOME

-
-
-
-
-
-
-
- Total Sessions -

231,809

- - - -
-
- Total Revenue -

$231,809

- - - -
-
- Total Sessions -

231,809

- - - -
-
- -
- -
-
-
-

Top Profiles

- -
-
- -
-
- +
+
+ + +
+
+
+

Transaction

+
+
+
+ + + + + + + + + + + @foreach ($refundUserss as $HistoryRefundUser) + + + + + + + + + + @endforeach +
Order IDCustomerSellerTotalDue DateStatusImage
+ {{ $HistoryRefundUser['orderId'] }} + {{ $HistoryRefundUser['Customer'] }} + {{ $HistoryRefundUser['seller'] }} + {{ $HistoryRefundUser['Total'] }}{{ $HistoryRefundUser['dueDate'] }} +
Diterima
+
+ {{ $HistoryRefundUser['uploadBukti'] }} + +
+
+
+
+
+
- @include('Admin.transaction.Tracking') @endsection diff --git a/resources/views/User/layout/header.blade.php b/resources/views/User/layout/header.blade.php index 95a8709..e39bb54 100644 --- a/resources/views/User/layout/header.blade.php +++ b/resources/views/User/layout/header.blade.php @@ -207,15 +207,15 @@