From 533670f3f165dfe9439c927bb486270267b7bfe9 Mon Sep 17 00:00:00 2001 From: Godfrey M Date: Thu, 24 Feb 2022 14:50:16 -0800 Subject: [PATCH 01/11] faulty method for converting asset acceptance to pdf --- .../Account/AcceptanceController.php | 17 +- composer.json | 1 + composer.lock | 288 +++++++++++++++++- config/app.php | 2 + 4 files changed, 305 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/Account/AcceptanceController.php b/app/Http/Controllers/Account/AcceptanceController.php index b25a8df45..45b59f4ce 100644 --- a/app/Http/Controllers/Account/AcceptanceController.php +++ b/app/Http/Controllers/Account/AcceptanceController.php @@ -10,6 +10,7 @@ use App\Http\Controllers\Controller; use App\Models\CheckoutAcceptance; use App\Models\Company; use App\Models\Contracts\Acceptable; +use Barryvdh\DomPDF\PDF; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Storage; @@ -95,7 +96,6 @@ class AcceptanceController extends Controller if (! Storage::exists('private_uploads/signatures')) { Storage::makeDirectory('private_uploads/signatures', 775); } - $sig_filename = ''; if ($request->filled('signature_output')) { $sig_filename = 'siglog-'.Str::uuid().'-'.date('Y-m-d-his').'.png'; @@ -107,7 +107,6 @@ class AcceptanceController extends Controller if ($request->input('asset_acceptance') == 'accepted') { $acceptance->accept($sig_filename); - event(new CheckoutAccepted($acceptance)); $return_msg = trans('admin/users/message.accepted'); @@ -118,7 +117,21 @@ class AcceptanceController extends Controller $return_msg = trans('admin/users/message.declined'); } + $sig_image=Storage::get('private_uploads/signatures/'.$sig_filename); + $this->SignatureEulaPDF($acceptance, $sig_image ); return redirect()->to('account/accept')->with('success', $return_msg); } + + public function SignatureEulaPDF($acceptance, $sig_image) + { +// When I compact the $data I at least get back an ipsum string in the error message that is recognized as an +// "unknown variable". 2nd param in load view should be the array of things you wanted rendered in the pdf. + $data = [ + 'eula'=> $acceptance->checkoutable->getEula(), + 'signature' => $sig_image, + ]; + $pdf = PDF::loadView('account.accept.create', compact($data)); + return $pdf->download('test.pdf'); + } } diff --git a/composer.json b/composer.json index 1db373027..b8e1e8e18 100644 --- a/composer.json +++ b/composer.json @@ -20,6 +20,7 @@ "alek13/slack": "^2.0", "bacon/bacon-qr-code": "^2.0", "barryvdh/laravel-debugbar": "^3.6", + "barryvdh/laravel-dompdf": "^1.0", "doctrine/cache": "^1.10", "doctrine/common": "^2.12", "doctrine/dbal": "^3.1", diff --git a/composer.lock b/composer.lock index 45b93758f..bbc043aae 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": "4cdd1c1cd704c629b2cee1bee7560207", + "content-hash": "27d33fc59a88ad68ac3cd0c723038fee", "packages": [ { "name": "alek13/slack", @@ -407,6 +407,82 @@ ], "time": "2021-12-14T14:45:18+00:00" }, + { + "name": "barryvdh/laravel-dompdf", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/barryvdh/laravel-dompdf.git", + "reference": "e3f429e97087b2ef19b83e5ed313f080f2477685" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/e3f429e97087b2ef19b83e5ed313f080f2477685", + "reference": "e3f429e97087b2ef19b83e5ed313f080f2477685", + "shasum": "" + }, + "require": { + "dompdf/dompdf": "^1", + "illuminate/support": "^6|^7|^8|^9", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "nunomaduro/larastan": "^1|^2", + "orchestra/testbench": "^4|^5|^6|^7", + "phpro/grumphp": "^1", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + }, + "laravel": { + "providers": [ + "Barryvdh\\DomPDF\\ServiceProvider" + ], + "aliases": { + "PDF": "Barryvdh\\DomPDF\\Facade\\Pdf" + } + } + }, + "autoload": { + "psr-4": { + "Barryvdh\\DomPDF\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "A DOMPDF Wrapper for Laravel", + "keywords": [ + "dompdf", + "laravel", + "pdf" + ], + "support": { + "issues": "https://github.com/barryvdh/laravel-dompdf/issues", + "source": "https://github.com/barryvdh/laravel-dompdf/tree/v1.0.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2022-01-29T08:02:59+00:00" + }, { "name": "brick/math", "version": "0.9.3", @@ -1747,6 +1823,73 @@ "abandoned": "roave/better-reflection", "time": "2020-10-27T21:46:55+00:00" }, + { + "name": "dompdf/dompdf", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/dompdf/dompdf.git", + "reference": "60b704331479a69e9bcdb3496da2315b5c4f94fd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dompdf/dompdf/zipball/60b704331479a69e9bcdb3496da2315b5c4f94fd", + "reference": "60b704331479a69e9bcdb3496da2315b5c4f94fd", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "phenx/php-font-lib": "^0.5.4", + "phenx/php-svg-lib": "^0.3.3 || ^0.4.0", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.3", + "phpunit/phpunit": "^7.5 || ^8 || ^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "suggest": { + "ext-gd": "Needed to process images", + "ext-gmagick": "Improves image processing performance", + "ext-imagick": "Improves image processing performance", + "ext-zlib": "Needed for pdf stream compression" + }, + "type": "library", + "autoload": { + "psr-4": { + "Dompdf\\": "src/" + }, + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1" + ], + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + }, + { + "name": "Brian Sweeney", + "email": "eclecticgeek@gmail.com" + }, + { + "name": "Gabriel Bull", + "email": "me@gabrielbull.com" + } + ], + "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter", + "homepage": "https://github.com/dompdf/dompdf", + "support": { + "issues": "https://github.com/dompdf/dompdf/issues", + "source": "https://github.com/dompdf/dompdf/tree/v1.2.0" + }, + "time": "2022-02-07T13:02:10+00:00" + }, { "name": "dragonmantank/cron-expression", "version": "v3.1.0", @@ -5964,6 +6107,96 @@ "abandoned": "symfony/polyfill-mbstring or symfony/string", "time": "2021-01-07T16:38:58+00:00" }, + { + "name": "phenx/php-font-lib", + "version": "0.5.4", + "source": { + "type": "git", + "url": "https://github.com/dompdf/php-font-lib.git", + "reference": "dd448ad1ce34c63d09baccd05415e361300c35b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dompdf/php-font-lib/zipball/dd448ad1ce34c63d09baccd05415e361300c35b4", + "reference": "dd448ad1ce34c63d09baccd05415e361300c35b4", + "shasum": "" + }, + "require": { + "ext-mbstring": "*" + }, + "require-dev": { + "symfony/phpunit-bridge": "^3 || ^4 || ^5" + }, + "type": "library", + "autoload": { + "psr-4": { + "FontLib\\": "src/FontLib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + } + ], + "description": "A library to read, parse, export and make subsets of different types of font files.", + "homepage": "https://github.com/PhenX/php-font-lib", + "support": { + "issues": "https://github.com/dompdf/php-font-lib/issues", + "source": "https://github.com/dompdf/php-font-lib/tree/0.5.4" + }, + "time": "2021-12-17T19:44:54+00:00" + }, + { + "name": "phenx/php-svg-lib", + "version": "0.4.0", + "source": { + "type": "git", + "url": "https://github.com/dompdf/php-svg-lib.git", + "reference": "3ffbbb037f0871c3a819e90cff8b36dd7e656189" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/3ffbbb037f0871c3a819e90cff8b36dd7e656189", + "reference": "3ffbbb037f0871c3a819e90cff8b36dd7e656189", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^7.4 || ^8.0", + "sabberworm/php-css-parser": "^8.4" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Svg\\": "src/Svg" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + } + ], + "description": "A library to read, parse and export to PDF SVG files.", + "homepage": "https://github.com/PhenX/php-svg-lib", + "support": { + "issues": "https://github.com/dompdf/php-svg-lib/issues", + "source": "https://github.com/dompdf/php-svg-lib/tree/0.4.0" + }, + "time": "2021-12-17T14:08:35+00:00" + }, { "name": "php-http/message-factory", "version": "v1.0.2", @@ -7602,6 +7835,59 @@ }, "time": "2020-09-10T17:20:14+00:00" }, + { + "name": "sabberworm/php-css-parser", + "version": "8.4.0", + "source": { + "type": "git", + "url": "https://github.com/sabberworm/PHP-CSS-Parser.git", + "reference": "e41d2140031d533348b2192a83f02d8dd8a71d30" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/e41d2140031d533348b2192a83f02d8dd8a71d30", + "reference": "e41d2140031d533348b2192a83f02d8dd8a71d30", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": ">=5.6.20" + }, + "require-dev": { + "codacy/coverage": "^1.4", + "phpunit/phpunit": "^4.8.36" + }, + "suggest": { + "ext-mbstring": "for parsing UTF-8 CSS" + }, + "type": "library", + "autoload": { + "psr-4": { + "Sabberworm\\CSS\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Raphael Schweikert" + } + ], + "description": "Parser for CSS Files written in PHP", + "homepage": "https://www.sabberworm.com/blog/2010/6/10/php-css-parser", + "keywords": [ + "css", + "parser", + "stylesheet" + ], + "support": { + "issues": "https://github.com/sabberworm/PHP-CSS-Parser/issues", + "source": "https://github.com/sabberworm/PHP-CSS-Parser/tree/8.4.0" + }, + "time": "2021-12-11T13:40:54+00:00" + }, { "name": "sebastian/comparator", "version": "4.0.6", diff --git a/config/app.php b/config/app.php index 796fa74e7..87588c18f 100755 --- a/config/app.php +++ b/config/app.php @@ -328,6 +328,7 @@ return [ Illuminate\Translation\TranslationServiceProvider::class, Illuminate\Validation\ValidationServiceProvider::class, Illuminate\View\ViewServiceProvider::class, + Barryvdh\DomPDF\ServiceProvider::class, /* * Package Service Providers... @@ -396,6 +397,7 @@ return [ 'Mail' => Illuminate\Support\Facades\Mail::class, 'Notification' => Illuminate\Support\Facades\Notification::class, 'Password' => Illuminate\Support\Facades\Password::class, + 'PDF' => Barryvdh\DomPDF\Facade::class, 'Queue' => Illuminate\Support\Facades\Queue::class, 'Redirect' => Illuminate\Support\Facades\Redirect::class, 'Redis' => Illuminate\Support\Facades\Redis::class, From 59c583ac7485fcc6f9e19cfd68648b2eb0257832 Mon Sep 17 00:00:00 2001 From: Godfrey M Date: Tue, 8 Mar 2022 16:42:27 -0800 Subject: [PATCH 02/11] adds the ability to save eula pdfs to storage, still working on storing them in the DB and exposing them in the UI --- .../Account/AcceptanceController.php | 43 +++++++++++-------- app/Http/Controllers/ActionlogController.php | 7 +++ .../Controllers/Api/ReportsController.php | 1 + .../Transformers/ActionlogsTransformer.php | 2 +- .../account/accept/accept-eula.blade.php | 32 ++++++++++++++ resources/views/reports/activity.blade.php | 1 + routes/web.php | 4 ++ 7 files changed, 72 insertions(+), 18 deletions(-) create mode 100644 resources/views/account/accept/accept-eula.blade.php diff --git a/app/Http/Controllers/Account/AcceptanceController.php b/app/Http/Controllers/Account/AcceptanceController.php index 45b59f4ce..bb5eaafe3 100644 --- a/app/Http/Controllers/Account/AcceptanceController.php +++ b/app/Http/Controllers/Account/AcceptanceController.php @@ -10,11 +10,11 @@ use App\Http\Controllers\Controller; use App\Models\CheckoutAcceptance; use App\Models\Company; use App\Models\Contracts\Acceptable; -use Barryvdh\DomPDF\PDF; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; +use Barryvdh\DomPDF\Facade\Pdf; class AcceptanceController extends Controller { @@ -40,6 +40,7 @@ class AcceptanceController extends Controller { $acceptance = CheckoutAcceptance::find($id); + if (is_null($acceptance)) { return redirect()->route('account.accept')->with('error', trans('admin/hardware/message.does_not_exist')); } @@ -96,20 +97,25 @@ class AcceptanceController extends Controller if (! Storage::exists('private_uploads/signatures')) { Storage::makeDirectory('private_uploads/signatures', 775); } + $sig_filename = ''; + if ($request->filled('signature_output')) { $sig_filename = 'siglog-'.Str::uuid().'-'.date('Y-m-d-his').'.png'; $data_uri = e($request->input('signature_output')); $encoded_image = explode(',', $data_uri); $decoded_image = base64_decode($encoded_image[1]); - Storage::put('private_uploads/signatures/'.$sig_filename, (string) $decoded_image); + $path = Storage::put('private_uploads/signatures/'.$sig_filename, (string) $decoded_image); } if ($request->input('asset_acceptance') == 'accepted') { $acceptance->accept($sig_filename); + event(new CheckoutAccepted($acceptance)); $return_msg = trans('admin/users/message.accepted'); + + } else { $acceptance->decline($sig_filename); @@ -117,21 +123,24 @@ class AcceptanceController extends Controller $return_msg = trans('admin/users/message.declined'); } - $sig_image=Storage::get('private_uploads/signatures/'.$sig_filename); - $this->SignatureEulaPDF($acceptance, $sig_image ); + + $item = $acceptance->checkoutable_type::find($acceptance->checkoutable_id); + + $data = [ + 'item' => $item, + 'eula' => $item->getEula(), + 'signature' => storage_path().'/private_uploads/signatures/'.$sig_filename, + 'logo' => public_path().'/uploads/snipe-logo.png', + ]; + + \Log::error(storage_path().'/eula-pdfs/'.$sig_filename); + + $pdf = Pdf::loadView('account.accept.accept-eula', $data); + $stored_eula = Storage::put('private_uploads/eula-pdfs/accepted-eula-'.date('Y-m-d-h-i-s').'.pdf', $pdf->output()); + + //not sure what im doing here,but I think its something of this. + route('log.storedeula.download', $stored_eula); return redirect()->to('account/accept')->with('success', $return_msg); } - - public function SignatureEulaPDF($acceptance, $sig_image) - { -// When I compact the $data I at least get back an ipsum string in the error message that is recognized as an -// "unknown variable". 2nd param in load view should be the array of things you wanted rendered in the pdf. - $data = [ - 'eula'=> $acceptance->checkoutable->getEula(), - 'signature' => $sig_image, - ]; - $pdf = PDF::loadView('account.accept.create', compact($data)); - return $pdf->download('test.pdf'); - } -} +} \ No newline at end of file diff --git a/app/Http/Controllers/ActionlogController.php b/app/Http/Controllers/ActionlogController.php index 31ac13dab..2b3f6d6f5 100644 --- a/app/Http/Controllers/ActionlogController.php +++ b/app/Http/Controllers/ActionlogController.php @@ -16,4 +16,11 @@ class ActionlogController extends Controller return Response::make($contents)->header('Content-Type', $filetype); } + + public function getStoredEula($filename){ + $this->authorize('view', \App\Models\Asset::class); + $file = config('app.private_uploads').'/eula-pdfs/'.$filename; + + return Response::download($file); + } } diff --git a/app/Http/Controllers/Api/ReportsController.php b/app/Http/Controllers/Api/ReportsController.php index 1406dba79..815138654 100644 --- a/app/Http/Controllers/Api/ReportsController.php +++ b/app/Http/Controllers/Api/ReportsController.php @@ -52,6 +52,7 @@ class ReportsController extends Controller 'accept_signature', 'action_type', 'note', + 'stored_eula_file', ]; $sort = in_array($request->input('sort'), $allowed_columns) ? e($request->input('sort')) : 'created_at'; diff --git a/app/Http/Transformers/ActionlogsTransformer.php b/app/Http/Transformers/ActionlogsTransformer.php index 795915710..4e774ac58 100644 --- a/app/Http/Transformers/ActionlogsTransformer.php +++ b/app/Http/Transformers/ActionlogsTransformer.php @@ -112,7 +112,7 @@ class ActionlogsTransformer 'signature_file' => ($actionlog->accept_signature) ? route('log.signature.view', ['filename' => $actionlog->accept_signature ]) : null, 'log_meta' => ((isset($clean_meta)) && (is_array($clean_meta))) ? $clean_meta: null, 'action_date' => ($actionlog->action_date) ? Helper::getFormattedDateObject($actionlog->action_date, 'datetime'): Helper::getFormattedDateObject($actionlog->created_at, 'datetime'), - + 'stored_eula_file' => ($actionlog->stored_eula_file) ? route('log.storedeula.download', [ 'filename' => $actionlog->stored_eula_file]) : null, ]; return $array; diff --git a/resources/views/account/accept/accept-eula.blade.php b/resources/views/account/accept/accept-eula.blade.php new file mode 100644 index 000000000..71a08169f --- /dev/null +++ b/resources/views/account/accept/accept-eula.blade.php @@ -0,0 +1,32 @@ + + + + + + + HTML 5 Boilerplate + + + + +@if ($signature) +
+ +
+@endif +
+ +

{{ $item->name }}

+

Date: {{ date('Y-m-d h:i') }}

+@if ($eula) + {!! $eula !!} +@endif + +

+@if ($signature) +
+ +
+@endif + + \ No newline at end of file diff --git a/resources/views/reports/activity.blade.php b/resources/views/reports/activity.blade.php index 92af14ed0..1ab6f74cf 100644 --- a/resources/views/reports/activity.blade.php +++ b/resources/views/reports/activity.blade.php @@ -53,6 +53,7 @@ {{ trans('general.to') }} {{ trans('general.notes') }} {{ trans('general.changed') }} + {{ trans('general.accept_eula') }} diff --git a/routes/web.php b/routes/web.php index 315d84165..0eb5d8ec5 100644 --- a/routes/web.php +++ b/routes/web.php @@ -124,6 +124,10 @@ Route::group(['middleware' => 'auth'], function () { 'display-sig/{filename}', [ActionlogController::class, 'displaySig'] )->name('log.signature.view'); + Route::get( + 'stored-eula-file/{$filename}/download', + [ActionlogController::class, 'getStoredEula'] + )->name('log.storedeula.download'); }); /* From e1a6a2afc65f78cd7305fb725ad83d19256adbc2 Mon Sep 17 00:00:00 2001 From: Godfrey M Date: Thu, 10 Mar 2022 12:15:50 -0800 Subject: [PATCH 03/11] adds translation for accept_eula, a bit more logic on the Acceptance Controller that is not working yet --- .../Account/AcceptanceController.php | 18 ++++++++-- app/Http/Controllers/ActionlogController.php | 1 + ...001334_add_eula_to_checkout_acceptance.php | 7 ++++ ...2_03_10_175740_add_eula_to_action_logs.php | 34 +++++++++++++++++++ resources/lang/en/general.php | 1 + resources/views/hardware/view.blade.php | 5 +-- resources/views/reports/activity.blade.php | 1 - routes/web.php | 4 +-- 8 files changed, 61 insertions(+), 10 deletions(-) create mode 100644 database/migrations/2022_03_09_001334_add_eula_to_checkout_acceptance.php create mode 100644 database/migrations/2022_03_10_175740_add_eula_to_action_logs.php diff --git a/app/Http/Controllers/Account/AcceptanceController.php b/app/Http/Controllers/Account/AcceptanceController.php index bb5eaafe3..b3d4d26a2 100644 --- a/app/Http/Controllers/Account/AcceptanceController.php +++ b/app/Http/Controllers/Account/AcceptanceController.php @@ -7,9 +7,12 @@ use App\Events\CheckoutDeclined; use App\Events\ItemAccepted; use App\Events\ItemDeclined; use App\Http\Controllers\Controller; +use App\Models\Actionlog; +use App\Models\Asset; use App\Models\CheckoutAcceptance; use App\Models\Company; use App\Models\Contracts\Acceptable; +use App\Models\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Storage; @@ -136,10 +139,19 @@ class AcceptanceController extends Controller \Log::error(storage_path().'/eula-pdfs/'.$sig_filename); $pdf = Pdf::loadView('account.accept.accept-eula', $data); - $stored_eula = Storage::put('private_uploads/eula-pdfs/accepted-eula-'.date('Y-m-d-h-i-s').'.pdf', $pdf->output()); - + $stored_eula= Storage::put('private_uploads/eula-pdfs/accepted-eula-'.date('Y-m-d-h-i-s').'.pdf', $pdf->output()); + \Log::info($stored_eula); //not sure what im doing here,but I think its something of this. - route('log.storedeula.download', $stored_eula); + Actionlog::Create([ + 'item_id' => $acceptance->id, + 'stored_eula' => $stored_eula, + 'action_type' => 'accepted', + ]); + \log::info(Actionlog::Create([ + 'item_id' => $acceptance->id, + 'stored_eula' => $stored_eula, + 'action_type' => 'accepted', + ])); return redirect()->to('account/accept')->with('success', $return_msg); } diff --git a/app/Http/Controllers/ActionlogController.php b/app/Http/Controllers/ActionlogController.php index 2b3f6d6f5..f4e86e0d5 100644 --- a/app/Http/Controllers/ActionlogController.php +++ b/app/Http/Controllers/ActionlogController.php @@ -21,6 +21,7 @@ class ActionlogController extends Controller $this->authorize('view', \App\Models\Asset::class); $file = config('app.private_uploads').'/eula-pdfs/'.$filename; + return Response::download($file); } } diff --git a/database/migrations/2022_03_09_001334_add_eula_to_checkout_acceptance.php b/database/migrations/2022_03_09_001334_add_eula_to_checkout_acceptance.php new file mode 100644 index 000000000..39b21a4c9 --- /dev/null +++ b/database/migrations/2022_03_09_001334_add_eula_to_checkout_acceptance.php @@ -0,0 +1,7 @@ +text('stored_eula')->nullable()->default(null); + $table->string('stored_eula_file')->nullable()->default(null); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('action_logs', function (Blueprint $table) { + $table->dropColumn('stored_eula'); + $table->dropColumn('stored_eula_file'); + }); + } +} diff --git a/resources/lang/en/general.php b/resources/lang/en/general.php index 0e38b2193..6ebc333c3 100644 --- a/resources/lang/en/general.php +++ b/resources/lang/en/general.php @@ -237,6 +237,7 @@ 'state' => 'State', 'status_labels' => 'Status Labels', 'status' => 'Status', + 'accept_eula' => 'Acceptance Agreement', 'supplier' => 'Supplier', 'suppliers' => 'Suppliers', 'sure_to_delete' => 'Are you sure you wish to delete', diff --git a/resources/views/hardware/view.blade.php b/resources/views/hardware/view.blade.php index 3a2dab4c1..7c5e28b7a 100755 --- a/resources/views/hardware/view.blade.php +++ b/resources/views/hardware/view.blade.php @@ -1093,15 +1093,12 @@ {{ trans('general.item') }} {{ trans('general.target') }} {{ trans('general.notes') }} - @if ($snipeSettings->require_accept_signature=='1') - {{ trans('general.signature') }} - @endif + {{ trans('general.accept_eula') }} {{ trans('general.download') }} {{ trans('admin/hardware/table.changed')}} - diff --git a/resources/views/reports/activity.blade.php b/resources/views/reports/activity.blade.php index 1ab6f74cf..92af14ed0 100644 --- a/resources/views/reports/activity.blade.php +++ b/resources/views/reports/activity.blade.php @@ -53,7 +53,6 @@ {{ trans('general.to') }} {{ trans('general.notes') }} {{ trans('general.changed') }} - {{ trans('general.accept_eula') }} diff --git a/routes/web.php b/routes/web.php index 0eb5d8ec5..7f1572b16 100644 --- a/routes/web.php +++ b/routes/web.php @@ -125,8 +125,8 @@ Route::group(['middleware' => 'auth'], function () { [ActionlogController::class, 'displaySig'] )->name('log.signature.view'); Route::get( - 'stored-eula-file/{$filename}/download', - [ActionlogController::class, 'getStoredEula'] + 'stored-eula-file/{$filename}/', + [\App\Http\Controllers\Api\ReportsController::class, 'getStoredEula'] )->name('log.storedeula.download'); }); From b2f7262cd2dda6ffd046eaedceb2091947210a80 Mon Sep 17 00:00:00 2001 From: Godfrey M Date: Mon, 14 Mar 2022 19:38:36 -0700 Subject: [PATCH 04/11] adds table structure for asset history --- .../Account/AcceptanceController.php | 22 ++++------ app/Http/Controllers/ActionlogController.php | 2 +- .../Transformers/ActionlogsTransformer.php | 2 +- app/Listeners/LogListener.php | 3 +- app/Models/Actionlog.php | 2 +- ...001334_add_eula_to_checkout_acceptance.php | 31 ++++++++++++++ resources/views/hardware/view.blade.php | 42 ++++++++++++++++++- .../views/partials/bootstrap-table.blade.php | 1 - 8 files changed, 85 insertions(+), 20 deletions(-) diff --git a/app/Http/Controllers/Account/AcceptanceController.php b/app/Http/Controllers/Account/AcceptanceController.php index b3d4d26a2..2b9f2881b 100644 --- a/app/Http/Controllers/Account/AcceptanceController.php +++ b/app/Http/Controllers/Account/AcceptanceController.php @@ -102,12 +102,12 @@ class AcceptanceController extends Controller } $sig_filename = ''; - if ($request->filled('signature_output')) { $sig_filename = 'siglog-'.Str::uuid().'-'.date('Y-m-d-his').'.png'; $data_uri = e($request->input('signature_output')); $encoded_image = explode(',', $data_uri); $decoded_image = base64_decode($encoded_image[1]); + $acceptance->stored_eula_file = 'private_uploads/eula-pdfs/accepted-eula-'.date('Y-m-d-h-i-s').'.pdf'; $path = Storage::put('private_uploads/signatures/'.$sig_filename, (string) $decoded_image); } @@ -139,19 +139,13 @@ class AcceptanceController extends Controller \Log::error(storage_path().'/eula-pdfs/'.$sig_filename); $pdf = Pdf::loadView('account.accept.accept-eula', $data); - $stored_eula= Storage::put('private_uploads/eula-pdfs/accepted-eula-'.date('Y-m-d-h-i-s').'.pdf', $pdf->output()); - \Log::info($stored_eula); - //not sure what im doing here,but I think its something of this. - Actionlog::Create([ - 'item_id' => $acceptance->id, - 'stored_eula' => $stored_eula, - 'action_type' => 'accepted', - ]); - \log::info(Actionlog::Create([ - 'item_id' => $acceptance->id, - 'stored_eula' => $stored_eula, - 'action_type' => 'accepted', - ])); + Storage::put($acceptance->stored_eula_file, $pdf->output()); + $a=new Actionlog(); + $a->stored_eula = $item->getEula(); + $a->stored_eula_file = $acceptance->stored_eula_file; + $a->save(); + \log::info($a); + return redirect()->to('account/accept')->with('success', $return_msg); } diff --git a/app/Http/Controllers/ActionlogController.php b/app/Http/Controllers/ActionlogController.php index f4e86e0d5..8d45aebe1 100644 --- a/app/Http/Controllers/ActionlogController.php +++ b/app/Http/Controllers/ActionlogController.php @@ -19,7 +19,7 @@ class ActionlogController extends Controller public function getStoredEula($filename){ $this->authorize('view', \App\Models\Asset::class); - $file = config('app.private_uploads').'/eula-pdfs/'.$filename; + $file = config('app'.$filename); return Response::download($file); diff --git a/app/Http/Transformers/ActionlogsTransformer.php b/app/Http/Transformers/ActionlogsTransformer.php index 4e774ac58..78fff1b20 100644 --- a/app/Http/Transformers/ActionlogsTransformer.php +++ b/app/Http/Transformers/ActionlogsTransformer.php @@ -112,7 +112,7 @@ class ActionlogsTransformer 'signature_file' => ($actionlog->accept_signature) ? route('log.signature.view', ['filename' => $actionlog->accept_signature ]) : null, 'log_meta' => ((isset($clean_meta)) && (is_array($clean_meta))) ? $clean_meta: null, 'action_date' => ($actionlog->action_date) ? Helper::getFormattedDateObject($actionlog->action_date, 'datetime'): Helper::getFormattedDateObject($actionlog->created_at, 'datetime'), - 'stored_eula_file' => ($actionlog->stored_eula_file) ? route('log.storedeula.download', [ 'filename' => $actionlog->stored_eula_file]) : null, + 'stored_eula_file' => $actionlog->stored_eula_file, ]; return $array; diff --git a/app/Listeners/LogListener.php b/app/Listeners/LogListener.php index f337df60f..3988d116c 100644 --- a/app/Listeners/LogListener.php +++ b/app/Listeners/LogListener.php @@ -34,11 +34,12 @@ class LogListener public function onCheckoutAccepted(CheckoutAccepted $event) { - $logaction = new Actionlog(); + $logaction = new Actionlog(); $logaction->item()->associate($event->acceptance->checkoutable); $logaction->target()->associate($event->acceptance->assignedTo); $logaction->accept_signature = $event->acceptance->signature_filename; + $logaction->stored_eula_file = $event->acceptance->stored_eula_file; $logaction->action_type = 'accepted'; // TODO: log the actual license seat that was checked out diff --git a/app/Models/Actionlog.php b/app/Models/Actionlog.php index edbc9d9ee..de313a1b2 100755 --- a/app/Models/Actionlog.php +++ b/app/Models/Actionlog.php @@ -25,7 +25,7 @@ class Actionlog extends SnipeModel protected $table = 'action_logs'; public $timestamps = true; - protected $fillable = ['created_at', 'item_type', 'user_id', 'item_id', 'action_type', 'note', 'target_id', 'target_type']; + protected $fillable = ['created_at', 'item_type', 'user_id', 'item_id', 'action_type', 'note', 'target_id', 'target_type', 'stored_eula', 'stored_eula_file']; use Searchable; diff --git a/database/migrations/2022_03_09_001334_add_eula_to_checkout_acceptance.php b/database/migrations/2022_03_09_001334_add_eula_to_checkout_acceptance.php index 39b21a4c9..07101d169 100644 --- a/database/migrations/2022_03_09_001334_add_eula_to_checkout_acceptance.php +++ b/database/migrations/2022_03_09_001334_add_eula_to_checkout_acceptance.php @@ -5,3 +5,34 @@ use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class AddEulaToCheckoutAcceptance extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::table('checkout_acceptances', function (Blueprint $table) { + $table->text('stored_eula')->nullable()->default(null); + $table->string('stored_eula_file')->nullable()->default(null); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('checkout_acceptances', function (Blueprint $table) { + if (Schema::hasColumn('checkout_acceptances', 'stored_eula')) { + $table->dropColumn('stored_eula'); + } + if (Schema::hasColumn('checkout_acceptances', 'stored_eula_file')) { + $table->dropColumn('stored_eula_file'); + } + }); + } +} \ No newline at end of file diff --git a/resources/views/hardware/view.blade.php b/resources/views/hardware/view.blade.php index 7c5e28b7a..76e1f9e13 100755 --- a/resources/views/hardware/view.blade.php +++ b/resources/views/hardware/view.blade.php @@ -1093,11 +1093,51 @@ {{ trans('general.item') }} {{ trans('general.target') }} {{ trans('general.notes') }} - {{ trans('general.accept_eula') }} + {{ trans('general.accept_eula') }} {{ trans('general.download') }} {{ trans('admin/hardware/table.changed')}} + @foreach($action_logs as $log) + + + + @if($log->created_at) + {{ Helper::getFormattedDateObject($file->created_at, 'datetime', false) }} + @endif + + + {{$log->user_id}} + + + {{$log->action_type}} + + + {{$log->item_type}} + + + {{$log->item_type}} + + + @if($log->note) + {{$log->note}} + @endif + + + @if($log->stored_eula_file) + {{$log->stored_eula_file}} + @endif + + + @if($log->file) + {{$log->file}} + @endif + + + {{$log->log_meta}} + + + @endforeach diff --git a/resources/views/partials/bootstrap-table.blade.php b/resources/views/partials/bootstrap-table.blade.php index 3c1512b2d..88b958454 100644 --- a/resources/views/partials/bootstrap-table.blade.php +++ b/resources/views/partials/bootstrap-table.blade.php @@ -6,7 +6,6 @@ @push('js') -