Commit 108cddfac4cf4bce998c31de836856e2710cac47

Authored by Zambom
1 parent 3d05b2c1

Adding manage users page

amadeus/templates/base.html
@@ -107,10 +107,8 @@ @@ -107,10 +107,8 @@
107 <li title data-original-title="{% trans 'settings' %}"> 107 <li title data-original-title="{% trans 'settings' %}">
108 <a href="" data-toggle="dropdown"><i class="fa fa-cog" aria-hidden="true"></i></a> 108 <a href="" data-toggle="dropdown"><i class="fa fa-cog" aria-hidden="true"></i></a>
109 <ul class="dropdown-menu pull-right"> 109 <ul class="dropdown-menu pull-right">
110 - <li><a href="#">{% trans 'Perfil' %}</a></li>  
111 - <li><a href="#">{% trans 'Edit Profile' %}</a></li>  
112 - <li><a href="#">{% trans 'Change password' %}</a></li>  
113 - <li><a href="#">{% trans 'Remove account' %}</a></li> 110 + <li><a href="{% url 'users:manage' %}">{% trans 'Manage Users' %}</a></li>
  111 + <li><a href="#">{% trans 'Manage Courses' %}</a></li>
114 </ul> 112 </ul>
115 </li> 113 </li>
116 <li> 114 <li>
users/templates/list_users.html
@@ -1,95 +0,0 @@ @@ -1,95 +0,0 @@
1 -{% extends 'home.html' %}  
2 -  
3 -{% load i18n pagination django_bootstrap_breadcrumbs permission_tags static %}  
4 -  
5 -{% block breadcrumbs %}  
6 -  
7 - {{ block.super }}  
8 - {% breadcrumb 'Manage Users' 'users:manage' %}  
9 -  
10 -{% endblock %}  
11 -  
12 -{% block menu %}  
13 -{% endblock %}  
14 -  
15 -{% block content %}  
16 - {% if messages %}  
17 - {% for message in messages %}  
18 - <div class="alert alert-{{ message.tags }} alert-dismissible" role="alert">  
19 - <button type="button" class="close" data-dismiss="alert" aria-label="Close">  
20 - <span aria-hidden="true">&times;</span>  
21 - </button>  
22 - <p>{{ message }}</p>  
23 - </div>  
24 - {% endfor %}  
25 - {% endif %}  
26 - <form action="" method="GET" class="form-horizontal">  
27 - <div class="form-group">  
28 - <div class="col-md-11 col-sm-11 col-xs-11">  
29 - <input type="text" class="form-control" name="search" placeholder="{% trans 'Search...' %}" />  
30 - </div>  
31 - <div class="col-md-1 col-sm-1 col-xs-1">  
32 - <button type="submit" class="btn btn-fab btn-fab-mini">  
33 - <i class="material-icons">search</i>  
34 - </button>  
35 - </div>  
36 - </div>  
37 - </form>  
38 -  
39 - {% if users|length > 0 %}  
40 - {% for acc in users %}  
41 - <div class="row panel panel-default">  
42 - <div class="panel-body">  
43 - <div class="col-md-4">  
44 - {% if acc.image %}  
45 - <div style="background-image: url('{{ acc.image.url }}'); background-size: 100% 100%; background-repeat: no-repeat;" alt="photoUser" class="img-circle img-responsive img-list-user"></div>  
46 - {% else %}  
47 - {% if acc.gender == 'M' %}  
48 - <img src="{% static 'img/male_avatar.png' %}" alt="Avatar" class="img-circle img-responsive img-list-user">  
49 - {% else %}  
50 - <img src="{% static 'img/female_avatar.png' %}" alt="Avatar" class="img-circle img-responsive img-list-user">  
51 - {% endif %}  
52 - {% endif %}  
53 - </div>  
54 - <div class="col-md-8">  
55 - <p>{% trans 'Name' %}: {{ acc.name }}</p>  
56 - <p>{% trans 'Profile' %}: {{ acc.get_type_profile_display }}</p>  
57 - <p>{% trans 'Email' %}: {{ acc.email }}</p>  
58 - <p>{% trans 'Contact' %}: {{ acc.phone }}</p>  
59 - <div align="right">  
60 - <a href="{% url 'users:update' acc.username %}" class="btn btn-raised btn-success">{% trans 'Edit' %}</a>  
61 - <a href="javascript:void(0)" class="btn btn-default btn-raised btn-lg" data-toggle="modal" data-target="#DeleteModal{{ forloop.counter }}">{% trans 'Delete' %}</a>  
62 - </div>  
63 - </div>  
64 -  
65 -  
66 - <!-- Modal -->  
67 - <div class="modal fade" id="DeleteModal{{ forloop.counter }}" tabindex="-1" role="dialog" aria-labelledby="DeleteModalLabel">  
68 - <div class="modal-dialog" role="document">  
69 - <div class="modal-content">  
70 - <div class="modal-header">  
71 - <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>  
72 - <h4 class="modal-title" id="DeleteModalLabel">{% trans 'Confirm delete' %}</h4>  
73 - </div>  
74 - <div class="modal-body">  
75 - {% trans 'Are you sure you want to delete the user' %} <b>{{acc.name}}</b>?  
76 - </div>  
77 - <div class="modal-footer">  
78 - <a href="#" class="btn btn-raised btn-default" data-dismiss="modal">{% trans 'Cancel' %}</a>  
79 - <a href="{% url 'users:delete' acc.username %}" class="btn btn-raised btn-success" style="margin-top: 0">{% trans 'Delete' %}</a>  
80 - </div>  
81 - </div>  
82 - </div>  
83 - </div>  
84 - </div>  
85 - </div>  
86 - {% endfor %}  
87 - {% pagination request paginator page_obj %}  
88 - {% else %}  
89 - <div class="row">  
90 - <div class="col-md-12 col-sm-12 col-xs-12">  
91 - <p>{% trans 'No users found' %}</p>  
92 - </div>  
93 - </div>  
94 - {% endif %}  
95 -{% endblock %}  
users/templates/users/list.html 0 → 100644
@@ -0,0 +1,67 @@ @@ -0,0 +1,67 @@
  1 +{% extends 'base.html' %}
  2 +
  3 +{% load i18n django_bootstrap_breadcrumbs permission_tags static %}
  4 +
  5 +{% block breadcrumbs %}
  6 + {{ block.super }}
  7 + {% breadcrumb 'Manage Users' 'users:manage' %}
  8 +{% endblock %}
  9 +
  10 +{% block menu %}
  11 +{% endblock %}
  12 +
  13 +{% block content %}
  14 + {% if messages %}
  15 + {% for message in messages %}
  16 + <div class="alert alert-{{ message.tags }} alert-dismissible" role="alert">
  17 + <button type="button" class="close" data-dismiss="alert" aria-label="Close">
  18 + <span aria-hidden="true">&times;</span>
  19 + </button>
  20 + <p>{{ message }}</p>
  21 + </div>
  22 + {% endfor %}
  23 + {% endif %}
  24 + <form action="" method="GET" class="form-horizontal">
  25 + <div class="form-group">
  26 + <div class="col-md-11 col-sm-11 col-xs-11">
  27 + <input type="text" class="form-control" name="search" placeholder="{% trans 'Search...' %}" />
  28 + </div>
  29 + <div class="col-md-1 col-sm-1 col-xs-1">
  30 + <button type="submit" class="btn btn-fab btn-fab-mini">
  31 + <i class="material-icons">search</i>
  32 + </button>
  33 + </div>
  34 + </div>
  35 + </form>
  36 +
  37 + {% if users %}
  38 + {% for acc in users %}
  39 + <div class="row-fluid panel panel-default">
  40 + <div class="panel-body">
  41 + <div class="col-md-3">
  42 + <span class="thumbnail">
  43 + <img src="{{ acc.image_url }}" class="img-responsive" />
  44 + </span>
  45 + </div>
  46 + <div class="col-md-6">
  47 + <p><b>{% trans 'Name' %}:</b> {{ acc }}</p>
  48 + <p><b>{% trans 'Email' %}:</b> {{ acc.email }}</p>
  49 + <p><b>{% trans 'Description' %}:</b> {{ acc.description|truncatechars:100|default:_("Not Informed") }}</p>
  50 + </div>
  51 + <div class="col-md-3">
  52 + <div align="right">
  53 + <a href="#" class="btn btn-primary btn-raised btn-sm"><i class="fa fa-edit"></i> {% trans 'Edit' %}</a>
  54 + <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>
  55 + </div>
  56 + </div>
  57 + </div>
  58 + </div>
  59 + {% endfor %}
  60 + {% else %}
  61 + <div class="row">
  62 + <div class="col-md-12 col-sm-12 col-xs-12">
  63 + <p>{% trans 'No users found' %}</p>
  64 + </div>
  65 + </div>
  66 + {% endif %}
  67 +{% endblock %}
