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 276  
277 277 /*Logo register user*/
278 278 #logo{
279   - max-width: 30%;
  279 + max-width: 40%;
280 280 margin-top: 1em;
281 281 margin-bottom: 1em;
282 282 }
... ... @@ -337,4 +337,11 @@ ul, li {
337 337  
338 338 .icon_edit_remove{
339 339 float: right;
340   -}
341 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 349 \ No newline at end of file
... ...
core/static/css/base/header.css
... ... @@ -41,4 +41,3 @@
41 41 font-size: 20px;
42 42  
43 43 }
44   -
... ...
core/templates/create_account.html
... ... @@ -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 10 {% endblock sidebar %}
11 11  
12 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 21 </div>
23 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 26 {% if messages %}
28 27 {% for message in messages %}
29 28 <div class="alert alert-{{ message.tags }} alert-dismissible" role="alert">
... ... @@ -61,21 +60,18 @@
61 60 <div class="col-md-10 col-sm-10 col-xs-10 col-lg-10">
62 61 <a href="{% url 'core:password_reset' %}">{% trans "Forgot your password?" %}</a>
63 62 </div>
64   - {# </div> #}
65   - {# <div class="row"> #}
66 63 <div class="col-md-6 col-xs-6 col-sm-6 col-lg-6 text-center">
67 64 <a class="btn btn-flat" href="{% url 'core:guest' %}" formaction="#" style="position: initial;">{% trans 'Guest' %}</a>
68 65 </div>
69 66 <div class="col-md-6 col-xs-6 col-sm-6 col-lg-6 text-center">
70 67 <button type="submite" class="btn btn-flat btn-success" form="form-login" style="position: initial;">{% trans 'Login' %}</button>
71 68 </div>
72   - {# </div> #}
73 69 </div>
74 70 </div>
75 71 <a class="btn btn-raised btn-primary btn-block" href="{% url 'core:register' %}">{% trans 'Sign Up' %} </a>
76 72 </div>
77 73 </div>
78   - </div>
  74 +
79 75 {% endblock%}
80 76  
81 77  
... ...
core/templates/register_user.html
... ... @@ -18,14 +18,16 @@
18 18 </div>
19 19 {% endfor %}
20 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 24 <img src="{% static 'img/amadeus.png' %}" class="img-responsive center-block " alt="logo amadeus" id="logo">
  25 + </div>
24 26 </div>
25 27 </div>
26 28  
27 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 31 <div class="card">
30 32 <div class="card-content">
31 33 <div class="card-body">
... ...
courses/urls.py
... ... @@ -8,6 +8,7 @@ urlpatterns = [
8 8 url(r'^edit/(?P<slug>[\w_-]+)/$', views.UpdateCourseView.as_view(), name='update'),
9 9 url(r'^(?P<slug>[\w_-]+)/$', views.CourseView.as_view(), name='view'),
10 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 12 url(r'^category/(?P<slug>[\w_-]+)/$', views.FilteredView.as_view(), name='filter'),
12 13 url(r'^categories/view/$', views.IndexCatView.as_view(), name='manage_cat'),
13 14 url(r'^categories/create/$', views.CreateCatView.as_view(), name="create_cat"),
... ... @@ -18,6 +19,7 @@ urlpatterns = [
18 19 url(r'^subjects/create/(?P<slug>[\w_-]+)/$', views.CreateSubjectView.as_view(), name='create_subject'),
19 20 url(r'^subjects/update/(?P<slug>[\w_-]+)/$', views.UpdateSubjectView.as_view(), name='update_subject'),
20 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 23 url(r'^topics/create/(?P<slug>[\w_-]+)/$', views.CreateTopicView.as_view(), name='create_topic'),
22 24 url(r'^topics/update/(?P<slug>[\w_-]+)/$', views.UpdateTopicView.as_view(), name='update_topic'),
23 25 url(r'^topics/createlink/$', linkviews.CreateLink.as_view(),name = 'create_link'),
... ... @@ -31,7 +33,4 @@ urlpatterns = [
31 33 url(r'^files/', include('files.urls', namespace = 'file')),
32 34 url(r'^upload-material/$', views.UploadMaterialView.as_view(), name='upload_material'),
33 35 url(r'^links/',include('links.urls',namespace = 'links')),
34   -
35   -
36   -
37   -]
  36 +]
38 37 \ No newline at end of file
... ...
courses/views.py
... ... @@ -10,7 +10,7 @@ from django.utils.translation import ugettext_lazy as _
10 10 from rolepermissions.verifications import has_role
11 11 from django.db.models import Q
12 12 from rolepermissions.verifications import has_object_permission
13   -from django.http import HttpResponseRedirect
  13 +from django.http import HttpResponseRedirect, JsonResponse
14 14  
15 15 from .forms import CourseForm, UpdateCourseForm, CategoryCourseForm, SubjectForm,TopicForm,ActivityForm
16 16 from .models import Course, Subject, CourseCategory,Topic, SubjectCategory,Activity, CategorySubject
... ... @@ -227,6 +227,15 @@ class DeleteView(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.De
227 227  
228 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 239 class FilteredView(LoginRequiredMixin, generic.ListView):
231 240  
232 241 login_url = reverse_lazy("core:home")
... ... @@ -526,6 +535,17 @@ class DeleteSubjectView(LoginRequiredMixin, HasRoleMixin, generic.DeleteView):
526 535 def get_success_url(self):
527 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 550 class IndexSubjectCategoryView(LoginRequiredMixin, generic.ListView):
531 551 allowed_roles = ['professor', 'system_admin']
... ...
exam/models.py
... ... @@ -31,9 +31,9 @@ class Answer(models.Model):
31 31  
32 32 class AnswersStudent(models.Model):
33 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 37 answered_in = models.DateTimeField(_("Answered Date"),auto_now=True)
38 38  
39 39 class Meta:
... ...