Commit dfcfc5330f24f562e8d5e65b7c56a3c942f392ce

Authored by Zambom
1 parent 7aba1d6f

Adding remove user/account

amadeus/templates/base.html
... ... @@ -119,7 +119,7 @@
119 119 <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li>
120 120 <li><a href="{% url 'users:edit_profile' %}">{% trans 'Edit Profile' %}</a></li>
121 121 <li><a href="{% url 'users:change_pass' %}">{% trans 'Change Password' %}</a></li>
122   - <li><a href="#">{% trans 'Delete Account' %}</a></li>
  122 + <li><a href="{% url 'users:remove_acc' %}">{% trans 'Delete Account' %}</a></li>
123 123 </ul>
124 124 </li>
125 125 <li data-toggle="tooltip" data-placement="bottom" title data-original-title="log out">
... ...
users/models.py
... ... @@ -70,3 +70,15 @@ class User(AbstractBaseUser, PermissionsMixin):
70 70  
71 71 def is_student(self):
72 72 return _('Is not a student')
  73 +
  74 + def has_dependencies(self):
  75 + if self.is_staff:
  76 + return True
  77 +
  78 + #Check if is coordinator of something
  79 +
  80 + #Check if is professor of something
  81 +
  82 + #Check if is student of something
  83 +
  84 + return False
... ...
users/templates/users/delete.html 0 → 100644
... ... @@ -0,0 +1,35 @@
  1 +{% extends 'users/list.html' %}
  2 +
  3 +{% load static i18n %}
  4 +{% load widget_tweaks %}
  5 +{% load django_bootstrap_breadcrumbs %}
  6 +
  7 +{% block breadcrumbs %}
  8 + {{ block.super }}
  9 + {% breadcrumb 'Delete User' 'users:delete' %}
  10 +{% endblock %}
  11 +
  12 +{% block content %}
  13 + <div class="row">
  14 + <div class="col-md-12">
  15 + <div class="well well-lg">
  16 + <form action="" method="post">
  17 + {% csrf_token %}
  18 + <h2>{% trans 'Are you sure you want delete the user' %}: {{ acc }}?</h2>
  19 + <p>{% trans 'All data will be lost and havent how recover it.' %}</p>
  20 + <div class="row">
  21 + <div class="col-md-12">
  22 + <div class="pull-left">
  23 + <input type="submit" class="btn btn-raised btn-block btn-primary" value="{% trans 'Remove' %}" />
  24 + </div>
  25 + <div class="pull-right">
  26 + <a href="{% url 'users:manage' %}" class="btn btn-raised btn-block btn-default" >{% trans 'Cancel' %}</a>
  27 + </div>
  28 + </div>
  29 + </div>
  30 + </form>
  31 + </div>
  32 + </div>
  33 + </div>
  34 + <br clear="all" />
  35 +{% endblock %}
... ...
users/templates/users/delete_account.html 0 → 100644
... ... @@ -0,0 +1,35 @@
  1 +{% extends 'users/profile.html' %}
  2 +
  3 +{% load static i18n %}
  4 +{% load widget_tweaks %}
  5 +{% load django_bootstrap_breadcrumbs %}
  6 +
  7 +{% block breadcrumbs %}
  8 + {{ block.super }}
  9 + {% breadcrumb 'Remove Account' 'users:remove_acc' %}
  10 +{% endblock %}
  11 +
  12 +{% block content %}
  13 + <div class="row">
  14 + <div class="col-md-12">
  15 + <div class="well well-lg">
  16 + <form action="" method="post">
  17 + {% csrf_token %}
  18 + <h2>{% trans 'Are you sure you want delete your account?' %}</h2>
  19 + <p>{% trans 'All data will be lost and havent how recover it.' %}</p>
  20 + <div class="row">
  21 + <div class="col-md-12">
  22 + <div class="pull-left">
  23 + <input type="submit" class="btn btn-raised btn-block btn-primary" value="{% trans 'Remove' %}" />
  24 + </div>
  25 + <div class="pull-right">
  26 + <a href="{% url 'users:profile' %}" class="btn btn-raised btn-block btn-default" >{% trans 'Cancel' %}</a>
  27 + </div>
  28 + </div>
  29 + </div>
  30 + </form>
  31 + </div>
  32 + </div>
  33 + </div>
  34 + <br clear="all" />
  35 +{% endblock %}
... ...
users/templates/users/list.html
... ... @@ -63,7 +63,7 @@
63 63 <div class="col-md-3">
64 64 <div align="right">
65 65 <a href="{% url 'users:update' acc.email %}" class="btn btn-primary btn-raised btn-sm"><i class="fa fa-edit"></i> {% trans 'Edit' %}</a>
66   - <a href="javascript:void(0)" class="btn btn-default btn-raised btn-sm" data-toggle="modal" data-target="#DeleteModal{{ forloop.counter }}"><i class="fa fa-trash"></i> {% trans 'Delete' %}</a>
  66 + <a href="{% url 'users:delete' acc.email %}" class="btn btn-default btn-raised btn-sm"><i class="fa fa-trash"></i> {% trans 'Delete' %}</a>
67 67 </div>
68 68 </div>
69 69 </div>
... ...
users/templates/users/profile.html
... ... @@ -16,7 +16,7 @@
16 16 {% block content %}
17 17 {% if messages %}
18 18 {% for message in messages %}
19   - <div class="alert alert-success alert-dismissible" role="alert">
  19 + <div class="alert alert-{{ message.tags }} alert-dismissible" role="alert">
