Commit cf0c45e2dd08e5428877c85b726d9039d7d7c624

Authored by fbormann
2 parents 42790782 45aff55e

Merge branch 'refactoring' of https://github.com/amadeusproject/amadeuslms into refactoring

amadeus/static/css/.sass-cache/a7f87b90919294b62ab4f8079e31dcda8f485534/green.sassc
No preview for this file type
amadeus/static/css/base/amadeus.css
  1 +body {
  2 + overflow-x: hidden;
  3 +}
  4 +
1 ul, li { 5 ul, li {
2 list-style-type: none; 6 list-style-type: none;
3 text-decoration: none; 7 text-decoration: none;
@@ -1549,26 +1553,35 @@ div.dataTables_wrapper div.dataTables_paginate { @@ -1549,26 +1553,35 @@ div.dataTables_wrapper div.dataTables_paginate {
1549 padding: 15px 0px; 1553 padding: 15px 0px;
1550 } 1554 }
1551 1555
1552 -.subject-participants-label {  
1553 - padding-bottom: 5px;  
1554 - border-bottom-style: solid;  
1555 - border-bottom-width: 1px; 1556 +.participants-list {
  1557 + height: 200px;
  1558 + max-height: 200px;
  1559 + width: 315px;
  1560 + float: right;
  1561 + position: absolute;
  1562 + top: 5px;
  1563 + right: -315px;
  1564 + overflow-y: auto;
  1565 + opacity: 0;
  1566 + visibility: hidden;
1556 } 1567 }
1557 1568
1558 -.subject-participants .sub-user { 1569 +#participants {
  1570 + position: absolute;
  1571 + top: 5px;
  1572 + right: 0px;
1559 cursor: pointer; 1573 cursor: pointer;
  1574 + padding: 8px;
  1575 + border-top-left-radius: 20px;
  1576 + border-bottom-left-radius: 20px;
1560 } 1577 }
1561 1578
1562 -.participants-container .popover {  
1563 - max-width: 330px;  
1564 -}  
1565 -  
1566 -.participants-container .popover-content {  
1567 - padding: 9px 5px; 1579 +.participants-list .subject-participants {
  1580 + width: 300px;
1568 } 1581 }
1569 1582
1570 -.participants-container .popover-content h4 {  
1571 - font-size: 16px; 1583 +.participants-container {
  1584 + cursor: pointer;
1572 } 1585 }
1573 1586
1574 @-moz-document url-prefix() { 1587 @-moz-document url-prefix() {
amadeus/static/css/themes/green.css
@@ -517,11 +517,20 @@ a.add-row { @@ -517,11 +517,20 @@ a.add-row {
517 .chat-panel .chat-collapse { 517 .chat-panel .chat-collapse {
518 background: #EEE; } 518 background: #EEE; }
519 519
520 -.subject-participants-label {  
521 - border-bottom-color: #DDD; } 520 +#participants, .participants-list {
  521 + background-color: #FFFFFF; }
  522 +
  523 +#participants {
  524 + box-shadow: -1px 1px 8px #0277BD; }
  525 +
  526 +#participants i {
  527 + color: #0277BD; }
  528 +
  529 +.participants-list {
  530 + box-shadow: -1px 2px 1px #0277BD; }
522 531
523 .subject-participants .sub-user:hover { 532 .subject-participants .sub-user:hover {
524 - background-color: #CCCCCC; } 533 + background-color: #F3F3F3; }
525 534
526 #analytics-panel { 535 #analytics-panel {
527 background-color: #0277BD !important; } 536 background-color: #0277BD !important; }
amadeus/static/css/themes/green.css.map
1 { 1 {
2 "version": 3, 2 "version": 3,
3 -"mappings": "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", 3 +"mappings": "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",
4 "sources": ["green.sass"], 4 "sources": ["green.sass"],
5 "names": [], 5 "names": [],
6 "file": "green.css" 6 "file": "green.css"
amadeus/static/css/themes/green.sass
@@ -689,11 +689,20 @@ a.add-row @@ -689,11 +689,20 @@ a.add-row
689 .chat-panel .chat-collapse 689 .chat-panel .chat-collapse
690 background: #EEE 690 background: #EEE
691 691
692 -.subject-participants-label  
693 - border-bottom-color: #DDD 692 +#participants, .participants-list
  693 + background-color: $white
  694 +
  695 +#participants
  696 + box-shadow: -1px 1px 8px #0277BD
  697 +
  698 +#participants i
  699 + color: #0277BD
  700 +
  701 +.participants-list
  702 + box-shadow: -1px 2px 1px #0277BD
694 703
695 .subject-participants .sub-user:hover 704 .subject-participants .sub-user:hover
696 - background-color: #CCCCCC 705 + background-color: #F3F3F3
697 706
698 #analytics-panel 707 #analytics-panel
699 background-color: #0277BD !important 708 background-color: #0277BD !important
subjects/templates/subjects/view.html
@@ -73,54 +73,53 @@ @@ -73,54 +73,53 @@
73 </div> 73 </div>
74 </div> 74 </div>
75 </div> 75 </div>
76 - <div id="{{subject.slug}}" class="panel-collapse in collapse category-panel-content">  
77 - <div class="row">  
78 - <div class="col-md-9">  
79 - <p>{{subject.description|safe}}</p> 76 + <div id="{{subject.slug}}" class="panel-collapse in collapse category-panel-content" style="position: relative">
  77 + <p>{{subject.description|safe}}</p>
80 78
81 - {% if has_subject_permissions %}  
82 - <a href="{% url 'topics:create' subject.slug %}" class="btn btn-sm btn-success btn-raised btn-block">{% trans "Create new topic" %}</a>  
83 - {% endif %} 79 + {% if has_subject_permissions %}
  80 + <a href="{% url 'topics:create' subject.slug %}" class="btn btn-sm btn-success btn-raised btn-block">{% trans "Create new topic" %}</a>
  81 + {% endif %}
84 82
85 - {% include 'topics/list.html' with subject=subject %}  
86 - </div>  
87 - <div class="col-md-3 participants-list">  
88 - <h2 class="my-subjects-title subject-participants-label"><b>{% trans 'Participants' %}</b></h2>  
89 -  
90 - <div class="subject-participants">  
91 - {% for participant in participants %}  
92 - {% is_online participant as status %}  
93 -  
94 - <div class="participants-container">  
95 - <div class="col-md-12 sub-user" data-toggle="popover" data-placement="left">  
96 - <h4><a class="status {{ status }}" data-placement="right" data-toggle="tooltip" title="{{ status|status_text }}"></a> {{ participant }}</h4>  
97 - </div> 83 + {% include 'topics/list.html' with subject=subject %}
  84 +
  85 + <div id="participants" data-toggle="tooltip" data-title="{% trans 'Participants' %}">
  86 + <i class="fa fa-group"></i>
  87 + </div>
98 88
99 - <div class="popover">  
100 - <div class="popover-content participant">  
101 - <button type="button" class="close" aria-label="{% trans 'Close' %}"><span aria-hidden="true">&times;</span></button> 89 + <div class="participants-list">
  90 + <div class="subject-participants">
  91 + {% for participant in participants %}
  92 + {% is_online participant as status %}
102 93
103 - <br clear="all" /> 94 + <div class="participants-container">
  95 + <div class="col-md-12 sub-user" data-toggle="popover" data-container="body" data-placement="left">
  96 + <h4><a class="status {{ status }}" data-placement="right" data-toggle="tooltip" title="{{ status|status_text }}"></a> {{ participant }}</h4>
  97 + </div>
  98 +
  99 + <div class="popover">
  100 + <div class="popover-content participant">
  101 + <button type="button" class="close" aria-label="{% trans 'Close' %}"><span aria-hidden="true">&times;</span></button>
104 102
105 - <div class="col-md-3 user-img">  
106 - <img src="{{ participant.image_url }}" class="img-responsive" />  
107 - </div>  
108 - <div class="col-md-9 user-info">  
109 - <h4><a class="status {{ status }}" data-toggle="tooltip" title="{{ status|status_text }}"></a> {{ participant }}</h4>  
110 - </div> 103 + <br clear="all" />
  104 +
  105 + <div class="col-md-3 user-img">
  106 + <img src="{{ participant.image_url }}" class="img-responsive" />
111 </div> 107 </div>
112 - <div class="popover-footer">  
113 - <a href="#" onclick="getModalInfo($(this), '{{ subject.id }}', 'subject'); return false;" data-url='{% url "chat:profile" participant.email %}' class="btn btn-default btn-sm btn-raised pull-left">  
114 - {% trans 'See Profile' %}  
115 - </a>  
116 - <a href="#" onclick="getModalInfo($(this), '{{ subject.id }}', 'subject'); return false;" data-url='{% url "chat:talk" participant.email %}' class="btn btn-success btn-sm btn-raised pull-right">  
117 - {% trans 'Send Message' %}  
118 - </a> 108 + <div class="col-md-9 user-info">
  109 + <h4><a class="status {{ status }}" data-toggle="tooltip" title="{{ status|status_text }}"></a> {{ participant }}</h4>
119 </div> 110 </div>
120 </div> 111 </div>
  112 + <div class="popover-footer">
  113 + <a href="#" onclick="getModalInfo($(this), '{{ subject.id }}', 'subject'); return false;" data-url='{% url "chat:profile" participant.email %}' class="btn btn-default btn-sm btn-raised pull-left">
  114 + {% trans 'See Profile' %}
  115 + </a>
  116 + <a href="#" onclick="getModalInfo($(this), '{{ subject.id }}', 'subject'); return false;" data-url='{% url "chat:talk" participant.email %}' class="btn btn-success btn-sm btn-raised pull-right">
  117 + {% trans 'Send Message' %}
  118 + </a>
  119 + </div>
121 </div> 120 </div>
122 - {% endfor %}  
123 - </div> 121 + </div>
  122 + {% endfor %}
124 </div> 123 </div>
125 </div> 124 </div>
126 </div> 125 </div>
@@ -159,10 +158,22 @@ @@ -159,10 +158,22 @@
159 $('[data-toggle="popover"]').not(e.target).popover('hide'); 158 $('[data-toggle="popover"]').not(e.target).popover('hide');
160 }).on('shown.bs.popover', function (e) { 159 }).on('shown.bs.popover', function (e) {
161 if($(this).is(e.target)){ 160 if($(this).is(e.target)){
162 - var popover = $(this), 161 + var popover = $(".popover.fade.in"),
163 buttons = popover.parent().find('a'), 162 buttons = popover.parent().find('a'),
164 close = popover.parent().find('.close:visible'); 163 close = popover.parent().find('.close:visible');
165 - 164 +
  165 + popover.animate({
  166 + 'max-width': '330px',
  167 + }, 0);
  168 +
  169 + popover.find('.popover-content').animate({
  170 + padding: '9px 5px',
  171 + }, 0);
  172 +
  173 + popover.find('h4').animate({
  174 + 'font-size': '16px',
  175 + }, 0);
  176 +
166 close.on("click", function () { 177 close.on("click", function () {
167 popover.popover('hide'); 178 popover.popover('hide');
168 }); 179 });
@@ -172,6 +183,33 @@ @@ -172,6 +183,33 @@
172 }) 183 })
173 } 184 }
174 }); 185 });
  186 +
  187 + $('#participants').on('click', function(){
  188 + var $this = $(this),
  189 + list = $this.parent().find(".participants-list");
  190 +
  191 + if ($this.hasClass('open')) {
  192 + $this.animate({
  193 + right : '0px'
  194 + }, 500);
  195 +
  196 + list.animate({
  197 + right : '-315px',
  198 + opacity: 0
  199 + }, 500).css({visibility: 'hidden'});
  200 +
  201 + $this.removeClass('open');
  202 + } else {
  203 + $this.animate({
  204 + right : "317"
  205 + }, 500).addClass('open');
  206 +
  207 + list.animate({
  208 + right : 0,
  209 + opacity: 1
  210 + }, 500).css({visibility: 'visible'});
  211 + }
  212 + });
175 }); 213 });
176 </script> 214 </script>
177 {% endblock content %} 215 {% endblock content %}
subjects/views.py
@@ -5,6 +5,7 @@ from categories.models import Category @@ -5,6 +5,7 @@ from categories.models import Category
5 from django.core.urlresolvers import reverse_lazy 5 from django.core.urlresolvers import reverse_lazy
6 from rolepermissions.verifications import has_role 6 from rolepermissions.verifications import has_role
7 from django.db.models import Q 7 from django.db.models import Q
  8 +from django.conf import settings
8 from django.contrib import messages 9 from django.contrib import messages
9 from django.http import HttpResponse, JsonResponse, HttpResponseRedirect 10 from django.http import HttpResponse, JsonResponse, HttpResponseRedirect
10 from django.utils.translation import ugettext_lazy as _ 11 from django.utils.translation import ugettext_lazy as _
@@ -515,7 +516,15 @@ class SubjectDetailView(LoginRequiredMixin, LogMixin, DetailView): @@ -515,7 +516,15 @@ class SubjectDetailView(LoginRequiredMixin, LogMixin, DetailView):
515 516
516 sub = self.kwargs.get('slug', '') 517 sub = self.kwargs.get('slug', '')
517 518
518 - context['participants'] = User.objects.filter(Q(is_staff = True) | Q(subject_student__slug = sub) | Q(professors__slug = sub) | Q(coordinators__subject_category__slug = sub)).distinct().order_by('social_name','username').exclude(email = self.request.user.email) 519 + status_query = "SELECT CASE WHEN action = 'logout' AND EXTRACT(EPOCH FROM(NOW() - datetime::timestamp)) < 1200 THEN 2 WHEN action = 'logout' AND EXTRACT(EPOCH FROM(NOW() - datetime::timestamp)) >= 1200 THEN 1 ELSE 0 END FROM log_log WHERE log_log.user_id = users_user.id ORDER BY datetime DESC LIMIT 1"
  520 +
  521 + expire_time = settings.SESSION_SECURITY_EXPIRE_AFTER
  522 +
  523 + context['participants'] = User.objects.filter(
  524 + Q(is_staff = True) | Q(subject_student__slug = sub) |
  525 + Q(professors__slug = sub) |
  526 + Q(coordinators__subject_category__slug = sub)
  527 + ).extra(select = {'status': status_query}, select_params=(expire_time, expire_time,),).distinct().order_by('status', 'social_name','username').exclude(email = self.request.user.email)
519 528
520 resources = self.request.session.get('resources', None) 529 resources = self.request.session.get('resources', None)
521 530
users/forms.py
@@ -6,10 +6,11 @@ from rolepermissions.shortcuts import assign_role @@ -6,10 +6,11 @@ from rolepermissions.shortcuts import assign_role
6 from django.contrib.auth import update_session_auth_hash 6 from django.contrib.auth import update_session_auth_hash
7 from django.core.validators import validate_email 7 from django.core.validators import validate_email
8 from django.core.exceptions import ValidationError 8 from django.core.exceptions import ValidationError
9 - 9 +from os.path import join
10 from resubmit.widgets import ResubmitFileWidget 10 from resubmit.widgets import ResubmitFileWidget
11 from PIL import Image 11 from PIL import Image
12 - 12 +import os
  13 +from amadeus import settings
13 14
14 from .models import User 15 from .models import User
15 16
@@ -71,6 +72,7 @@ class RegisterUserForm(Validation): @@ -71,6 +72,7 @@ class RegisterUserForm(Validation):
71 72
72 def save(self, commit=True): 73 def save(self, commit=True):
73 super(RegisterUserForm, self).save(commit=False) 74 super(RegisterUserForm, self).save(commit=False)
  75 + self.deletepath = ""
74 76
75 x = self.cleaned_data.get('x') 77 x = self.cleaned_data.get('x')
76 y = self.cleaned_data.get('y') 78 y = self.cleaned_data.get('y')
@@ -81,12 +83,22 @@ class RegisterUserForm(Validation): @@ -81,12 +83,22 @@ class RegisterUserForm(Validation):
81 image = Image.open(self.instance.image) 83 image = Image.open(self.instance.image)
82 cropped_image = image.crop((x, y, w+x, h+y)) 84 cropped_image = image.crop((x, y, w+x, h+y))
83 resized_image = cropped_image.resize((200, 200), Image.ANTIALIAS) 85 resized_image = cropped_image.resize((200, 200), Image.ANTIALIAS)
  86 +
  87 + folder_path = join(settings.MEDIA_ROOT, 'users')
  88 + #check if the folder already exists
  89 + if not os.path.isdir(folder_path):
  90 + os.makedirs(folder_path)
  91 +
  92 + if ("users" not in self.instance.image.path):
  93 + self.deletepath = self.instance.image.path
  94 +
84 resized_image.save(self.instance.image.path) 95 resized_image.save(self.instance.image.path)
85 96
86 self.instance.set_password(self.cleaned_data['new_password']) 97 self.instance.set_password(self.cleaned_data['new_password'])
87 98
88 self.instance.save() 99 self.instance.save()
89 - 100 + if (self.deletepath):
  101 + os.remove(self.deletepath)
90 return self.instance 102 return self.instance
91 103
92 class Meta: 104 class Meta:
@@ -111,6 +123,7 @@ class ProfileForm(Validation): @@ -111,6 +123,7 @@ class ProfileForm(Validation):
111 123
112 def save(self, commit=True): 124 def save(self, commit=True):
113 super(ProfileForm, self).save(commit=False) 125 super(ProfileForm, self).save(commit=False)
  126 + self.deletepath = ""
114 x = self.cleaned_data.get('x') 127 x = self.cleaned_data.get('x')
115 y = self.cleaned_data.get('y') 128 y = self.cleaned_data.get('y')
116 w = self.cleaned_data.get('width') 129 w = self.cleaned_data.get('width')
@@ -120,10 +133,20 @@ class ProfileForm(Validation): @@ -120,10 +133,20 @@ class ProfileForm(Validation):
120 image = Image.open(self.instance.image) 133 image = Image.open(self.instance.image)
121 cropped_image = image.crop((x, y, w+x, h+y)) 134 cropped_image = image.crop((x, y, w+x, h+y))
122 resized_image = cropped_image.resize((200, 200), Image.ANTIALIAS) 135 resized_image = cropped_image.resize((200, 200), Image.ANTIALIAS)
  136 +
  137 + folder_path = join(settings.MEDIA_ROOT, 'users')
  138 + #check if the folder already exists
  139 + if not os.path.isdir(folder_path):
  140 + os.makedirs(folder_path)
  141 +
  142 + if ("users" not in self.instance.image.path):
  143 + self.deletepath = self.instance.image.path
  144 +
123 resized_image.save(self.instance.image.path) 145 resized_image.save(self.instance.image.path)
124 146
125 self.instance.save() 147 self.instance.save()
126 - 148 + if (self.deletepath):
  149 + os.remove(self.deletepath)
127 return self.instance 150 return self.instance
128 151
129 class Meta: 152 class Meta:
@@ -158,6 +181,7 @@ class UserForm(Validation): @@ -158,6 +181,7 @@ class UserForm(Validation):
158 181
159 def save(self, commit=True): 182 def save(self, commit=True):
160 super(UserForm, self).save(commit=False) 183 super(UserForm, self).save(commit=False)
  184 + self.deletepath = ""
161 185
162 x = self.cleaned_data.get('x') 186 x = self.cleaned_data.get('x')
163 y = self.cleaned_data.get('y') 187 y = self.cleaned_data.get('y')
@@ -168,6 +192,15 @@ class UserForm(Validation): @@ -168,6 +192,15 @@ class UserForm(Validation):
168 image = Image.open(self.instance.image) 192 image = Image.open(self.instance.image)
169 cropped_image = image.crop((x, y, w+x, h+y)) 193 cropped_image = image.crop((x, y, w+x, h+y))
170 resized_image = cropped_image.resize((200, 200), Image.ANTIALIAS) 194 resized_image = cropped_image.resize((200, 200), Image.ANTIALIAS)
  195 +
  196 + folder_path = join(settings.MEDIA_ROOT, 'users')
  197 + #check if the folder already exists
  198 + if not os.path.isdir(folder_path):
  199 + os.makedirs(folder_path)
  200 +
  201 + if ("users" not in self.instance.image.path):
  202 + self.deletepath = self.instance.image.path
  203 +
171 resized_image.save(self.instance.image.path) 204 resized_image.save(self.instance.image.path)
172 205
173 206
@@ -175,7 +208,8 @@ class UserForm(Validation): @@ -175,7 +208,8 @@ class UserForm(Validation):
175 self.instance.set_password(self.cleaned_data['new_password']) 208 self.instance.set_password(self.cleaned_data['new_password'])
176 209
177 self.instance.save() 210 self.instance.save()
178 - 211 + if (self.deletepath):
  212 + os.remove(self.deletepath)
179 return self.instance 213 return self.instance
180 214
181 class Meta: 215 class Meta:
users/views.py
@@ -30,7 +30,7 @@ from django.core.mail import EmailMessage @@ -30,7 +30,7 @@ from django.core.mail import EmailMessage
30 from django.core.mail.backends.smtp import EmailBackend 30 from django.core.mail.backends.smtp import EmailBackend
31 31
32 from mailsender.models import MailSender 32 from mailsender.models import MailSender
33 - 33 +import os
34 #API IMPORTS 34 #API IMPORTS
35 from rest_framework import viewsets 35 from rest_framework import viewsets
36 from .serializers import UserSerializer 36 from .serializers import UserSerializer
@@ -209,6 +209,8 @@ class DeleteView(braces_mixins.LoginRequiredMixin, LogMixin, generic.DeleteView) @@ -209,6 +209,8 @@ class DeleteView(braces_mixins.LoginRequiredMixin, LogMixin, generic.DeleteView)
209 email = self.kwargs.get('email', None) 209 email = self.kwargs.get('email', None)
210 user = self.get_object() 210 user = self.get_object()
211 211
  212 +
  213 +
212 if email is None: 214 if email is None:
213 self.log_action = 'remove_account' 215 self.log_action = 'remove_account'
214 216
@@ -233,11 +235,12 @@ class DeleteView(braces_mixins.LoginRequiredMixin, LogMixin, generic.DeleteView) @@ -233,11 +235,12 @@ class DeleteView(braces_mixins.LoginRequiredMixin, LogMixin, generic.DeleteView)
233 redirect_url = redirect(error_url) 235 redirect_url = redirect(error_url)
234 else: 236 else:
235 self.log_context['dependencies'] = False 237 self.log_context['dependencies'] = False
236 - 238 + image_path_to_delete = user.image.path
237 user.delete() 239 user.delete()
238 240
239 messages.success(self.request, success_msg) 241 messages.success(self.request, success_msg)
240 - 242 + #deleting the user image
  243 + os.remove(image_path_to_delete)
241 redirect_url = redirect(success_url) 244 redirect_url = redirect(success_url)
242 245
243 super(DeleteView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) 246 super(DeleteView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context)