Newer
Older
Sébastien DA ROCHA
committed
<template>
<div v-frag>
<div class="fourteen wide column">
<h1>Mon compte</h1>
</div>
<div class="row">
<div class="five wide column">
<h4 class="ui horizontal divider header">
PROFIL
</h4>
Sébastien DA ROCHA
committed
<div class="ui divided list">
<div class="item">
<div class="right floated content">
<div class="description">
<span v-if="user.username">{{ user.username }} </span>
</div>
</div>
<div class="content">
Nom d'utilisateur
</div>
Sébastien DA ROCHA
committed
</div>
<div class="item">
<div class="right floated content">
<div class="description">
{{ userFullname }}
</div>
</div>
<div class="content">
Nom complet
</div>
Sébastien DA ROCHA
committed
</div>
<div class="item">
<div class="right floated content">
<div class="description">
{{ user.email }}
</div>
</div>
<div class="content">
Adresse e-mail
</div>
Sébastien DA ROCHA
committed
</div>
<div class="item">
<div class="right floated content">
<div class="description">
{{ user.is_superuser ? "Oui" : "Non" }}
</div>
</div>
<div class="content">
Administrateur
</div>
Sébastien DA ROCHA
committed
</div>
</div>
</div>
<div class="nine wide column">
<h4 class="ui horizontal divider header">
MES PROJETS
</h4>
Sébastien DA ROCHA
committed

Timothee P
committed
<div class="ui divided items dimmer-anchor">
:key="project.slug"
class="item"
>
<div
v-if="user_permissions[project.slug].can_view_project"
v-frag
>
<div class="ui tiny image">
<img
v-if="project.thumbnail"
class="ui small image"
:src="
project.thumbnail.includes('default')
? require('@/assets/img/default.png')
: DJANGO_BASE_URL + project.thumbnail + refreshId()
"
height="200"
Sébastien DA ROCHA
committed
</div>
<div class="middle aligned content">
<router-link
:to="{
name: 'project_detail',
params: { slug: project.slug },
}"
class="header"
Sébastien DA ROCHA
committed
>
<div class="description">
<p>{{ project.description }}</p>
</div>
<div class="meta">
<span
class="right floated"
>Projet {{ project.moderation ? "" : "non" }} modéré</span>
<span>Niveau d'autorisation requis :
{{ project.access_level_pub_feature }}</span><br>
<span>
Mon niveau d'autorisation :
<span v-if="USER_LEVEL_PROJECTS && project">{{
USER_LEVEL_PROJECTS[project.slug]
}}</span>
<span v-if="user && user.is_administrator">{{
"+ Gestionnaire métier"
}}</span>
</span>
</div>
<div class="meta">
<span
class="right floated"
:data-tooltip="`Projet créé le ${project.created_on}`"
>
<i class="calendar icon" /> {{ project.created_on }}
{{ project.nb_contributors }} <i class="user icon" />
{{ project.nb_published_features }} <i
class="map marker icon"
</span>
<span data-tooltip="Commentaires">
{{ project.nb_published_features_comments }} <i
class="comment icon"
Sébastien DA ROCHA
committed
</div>
</div>
</div>

Timothee P
committed
<div
:class="['ui inverted dimmer', { active: projectsLoading }]"
>
<div class="ui text loader">
Récupération des projets en cours...
</div>
</div>
<!-- PAGINATION -->
<Pagination
v-if="count"
:nb-pages="Math.ceil(count/10)"
:on-page-change="SET_CURRENT_PAGE"
@change-page="changePage"
/>
Sébastien DA ROCHA
committed
</div>
</div>
</div>
Sébastien DA ROCHA
committed
<div class="fourteen wide column">
<div class="ui three stackable cards">
<div class="red card">
<div class="content">
<div class="center aligned header">
Mes dernières notifications reçues
</div>
<div class="center aligned description">
<div class="ui relaxed list">
<div
v-for="item in events"
:key="item.id"
class="item"
>

Timothee P
committed
<div class="content ellipsis nowrap">
Sébastien DA ROCHA
committed
<a
v-if="item.object_type === 'feature'"
:href="modifyUrl(item.related_feature.feature_url)"
Sébastien DA ROCHA
committed
>
Sébastien DA ROCHA
committed
</a>
<a
v-else-if="item.object_type === 'comment'"
:href="modifyUrl(item.related_feature.feature_url)"
Sébastien DA ROCHA
committed
>
Commentaire créé
</a>
<a
v-else-if="item.object_type === 'attachment'"
:href="modifyUrl(item.related_feature.feature_url)"
Sébastien DA ROCHA
committed
>
Pièce jointe ajoutée
</a>
<a
v-else-if="item.object_type === 'project'"
:href="modifyUrl(item.project_url)"
Sébastien DA ROCHA
committed
>
Projet créé
</a>
Sébastien DA ROCHA
committed
<span v-else-if="item.event_type === 'update'">
Sébastien DA ROCHA
committed
<a
v-if="item.object_type === 'feature'"

