From d749db62f62f64e082add15a0761c5b44300364f Mon Sep 17 00:00:00 2001
From: Alex ORLUC <alex.orluc@maarch.org>
Date: Thu, 4 Jul 2019 13:06:00 +0200
Subject: [PATCH] FEAT #10938 TIME 1:20 add guard for save route v2 if v1
 location

---
 apps/maarch_entreprise/index.php              | 10 +-
 .../indexing_searching/details.php            |  2 +-
 apps/maarch_entreprise/login.php              |  4 +
 apps/maarch_entreprise/template/header.html   |  2 +-
 .../administration-routing.module.ts          | 97 ++++++++++---------
 src/frontend/app/app-routing.module.ts        | 17 ++--
 src/frontend/service/app.guard.ts             | 20 ++++
 7 files changed, 93 insertions(+), 59 deletions(-)
 create mode 100644 src/frontend/service/app.guard.ts

diff --git a/apps/maarch_entreprise/index.php b/apps/maarch_entreprise/index.php
index da9b67b4691..d40c24938b5 100755
--- a/apps/maarch_entreprise/index.php
+++ b/apps/maarch_entreprise/index.php
@@ -378,6 +378,14 @@ if (!empty($_REQUEST['page']) && empty($_REQUEST['triggerAngular'])) {
     } elseif ($cookie['userId'] == 'superadmin' && !empty($_REQUEST['administration'])) {
         ?><script>triggerAngular('#/administration')</script><?php
     } elseif (empty($_REQUEST['page'])) {
-        ?><script>triggerAngular('#/home')</script><?php
+        ?>
+            <script>
+                var route = '#/home';
+                if(localStorage.getItem('PreviousV2Route') != null) {
+                    route = '#' + localStorage.getItem('PreviousV2Route');
+                }
+                triggerAngular(route);
+            </script>
+        <?php
     }
 }
