From 593c20ad4e9f46d42589b6b7fc72e770b1b00500 Mon Sep 17 00:00:00 2001 From: Didier Date: Sun, 30 Apr 2023 17:58:53 +0200 Subject: [PATCH] work on GDPR --- app/Activity.php | 5 - app/DataProcessing.php | 73 +++++ .../Controllers/Admin/ActivityController.php | 7 +- .../Admin/DataProcessingController.php | 109 ++++++++ app/Http/Controllers/Admin/HomeController.php | 15 +- .../Controllers/Admin/ReportController.php | 209 +++++--------- .../Admin/SecurityControlController.php | 76 +++++ .../MassDestroyDataProcessingRequest.php | 25 ++ .../MassDestroySecurityControlRequest.php | 25 ++ .../Requests/StoreDataProcessingRequest.php | 47 ++++ .../Requests/StoreSecurityControlRequest.php | 29 ++ .../Requests/UpdateDataProcessingRequest.php | 47 ++++ .../Requests/UpdateSecurityControlRequest.php | 29 ++ app/SecurityControl.php | 40 +++ .../migrations/2023_02_09_164940_gdpr.php | 16 +- .../2023_04_18_123308_add_gdpr_tables.php | 112 +++++--- database/seeders/PermissionsTableSeeder.php | 50 ++++ mercator_data.sql | 1 - resources/lang/en/cruds.php | 74 +++-- resources/lang/fr/cruds.php | 93 +++--- .../views/admin/activities/create.blade.php | 89 ------ .../views/admin/activities/edit.blade.php | 165 +++-------- .../admin/dataProcessing/create.blade.php | 263 +++++++++++++++++ .../views/admin/dataProcessing/edit.blade.php | 264 ++++++++++++++++++ .../admin/dataProcessing/index.blade.php | 178 ++++++++++++ .../views/admin/dataProcessing/show.blade.php | 180 ++++++++++++ resources/views/admin/roles/create.blade.php | 70 +++++ resources/views/admin/roles/edit.blade.php | 71 +++++ .../admin/securityControls/create.blade.php | 43 +++ .../admin/securityControls/edit.blade.php | 44 +++ .../admin/securityControls/index.blade.php | 140 ++++++++++ .../admin/securityControls/show.blade.php | 63 +++++ resources/views/doc/report.blade.php | 8 +- resources/views/doc/schema.blade.php | 243 ++++++++-------- resources/views/home.blade.php | 97 ++++--- resources/views/partials/menu.blade.php | 12 +- routes/web.php | 8 + 37 files changed, 2369 insertions(+), 651 deletions(-) create mode 100644 app/DataProcessing.php create mode 100644 app/Http/Controllers/Admin/DataProcessingController.php create mode 100644 app/Http/Controllers/Admin/SecurityControlController.php create mode 100644 app/Http/Requests/MassDestroyDataProcessingRequest.php create mode 100644 app/Http/Requests/MassDestroySecurityControlRequest.php create mode 100644 app/Http/Requests/StoreDataProcessingRequest.php create mode 100644 app/Http/Requests/StoreSecurityControlRequest.php create mode 100644 app/Http/Requests/UpdateDataProcessingRequest.php create mode 100644 app/Http/Requests/UpdateSecurityControlRequest.php create mode 100644 app/SecurityControl.php create mode 100644 resources/views/admin/dataProcessing/create.blade.php create mode 100644 resources/views/admin/dataProcessing/edit.blade.php create mode 100644 resources/views/admin/dataProcessing/index.blade.php create mode 100644 resources/views/admin/dataProcessing/show.blade.php create mode 100644 resources/views/admin/securityControls/create.blade.php create mode 100644 resources/views/admin/securityControls/edit.blade.php create mode 100644 resources/views/admin/securityControls/index.blade.php create mode 100644 resources/views/admin/securityControls/show.blade.php diff --git a/app/Activity.php b/app/Activity.php index b5634dc4..1115ec1d 100644 --- a/app/Activity.php +++ b/app/Activity.php @@ -80,11 +80,6 @@ public function operations() return $this->belongsToMany(Operation::class)->orderBy('name'); } - public function documents() - { - return $this->belongsToMany(Document::class); - } - protected function serializeDate(DateTimeInterface $date) { return $date->format('Y-m-d H:i:s'); diff --git a/app/DataProcessing.php b/app/DataProcessing.php new file mode 100644 index 00000000..3ce65b20 --- /dev/null +++ b/app/DataProcessing.php @@ -0,0 +1,73 @@ +belongsToMany(Process::class)->orderBy('identifiant'); + } + + public function applications() + { + return $this->belongsToMany(MApplication::class)->orderBy('name'); + } + + public function informations() + { + return $this->belongsToMany(Information::class)->orderBy('name'); + } + + public function documents() + { + return $this->belongsToMany(Document::class); + } + + protected function serializeDate(DateTimeInterface $date) + { + return $date->format('Y-m-d H:i:s'); + } +} diff --git a/app/Http/Controllers/Admin/ActivityController.php b/app/Http/Controllers/Admin/ActivityController.php index dafc49ac..e0d01c82 100644 --- a/app/Http/Controllers/Admin/ActivityController.php +++ b/app/Http/Controllers/Admin/ActivityController.php @@ -21,7 +21,6 @@ public function index() { abort_if(Gate::denies('activity_access'), Response::HTTP_FORBIDDEN, '403 Forbidden'); - // $activities = Activity::all()->sortBy('name'); $activities = Activity::with('operations', 'activitiesProcesses')->orderBy('name')->get(); return view('admin.activities.index', compact('activities')); @@ -33,9 +32,7 @@ public function create() $operations = Operation::all()->sortBy('name')->pluck('name', 'id'); $processes = Process::all()->sortBy('name')->pluck('identifiant', 'id'); - - session()->put("documents",array()); - + return view('admin.activities.create', compact('operations', 'processes')); } @@ -44,8 +41,6 @@ public function store(StoreActivityRequest $request) $activity = Activity::create($request->all()); $activity->operations()->sync($request->input('operations', [])); $activity->activitiesProcesses()->sync($request->input('processes', [])); - $activity->documents()->sync(session()->get("documents")); - session()->forget("documents"); return redirect()->route('admin.activities.index'); } diff --git a/app/Http/Controllers/Admin/DataProcessingController.php b/app/Http/Controllers/Admin/DataProcessingController.php new file mode 100644 index 00000000..f589c94a --- /dev/null +++ b/app/Http/Controllers/Admin/DataProcessingController.php @@ -0,0 +1,109 @@ +get(); + + return view('admin.dataProcessing.index', compact('processingRegister')); + } + + public function create() + { + abort_if(Gate::denies('data_processing_register_create'), Response::HTTP_FORBIDDEN, '403 Forbidden'); + + $processes = Process::orderBy('identifiant')->get()->pluck('identifiant', 'id'); + $informations = Information::orderBy('name')->get()->pluck('name', 'id'); + $applications = MApplication::orderBy('name')->get()->pluck('name', 'id'); + + session()->put("documents",array()); + + return view('admin.dataProcessing.create', + compact('applications', 'informations', 'processes')); + } + + public function store(StoreDataProcessingRequest $request) + { + $dataProcessing = DataProcessing::create($request->all()); + $dataProcessing->processes()->sync($request->input('processes', [])); + $dataProcessing->informations()->sync($request->input('informations', [])); + $dataProcessing->applications()->sync($request->input('applications', [])); + $dataProcessing->documents()->sync(session()->get("documents")); + session()->forget("documents"); + + return redirect()->route('admin.data-processing.index'); + } + + public function edit(DataProcessing $dataProcessing) + { + abort_if(Gate::denies('data_processing_register_edit'), Response::HTTP_FORBIDDEN, '403 Forbidden'); + + $processes = Process::orderBy('identifiant')->get()->pluck('identifiant', 'id'); + $informations = Information::orderBy('name')->get()->pluck('name', 'id'); + $applications = MApplication::orderBy('name')->get()->pluck('name', 'id'); + session()->put("documents", $dataProcessing->documents()->get()); + +//dd(session()->get("documents")); + + $dataProcessing->load('applications', 'informations', 'processes'); + + return view('admin.dataProcessing.edit', + compact('dataProcessing', 'applications', 'informations', 'processes')); + } + + public function update(UpdateDataProcessingRequest $request, DataProcessing $dataProcessing) + { + $dataProcessing->update($request->all()); + $dataProcessing->processes()->sync($request->input('processes', [])); + $dataProcessing->applications()->sync($request->input('applications', [])); + $dataProcessing->informations()->sync($request->input('informations', [])); + $dataProcessing->documents()->sync(session()->get("documents")); + session()->forget("documents"); + + return redirect()->route('admin.data-processing.index'); + } + + public function show(DataProcessing $dataProcessing) + { + abort_if(Gate::denies('data_processing_register_show'), Response::HTTP_FORBIDDEN, '403 Forbidden'); + + $dataProcessing->load('applications', 'informations', 'processes'); + + return view('admin.dataProcessing.show', compact('dataProcessing')); + } + + public function destroy(DataProcessing $dataProcessing) + { + abort_if(Gate::denies('data_processing_register_delete'), Response::HTTP_FORBIDDEN, '403 Forbidden'); + + $dataProcessing->delete(); + + return redirect()->route('admin.data-processing.index'); + } + + public function massDestroy(MassDestroyDataProcessingRequest $request) + { + DataProcessing::whereIn('id', request('ids'))->delete(); + + return response(null, Response::HTTP_NO_CONTENT); + } +} diff --git a/app/Http/Controllers/Admin/HomeController.php b/app/Http/Controllers/Admin/HomeController.php index c817dc43..a9a628af 100644 --- a/app/Http/Controllers/Admin/HomeController.php +++ b/app/Http/Controllers/Admin/HomeController.php @@ -2,6 +2,9 @@ namespace App\Http\Controllers\Admin; +// GDPR +use App\DataProcessing; +use App\SecurityControl; // ecosystem use App\Activity; use App\Actor; @@ -123,6 +126,10 @@ public function index() protected function computeMaturity() { $levels = [ + // GDPR + 'data_processing' => DataProcessing::count(), + 'security_controls' => SecurityControl::count(), + // ecosystem 'entities' => Entity::count(), 'relations' => Relation::count(), @@ -215,14 +222,6 @@ protected function computeMaturity() 'activities' => Activity::count(), 'activities_lvl2' => Activity ::where('description', '<>', null) - ->where('responsible', '<>', null) - ->where('purpose', '<>', null) - ->where('categories', '<>', null) - ->where('recipients', '<>', null) - ->where('transfert', '<>', null) - ->where('description', '<>', null) - ->where('retention', '<>', null) - ->where('controls', '<>', null) // activity must have one process /* ->whereExists(function ($query) { diff --git a/app/Http/Controllers/Admin/ReportController.php b/app/Http/Controllers/Admin/ReportController.php index ab2073c3..2c9bd37e 100644 --- a/app/Http/Controllers/Admin/ReportController.php +++ b/app/Http/Controllers/Admin/ReportController.php @@ -2,6 +2,9 @@ namespace App\Http\Controllers\Admin; +// GDPR +use App\DataProcessing; + // ecosystem use App\Activity; use App\Actor; @@ -1592,7 +1595,7 @@ public function activityReport() { ); // Title - $section->addTitle(trans('cruds.activity.report_title'), 0); + $section->addTitle(trans('cruds.dataProcessing.report_title'), 0); $section->addTextBreak(1); // TOC @@ -1608,36 +1611,36 @@ public function activityReport() { $footer = $section->addFooter(); $footer->addPreserveText('{PAGE} / {NUMPAGES}', ['size' => 8], ['alignment' => \PhpOffice\PhpWord\SimpleType\Jc::CENTER]); - $activities = Activity::orderBy('name')->get(); - foreach ($activities as $activity) { + $processes = DataProcessing::orderBy('name')->get(); + foreach ($processes as $process) { // schema - $section->addTitle($activity->name, 1); - $this->addText($section, $activity->description); + $section->addTitle($process->name, 1); + $this->addText($section, $process->description); - $section->addTitle(trans('cruds.activity.fields.responsible'), 2); - $this->addText($section, $activity->responsible); + $section->addTitle(trans('cruds.dataProcessing.fields.responsible'), 2); + $this->addText($section, $process->responsible); - $section->addTitle(trans('cruds.activity.fields.purpose'), 2); - $this->addText($section, $activity->purpose); + $section->addTitle(trans('cruds.dataProcessing.fields.purpose'), 2); + $this->addText($section, $process->purpose); - $section->addTitle(trans('cruds.activity.fields.categories'), 2); - $this->addText($section, $activity->categories); + $section->addTitle(trans('cruds.dataProcessing.fields.categories'), 2); + $this->addText($section, $process->categories); - $section->addTitle(trans('cruds.activity.fields.recipients'), 2); - $this->addText($section, $activity->recipients); + $section->addTitle(trans('cruds.dataProcessing.fields.recipients'), 2); + $this->addText($section, $process->recipients); - $section->addTitle(trans('cruds.activity.fields.transfert'), 2); - $this->addText($section, $activity->transfert); + $section->addTitle(trans('cruds.dataProcessing.fields.transfert'), 2); + $this->addText($section, $process->transfert); - $section->addTitle(trans('cruds.activity.fields.retention'), 2); - $this->addText($section, $activity->retention); + $section->addTitle(trans('cruds.dataProcessing.fields.retention'), 2); + $this->addText($section, $process->retention); - $section->addTitle(trans('cruds.activity.fields.controls'), 2); - $this->addText($section, $activity->controls); + $section->addTitle(trans('cruds.dataProcessing.fields.controls'), 2); + $this->addText($section, $process->controls); } // Finename - $filepath = storage_path('app/reports/activities-'. Carbon::today()->format('Ymd') .'.docx'); + $filepath = storage_path('app/reports/register-'. Carbon::today()->format('Ymd') .'.docx'); // Saving the document as Word2007 file. $objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007'); @@ -1659,25 +1662,24 @@ private static function addText(Section $section, ?string $value = null) public function activityList() { - $path = storage_path('app/activities-'. Carbon::today()->format('Ymd') .'.xlsx'); + $path = storage_path('app/register-'. Carbon::today()->format('Ymd') .'.xlsx'); - $activities = Activity::All()->sortBy('name'); + $register = DataProcessing::All()->sortBy('name'); $header = [ - trans('cruds.activity.fields.name'), - trans('cruds.activity.fields.description'), - trans('cruds.activity.fields.responsible'), - trans('cruds.activity.fields.purpose'), - trans('cruds.activity.fields.categories'), - trans('cruds.activity.fields.recipients'), - trans('cruds.activity.fields.transfert'), - trans('cruds.activity.fields.retention'), - trans('cruds.activity.fields.controls'), - trans('cruds.activity.fields.processes'), - trans('cruds.activity.fields.operations'), - trans('cruds.activity.fields.applications'), - trans('cruds.activity.fields.databases'), - trans('cruds.activity.fields.information'), + trans('cruds.dataProcessing.fields.name'), + trans('cruds.dataProcessing.fields.description'), + trans('cruds.dataProcessing.fields.responsible'), + trans('cruds.dataProcessing.fields.purpose'), + trans('cruds.dataProcessing.fields.categories'), + trans('cruds.dataProcessing.fields.recipients'), + trans('cruds.dataProcessing.fields.transfert'), + trans('cruds.dataProcessing.fields.retention'), + trans('cruds.dataProcessing.fields.controls'), + trans('cruds.dataProcessing.fields.processes'), + trans('cruds.dataProcessing.fields.applications'), + trans('cruds.dataProcessing.fields.databases'), + trans('cruds.dataProcessing.fields.information'), ]; $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet(); @@ -1702,11 +1704,10 @@ public function activityList() $sheet->getColumnDimension('H')->setWidth(350, 'pt'); $sheet->getColumnDimension('I')->setWidth(350, 'pt'); $sheet->getColumnDimension('J')->setAutoSize(true); - $sheet->getColumnDimension('K')->setAutoSize(true); + $sheet->getColumnDimension('K')->setAutoSize(true); $sheet->getColumnDimension('L')->setAutoSize(true); $sheet->getColumnDimension('M')->setAutoSize(true); - $sheet->getColumnDimension('N')->setAutoSize(true); // converter @@ -1714,127 +1715,43 @@ public function activityList() // Populate the Timesheet $row = 2; - foreach ($activities as $activity) { - $sheet->setCellValue("A{$row}", $activity->name); - $sheet->setCellValue("B{$row}", $html->toRichTextObject($activity->description)); - $sheet->setCellValue("C{$row}", $html->toRichTextObject($activity->responsible)); - $sheet->setCellValue("D{$row}", $html->toRichTextObject($activity->purpose)); - $sheet->setCellValue("E{$row}", $html->toRichTextObject($activity->categories)); - $sheet->setCellValue("F{$row}", $html->toRichTextObject($activity->recipients)); - $sheet->setCellValue("G{$row}", $html->toRichTextObject($activity->transfert)); - $sheet->setCellValue("H{$row}", $html->toRichTextObject($activity->retention)); - $sheet->setCellValue("I{$row}", $html->toRichTextObject($activity->controls)); + foreach ($register as $process) { + $sheet->setCellValue("A{$row}", $process->name); + $sheet->setCellValue("B{$row}", $html->toRichTextObject($process->description)); + $sheet->setCellValue("C{$row}", $html->toRichTextObject($process->responsible)); + $sheet->setCellValue("D{$row}", $html->toRichTextObject($process->purpose)); + $sheet->setCellValue("E{$row}", $html->toRichTextObject($process->categories)); + $sheet->setCellValue("F{$row}", $html->toRichTextObject($process->recipients)); + $sheet->setCellValue("G{$row}", $html->toRichTextObject($process->transfert)); + $sheet->setCellValue("H{$row}", $html->toRichTextObject($process->retention)); + $sheet->setCellValue("I{$row}", $html->toRichTextObject($process->controls)); $txt = ''; - foreach ($activity->activitiesProcesses as $process) { - $txt .= $process->identifiant; - if ($activity->activitiesProcesses->last() !== $process) { + foreach ($process->processes as $p) { + $txt .= $p->identifiant; + if ($process->processes->last() !== $p) { $txt .= ', '; } } $sheet->setCellValue("J{$row}", $txt); $txt = ''; - foreach ($activity->operations as $operation) { - $txt .= $operation->name; - if ($activity->operations->last() !== $operation) { + foreach ($process->applications as $application) { + $txt .= $application->name; + if ($process->applications->last() !== $application) { $txt .= ', '; } } $sheet->setCellValue("K{$row}", $txt); - $applications = DB::Table('activities') - ->distinct() - ->select('m_applications.name') - ->join( - 'activity_process', - 'activity_process.activity_id', - '=', - 'activities.id' - ) - ->join( - 'm_application_process', - 'm_application_process.process_id', - '=', - 'activity_process.process_id' - ) - ->join( - 'm_applications', - 'm_applications.id', - '=', - 'm_application_process.m_application_id' - ) - ->where('activities.id', '=', $activity->id) - ->whereNull('activities.deleted_at') - ->whereNull('m_applications.deleted_at') - ->orderBy('m_applications.name') - ->get() - ->implode('name', ', '); - $sheet->setCellValue("L{$row}", $applications); - - $databases = DB::Table('activities') - ->select('databases.name') - ->distinct() - ->join( - 'activity_process', - 'activity_process.activity_id', - '=', - 'activities.id' - ) - ->join( - 'm_application_process', - 'm_application_process.process_id', - '=', - 'activity_process.process_id' - ) - ->join( - 'database_m_application', - 'database_m_application.m_application_id', - '=', - 'm_application_process.m_application_id' - ) - ->join( - 'databases', - 'databases.id', - '=', - 'database_m_application.database_id' - ) - ->where('activities.id', '=', $activity->id) - ->whereNull('activities.deleted_at') - ->whereNull('databases.deleted_at') - ->orderBy('databases.name') - ->get() - ->implode('name', ', '); - $sheet->setCellValue("M{$row}", $databases); - - $informations = DB::Table('activities') - ->select('information.name') - ->distinct() - ->join( - 'activity_process', - 'activity_process.activity_id', - '=', - 'activities.id' - ) - ->join( - 'information_process', - 'information_process.process_id', - '=', - 'activity_process.process_id' - ) - ->join( - 'information', - 'information.id', - '=', - 'information_process.information_id' - ) - ->where('activities.id', '=', $activity->id) - ->whereNull('activities.deleted_at') - ->whereNull('information.deleted_at') - ->orderBy('information.name') - ->get() - ->implode('name', ', '); - $sheet->setCellValue("N{$row}", $informations); + $txt = ''; + foreach ($process->informations as $information) { + $txt .= $information->name; + if ($process->informations->last() !== $information) { + $txt .= ', '; + } + } + $sheet->setCellValue("L{$row}", $txt); $row++; } diff --git a/app/Http/Controllers/Admin/SecurityControlController.php b/app/Http/Controllers/Admin/SecurityControlController.php new file mode 100644 index 00000000..752df2fa --- /dev/null +++ b/app/Http/Controllers/Admin/SecurityControlController.php @@ -0,0 +1,76 @@ +sortBy('name'); + + return view('admin.securityControls.index', compact('controls')); + } + + public function create() + { + abort_if(Gate::denies('security_controls_create'), Response::HTTP_FORBIDDEN, '403 Forbidden'); + + return view('admin.securityControls.create'); + } + + public function store(StoreSecurityControlRequest $request) + { + SecurityControl::create($request->all()); + + return redirect()->route('admin.security-controls.index'); + } + + public function edit(SecurityControl $securityControl) + { + abort_if(Gate::denies('security_controls_edit'), Response::HTTP_FORBIDDEN, '403 Forbidden'); + + return view('admin.securityControls.edit', compact('securityControl')); + } + + public function update(UpdateSecurityControlRequest $request, SecurityControl $securityControl) + { + $securityControl->update($request->all()); + + return redirect()->route('admin.security-controls.index'); + } + + public function show(SecurityControl $securityControl) + { + abort_if(Gate::denies('security_controls_show'), Response::HTTP_FORBIDDEN, '403 Forbidden'); + + return view('admin.securityControls.show', compact('securityControl')); + } + + public function destroy(SecurityControl $securityControl) + { + abort_if(Gate::denies('security_controls_delete'), Response::HTTP_FORBIDDEN, '403 Forbidden'); + + $securityControl->delete(); + + return redirect()->route('admin.security-controls.index'); + } + + public function massDestroy(MassDestroySecurityControlRequest $request) + { + SecurityControl::whereIn('id', request('ids'))->delete(); + + return response(null, Response::HTTP_NO_CONTENT); + } +} diff --git a/app/Http/Requests/MassDestroyDataProcessingRequest.php b/app/Http/Requests/MassDestroyDataProcessingRequest.php new file mode 100644 index 00000000..4be8c156 --- /dev/null +++ b/app/Http/Requests/MassDestroyDataProcessingRequest.php @@ -0,0 +1,25 @@ + 'required|array', + 'ids.*' => 'exists:data_processing,id', + ]; + } +} diff --git a/app/Http/Requests/MassDestroySecurityControlRequest.php b/app/Http/Requests/MassDestroySecurityControlRequest.php new file mode 100644 index 00000000..5c8ad09a --- /dev/null +++ b/app/Http/Requests/MassDestroySecurityControlRequest.php @@ -0,0 +1,25 @@ + 'required|array', + 'ids.*' => 'exists:security_controls,id', + ]; + } +} diff --git a/app/Http/Requests/StoreDataProcessingRequest.php b/app/Http/Requests/StoreDataProcessingRequest.php new file mode 100644 index 00000000..d1b32214 --- /dev/null +++ b/app/Http/Requests/StoreDataProcessingRequest.php @@ -0,0 +1,47 @@ + [ + 'min:3', + 'max:32', + 'required', + 'unique:data_processing,name,NULL,id,deleted_at,NULL', + ], + 'operations.*' => [ + 'integer', + ], + 'operations' => [ + 'array', + ], + 'informations.*' => [ + 'integer', + ], + 'informations' => [ + 'array', + ], + 'processes.*' => [ + 'integer', + ], + 'processes' => [ + 'array', + ], + ]; + } +} diff --git a/app/Http/Requests/StoreSecurityControlRequest.php b/app/Http/Requests/StoreSecurityControlRequest.php new file mode 100644 index 00000000..36c17968 --- /dev/null +++ b/app/Http/Requests/StoreSecurityControlRequest.php @@ -0,0 +1,29 @@ + [ + 'min:3', + 'max:32', + 'required', + 'unique:security_controls,name,NULL,id,deleted_at,NULL', + ], + ]; + } +} diff --git a/app/Http/Requests/UpdateDataProcessingRequest.php b/app/Http/Requests/UpdateDataProcessingRequest.php new file mode 100644 index 00000000..94b8e164 --- /dev/null +++ b/app/Http/Requests/UpdateDataProcessingRequest.php @@ -0,0 +1,47 @@ + [ + 'min:3', + 'max:32', + 'required', + 'unique:data_processing,name,'.request()->route('data_processing')->id.',id,deleted_at,NULL', + ], + 'processes.*' => [ + 'integer', + ], + 'processes' => [ + 'array', + ], + 'applications.*' => [ + 'integer', + ], + 'applications' => [ + 'array', + ], + 'informations.*' => [ + 'integer', + ], + 'informations' => [ + 'array', + ], + ]; + } +} diff --git a/app/Http/Requests/UpdateSecurityControlRequest.php b/app/Http/Requests/UpdateSecurityControlRequest.php new file mode 100644 index 00000000..9ffb6b97 --- /dev/null +++ b/app/Http/Requests/UpdateSecurityControlRequest.php @@ -0,0 +1,29 @@ + [ + 'min:3', + 'max:32', + 'required', + 'unique:security_controls,name,'.request()->route('security_control')->id.',id,deleted_at,NULL', + ], + ]; + } +} diff --git a/app/SecurityControl.php b/app/SecurityControl.php new file mode 100644 index 00000000..89685d15 --- /dev/null +++ b/app/SecurityControl.php @@ -0,0 +1,40 @@ +format('Y-m-d H:i:s'); + } +} diff --git a/database/migrations/2023_02_09_164940_gdpr.php b/database/migrations/2023_02_09_164940_gdpr.php index 988b1e85..a051237e 100644 --- a/database/migrations/2023_02_09_164940_gdpr.php +++ b/database/migrations/2023_02_09_164940_gdpr.php @@ -14,14 +14,14 @@ class Gdpr extends Migration public function up() { Schema::table('activities', function (Blueprint $table) { - // name + description // .... - $table->longText('responsible')->nullable()->after('description'); // a - $table->longText('purpose')->nullable()->after('responsible'); // b - $table->longText('categories')->nullable()->after('purpose'); // c - $table->longText('recipients')->nullable()->after('categories'); // d - $table->longText('transfert')->nullable()->after('recipients'); // e - $table->longText('retention')->nullable()->after('transfert'); // f - $table->longText('controls')->nullable()->after('retention'); // g + // name + description + $table->longText('responsible')->nullable()->after('description'); + $table->longText('purpose')->nullable()->after('responsible'); + $table->longText('categories')->nullable()->after('purpose'); + $table->longText('recipients')->nullable()->after('categories'); + $table->longText('transfert')->nullable()->after('recipients'); + $table->longText('retention')->nullable()->after('transfert'); + $table->longText('controls')->nullable()->after('retention'); }); Schema::table('information', function (Blueprint $table) { diff --git a/database/migrations/2023_04_18_123308_add_gdpr_tables.php b/database/migrations/2023_04_18_123308_add_gdpr_tables.php index 734c3d76..7a3c7f50 100644 --- a/database/migrations/2023_04_18_123308_add_gdpr_tables.php +++ b/database/migrations/2023_04_18_123308_add_gdpr_tables.php @@ -1,5 +1,8 @@ increments('id'); $table->string('name'); + $table->longText('description')->nullable(); + $table->longText('responsible')->nullable(); + $table->longText('purpose')->nullable(); + $table->longText('categories')->nullable(); + $table->longText('recipients')->nullable(); + $table->longText('transfert')->nullable(); + $table->longText('retention')->nullable(); + $table->longText('controls')->nullable(); + $table->timestamps(); + $table->softDeletes(); + }); + + // Link data_processing <-> documents + Schema::create('data_processing_document', function (Blueprint $table) { + $table->unsignedInteger('data_processing_id')->index('data_processing_id_fk_6930583'); + $table->unsignedInteger('document_id')->index('operation_id_fk_4355431'); + }); + Schema::table('data_processing_document', function (Blueprint $table) { + $table->foreign('data_processing_id', 'data_processing_id_fk_42343234')->references('id')->on('data_processing')->onUpdate('NO ACTION')->onDelete('CASCADE'); + $table->foreign('document_id', 'document_id_fk_3439483')->references('id')->on('documents')->onUpdate('NO ACTION')->onDelete('CASCADE'); + }); + // Link data_processing <-> processes + Schema::create('data_processing_process', function (Blueprint $table) { + $table->unsignedInteger('data_processing_id')->index('data_processing_id_fk_5435435'); + $table->unsignedInteger('process_id')->index('process_id_fk_594358'); + }); + Schema::table('data_processing_process', function (Blueprint $table) { + $table->foreign('data_processing_id', 'data_processing_id_fk_764545345')->references('id')->on('data_processing')->onUpdate('NO ACTION')->onDelete('CASCADE'); + $table->foreign('process_id', 'process_id_fk_0483434')->references('id')->on('processes')->onUpdate('NO ACTION')->onDelete('CASCADE'); + }); - $table->timestamps(); - $table->softDeletes(); + // link data_processing <-> applications + Schema::create('data_processing_m_application', function (Blueprint $table) { + $table->unsignedInteger('data_processing_id')->index('data_processing_id_fk_6948435'); + $table->unsignedInteger('m_application_id')->index('m_applications_id_fk_4384483'); }); - // -> link to entities - // -> link to applications - // -> link with security measures + Schema::table('data_processing_m_application', function (Blueprint $table) { + $table->foreign('data_processing_id', 'data_processing_id_fk_49838437')->references('id')->on('data_processing')->onUpdate('NO ACTION')->onDelete('CASCADE'); + $table->foreign('m_application_id', 'applications_id_fk_0483434')->references('id')->on('m_applications')->onUpdate('NO ACTION')->onDelete('CASCADE'); + }); - // create access rights + // link data_processing <-> information + Schema::create('data_processing_information', function (Blueprint $table) { + $table->unsignedInteger('data_processing_id')->index('data_processing_id_fk_6948435'); + $table->unsignedInteger('information_id')->index('information_id_fk_4384483'); + }); + Schema::table('data_processing_information', function (Blueprint $table) { + $table->foreign('data_processing_id', 'data_processing_id_fk_493438483')->references('id')->on('data_processing')->onUpdate('NO ACTION')->onDelete('CASCADE'); + $table->foreign('information_id', 'information_id_fk_0483434')->references('id')->on('information')->onUpdate('NO ACTION')->onDelete('CASCADE'); + }); // Access rights // if not initial migration -> add permissions - if (Permission::All()->count()>0) { + if (Permission::count()>0) { // create new permissions $permissions = [ [ - 'id' => '???', + 'id' => '268', 'title' => 'gdpr_access', ], [ - 'id' => '263', + 'id' => '269', 'title' => 'security_controls_create', ], [ - 'id' => '264', + 'id' => '270', 'title' => 'security_controls_edit', ], [ - 'id' => '265', + 'id' => '271', 'title' => 'security_controls_show', ], [ - 'id' => '266', + 'id' => '272', 'title' => 'security_controls_delete', ], [ - 'id' => '267', + 'id' => '273', 'title' => 'security_controls_access', ], [ - 'id' => '263', + 'id' => '274', 'title' => 'data_processing_register_create', ], [ - 'id' => '264', + 'id' => '275', 'title' => 'data_processing_register_edit', ], [ - 'id' => '265', + 'id' => '276', 'title' => 'data_processing_register_show', ], [ - 'id' => '266', + 'id' => '277', 'title' => 'data_processing_register_delete', ], [ - 'id' => '267', + 'id' => '278', 'title' => 'data_processing_register_access', ], @@ -111,13 +155,10 @@ public function up() // Add permissions in roles : // Admin - Role::findOrFail(1)->permissions()->sync([263,264,265,266,267], false); - // User - Role::findOrFail(2)->permissions()->sync([263,264,265,266,267], false); + Role::findOrFail(1)->permissions()->sync([268,269,270,271,272,273,274,275,276,277,278], false); // Auditor - Role::findOrFail(3)->permissions()->sync([266,267], false); + Role::findOrFail(3)->permissions()->sync([268,271,273,276,278], false); } - } /** @@ -128,21 +169,26 @@ public function up() public function down() { // delete access rights + if (Permission::count()>0) + DB::delete("delete from permissions where id in (268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278)"); // delete tables - Schema::dropIfExists('data_processing_register'); + Schema::dropIfExists('data_processing_document'); + Schema::dropIfExists('data_processing_process'); + Schema::dropIfExists('data_processing_m_application'); + Schema::dropIfExists('data_processing_information'); + Schema::dropIfExists('data_processing'); Schema::dropIfExists('security_controls'); // Forward table activities Schema::table('activities', function (Blueprint $table) { - // name + description // .... - $table->longText('responsible')->nullable()->after('description'); // a - $table->longText('purpose')->nullable()->after('responsible'); // b - $table->longText('categories')->nullable()->after('purpose'); // c - $table->longText('recipients')->nullable()->after('categories'); // d - $table->longText('transfert')->nullable()->after('recipients'); // e - $table->longText('retention')->nullable()->after('transfert'); // f - $table->longText('controls')->nullable()->after('retention'); // g + $table->longText('responsible')->nullable()->after('description'); + $table->longText('purpose')->nullable()->after('responsible'); + $table->longText('categories')->nullable()->after('purpose'); + $table->longText('recipients')->nullable()->after('categories'); + $table->longText('transfert')->nullable()->after('recipients'); + $table->longText('retention')->nullable()->after('transfert'); + $table->longText('controls')->nullable()->after('retention'); }); } diff --git a/database/seeders/PermissionsTableSeeder.php b/database/seeders/PermissionsTableSeeder.php index 6e99ef2c..6ea5892f 100644 --- a/database/seeders/PermissionsTableSeeder.php +++ b/database/seeders/PermissionsTableSeeder.php @@ -1085,6 +1085,56 @@ public function run() 'title' => 'physical_link_access', ], + // GDPR + [ + 'id' => '268', + 'title' => 'gdpr_access', + ], + + // Security controls + [ + 'id' => '269', + 'title' => 'security_controls_create', + ], + [ + 'id' => '270', + 'title' => 'security_controls_edit', + ], + [ + 'id' => '271', + 'title' => 'security_controls_show', + ], + [ + 'id' => '272', + 'title' => 'security_controls_delete', + ], + [ + 'id' => '273', + 'title' => 'security_controls_access', + ], + + // Data processisng register + [ + 'id' => '274', + 'title' => 'data_processing_register_create', + ], + [ + 'id' => '275', + 'title' => 'data_processing_register_edit', + ], + [ + 'id' => '276', + 'title' => 'data_processing_register_show', + ], + [ + 'id' => '277', + 'title' => 'data_processing_register_delete', + ], + [ + 'id' => '278', + 'title' => 'data_processing_register_access', + ], + ]; Permission::insert($permissions); diff --git a/mercator_data.sql b/mercator_data.sql index bd3bf6e6..10ca4d12 100644 --- a/mercator_data.sql +++ b/mercator_data.sql @@ -21,7 +21,6 @@ LOCK TABLES `activities` WRITE; /*!40000 ALTER TABLE `activities` DISABLE KEYS */; -INSERT INTO `activities` (`id`, `name`, `description`, `responsible`, `purpose`, `categories`, `recipients`, `transfert`, `retention`, `controls`, `created_at`, `updated_at`, `deleted_at`) VALUES (1,'Activité 1','

Description de l\'activité 1

',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'2020-06-10 13:20:42','2023-02-09 18:34:59',NULL),(2,'Activité 2','

Description de l\'activité de test

',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'2020-06-10 15:44:26','2020-06-13 04:03:26',NULL),(3,'Activité 3','

Description de l\'activité 3

',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'2020-06-13 04:57:08','2020-06-13 04:57:08',NULL),(4,'Activité 4','

Description de l\'acivité 4

',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'2020-06-13 04:57:24','2020-06-13 04:57:24',NULL),(5,'Activité principale','

Description de l\'activité principale

',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'2020-08-15 04:19:53','2020-08-15 04:19:53',NULL),(6,'AAA','test a1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'2021-03-22 19:06:55','2021-03-22 19:07:00','2021-03-22 19:07:00'),(7,'AAA','test AAA',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'2021-03-22 19:13:43','2021-03-22 19:14:05','2021-03-22 19:14:05'),(8,'AAA','test 2 aaa',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'2021-03-22 19:14:16','2021-03-22 19:14:45','2021-03-22 19:14:45'),(9,'AAA1','test 3 AAA',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'2021-03-22 19:14:40','2021-03-22 19:19:09','2021-03-22 19:19:09'),(10,'Activité de traitement 0','

Description du traitement

',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'2023-02-09 16:57:50',NULL),(11,'test','dqqsd',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'2021-08-02 20:03:46','2021-09-22 10:59:48','2021-09-22 10:59:48'),(12,'Nouvelle activité','Description de l\'activité',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'2023-02-09 17:33:37','2023-02-09 17:33:37',NULL),(13,'Test','

Test

',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'2023-03-17 16:51:21','2023-03-17 17:04:47','2023-03-17 17:04:47'),(14,'2Test','

Test

',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'2023-03-17 16:51:59','2023-03-17 16:59:01','2023-03-17 16:59:01'),(15,'2Testd','

Test

',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'2023-03-17 16:53:47','2023-03-17 16:59:06','2023-03-17 16:59:06'),(16,'2Testdx','

Test

',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'2023-03-17 16:55:23','2023-03-17 17:04:40','2023-03-17 17:04:40'),(17,'2Testdxs','

Test

',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'2023-03-17 16:57:08','2023-03-17 17:04:40','2023-03-17 17:04:40'),(18,'Test5',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'2023-03-17 16:58:25','2023-03-17 17:04:47','2023-03-17 17:04:47'),(19,'0test2','

dsdqdq dqs qd 

',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'2023-03-17 17:03:10','2023-03-17 17:03:58','2023-03-17 17:03:58'); /*!40000 ALTER TABLE `activities` ENABLE KEYS */; UNLOCK TABLES; diff --git a/resources/lang/en/cruds.php b/resources/lang/en/cruds.php index 47d897a8..a301076e 100644 --- a/resources/lang/en/cruds.php +++ b/resources/lang/en/cruds.php @@ -9,27 +9,10 @@ 'description_helper' => "Description of processing activity", 'responsible' => 'Data controller', 'responsible_helper' => "The name and contact details of the controller and, if applicable, the joint controller, the controller's representative and the data protection officer.", - 'purpose' => 'Purpose of processing', - 'purpose_helper' => 'The purposes of the processing', - 'categories' => 'Recipient categories', - 'categories_helper' => 'A description of the categories of data subjects and categories of personal data', - 'recipients' => 'Data recipients', - 'recipients_helper' => 'The categories of recipients receiving the personal data have been or will be communicated, including recipients in third countries or international organisations;', - 'transfer' => 'Data transfers', - 'transfert_helper' => "Transfers of personal data to a third country or to an international organization, including the identification of this third country or this international organization and, where applicable, the documents attesting to the existence warranties in accordance.", - 'retention' => 'Retention periods', - 'retention_helper' => "The deadlines for erasing the different categories of data", - 'controls' => 'Security measures', - 'controls_helper' => "A general description of the technical and organizational security measures", - 'documents' => 'Documents', - 'documents_helper' => "Ex.: evaluation, impact analysis...", 'operations' => 'Operations', 'operations_helper' => 'List of operations performed', 'process' => 'Process', 'processes_helper' => 'List of parent processes', - 'apps' => 'Apps', - 'databases' => 'Databases', - 'information' => 'Information', ], 'report_title' => 'Register of Processing Activities', 'title' => 'Activities', @@ -344,6 +327,38 @@ 'title' => 'Database', 'title_singular' => 'Database', ], + 'dataProcessing' => [ + 'description' => 'Data processing register', + 'fields' => [ + 'name' => 'Name', + 'name_helper' => '', + 'description' => 'Description', + 'description_helper' => '', + 'responsible' => 'Data controller', + 'responsible_helper' => "The name and contact details of the controller and, if applicable, the joint controller, the controller's representative and the data protection officer.", + 'purpose' => 'Purposes of the processing', + 'purpose_helper' => 'The purposes of the processing', + 'categories' => 'Categories of recipients', + 'categories_helper' => 'A description of the categories of data subjects and categories of personal data', + 'recipients' => 'Recipients of the data', + 'recipients_helper' => 'The categories of recipients to whom the personal data has been or will be disclosed, including recipients in third countries or international organizations;', + 'transfer' => 'Data transfers', + 'transfer_helper' => 'Transfers of personal data to a third country or international organization, including the identification of such third country or international organization and, where applicable, documentation attesting to the existence of appropriate safeguards.', + 'retention' => 'retention periods', + 'retention_helper' => "The timeframes provided for the deletion of the different categories of data.", + 'controls' => 'Security measures', + 'controls_helper' => "A general description of technical and organizational security measures", + 'documents' => 'Documents', + 'documents_helper' => "E.g.: assessment, impact analysis...", + 'processes' => 'Processes', + 'processes_helper' => '', + 'applications' => 'Applications', + 'databases' => 'Databases', + 'information' => 'Information', + ], + 'title' => 'Register', + 'title_singular' => 'Data processing', + ], 'dhcpServer' => [ 'description' => 'Physical or virtual equipment allowing the management of the IP addresses of a network.', 'fields' => [ @@ -632,6 +647,11 @@ 'title_singular' => 'MAN - Middle Area Network', ], 'menu' => [ + 'gdpr' => [ + 'description' => "The view of the General Data Protection Regulation contains all the information required by art. 30 of the GDPR.", + 'title' => "GDPR view", + 'title_short' => 'GDPR', + ], 'administration' => [ 'description' => 'The administration view is a special case of the application view. It lists the perimeters and the privilege levels of the administrators.', 'title' => 'Administration view', @@ -966,11 +986,10 @@ 'external_access' => 'External connctions', 'external_access_helper' => 'External entities connected to the information system', 'gdpr' => 'GDPR', - 'activity_report' => 'Processing registers', - 'activity_report_helper' => 'Internal documentation of personal data processing operations', - 'activity_list' => 'List of processing activities', - 'activity_list_helper' => 'List of processing activities, applications, databases and related information.' - ], + 'register_report' => 'Register of processing', + 'register_report_helper' => 'Internal documentation of the processing of personal data.', + 'register_list' => 'List of processes', + 'register_list_helper' => 'List of treatments, applications, databases and related information.' ], 'explorer' => [ 'title' => 'Mapping explorer', 'filter' => 'Filter', @@ -1010,6 +1029,17 @@ 'title_short' => 'Routers', 'title_singular' => 'Router', ], + 'securityControl' => [ + 'fields' => [ + 'name' => 'Name', + 'name_helper' => '', + 'description' => 'Description', + 'description_helper' => 'Description of the security measure', + ], + 'title' => 'Security controls', + 'title_short' => 'security', + 'title_singular' => 'Security control', + ], 'securityDevice' => [ 'fields' => [ 'description' => 'Technical characteristics', diff --git a/resources/lang/fr/cruds.php b/resources/lang/fr/cruds.php index 2652e9a1..d93135fe 100644 --- a/resources/lang/fr/cruds.php +++ b/resources/lang/fr/cruds.php @@ -7,31 +7,11 @@ 'name_helper' => "Nom de l'activité de traitement", 'description' => 'Description', 'description_helper' => "Description de l'activité de traitement", - 'responsible' => 'Responsable du traitement', - 'responsible_helper' => 'Le nom et les coordonnées du responsable du traitement et, le cas échéant, du responsable conjoint du traitement, du représentant du responsable du traitement et du délégué à la protection des données.', - 'purpose' => 'Finalités du traitement', - 'purpose_helper' => 'Les finalités du traitement', - 'categories' => 'Catégories de destinataires', - 'categories_helper' => 'Une description des catégories de personnes concernées et des catégories de données à caractère personnel', - 'recipients' => 'Destinataires des données', - 'recipients_helper' => 'Les catégories de destinataires auxquels les données à caractère personnel ont été ou seront communiquées, y compris les destinataires dans des pays tiers ou des organisations internationales;', - 'transfert' => 'Transferts de données', - 'transfert_helper' => "Les transferts de données à caractère personnel vers un pays tiers ou à une organisation internationale, y compris l'identification de ce pays tiers ou de cette organisation internationale et, le cas échéant, les documents attestant de l'existence de garanties appropriées.", - 'retention' => 'Durées de rétention', - 'retention_helper' => "Les délais prévus pour l'effacement des différentes catégories de données", - 'controls' => 'Mesures de sécurité', - 'controls_helper' => "Une description générale des mesures de sécurité techniques et organisationnelles", - 'documents' => 'Documents', - 'documents_helper' => "Ex.: évaluation, analyse d'impact...", 'operations' => 'Opérations', - 'operations_helper' => 'Liste des opérations réalisées', + 'operations_helper' => 'List des opérations réalisées', 'processes' => 'Processus', 'processes_helper' => 'Liste des processus parents', - 'applications' => 'Applications', - 'databases' => 'Bases de données', - 'information' => 'Informations', ], - 'report_title' => 'Registre des activités de traitement', 'title' => 'Activités', 'title_singular' => 'Activité', ], @@ -345,6 +325,40 @@ 'title' => 'Bases de données', 'title_singular' => 'Base de données', ], + 'dataProcessing' => [ + 'description' => 'Registre des activités de traitement', + 'fields' => [ + 'name' => 'Non', + 'name_helper' => '', + 'description' => 'Description', + 'description_helper' => '', + 'responsible' => 'Responsable du traitement', + 'responsible_helper' => 'Le nom et les coordonnées du responsable du traitement et, le cas échéant, du responsable conjoint du traitement, du représentant du responsable du traitement et du délégué à la protection des données.', + 'purpose' => 'Finalités du traitement', + 'purpose_helper' => 'Les finalités du traitement', + 'categories' => 'Catégories de destinataires', + 'categories_helper' => 'Une description des catégories de personnes concernées et des catégories de données à caractère personnel', + 'recipients' => 'Destinataires des données', + 'recipients_helper' => 'Les catégories de destinataires auxquels les données à caractère personnel ont été ou seront communiquées, y compris les destinataires dans des pays tiers ou des organisations internationales;', + 'transfert' => 'Transferts de données', + 'transfert_helper' => "Les transferts de données à caractère personnel vers un pays tiers ou à une organisation internationale, y compris l'identification de ce pays tiers ou de cette organisation internationale et, le cas échéant, les documents attestant de l'existence de garanties appropriées.", + 'retention' => 'Durées de rétention', + 'retention_helper' => "Les délais prévus pour l'effacement des différentes catégories de données", + 'controls' => 'Mesures de sécurité', + 'controls_helper' => "Une description générale des mesures de sécurité techniques et organisationnelles", + 'documents' => 'Documents', + 'documents_helper' => "Ex.: évaluation, analyse d'impact...", + 'processes' => 'Processus', + 'processes_helper' => 'Liste des processus concernés', + 'applications' => 'Applications', + 'applications_helper' => '', + 'information' => 'Informations', + 'information_helper' => '', + ], + 'report_title' => 'Registre des traitements', + 'title' => 'Registre', + 'title_singular' => 'Traitement', + ], 'dhcpServer' => [ 'description' => 'Équipement physique ou virtuel permettant la gestion des adresses IP d’un réseau.', 'fields' => [ @@ -637,6 +651,11 @@ 'title_singular' => 'MAN - Middle Area Network', ], 'menu' => [ + 'gdpr' => [ + 'description' => "La vue du règlement général sur la protection des données contient toutes les informations requises par l'art. 30 du RGPD.", + 'title' => "Vue du RGPD", + 'title_short' => 'RGPD', + ], 'administration' => [ 'description' => 'La vue de l’administration est un cas particulier de la vue des applications. Elle répertorie les périmètres et les niveaux de privilèges des administrateurs.', 'title' => "Vue de l'administration", @@ -673,11 +692,6 @@ 'title' => "Vue de l'infrastructure réseau", 'title_short' => 'Infrastructure réseau', ], - 'gdpr' => [ - 'description' => "The view of the General Data Protection Regulation contains all the information required by art. 30 of the GDPR.", - 'title' => "General Data Protection Regulation View", - 'title_short' => 'GDPR view', - ], 'user_management' => ['title' => 'Gestion des utilisateurs', 'title_short' => 'Utilisateurs'], 'configuration' => ['title' => 'Configuration', 'title_short' => 'configuration'], ], @@ -938,7 +952,6 @@ 'title_singular' => 'Relation', ], 'report' => [ - 'cartography' => [ 'administration' => 'Administration', 'applications' => 'Applications', @@ -977,10 +990,10 @@ 'external_access' => 'Connexions externes', 'external_access_helper' => 'Entités externes connectées au système d\'information', 'gdpr' => 'RGPD', - 'activity_report' => 'Registres des traitement', - 'activity_report_helper' => 'Documentation interne des traitements de données personnelles opérés.', - 'activity_list' => 'Liste des activités de traitement', - 'activity_list_helper' => 'Liste des activités de traitement, applications, bases de données et informations liés.' + 'register_report' => 'Registres des traitements', + 'register_report_helper' => 'Documentation interne des traitements de données personnelles opérés.', + 'register_list' => 'Liste des traitements', + 'register_list_helper' => 'Liste des traitements, applications, bases de données et informations liées.' ], 'explorer' => [ 'title' => 'Exploration de la cartographie', @@ -992,13 +1005,6 @@ 'reload' => 'Recommencer' ], ], - 'register' => [ - 'fields' => [ - '' => '', - ], - 'title' => 'Registre des traitements', - 'title_singular' => 'Rgistre', - ], 'role' => [ 'fields' => [ 'permissions' => 'Permissions', @@ -1039,6 +1045,17 @@ 'title_short' => 'Sécurité', 'title_singular' => 'Équipement de sécurité', ], + 'securityControl' => [ + 'fields' => [ + 'name' => 'Nom', + 'name_helper' => 'Nom de la mesure de sécurité', + 'description' => 'Description', + 'description_helper' => 'Description de la mesure de sécurité', + ], + 'title' => 'Mesures de sécurité', + 'title_short' => 'Mesures', + 'title_singular' => 'Mesure de sécurité', + ], 'site' => [ 'description' => 'Emplacement géographique rassemblant un ensemble de personnes et/ou de ressources.', 'fields' => [ diff --git a/resources/views/admin/activities/create.blade.php b/resources/views/admin/activities/create.blade.php index 8327e225..4aaced96 100644 --- a/resources/views/admin/activities/create.blade.php +++ b/resources/views/admin/activities/create.blade.php @@ -31,82 +31,6 @@ {{ trans('cruds.activity.fields.description_helper') }} -
- - - @if($errors->has('responsible')) -
- {{ $errors->first('responsible') }} -
- @endif - {{ trans('cruds.activity.fields.responsible_helper') }} -
- -
- - - @if($errors->has('purpose')) -
- {{ $errors->first('purpose') }} -
- @endif - {{ trans('cruds.activity.fields.purpose_helper') }} -
- -
- - - @if($errors->has('categories')) -
- {{ $errors->first('categories') }} -
- @endif - {{ trans('cruds.activity.fields.categories_helper') }} -
- -
- - - @if($errors->has('recipients')) -
- {{ $errors->first('recipients') }} -
- @endif - {{ trans('cruds.activity.fields.recipients_helper') }} -
- -
- - - @if($errors->has('transfert')) -
- {{ $errors->first('transfert') }} -
- @endif - {{ trans('cruds.activity.fields.transfert_helper') }} -
- -
- - - @if($errors->has('retention')) -
- {{ $errors->first('retention') }} -
- @endif - {{ trans('cruds.activity.fields.retention_helper') }} -
- -
- - - @if($errors->has('controls')) -
- {{ $errors->first('controls') }} -
- @endif - {{ trans('cruds.activity.fields.controls_helper') }} -
@@ -155,17 +79,6 @@
-
- -
- @if($errors->has('documents')) -
- {{ $errors->first('documents') }} -
- @endif - {{ trans('cruds.activity.fields.documents_helper') }} -
-
+
+ +
+ + +@endsection + +@section('scripts') + + + + +@endsection \ No newline at end of file diff --git a/resources/views/admin/dataProcessing/index.blade.php b/resources/views/admin/dataProcessing/index.blade.php new file mode 100644 index 00000000..b9774614 --- /dev/null +++ b/resources/views/admin/dataProcessing/index.blade.php @@ -0,0 +1,178 @@ +@extends('layouts.admin') +@section('content') +@can('data_processing_registe_create') +
+ +
+@endcan +
+
+ {{ trans('cruds.dataProcessing.title_singular') }} {{ trans('global.list') }} +
+ +
+
+ + + + + + + + + + + + + + @foreach($processingRegister as $processing) + description===null)|| + ($processing->responsible===null)|| + ($processing->purpose===null)|| + ($processing->categories===null)|| + ($processing->recipients===null)|| + ($processing->transfert===null)|| + ($processing->retention===null) + ) + class="table-warning" + @endif + > + + + + + + + + + + @endforeach + +
+ + + {{ trans('cruds.dataProcessing.fields.name') }} + + {{ trans('cruds.dataProcessing.fields.description') }} + + {{ trans('cruds.dataProcessing.fields.processes') }} + + {{ trans('cruds.dataProcessing.fields.applications') }} + + {{ trans('cruds.dataProcessing.fields.information') }} + +   +
+ + + + {{ $processing->name ?? '' }} + + + {!! $processing->description !!} + + @foreach($processing->processes as $p) + {{ $p->identifiant }} + @if (!$loop->last) + , + @endif + @endforeach + + @foreach($processing->applications as $app) + {{ $app->name }} + @if (!$loop->last) + , + @endif + @endforeach + + @foreach($processing->informations as $info) + {{ $info->name }} + @if (!$loop->last) + , + @endif + @endforeach + + @can('data_processing_register_show') + + {{ trans('global.view') }} + + @endcan + + @can('data_processing_register_edit') + + {{ trans('global.edit') }} + + @endcan + + @can('data_processing_register_delete') +
+ + + +
+ @endcan + +
+
+
+
+ + + +@endsection +@section('scripts') +@parent + +@endsection \ No newline at end of file diff --git a/resources/views/admin/dataProcessing/show.blade.php b/resources/views/admin/dataProcessing/show.blade.php new file mode 100644 index 00000000..90fbcc8f --- /dev/null +++ b/resources/views/admin/dataProcessing/show.blade.php @@ -0,0 +1,180 @@ +@extends('layouts.admin') +@section('content') + +
+
+ {{ trans('global.show') }} {{ trans('cruds.dataProcessing.title') }} +
+ +
+
+
+ + {{ trans('global.back_to_list') }} + + + + + @can('data_processing_register_edit') + + {{ trans('global.edit') }} + + @endcan + + @can('data_processing_register_delete') +
+ + + +
+ @endcan +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ {{ trans('cruds.dataProcessing.fields.name') }} + + {{ $dataProcessing->name }} +
+ {{ trans('cruds.dataProcessing.fields.description') }} + + {!! $dataProcessing->description !!} +
+ {{ trans('cruds.dataProcessing.fields.responsible') }} + + {!! $dataProcessing->responsible !!} +
+ {{ trans('cruds.dataProcessing.fields.purpose') }} + + {!! $dataProcessing->purpose !!} +
+ {{ trans('cruds.dataProcessing.fields.categories') }} + + {!! $dataProcessing->categories !!} +
+ {{ trans('cruds.dataProcessing.fields.recipients') }} + + {!! $dataProcessing->recipients !!} +
+ {{ trans('cruds.dataProcessing.fields.transfert') }} + + {!! $dataProcessing->transfert !!} +
+ {{ trans('cruds.dataProcessing.fields.retention') }} + + {!! $dataProcessing->retention !!} +
+ {{ trans('cruds.dataProcessing.fields.processes') }} + + @foreach($dataProcessing->processes as $process) + {{ $process->identifiant }} + @if (!$loop->last) + , + @endif + @endforeach +
+ {{ trans('cruds.dataProcessing.fields.applications') }} + + @foreach($dataProcessing->applications as $application) + {{ $application->name }} + @if (!$loop->last) + , + @endif + @endforeach +
+ {{ trans('cruds.dataProcessing.fields.information') }} + + @foreach($dataProcessing->informations as $information) + {{ $information->name }} + @if (!$loop->last) + , + @endif + @endforeach +
+ {{ trans('cruds.dataProcessing.fields.documents') }} + + @foreach($dataProcessing->documents as $document) + {{ $document->filename }} + @if (!$loop->last) + , + @endif + @endforeach +
+ +
+
+ +
+ +@endsection \ No newline at end of file diff --git a/resources/views/admin/roles/create.blade.php b/resources/views/admin/roles/create.blade.php index ab5d43fb..68144aec 100644 --- a/resources/views/admin/roles/create.blade.php +++ b/resources/views/admin/roles/create.blade.php @@ -24,6 +24,76 @@ +
+
+
+ @php($permission = $permissions_sorted['gdpr']) +
+ + +
+
+
+
+ +
+
+
+ @php($permission = $permissions_sorted['data_processing_register']) + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ @php($permission = $permissions_sorted['security_controls']) + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ +
+
diff --git a/resources/views/admin/roles/edit.blade.php b/resources/views/admin/roles/edit.blade.php index 30d09bee..80e408cf 100644 --- a/resources/views/admin/roles/edit.blade.php +++ b/resources/views/admin/roles/edit.blade.php @@ -26,6 +26,77 @@
+
+
+
+ @php($permission = $permissions_sorted['gdpr']) +
+ permissions->contains($permission['actions'][0][0]) ? 'checked' : '' }}> + +
+
+
+
+ +
+
+
+ @php($permission = $permissions_sorted['data_processing_register']) + +
+ permissions->contains($permission['actions'][4][0]) ? 'checked' : '' }}> + +
+
+ permissions->contains($permission['actions'][0][0]) ? 'checked' : '' }}> + +
+
+ permissions->contains($permission['actions'][1][0]) ? 'checked' : '' }}> + +
+
+ permissions->contains($permission['actions'][3][0]) ? 'checked' : '' }}> + +
+
+ permissions->contains($permission['actions'][2][0]) ? 'checked' : '' }}> + +
+
+
+ + +
+
+ @php($permission = $permissions_sorted['security_controls']) + +
+ permissions->contains($permission['actions'][4][0]) ? 'checked' : '' }}> + +
+
+ permissions->contains($permission['actions'][0][0]) ? 'checked' : '' }}> + +
+
+ permissions->contains($permission['actions'][1][0]) ? 'checked' : '' }}> + +
+
+ permissions->contains($permission['actions'][3][0]) ? 'checked' : '' }}> + +
+
+ permissions->contains($permission['actions'][2][0]) ? 'checked' : '' }}> + +
+
+
+ +
+ +
diff --git a/resources/views/admin/securityControls/create.blade.php b/resources/views/admin/securityControls/create.blade.php new file mode 100644 index 00000000..eeb833b5 --- /dev/null +++ b/resources/views/admin/securityControls/create.blade.php @@ -0,0 +1,43 @@ +@extends('layouts.admin') +@section('content') + +
+
+ {{ trans('global.create') }} {{ trans('cruds.securityControl.title_singular') }} +
+ +
+
+ @csrf +
+ + + @if($errors->has('name')) +
+ {{ $errors->first('name') }} +
+ @endif + {{ trans('cruds.securityControl.fields.name_helper') }} +
+
+ + + @if($errors->has('description')) +
+ {{ $errors->first('description') }} +
+ @endif + {{ trans('cruds.securityControl.fields.description_helper') }} +
+
+ +
+
+
+
+ + + +@endsection \ No newline at end of file diff --git a/resources/views/admin/securityControls/edit.blade.php b/resources/views/admin/securityControls/edit.blade.php new file mode 100644 index 00000000..8b560494 --- /dev/null +++ b/resources/views/admin/securityControls/edit.blade.php @@ -0,0 +1,44 @@ +@extends('layouts.admin') +@section('content') + +
+
+ {{ trans('global.edit') }} {{ trans('cruds.securityControl.title_singular') }} +
+ +
+
id]) }}" enctype="multipart/form-data"> + @method('PUT') + @csrf +
+ + + @if($errors->has('name')) +
+ {{ $errors->first('name') }} +
+ @endif + {{ trans('cruds.securityControl.fields.name_helper') }} +
+
+ + + @if($errors->has('description')) +
+ {{ $errors->first('description') }} +
+ @endif + {{ trans('cruds.securityControl.fields.description_helper') }} +
+
+ +
+
+
+
+ + + +@endsection \ No newline at end of file diff --git a/resources/views/admin/securityControls/index.blade.php b/resources/views/admin/securityControls/index.blade.php new file mode 100644 index 00000000..4543742a --- /dev/null +++ b/resources/views/admin/securityControls/index.blade.php @@ -0,0 +1,140 @@ +@extends('layouts.admin') +@section('content') +@can('task_create') + +@endcan +
+
+ {{ trans('cruds.securityControl.title_singular') }} {{ trans('global.list') }} +
+ +
+
+ + + + + + + + + + + + @foreach($controls as $control) + + + + + + + + + @endforeach + +
+ + + {{ trans('cruds.securityControl.fields.name') }} + + {{ trans('cruds.securityControl.fields.description') }} + + + +   +
+ + + + {{ $control->name ?? '' }} + + + {{ $control->description ?? '' }} + + + + + @can('task_show') + + {{ trans('global.view') }} + + @endcan + + @can('task_edit') + + {{ trans('global.edit') }} + + @endcan + + @can('task_delete') +
+ + + +
+ @endcan + +
+
+
+
+ + + +@endsection +@section('scripts') +@parent + +@endsection \ No newline at end of file diff --git a/resources/views/admin/securityControls/show.blade.php b/resources/views/admin/securityControls/show.blade.php new file mode 100644 index 00000000..64c5cee2 --- /dev/null +++ b/resources/views/admin/securityControls/show.blade.php @@ -0,0 +1,63 @@ +@extends('layouts.admin') +@section('content') + +
+
+ {{ trans('global.show') }} {{ trans('cruds.securityControl.title') }} +
+ +
+
+
+ + {{ trans('global.back_to_list') }} + + + @can('security_controls_edit') + + {{ trans('global.edit') }} + + @endcan + + @can('security_controls_delete') +
+ + + +
+ @endcan + +
+ + + + + + + + + + + +
+ {{ trans('cruds.securityControl.fields.name') }} + + {{ $securityControl->name }} +
+ {{ trans('cruds.securityControl.fields.description') }} + + {{ $securityControl->description }} +
+ +
+
+ +
+@endsection \ No newline at end of file diff --git a/resources/views/doc/report.blade.php b/resources/views/doc/report.blade.php index 51137893..71d09743 100644 --- a/resources/views/doc/report.blade.php +++ b/resources/views/doc/report.blade.php @@ -130,16 +130,16 @@
  • - {{ trans("cruds.report.lists.activity_report") }} + {{ trans("cruds.report.lists.register_report") }}
    - {{ trans("cruds.report.lists.activity_report_helper") }} + {{ trans("cruds.report.lists.register_report") }}

  • - {{ trans("cruds.report.lists.activity_list") }} + {{ trans("cruds.report.lists.register_list") }}
    - {{ trans("cruds.report.lists.activity_list_helper") }} + {{ trans("cruds.report.lists.register_list_helper") }}

  • diff --git a/resources/views/doc/schema.blade.php b/resources/views/doc/schema.blade.php index 5bca3b69..7aa1c632 100644 --- a/resources/views/doc/schema.blade.php +++ b/resources/views/doc/schema.blade.php @@ -68,121 +68,134 @@ .width(window.innerWidth - 250) .height(window.innerHeight - 250) - .renderDot("\ - digraph {\ - pencolor=\"#7c123e\"\ - penwidth=2\ - subgraph clusterA {\ - label=\"{{ trans('cruds.report.cartography.ecosystem') }}\"\ - fontsize=16 \ - graph[style=dotted];\ - href=\"/admin/report/ecosystem\" \ - shape = \"Mrecord\"\ - ENTITY [label=\"{{ trans('cruds.entity.title') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/entity.png\" href=\"/admin/entities\"]\ - RELATION [label=\"{{ trans('cruds.relation.title') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/relation.png\" href=\"/admin/relations\"]\ - }\ - subgraph clusterB {\ - label=\"{{ trans('cruds.report.cartography.information_system') }}\"\ - fontsize=16 \ - graph[style=dotted];\ - href=\"/admin/report/information_system\" \ - MPROCESS [label=\"{{ trans('cruds.macroProcessus.title') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/macroprocess.png\" href=\"/admin/macro-processuses\"]\ - PROCESS [label=\"{{ trans('cruds.process.title') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/process.png\" href=\"/admin/processes\"]\ - ACTIVITY [label=\"{{ trans('cruds.activity.title') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/activity.png\" href=\"/admin/activities\"]\ - OPERATION [label=\"{{ trans('cruds.operation.title') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/operation.png\" href=\"/admin/operations\"]\ - TASK [label=\"{{ trans('cruds.task.title') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/task.png\" href=\"/admin/tasks\"]\ - ACTOR [label=\"{{ trans('cruds.actor.title') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/actor.png\" href=\"/admin/actors\"]\ - INFORMATION [label=\"{{ trans('cruds.information.title') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/information.png\" href=\"/admin/information\"]\ - \ - }\ - subgraph clusterC {\ - label=\"{{ trans('cruds.report.cartography.applications') }}\"\ - fontsize=16 \ - graph[style=dotted];\ - href=\"/admin/report/applications\" \ - APPLICBLOCK [label=\"{{ trans('cruds.applicationBlock.title') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/applicationblock.png\" href=\"/admin/application-blocks\"]\ - APPLICATION [label=\"{{ trans('cruds.application.title') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/application.png\" href=\"/admin/applications\"]\ - APPLICSERV [label=\"{{ trans('cruds.applicationService.title') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/applicationservice.png\" href=\"/admin/application-services\"]\ - APPLICMODULE [label=\"{{ trans('cruds.applicationModule.title') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/applicationmodule.png\" href=\"/admin/application-modules\"]\ - DATABASE [label=\"{{ trans('cruds.database.title') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/database.png\" href=\"/admin/databases\"]\ - \ - }\ - subgraph clusterD {\ - label=\"{{ trans('cruds.report.cartography.logical_infrastructure') }}\" \ - fontsize=16 \ - graph[style=dotted];\ - href=\"/admin/report/logical_infrastructure\" \ - EXTERNAL [label=\"{{ trans('cruds.externalConnectedEntity.title_short') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/entity.png\" href=\"/admin/external-connected-entities\"]\ - NETWORK [label=\"{{ trans('cruds.network.title') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/cloud.png\" href=\"/admin/networks\"]\ - SUBNETWORK [label=\"{{ trans('cruds.subnetwork.title') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/network.png\" href=\"/admin/subnetworks\"]\ - VLAN [label=\"vlan\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/vlan.png\" href=\"/admin/vlans\"]\ - LOGICALSERVER [label=\"{{ trans('cruds.logicalServer.title') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/lserver.png\" href=\"/admin/logical-servers\"]\ - LOGICALROUTER [label=\"{{ trans('cruds.router.title_short') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/router.png\" href=\"/admin/routers\"]\ - NETWORKSWITCHES [label=\"{{ trans('cruds.networkSwitch.title_short') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/switch.png\" href=\"/admin/network-switches\"]\ - CERTIFICATE [label=\"{{ trans('cruds.certificate.title') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/certificate.png\" href=\"/admin/network-switches\"]\ - \ - }\ - subgraph clusterE {\ - label=\"{{ trans('cruds.report.cartography.physical_infrastructure') }}\"\ - fontsize=16 \ - graph[style=dotted];\ - href=\"/admin/report/physical_infrastructure\" \ - SITE [label=\"{{ trans('cruds.site.title') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/site.png\" href=\"/admin/sites\"]\ - BUILDING [label=\"{{ trans('cruds.building.title') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/building.png\" href=\"/admin/buildings\"]\ - BAY [label=\"{{ trans('cruds.bay.title') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/bay.png\" href=\"/admin/bays\"]\ - PHYSICALSERVER [label=\"{{ trans('cruds.physicalServer.title') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/server.png\" href=\"/admin/physical-servers\"]\ - WORKSTATION [label=\"{{ trans('cruds.workstation.title') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/workstation.png\" href=\"/admin/workstations\"]\ - PERIPHERAL [label=\"{{ trans('cruds.peripheral.title') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/peripheral.png\" href=\"/admin/peripherals\"]\ - WIFI [label=\"{{ trans('cruds.wifiTerminal.title') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/wifi.png\" href=\"/admin/wifi-terminals\"]\ - PHONE [label=\"{{ trans('cruds.phone.title') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/phone.png\" href=\"/admin/phones\"]\ - SWITCH [label=\"{{ trans('cruds.physicalSwitch.title_short') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/switch.png\" href=\"/admin/physical-switches\"]\ - STORAGE [label=\"{{ trans('cruds.storageDevice.title_short') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/storage.png\" href=\"/admin/storage-devices\"]\ - ROUTER [label=\"{{ trans('cruds.physicalRouter.title_short') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/router.png\" href=\"/admin/physical-routers\"]\ - SECURITY [label=\"{{ trans('cruds.physicalSecurityDevice.title_short') }}\" shape=none labelloc=\"b\" width=1 height=1.1 image=\"/images/security.png\" href=\"/admin/physical-security-devices\"]\ - }\ - MPROCESS -> PROCESS [label=\" 0-n\"]\ - PROCESS -> ACTIVITY [label=\" 0-n\"]\ - PROCESS -> OPERATION [label=\" 0-n\"]\ - ENTITY -> PROCESS [label=\" 0-n\"]\ - PROCESS -> APPLICATION [label=\" n-m\"]\ - PROCESS -> INFORMATION [label=\" n-m\"]\ - ACTIVITY -> OPERATION [label=\" 0-n\"]\ - OPERATION -> TASK [label=\" 0-n\"]\ - OPERATION -> ACTOR [label=\" 0-n\"]\ -\ - APPLICBLOCK -> APPLICATION [label=\" 0-n\"]\ - ENTITY -> APPLICATION [label=\" 0-n\"]\ - APPLICATION -> APPLICSERV [label=\" 0-n\"]\ - APPLICSERV-> APPLICMODULE [label=\" 0-n\"]\ - INFORMATION -> DATABASE [label=\" n-m\"]\ - APPLICATION -> DATABASE [label=\" n-m\"]\ - /* ENTITY -> DATABASE [label=\" 0-n\"] */\ -\ - EXTERNAL -> NETWORK [label=\" 0-n\"]\ - NETWORK -> SUBNETWORK [label=\" 0-n\"]\ - SUBNETWORK -> LOGICALSERVER [label=\" 0-n\"]\ - SUBNETWORK -> VLAN [label=\" 0-n\"]\ - SUBNETWORK -> LOGICALROUTER [label=\" 0-n\"]\ - SUBNETWORK -> NETWORKSWITCHES [label=\" 0-n\"]\ - LOGICALSERVER -> PHYSICALSERVER [label=\" n-m\"]\ - APPLICATION -> LOGICALSERVER [label=\" 0-n\"]\ - CERTIFICATE -> LOGICALSERVER [label=\" 0-n\"]\ - CERTIFICATE -> APPLICATION [label=\" 0-n\"]\ - \ - ENTITY -> RELATION [label=\" 0-n\"]\ - \ - SITE -> BUILDING [label=\" 0-n\"]\ - BUILDING -> BAY [label=\" 0-n\"]\ - BUILDING -> WORKSTATION [label=\" 0-n\"]\ - BUILDING -> PERIPHERAL [label=\" 0-n\"]\ - BUILDING -> PHONE [label=\" 0-n\"]\ - BAY -> PHYSICALSERVER [label=\" 0-n\"]\ - BAY -> STORAGE [label=\" 0-n\"]\ - BAY -> SWITCH [label=\" 0-n\"]\ - BAY -> ROUTER [label=\" 0-n\"]\ - BAY -> SECURITY [label=\" 0-n\"]\ - BUILDING -> WIFI [label=\" 0-n\"]\ -}") + .renderDot(` + digraph { + pencolor="#7c123e" + penwidth=2 + subgraph clusterRGPR { + label="{{ trans('cruds.report.lists.gdpr') }}" + fontsize=16 + graph[style=dotted]; + href="/admin/report/ecosystem" + shape = "Mrecord" + REGISTER [label="{{ trans('cruds.dataProcessing.title') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/none.png" href="/admin/entities"] + CONTROL [label="{{ trans('cruds.securityControl.title') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/none.png" href="/admin/relations"] + } + subgraph clusterA { + label="{{ trans('cruds.report.cartography.ecosystem') }}" + fontsize=16 + graph[style=dotted]; + href="/admin/report/ecosystem" + shape = "Mrecord" + ENTITY [label="{{ trans('cruds.entity.title') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/entity.png" href="/admin/entities"] + RELATION [label="{{ trans('cruds.relation.title') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/relation.png" href="/admin/relations"] + } + subgraph clusterB { + label="{{ trans('cruds.report.cartography.information_system') }}" + fontsize=16 + graph[style=dotted]; + href="/admin/report/information_system" + MPROCESS [label="{{ trans('cruds.macroProcessus.title') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/macroprocess.png" href="/admin/macro-processuses"] + PROCESS [label="{{ trans('cruds.process.title') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/process.png" href="/admin/processes"] + ACTIVITY [label="{{ trans('cruds.activity.title') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/activity.png" href="/admin/activities"] + OPERATION [label="{{ trans('cruds.operation.title') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/operation.png" href="/admin/operations"] + TASK [label="{{ trans('cruds.task.title') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/task.png" href="/admin/tasks"] + ACTOR [label="{{ trans('cruds.actor.title') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/actor.png" href="/admin/actors"] + INFORMATION [label="{{ trans('cruds.information.title') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/information.png" href="/admin/information"] + + } + subgraph clusterC { + label="{{ trans('cruds.report.cartography.applications') }}" + fontsize=16 + graph[style=dotted]; + href="/admin/report/applications" + APPLICBLOCK [label="{{ trans('cruds.applicationBlock.title') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/applicationblock.png" href="/admin/application-blocks"] + APPLICATION [label="{{ trans('cruds.application.title') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/application.png" href="/admin/applications"] + APPLICSERV [label="{{ trans('cruds.applicationService.title') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/applicationservice.png" href="/admin/application-services"] + APPLICMODULE [label="{{ trans('cruds.applicationModule.title') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/applicationmodule.png" href="/admin/application-modules"] + DATABASE [label="{{ trans('cruds.database.title') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/database.png" href="/admin/databases"] + + } + subgraph clusterD { + label="{{ trans('cruds.report.cartography.logical_infrastructure') }}" + fontsize=16 + graph[style=dotted]; + href="/admin/report/logical_infrastructure" + EXTERNAL [label="{{ trans('cruds.externalConnectedEntity.title_short') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/entity.png" href="/admin/external-connected-entities"] + NETWORK [label="{{ trans('cruds.network.title') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/cloud.png" href="/admin/networks"] + SUBNETWORK [label="{{ trans('cruds.subnetwork.title') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/network.png" href="/admin/subnetworks"] + VLAN [label="vlan" shape=none labelloc="b" width=1 height=1.1 image="/images/vlan.png" href="/admin/vlans"] + LOGICALSERVER [label="{{ trans('cruds.logicalServer.title') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/lserver.png" href="/admin/logical-servers"] + LOGICALROUTER [label="{{ trans('cruds.router.title_short') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/router.png" href="/admin/routers"] + NETWORKSWITCHES [label="{{ trans('cruds.networkSwitch.title_short') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/switch.png" href="/admin/network-switches"] + CERTIFICATE [label="{{ trans('cruds.certificate.title') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/certificate.png" href="/admin/network-switches"] + + } + subgraph clusterE { + label="{{ trans('cruds.report.cartography.physical_infrastructure') }}" + fontsize=16 + graph[style=dotted]; + href="/admin/report/physical_infrastructure" + SITE [label="{{ trans('cruds.site.title') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/site.png" href="/admin/sites"] + BUILDING [label="{{ trans('cruds.building.title') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/building.png" href="/admin/buildings"] + BAY [label="{{ trans('cruds.bay.title') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/bay.png" href="/admin/bays"] + PHYSICALSERVER [label="{{ trans('cruds.physicalServer.title') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/server.png" href="/admin/physical-servers"] + WORKSTATION [label="{{ trans('cruds.workstation.title') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/workstation.png" href="/admin/workstations"] + PERIPHERAL [label="{{ trans('cruds.peripheral.title') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/peripheral.png" href="/admin/peripherals"] + WIFI [label="{{ trans('cruds.wifiTerminal.title') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/wifi.png" href="/admin/wifi-terminals"] + PHONE [label="{{ trans('cruds.phone.title') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/phone.png" href="/admin/phones"] + SWITCH [label="{{ trans('cruds.physicalSwitch.title_short') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/switch.png" href="/admin/physical-switches"] + STORAGE [label="{{ trans('cruds.storageDevice.title_short') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/storage.png" href="/admin/storage-devices"] + ROUTER [label="{{ trans('cruds.physicalRouter.title_short') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/router.png" href="/admin/physical-routers"] + SECURITY [label="{{ trans('cruds.physicalSecurityDevice.title_short') }}" shape=none labelloc="b" width=1 height=1.1 image="/images/security.png" href="/admin/physical-security-devices"] + } + + REGISTER -> APPLICATION [label=" n-m"] + REGISTER -> PROCESS [label=" n-m"] + + MPROCESS -> PROCESS [label=" 0-n"] + PROCESS -> ACTIVITY [label=" 0-n"] + PROCESS -> OPERATION [label=" 0-n"] + ENTITY -> PROCESS [label=" 0-n"] + PROCESS -> APPLICATION [label=" n-m"] + PROCESS -> INFORMATION [label=" n-m"] + ACTIVITY -> OPERATION [label=" 0-n"] + OPERATION -> TASK [label=" 0-n"] + OPERATION -> ACTOR [label=" 0-n"] + + APPLICBLOCK -> APPLICATION [label=" 0-n"] + ENTITY -> APPLICATION [label=" 0-n"] + APPLICATION -> APPLICSERV [label=" 0-n"] + APPLICSERV-> APPLICMODULE [label=" 0-n"] + INFORMATION -> DATABASE [label=" n-m"] + APPLICATION -> DATABASE [label=" n-m"] + /* ENTITY -> DATABASE [label=" 0-n"] */ + + EXTERNAL -> NETWORK [label=" 0-n"] + NETWORK -> SUBNETWORK [label=" 0-n"] + SUBNETWORK -> LOGICALSERVER [label=" 0-n"] + SUBNETWORK -> VLAN [label=" 0-n"] + SUBNETWORK -> LOGICALROUTER [label=" 0-n"] + SUBNETWORK -> NETWORKSWITCHES [label=" 0-n"] + LOGICALSERVER -> PHYSICALSERVER [label=" n-m"] + APPLICATION -> LOGICALSERVER [label=" 0-n"] + CERTIFICATE -> LOGICALSERVER [label=" 0-n"] + CERTIFICATE -> APPLICATION [label=" 0-n"] + + ENTITY -> RELATION [label=" 0-n"] + + SITE -> BUILDING [label=" 0-n"] + BUILDING -> BAY [label=" 0-n"] + BUILDING -> WORKSTATION [label=" 0-n"] + BUILDING -> PERIPHERAL [label=" 0-n"] + BUILDING -> PHONE [label=" 0-n"] + BAY -> PHYSICALSERVER [label=" 0-n"] + BAY -> STORAGE [label=" 0-n"] + BAY -> SWITCH [label=" 0-n"] + BAY -> ROUTER [label=" 0-n"] + BAY -> SECURITY [label=" 0-n"] + BUILDING -> WIFI [label=" 0-n"] +}`) .fit(true); @parent diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index 1eb75eaf..65337316 100644 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -205,6 +205,7 @@ data: { mode: 'single', labels: [ + "{!! trans('cruds.menu.gdpr.title_short') !!}", "{!! trans('cruds.menu.ecosystem.title_short') !!}", "{!! trans('cruds.menu.metier.title_short') !!}", "{!! trans('cruds.menu.application.title_short') !!}", @@ -213,213 +214,223 @@ "{!! trans('cruds.menu.physical_infrastructure.title_short') !!}", ], datasets: [{ + label: "{!! trans('cruds.dataProcessing.title') !!}", + data: [{!! $data_processing !!}, 0, 0, 0, 0, 0, 0], + value: {!! $data_processing !!}, + url: "/admin/data-processing" + }, { + label: "{!! trans('cruds.securityControl.title_short') !!}", + data: [{!! $security_controls !!}, 0, 0, 0, 0, 0, 0], + value: {!! $security_controls !!}, + url: "/admin/security-controls" + }, { label: "{!! trans('cruds.entity.title') !!}", - data: [{!! $entities !!}, 0, 0, 0, 0, 0], + data: [0, {!! $entities !!}, 0, 0, 0, 0, 0], value: {!! $entities !!}, url: "/admin/entities" }, { label: "{!! trans('cruds.relation.title') !!}", - data: [{!! $relations !!}, 0, 0, 0, 0, 0], + data: [0, {!! $relations !!}, 0, 0, 0, 0, 0], value: {!! $relations !!}, url: "/admin/relations" }, { label: "{!! trans('cruds.macroProcessus.title') !!}", - data: [0, {!! $macroProcessuses !!}, 0, 0, 0, 0], + data: [0, 0, {!! $macroProcessuses !!}, 0, 0, 0, 0], value: {!! $macroProcessuses !!}, url: "/admin/macro-processuses" }, { label: "{!! trans('cruds.process.title') !!}", - data: [0, {!! $processes !!}, 0, 0, 0, 0], + data: [0, 0, {!! $processes !!}, 0, 0, 0, 0], value: {!! $processes !!}, url: "/admin/processes" }, { label: "{!! trans('cruds.activity.title') !!}", - data: [0, {!! $activities !!}, 0, 0, 0, 0], + data: [0, 0, {!! $activities !!}, 0, 0, 0, 0], value: {!! $activities !!}, url: "/admin/activities" }, { label: "{!! trans('cruds.operation.title') !!}", - data: [0, {!! $operations !!}, 0, 0, 0, 0], + data: [0, 0, {!! $operations !!}, 0, 0, 0, 0], value: {!! $operations !!}, url: "/admin/operations" }, { label: "{!! trans('cruds.task.title') !!}", - data: [0, {!! $tasks !!}, 0, 0, 0, 0], + data: [0, 0, {!! $tasks !!}, 0, 0, 0, 0], value: {!! $tasks !!}, url: "admin/tasks" }, { label: "{!! trans('cruds.actor.title') !!}", - data: [0, {!! $actors !!}, 0, 0, 0, 0], + data: [0, 0, {!! $actors !!}, 0, 0, 0, 0], value: {!! $actors !!}, url: "/admin/actors" }, { label: "{!! trans('cruds.information.title') !!}", - data: [0, {!! $informations !!}, 0, 0, 0, 0], + data: [0, 0, {!! $informations !!}, 0, 0, 0, 0], value: {!! $informations !!}, url: "/admin/information" }, { label: "{!! trans('cruds.applicationBlock.title') !!}", - data: [0, 0, {!! $applicationBlocks !!}, 0, 0, 0], + data: [0, 0, 0, {!! $applicationBlocks !!}, 0, 0, 0], value: {!! $applicationBlocks !!}, url: "/admin/application-blocks" }, { label: "{!! trans('cruds.application.title') !!}", - data: [0, 0, {!! $applications !!}, 0, 0, 0], + data: [0, 0, 0, {!! $applications !!}, 0, 0, 0], value: {!! $applications !!}, url: "/admin/applications" }, { label: "{!! trans('cruds.applicationService.title_short') !!}", - data: [0, 0, {!! $applicationServices !!}, 0, 0, 0], + data: [0, 0, 0, {!! $applicationServices !!}, 0, 0, 0], value: {!! $applicationServices !!}, url: "/admin/application-services" }, { label: "{!! trans('cruds.applicationModule.title_short') !!}", - data: [0, 0, {!! $applicationModules !!}, 0, 0, 0], + data: [0, 0, 0, {!! $applicationModules !!}, 0, 0, 0], value: {!! $applicationModules !!}, url: "/admin/application-modules" }, { label: "{!! trans('cruds.database.title') !!}", - data: [0, 0, {!! $databases !!}, 0, 0, 0], + data: [0, 0, 0, {!! $databases !!}, 0, 0, 0], value: {!! $databases !!}, url: "/admin/databases" }, { label: "{!! trans('cruds.flux.title') !!}", - data: [0, 0, {!! $fluxes !!}, 0, 0, 0], + data: [0, 0, 0, {!! $fluxes !!}, 0, 0, 0], value: {!! $fluxes !!}, url: "/admin/fluxes", }, { label: "{!! trans('cruds.zoneAdmin.title_short') !!}", - data: [0, 0, 0, {!!$zones!!}, 0, 0], + data: [0, 0, 0, 0, {!!$zones!!}, 0, 0], value: {!!$zones!!}, url: "/admin/zone-admins" }, { label: "{!! trans('cruds.annuaire.title_short') !!}", - data: [0, 0, 0, {!!$annuaires!!}, 0, 0], + data: [0, 0, 0, 0, {!!$annuaires!!}, 0, 0], value: {!!$annuaires!!}, url: "/admin/annuaires" }, { label: "{!! trans('cruds.forestAd.title_short') !!}", - data: [0, 0, 0, {!!$forests!!}, 0, 0], + data: [0, 0, 0, 0, {!!$forests!!}, 0, 0], value: {!!$forests!!}, url: "/admin/forest-ads" }, { label: "{!! trans('cruds.domaineAd.title_short') !!}", - data: [0, 0, 0, {!!$domaines!!}, 0, 0], + data: [0, 0, 0, 0, {!!$domaines!!}, 0, 0], value: {!!$domaines!!}, url: "/admin/domaine-ads" }, { label: "{!! trans('cruds.network.title_short') !!}", - data: [0, 0, 0, 0, {!! $networks !!}, 0], + data: [0, 0, 0, 0, 0, {!! $networks !!}, 0], value: {!! $networks !!}, url: "/admin/networks" }, { label: "{!! trans('cruds.subnetwork.title_short') !!}", - data: [0, 0, 0, 0, {!! $subnetworks !!}, 0], + data: [0, 0, 0, 0, 0, {!! $subnetworks !!}, 0], value: {!! $subnetworks !!}, url: "/admin/subnetworks" }, { label: "{!! trans('cruds.gateway.title_short') !!}", - data: [0, 0, 0, 0, {!! $gateways !!}, 0], + data: [0, 0, 0, 0, 0, {!! $gateways !!}, 0], value: {!! $gateways !!}, url: "/admin/gateways" }, { label: "{!! trans('cruds.externalConnectedEntity.title_short') !!}", - data: [0, 0, 0, 0, {!! $externalConnectedEntities !!}, 0], + data: [0, 0, 0, 0, 0, {!! $externalConnectedEntities !!}, 0], value: {!! $externalConnectedEntities !!}, url: "/admin/external-connected-entities" }, { label: "{!! trans('cruds.networkSwitch.title_short') !!}", - data: [0, 0, 0, 0, {!! $switches !!}, 0], + data: [0, 0, 0, 0, 0, {!! $switches !!}, 0], value: {!! $switches !!}, url: "/admin/network-switches" }, { label: "{!! trans('cruds.router.title_short') !!}", - data: [0, 0, 0, 0, {!! $routers !!}, 0], + data: [0, 0, 0, 0, 0, {!! $routers !!}, 0], value: {!! $routers !!}, url: "/admin/routers" }, { label: "{!! trans('cruds.securityDevice.title_short') !!}", - data: [0, 0, 0, 0, {!! $securityDevices !!}, 0], + data: [0, 0, 0, 0, 0, {!! $securityDevices !!}, 0], value: {!! $securityDevices !!}, url: "/admin/security-devices" }, { label: "{!! trans('cruds.logicalServer.title_short') !!}", - data: [0, 0, 0, 0, {!! $logicalServers !!}, 0], + data: [0, 0, 0, 0, 0, {!! $logicalServers !!}, 0], value: {!! $logicalServers !!}, url: "/admin/logical-servers" }, { label: "{!! trans('cruds.certificate.title_short') !!}", - data: [0, 0, 0, 0, {!! $certificates !!}, 0], + data: [0, 0, 0, 0, 0, {!! $certificates !!}, 0], value: {!! $certificates !!}, url: "/admin/certificates" }, { label: "{!! trans('cruds.site.title') !!}", - data: [0, 0, 0, 0, 0, {!! $sites !!}], + data: [0, 0, 0, 0, 0, 0, {!! $sites !!}], value: {!! $sites !!}, url: "/admin/sites" }, { label: "{!! trans('cruds.building.title') !!}", - data: [0, 0, 0, 0, 0, {!! $buildings !!}], + data: [0, 0, 0, 0, 0, 0, {!! $buildings !!}], value: {!! $buildings !!}, url: "/admin/buildings" }, { label: "{!! trans('cruds.bay.title') !!}", - data: [0, 0, 0, 0, 0, {!! $bays !!}], + data: [0, 0, 0, 0, 0, 0, {!! $bays !!}], value: {!! $bays !!}, url: "/admin/bays" }, { label: "{!! trans('cruds.physicalServer.title_short') !!}", - data: [0, 0, 0, 0, 0, {!! $physicalServers !!}], + data: [0, 0, 0, 0, 0, 0, {!! $physicalServers !!}], value: {!! $physicalServers !!}, url: "/admin/physical-servers" }, { label: "{!! trans('cruds.workstation.title') !!}", - data: [0, 0, 0, 0, 0, {!! $workstations !!}], + data: [0, 0, 0, 0, 0, 0, {!! $workstations !!}], value: {!! $workstations !!}, url: "/admin/workstations" }, { label: "{!! trans('cruds.storageDevice.title_short') !!}", - data: [0, 0, 0, 0, 0, {!! $storageDevices !!}], + data: [0, 0, 0, 0, 0, 0, {!! $storageDevices !!}], value: {!! $storageDevices !!}, url: "/admin/storage-devices" }, { label: "{!! trans('cruds.physicalSwitch.title_short') !!}", - data: [0, 0, 0, 0, 0, {!! $physicalSwitchs !!}], + data: [0, 0, 0, 0, 0, 0, {!! $physicalSwitchs !!}], value: {!! $physicalSwitchs !!}, url: "/admin/physical-switches" }, { label: "{!! trans('cruds.physicalRouter.title_short') !!}", - data: [0, 0, 0, 0, 0, {!! $physicalRouters !!}], + data: [0, 0, 0, 0, 0, 0, {!! $physicalRouters !!}], value: {!! $physicalRouters !!}, url: "/admin/physical-routers" }, { label: "{!! trans('cruds.wifiTerminal.title_short') !!}", - data: [0, 0, 0, 0, 0, {!! $wifiTerminals !!}], + data: [0, 0, 0, 0, 0, 0, {!! $wifiTerminals !!}], value: {!! $wifiTerminals !!}, url: "/admin/wifi-terminals" }, { label: "{!! trans('cruds.physicalSecurityDevice.title_short') !!}", - data: [0, 0, 0, 0, 0, {!! $securityDevices !!}], + data: [0, 0, 0, 0, 0, 0, {!! $securityDevices !!}], value: {!! $securityDevices !!}, url: "/admin/physical-security-devices" }, { label: "{!! trans('cruds.wan.title_short') !!}", - data: [0, 0, 0, 0, 0, {!! $wans !!}], + data: [0, 0, 0, 0, 0, 0, {!! $wans !!}], value: {!! $wans !!}, url: "/admin/wans" }, { label: "{!! trans('cruds.man.title_short') !!}", - data: [0, 0, 0, 0, 0, {!! $mans !!}], + data: [0, 0, 0, 0, 0, 0, {!! $mans !!}], value: {!! $mans !!}, url: "/admin/mans" }, { label: "{!! trans('cruds.lan.title_short') !!}", - data: [0, 0, 0, 0, 0, {!! $lans !!}], + data: [0, 0, 0, 0, 0, 0, {!! $lans !!}], value: {!! $lans !!}, url: "/admin/lans" }, { label: "{!! trans('cruds.vlan.title_short') !!}", - data: [0, 0, 0, 0, {!! $vlans !!}, 0], + data: [0, 0, 0, 0, 0, {!! $vlans !!}, 0], value: {!! $vlans !!}, url: "/admin/vlans" } @@ -498,7 +509,7 @@ // Normalize data (%) - for (let i = 0; i < 6; i++) { + for (let i = 0; i < 7; i++) { var sum=0; for (let j = 0; j < cnf4.data.datasets.length; j++) sum += cnf4.data.datasets[j].data[i]; diff --git a/resources/views/partials/menu.blade.php b/resources/views/partials/menu.blade.php index 323a60bc..b2078200 100644 --- a/resources/views/partials/menu.blade.php +++ b/resources/views/partials/menu.blade.php @@ -25,23 +25,23 @@ {{ trans('cruds.menu.gdpr.title') }}