Timothee P
committed
:href="modifyUrl(item.related_feature.feature_url || item.project_url)"
Sébastien DA ROCHA
committed
>
Signalement mis à jour
</a>
<a
v-else-if="item.object_type === 'project'"
:href="modifyUrl(item.project_url)"
Sébastien DA ROCHA
committed
</a>
Sébastien DA ROCHA
committed
<span v-else-if="item.event_type === 'delete'">
Sébastien DA ROCHA
committed
<span v-if="item.object_type === 'feature'">
Signalement supprimé({{ item.data.feature_title }})
</span>
<i v-else>Événement inconnu</i>
</span>
<span
v-if="item.object_type !== 'project'"

Timothee P
committed
class="meta"
>
({{ item.related_feature.title ?
item.related_feature.title :
'signalement supprimé'
}})
</span>
Sébastien DA ROCHA
committed
<div class="description">
Sébastien DA ROCHA
committed
<span v-if="user.is_authenticated">
, par {{ item.display_user }}
</span>
Sébastien DA ROCHA
committed
</div>
</div>
</div>
<i
v-if="!events || events.length === 0"
>Aucune notification pour le moment.</i>
Sébastien DA ROCHA
committed
</div>
</div>
</div>
</div>
<div class="orange card">
<div class="content">
<div class="center aligned header">
Mes derniers signalements
</div>
Sébastien DA ROCHA
committed
<div class="center aligned description">
<div class="ui relaxed list">
<div
v-for="item in features"
:key="item.id"
class="item"
>
Sébastien DA ROCHA
committed
<div class="content">
<div>
<a
v-if="item.related_feature && item.related_feature.feature_url"
:href="modifyUrl(item.related_feature.feature_url)"

Timothee P
committed
<span
v-else
class="meta"
><del>{{ item.data.feature_title }}</del> (supprimé)</span>
Sébastien DA ROCHA
committed
</div>
<div class="description">
Sébastien DA ROCHA
committed
<span v-if="user.is_authenticated">
, par {{ item.display_user }}
</span>
Sébastien DA ROCHA
committed
</div>
</div>
</div>
<i
v-if="!features || features.length === 0"
>Aucun signalement pour le moment.</i>
Sébastien DA ROCHA
committed
</div>
</div>
</div>
</div>
<div class="yellow card">
<div class="content">
<div class="center aligned header">
Mes derniers commentaires
</div>
Sébastien DA ROCHA
committed
<div class="center aligned description">
<div class="ui relaxed list">
<div
v-for="item in comments"
:key="item.id"
class="item"
>
Sébastien DA ROCHA
committed
<div class="content">
<div>
:href="modifyUrl(item.related_feature.feature_url)"
Sébastien DA ROCHA
committed
</div>
<div class="description">
Sébastien DA ROCHA
committed
<span v-if="user.is_authenticated">
, par {{ item.display_user }}
</span>
Sébastien DA ROCHA
committed
</div>
</div>
</div>
<i
v-if="!comments || comments.length === 0"
>Aucun commentaire pour le moment.</i>
Sébastien DA ROCHA
committed
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import { mapActions, mapMutations, mapState } from 'vuex';
import Pagination from '@/components/Pagination.vue';
Sébastien DA ROCHA
committed
export default {
Sébastien DA ROCHA
committed
directives: {
frag,
},
Sébastien DA ROCHA
committed
data() {
return {
events: [],
features: [],
comments: [],
Sébastien DA ROCHA
committed
};
},
computed: {
DJANGO_BASE_URL() {
return this.$store.state.configuration.VUE_APP_DJANGO_BASE;
},
userFullname() {
Sébastien DA ROCHA
committed
if (this.user.first_name || this.user.last_name)
return this.user.first_name + ' ' + this.user.last_name;
Sébastien DA ROCHA
committed
return null;
},
isSharedProject() {
return this.$route.path.includes('projet-partage');
},
projectsArray() { //* if only one project, only project object is returned
return Array.isArray(this.projects) ? this.projects : [this.projects];
Sébastien DA ROCHA
committed
},

Timothee P
committed
this.RESET_PROJECTS_FILTER(); //* empty remaining filters in store
this.SET_PROJECTS([]); //* empty previous project to avoid undefined user_permissions[project.slug]
this.getData();
Sébastien DA ROCHA
committed
methods: {
...mapActions('projects', [
'GET_PROJECTS',
]),
...mapMutations('projects', [
'SET_PROJECTS',

Timothee P
committed
'RESET_PROJECTS_FILTER',
]),
...mapMutations('projects', [
'SET_CURRENT_PAGE',
]),
Sébastien DA ROCHA
committed
refreshId() {
Sébastien DA ROCHA
committed
},
miscAPI.getUserEvents(this.$route.params.slug)
this.events = data.events;
this.features = data.features;
this.comments = data.comments;
},
modifyUrl(url) {
return url.replace('projet', 'projet-partage');
}
return url;

Timothee P
committed
this.projectsLoading = true;
this.GET_PROJECTS({ myaccount: true, projectSlug: this.$route.params.slug, page })
.then(() => this.projectsLoading = false)
.catch(() => this.projectsLoading = false);
},
changePage(e) {
this.getData(e);
},
Sébastien DA ROCHA
committed
};
</script>