From 4f417f54c90845101de4b260b983f52a61b63b60 Mon Sep 17 00:00:00 2001 From: Nazri Hamzah Date: Mon, 23 Apr 2018 14:57:30 +0800 Subject: [PATCH 1/9] first commit --- .../2014_10_12_000000_create_users_table.php | 35 ------------------- ...12_100000_create_password_resets_table.php | 32 ----------------- 2 files changed, 67 deletions(-) delete mode 100644 database/migrations/2014_10_12_000000_create_users_table.php delete mode 100644 database/migrations/2014_10_12_100000_create_password_resets_table.php diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php deleted file mode 100644 index 689cbeea..00000000 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ /dev/null @@ -1,35 +0,0 @@ -increments('id'); - $table->string('name'); - $table->string('email')->unique(); - $table->string('password'); - $table->rememberToken(); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('users'); - } -} diff --git a/database/migrations/2014_10_12_100000_create_password_resets_table.php b/database/migrations/2014_10_12_100000_create_password_resets_table.php deleted file mode 100644 index 0d5cb845..00000000 --- a/database/migrations/2014_10_12_100000_create_password_resets_table.php +++ /dev/null @@ -1,32 +0,0 @@ -string('email')->index(); - $table->string('token'); - $table->timestamp('created_at')->nullable(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('password_resets'); - } -} From 87653b2863233ff83e1bb625c95bb273c2de0ca6 Mon Sep 17 00:00:00 2001 From: Nazri Hamzah Date: Mon, 23 Apr 2018 15:01:18 +0800 Subject: [PATCH 2/9] add migration --- .env | 39 ++ .idea/exchange.iml | 82 +++++ .idea/misc.xml | 6 + .idea/modules.xml | 8 + .idea/php.xml | 84 +++++ .idea/vcs.xml | 6 + .idea/workspace.xml | 341 ++++++++++++++++++ app/Providers/AppServiceProvider.php | 4 +- app/Rate.php | 10 + app/SettingCIEFBeneficiary.php | 10 + app/SettingSupplier.php | 10 + app/TimeLimit.php | 10 + .../2018_04_23_030854_create_rates_table.php | 37 ++ ..._032746_create_setting_suppliers_table.php | 36 ++ ..._04_23_033128_create_time_limits_table.php | 33 ++ ...te_setting_c_i_e_f_beneficiaries_table.php | 38 ++ env-example | 39 ++ routes/api.php | 1 + vendor/composer/autoload_classmap.php | 13 + vendor/composer/autoload_static.php | 13 + 20 files changed, 819 insertions(+), 1 deletion(-) create mode 100644 .env create mode 100644 .idea/exchange.iml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/php.xml create mode 100644 .idea/vcs.xml create mode 100644 .idea/workspace.xml create mode 100644 app/Rate.php create mode 100644 app/SettingCIEFBeneficiary.php create mode 100644 app/SettingSupplier.php create mode 100644 app/TimeLimit.php create mode 100644 database/migrations/2018_04_23_030854_create_rates_table.php create mode 100644 database/migrations/2018_04_23_032746_create_setting_suppliers_table.php create mode 100644 database/migrations/2018_04_23_033128_create_time_limits_table.php create mode 100644 database/migrations/2018_04_23_033425_create_setting_c_i_e_f_beneficiaries_table.php create mode 100644 env-example diff --git a/.env b/.env new file mode 100644 index 00000000..3d9f7e52 --- /dev/null +++ b/.env @@ -0,0 +1,39 @@ +APP_NAME=exchange +APP_ENV=local +APP_KEY=base64:Fu2YulXExzm9HJ5LgVmZUmcbRkchHkc82q02MorN5GQ= +APP_DEBUG=true +APP_URL=http://localhost + +LOG_CHANNEL=stack + +DB_CONNECTION=mysql +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_DATABASE=exchange +DB_USERNAME=root +DB_PASSWORD= + +BROADCAST_DRIVER=log +CACHE_DRIVER=file +SESSION_DRIVER=file +SESSION_LIFETIME=120 +QUEUE_DRIVER=sync + +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_DRIVER=smtp +MAIL_HOST=smtp.mailtrap.io +MAIL_PORT=2525 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null + +PUSHER_APP_ID= +PUSHER_APP_KEY= +PUSHER_APP_SECRET= +PUSHER_APP_CLUSTER=mt1 + +MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" +MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" diff --git a/.idea/exchange.iml b/.idea/exchange.iml new file mode 100644 index 00000000..e596649c --- /dev/null +++ b/.idea/exchange.iml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000..28a804d8 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..2afdc8f1 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/php.xml b/.idea/php.xml new file mode 100644 index 00000000..d0b92ee8 --- /dev/null +++ b/.idea/php.xml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..94a25f7f --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 00000000..bee01ccc --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,341 @@ + + + + + + + + + + + + $PROJECT_DIR$/composer.json + + + + + + + + + + + + + + + + + appse + + + $PROJECT_DIR$/bootstrap + + + + + + + + + + + true + DEFINITION_ORDER + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -245,47 +280,38 @@ + + + + - - - + - + - + - - + + - - - - - - - - - - - - @@ -295,6 +321,29 @@ + + + + + + + + + + + + + + + + + + + + + + + @@ -302,13 +351,7 @@ - - - - - - - + @@ -330,27 +373,9 @@ - - - - - - - - - - - - - - - - - - - - - + + + @@ -372,13 +397,7 @@ - - - - - - - + @@ -393,6 +412,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -400,48 +483,80 @@ - + - - + + + + + - + - - + + + + + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + - + diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 7e2563a8..ae2f68fb 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -48,6 +48,14 @@ class Handler extends ExceptionHandler */ public function render($request, Exception $exception) { + // This will replace our 404 response with + // a JSON response. + if ($exception instanceof ModelNotFoundException) { + return response()->json([ + 'error' => 'Resource not found' + ], 404); + } + return parent::render($request, $exception); } } diff --git a/app/Http/Controllers/RateController.php b/app/Http/Controllers/RateController.php new file mode 100644 index 00000000..67f3bddb --- /dev/null +++ b/app/Http/Controllers/RateController.php @@ -0,0 +1,40 @@ +all()); + + return response()->json($rate, 201); + } + + public function update(Request $request, Rate $rate) + { + $rate->update($request->all()); + + return response()->json($rate, 200); + } + + public function delete(Rate $rate) + { + $rate->delete(); + + return response()->json(null, 204); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/SettingBeneficiaryController.php b/app/Http/Controllers/SettingBeneficiaryController.php new file mode 100644 index 00000000..fdec75f7 --- /dev/null +++ b/app/Http/Controllers/SettingBeneficiaryController.php @@ -0,0 +1,40 @@ +all()); + + return response()->json($beneficiary, 201); + } + + public function update(Request $request, SettingBeneficiary $beneficiary) + { + $beneficiary->update($request->all()); + + return response()->json($beneficiary, 200); + } + + public function delete(SettingBeneficiary $beneficiary) + { + $beneficiary->delete(); + + return response()->json(null, 204); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/SettingCreditController.php b/app/Http/Controllers/SettingCreditController.php new file mode 100644 index 00000000..acf5aeb0 --- /dev/null +++ b/app/Http/Controllers/SettingCreditController.php @@ -0,0 +1,40 @@ +all()); + + return response()->json($credit, 201); + } + + public function update(Request $request, SettingCredit $credit) + { + $credit->update($request->all()); + + return response()->json($credit, 200); + } + + public function delete(SettingCredit $credit) + { + $credit->delete(); + + return response()->json(null, 204); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/SettingSupplierController.php b/app/Http/Controllers/SettingSupplierController.php new file mode 100644 index 00000000..96f0a861 --- /dev/null +++ b/app/Http/Controllers/SettingSupplierController.php @@ -0,0 +1,40 @@ +all()); + + return response()->json($supplier, 201); + } + + public function update(Request $request, SettingSupplier $supplier) + { + $supplier->update($request->all()); + + return response()->json($supplier, 200); + } + + public function delete(SettingSupplier $supplier) + { + $supplier->delete(); + + return response()->json(null, 204); + } +} \ No newline at end of file diff --git a/app/Rate.php b/app/Rate.php index c6e31f1f..dde1806a 100644 --- a/app/Rate.php +++ b/app/Rate.php @@ -6,5 +6,5 @@ use Illuminate\Database\Eloquent\Model; class Rate extends Model { - // + protected $fillable = ['x1_cash','x1_cheque','x1_ba','x2_cash','x2_cheque','x2_ba']; } diff --git a/app/SettingBeneficiary.php b/app/SettingBeneficiary.php new file mode 100644 index 00000000..b6ea22e1 --- /dev/null +++ b/app/SettingBeneficiary.php @@ -0,0 +1,10 @@ +=7.1.3" + }, + "require-dev": { + "illuminate/database": "5.6.*", + "mockery/mockery": "~1.0", + "phpunit/phpunit": "~5.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.6-dev" + }, + "laravel": { + "providers": [ + "Collective\\Html\\HtmlServiceProvider" + ], + "aliases": { + "Form": "Collective\\Html\\FormFacade", + "Html": "Collective\\Html\\HtmlFacade" + } + } + }, + "autoload": { + "psr-4": { + "Collective\\Html\\": "src/" + }, + "files": [ + "src/helpers.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylorotwell@gmail.com" + }, + { + "name": "Adam Engebretson", + "email": "adam@laravelcollective.com" + } + ], + "description": "HTML and Form Builders for the Laravel Framework", + "homepage": "https://laravelcollective.com", + "time": "2018-04-09T14:09:32+00:00" + }, { "name": "league/flysystem", "version": "1.0.44", diff --git a/config/app.php b/config/app.php index b16e7f77..3bc18e7d 100644 --- a/config/app.php +++ b/config/app.php @@ -146,6 +146,7 @@ return [ Illuminate\Translation\TranslationServiceProvider::class, Illuminate\Validation\ValidationServiceProvider::class, Illuminate\View\ViewServiceProvider::class, + Collective\Html\HtmlServiceProvider::class, /* * Package Service Providers... @@ -208,7 +209,7 @@ return [ 'URL' => Illuminate\Support\Facades\URL::class, 'Validator' => Illuminate\Support\Facades\Validator::class, 'View' => Illuminate\Support\Facades\View::class, - + 'Html' => Collective\Html\HtmlFacade::class, ], ]; diff --git a/database/factories/RateFactory.php b/database/factories/RateFactory.php new file mode 100644 index 00000000..7270d369 --- /dev/null +++ b/database/factories/RateFactory.php @@ -0,0 +1,9 @@ +define(App\Rate::class, function (Faker $faker) { + return [ + // + ]; +}); diff --git a/database/factories/SettingBeneficiaryFactory.php b/database/factories/SettingBeneficiaryFactory.php new file mode 100644 index 00000000..79204254 --- /dev/null +++ b/database/factories/SettingBeneficiaryFactory.php @@ -0,0 +1,9 @@ +define(App\SettingBeneficiary::class, function (Faker $faker) { + return [ + // + ]; +}); diff --git a/database/factories/SettingCreditFactory.php b/database/factories/SettingCreditFactory.php new file mode 100644 index 00000000..890b6be2 --- /dev/null +++ b/database/factories/SettingCreditFactory.php @@ -0,0 +1,9 @@ +define(App\SettingCredit::class, function (Faker $faker) { + return [ + // + ]; +}); diff --git a/database/factories/SettingSupplierFactory.php b/database/factories/SettingSupplierFactory.php new file mode 100644 index 00000000..918b6591 --- /dev/null +++ b/database/factories/SettingSupplierFactory.php @@ -0,0 +1,9 @@ +define(App\SettingSupplier::class, function (Faker $faker) { + return [ + // + ]; +}); diff --git a/database/migrations/2018_04_23_030854_create_rates_table.php b/database/migrations/2018_04_25_085705_create_rates_table.php similarity index 100% rename from database/migrations/2018_04_23_030854_create_rates_table.php rename to database/migrations/2018_04_25_085705_create_rates_table.php diff --git a/database/migrations/2018_04_23_033128_create_time_limits_table.php b/database/migrations/2018_04_25_090015_create_setting_credits_table.php similarity index 76% rename from database/migrations/2018_04_23_033128_create_time_limits_table.php rename to database/migrations/2018_04_25_090015_create_setting_credits_table.php index 1a58779e..26568b9f 100644 --- a/database/migrations/2018_04_23_033128_create_time_limits_table.php +++ b/database/migrations/2018_04_25_090015_create_setting_credits_table.php @@ -4,7 +4,7 @@ use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; -class CreateTimeLimitsTable extends Migration +class CreateSettingCreditsTable extends Migration { /** * Run the migrations. @@ -13,7 +13,7 @@ class CreateTimeLimitsTable extends Migration */ public function up() { - Schema::create('time_limits', function (Blueprint $table) { + Schema::create('setting_credits', function (Blueprint $table) { $table->increments('id'); $table->decimal('rmb_credit_limit'); $table->decimal('usd_credit_limit'); @@ -28,6 +28,6 @@ class CreateTimeLimitsTable extends Migration */ public function down() { - Schema::dropIfExists('time_limits'); + Schema::dropIfExists('setting_credits'); } } diff --git a/database/migrations/2018_04_23_032746_create_setting_suppliers_table.php b/database/migrations/2018_04_25_090031_create_setting_suppliers_table.php similarity index 100% rename from database/migrations/2018_04_23_032746_create_setting_suppliers_table.php rename to database/migrations/2018_04_25_090031_create_setting_suppliers_table.php diff --git a/database/migrations/2018_04_23_033425_create_setting_c_i_e_f_beneficiaries_table.php b/database/migrations/2018_04_25_090057_create_setting_beneficiaries_table.php similarity index 72% rename from database/migrations/2018_04_23_033425_create_setting_c_i_e_f_beneficiaries_table.php rename to database/migrations/2018_04_25_090057_create_setting_beneficiaries_table.php index 6fb0016d..67a54c32 100644 --- a/database/migrations/2018_04_23_033425_create_setting_c_i_e_f_beneficiaries_table.php +++ b/database/migrations/2018_04_25_090057_create_setting_beneficiaries_table.php @@ -4,7 +4,7 @@ use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; -class CreateSettingCIEFBeneficiariesTable extends Migration +class CreateSettingBeneficiariesTable extends Migration { /** * Run the migrations. @@ -13,8 +13,8 @@ class CreateSettingCIEFBeneficiariesTable extends Migration */ public function up() { - Schema::create('setting_c_i_e_f_beneficiaries', function (Blueprint $table) { - $table->increments('beneficiary_id'); + Schema::create('setting_beneficiaries', function (Blueprint $table) { + $table->increments('id'); $table->string('company_name'); $table->string('bank_name'); $table->string('acc_no'); @@ -33,6 +33,6 @@ class CreateSettingCIEFBeneficiariesTable extends Migration */ public function down() { - Schema::dropIfExists('setting_c_i_e_f_beneficiaries'); + Schema::dropIfExists('setting_beneficiaries'); } } diff --git a/routes/api.php b/routes/api.php index a95187dd..469f0f45 100644 --- a/routes/api.php +++ b/routes/api.php @@ -1,6 +1,10 @@ get('/user', function (Request $request) { return $request->user(); }); + +Route::get('update-rate', 'RateController@index'); +Route::get('update-rate/{rate}', 'RateController@show'); +Route::post('update-rate', 'RateController@store'); +Route::put('update-rate/{rate}', 'RateController@update'); +Route::delete('update-rate/{rate}', 'RateController@delete'); + +Route::get('setting-beneficiary', 'SettingBeneficiaryController@index'); +Route::get('setting-beneficiary/{beneficiary}', 'SettingBeneficiaryController@show'); +Route::post('setting-beneficiary', 'SettingBeneficiaryController@store'); +Route::put('setting-beneficiary/{beneficiary}', 'SettingBeneficiaryController@update'); +Route::delete('setting-beneficiary/{beneficiary}', 'SettingBeneficiaryController@delete'); + +Route::get('setting-credit', 'SettingCreditController@index'); +Route::get('setting-credit/{credit}', 'SettingCreditController@show'); +Route::post('setting-credit', 'SettingCreditController@store'); +Route::put('setting-credit/{credit}', 'SettingCreditController@update'); +Route::delete('setting-credit/{credit}', 'SettingCreditController@delete'); + +Route::get('setting-supplier', 'SettingSupplierController@index'); +Route::get('setting-supplier/{supplier}', 'SettingSupplierController@show'); +Route::post('setting-supplier', 'SettingSupplierController@store'); +Route::put('setting-supplier/{supplier}', 'SettingSupplierController@update'); +Route::delete('setting-supplier/{supplier}', 'SettingSupplierController@delete'); + +/* +//FOR UPDATE RATE +Route::get('update-rate', function() { + // If the Content-Type and Accept headers are set to 'application/json', + // this will return a JSON structure. This will be cleaned up later. + return Rate::all(); +}); + +Route::get('update-rate/{id}', function($id) { + return Rate::find($id); +}); + +Route::post('update-rate', function(Request $request) { + return Rate::create($request->all); +}); + +Route::put('update-rate/{id}', function(Request $request, $id) { + $rate = Rate::findOrFail($id); + $rate->update($request->all()); + + return $rate; +}); + + +//FOR SETTING BENEFICIARY +Route::get('setting-beneficiary', function() { + // If the Content-Type and Accept headers are set to 'application/json', + // this will return a JSON structure. This will be cleaned up later. + return SettingBeneficiary::all(); +}); + +Route::get('setting-beneficiary/{id}', function($id) { + return SettingBeneficiary::find($id); +}); + +Route::post('setting-beneficiary', function(Request $request) { + return SettingBeneficiary::create($request->all); +}); + +Route::put('setting-beneficiary/{id}', function(Request $request, $id) { + $beneficiary = SettingBeneficiary::findOrFail($id); + $beneficiary->update($request->all()); + + return $beneficiary; +}); + +Route::delete('setting-beneficiary/{id}', function($id) { + SettingBeneficiary::find($id)->delete(); + + return 204; +}); + +//FOR SETTING CREDIT +Route::get('setting-credit', function() { + // If the Content-Type and Accept headers are set to 'application/json', + // this will return a JSON structure. This will be cleaned up later. + return SettingCredit::all(); +}); + +Route::get('setting-credit/{id}', function($id) { + return SettingCredit::find($id); +}); + +Route::post('setting-credit', function(Request $request) { + return SettingCredit::create($request->all); +}); + +Route::put('setting-credit/{id}', function(Request $request, $id) { + $credit = SettingCredit::findOrFail($id); + $credit->update($request->all()); + + return $credit; +}); + +//FOR SETTING SUPPLIER +Route::get('setting-supplier', function() { + // If the Content-Type and Accept headers are set to 'application/json', + // this will return a JSON structure. This will be cleaned up later. + return SettingSupplier::all(); +}); + +Route::get('setting-supplier/{id}', function($id) { + return SettingSupplier::find($id); +}); + +Route::post('setting-supplier', function(Request $request) { + return SettingSupplier::create($request->all); +}); + +Route::put('setting-supplier/{id}', function(Request $request, $id) { + $supplier = SettingSupplier::findOrFail($id); + $supplier->update($request->all()); + + return $supplier; +}); + +Route::delete('setting-supplier/{id}', function($id) { + SettingSupplier::find($id)->delete(); + + return 204; +}); + +*/ diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index ce6c72d9..85663a8f 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -13,6 +13,9 @@ return array( 'App\\Http\\Controllers\\Auth\\RegisterController' => $baseDir . '/app/Http/Controllers/Auth/RegisterController.php', 'App\\Http\\Controllers\\Auth\\ResetPasswordController' => $baseDir . '/app/Http/Controllers/Auth/ResetPasswordController.php', 'App\\Http\\Controllers\\Controller' => $baseDir . '/app/Http/Controllers/Controller.php', + 'App\\Http\\Controllers\\RateController' => $baseDir . '/app/Http/Controllers/RateController.php', + 'App\\Http\\Controllers\\SettingCreditController' => $baseDir . '/app/Http/Controllers/SettingCreditController.php', + 'App\\Http\\Controllers\\SettingSupplierController' => $baseDir . '/app/Http/Controllers/SettingSupplierController.php', 'App\\Http\\Kernel' => $baseDir . '/app/Http/Kernel.php', 'App\\Http\\Middleware\\EncryptCookies' => $baseDir . '/app/Http/Middleware/EncryptCookies.php', 'App\\Http\\Middleware\\RedirectIfAuthenticated' => $baseDir . '/app/Http/Middleware/RedirectIfAuthenticated.php', @@ -25,14 +28,21 @@ return array( 'App\\Providers\\EventServiceProvider' => $baseDir . '/app/Providers/EventServiceProvider.php', 'App\\Providers\\RouteServiceProvider' => $baseDir . '/app/Providers/RouteServiceProvider.php', 'App\\Rate' => $baseDir . '/app/Rate.php', - 'App\\SettingCIEFBeneficiary' => $baseDir . '/app/SettingCIEFBeneficiary.php', + 'App\\SettingBeneficiary' => $baseDir . '/app/SettingBeneficiary.php', + 'App\\SettingCredit' => $baseDir . '/app/SettingCredit.php', 'App\\SettingSupplier' => $baseDir . '/app/SettingSupplier.php', - 'App\\TimeLimit' => $baseDir . '/app/TimeLimit.php', 'App\\User' => $baseDir . '/app/User.php', 'Carbon\\Carbon' => $vendorDir . '/nesbot/carbon/src/Carbon/Carbon.php', 'Carbon\\CarbonInterval' => $vendorDir . '/nesbot/carbon/src/Carbon/CarbonInterval.php', 'Carbon\\Exceptions\\InvalidDateException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/InvalidDateException.php', 'Carbon\\Translator' => $vendorDir . '/nesbot/carbon/src/Carbon/Translator.php', + 'Collective\\Html\\Componentable' => $vendorDir . '/laravelcollective/html/src/Componentable.php', + 'Collective\\Html\\Eloquent\\FormAccessible' => $vendorDir . '/laravelcollective/html/src/Eloquent/FormAccessible.php', + 'Collective\\Html\\FormBuilder' => $vendorDir . '/laravelcollective/html/src/FormBuilder.php', + 'Collective\\Html\\FormFacade' => $vendorDir . '/laravelcollective/html/src/FormFacade.php', + 'Collective\\Html\\HtmlBuilder' => $vendorDir . '/laravelcollective/html/src/HtmlBuilder.php', + 'Collective\\Html\\HtmlFacade' => $vendorDir . '/laravelcollective/html/src/HtmlFacade.php', + 'Collective\\Html\\HtmlServiceProvider' => $vendorDir . '/laravelcollective/html/src/HtmlServiceProvider.php', 'Cron\\AbstractField' => $vendorDir . '/dragonmantank/cron-expression/src/Cron/AbstractField.php', 'Cron\\CronExpression' => $vendorDir . '/dragonmantank/cron-expression/src/Cron/CronExpression.php', 'Cron\\DayOfMonthField' => $vendorDir . '/dragonmantank/cron-expression/src/Cron/DayOfMonthField.php', diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php index e02d0e90..dfdd41d6 100644 --- a/vendor/composer/autoload_files.php +++ b/vendor/composer/autoload_files.php @@ -15,4 +15,5 @@ return array( '58571171fd5812e6e447dce228f52f4d' => $vendorDir . '/laravel/framework/src/Illuminate/Support/helpers.php', '6124b4c8570aa390c21fafd04a26c69f' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php', 'e7223560d890eab89cda23685e711e2c' => $vendorDir . '/psy/psysh/src/Psy/functions.php', + 'f18cc91337d49233e5754e93f3ed9ec3' => $vendorDir . '/laravelcollective/html/src/helpers.php', ); diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php index e7637525..09f897f3 100644 --- a/vendor/composer/autoload_psr4.php +++ b/vendor/composer/autoload_psr4.php @@ -44,6 +44,7 @@ return array( 'Doctrine\\Common\\Inflector\\' => array($vendorDir . '/doctrine/inflector/lib/Doctrine/Common/Inflector'), 'DeepCopy\\' => array($vendorDir . '/myclabs/deep-copy/src/DeepCopy'), 'Cron\\' => array($vendorDir . '/dragonmantank/cron-expression/src/Cron'), + 'Collective\\Html\\' => array($vendorDir . '/laravelcollective/html/src'), 'Carbon\\' => array($vendorDir . '/nesbot/carbon/src/Carbon'), 'App\\' => array($baseDir . '/app'), ); diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 32ac7d7e..e83e7cff 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -16,6 +16,7 @@ class ComposerStaticInitd0143684cbb8cb41ee360a72b2c4ce33 '58571171fd5812e6e447dce228f52f4d' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/helpers.php', '6124b4c8570aa390c21fafd04a26c69f' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php', 'e7223560d890eab89cda23685e711e2c' => __DIR__ . '/..' . '/psy/psysh/src/Psy/functions.php', + 'f18cc91337d49233e5754e93f3ed9ec3' => __DIR__ . '/..' . '/laravelcollective/html/src/helpers.php', ); public static $prefixLengthsPsr4 = array ( @@ -101,6 +102,7 @@ class ComposerStaticInitd0143684cbb8cb41ee360a72b2c4ce33 'C' => array ( 'Cron\\' => 5, + 'Collective\\Html\\' => 16, 'Carbon\\' => 7, ), 'A' => @@ -264,6 +266,10 @@ class ComposerStaticInitd0143684cbb8cb41ee360a72b2c4ce33 array ( 0 => __DIR__ . '/..' . '/dragonmantank/cron-expression/src/Cron', ), + 'Collective\\Html\\' => + array ( + 0 => __DIR__ . '/..' . '/laravelcollective/html/src', + ), 'Carbon\\' => array ( 0 => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon', @@ -321,6 +327,9 @@ class ComposerStaticInitd0143684cbb8cb41ee360a72b2c4ce33 'App\\Http\\Controllers\\Auth\\RegisterController' => __DIR__ . '/../..' . '/app/Http/Controllers/Auth/RegisterController.php', 'App\\Http\\Controllers\\Auth\\ResetPasswordController' => __DIR__ . '/../..' . '/app/Http/Controllers/Auth/ResetPasswordController.php', 'App\\Http\\Controllers\\Controller' => __DIR__ . '/../..' . '/app/Http/Controllers/Controller.php', + 'App\\Http\\Controllers\\RateController' => __DIR__ . '/../..' . '/app/Http/Controllers/RateController.php', + 'App\\Http\\Controllers\\SettingCreditController' => __DIR__ . '/../..' . '/app/Http/Controllers/SettingCreditController.php', + 'App\\Http\\Controllers\\SettingSupplierController' => __DIR__ . '/../..' . '/app/Http/Controllers/SettingSupplierController.php', 'App\\Http\\Kernel' => __DIR__ . '/../..' . '/app/Http/Kernel.php', 'App\\Http\\Middleware\\EncryptCookies' => __DIR__ . '/../..' . '/app/Http/Middleware/EncryptCookies.php', 'App\\Http\\Middleware\\RedirectIfAuthenticated' => __DIR__ . '/../..' . '/app/Http/Middleware/RedirectIfAuthenticated.php', @@ -333,14 +342,21 @@ class ComposerStaticInitd0143684cbb8cb41ee360a72b2c4ce33 'App\\Providers\\EventServiceProvider' => __DIR__ . '/../..' . '/app/Providers/EventServiceProvider.php', 'App\\Providers\\RouteServiceProvider' => __DIR__ . '/../..' . '/app/Providers/RouteServiceProvider.php', 'App\\Rate' => __DIR__ . '/../..' . '/app/Rate.php', - 'App\\SettingCIEFBeneficiary' => __DIR__ . '/../..' . '/app/SettingCIEFBeneficiary.php', + 'App\\SettingBeneficiary' => __DIR__ . '/../..' . '/app/SettingBeneficiary.php', + 'App\\SettingCredit' => __DIR__ . '/../..' . '/app/SettingCredit.php', 'App\\SettingSupplier' => __DIR__ . '/../..' . '/app/SettingSupplier.php', - 'App\\TimeLimit' => __DIR__ . '/../..' . '/app/TimeLimit.php', 'App\\User' => __DIR__ . '/../..' . '/app/User.php', 'Carbon\\Carbon' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Carbon.php', 'Carbon\\CarbonInterval' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/CarbonInterval.php', 'Carbon\\Exceptions\\InvalidDateException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/InvalidDateException.php', 'Carbon\\Translator' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Translator.php', + 'Collective\\Html\\Componentable' => __DIR__ . '/..' . '/laravelcollective/html/src/Componentable.php', + 'Collective\\Html\\Eloquent\\FormAccessible' => __DIR__ . '/..' . '/laravelcollective/html/src/Eloquent/FormAccessible.php', + 'Collective\\Html\\FormBuilder' => __DIR__ . '/..' . '/laravelcollective/html/src/FormBuilder.php', + 'Collective\\Html\\FormFacade' => __DIR__ . '/..' . '/laravelcollective/html/src/FormFacade.php', + 'Collective\\Html\\HtmlBuilder' => __DIR__ . '/..' . '/laravelcollective/html/src/HtmlBuilder.php', + 'Collective\\Html\\HtmlFacade' => __DIR__ . '/..' . '/laravelcollective/html/src/HtmlFacade.php', + 'Collective\\Html\\HtmlServiceProvider' => __DIR__ . '/..' . '/laravelcollective/html/src/HtmlServiceProvider.php', 'Cron\\AbstractField' => __DIR__ . '/..' . '/dragonmantank/cron-expression/src/Cron/AbstractField.php', 'Cron\\CronExpression' => __DIR__ . '/..' . '/dragonmantank/cron-expression/src/Cron/CronExpression.php', 'Cron\\DayOfMonthField' => __DIR__ . '/..' . '/dragonmantank/cron-expression/src/Cron/DayOfMonthField.php', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index b03ea1c6..aba7aa0c 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -891,6 +891,76 @@ "psysh" ] }, + { + "name": "laravelcollective/html", + "version": "v5.6.6", + "version_normalized": "5.6.6.0", + "source": { + "type": "git", + "url": "https://github.com/LaravelCollective/html.git", + "reference": "b3a10245c791a211e5f8ec37117f4549cd22aabe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/LaravelCollective/html/zipball/b3a10245c791a211e5f8ec37117f4549cd22aabe", + "reference": "b3a10245c791a211e5f8ec37117f4549cd22aabe", + "shasum": "" + }, + "require": { + "illuminate/http": "5.6.*", + "illuminate/routing": "5.6.*", + "illuminate/session": "5.6.*", + "illuminate/support": "5.6.*", + "illuminate/view": "5.6.*", + "php": ">=7.1.3" + }, + "require-dev": { + "illuminate/database": "5.6.*", + "mockery/mockery": "~1.0", + "phpunit/phpunit": "~5.4" + }, + "time": "2018-04-09T14:09:32+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.6-dev" + }, + "laravel": { + "providers": [ + "Collective\\Html\\HtmlServiceProvider" + ], + "aliases": { + "Form": "Collective\\Html\\FormFacade", + "Html": "Collective\\Html\\HtmlFacade" + } + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Collective\\Html\\": "src/" + }, + "files": [ + "src/helpers.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylorotwell@gmail.com" + }, + { + "name": "Adam Engebretson", + "email": "adam@laravelcollective.com" + } + ], + "description": "HTML and Form Builders for the Laravel Framework", + "homepage": "https://laravelcollective.com" + }, { "name": "league/flysystem", "version": "1.0.44", diff --git a/vendor/laravelcollective/html/CONTRIBUTING.md b/vendor/laravelcollective/html/CONTRIBUTING.md new file mode 100755 index 00000000..2cbf8251 --- /dev/null +++ b/vendor/laravelcollective/html/CONTRIBUTING.md @@ -0,0 +1,3 @@ +# Laravel Contribution Guide + +Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](http://laravel.com/docs/contributions). Please review the entire guide before sending a pull request. diff --git a/vendor/laravelcollective/html/LICENSE.txt b/vendor/laravelcollective/html/LICENSE.txt new file mode 100644 index 00000000..40cd6a3a --- /dev/null +++ b/vendor/laravelcollective/html/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/laravelcollective/html/composer.json b/vendor/laravelcollective/html/composer.json new file mode 100755 index 00000000..119fce88 --- /dev/null +++ b/vendor/laravelcollective/html/composer.json @@ -0,0 +1,57 @@ +{ + "name": "laravelcollective/html", + "description": "HTML and Form Builders for the Laravel Framework", + "license": "MIT", + "homepage": "https://laravelcollective.com", + "support": { + "issues": "https://github.com/LaravelCollective/html/issues", + "source": "https://github.com/LaravelCollective/html" + }, + "authors": [ + { + "name": "Adam Engebretson", + "email": "adam@laravelcollective.com" + }, + { + "name": "Taylor Otwell", + "email": "taylorotwell@gmail.com" + } + ], + "require": { + "php": ">=7.1.3", + "illuminate/http": "5.6.*", + "illuminate/routing": "5.6.*", + "illuminate/session": "5.6.*", + "illuminate/support": "5.6.*", + "illuminate/view": "5.6.*" + }, + "require-dev": { + "illuminate/database": "5.6.*", + "mockery/mockery": "~1.0", + "phpunit/phpunit": "~5.4" + }, + "autoload": { + "psr-4": { + "Collective\\Html\\": "src/" + }, + "files": [ + "src/helpers.php" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "5.6-dev" + }, + "laravel": { + "providers": [ + "Collective\\Html\\HtmlServiceProvider" + ], + "aliases": { + "Form": "Collective\\Html\\FormFacade", + "Html": "Collective\\Html\\HtmlFacade" + } + } + }, + "minimum-stability": "dev", + "prefer-stable": true +} diff --git a/vendor/laravelcollective/html/readme.md b/vendor/laravelcollective/html/readme.md new file mode 100644 index 00000000..4d3d9e1a --- /dev/null +++ b/vendor/laravelcollective/html/readme.md @@ -0,0 +1,9 @@ +# Forms & HTML + +[![Build Status](https://travis-ci.org/LaravelCollective/html.svg)](https://travis-ci.org/LaravelCollective/html) +[![Total Downloads](https://poser.pugx.org/LaravelCollective/html/downloads)](https://packagist.org/packages/laravelcollective/html) +[![Latest Stable Version](https://poser.pugx.org/LaravelCollective/html/v/stable.svg)](https://packagist.org/packages/laravelcollective/html) +[![Latest Unstable Version](https://poser.pugx.org/LaravelCollective/html/v/unstable.svg)](https://packagist.org/packages/laravelcollective/html) +[![License](https://poser.pugx.org/LaravelCollective/html/license.svg)](https://packagist.org/packages/laravelcollective/html) + +Official documentation for Forms & Html for The Laravel Framework can be found at the [LaravelCollective](http://laravelcollective.com) website. diff --git a/vendor/laravelcollective/html/src/Componentable.php b/vendor/laravelcollective/html/src/Componentable.php new file mode 100644 index 00000000..a0a364b4 --- /dev/null +++ b/vendor/laravelcollective/html/src/Componentable.php @@ -0,0 +1,110 @@ +getComponentData($component['signature'], $arguments); + + return new HtmlString( + $this->view->make($component['view'], $data)->render() + ); + } + + /** + * Prepare the component data, while respecting provided defaults. + * + * @param array $signature + * @param array $arguments + * + * @return array + */ + protected function getComponentData(array $signature, array $arguments) + { + $data = []; + + $i = 0; + foreach ($signature as $variable => $default) { + // If the "variable" value is actually a numeric key, we can assume that + // no default had been specified for the component argument and we'll + // just use null instead, so that we can treat them all the same. + if (is_numeric($variable)) { + $variable = $default; + $default = null; + } + + $data[$variable] = array_get($arguments, $i, $default); + + $i++; + } + + return $data; + } + + /** + * Dynamically handle calls to the class. + * + * @param string $method + * @param array $parameters + * + * @return \Illuminate\Contracts\View\View|mixed + * + * @throws \BadMethodCallException + */ + public function __call($method, $parameters) + { + if (static::hasComponent($method)) { + return $this->renderComponent($method, $parameters); + } + + throw new BadMethodCallException("Method {$method} does not exist."); + } +} diff --git a/vendor/laravelcollective/html/src/Eloquent/FormAccessible.php b/vendor/laravelcollective/html/src/Eloquent/FormAccessible.php new file mode 100644 index 00000000..0afd17ee --- /dev/null +++ b/vendor/laravelcollective/html/src/Eloquent/FormAccessible.php @@ -0,0 +1,119 @@ +getAttributeFromArray($key); + + // If the attribute is listed as a date, we will convert it to a DateTime + // instance on retrieval, which makes it quite convenient to work with + // date fields without having to create a mutator for each property. + if (in_array($key, $this->getDates())) { + if (! is_null($value)) { + $value = $this->asDateTime($value); + } + } + + // If the attribute has a get mutator, we will call that then return what + // it returns as the value, which is useful for transforming values on + // retrieval from the model to a form that is more useful for usage. + if ($this->hasFormMutator($key)) { + return $this->mutateFormAttribute($key, $value); + } + + $keys = explode('.', $key); + + if ($this->isNestedModel($keys[0])) { + $relatedModel = $this->getRelation($keys[0]); + + unset($keys[0]); + $key = implode('.', $keys); + + if (method_exists($relatedModel, 'hasFormMutator') && $key !== '' && $relatedModel->hasFormMutator($key)) { + return $relatedModel->getFormValue($key); + } + + return data_get($relatedModel, empty($key)? null: $key); + } + + // No form mutator, let the model resolve this + return data_get($this, $key); + } + + /** + * Check for a nested model. + * + * @param string $key + * + * @return bool + */ + public function isNestedModel($key) + { + if (in_array($key, array_keys($this->getRelations()))) { + return true; + } + + return false; + } + + /** + * @param $key + * + * @return bool + */ + public function hasFormMutator($key) + { + $methods = $this->getReflection()->getMethods(ReflectionMethod::IS_PUBLIC); + + $mutator = collect($methods) + ->first(function (ReflectionMethod $method) use ($key) { + return $method->getName() === 'form' . Str::studly($key) . 'Attribute'; + }); + + return (bool) $mutator; + } + + /** + * @param $key + * @param $value + * + * @return mixed + */ + private function mutateFormAttribute($key, $value) + { + return $this->{'form' . Str::studly($key) . 'Attribute'}($value); + } + + /** + * Get a ReflectionClass Instance + * @return ReflectionClass + */ + protected function getReflection() + { + if (! $this->reflection) { + $this->reflection = new ReflectionClass($this); + } + + return $this->reflection; + } +} diff --git a/vendor/laravelcollective/html/src/FormBuilder.php b/vendor/laravelcollective/html/src/FormBuilder.php new file mode 100644 index 00000000..2d7a2144 --- /dev/null +++ b/vendor/laravelcollective/html/src/FormBuilder.php @@ -0,0 +1,1360 @@ +url = $url; + $this->html = $html; + $this->view = $view; + $this->csrfToken = $csrfToken; + $this->request = $request; + } + + /** + * Open up a new HTML form. + * + * @param array $options + * + * @return \Illuminate\Support\HtmlString + */ + public function open(array $options = []) + { + $method = array_get($options, 'method', 'post'); + + // We need to extract the proper method from the attributes. If the method is + // something other than GET or POST we'll use POST since we will spoof the + // actual method since forms don't support the reserved methods in HTML. + $attributes['method'] = $this->getMethod($method); + + $attributes['action'] = $this->getAction($options); + + $attributes['accept-charset'] = 'UTF-8'; + + // If the method is PUT, PATCH or DELETE we will need to add a spoofer hidden + // field that will instruct the Symfony request to pretend the method is a + // different method than it actually is, for convenience from the forms. + $append = $this->getAppendage($method); + + if (isset($options['files']) && $options['files']) { + $options['enctype'] = 'multipart/form-data'; + } + + // Finally we're ready to create the final form HTML field. We will attribute + // format the array of attributes. We will also add on the appendage which + // is used to spoof requests for this PUT, PATCH, etc. methods on forms. + $attributes = array_merge( + + $attributes, array_except($options, $this->reserved) + + ); + + // Finally, we will concatenate all of the attributes into a single string so + // we can build out the final form open statement. We'll also append on an + // extra value for the hidden _method field if it's needed for the form. + $attributes = $this->html->attributes($attributes); + + return $this->toHtmlString('' . $append); + } + + /** + * Create a new model based form builder. + * + * @param mixed $model + * @param array $options + * + * @return \Illuminate\Support\HtmlString + */ + public function model($model, array $options = []) + { + $this->model = $model; + + return $this->open($options); + } + + /** + * Set the model instance on the form builder. + * + * @param mixed $model + * + * @return void + */ + public function setModel($model) + { + $this->model = $model; + } + + /** + * Get the current model instance on the form builder. + * + * @return mixed $model + */ + public function getModel() + { + return $this->model; + } + + /** + * Close the current form. + * + * @return string + */ + public function close() + { + $this->labels = []; + + $this->model = null; + + return $this->toHtmlString(''); + } + + /** + * Generate a hidden field with the current CSRF token. + * + * @return string + */ + public function token() + { + $token = ! empty($this->csrfToken) ? $this->csrfToken : $this->session->token(); + + return $this->hidden('_token', $token); + } + + /** + * Create a form label element. + * + * @param string $name + * @param string $value + * @param array $options + * @param bool $escape_html + * + * @return \Illuminate\Support\HtmlString + */ + public function label($name, $value = null, $options = [], $escape_html = true) + { + $this->labels[] = $name; + + $options = $this->html->attributes($options); + + $value = $this->formatLabel($name, $value); + + if ($escape_html) { + $value = $this->html->entities($value); + } + + return $this->toHtmlString(''); + } + + /** + * Format the label value. + * + * @param string $name + * @param string|null $value + * + * @return string + */ + protected function formatLabel($name, $value) + { + return $value ?: ucwords(str_replace('_', ' ', $name)); + } + + /** + * Create a form input field. + * + * @param string $type + * @param string $name + * @param string $value + * @param array $options + * + * @return \Illuminate\Support\HtmlString + */ + public function input($type, $name, $value = null, $options = []) + { + $this->type = $type; + + if (! isset($options['name'])) { + $options['name'] = $name; + } + + // We will get the appropriate value for the given field. We will look for the + // value in the session for the value in the old input data then we'll look + // in the model instance if one is set. Otherwise we will just use empty. + $id = $this->getIdAttribute($name, $options); + + if (! in_array($type, $this->skipValueTypes)) { + $value = $this->getValueAttribute($name, $value); + } + + // Once we have the type, value, and ID we can merge them into the rest of the + // attributes array so we can convert them into their HTML attribute format + // when creating the HTML element. Then, we will return the entire input. + $merge = compact('type', 'value', 'id'); + + $options = array_merge($options, $merge); + + return $this->toHtmlString('html->attributes($options) . '>'); + } + + /** + * Create a text input field. + * + * @param string $name + * @param string $value + * @param array $options + * + * @return \Illuminate\Support\HtmlString + */ + public function text($name, $value = null, $options = []) + { + return $this->input('text', $name, $value, $options); + } + + /** + * Create a password input field. + * + * @param string $name + * @param array $options + * + * @return \Illuminate\Support\HtmlString + */ + public function password($name, $options = []) + { + return $this->input('password', $name, '', $options); + } + + /** + * Create a hidden input field. + * + * @param string $name + * @param string $value + * @param array $options + * + * @return \Illuminate\Support\HtmlString + */ + public function hidden($name, $value = null, $options = []) + { + return $this->input('hidden', $name, $value, $options); + } + + /** + * Create a search input field. + * + * @param string $name + * @param string $value + * @param array $options + * + * @return \Illuminate\Support\HtmlString + */ + public function search($name, $value = null, $options = []) + { + return $this->input('search', $name, $value, $options); + } + + /** + * Create an e-mail input field. + * + * @param string $name + * @param string $value + * @param array $options + * + * @return \Illuminate\Support\HtmlString + */ + public function email($name, $value = null, $options = []) + { + return $this->input('email', $name, $value, $options); + } + + /** + * Create a tel input field. + * + * @param string $name + * @param string $value + * @param array $options + * + * @return \Illuminate\Support\HtmlString + */ + public function tel($name, $value = null, $options = []) + { + return $this->input('tel', $name, $value, $options); + } + + /** + * Create a number input field. + * + * @param string $name + * @param string $value + * @param array $options + * + * @return \Illuminate\Support\HtmlString + */ + public function number($name, $value = null, $options = []) + { + return $this->input('number', $name, $value, $options); + } + + /** + * Create a date input field. + * + * @param string $name + * @param string $value + * @param array $options + * + * @return \Illuminate\Support\HtmlString + */ + public function date($name, $value = null, $options = []) + { + if ($value instanceof DateTime) { + $value = $value->format('Y-m-d'); + } + + return $this->input('date', $name, $value, $options); + } + + /** + * Create a datetime input field. + * + * @param string $name + * @param string $value + * @param array $options + * + * @return \Illuminate\Support\HtmlString + */ + public function datetime($name, $value = null, $options = []) + { + if ($value instanceof DateTime) { + $value = $value->format(DateTime::RFC3339); + } + + return $this->input('datetime', $name, $value, $options); + } + + /** + * Create a datetime-local input field. + * + * @param string $name + * @param string $value + * @param array $options + * + * @return \Illuminate\Support\HtmlString + */ + public function datetimeLocal($name, $value = null, $options = []) + { + if ($value instanceof DateTime) { + $value = $value->format('Y-m-d\TH:i'); + } + + return $this->input('datetime-local', $name, $value, $options); + } + + /** + * Create a time input field. + * + * @param string $name + * @param string $value + * @param array $options + * + * @return \Illuminate\Support\HtmlString + */ + public function time($name, $value = null, $options = []) + { + return $this->input('time', $name, $value, $options); + } + + /** + * Create a url input field. + * + * @param string $name + * @param string $value + * @param array $options + * + * @return \Illuminate\Support\HtmlString + */ + public function url($name, $value = null, $options = []) + { + return $this->input('url', $name, $value, $options); + } + + /** + * Create a file input field. + * + * @param string $name + * @param array $options + * + * @return \Illuminate\Support\HtmlString + */ + public function file($name, $options = []) + { + return $this->input('file', $name, null, $options); + } + + /** + * Create a textarea input field. + * + * @param string $name + * @param string $value + * @param array $options + * + * @return \Illuminate\Support\HtmlString + */ + public function textarea($name, $value = null, $options = []) + { + $this->type = 'textarea'; + + if (! isset($options['name'])) { + $options['name'] = $name; + } + + // Next we will look for the rows and cols attributes, as each of these are put + // on the textarea element definition. If they are not present, we will just + // assume some sane default values for these attributes for the developer. + $options = $this->setTextAreaSize($options); + + $options['id'] = $this->getIdAttribute($name, $options); + + $value = (string) $this->getValueAttribute($name, $value); + + unset($options['size']); + + // Next we will convert the attributes into a string form. Also we have removed + // the size attribute, as it was merely a short-cut for the rows and cols on + // the element. Then we'll create the final textarea elements HTML for us. + $options = $this->html->attributes($options); + + return $this->toHtmlString('' . e($value, false). ''); + } + + /** + * Set the text area size on the attributes. + * + * @param array $options + * + * @return array + */ + protected function setTextAreaSize($options) + { + if (isset($options['size'])) { + return $this->setQuickTextAreaSize($options); + } + + // If the "size" attribute was not specified, we will just look for the regular + // columns and rows attributes, using sane defaults if these do not exist on + // the attributes array. We'll then return this entire options array back. + $cols = array_get($options, 'cols', 50); + + $rows = array_get($options, 'rows', 10); + + return array_merge($options, compact('cols', 'rows')); + } + + /** + * Set the text area size using the quick "size" attribute. + * + * @param array $options + * + * @return array + */ + protected function setQuickTextAreaSize($options) + { + $segments = explode('x', $options['size']); + + return array_merge($options, ['cols' => $segments[0], 'rows' => $segments[1]]); + } + + /** + * Create a select box field. + * + * @param string $name + * @param array $list + * @param string|bool $selected + * @param array $selectAttributes + * @param array $optionsAttributes + * @param array $optgroupsAttributes + * + * @return \Illuminate\Support\HtmlString + */ + public function select( + $name, + $list = [], + $selected = null, + array $selectAttributes = [], + array $optionsAttributes = [], + array $optgroupsAttributes = [] + ) { + $this->type = 'select'; + + // When building a select box the "value" attribute is really the selected one + // so we will use that when checking the model or session for a value which + // should provide a convenient method of re-populating the forms on post. + $selected = $this->getValueAttribute($name, $selected); + + $selectAttributes['id'] = $this->getIdAttribute($name, $selectAttributes); + + if (! isset($selectAttributes['name'])) { + $selectAttributes['name'] = $name; + } + + // We will simply loop through the options and build an HTML value for each of + // them until we have an array of HTML declarations. Then we will join them + // all together into one single HTML element that can be put on the form. + $html = []; + + if (isset($selectAttributes['placeholder'])) { + $html[] = $this->placeholderOption($selectAttributes['placeholder'], $selected); + unset($selectAttributes['placeholder']); + } + + foreach ($list as $value => $display) { + $optionAttributes = $optionsAttributes[$value] ?? []; + $optgroupAttributes = $optgroupsAttributes[$value] ?? []; + $html[] = $this->getSelectOption($display, $value, $selected, $optionAttributes, $optgroupAttributes); + } + + // Once we have all of this HTML, we can join this into a single element after + // formatting the attributes into an HTML "attributes" string, then we will + // build out a final select statement, which will contain all the values. + $selectAttributes = $this->html->attributes($selectAttributes); + + $list = implode('', $html); + + return $this->toHtmlString("{$list}"); + } + + /** + * Create a select range field. + * + * @param string $name + * @param string $begin + * @param string $end + * @param string $selected + * @param array $options + * + * @return \Illuminate\Support\HtmlString + */ + public function selectRange($name, $begin, $end, $selected = null, $options = []) + { + $range = array_combine($range = range($begin, $end), $range); + + return $this->select($name, $range, $selected, $options); + } + + /** + * Create a select year field. + * + * @param string $name + * @param string $begin + * @param string $end + * @param string $selected + * @param array $options + * + * @return mixed + */ + public function selectYear() + { + return call_user_func_array([$this, 'selectRange'], func_get_args()); + } + + /** + * Create a select month field. + * + * @param string $name + * @param string $selected + * @param array $options + * @param string $format + * + * @return \Illuminate\Support\HtmlString + */ + public function selectMonth($name, $selected = null, $options = [], $format = '%B') + { + $months = []; + + foreach (range(1, 12) as $month) { + $months[$month] = strftime($format, mktime(0, 0, 0, $month, 1)); + } + + return $this->select($name, $months, $selected, $options); + } + + /** + * Get the select option for the given value. + * + * @param string $display + * @param string $value + * @param string $selected + * @param array $attributes + * @param array $optgroupAttributes + * + * @return \Illuminate\Support\HtmlString + */ + public function getSelectOption($display, $value, $selected, array $attributes = [], array $optgroupAttributes = []) + { + if (is_array($display)) { + return $this->optionGroup($display, $value, $selected, $optgroupAttributes, $attributes); + } + + return $this->option($display, $value, $selected, $attributes); + } + + /** + * Create an option group form element. + * + * @param array $list + * @param string $label + * @param string $selected + * @param array $attributes + * @param array $optionsAttributes + * @param integer $level + * + * @return \Illuminate\Support\HtmlString + */ + protected function optionGroup($list, $label, $selected, array $attributes = [], array $optionsAttributes = [], $level = 0) + { + $html = []; + $space = str_repeat(" ", $level); + foreach ($list as $value => $display) { + $optionAttributes = $optionsAttributes[$value] ?? []; + if (is_array($display)) { + $html[] = $this->optionGroup($display, $value, $selected, $attributes, $optionAttributes, $level+5); + } else { + $html[] = $this->option($space.$display, $value, $selected, $optionAttributes); + } + } + return $this->toHtmlString('html->attributes($attributes) . '>' . implode('', $html) . ''); + } + + /** + * Create a select element option. + * + * @param string $display + * @param string $value + * @param string $selected + * @param array $attributes + * + * @return \Illuminate\Support\HtmlString + */ + protected function option($display, $value, $selected, array $attributes = []) + { + $selected = $this->getSelectedValue($value, $selected); + + $options = array_merge(['value' => $value, 'selected' => $selected], $attributes); + + $string = 'html->attributes($options) . '>'; + if ($display !== null) { + $string .= e($display, false) . ''; + } + + return $this->toHtmlString($string); + } + + /** + * Create a placeholder select element option. + * + * @param $display + * @param $selected + * + * @return \Illuminate\Support\HtmlString + */ + protected function placeholderOption($display, $selected) + { + $selected = $this->getSelectedValue(null, $selected); + + $options = [ + 'selected' => $selected, + 'value' => '', + ]; + + return $this->toHtmlString('html->attributes($options) . '>' . e($display, false) . ''); + } + + /** + * Determine if the value is selected. + * + * @param string $value + * @param string $selected + * + * @return null|string + */ + protected function getSelectedValue($value, $selected) + { + if (is_array($selected)) { + return in_array($value, $selected, true) || in_array((string) $value, $selected, true) ? 'selected' : null; + } elseif ($selected instanceof Collection) { + return $selected->contains($value) ? 'selected' : null; + } + if (is_int($value) && is_bool($selected)) { + return (bool)$value === $selected; + } + return ((string) $value === (string) $selected) ? 'selected' : null; + } + + /** + * Create a checkbox input field. + * + * @param string $name + * @param mixed $value + * @param bool $checked + * @param array $options + * + * @return \Illuminate\Support\HtmlString + */ + public function checkbox($name, $value = 1, $checked = null, $options = []) + { + return $this->checkable('checkbox', $name, $value, $checked, $options); + } + + /** + * Create a radio button input field. + * + * @param string $name + * @param mixed $value + * @param bool $checked + * @param array $options + * + * @return \Illuminate\Support\HtmlString + */ + public function radio($name, $value = null, $checked = null, $options = []) + { + if (is_null($value)) { + $value = $name; + } + + return $this->checkable('radio', $name, $value, $checked, $options); + } + + /** + * Create a checkable input field. + * + * @param string $type + * @param string $name + * @param mixed $value + * @param bool $checked + * @param array $options + * + * @return \Illuminate\Support\HtmlString + */ + protected function checkable($type, $name, $value, $checked, $options) + { + $this->type = $type; + + $checked = $this->getCheckedState($type, $name, $value, $checked); + + if ($checked) { + $options['checked'] = 'checked'; + } + + return $this->input($type, $name, $value, $options); + } + + /** + * Get the check state for a checkable input. + * + * @param string $type + * @param string $name + * @param mixed $value + * @param bool $checked + * + * @return bool + */ + protected function getCheckedState($type, $name, $value, $checked) + { + switch ($type) { + case 'checkbox': + return $this->getCheckboxCheckedState($name, $value, $checked); + + case 'radio': + return $this->getRadioCheckedState($name, $value, $checked); + + default: + return $this->compareValues($name, $value); + } + } + + /** + * Get the check state for a checkbox input. + * + * @param string $name + * @param mixed $value + * @param bool $checked + * + * @return bool + */ + protected function getCheckboxCheckedState($name, $value, $checked) + { + $request = $this->request($name); + + if (isset($this->session) && ! $this->oldInputIsEmpty() && is_null($this->old($name)) && !$request) { + return false; + } + + if ($this->missingOldAndModel($name) && is_null($request)) { + return $checked; + } + + $posted = $this->getValueAttribute($name, $checked); + + if (is_array($posted)) { + return in_array($value, $posted); + } elseif ($posted instanceof Collection) { + return $posted->contains('id', $value); + } else { + return (bool) $posted; + } + } + + /** + * Get the check state for a radio input. + * + * @param string $name + * @param mixed $value + * @param bool $checked + * + * @return bool + */ + protected function getRadioCheckedState($name, $value, $checked) + { + $request = $this->request($name); + + if ($this->missingOldAndModel($name) && !$request) { + return $checked; + } + + return $this->compareValues($name, $value); + } + + /** + * Determine if the provide value loosely compares to the value assigned to the field. + * Use loose comparison because Laravel model casting may be in affect and therefore + * 1 == true and 0 == false. + * + * @param string $name + * @param string $value + * @return bool + */ + protected function compareValues($name, $value) + { + return $this->getValueAttribute($name) == $value; + } + + /** + * Determine if old input or model input exists for a key. + * + * @param string $name + * + * @return bool + */ + protected function missingOldAndModel($name) + { + return (is_null($this->old($name)) && is_null($this->getModelValueAttribute($name))); + } + + /** + * Create a HTML reset input element. + * + * @param string $value + * @param array $attributes + * + * @return \Illuminate\Support\HtmlString + */ + public function reset($value, $attributes = []) + { + return $this->input('reset', null, $value, $attributes); + } + + /** + * Create a HTML image input element. + * + * @param string $url + * @param string $name + * @param array $attributes + * + * @return \Illuminate\Support\HtmlString + */ + public function image($url, $name = null, $attributes = []) + { + $attributes['src'] = $this->url->asset($url); + + return $this->input('image', $name, null, $attributes); + } + + /** + * Create a color input field. + * + * @param string $name + * @param string $value + * @param array $options + * + * @return \Illuminate\Support\HtmlString + */ + public function color($name, $value = null, $options = []) + { + return $this->input('color', $name, $value, $options); + } + + /** + * Create a submit button element. + * + * @param string $value + * @param array $options + * + * @return \Illuminate\Support\HtmlString + */ + public function submit($value = null, $options = []) + { + return $this->input('submit', null, $value, $options); + } + + /** + * Create a button element. + * + * @param string $value + * @param array $options + * + * @return \Illuminate\Support\HtmlString + */ + public function button($value = null, $options = []) + { + if (! array_key_exists('type', $options)) { + $options['type'] = 'button'; + } + + return $this->toHtmlString('html->attributes($options) . '>' . $value . ''); + } + + /** + * Parse the form action method. + * + * @param string $method + * + * @return string + */ + protected function getMethod($method) + { + $method = strtoupper($method); + + return $method !== 'GET' ? 'POST' : $method; + } + + /** + * Get the form action from the options. + * + * @param array $options + * + * @return string + */ + protected function getAction(array $options) + { + // We will also check for a "route" or "action" parameter on the array so that + // developers can easily specify a route or controller action when creating + // a form providing a convenient interface for creating the form actions. + if (isset($options['url'])) { + return $this->getUrlAction($options['url']); + } + + if (isset($options['route'])) { + return $this->getRouteAction($options['route']); + } + + // If an action is available, we are attempting to open a form to a controller + // action route. So, we will use the URL generator to get the path to these + // actions and return them from the method. Otherwise, we'll use current. + elseif (isset($options['action'])) { + return $this->getControllerAction($options['action']); + } + + return $this->url->current(); + } + + /** + * Get the action for a "url" option. + * + * @param array|string $options + * + * @return string + */ + protected function getUrlAction($options) + { + if (is_array($options)) { + return $this->url->to($options[0], array_slice($options, 1)); + } + + return $this->url->to($options); + } + + /** + * Get the action for a "route" option. + * + * @param array|string $options + * + * @return string + */ + protected function getRouteAction($options) + { + if (is_array($options)) { + return $this->url->route($options[0], array_slice($options, 1)); + } + + return $this->url->route($options); + } + + /** + * Get the action for an "action" option. + * + * @param array|string $options + * + * @return string + */ + protected function getControllerAction($options) + { + if (is_array($options)) { + return $this->url->action($options[0], array_slice($options, 1)); + } + + return $this->url->action($options); + } + + /** + * Get the form appendage for the given method. + * + * @param string $method + * + * @return string + */ + protected function getAppendage($method) + { + list($method, $appendage) = [strtoupper($method), '']; + + // If the HTTP method is in this list of spoofed methods, we will attach the + // method spoofer hidden input to the form. This allows us to use regular + // form to initiate PUT and DELETE requests in addition to the typical. + if (in_array($method, $this->spoofedMethods)) { + $appendage .= $this->hidden('_method', $method); + } + + // If the method is something other than GET we will go ahead and attach the + // CSRF token to the form, as this can't hurt and is convenient to simply + // always have available on every form the developers creates for them. + if ($method !== 'GET') { + $appendage .= $this->token(); + } + + return $appendage; + } + + /** + * Get the ID attribute for a field name. + * + * @param string $name + * @param array $attributes + * + * @return string + */ + public function getIdAttribute($name, $attributes) + { + if (array_key_exists('id', $attributes)) { + return $attributes['id']; + } + + if (in_array($name, $this->labels)) { + return $name; + } + } + + /** + * Get the value that should be assigned to the field. + * + * @param string $name + * @param string $value + * + * @return mixed + */ + public function getValueAttribute($name, $value = null) + { + if (is_null($name)) { + return $value; + } + + $old = $this->old($name); + + if (! is_null($old) && $name !== '_method') { + return $old; + } + + if (function_exists('app')) { + $hasNullMiddleware = app("Illuminate\Contracts\Http\Kernel") + ->hasMiddleware(ConvertEmptyStringsToNull::class); + + if ($hasNullMiddleware + && is_null($old) + && is_null($value) + && ! is_null($this->view->shared('errors')) + && count($this->view->shared('errors')) > 0 + ) { + return null; + } + } + + $request = $this->request($name); + if (! is_null($request) && $name != '_method') { + return $request; + } + + if (! is_null($value)) { + return $value; + } + + if (isset($this->model)) { + return $this->getModelValueAttribute($name); + } + } + + /** + * Get value from current Request + * @param $name + * @return array|null|string + */ + protected function request($name) + { + if (! isset($this->request)) { + return null; + } + + return $this->request->input($this->transformKey($name)); + } + + /** + * Get the model value that should be assigned to the field. + * + * @param string $name + * + * @return mixed + */ + protected function getModelValueAttribute($name) + { + $key = $this->transformKey($name); + + if (method_exists($this->model, 'getFormValue')) { + return $this->model->getFormValue($key); + } + + return data_get($this->model, $this->transformKey($name)); + } + + /** + * Get a value from the session's old input. + * + * @param string $name + * + * @return mixed + */ + public function old($name) + { + if (isset($this->session)) { + $key = $this->transformKey($name); + $payload = $this->session->getOldInput($key); + + if (! is_array($payload)) { + return $payload; + } + + if (! in_array($this->type, ['select', 'checkbox'])) { + if (! isset($this->payload[$key])) { + $this->payload[$key] = collect($payload); + } + + if (! empty($this->payload[$key])) { + $value = $this->payload[$key]->shift(); + return $value; + } + } + + return $payload; + } + } + + /** + * Determine if the old input is empty. + * + * @return bool + */ + public function oldInputIsEmpty() + { + return (isset($this->session) && count((array) $this->session->getOldInput()) === 0); + } + + /** + * Transform key from array to dot syntax. + * + * @param string $key + * + * @return mixed + */ + protected function transformKey($key) + { + return str_replace(['.', '[]', '[', ']'], ['_', '', '.', ''], $key); + } + + /** + * Transform the string to an Html serializable object + * + * @param $html + * + * @return \Illuminate\Support\HtmlString + */ + protected function toHtmlString($html) + { + return new HtmlString($html); + } + + /** + * Get the session store implementation. + * + * @return \Illuminate\Contracts\Session\Session $session + */ + public function getSessionStore() + { + return $this->session; + } + + /** + * Set the session store implementation. + * + * @param \Illuminate\Contracts\Session\Session $session + * + * @return $this + */ + public function setSessionStore(Session $session) + { + $this->session = $session; + + return $this; + } + + /** + * Dynamically handle calls to the class. + * + * @param string $method + * @param array $parameters + * + * @return \Illuminate\Contracts\View\View|mixed + * + * @throws \BadMethodCallException + */ + public function __call($method, $parameters) + { + if (static::hasComponent($method)) { + return $this->componentCall($method, $parameters); + } + + if (static::hasMacro($method)) { + return $this->macroCall($method, $parameters); + } + + throw new BadMethodCallException("Method {$method} does not exist."); + } +} diff --git a/vendor/laravelcollective/html/src/FormFacade.php b/vendor/laravelcollective/html/src/FormFacade.php new file mode 100644 index 00000000..24d2610e --- /dev/null +++ b/vendor/laravelcollective/html/src/FormFacade.php @@ -0,0 +1,22 @@ +url = $url; + $this->view = $view; + } + + /** + * Convert an HTML string to entities. + * + * @param string $value + * + * @return string + */ + public function entities($value) + { + return htmlentities($value, ENT_QUOTES, 'UTF-8', false); + } + + /** + * Convert entities to HTML characters. + * + * @param string $value + * + * @return string + */ + public function decode($value) + { + return html_entity_decode($value, ENT_QUOTES, 'UTF-8'); + } + + /** + * Generate a link to a JavaScript file. + * + * @param string $url + * @param array $attributes + * @param bool $secure + * + * @return \Illuminate\Support\HtmlString + */ + public function script($url, $attributes = [], $secure = null) + { + $attributes['src'] = $this->url->asset($url, $secure); + + return $this->toHtmlString('attributes($attributes) . '>'); + } + + /** + * Generate a link to a CSS file. + * + * @param string $url + * @param array $attributes + * @param bool $secure + * + * @return \Illuminate\Support\HtmlString + */ + public function style($url, $attributes = [], $secure = null) + { + $defaults = ['media' => 'all', 'type' => 'text/css', 'rel' => 'stylesheet']; + + $attributes = array_merge($defaults, $attributes); + + $attributes['href'] = $this->url->asset($url, $secure); + + return $this->toHtmlString('attributes($attributes) . '>'); + } + + /** + * Generate an HTML image element. + * + * @param string $url + * @param string $alt + * @param array $attributes + * @param bool $secure + * + * @return \Illuminate\Support\HtmlString + */ + public function image($url, $alt = null, $attributes = [], $secure = null) + { + $attributes['alt'] = $alt; + + return $this->toHtmlString('attributes($attributes) . '>'); + } + + /** + * Generate a link to a Favicon file. + * + * @param string $url + * @param array $attributes + * @param bool $secure + * + * @return \Illuminate\Support\HtmlString + */ + public function favicon($url, $attributes = [], $secure = null) + { + $defaults = ['rel' => 'shortcut icon', 'type' => 'image/x-icon']; + + $attributes = array_merge($attributes, $defaults); + + $attributes['href'] = $this->url->asset($url, $secure); + + return $this->toHtmlString('attributes($attributes) . '>'); + } + + /** + * Generate a HTML link. + * + * @param string $url + * @param string $title + * @param array $attributes + * @param bool $secure + * @param bool $escape + * + * @return \Illuminate\Support\HtmlString + */ + public function link($url, $title = null, $attributes = [], $secure = null, $escape = true) + { + $url = $this->url->to($url, [], $secure); + + if (is_null($title) || $title === false) { + $title = $url; + } + + if ($escape) { + $title = $this->entities($title); + } + + return $this->toHtmlString('attributes($attributes) . '>' . $title . ''); + } + + /** + * Generate a HTTPS HTML link. + * + * @param string $url + * @param string $title + * @param array $attributes + * + * @return \Illuminate\Support\HtmlString + */ + public function secureLink($url, $title = null, $attributes = []) + { + return $this->link($url, $title, $attributes, true); + } + + /** + * Generate a HTML link to an asset. + * + * @param string $url + * @param string $title + * @param array $attributes + * @param bool $secure + * + * @return \Illuminate\Support\HtmlString + */ + public function linkAsset($url, $title = null, $attributes = [], $secure = null) + { + $url = $this->url->asset($url, $secure); + + return $this->link($url, $title ?: $url, $attributes, $secure); + } + + /** + * Generate a HTTPS HTML link to an asset. + * + * @param string $url + * @param string $title + * @param array $attributes + * + * @return \Illuminate\Support\HtmlString + */ + public function linkSecureAsset($url, $title = null, $attributes = []) + { + return $this->linkAsset($url, $title, $attributes, true); + } + + /** + * Generate a HTML link to a named route. + * + * @param string $name + * @param string $title + * @param array $parameters + * @param array $attributes + * + * @return \Illuminate\Support\HtmlString + */ + public function linkRoute($name, $title = null, $parameters = [], $attributes = []) + { + return $this->link($this->url->route($name, $parameters), $title, $attributes); + } + + /** + * Generate a HTML link to a controller action. + * + * @param string $action + * @param string $title + * @param array $parameters + * @param array $attributes + * + * @return \Illuminate\Support\HtmlString + */ + public function linkAction($action, $title = null, $parameters = [], $attributes = []) + { + return $this->link($this->url->action($action, $parameters), $title, $attributes); + } + + /** + * Generate a HTML link to an email address. + * + * @param string $email + * @param string $title + * @param array $attributes + * @param bool $escape + * + * @return \Illuminate\Support\HtmlString + */ + public function mailto($email, $title = null, $attributes = [], $escape = true) + { + $email = $this->email($email); + + $title = $title ?: $email; + + if ($escape) { + $title = $this->entities($title); + } + + $email = $this->obfuscate('mailto:') . $email; + + return $this->toHtmlString('attributes($attributes) . '>' . $title . ''); + } + + /** + * Obfuscate an e-mail address to prevent spam-bots from sniffing it. + * + * @param string $email + * + * @return string + */ + public function email($email) + { + return str_replace('@', '@', $this->obfuscate($email)); + } + + /** + * Generates non-breaking space entities based on number supplied. + * + * @param int $num + * + * @return string + */ + public function nbsp($num = 1) + { + return str_repeat(' ', $num); + } + + /** + * Generate an ordered list of items. + * + * @param array $list + * @param array $attributes + * + * @return \Illuminate\Support\HtmlString|string + */ + public function ol($list, $attributes = []) + { + return $this->listing('ol', $list, $attributes); + } + + /** + * Generate an un-ordered list of items. + * + * @param array $list + * @param array $attributes + * + * @return \Illuminate\Support\HtmlString|string + */ + public function ul($list, $attributes = []) + { + return $this->listing('ul', $list, $attributes); + } + + /** + * Generate a description list of items. + * + * @param array $list + * @param array $attributes + * + * @return \Illuminate\Support\HtmlString + */ + public function dl(array $list, array $attributes = []) + { + $attributes = $this->attributes($attributes); + + $html = ""; + + foreach ($list as $key => $value) { + $value = (array) $value; + + $html .= "
$key
"; + + foreach ($value as $v_key => $v_value) { + $html .= "
$v_value
"; + } + } + + $html .= ''; + + return $this->toHtmlString($html); + } + + /** + * Create a listing HTML element. + * + * @param string $type + * @param array $list + * @param array $attributes + * + * @return \Illuminate\Support\HtmlString|string + */ + protected function listing($type, $list, $attributes = []) + { + $html = ''; + + if (count($list) === 0) { + return $html; + } + + // Essentially we will just spin through the list and build the list of the HTML + // elements from the array. We will also handled nested lists in case that is + // present in the array. Then we will build out the final listing elements. + foreach ($list as $key => $value) { + $html .= $this->listingElement($key, $type, $value); + } + + $attributes = $this->attributes($attributes); + + return $this->toHtmlString("<{$type}{$attributes}>{$html}"); + } + + /** + * Create the HTML for a listing element. + * + * @param mixed $key + * @param string $type + * @param mixed $value + * + * @return string + */ + protected function listingElement($key, $type, $value) + { + if (is_array($value)) { + return $this->nestedListing($key, $type, $value); + } else { + return '
  • ' . e($value, false) . '
  • '; + } + } + + /** + * Create the HTML for a nested listing attribute. + * + * @param mixed $key + * @param string $type + * @param mixed $value + * + * @return string + */ + protected function nestedListing($key, $type, $value) + { + if (is_int($key)) { + return $this->listing($type, $value); + } else { + return '
  • ' . $key . $this->listing($type, $value) . '
  • '; + } + } + + /** + * Build an HTML attribute string from an array. + * + * @param array $attributes + * + * @return string + */ + public function attributes($attributes) + { + $html = []; + + foreach ((array) $attributes as $key => $value) { + $element = $this->attributeElement($key, $value); + + if (! is_null($element)) { + $html[] = $element; + } + } + + return count($html) > 0 ? ' ' . implode(' ', $html) : ''; + } + + /** + * Build a single attribute element. + * + * @param string $key + * @param string $value + * + * @return string + */ + protected function attributeElement($key, $value) + { + // For numeric keys we will assume that the value is a boolean attribute + // where the presence of the attribute represents a true value and the + // absence represents a false value. + // This will convert HTML attributes such as "required" to a correct + // form instead of using incorrect numerics. + if (is_numeric($key)) { + return $value; + } + + // Treat boolean attributes as HTML properties + if (is_bool($value) && $key !== 'value') { + return $value ? $key : ''; + } + + if (! is_null($value)) { + return $key . '="' . e($value, false) . '"'; + } + } + + /** + * Obfuscate a string to prevent spam-bots from sniffing it. + * + * @param string $value + * + * @return string + */ + public function obfuscate($value) + { + $safe = ''; + + foreach (str_split($value) as $letter) { + if (ord($letter) > 128) { + return $letter; + } + + // To properly obfuscate the value, we will randomly convert each letter to + // its entity or hexadecimal representation, keeping a bot from sniffing + // the randomly obfuscated letters out of the string on the responses. + switch (rand(1, 3)) { + case 1: + $safe .= '&#' . ord($letter) . ';'; + break; + + case 2: + $safe .= '&#x' . dechex(ord($letter)) . ';'; + break; + + case 3: + $safe .= $letter; + } + } + + return $safe; + } + + /** + * Generate a meta tag. + * + * @param string $name + * @param string $content + * @param array $attributes + * + * @return \Illuminate\Support\HtmlString + */ + public function meta($name, $content, array $attributes = []) + { + $defaults = compact('name', 'content'); + + $attributes = array_merge($defaults, $attributes); + + return $this->toHtmlString('attributes($attributes) . '>'); + } + + /** + * Generate an html tag. + * + * @param string $tag + * @param mixed $content + * @param array $attributes + * + * @return \Illuminate\Support\HtmlString + */ + public function tag($tag, $content, array $attributes = []) + { + $content = is_array($content) ? implode('', $content) : $content; + return $this->toHtmlString('<' . $tag . $this->attributes($attributes) . '>' . $this->toHtmlString($content) . ''); + } + + /** + * Transform the string to an Html serializable object + * + * @param $html + * + * @return \Illuminate\Support\HtmlString + */ + protected function toHtmlString($html) + { + return new HtmlString($html); + } + + /** + * Dynamically handle calls to the class. + * + * @param string $method + * @param array $parameters + * + * @return \Illuminate\Contracts\View\View|mixed + * + * @throws \BadMethodCallException + */ + public function __call($method, $parameters) + { + if (static::hasComponent($method)) { + return $this->componentCall($method, $parameters); + } + + if (static::hasMacro($method)) { + return $this->macroCall($method, $parameters); + } + + throw new BadMethodCallException("Method {$method} does not exist."); + } +} diff --git a/vendor/laravelcollective/html/src/HtmlFacade.php b/vendor/laravelcollective/html/src/HtmlFacade.php new file mode 100644 index 00000000..127cdc82 --- /dev/null +++ b/vendor/laravelcollective/html/src/HtmlFacade.php @@ -0,0 +1,22 @@ +registerHtmlBuilder(); + + $this->registerFormBuilder(); + + $this->app->alias('html', HtmlBuilder::class); + $this->app->alias('form', FormBuilder::class); + + $this->registerBladeDirectives(); + } + + /** + * Register the HTML builder instance. + * + * @return void + */ + protected function registerHtmlBuilder() + { + $this->app->singleton('html', function ($app) { + return new HtmlBuilder($app['url'], $app['view']); + }); + } + + /** + * Register the form builder instance. + * + * @return void + */ + protected function registerFormBuilder() + { + $this->app->singleton('form', function ($app) { + $form = new FormBuilder($app['html'], $app['url'], $app['view'], $app['session.store']->token(), $app['request']); + + return $form->setSessionStore($app['session.store']); + }); + } + + /** + * Register Blade directives. + * + * @return void + */ + protected function registerBladeDirectives() + { + $this->app->afterResolving('blade.compiler', function (BladeCompiler $bladeCompiler) { + $namespaces = [ + 'Html' => get_class_methods(HtmlBuilder::class), + 'Form' => get_class_methods(FormBuilder::class), + ]; + + foreach ($namespaces as $namespace => $methods) { + foreach ($methods as $method) { + if (in_array($method, $this->directives)) { + $snakeMethod = Str::snake($method); + $directive = strtolower($namespace).'_'.$snakeMethod; + + $bladeCompiler->directive($directive, function ($expression) use ($namespace, $method) { + return ""; + }); + } + } + } + }); + } + + /** + * Get the services provided by the provider. + * + * @return array + */ + public function provides() + { + return ['html', 'form', HtmlBuilder::class, FormBuilder::class]; + } +} diff --git a/vendor/laravelcollective/html/src/helpers.php b/vendor/laravelcollective/html/src/helpers.php new file mode 100644 index 00000000..14f03610 --- /dev/null +++ b/vendor/laravelcollective/html/src/helpers.php @@ -0,0 +1,70 @@ +link($url, $title, $attributes, $secure, $escape); + } +} + +if (! function_exists('link_to_asset')) { + /** + * Generate a HTML link to an asset. + * + * @param string $url + * @param string $title + * @param array $attributes + * @param bool $secure + * + * @return string + */ + function link_to_asset($url, $title = null, $attributes = [], $secure = null) + { + return app('html')->linkAsset($url, $title, $attributes, $secure); + } +} + +if (! function_exists('link_to_route')) { + /** + * Generate a HTML link to a named route. + * + * @param string $name + * @param string $title + * @param array $parameters + * @param array $attributes + * + * @return string + */ + function link_to_route($name, $title = null, $parameters = [], $attributes = []) + { + return app('html')->linkRoute($name, $title, $parameters, $attributes); + } +} + +if (! function_exists('link_to_action')) { + /** + * Generate a HTML link to a controller action. + * + * @param string $action + * @param string $title + * @param array $parameters + * @param array $attributes + * + * @return string + */ + function link_to_action($action, $title = null, $parameters = [], $attributes = []) + { + return app('html')->linkAction($action, $title, $parameters, $attributes); + } +} From 22ecc44942402669acb1beb63da8876d98bf8039 Mon Sep 17 00:00:00 2001 From: Nazri Date: Tue, 8 May 2018 10:41:38 +0800 Subject: [PATCH 6/9] upload china bank slip --- public/bankslip/hello.jpg | Bin 0 -> 79607 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100755 public/bankslip/hello.jpg diff --git a/public/bankslip/hello.jpg b/public/bankslip/hello.jpg new file mode 100755 index 0000000000000000000000000000000000000000..bd80f272766d5fe8e668aefdb3442b1b50117dc6 GIT binary patch literal 79607 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 W9~{iWpsZsTxEBs&%UNLlxAcDoz<5{y literal 0 HcmV?d00001 From c3ccad0e3ca394c56da940c26aba834785a1cdff Mon Sep 17 00:00:00 2001 From: Nazri Date: Tue, 8 May 2018 10:49:18 +0800 Subject: [PATCH 7/9] upload china bank slip --- .idea/workspace.xml | 177 ++++++++++++++++++++++++-------------------- 1 file changed, 98 insertions(+), 79 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 968a365c..ceae2f92 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,27 +2,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -60,6 +27,11 @@ - -