diff --git a/app/Http/Controllers/Api/TerritoriesController.php b/app/Http/Controllers/Api/TerritoriesController.php index 15645d27bcd42ec473b58eca103a44bb4f5e8cad..37d73276244ece6a0b4e231bbf0d68c342bc5a68 100644 --- a/app/Http/Controllers/Api/TerritoriesController.php +++ b/app/Http/Controllers/Api/TerritoriesController.php @@ -10,7 +10,8 @@ class TerritoriesController extends Controller { - public function all(){ + public function all() + { /** * @var User $user */ @@ -21,12 +22,12 @@ public function all(){ // If admin return all users across all organizations return Territory::with('organizations') ->get(); - } else { - abort(403); } + abort(403); } - public function save(TerritoryRequest $request, $id = null){ + public function save(TerritoryRequest $request, $id = null) + { /** * @var User $authUser */ @@ -34,16 +35,14 @@ public function save(TerritoryRequest $request, $id = null){ // Update or create user $data = json_decode($request->getContent(), true); - if (User::ROLE_ADMIN === $authUser->role){ + if (User::ROLE_ADMIN === $authUser->role) { if ($id) { - $territory = Territory::find((int)$id); - } - else { + $territory = Territory::find((int) $id); + } else { $territory = new Territory(); } $territory->name = $data['name']; $territory->save(); - } else { abort(403); } @@ -52,7 +51,8 @@ public function save(TerritoryRequest $request, $id = null){ ->find($territory->id); } - public function delete($id){ + public function delete($id) + { /** * @var User $authUser */ diff --git a/app/Http/Controllers/PdfController.php b/app/Http/Controllers/PdfController.php index f884d29431243b453a889e69cb8979fb7c3bd42e..c694986cc0bcd936030af200ac18daf4c508d802 100644 --- a/app/Http/Controllers/PdfController.php +++ b/app/Http/Controllers/PdfController.php @@ -34,7 +34,6 @@ public function ActionPlanPdf() ->orderBy('updated_at', 'DESC') ->first(); - if (!$evaluation) { abort(404); } @@ -151,12 +150,12 @@ public function PolitiqueSecuritePdf() $filename = 'politique_securite' . date('Y-m-d') . '.pdf'; - if (file_exists(storage_path('app/politique_securite/'.$filename))) { - unlink(storage_path('app/politique_securite/'.$filename)); + if (file_exists(storage_path('app/politique_securite/' . $filename))) { + unlink(storage_path('app/politique_securite/' . $filename)); } - $pdf->save(storage_path('app/politique_securite/'. $filename)); + $pdf->save(storage_path('app/politique_securite/' . $filename)); - return Storage::download('politique_securite/' . $filename, "Politique de sécurité - " . date('Y-m-d') . '.pdf'); + return Storage::download('politique_securite/' . $filename, 'Politique de sécurité - ' . date('Y-m-d') . '.pdf'); } public function DossierCyberSecuritePdf(GraphDataRepository $repository) @@ -189,7 +188,6 @@ public function DossierCyberSecuritePdf(GraphDataRepository $repository) $actionSorted = $collectionAction->sortBy('end_date'); $actionSorted = $actionSorted->values()->all(); - $dangerLevels = DangerLevel::all(); $data = [ @@ -200,14 +198,14 @@ public function DossierCyberSecuritePdf(GraphDataRepository $repository) 'elu' => 'test elu', 'agent' => 'test agent', 'referentiel' => $evaluation->reference, - 'legendLevels' => $dangerLevels, - 'residualRisks' => $evaluation->getResidualDangers(), - 'measuresData' => $repository->getMeasuresDataForEvaluation($evaluation), - 'attackData' => $repository->getAttackDataForEvaluation($evaluation), - 'expositionData' => $repository->getExpositionDataForEvaluation($evaluation), - 'risksData' => $repository->getRisksDataForEvaluation($evaluation), - 'futureRisksData' => $repository->getFutureRisksDataForEvaluation($evaluation), - 'maturityData' => $repository->getMaturityDataForEvaluation($evaluation), + 'legendLevels' => $dangerLevels, + 'residualRisks' => $evaluation->getResidualDangers(), + 'measuresData' => $repository->getMeasuresDataForEvaluation($evaluation), + 'attackData' => $repository->getAttackDataForEvaluation($evaluation), + 'expositionData' => $repository->getExpositionDataForEvaluation($evaluation), + 'risksData' => $repository->getRisksDataForEvaluation($evaluation), + 'futureRisksData' => $repository->getFutureRisksDataForEvaluation($evaluation), + 'maturityData' => $repository->getMaturityDataForEvaluation($evaluation), 'date' => $evaluation->updated_at->format('d/m/Y'), ]; @@ -233,11 +231,11 @@ public function DossierCyberSecuritePdf(GraphDataRepository $repository) $filename = 'dossier_cybersecurite' . date('Y-m-d') . '.pdf'; - if (file_exists(storage_path('app/dossier_cybersecurite/'.$filename))) { - unlink(storage_path('app/dossier_cybersecurite/'.$filename)); + if (file_exists(storage_path('app/dossier_cybersecurite/' . $filename))) { + unlink(storage_path('app/dossier_cybersecurite/' . $filename)); } - $pdf->save(storage_path('app/dossier_cybersecurite/'. $filename)); + $pdf->save(storage_path('app/dossier_cybersecurite/' . $filename)); - return Storage::download('dossier_cybersecurite/' . $filename, "Dossier cybersécurité - " . date('Y-m-d') . '.pdf'); + return Storage::download('dossier_cybersecurite/' . $filename, 'Dossier cybersécurité - ' . date('Y-m-d') . '.pdf'); } } diff --git a/app/Models/Evaluation.php b/app/Models/Evaluation.php index 7a5b8cc03421ed20eac25b62d5033c64201b465e..7dc3413bed971737d63293c3735ac99e6622ef7b 100644 --- a/app/Models/Evaluation.php +++ b/app/Models/Evaluation.php @@ -87,7 +87,7 @@ public function getResidualDangers() foreach ($scenarios as $scenario) { foreach ($scenario->measures as $measure) { // Get the level of this measure for this evaluation - $level = $this->measureLevels->first(function(MeasureLevel $ml) use ($measure) { + $level = $this->measureLevels->first(function (MeasureLevel $ml) use ($measure) { return $ml->measure_id === $measure->id; }); if ($level->actual_level > 0) { @@ -96,7 +96,7 @@ public function getResidualDangers() } } - return $residual_scenarios->map(function(Scenario $scenario) { + return $residual_scenarios->map(function (Scenario $scenario) { return $scenario->dangers; })->flatten(1)->unique('id'); } diff --git a/app/Repository/GraphDataRepository.php b/app/Repository/GraphDataRepository.php index 8065bad843d517a91421155c461e5939731823a7..9885ef4c4682eeebb3d3103c126c8c7dc74b4cbc 100644 --- a/app/Repository/GraphDataRepository.php +++ b/app/Repository/GraphDataRepository.php @@ -230,6 +230,7 @@ private function getFutureExpositionPointsForScenario(Scenario $scenario, $measu if (!$val) { $val = $measure->{'level' . $selectedLevel->actual_level . '_value'}; } + return $acc + $val; }, 0); diff --git a/database/migrations/2022_07_26_080718_create_territories_table.php b/database/migrations/2022_07_26_080718_create_territories_table.php index 755e102cbb7ce3fe68be2e567e2719febe665979..a59c40e1c174c931de8fe072e5c5a8a485fdbd02 100644 --- a/database/migrations/2022_07_26_080718_create_territories_table.php +++ b/database/migrations/2022_07_26_080718_create_territories_table.php @@ -4,8 +4,7 @@ use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; -return new class() extends Migration -{ +return new class() extends Migration { /** * Run the migrations. * diff --git a/database/migrations/2022_07_26_081718_add_field_territory_id_to_organizations_table.php b/database/migrations/2022_07_26_081718_add_field_territory_id_to_organizations_table.php index 7c9a37cd63b2f2bee02aacf18b9c0cc5ae01772e..6c1168f9fbf54eccf573baa894e149e9ab9ed93b 100644 --- a/database/migrations/2022_07_26_081718_add_field_territory_id_to_organizations_table.php +++ b/database/migrations/2022_07_26_081718_add_field_territory_id_to_organizations_table.php @@ -4,8 +4,7 @@ use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; -return new class extends Migration -{ +return new class() extends Migration { /** * Run the migrations. * diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 1605fbc55a665defff875f24d1e0c0caf08dc95a..8f118f41a7bb7ae0f67d32f88dc593b03f3f353f 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -2,7 +2,6 @@ namespace Database\Seeders; -use App\Models\Territory; use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder diff --git a/database/seeders/TerritorySeeder.php b/database/seeders/TerritorySeeder.php index b229c00049931d577619cc3bee10a27f83c0a755..3ab193bb3f6fbfe0284ce39796ca1b7889a7e886 100644 --- a/database/seeders/TerritorySeeder.php +++ b/database/seeders/TerritorySeeder.php @@ -3,7 +3,6 @@ namespace Database\Seeders; use App\Models\Territory; -use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; class TerritorySeeder extends Seeder diff --git a/resources/js/components/Evaluations/Single/Components/Results/MaturityCyber.vue b/resources/js/components/Evaluations/Single/Components/Results/MaturityCyber.vue index 728ba62269b4648f00adc8ea87de8ac4cd2b71c3..9b6e0246b3d3343fa08bea70aa27c11d14318232 100644 --- a/resources/js/components/Evaluations/Single/Components/Results/MaturityCyber.vue +++ b/resources/js/components/Evaluations/Single/Components/Results/MaturityCyber.vue @@ -12,7 +12,7 @@ </template> <script> -import {PolarArea, Radar} from 'vue-chartjs/legacy' +import {Radar} from 'vue-chartjs/legacy' import { Chart as ChartJS, Title, Tooltip, Legend, RadialLinearScale, registerables} from 'chart.js' ChartJS.register(Title, Tooltip, Legend, RadialLinearScale, ...registerables) diff --git a/resources/js/components/Evaluations/Single/Components/Step3/RiskGraph.vue b/resources/js/components/Evaluations/Single/Components/Step3/RiskGraph.vue index ca44f9e102acf17be73f56d30c9ee66ec8b998c2..efd3ab98cae803b689eaabbe36246bc3f3b99ce2 100644 --- a/resources/js/components/Evaluations/Single/Components/Step3/RiskGraph.vue +++ b/resources/js/components/Evaluations/Single/Components/Step3/RiskGraph.vue @@ -7,7 +7,7 @@ <script> import { Bar } from 'vue-chartjs/legacy' -import { Chart as ChartJS, Title, Tooltip, Legend, BarElement, CategoryScale, LinearScale, Ticks} from 'chart.js' +import { Chart as ChartJS, Title, Tooltip, Legend, BarElement, CategoryScale, LinearScale} from 'chart.js' ChartJS.register(Title, Tooltip, Legend, BarElement, CategoryScale, LinearScale) diff --git a/resources/js/components/Evaluations/Single/Components/Step4/CyberRiskGraphElement.vue b/resources/js/components/Evaluations/Single/Components/Step4/CyberRiskGraphElement.vue index 7cae14dce87557c081259047a20cd8b9da576e53..c24c4743235d60cd391571ecf560f869e581525d 100644 --- a/resources/js/components/Evaluations/Single/Components/Step4/CyberRiskGraphElement.vue +++ b/resources/js/components/Evaluations/Single/Components/Step4/CyberRiskGraphElement.vue @@ -9,7 +9,7 @@ </div> </template> <script> -import {Bar, PolarArea} from 'vue-chartjs/legacy' +import {Bar} from 'vue-chartjs/legacy' import { Chart as ChartJS, Title, Tooltip, Legend, RadialLinearScale, registerables} from 'chart.js' ChartJS.register(Title, Tooltip, Legend, RadialLinearScale, ...registerables) diff --git a/resources/js/components/Evaluations/Single/Components/Step4/CyberRiskyGraph.vue b/resources/js/components/Evaluations/Single/Components/Step4/CyberRiskyGraph.vue index b311cce1760b3c8e3214fc8b3169529fa06eaf00..2b73b01f486f6e2afe2308bfae9ee45135123b6b 100644 --- a/resources/js/components/Evaluations/Single/Components/Step4/CyberRiskyGraph.vue +++ b/resources/js/components/Evaluations/Single/Components/Step4/CyberRiskyGraph.vue @@ -7,10 +7,10 @@ </div> </div> <div class="card-body graph"> - <div class="row" v-if="loaded && chartData" id="futureExpograph"> -<!-- Show one graph for each danger--> - <div class="col" v-for="(label, index) in chartData.labels" :key="label"> - <CyberRiskGraphElement :index="index" :chartData="chartData"/> + <div v-if="loaded && chartData" id="futureExpograph" class="row"> + <!-- Show one graph for each danger--> + <div v-for="(label, index) in chartData.labels" :key="label" class="col"> + <CyberRiskGraphElement :index="index" :chart-data="chartData"/> </div> </div> <div v-else class=" text-center"> diff --git a/resources/js/components/Evaluations/Single/Steps/Step3.vue b/resources/js/components/Evaluations/Single/Steps/Step3.vue index 3cd630a810410dcc8d1896156e3223d5301b4436..1ba73a1603fb6d13becca538e5b0f928013e716d 100644 --- a/resources/js/components/Evaluations/Single/Steps/Step3.vue +++ b/resources/js/components/Evaluations/Single/Steps/Step3.vue @@ -45,7 +45,7 @@ </div> </div> <div class="card-body"> - <AttackGraph :evaluation="evaluation" :maxHeight="'none'"/> + <AttackGraph :evaluation="evaluation" :max-height="'none'"/> </div> </div> </div> diff --git a/resources/js/components/Evaluations/Single/Steps/Step4.vue b/resources/js/components/Evaluations/Single/Steps/Step4.vue index c5a671c4571eee72db8d1c6b0363b7d080997407..2502b066de006b9f260648c01dda16706a465aaf 100644 --- a/resources/js/components/Evaluations/Single/Steps/Step4.vue +++ b/resources/js/components/Evaluations/Single/Steps/Step4.vue @@ -1,5 +1,5 @@ <template> - <div class="row" v-if="evaluation"> + <div v-if="evaluation" class="row"> <CyberRiskyGraph :evaluation="evaluation" /> <PlanAction ref="planAction" :evaluation="evaluation" :submitted="submitted" /> <Buttons :is-editable="isEditable" /> diff --git a/resources/js/components/Evaluations/Single/View/index.vue b/resources/js/components/Evaluations/Single/View/index.vue index 2744250aa8d99bb215db6ecef33c419138035c26..59384172716c81ed9c565633453add9d32908739 100644 --- a/resources/js/components/Evaluations/Single/View/index.vue +++ b/resources/js/components/Evaluations/Single/View/index.vue @@ -23,7 +23,7 @@ </div> </div> <div class="card-body"> - <AttackGraph :evaluation="evaluation" :maxHeight="'400px'" /> + <AttackGraph :evaluation="evaluation" :max-height="'400px'" /> </div> </div> <PlanAction :evaluation="evaluation" /> @@ -56,7 +56,6 @@ import Dangers from '../Components/Results/Dangers' import Measures from '../Components/Results/Measures' import AttackGraph from '../Components/Step3/AttackGraph' import PlanAction from '../Components/Results/PlanAction' -import RiskGraph from '../Components/Step3/RiskGraph' import MaturityCyber from '../Components/Results/MaturityCyber' import Historic from '../Components/Results/Historic' import NotFound from "../../../Errors/NotFound"; @@ -72,7 +71,6 @@ export default { Measures, AttackGraph, PlanAction, - RiskGraph, MaturityCyber, Historic, }, diff --git a/resources/js/components/Menu/PageHeader.vue b/resources/js/components/Menu/PageHeader.vue index 8056b01cd7d0e81002679aec12e254fab0d15d72..5cf27c629f3c1c6fc99b6eeeefb31346ca367568 100644 --- a/resources/js/components/Menu/PageHeader.vue +++ b/resources/js/components/Menu/PageHeader.vue @@ -72,7 +72,7 @@ export default { return org.name case 'territory': if (!ter) { - return null + return null } return ter.name case 'profile': diff --git a/resources/js/components/Menu/Side.vue b/resources/js/components/Menu/Side.vue index d83a187f4b8043fb2239f1f1a38d6d52f4bbb6ce..fb9a62af0c8d702cb4676985e99efa4d0531fe9a 100644 --- a/resources/js/components/Menu/Side.vue +++ b/resources/js/components/Menu/Side.vue @@ -72,7 +72,7 @@ </p> </a> </li> - <li class="nav-item" v-if="user && user.organization_id"> + <li v-if="user && user.organization_id" class="nav-item"> <a :href="`/pdf/politiqueSecurite/${user.organization_id}`" target="_blank" @@ -84,7 +84,7 @@ </p> </a> </li> - <li class="nav-item" v-if="user && user.organization_id"> + <li v-if="user && user.organization_id" class="nav-item"> <a :href="`/pdf/planAction/${user.organization_id}`" target="_blank" @@ -132,7 +132,7 @@ class="nav-link w-100 rounded-0" active-class="active" > - <i class="nav-icon fas fa-map"></i><p>Territoires</p> + <i class="nav-icon fas fa-map"></i><p>Territoires</p> </router-link> </li> <li diff --git a/resources/js/components/Organizations/Single/InformationsBlock.vue b/resources/js/components/Organizations/Single/InformationsBlock.vue index 33acc1424edf593c5509bf0e5028fe26117ad634..bc46903da4203ed1303b13527ff14ae679bdf2e0 100644 --- a/resources/js/components/Organizations/Single/InformationsBlock.vue +++ b/resources/js/components/Organizations/Single/InformationsBlock.vue @@ -54,14 +54,14 @@ </div> <div class="form-group"> <label :class="{ 'text-danger': submitted && $v.organization.territory_id.$error }" for="territory">Territoire</label> <i - class="text-muted small">(Obligatoire)</i> + class="text-muted small">(Obligatoire)</i> <select id="type" v-model="organization.territory_id" :disabled="!isAdmin()" class="form-control" :class="{ 'is-invalid': submitted && $v.organization.territory_id.$error }"> <option v-for="ter in territories" :key="ter.id" :value="ter.id">{{ - ter.name - }} + ter.name + }} </option> </select> <div v-if="$v.organization.territory_id.$error" class="text-danger">Champ obligatoire</div> diff --git a/resources/js/components/Territories/List.vue b/resources/js/components/Territories/List.vue index ad4fd67bd9ee4915f3deab5783ad7437187b8f1a..608d6d086ab89c83535b44d5050e90e228be56cc 100644 --- a/resources/js/components/Territories/List.vue +++ b/resources/js/components/Territories/List.vue @@ -48,13 +48,15 @@ <i class="fas fa-pen" /> Modifier </router-link> - <button v-if="props.row.organizations.length " + <button + v-if="props.row.organizations.length " class="btn btn-light btn-xs" @click="toaster(this, `Le territoire ${props.row.name} a des structures liées. Suppression impossible.`, 'bg-danger');" > <i class="fas fa-trash" /> Supprimer </button> - <button v-else + <button + v-else class="btn btn-light btn-xs" @click="deleteRow(props.row)" > @@ -117,17 +119,7 @@ export default { return diacritic(true,o.name,this.terName); }) .filter(v => { - if (this.structuresNumber !== null){ - if (this.structuresNumber !== ""){ - return v.organizations.length == this.structuresNumber; - } - else { - return true - } - } - else { - return true; - } + return this.structuresNumber === "" || this.structuresNumber === "" || v.organizations.length === this.structuresNumber; }) }, }, diff --git a/resources/js/components/Territories/Single/index.vue b/resources/js/components/Territories/Single/index.vue index 6e47c43b2026bb0b0db92ec5f195e70b51fb1a62..d55aea64c336e96b3ec54bd9ec5c26e56f7d96e8 100644 --- a/resources/js/components/Territories/Single/index.vue +++ b/resources/js/components/Territories/Single/index.vue @@ -63,7 +63,7 @@ import ErrorBlock from '../../../utils/ErrorBlock.vue' import toaster from '../../../utils/toaster' import { isAdmin } from '../../../utils/permissions' -import {required, integer} from 'vuelidate/lib/validators' +import {required} from 'vuelidate/lib/validators' const defaultTerritory = { id: null, diff --git a/tests/Feature/OrganizationsControllerTest.php b/tests/Feature/OrganizationsControllerTest.php index dd8ec2221d0b521fc59fa55fce5699fdcbe7a2f8..4479ba1fdfbc467b56cef2a4b7a874bf61dfd2f0 100644 --- a/tests/Feature/OrganizationsControllerTest.php +++ b/tests/Feature/OrganizationsControllerTest.php @@ -95,9 +95,7 @@ public function testAdminCanCreateOrganization() 'email' => 'll@mg.com', 'phone' => '0546535456', ], - 'territory' => [ - 'id' => 1, - ] + 'territory_id' => 1, ]; $response = $this->actingAs($user)->postJson(route('api.organizations.post'), $org); diff --git a/tests/Feature/TerritoriesControllerTest.php b/tests/Feature/TerritoriesControllerTest.php index fd35746a8017e6043ec88241031ecf0acccc03a6..ebcc17167e9f129a44d49be256cdf7803d7b26e1 100644 --- a/tests/Feature/TerritoriesControllerTest.php +++ b/tests/Feature/TerritoriesControllerTest.php @@ -27,7 +27,7 @@ public function testAdminUserCanGetAll() $response->assertOk(); $territories = Territory::with('organizations') ->get(); - $this->assertEquals($territories->toArray() , $response->json()); + $this->assertEquals($territories->toArray(), $response->json()); } /** @@ -69,7 +69,7 @@ public function testCreateTerritoryWithMissingNameShouldGiveValidationErrors() */ public function testUserCannotCreateTerritory() { - $user = User::where('role', '!=',User::ROLE_ADMIN)->first(); + $user = User::where('role', '!=', User::ROLE_ADMIN)->first(); $org = ['name' => 'test territory']; $response = $this->actingAs($user)->postJson(route('api.territories.post'), $org); @@ -96,7 +96,6 @@ public function testAdminCanUpdateTerritory() $this->assertNotNull($territory); $this->assertEquals($territory->toArray(), $data); $this->assertEquals('NEW TER', $territory->name); - } /**