20 20 <button type="button" class="close" data-dismiss="alert" aria-label="Close">
21 21 <span aria-hidden="true">&times;</span>
22 22 </button>
... ...
users/templates/users/remove_account.html
... ... @@ -1,44 +0,0 @@
1   -{% extends 'users/profile.html' %}
2   -
3   -{% load static i18n %}
4   -{% load widget_tweaks %}
5   -{% load django_bootstrap_breadcrumbs %}
6   -
7   -{% block breadcrumbs %}
8   -
9   - {{ block.super }}
10   - {% breadcrumb 'Edit' 'users:update_profile' %}
11   -
12   -{% endblock %}
13   -
14   -{% block content %}
15   - {% if messages %}
16   - {% for message in messages %}
17   - <div class="alert alert-success alert-dismissible" role="alert">
18   - <button type="button" class="close" data-dismiss="alert" aria-label="Close">
19   - <span aria-hidden="true">&times;</span>
20   - </button>
21   - <p>{{ message }}</p>
22   - </div>
23   - {% endfor %}
24   - {% endif %}
25   - <div class="row">
26   - <div class="col-md-12">
27   - <div class="well well-lg">
28   - <h2>{% trans 'Are you sure you want delete this account?' %}</h2>
29   - <p>{% trans 'All data will be lost and havent how recover it.' %}</p>
30   - <div class="row">
31   - <div class="col-md-3 col-sm-2 col-xs-2">
32   - <a href="{% url 'users:remove' user.username %}" class="btn btn-raised btn-block btn-success" >{% trans 'Remove' %}</a>
33   - </div>
34   - <div class="col-md-3 col-sm-2 col-xs-2">
35   - <a href="{% url 'users:profile' %}" class="btn btn-raised btn-block btn-default" >{% trans 'Cancel' %}</a>
36   - </div>
37   - </div>
38   - </div>
39   - </div>
40   - </div>
41   -
42   -
43   - <br clear="all" />
44   -{% endblock %}
users/urls.py
... ... @@ -8,9 +8,11 @@ urlpatterns = [
8 8 url(r'^logout/$', auth_views.logout, {'next_page': 'users:login'}, name='logout'),
9 9 url(r'^signup/$', views.RegisterUser.as_view(), name = 'signup'),
10 10 url(r'^$', views.UsersListView.as_view(), name = 'manage'),
11   - url(r'^edit/(?P<email>[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/$', views.UpdateView.as_view(), name='update'),
12 11 url(r'^create/$', views.CreateView.as_view(), name = 'create'),
  12 + url(r'^edit/(?P<email>[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/$', views.UpdateView.as_view(), name='update'),
  13 + url(r'^delete/(?P<email>[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/$', views.DeleteView.as_view(), name='delete'),
13 14 url(r'^profile/$', views.Profile.as_view(), name = 'profile'),
14 15 url(r'^edit_profile/$', views.UpdateProfile.as_view(), name = 'edit_profile'),
15 16 url(r'^change_pass/$', views.ChangePassView.as_view(), name='change_pass'),
  17 + url(r'^remove_account/$', views.DeleteView.as_view(), name='remove_acc'),
16 18 ]
... ...
users/views.py
... ... @@ -179,6 +179,66 @@ class UpdateView(LoginRequiredMixin, generic.UpdateView):
179 179  
180 180 return context
181 181  
  182 +class DeleteView(LoginRequiredMixin, generic.DeleteView):
  183 + login_url = reverse_lazy("users:login")
  184 + redirect_field_name = 'next'
  185 +
  186 + template_name = 'users/delete.html'
  187 + model = User
  188 + slug_url_kwarg = 'email'
  189 + context_object_name = 'acc'
  190 +
  191 + def get_object(self):
  192 + email = self.kwargs.get('email', None)
  193 +
  194 + if email is None:
  195 + user = get_object_or_404(User, email = self.request.user.email)
  196 + else:
  197 + user = get_object_or_404(User, email = email)
  198 +
  199 + return user
  200 +
  201 + def delete(self, request, *args, **kwargs):
  202 + email = self.kwargs.get('email', None)
  203 + user = self.get_object()
  204 +
  205 + if email is None:
  206 + success_url = reverse_lazy('users:login')
  207 + error_url = reverse_lazy('users:profile')
  208 + else:
  209 + success_url = reverse_lazy('users:manage')
  210 + error_url = reverse_lazy('users:manage')
  211 +
  212 + success_msg = _('User removed successfully!')
  213 + error_msg = _('Could not remove the account. The user is attach to one or more functions (administrator, coordinator, professor ou student) in the system.')
  214 +
  215 + if user.has_dependencies():
  216 + messages.error(self.request, error_msg)
  217 +
  218 + return redirect(error_url)
  219 + else:
  220 + user.delete()
  221 +
  222 + messages.success(self.request, success_msg)
  223 +
  224 + return redirect(success_url)
  225 +
  226 + def get_context_data(self, **kwargs):
  227 + context = super(DeleteView, self).get_context_data(**kwargs)
  228 + context['title'] = _('Delete Account')
  229 +
  230 + return context
  231 +
  232 + def render_to_response(self, context, **response_kwargs):
  233 + email = self.kwargs.get('email', None)
  234 +
  235 + if email is None:
  236 + template = 'users/delete_account.html'
  237 + else:
  238 + template = 'users/delete.html'
  239 +
  240 + return self.response_class(request = self.request, template = template, context = context, using = self.template_engine, **response_kwargs)
  241 +
182 242 class ChangePassView(LoginRequiredMixin, generic.UpdateView):
183 243 login_url = reverse_lazy("users:login")
184 244 redirect_field_name = 'next'
... ...