diff --git a/apps/maarch_entreprise/indexing_searching/details.php b/apps/maarch_entreprise/indexing_searching/details.php
index 69517039f02..5e0c9d09eb8 100755
--- a/apps/maarch_entreprise/indexing_searching/details.php
+++ b/apps/maarch_entreprise/indexing_searching/details.php
@@ -382,7 +382,7 @@ if ($stmt->rowCount() == 0) {
             <?php
             if (!isset($_POST['up_res_id']) || !$_POST['up_res_id']) {
                 if ($_SESSION['indexation'] == false) {
-                    echo '<a href="#" onclick="$j(\'#ariane a:nth-last-child(3)\')[0].click();"><i class="fa fa-arrow-circle-left fa-2x" title="'._BACK.'"></i></a>';
+                    echo '<a href="javascript:history.go(-1)"><i class="fa fa-arrow-circle-left fa-2x" title="'._BACK.'"></i></a>';
                 }
             } ?>
         </p>
diff --git a/apps/maarch_entreprise/login.php b/apps/maarch_entreprise/login.php
index d798a92c9e0..a040116ee4a 100755
--- a/apps/maarch_entreprise/login.php
+++ b/apps/maarch_entreprise/login.php
@@ -21,6 +21,10 @@ if (isset($_GET['target_page']) && trim($_GET['target_page']) != '') {
 
 $serverPath = '';
 
+echo '<script>';
+echo "localStorage.removeItem('PreviousV2Route');";
+echo '</script>';
+
 if (strtoupper(substr(PHP_OS, 0, 3)) != 'WIN'
     && strtoupper(substr(PHP_OS, 0, 3)) != 'WINNT'
 ) {
diff --git a/apps/maarch_entreprise/template/header.html b/apps/maarch_entreprise/template/header.html
index f00c93160b8..9f1b2252b97 100755
--- a/apps/maarch_entreprise/template/header.html
+++ b/apps/maarch_entreprise/template/header.html
@@ -1,7 +1,7 @@
 <div id="header">
     <div id="nav" style="margin-left: 0px;">
         <div style="display:flex;padding-left: 20px;padding-right: 20px;height:100%;">
-            <a href="index.php">
+            <a href="index.php" onclick="localStorage.setItem('PreviousV2Route', '/home');">
                 <div style="background: url(static.php?filename=logo_white.svg) #135F7F;background-size: 80%;background-position: center;background-repeat: no-repeat;width: 140px;height: 100%;">
                 </div>
             </a>
diff --git a/src/frontend/app/administration/administration-routing.module.ts b/src/frontend/app/administration/administration-routing.module.ts
index 1d78e688b68..0cc62b6a150 100755
--- a/src/frontend/app/administration/administration-routing.module.ts
+++ b/src/frontend/app/administration/administration-routing.module.ts
@@ -37,58 +37,59 @@ import { SecuritiesAdministrationComponent }            from './security/securit
 import { SendmailAdministrationComponent }              from './sendmail/sendmail-administration.component';
 import { ShippingsAdministrationComponent }             from './shipping/shippings-administration.component';
 import { ShippingAdministrationComponent }              from './shipping/shipping-administration.component';
+import { AppGuard } from '../../service/app.guard';
 
 @NgModule({
     imports: [
         RouterModule.forChild([
-            { path: 'administration', component: AdministrationComponent },
-            { path: 'administration/users', component: UsersAdministrationComponent },
-            { path: 'administration/users/new', component: UserAdministrationComponent },
-            { path: 'administration/users/:id', component: UserAdministrationComponent },
-            { path: 'administration/groups', component: GroupsAdministrationComponent },
-            { path: 'administration/groups/new', component: GroupAdministrationComponent },
-            { path: 'administration/groups/:id', component: GroupAdministrationComponent },
-            { path: 'administration/baskets', component: BasketsAdministrationComponent },
-            { path: 'administration/baskets/new', component: BasketAdministrationComponent },
-            { path: 'administration/baskets/:id', component: BasketAdministrationComponent },
-            { path: 'administration/doctypes', component: DoctypesAdministrationComponent },
-            { path: 'administration/diffusionModels', component: DiffusionModelsAdministrationComponent },
-            { path: 'administration/diffusionModels/new', component: DiffusionModelAdministrationComponent },
-            { path: 'administration/diffusionModels/:id', component: DiffusionModelAdministrationComponent },
-            { path: 'administration/entities', component: EntitiesAdministrationComponent },
-            { path: 'administration/statuses', component: StatusesAdministrationComponent },
-            { path: 'administration/statuses/new', component: StatusAdministrationComponent },
-            { path: 'administration/statuses/:identifier', component: StatusAdministrationComponent },
-            { path: 'administration/parameters', component: ParametersAdministrationComponent },
-            { path: 'administration/parameters/new', component: ParameterAdministrationComponent },
-            { path: 'administration/parameters/:id', component: ParameterAdministrationComponent },
-            { path: 'administration/reports', component : ReportsAdministrationComponent},
-            { path: 'administration/priorities', component : PrioritiesAdministrationComponent },
-            { path: 'administration/priorities/new', component : PriorityAdministrationComponent },
-            { path: 'administration/priorities/:id', component : PriorityAdministrationComponent },
-            { path: 'administration/actions', component: ActionsAdministrationComponent },
-            { path: 'administration/actions/new', component: ActionAdministrationComponent },
-            { path: 'administration/actions/:id', component: ActionAdministrationComponent },
-            { path: 'administration/notifications', component: NotificationsAdministrationComponent },
-            { path: 'administration/notifications/new', component: NotificationAdministrationComponent },
-            { path: 'administration/notifications/:identifier', component: NotificationAdministrationComponent },
-            { path: 'administration/history', component: HistoryAdministrationComponent },
-            { path: 'administration/update-status', component: UpdateStatusAdministrationComponent },
-            { path: 'administration/contacts-groups', component: ContactsGroupsAdministrationComponent },
-            { path: 'administration/contacts-groups/new', component: ContactsGroupAdministrationComponent },
-            { path: 'administration/contacts-groups/:id', component: ContactsGroupAdministrationComponent },
-            { path: 'administration/contacts-filling', component: ContactsFillingAdministrationComponent },
-            { path: 'administration/versions-update', component: VersionsUpdateAdministrationComponent },
-            { path: 'administration/docservers', component: DocserversAdministrationComponent },
-            { path: 'administration/docservers/new', component: DocserverAdministrationComponent },
-            { path: 'administration/templates', component: TemplatesAdministrationComponent },
-            { path: 'administration/templates/new', component: TemplateAdministrationComponent },
-            { path: 'administration/templates/:id', component: TemplateAdministrationComponent },
-            { path: 'administration/securities', component: SecuritiesAdministrationComponent },
-            { path: 'administration/sendmail', component: SendmailAdministrationComponent },
-            { path: 'administration/shippings', component: ShippingsAdministrationComponent },
-            { path: 'administration/shippings/new', component: ShippingAdministrationComponent },
-            { path: 'administration/shippings/:id', component: ShippingAdministrationComponent },
+            { path: 'administration', canActivate: [AppGuard], component: AdministrationComponent },
+            { path: 'administration/users', canActivate: [AppGuard], component: UsersAdministrationComponent },
+            { path: 'administration/users/new', canActivate: [AppGuard], component: UserAdministrationComponent },
+            { path: 'administration/users/:id', canActivate: [AppGuard], component: UserAdministrationComponent },
+            { path: 'administration/groups', canActivate: [AppGuard], component: GroupsAdministrationComponent },
+            { path: 'administration/groups/new', canActivate: [AppGuard], component: GroupAdministrationComponent },
+            { path: 'administration/groups/:id', canActivate: [AppGuard], component: GroupAdministrationComponent },
+            { path: 'administration/baskets', canActivate: [AppGuard], component: BasketsAdministrationComponent },
+            { path: 'administration/baskets/new', canActivate: [AppGuard], component: BasketAdministrationComponent },
+            { path: 'administration/baskets/:id', canActivate: [AppGuard], component: BasketAdministrationComponent },
+            { path: 'administration/doctypes', canActivate: [AppGuard], component: DoctypesAdministrationComponent },
+            { path: 'administration/diffusionModels', canActivate: [AppGuard], component: DiffusionModelsAdministrationComponent },
+            { path: 'administration/diffusionModels/new', canActivate: [AppGuard], component: DiffusionModelAdministrationComponent },
+            { path: 'administration/diffusionModels/:id', canActivate: [AppGuard], component: DiffusionModelAdministrationComponent },
+            { path: 'administration/entities', canActivate: [AppGuard], component: EntitiesAdministrationComponent },
+            { path: 'administration/statuses', canActivate: [AppGuard], component: StatusesAdministrationComponent },
+            { path: 'administration/statuses/new', canActivate: [AppGuard], component: StatusAdministrationComponent },
+            { path: 'administration/statuses/:identifier', canActivate: [AppGuard], component: StatusAdministrationComponent },
+            { path: 'administration/parameters', canActivate: [AppGuard], component: ParametersAdministrationComponent },
+            { path: 'administration/parameters/new', canActivate: [AppGuard], component: ParameterAdministrationComponent },
+            { path: 'administration/parameters/:id', canActivate: [AppGuard], component: ParameterAdministrationComponent },
+            { path: 'administration/reports', canActivate: [AppGuard], component : ReportsAdministrationComponent},
+            { path: 'administration/priorities', canActivate: [AppGuard], component : PrioritiesAdministrationComponent },
+            { path: 'administration/priorities/new', canActivate: [AppGuard], component : PriorityAdministrationComponent },
+            { path: 'administration/priorities/:id', canActivate: [AppGuard], component : PriorityAdministrationComponent },
+            { path: 'administration/actions', canActivate: [AppGuard], component: ActionsAdministrationComponent },
+            { path: 'administration/actions/new', canActivate: [AppGuard], component: ActionAdministrationComponent },
+            { path: 'administration/actions/:id', canActivate: [AppGuard], component: ActionAdministrationComponent },
+            { path: 'administration/notifications', canActivate: [AppGuard], component: NotificationsAdministrationComponent },
+            { path: 'administration/notifications/new', canActivate: [AppGuard], component: NotificationAdministrationComponent },
+            { path: 'administration/notifications/:identifier', canActivate: [AppGuard], component: NotificationAdministrationComponent },
+            { path: 'administration/history', canActivate: [AppGuard], component: HistoryAdministrationComponent },
+            { path: 'administration/update-status', canActivate: [AppGuard], component: UpdateStatusAdministrationComponent },
+            { path: 'administration/contacts-groups', canActivate: [AppGuard], component: ContactsGroupsAdministrationComponent },
+            { path: 'administration/contacts-groups/new', canActivate: [AppGuard], component: ContactsGroupAdministrationComponent },
+            { path: 'administration/contacts-groups/:id', canActivate: [AppGuard], component: ContactsGroupAdministrationComponent },
+            { path: 'administration/contacts-filling', canActivate: [AppGuard], component: ContactsFillingAdministrationComponent },
+            { path: 'administration/versions-update', canActivate: [AppGuard], component: VersionsUpdateAdministrationComponent },
+            { path: 'administration/docservers', canActivate: [AppGuard], component: DocserversAdministrationComponent },
+            { path: 'administration/docservers/new', canActivate: [AppGuard], component: DocserverAdministrationComponent },
+            { path: 'administration/templates', canActivate: [AppGuard], component: TemplatesAdministrationComponent },
+            { path: 'administration/templates/new', canActivate: [AppGuard], component: TemplateAdministrationComponent },
+            { path: 'administration/templates/:id', canActivate: [AppGuard], component: TemplateAdministrationComponent },
+            { path: 'administration/securities', canActivate: [AppGuard], component: SecuritiesAdministrationComponent },
+            { path: 'administration/sendmail', canActivate: [AppGuard], component: SendmailAdministrationComponent },
+            { path: 'administration/shippings', canActivate: [AppGuard], component: ShippingsAdministrationComponent },
+            { path: 'administration/shippings/new', canActivate: [AppGuard], component: ShippingAdministrationComponent },
+            { path: 'administration/shippings/:id', canActivate: [AppGuard], component: ShippingAdministrationComponent },
         ]),
     ],
     exports: [
diff --git a/src/frontend/app/app-routing.module.ts b/src/frontend/app/app-routing.module.ts
index 8303b020e8f..4b492646a7c 100755
--- a/src/frontend/app/app-routing.module.ts
+++ b/src/frontend/app/app-routing.module.ts
@@ -10,20 +10,21 @@ import { BasketListComponent }              from './list/basket-list.component';
 import { SignatureBookComponent }           from './signature-book.component';
 import { SaveNumericPackageComponent }      from './save-numeric-package.component';
 import { PrintSeparatorComponent }          from './separator/print-separator/print-separator.component';
+import { AppGuard }                         from '../service/app.guard';
 
 @NgModule({
     imports: [
         RouterModule.forRoot([
             { path: 'activate-user', component: ActivateUserComponent},
             { path: 'password-modification', component: PasswordModificationComponent },
-            { path: 'profile', component: ProfileComponent },
-            { path: 'about-us', component: AboutUsComponent },
-            { path: 'home', component: HomeComponent },
-            { path: 'basketList/users/:userSerialId/groups/:groupSerialId/baskets/:basketId', component: BasketListComponent },
-            { path: 'saveNumericPackage', component: SaveNumericPackageComponent },
-            { path: 'separators/print', component: PrintSeparatorComponent },
-            { path: 'signatureBook/users/:userId/groups/:groupId/baskets/:basketId/resources/:resId', component: SignatureBookComponent },
-            { path: '**',   redirectTo: 'home', pathMatch: 'full' },
+            { path: 'profile', canActivate: [AppGuard], component: ProfileComponent },
+            { path: 'about-us', canActivate: [AppGuard], component: AboutUsComponent },
+            { path: 'home', canActivate: [AppGuard],  component: HomeComponent },
+            { path: 'basketList/users/:userSerialId/groups/:groupSerialId/baskets/:basketId', canActivate: [AppGuard], component: BasketListComponent },
+            { path: 'saveNumericPackage', canActivate: [AppGuard], component: SaveNumericPackageComponent },
+            { path: 'separators/print', canActivate: [AppGuard], component: PrintSeparatorComponent },
+            { path: 'signatureBook/users/:userId/groups/:groupId/baskets/:basketId/resources/:resId', canActivate: [AppGuard],component: SignatureBookComponent },
+            { path: '**',  redirectTo: 'home', pathMatch: 'full' },
         ], { useHash: true }),
     ],
     exports: [
diff --git a/src/frontend/service/app.guard.ts b/src/frontend/service/app.guard.ts
new file mode 100644
index 00000000000..ff37385c2d3
--- /dev/null
+++ b/src/frontend/service/app.guard.ts
@@ -0,0 +1,20 @@
+
+import { Injectable } from '@angular/core';
+import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router';
+import { HttpClient } from '@angular/common/http';
+
+@Injectable({
+    providedIn: 'root'
+})
+export class AppGuard implements CanActivate {
+
+    constructor(public http: HttpClient, private router: Router) { }
+
+    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
+
+        // TO DO : CAN BE REMOVE AFTER FULL V2
+        localStorage.setItem('PreviousV2Route', state.url);
+
+        return true;
+    }
+}
-- 
GitLab