@@ -7,6 +7,7 @@ urlpatterns = [ @@ -7,6 +7,7 @@ urlpatterns = [
7 url(r'^login/$', views.login, name='login'), 7 url(r'^login/$', views.login, name='login'),
8 url(r'^logout/$', auth_views.logout, {'next_page': 'users:login'}, name='logout'), 8 url(r'^logout/$', auth_views.logout, {'next_page': 'users:login'}, name='logout'),
9 url(r'^signup/$', views.RegisterUser.as_view(), name = 'signup'), 9 url(r'^signup/$', views.RegisterUser.as_view(), name = 'signup'),
  10 + url(r'^$', views.UsersListView.as_view(), name = 'manage'),
10 url(r'^profile/$', views.Profile.as_view(), name = 'profile'), 11 url(r'^profile/$', views.Profile.as_view(), name = 'profile'),
11 url(r'^edit_profile/$', views.UpdateProfile.as_view(), name = 'edit_profile'), 12 url(r'^edit_profile/$', views.UpdateProfile.as_view(), name = 'edit_profile'),
12 ] 13 ]
users/views.py
@@ -22,29 +22,7 @@ from .serializers import UserSerializer @@ -22,29 +22,7 @@ from .serializers import UserSerializer
22 from rest_framework.permissions import IsAuthenticated, IsAuthenticatedOrReadOnly 22 from rest_framework.permissions import IsAuthenticated, IsAuthenticatedOrReadOnly
23 23
24 # ================ ADMIN ======================= 24 # ================ ADMIN =======================
25 -# class UsersListView(HasRoleMixin, LoginRequiredMixin, generic.ListView):  
26 25
27 -# allowed_roles = ['system_admin']  
28 -# #login_url = reverse_lazy("core:home")  
29 -# redirect_field_name = 'next'  
30 -# template_name = 'list_users.html'  
31 -# context_object_name = 'users'  
32 -# paginate_by = 10  
33 -  
34 -# def get_queryset(self):  
35 -# search = self.request.GET.get('search', None)  
36 -  
37 -# if search is None:  
38 -# users = User.objects.all().order_by('name').exclude( username = self.request.user.username)  
39 -# else:  
40 -# users = User.objects.filter(Q(username = search) | Q(name = search) | Q(name__icontains = search) | Q(username__icontains = search)).exclude( username = self.request.user.username)  
41 -  
42 -# return users  
43 -  
44 -# def get_context_data (self, **kwargs):  
45 -# context = super(UsersListView, self).get_context_data(**kwargs)  
46 -# context['title'] = 'Manage Users'  
47 -# return context  
48 26
49 # class Create(HasRoleMixin, LoginRequiredMixin, generic.edit.CreateView): 27 # class Create(HasRoleMixin, LoginRequiredMixin, generic.edit.CreateView):
50 28
@@ -182,6 +160,27 @@ from rest_framework.permissions import IsAuthenticated, IsAuthenticatedOrReadOnl @@ -182,6 +160,27 @@ from rest_framework.permissions import IsAuthenticated, IsAuthenticatedOrReadOnl
182 160
183 # return context 161 # return context
184 162
  163 +class UsersListView(HasRoleMixin, LoginRequiredMixin, generic.ListView):
  164 + login_url = reverse_lazy("users:login")
  165 + redirect_field_name = 'next'
  166 +
  167 + allowed_roles = ['system_admin']
  168 +
  169 + template_name = 'users/list.html'
  170 + context_object_name = 'users'
  171 + paginate_by = 10
  172 +
  173 + def get_queryset(self):
  174 + users = User.objects.all().order_by('social_name','username').exclude(email = self.request.user.email)
  175 +
  176 + return users
  177 +
  178 + def get_context_data (self, **kwargs):
  179 + context = super(UsersListView, self).get_context_data(**kwargs)
  180 + context['title'] = _('Manage Users')
  181 +
  182 + return context
  183 +
185 class Profile(LoginRequiredMixin, generic.DetailView): 184 class Profile(LoginRequiredMixin, generic.DetailView):
186 login_url = reverse_lazy("users:login") 185 login_url = reverse_lazy("users:login")
187 redirect_field_name = 'next' 186 redirect_field_name = 'next'