From 01079d85cb93eccd31a56e370fe6c219ea5534ff Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timoth=C3=A9e=20Poussard?= <tpoussard@neogeo.fr>
Date: Fri, 28 Jan 2022 15:04:43 +0100
Subject: [PATCH] restrict projects in my account only to shared project

---
 src/App.vue              |  6 ++---
 src/router/index.js      |  2 +-
 src/views/My_account.vue | 49 +++++++++++++++++++++++++++++-----------
 3 files changed, 40 insertions(+), 17 deletions(-)

diff --git a/src/App.vue b/src/App.vue
index 9aecfde0..95966e80 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -92,7 +92,7 @@
               <div class="mobile">
                 <router-link
                   v-if="user"
-                  to="/my_account/"
+                  :to="{name: 'my_account', params: { slug: $route.params.slug ? $route.params.slug : '-' }}"
                   class="item"
                 >
                   {{ userFullname || user.username || "Utilisateur inconnu" }}
@@ -145,8 +145,8 @@
           <div class="desktop flex push-right-desktop">
             <router-link
               v-if="user"
-              :to="{name: isSharedProject ? '' : 'my_account'}"
-              :class="['item', {disable: isSharedProject}]"
+              :to="{name: 'my_account', params: { slug: $route.params.slug ? $route.params.slug : '-' }}"
+              class="item"
             >
               {{ userFullname || user.username || "Utilisateur inconnu" }}
             </router-link>
diff --git a/src/router/index.js b/src/router/index.js
index 3a60b4cb..7126661b 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -24,7 +24,7 @@ const routes = [
     component: () => import(/* webpackChunkName: "login" */'../views/registration/Login.vue')
   },
   {
-    path: `${projectBase === 'projet' ? '': '/' + projectBase}/my_account/`,
+    path: `${projectBase === 'projet' ? '': '/' + projectBase + '/:slug'}/my_account/`,
     name: 'my_account',
     component: () => import('../views/My_account.vue')
   },
diff --git a/src/views/My_account.vue b/src/views/My_account.vue
index 02e07ea6..7d3f2917 100644
--- a/src/views/My_account.vue
+++ b/src/views/My_account.vue
@@ -60,7 +60,7 @@
 
         <div class="ui divided items">
           <div
-            v-for="project in projects"
+            v-for="project in availableProjects"
             :key="project.slug"
             class="item"
           >
@@ -156,25 +156,27 @@
                       <div v-if="item.event_type === 'create'">
                         <a
                           v-if="item.object_type === 'feature'"
-                          :href="item.related_feature.feature_url"
+                          :href="modifyUrl(item.related_feature.feature_url)"
                         >
-                          Signalement créé
+                          <span>
+                            Signalement créé
+                          </span>
                         </a>
                         <a
                           v-else-if="item.object_type === 'comment'"
-                          :href="item.related_feature.feature_url"
+                          :href="modifyUrl(item.related_feature.feature_url)"
                         >
                           Commentaire créé
                         </a>
                         <a
                           v-else-if="item.object_type === 'attachment'"
-                          :href="item.related_feature.feature_url"
+                          :href="modifyUrl(item.related_feature.feature_url)"
                         >
                           Pièce jointe ajoutée
                         </a>
                         <a
                           v-else-if="item.object_type === 'project'"
-                          :href="item.project_url"
+                          :href="modifyUrl(item.project_url)"
                         >
                           Projet créé
                         </a>
@@ -183,13 +185,13 @@
                       <div v-else-if="item.event_type === 'update'">
                         <a
                           v-if="item.object_type === 'feature'"
-                          :href="item.related_feature.project_url"
+                          :href="modifyUrl(item.related_feature.project_url)"
                         >
                           Signalement mis à jour
                         </a>
                         <a
                           v-else-if="item.object_type === 'project'"
-                          :href="item.project_url"
+                          :href="modifyUrl(item.project_url)"
                         >à Projet mis à jour
                         </a>
                       </div>
@@ -232,7 +234,7 @@
                       <div>
                         <a
                           v-if="item.related_feature"
-                          :href="item.related_feature.feature_url"
+                          :href="modifyUrl(item.related_feature.feature_url)"
                         >{{ item.related_feature.title }}</a>
                         <span v-else>
                           {{ item.data.feature_title }} (supprimé)
@@ -269,7 +271,7 @@
                     <div class="content">
                       <div>
                         <a
-                          :href="item.related_feature.feature_url"
+                          :href="modifyUrl(item.related_feature.feature_url)"
                         >"{{ item.related_comment.comment }}"</a>
                       </div>
                       <div class="description">
@@ -314,24 +316,36 @@ export default {
   },
 
   computed: {
-    // todo : filter projects to user
     ...mapState([
       'user',
       'USER_LEVEL_PROJECTS',
       'user_permissions',
     ]),
+
+    // todo : filter projects to user
     ...mapState('projects', [
       'projects'
     ]),
-    DJANGO_BASE_URL: function () {
+
+    DJANGO_BASE_URL() {
       return this.$store.state.configuration.VUE_APP_DJANGO_BASE;
     },
-    userFullname: function () {
+
+    userFullname() {
       if (this.user.first_name || this.user.last_name)
         return this.user.first_name + ' ' + this.user.last_name;
       return null;
     },
+
+    availableProjects() {
+      console.log(this.$route.path);
+      if (this.$route.path.includes('projet-partage')) {
+        return this.projects.filter((el) => el.slug === this.$route.params.slug);
+      }
+      return this.projects;
+    }
   },
+
   created(){
     this.getEvents();
   },
@@ -340,17 +354,26 @@ export default {
     refreshId() {
       return '?ver=' + Math.random();
     },
+
     setEvents(data){
       this.events = data.events;
       this.features = data.features;
       this.comments = data.comments;
     },
+
     getEvents(){
       this.$store
         .dispatch('USER_EVENTS')
         .then((data)=>{
           this.setEvents(data);
         });
+    },
+
+    modifyUrl(url) {
+      if (this.$route.path.includes('projet-partage')) {
+        return url.replace('projet', 'projet-partage');
+      }
+      return url;
     }
   }
 };
-- 
GitLab