Commit e38b1d175399e87d78f6f857f17ab7c109418e44

Authored by filipecmedeiros
2 parents f26def94 376c74dd

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

core/static/css/base/amadeus.css
@@ -276,7 +276,7 @@ a.alert_message:hover{color : grey} @@ -276,7 +276,7 @@ a.alert_message:hover{color : grey}
276 276
277 /*Logo register user*/ 277 /*Logo register user*/
278 #logo{ 278 #logo{
279 - max-width: 30%; 279 + max-width: 40%;
280 margin-top: 1em; 280 margin-top: 1em;
281 margin-bottom: 1em; 281 margin-bottom: 1em;
282 } 282 }
@@ -337,4 +337,11 @@ ul, li { @@ -337,4 +337,11 @@ ul, li {
337 337
338 .icon_edit_remove{ 338 .icon_edit_remove{
339 float: right; 339 float: right;
340 -}  
341 \ No newline at end of file 340 \ No newline at end of file
  341 +}
  342 +
  343 +
  344 +/* core/index.html classes*/
  345 +
  346 +.logo-login{
  347 + margin-top: 15px;
  348 + margin-bottom: 15px;
342 \ No newline at end of file 349 \ No newline at end of file
core/static/css/base/header.css
@@ -41,4 +41,3 @@ @@ -41,4 +41,3 @@
41 font-size: 20px; 41 font-size: 20px;
42 42
43 } 43 }
44 -  
core/templates/create_account.html
@@ -1,180 +0,0 @@ @@ -1,180 +0,0 @@
1 -<!DOCTYPE html>  
2 -{% load static %}  
3 -<!--  
4 -Copyright 2008, 2009 UFPE - Universidade Federal de Pernambuco  
5 -  
6 -Este arquivo é parte do programa Amadeus Sistema de Gestão de Aprendizagem, ou simplesmente Amadeus LMS  
7 -  
8 -O Amadeus LMS é um software livre; você pode redistribui-lo e/ou modifica-lo dentro dos termos da Licença Pública Geral GNU como  
9 -publicada pela Fundação do Software Livre (FSF); na versão 2 da Licença.  
10 -  
11 -Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU para maiores detalhes.  
12 -  
13 -Você deve ter recebido uma cópia da Licença Pública Geral GNU, sob o título "LICENCA.txt", junto com este programa, se não, escreva para a Fundação do Software Livre (FSF) Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  
14 --->  
15 -  
16 -  
17 -  
18 -  
19 -  
20 -  
21 -  
22 -<html>  
23 -<head>  
24 - <!--  
25 -Copyright 2008, 2009 UFPE - Universidade Federal de Pernambuco  
26 -  
27 -Este arquivo é parte do programa Amadeus Sistema de Gestão de Aprendizagem, ou simplesmente Amadeus LMS  
28 -  
29 -O Amadeus LMS é um software livre; você pode redistribui-lo e/ou modifica-lo dentro dos termos da Licença Pública Geral GNU como  
30 -publicada pela Fundação do Software Livre (FSF); na versão 2 da Licença.  
31 -  
32 -Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU para maiores detalhes.  
33 -  
34 -Você deve ter recebido uma cópia da Licença Pública Geral GNU, sob o título "LICENCA.txt", junto com este programa, se não, escreva para a Fundação do Software Livre (FSF) Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  
35 --->  
36 -  
37 -  
38 -  
39 -  
40 - <title>Projeto Amadeus</title>  
41 -  
42 - <meta http-equiv="Cache-Control" content="no-cache, no-store" />  
43 -  
44 - <link href="{% static 'css/css.css' %}" rel="stylesheet" type="text/css" />  
45 - <link href="{% static 'css/amadeus.css' %}" rel="stylesheet" type="text/css" />  
46 - <link href="{% static 'css/content_management.css' %}" rel="stylesheet" type="text/css" />  
47 - <link href="{% static 'css/jqueryui/smoothness/jquery-ui-1.7.1.custom.css' %}" rel="stylesheet" type="text/css" />  
48 -  
49 - <script type='text/javascript' src='dwr/interface/UtilDWR.js'></script>  
50 - <script type='text/javascript' src='dwr/engine.js'></script>  
51 - <script type='text/javascript' src='dwr/util.js'></script>  
52 - <script type="text/javascript" src="{% static 'js/jqueryui/jquery-1.3.2.min.js' %}"></script>  
53 - <script type="text/javascript" src="{% static 'js/jqueryui/jquery-ui-1.7.1.custom.min.js' %}"></script>  
54 - <script type="text/javascript" src="{% static 'js/openid.js' %}"></script>  
55 - <script type="text/javascript" src="{% static 'js/amadeus.js' %}"></script>  
56 -</head>  
57 -<body>  
58 - <div id="pBody" class="pBody">  
59 - <div id="pHeader" class="pHeader">  
60 - <div id="login">  
61 - <dl id="formlogin">  
62 - <form name="logonForm" method="post" action="/amadeuslms/validateLogin.do">  
63 - <dt><input type="text" name="login" maxlength="15" size="15" value="" class="inputlogin"> </dt>  
64 - <dt><input type="password" name="password" maxlength="15" size="15" value="" class="inputlogin">&nbsp;<br /><a href="" name="logonForm" class="button">Entrar</a></dt>  
65 - </form>  
66 -<script type="text/javascript" language="JavaScript">  
67 - <!--  
68 - var focusControl = document.forms["logonForm"].elements["login"];  
69 -  
70 - if (focusControl.type != "hidden" && !focusControl.disabled) {  
71 - focusControl.focus();  
72 - }  
73 - // -->  
74 -</script>  
75 -  
76 - </dl>  
77 - </div>  
78 - </div>  
79 - <!--  
80 -Copyright 2008, 2009 UFPE - Universidade Federal de Pernambuco  
81 -  
82 -Este arquivo é parte do programa Amadeus Sistema de Gestão de Aprendizagem, ou simplesmente Amadeus LMS  
83 -  
84 -O Amadeus LMS é um software livre; você pode redistribui-lo e/ou modifica-lo dentro dos termos da Licença Pública Geral GNU como  
85 -publicada pela Fundação do Software Livre (FSF); na versão 2 da Licença.  
86 -  
87 -Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU para maiores detalhes.  
88 -  
89 -Você deve ter recebido uma cópia da Licença Pública Geral GNU, sob o título "LICENCA.txt", junto com este programa, se não, escreva para a Fundação do Software Livre (FSF) Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  
90 --->  
91 -  
92 -  
93 -  
94 -  
95 -  
96 -  
97 -  
98 -<div id="institutional_menu">  
99 -  
100 - <span><a href="/amadeuslms/fProject.do" target="_blank">O Projeto</a></span>  
101 - <span>&nbsp;|&nbsp;</span>  
102 - <span><a href="/amadeuslms/fCCTE.do" target="_blank">Grupo CCTE</a></span>  
103 -</div>  
104 - <div id="pTitle" class="pTitle">  
105 - <h2>Nova conta</h2>  
106 - </div>  
107 - <div id="pBreadCrumbs" class="pBreadCrumbs">  
108 - <ul id="breadcrumb">  
109 - <li><a href="">Página Inicial</a></li>  
110 - <li>Nova conta</li>  
111 - </ul>  
112 - </div>  
113 - <div id="pLeftMenu" class="pLeftMenu">  
114 - <div id="side_menu_1">  
115 - <ul id="menu_sessoes">  
116 - <li><a href="" class="insert">Lembrar senha</a></li>  
117 - </ul>  
118 - </div>  
119 - </div>  
120 - <div id="pContent" class="pContent">  
121 - <dl class="insert2">  
122 - <form name="formUserRegister" method="post" action="/amadeuslms/insertUser.do">  
123 -  
124 - <dt>Nome completo</dt>  
125 - <dd class="field"><input type="text" name="name" value="" class="formfield" id="realname"></dd>  
126 - <dd class="description">Seu nome completo</dd>  
127 - <dt>E-mail</dt>  
128 - <dd class="field"><input type="text" name="email" value="" class="formfield" id="mail"></dd>  
129 - <dd class="description">Seu endereço de e-mail (exemplo@mail.com)</dd>  
130 - <dt>Login</dt>  
131 - <dd class="field"><input type="text" name="login" maxlength="15" size="15" value="" class="formfield" id="username"></dd>  
132 - <dd class="description">Seu login</dd>  
133 - <dt>Senha</dt>  
134 - <dd class="field"><input type="password" name="password" maxlength="15" size="15" value="" class="formfield" id="password"></dd>  
135 - <dd class="description">Sua senha (mínimo de 4 caracteres)</dd>  
136 - <dt>Confirmação de senha</dt>  
137 - <dd class="field"><input type="password" name="passwordConfirmation" maxlength="15" size="15" value="" class="formfield" id="passwordConfirmation"></dd>  
138 - <dd class="description">Confirme sua senha</dd>  
139 - <dt class="field"><input type="submit" name="insertUser" value="Cadastrar" class="button"></dt>  
140 - <br/><br/><ul id="required"><li>Todos os campos são de preenchimento obrigatório</li></ul>  
141 - </form>  
142 -<script type="text/javascript" language="JavaScript">  
143 - <!--  
144 - var focusControl = document.forms["formUserRegister"].elements["name"];  
145 -  
146 - if (focusControl.type != "hidden" && !focusControl.disabled) {  
147 - focusControl.focus();  
148 - }  
149 - // -->  
150 -</script>  
151 -  
152 - </dl>  
153 - </div>  
154 - <div id="pRightMenu" class="pRightMenu">  
155 -  
156 - </div>  
157 - <!--  
158 -Copyright 2008, 2009 UFPE - Universidade Federal de Pernambuco  
159 -  
160 -Este arquivo é parte do programa Amadeus Sistema de Gestão de Aprendizagem, ou simplesmente Amadeus LMS  
161 -  
162 -O Amadeus LMS é um software livre; você pode redistribui-lo e/ou modifica-lo dentro dos termos da Licença Pública Geral GNU como  
163 -publicada pela Fundação do Software Livre (FSF); na versão 2 da Licença.  
164 -  
165 -Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU para maiores detalhes.  
166 -  
167 -Você deve ter recebido uma cópia da Licença Pública Geral GNU, sob o título "LICENCA.txt", junto com este programa, se não, escreva para a Fundação do Software Livre (FSF) Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  
168 --->  
169 -  
170 -  
171 -  
172 -  
173 -  
174 -<div id="footnote">  
175 - <dl><dd>Copyright Amadeus. Todos os direitos reservados<dd></dl>  
176 -</div>  
177 -  
178 - </div>  
179 -</body>  
180 -</html>  
core/templates/index.html
@@ -10,20 +10,19 @@ @@ -10,20 +10,19 @@
10 {% endblock sidebar %} 10 {% endblock sidebar %}
11 11
12 {% block content %} 12 {% block content %}
13 - <div class="row">  
14 - <div class="col-sm-4 col-sm-offset-4 col-md-4 col-md-offset-4 col-xs-4 col-xs-offset-4 col-lg-4 col-lg-offset-4 col-xl-4 col-xl-offset-4">  
15 - <div class="row">  
16 - <div class="col-sm-8 col-sm-offset-2 col-md-offset-2 col-md-8 col-xs-8 col-xs-offset-2 col-lg-offset-2 col-lg-8 col-xl-offset-2 col-xl-8">  
17 - </br>  
18 - </br>  
19 - <img src="{% static 'img/amadeus.png' %}" class="img-responsive center-block " alt="logo amadeus">  
20 - </br>  
21 - </div> 13 + <div class="row">
  14 + <div class="col-sm-4 col-sm-offset-3 col-md-4 col-md-offset-3
  15 + col-xs-4 col-xs-offset-3 col-lg-4 col-lg-offset-3 col-xl-4 col-xl-offset-3 ">
  16 + <div class="col-sm-8 col-sm-offset-2 col-md-8 col-md-offset-2 col-xs-8 col-xs-offset-2 col-lg-8 col-lg-offset-2 col-xl-8 col-xl-offset-2">
  17 +
  18 + <img src="{% static 'img/amadeus.png' %}" class="img-responsive center-block logo-login " alt="logo amadeus">
  19 +
  20 + </div>
22 </div> 21 </div>
23 </div> 22 </div>
24 23
25 - <div class="row ">  
26 - <div class="col-md-8 col-md-offset-2 col-sm-8 col-sm-offset-2 col-xs-8 col-xs-offset-2 col-lg-8 col-lg-offset-2 col-xl-8 col-xl-offset-2"> 24 + <div class="row">
  25 + <div class="col-md-6 col-sm-6 col-sm-offset-2 col-xs-6 col-xs-offset-2 col-lg-6 col-lg-offset-2 col-xl-6 col-xl-offset-2">
27 {% if messages %} 26 {% if messages %}
28 {% for message in messages %} 27 {% for message in messages %}
29 <div class="alert alert-{{ message.tags }} alert-dismissible" role="alert"> 28 <div class="alert alert-{{ message.tags }} alert-dismissible" role="alert">
@@ -61,21 +60,18 @@ @@ -61,21 +60,18 @@
61 <div class="col-md-10 col-sm-10 col-xs-10 col-lg-10"> 60 <div class="col-md-10 col-sm-10 col-xs-10 col-lg-10">
62 <a href="{% url 'core:password_reset' %}">{% trans "Forgot your password?" %}</a> 61 <a href="{% url 'core:password_reset' %}">{% trans "Forgot your password?" %}</a>
63 </div> 62 </div>
64 - {# </div> #}  
65 - {# <div class="row"> #}  
66 <div class="col-md-6 col-xs-6 col-sm-6 col-lg-6 text-center"> 63 <div class="col-md-6 col-xs-6 col-sm-6 col-lg-6 text-center">
67 <a class="btn btn-flat" href="{% url 'core:guest' %}" formaction="#" style="position: initial;">{% trans 'Guest' %}</a> 64 <a class="btn btn-flat" href="{% url 'core:guest' %}" formaction="#" style="position: initial;">{% trans 'Guest' %}</a>
68 </div> 65 </div>
69 <div class="col-md-6 col-xs-6 col-sm-6 col-lg-6 text-center"> 66 <div class="col-md-6 col-xs-6 col-sm-6 col-lg-6 text-center">
70 <button type="submite" class="btn btn-flat btn-success" form="form-login" style="position: initial;">{% trans 'Login' %}</button> 67 <button type="submite" class="btn btn-flat btn-success" form="form-login" style="position: initial;">{% trans 'Login' %}</button>
71 </div> 68 </div>
72 - {# </div> #}  
73 </div> 69 </div>
74 </div> 70 </div>
75 <a class="btn btn-raised btn-primary btn-block" href="{% url 'core:register' %}">{% trans 'Sign Up' %} </a> 71 <a class="btn btn-raised btn-primary btn-block" href="{% url 'core:register' %}">{% trans 'Sign Up' %} </a>
76 </div> 72 </div>
77 </div> 73 </div>
78 - </div> 74 +
79 {% endblock%} 75 {% endblock%}
80 76
81 77
core/templates/register_user.html
@@ -18,14 +18,16 @@ @@ -18,14 +18,16 @@
18 </div> 18 </div>
19 {% endfor %} 19 {% endfor %}
20 {% endif %} 20 {% endif %}
21 - <div class="row logo-row">  
22 - <div class="col-lg-offset-2 col-lg-9"> 21 + <div class="row">
  22 + <div class="col-lg-offset-2 col-lg-8 col-md-offset-2 col-md-8 col-xs-offset-2 col-xs-8 col-sm-offset-2 col-sm-8">
  23 + <div class="col-lg-8 col-md-8 col-xs-8 col-sm-8">
23 <img src="{% static 'img/amadeus.png' %}" class="img-responsive center-block " alt="logo amadeus" id="logo"> 24 <img src="{% static 'img/amadeus.png' %}" class="img-responsive center-block " alt="logo amadeus" id="logo">
  25 + </div>
24 </div> 26 </div>
25 </div> 27 </div>
26 28
27 <div class="row"> 29 <div class="row">
28 - <div class=""> 30 + <div class="col-lg-8 col-lg-offset-1 col-md-8 col-md-offset-1 col-sm-8 col-sm-offset-1 col-xs-8 col-xs-offset-1">
29 <div class="card"> 31 <div class="card">
30 <div class="card-content"> 32 <div class="card-content">
31 <div class="card-body"> 33 <div class="card-body">
courses/urls.py
@@ -8,6 +8,7 @@ urlpatterns = [ @@ -8,6 +8,7 @@ urlpatterns = [
8 url(r'^edit/(?P<slug>[\w_-]+)/$', views.UpdateCourseView.as_view(), name='update'), 8 url(r'^edit/(?P<slug>[\w_-]+)/$', views.UpdateCourseView.as_view(), name='update'),
9 url(r'^(?P<slug>[\w_-]+)/$', views.CourseView.as_view(), name='view'), 9 url(r'^(?P<slug>[\w_-]+)/$', views.CourseView.as_view(), name='view'),
10 url(r'^delete/(?P<slug>[\w_-]+)/$', views.DeleteCourseView.as_view(), name='delete'), 10 url(r'^delete/(?P<slug>[\w_-]+)/$', views.DeleteCourseView.as_view(), name='delete'),
  11 + url(r'^subscribe/(?P<slug>[\w_-]+)/$', views.subscribe_course, name='subscribe'),
11 url(r'^category/(?P<slug>[\w_-]+)/$', views.FilteredView.as_view(), name='filter'), 12 url(r'^category/(?P<slug>[\w_-]+)/$', views.FilteredView.as_view(), name='filter'),
12 url(r'^categories/view/$', views.IndexCatView.as_view(), name='manage_cat'), 13 url(r'^categories/view/$', views.IndexCatView.as_view(), name='manage_cat'),
13 url(r'^categories/create/$', views.CreateCatView.as_view(), name="create_cat"), 14 url(r'^categories/create/$', views.CreateCatView.as_view(), name="create_cat"),
@@ -18,6 +19,7 @@ urlpatterns = [ @@ -18,6 +19,7 @@ urlpatterns = [
18 url(r'^subjects/create/(?P<slug>[\w_-]+)/$', views.CreateSubjectView.as_view(), name='create_subject'), 19 url(r'^subjects/create/(?P<slug>[\w_-]+)/$', views.CreateSubjectView.as_view(), name='create_subject'),
19 url(r'^subjects/update/(?P<slug>[\w_-]+)/$', views.UpdateSubjectView.as_view(), name='update_subject'), 20 url(r'^subjects/update/(?P<slug>[\w_-]+)/$', views.UpdateSubjectView.as_view(), name='update_subject'),
20 url(r'^subjects/delete/(?P<slug>[\w_-]+)/$', views.DeleteSubjectView.as_view(), name='delete_subject'), 21 url(r'^subjects/delete/(?P<slug>[\w_-]+)/$', views.DeleteSubjectView.as_view(), name='delete_subject'),
  22 + url(r'^subjects/subscribe/(?P<slug>[\w_-]+)/$', views.subscribe_subject, name='subscribe_subject'),
21 url(r'^topics/create/(?P<slug>[\w_-]+)/$', views.CreateTopicView.as_view(), name='create_topic'), 23 url(r'^topics/create/(?P<slug>[\w_-]+)/$', views.CreateTopicView.as_view(), name='create_topic'),
22 url(r'^topics/update/(?P<slug>[\w_-]+)/$', views.UpdateTopicView.as_view(), name='update_topic'), 24 url(r'^topics/update/(?P<slug>[\w_-]+)/$', views.UpdateTopicView.as_view(), name='update_topic'),
23 url(r'^topics/createlink/$', linkviews.CreateLink.as_view(),name = 'create_link'), 25 url(r'^topics/createlink/$', linkviews.CreateLink.as_view(),name = 'create_link'),
@@ -31,7 +33,4 @@ urlpatterns = [ @@ -31,7 +33,4 @@ urlpatterns = [
31 url(r'^files/', include('files.urls', namespace = 'file')), 33 url(r'^files/', include('files.urls', namespace = 'file')),
32 url(r'^upload-material/$', views.UploadMaterialView.as_view(), name='upload_material'), 34 url(r'^upload-material/$', views.UploadMaterialView.as_view(), name='upload_material'),
33 url(r'^links/',include('links.urls',namespace = 'links')), 35 url(r'^links/',include('links.urls',namespace = 'links')),
34 -  
35 -  
36 -  
37 -] 36 +]
38 \ No newline at end of file 37 \ No newline at end of file
courses/views.py
@@ -10,7 +10,7 @@ from django.utils.translation import ugettext_lazy as _ @@ -10,7 +10,7 @@ from django.utils.translation import ugettext_lazy as _
10 from rolepermissions.verifications import has_role 10 from rolepermissions.verifications import has_role
11 from django.db.models import Q 11 from django.db.models import Q
12 from rolepermissions.verifications import has_object_permission 12 from rolepermissions.verifications import has_object_permission
13 -from django.http import HttpResponseRedirect 13 +from django.http import HttpResponseRedirect, JsonResponse
14 14
15 from .forms import CourseForm, UpdateCourseForm, CategoryCourseForm, SubjectForm,TopicForm,ActivityForm 15 from .forms import CourseForm, UpdateCourseForm, CategoryCourseForm, SubjectForm,TopicForm,ActivityForm
16 from .models import Course, Subject, CourseCategory,Topic, SubjectCategory,Activity, CategorySubject 16 from .models import Course, Subject, CourseCategory,Topic, SubjectCategory,Activity, CategorySubject
@@ -227,6 +227,15 @@ class DeleteView(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.De @@ -227,6 +227,15 @@ class DeleteView(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.De
227 227
228 return self.response_class(request=self.request, template=self.get_template_names(), context=context, using=self.template_engine) 228 return self.response_class(request=self.request, template=self.get_template_names(), context=context, using=self.template_engine)
229 229
  230 +@login_required
  231 +def subscribe_course(request, slug):
  232 + course = get_object_or_404(Course, slug = slug)
  233 +
  234 + if course.students.add(request.user):
  235 + return JsonResponse({"status": "ok", "message": _("Successfully subscribed to the course!")})
  236 + else:
  237 + return JsonResponse({"status": "erro", "message": _("An error has occured. Could not subscribe to this course, try again later")})
  238 +
230 class FilteredView(LoginRequiredMixin, generic.ListView): 239 class FilteredView(LoginRequiredMixin, generic.ListView):
231 240
232 login_url = reverse_lazy("core:home") 241 login_url = reverse_lazy("core:home")
@@ -526,6 +535,17 @@ class DeleteSubjectView(LoginRequiredMixin, HasRoleMixin, generic.DeleteView): @@ -526,6 +535,17 @@ class DeleteSubjectView(LoginRequiredMixin, HasRoleMixin, generic.DeleteView):
526 def get_success_url(self): 535 def get_success_url(self):
527 return reverse_lazy('course:view', kwargs={'slug' : self.object.course.slug}) 536 return reverse_lazy('course:view', kwargs={'slug' : self.object.course.slug})
528 537
  538 +@login_required
  539 +def subscribe_course(request, slug):
  540 + subject = get_object_or_404(Subject, slug = slug)
  541 +
  542 + if request.user.courses_student.filter(slug = slug).exists():
  543 + if subject.students.add(request.user):
  544 + return JsonResponse({"status": "ok", "message": _("Successfully subscribed to the subject!")})
  545 + else:
  546 + return JsonResponse({"status": "erro", "message": _("An error has occured. Could not subscribe to this subject, try again later")})
  547 + else:
  548 + return JsonResponse({"status": "erro", "message": _("You're not subscribed in the course yet.")})
529 549
530 class IndexSubjectCategoryView(LoginRequiredMixin, generic.ListView): 550 class IndexSubjectCategoryView(LoginRequiredMixin, generic.ListView):
531 allowed_roles = ['professor', 'system_admin'] 551 allowed_roles = ['professor', 'system_admin']
exam/models.py
@@ -31,9 +31,9 @@ class Answer(models.Model): @@ -31,9 +31,9 @@ class Answer(models.Model):
31 31
32 class AnswersStudent(models.Model): 32 class AnswersStudent(models.Model):
33 status = models.BooleanField(_("Answered"), default=False) 33 status = models.BooleanField(_("Answered"), default=False)
34 - exam = models.ForeignKey(Exam, verbose_name = _('Exam'), related_name='answers_stundet')  
35 - answer = models.ManyToManyField(Answer,verbose_name = _('Answers Students'), related_name='answers_stundet')  
36 - student = models.ForeignKey(User, verbose_name = _('Student'), related_name='answers_stundent') 34 + exam = models.ForeignKey(Exam, verbose_name = _('Exam'), related_name='student_exam')
  35 + answer = models.ManyToManyField(Answer,verbose_name = _('Answers Students'), related_name='student_answer')
  36 + student = models.ForeignKey(User, verbose_name = _('Student'), related_name='student')
37 answered_in = models.DateTimeField(_("Answered Date"),auto_now=True) 37 answered_in = models.DateTimeField(_("Answered Date"),auto_now=True)
38 38
39 class Meta: 39 class Meta: