Commit 7cafa65153fd41c2cdaa76cd811e3e2ed2da0ea5

Authored by ailsoncgt
2 parents 53520a28 85bd5885

Merge

app/templates/admin_settings.html
@@ -17,32 +17,34 @@ @@ -17,32 +17,34 @@
17 </div> 17 </div>
18 {% endfor %} 18 {% endfor %}
19 <!-- Nav tabs --> 19 <!-- Nav tabs -->
  20 +
20 <ul class="nav nav-tabs md-pills pills-ins" role="tablist"> 21 <ul class="nav nav-tabs md-pills pills-ins" role="tablist">
  22 + {% if form.safe_conection.errors or form.host.errors or form.default_from_email.errors %}
  23 + <li class="nav-item">
  24 + <a class="nav-link {% if page == 'system' %}active{% endif %}" data-toggle="tab" href="#system" role="tab"><i class="fa fa-cog"></i> {% trans "System" %}</a>
  25 + </li>
  26 + <li class="nav-item">
  27 + <a class="nav-link {% if page == 'mail_sender' %}active{% endif %}" data-toggle="tab" href="#mail_sender" role="tab"><i class="fa fa-envelope"></i> {% trans "Mail Sender" %}</a>
  28 + </li>
  29 + {% else %}
  30 + <li class="nav-item">
  31 + <a class="nav-link {% if page == 'system' %}active{% endif %}" data-toggle="tab" href="#system" role="tab"><i class="fa fa-cog"></i> {% trans "System" %}</a>
  32 + <li class="nav-item">
  33 + <a class="nav-link {% if page == 'mail_sender' %}active{% endif %}" data-toggle="tab" href="#mail_sender" role="tab"><i class="fa fa-envelope"></i> {% trans "Mail Sender" %}</a>
  34 + </li>
  35 + {% endif %}
21 <li class="nav-item"> 36 <li class="nav-item">
22 - {% if form.safe_conection.errors or form.host.errors or form.default_from_email.errors %}  
23 - <a class="nav-link" data-toggle="tab" href="#panel1" role="tab"><i class="fa fa-cog"></i> {% trans "System" %}</a>  
24 - </li>  
25 - <li class="nav-item">  
26 - <a class="nav-link active" data-toggle="tab" href="#panel2" role="tab"><i class="fa fa-envelope"></i> {% trans "Mail Sender" %}</a> 37 + <a class="nav-link {% if page == 'security' %}active{% endif %}" data-toggle="tab" href="#security" role="tab"><i class="fa fa-lock"></i> {% trans "Security" %}</a>
27 </li> 38 </li>
28 - {% else %}  
29 - <a class="nav-link active" data-toggle="tab" href="#panel1" role="tab"><i class="fa fa-cog"></i> {% trans "System" %}</a>  
30 -<li class="nav-item">  
31 - <a class="nav-link" data-toggle="tab" href="#panel2" role="tab"><i class="fa fa-envelope"></i> {% trans "Mail Sender" %}</a>  
32 -</li>  
33 -{% endif %}  
34 -<li class="nav-item">  
35 - <a class="nav-link" data-toggle="tab" href="#panel3" role="tab"><i class="fa fa-lock"></i> {% trans "Security" %}</a>  
36 -</li>  
37 </ul> 39 </ul>
38 40
39 <!-- Tab panels --> 41 <!-- Tab panels -->
40 <div class="tab-content"> 42 <div class="tab-content">
41 <!--Panel 1--> 43 <!--Panel 1-->
42 {% if form.errors %} 44 {% if form.errors %}
43 - <div class="tab-pane fade" id="panel1" role="tabpanel"> 45 + <div class="tab-pane fade" id="system" role="tabpanel">
44 {% else %} 46 {% else %}
45 - <div class="tab-pane fade in active" id="panel1" role="tabpanel"> 47 + <div class="tab-pane fade {% if page == 'system' %}in active{% endif %}" id="system" role="tabpanel">
46 {% endif %} 48 {% endif %}
47 <div class="panel panel-default"> 49 <div class="panel panel-default">
48 <div class="panel-body"> 50 <div class="panel-body">
@@ -60,10 +62,10 @@ @@ -60,10 +62,10 @@
60 62
61 <!--Panel 2--> 63 <!--Panel 2-->
62 {% if form.errors %} 64 {% if form.errors %}
63 - <div class="tab-pane fade in active" id="panel2" role="tabpanel"> 65 + <div class="tab-pane fade in active" id="mail_sender" role="tabpanel">
64 {% else %} 66 {% else %}
65 - <div class="tab-pane fade" id="panel2" role="tabpanel">  
66 - {% endif %} 67 + <div class="tab-pane fade {% if page == 'mail_sender' %}in active{% endif %}" id="mail_sender" role="tabpanel">
  68 + {% endif %}
67 <div class="panel panel-default"> 69 <div class="panel panel-default">
68 <form class="form-horizontal" method="post"> 70 <form class="form-horizontal" method="post">
69 {% csrf_token %} 71 {% csrf_token %}
@@ -252,7 +254,7 @@ @@ -252,7 +254,7 @@
252 <!--/.Panel 2--> 254 <!--/.Panel 2-->
253 255
254 <!--Panel 3--> 256 <!--Panel 3-->
255 - <div class="tab-pane fade" id="panel3" role="tabpanel"> 257 + <div class="tab-pane fade {% if page == 'security' %}in active{% endif %}" id="security" role="tabpanel">
256 <div class="panel panel-default"> 258 <div class="panel panel-default">
257 <div class="panel-body"> 259 <div class="panel-body">
258 <div class="togglebutton"> 260 <div class="togglebutton">
app/templates/home.html
@@ -110,9 +110,9 @@ @@ -110,9 +110,9 @@
110 <a href="#menu_settings" class="accordion" data-toggle="collapse">{% trans 'Settings' %}<span class="pull-right glyphicon glyphicon-chevron-down"></span></a> 110 <a href="#menu_settings" class="accordion" data-toggle="collapse">{% trans 'Settings' %}<span class="pull-right glyphicon glyphicon-chevron-down"></span></a>
111 <div id="menu_settings" class="collapse"> 111 <div id="menu_settings" class="collapse">
112 <ul class="nav nav-pill nav-stacked accordion_list"> 112 <ul class="nav nav-pill nav-stacked accordion_list">
113 - <li> <a href="{% url 'app:settings' %}">{% trans "System" %}</a></li>  
114 - <li> <a href="{% url 'app:settings' %}">{% trans "Mail Sender" %}</a></li>  
115 - <li> <a href="{% url 'app:settings' %}">{% trans "Security" %}</a></li> 113 + <li> <a href="{% url 'app:settings' page='system' %}">{% trans "System" %}</a></li>
  114 + <li> <a href="{% url 'app:settings' page='mail_sender' %}">{% trans "Mail Sender" %}</a></li>
  115 + <li> <a href="{% url 'app:settings' page='security' %}">{% trans "Security" %}</a></li>
116 </ul> 116 </ul>
117 </div> 117 </div>
118 </li> 118 </li>
@@ -4,5 +4,5 @@ from . import views @@ -4,5 +4,5 @@ from . import views
4 4
5 urlpatterns = [ 5 urlpatterns = [
6 url(r'^$', views.AppIndex.as_view(), name='index'), 6 url(r'^$', views.AppIndex.as_view(), name='index'),
7 - url(r'^settings/$', views.AmadeusSettings.as_view(), name='settings'), 7 + url(r'^settings/(?P<page>[\w_-]+)/$', views.AmadeusSettings.as_view(), name='settings'),
8 ] 8 ]
@@ -51,7 +51,10 @@ class AmadeusSettings(LoginRequiredMixin, HasRoleMixin, generic.CreateView): @@ -51,7 +51,10 @@ class AmadeusSettings(LoginRequiredMixin, HasRoleMixin, generic.CreateView):
51 model = EmailBackend 51 model = EmailBackend
52 template_name = 'admin_settings.html' 52 template_name = 'admin_settings.html'
53 form_class = EmailBackendForm 53 form_class = EmailBackendForm
54 - success_url = reverse_lazy('app:settings') 54 + #success_url = reverse_lazy('app:settings')
  55 +
  56 + def get_success_url(self):
  57 + return reverse_lazy('app:settings', kwargs = {'page': self.kwargs['page']})
55 58
56 def form_invalid(self, form): 59 def form_invalid(self, form):
57 return self.render_to_response(self.get_context_data(form=form)) 60 return self.render_to_response(self.get_context_data(form=form))
@@ -75,6 +78,7 @@ class AmadeusSettings(LoginRequiredMixin, HasRoleMixin, generic.CreateView): @@ -75,6 +78,7 @@ class AmadeusSettings(LoginRequiredMixin, HasRoleMixin, generic.CreateView):
75 78
76 def get_context_data(self, **kwargs): 79 def get_context_data(self, **kwargs):
77 context = super(AmadeusSettings, self).get_context_data(**kwargs) 80 context = super(AmadeusSettings, self).get_context_data(**kwargs)
  81 + context['page'] = self.kwargs.get('page')
78 if not self.request.method == 'POST': 82 if not self.request.method == 'POST':
79 try: 83 try:
80 setting = EmailBackend.objects.latest('id') 84 setting = EmailBackend.objects.latest('id')
core/models.py
@@ -113,4 +113,4 @@ class Log(models.Model): @@ -113,4 +113,4 @@ class Log(models.Model):
113 verbose_name_plural = _('Logs') 113 verbose_name_plural = _('Logs')
114 114
115 def __str__(self): 115 def __str__(self):
116 - return self.context 116 + return self.component
courses/templates/course/course_card.html
@@ -19,6 +19,7 @@ @@ -19,6 +19,7 @@
19 </button> 19 </button>
20 <ul class="dropdown-menu pull-right" aria-labelledby="moreActions"> 20 <ul class="dropdown-menu pull-right" aria-labelledby="moreActions">
21 <li><a href="{% url 'course:replicate_course' course.slug %}"><i class="fa fa-files-o fa-fw" aria-hidden="true"></i>{% trans 'Replicate' %}</a></li> 21 <li><a href="{% url 'course:replicate_course' course.slug %}"><i class="fa fa-files-o fa-fw" aria-hidden="true"></i>{% trans 'Replicate' %}</a></li>
  22 + <li><a href="{% url 'course:update' course.slug %}"><i class="fa fa-pencil fa-fw" aria-hidden="true"></i>{% trans 'Edit' %}</a></li>
22 <li><a href="javascript:delete_course.get('{% url 'course:delete' course.slug %}','#course','#modal_course')"><i class="fa fa-trash fa-fw" aria-hidden="true"></i>&nbsp;{% trans 'Remove' %}</a></li> 23 <li><a href="javascript:delete_course.get('{% url 'course:delete' course.slug %}','#course','#modal_course')"><i class="fa fa-trash fa-fw" aria-hidden="true"></i>&nbsp;{% trans 'Remove' %}</a></li>
23 </ul> 24 </ul>
24 </div> 25 </div>
courses/templates/subject/create.html
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
4 4
5 {% block breadcrumbs %} 5 {% block breadcrumbs %}
6 {{ block.super }} 6 {{ block.super }}
7 - {% breadcrumb 'Create subject' 'course:create_subject' %} 7 + {% breadcrumb 'Create subject' 'course:create_subject' %}
8 {% endblock breadcrumbs %} 8 {% endblock breadcrumbs %}
9 9
10 {% block content %} 10 {% block content %}
courses/templates/subject/form_view_teacher.html
@@ -103,6 +103,7 @@ @@ -103,6 +103,7 @@
103 <li><a href="javascript:createForum('{% url 'course:forum:create' %}', '{{ topic.id }}')">{% trans 'Create Forum' %}</a></li> 103 <li><a href="javascript:createForum('{% url 'course:forum:create' %}', '{{ topic.id }}')">{% trans 'Create Forum' %}</a></li>
104 <li><a href="javascript:modal.get('{% url 'course:poll:create_poll' topic.slug%}','#poll','#requisicoes_ajax');">{% trans 'Create Poll' %}</a></li> 104 <li><a href="javascript:modal.get('{% url 'course:poll:create_poll' topic.slug%}','#poll','#requisicoes_ajax');">{% trans 'Create Poll' %}</a></li>
105 <li><a href="javascript:modal.get('{% url 'course:exercise:create_exercise' topic.slug %}', '#createExercisesModal','#requisicoes_ajax')">{% trans 'Delivery Material' %}</a></li> 105 <li><a href="javascript:modal.get('{% url 'course:exercise:create_exercise' topic.slug %}', '#createExercisesModal','#requisicoes_ajax')">{% trans 'Delivery Material' %}</a></li>
  106 + <li><a href="{% url 'course:exam:create_exam' topic.slug %}">{% trans 'Create exam' %}</a></li>
106 </ul> 107 </ul>
107 </div> 108 </div>
108 </div> 109 </div>
courses/templates/topic/update.html
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 </div> 17 </div>
18 {% endfor %} 18 {% endfor %}
19 <div class="col-lg-offset-4 col-lg-4"> 19 <div class="col-lg-offset-4 col-lg-4">
20 - <button type="submite" class="btn btn-raised btn-primary btn-lg btn-block">{% trans 'Update' %}</button> 20 + <button type="submit" class="btn btn-raised btn-primary btn-lg btn-block">{% trans 'Update' %}</button>
21 21
22 </div> 22 </div>
23 </form> 23 </form>
courses/tests/test_CourseCategory.py 0 → 100644
@@ -0,0 +1,108 @@ @@ -0,0 +1,108 @@
  1 +from django.test import TestCase, Client
  2 +
  3 +from django.core.urlresolvers import reverse
  4 +from rolepermissions.shortcuts import assign_role
  5 +
  6 +from users.models import User
  7 +from courses.models import CourseCategory
  8 +
  9 +class ForumViewTestCase (TestCase):
  10 +
  11 + def setUp(self):
  12 +
  13 + self.user = User.objects.create_user(
  14 + username = 'test',
  15 + email = 'testing@amadeus.com',
  16 + is_staff = True,
  17 + is_active = True,
  18 + password = 'testing'
  19 + )
  20 + assign_role(self.user, 'system_admin')
  21 +
  22 + self.user_professor = User.objects.create_user(
  23 + username = 'professor',
  24 + email = 'professor@amadeus.com',
  25 + is_staff = False,
  26 + is_active = True,
  27 + password = 'testing',
  28 + type_profile = 1
  29 + )
  30 + assign_role(self.user_professor, 'professor')
  31 +
  32 + self.user_student = User.objects.create_user(
  33 + username = 'student',
  34 + email = 'student@amadeus.com',
  35 + is_staff = False,
  36 + is_active = True,
  37 + password = 'testing',
  38 + type_profile = 2
  39 + )
  40 + assign_role(self.user_student, 'student')
  41 +
  42 + self.category = CourseCategory.objects.create(
  43 + name = 'Test Category'
  44 + )
  45 + self.category.save()
  46 +
  47 +
  48 + self.client = Client()
  49 + self.client.login(username='test', password='testing')
  50 +
  51 + self.client_professor = Client()
  52 + self.client_professor.login (username='professor', password='testing')
  53 +
  54 + self.client_student = Client()
  55 + self.client_student.login (username='student', password='testing')
  56 +
  57 +
  58 +######################### CreateCatView #########################
  59 +
  60 + def test_CreateCatView_ok (self):
  61 + url = reverse('course:create_cat')
  62 +
  63 + response = self.client.get(url)
  64 + self.assertEquals(response.status_code, 200)
  65 +
  66 + response = self.client_professor.get(url)
  67 + self.assertEquals(response.status_code, 200)
  68 +
  69 + response = self.client_student.get(url)
  70 + self.assertEquals(response.status_code, 403)
  71 +
  72 + def test_CreateCatView_context (self):
  73 + url = reverse('course:create_cat')
  74 +
  75 + response = self.client.get(url)
  76 + self.assertTrue('form' in response.context)
  77 +
  78 + response = self.client_professor.get(url)
  79 + self.assertTrue('form' in response.context)
  80 +
  81 + def test_CreateCatView_form_error (self):
  82 + url = reverse('course:create_cat')
  83 + data = {'name':''}
  84 + list_categories = CourseCategory.objects.all().count()
  85 +
  86 + response = self.client.post(url, data)
  87 + self.assertEquals(list_categories, CourseCategory.objects.all().count())
  88 +
  89 + response = self.client_professor.post(url, data)
  90 + self.assertEquals(list_categories, CourseCategory.objects.all().count())
  91 +
  92 + def test_CreateCatView_form_ok (self):
  93 + url = reverse('course:create_cat')
  94 + data = {
  95 + 'name':'Second Category',
  96 + }
  97 + list_categories = CourseCategory.objects.all().count()
  98 +
  99 + response = self.client.post(url, data)
  100 + self.assertEquals (response.status_code, 302)
  101 + self.assertEquals(list_categories+1, CourseCategory.objects.all().count())
  102 +
  103 + data = {
  104 + 'name' : 'Third Category',
  105 + }
  106 + response = self.client_professor.post(url, data)
  107 + self.assertEquals (response.status_code, 302)
  108 + self.assertEquals(list_categories+2, CourseCategory.objects.all().count())
0 \ No newline at end of file 109 \ No newline at end of file
courses/tests/test_views.py
@@ -5,7 +5,7 @@ from django.core.urlresolvers import reverse @@ -5,7 +5,7 @@ from django.core.urlresolvers import reverse
5 5
6 from rolepermissions.shortcuts import assign_role 6 from rolepermissions.shortcuts import assign_role
7 7
8 -from courses.models import Course, Category 8 +from courses.models import Course, CourseCategory
9 from courses.forms import CourseForm 9 from courses.forms import CourseForm
10 from users.models import User 10 from users.models import User
11 11
@@ -23,7 +23,7 @@ class CourseViewTestCase(TestCase): @@ -23,7 +23,7 @@ class CourseViewTestCase(TestCase):
23 ) 23 )
24 assign_role(self.user, 'system_admin') 24 assign_role(self.user, 'system_admin')
25 25
26 - self.category = Category( 26 + self.category = CourseCategory(
27 name = 'Categoria Teste', 27 name = 'Categoria Teste',
28 slug = 'categoria_teste' 28 slug = 'categoria_teste'
29 ) 29 )
exam/static/js/Exam.js 0 → 100644
@@ -0,0 +1,146 @@ @@ -0,0 +1,146 @@
  1 +//Insert Create select with question type
  2 + var idQuestionType = 1;
  3 + $("#addQuestion").on("click", function(event){
  4 + var element =
  5 + '<div class="row form-group" id="questionType_' + idQuestionType +'">' +
  6 + '<label for="questionType" class="col-md-2 control-label">' +
  7 + '{% trans "Question Type" %}</label>' + '<div class="col-md-10">' +
  8 + '<select id="questionType'+ idQuestionType +'" class="form-control" name="option_question" onchange="showDiv (this, '+ idQuestionType +')">' +
  9 + '<option selected disabled>{% trans "Question Type" %}</option>' +
  10 + '<option value="0">{% trans "Multiple Choice" %}</option>' +
  11 + '<option value="1">{% trans "True or False" %}</option>' +
  12 + '<option value="2">{% trans "Gap Filling" %}</option>' +
  13 + '<option value="3">{% trans "Discursive Question" %}</option>' +
  14 + '</select>' +
  15 + '</div>' +
  16 + '</div>' + '<hr id="hr_'+idQuestionType+'">'
  17 + ;
  18 + if (idQuestionType == 1){
  19 + $(element).insertAfter('#buttonAddQuestion');
  20 + }else{
  21 + var idhr = '#hr_'+(idQuestionType-1);
  22 + $(element).insertAfter(idhr);
  23 + }
  24 + idQuestionType++;
  25 + })
  26 +
  27 + //Insert question choice
  28 + function showDiv (elem, questionType_id) {
  29 + if (elem.value == 0) {
  30 + var questionChoice =
  31 + '<div id="questionChoice_'+questionType_id+'">' +
  32 + '<div class="row form-group">'+
  33 + '<label for="question-name" class="col-md-2 control-label">Question</label>'+
  34 + '<div class="col-md-10">'+
  35 + '<textarea class="form-control" rows="1" id="question-name" placeholder="Wording"></textarea>'+
  36 + '</div>'+
  37 + '</div>'+
  38 + '<div class="row form-group">'+
  39 + '<label for="alternatives" class="col-md-2 control-label">Alternatives</label>'+
  40 + '<div class="col-md-10" id="radios_'+questionType_id+'">'+
  41 + '<div class="radio radio-primary form-group">'+
  42 + '<label>'+
  43 + '<input checked type="radio" name="multiple-choice" id="alternative1" value="1">'+
  44 + '<textarea class="form-control" rows="1" placeholder="Write your alternative"></textarea>'+
  45 + '</label>'+
  46 + '</div>'+
  47 + '<div class="radio radio-primary form-group">'+
  48 + '<label>'+
  49 + '<input type="radio" name="multiple-choice" id="alternative2" value="2">'+
  50 + '<textarea class="form-control" rows="1" placeholder="Write your alternative"></textarea>'+
  51 + '</label>'+
  52 + '</div>'+
  53 + '</div>'+
  54 + '</div>'+
  55 + '<div class="row form-group">'+
  56 + '<button type="button" class="btn btn-raised btn-primary" id="newAlternative_'+questionType_id+'" onclick="functionNewAlternative(radios_'+questionType_id+')">New Alternative</button>'+
  57 + '</div>'+
  58 + '</div>';
  59 + } else if (elem.value == 1) {
  60 + var questionChoice =
  61 + '<div id="questionChoice_'+questionType_id+'">'+
  62 + '<div class="row form-group">'+
  63 + '<label for="question-name" class="col-md-2 control-label">Question True or False</label>'+
  64 + '<div class="col-md-10">'+
  65 + '<textarea class="form-control" rows="1" id="question-name" placeholder="Wording"></textarea>'+
  66 + '</div>'+
  67 + '</div>'+
  68 + '<div class="row form-group">'+
  69 + '<label for="alternative" class="col-md-2 control-label">Alternatives: T/F</label>'+
  70 + '<div class="col-md-10" id="radiosTF_'+questionType_id+'">'+
  71 + '<div class="radio form-group" value="1">'+
  72 + '<div class="radio">'+
  73 + '<label>'+
  74 + '<textarea class="form-control" rows="1" placeholder="Write your alternative"></textarea>'+
  75 + '</label>'+
  76 + '<label>'+
  77 + '<input type="radio" name="true-or-false-1" value="T">'+
  78 + '</label>'+
  79 + '<label>'+
  80 + '<input type="radio" name="true-or-false-1" value="F">'+
  81 + '</label>'+
  82 + '</div>'+
  83 + '</div>'+
  84 + '<div class="radio form-group" value="2">'+
  85 + '<label>'+
  86 + '<textarea class="form-control" rows="1" placeholder="Write your alternative"></textarea>'+
  87 + '</label>'+
  88 + '<label>'+
  89 + '<input type="radio" name="true-or-false-2" value="T">'+
  90 + '</label>'+
  91 + '<label>'+
  92 + '<input type="radio" name="true-or-false-2" value="F">'+
  93 + '</label>'+
  94 + '</div>'+
  95 + '</div>'+
  96 + '</div>'+
  97 + '<div class="row form-group">'+
  98 + '<button type="button" class="btn btn-raised btn-primary" id="newAlternative_'+questionType_id+'" onclick="functionNewAlternativeTF(radiosTF_'+questionType_id+')">New Alternative</button>'+
  99 + '</div>'+
  100 + '</div>';
  101 + } else if (elem.value == 3) {
  102 + var questionChoice =
  103 + '<div id="questionChoice_'+questionType_id+'">'+
  104 + '<div class="row form-group">'+
  105 + '<label for="question-name" class="col-md-2 control-label">Name Question discursive</label>'+
  106 + '<div class="col-md-10">'+
  107 + '<textarea class="form-control" rows="2" id="question" placeholder="Wording"></textarea>'+
  108 + '</div>'+
  109 + '</div>'+
  110 + '</div>';
  111 + }
  112 + if(document.getElementById('questionChoice_'+ questionType_id)){
  113 + $('#questionChoice_'+ questionType_id).detach();
  114 + }
  115 + $(questionChoice).insertBefore('#hr_'+questionType_id);
  116 + $.material.init() //O material deve ser iniciado aqui para funcionar os botoes de radio.
  117 + }
  118 +//Bug quando criamos sem ser na ordem
  119 +function functionNewAlternative(Question_Id){
  120 + var alternative = parseInt($("div input").last().val()) + 1;
  121 + var element = '<div class="radio radio-primary form-group">' +
  122 + '<label>' +
  123 + '<input type="radio" name="alternatives" id="alternative_'+alternative+'_'+Question_Id+'"' + 'value="'+alternative+'">' +
  124 + '<textarea class="form-control" rows="1" placeholder="Write your alternative"></textarea>' +
  125 + '</label>'+
  126 + '</div>';
  127 + $(Question_Id).append(element);
  128 + $.material.init() //O material deve ser iniciado aqui para funcionar os botoes de radio.
  129 +}
  130 +function functionNewAlternativeTF(Question_Id){
  131 + var alternative = parseInt($("div").last().val()) + 1;
  132 + var element =
  133 + '<div class="radio form-group">'+
  134 + '<label>'+
  135 + '<textarea class="form-control" rows="1" placeholder="Write your alternative"></textarea>'+
  136 + '</label>'+
  137 + '<label>'+
  138 + '<input type="radio" name="true-or-false-2" value="T">'+
  139 + '</label>'+
  140 + '<label>'+
  141 + '<input type="radio" name="true-or-false-2" value="F">'+
  142 + '</label>'+
  143 + '</div>';
  144 + $(Question_Id).append(element);
  145 + $.material.init() //O material deve ser iniciado aqui para funcionar os botoes de radio.
  146 +}
0 \ No newline at end of file 147 \ No newline at end of file
exam/templates/exam/create.html
1 -{% extends "home.html" %} 1 +{% extends 'subject/index.html' %}
2 2
3 -{% load i18n widget_tweaks dict_access static%} 3 +{% load i18n widget_tweaks static django_bootstrap_breadcrumbs %}
4 4
5 -{# {% block style %} #}  
6 - <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>  
7 - <script src="{% static 'js/modal_exam.js' %}"></script>  
8 -  
9 -{# {% endblock %} #}  
10 -  
11 -{# {% block content %} #}  
12 -<!-- Modal (remember to change the ids!!!) -->  
13 -<div class="modal fade" id="exam" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">  
14 - <div class="modal-dialog" role="document">  
15 - <div class="modal-content"> 5 +{% block breadcrumbs %}
  6 + {{ block.super }}
  7 + {% breadcrumb 'Create exam' 'course:create_exam' %}
  8 +{% endblock breadcrumbs %}
16 9
17 - <!-- Modal Header -->  
18 - <div class="modal-header">  
19 -  
20 - {% block title_exam %}  
21 - <!-- Put your title here!!! -->  
22 - <h4 class="modal-title" id="myModalLabel">{% trans "Create a Exam" %}</h4>  
23 - {% endblock title_exam %} 10 +{% block content %}
  11 +<div class="panel panel-primary">
  12 + <div class="panel-heading">
  13 + <h4 class="panel-title" id="exam-title">{% trans "Create a Exam" %}</h4>
  14 + </div>
  15 + <div class="panel-body">
  16 + <div class="row form-group">
  17 + <label for="exam_name" class="col-md-2 control-label">{% trans "Exam Name" %}</label>
  18 + <div class="col-md-10">
  19 + <input type="text" name="exam_name" class="form-control" id="exam_name" placeholder="{% trans 'Exam Name' %}">
24 </div> 20 </div>
25 - <!-- Modal Body -->  
26 - <div class="modal-body">  
27 -  
28 - {% block content_exam %}  
29 -  
30 - <div class="panel-body">  
31 - <div class="row form-group">  
32 - <label for="exam_name" class="col-md-2 control-label">{% trans "Exam Name" %}</label>  
33 - <div class="col-md-10">  
34 - <input type="text" name="exam_name" class="form-control" id="exam_name" placeholder="{% trans 'Exam Name' %}">  
35 - </div>  
36 - </div>  
37 - <div class="row form-group">  
38 - <label for="begin_date" class="col-md-2 control-label">{% trans "Exam's begin date" %}</label>  
39 - <div class="col-md-10">  
40 - <input type="date" name="begin_date" class="form-control" id="begin_date" placeholder='{% trans "Begin Date" %}'>  
41 - </div>  
42 - </div>  
43 - <div class="row form-group">  
44 - <label for="end_date" class="col-md-2 control-label">{% trans "Exam's end date" %}</label>  
45 - <div class="col-md-10">  
46 - <input type="date" name="end_date" class="form-control" id="end_date" placeholder='{% trans "End Date" %}'>  
47 - </div>  
48 - </div>  
49 - <div class="row form-group">  
50 - <div class="col-md-10">  
51 - <div class="checkbox">  
52 - <label>  
53 - <input type="checkbox" name="checkbox"><span class="checkbox-material"><span class="check"></span></span> {% trans "Allow submissions after deadline?" %}  
54 - </label>  
55 - </div>  
56 - </div>  
57 - </div>  
58 - <div class="row form-group" id="questions">  
59 -  
60 - </div>  
61 - <div class="row form-group">  
62 - <label for="questionType" class="col-md-2 control-label">{% trans "Question Type" %}</label>  
63 - <div class="col-md-10">  
64 - <select id="questionType" class="form-control" name="option_question" onchange="showDiv (this)">  
65 - <option selected disabled>{% trans "Question Type" %}</option>  
66 - <option value="0">{% trans "Multiple Choice" %}</option>  
67 - <option value="1">{% trans "True or False" %}</option>  
68 - <option value="2">{% trans "Gap Filling" %}</option>  
69 - <option value="3">{% trans "Discursive Question" %}</option>  
70 - </select>  
71 - </div>  
72 - </div>  
73 - <!-- Modal Footer -->  
74 - <div class="modal-footer">  
75 -  
76 - <!-- Don't remove that!!! -->  
77 - <button type="button" class="btn btn-danger btn-raised" data-dismiss="modal">{% trans "Close" %}</button>  
78 - {% block button_save %}  
79 - <!-- Put curtom buttons here!!! -->  
80 - <button type="submite" id="button" form="form" class="btn btn-primary btn-raised">{% trans "Create" %}</button>  
81 - {% endblock button_save %}  
82 - </div>  
83 -  
84 -  
85 - {% endblock content_exam %} 21 + </div>
  22 + <div class="row form-group">
  23 + <label for="begin_date" class="col-md-2 control-label">{% trans "Exam's begin date" %}</label>
  24 + <div class="col-md-4">
  25 + <input type="date" name="begin_date" class="form-control" id="begin_date" placeholder='{% trans "Begin Date" %}'>
  26 + </div>
  27 + <label for="end_date" class="col-md-2 control-label">{% trans "Exam's end date" %}</label>
  28 + <div class="col-md-4">
  29 + <input type="date" name="end_date" class="form-control" id="end_date" placeholder='{% trans "End Date" %}'>
  30 + </div>
  31 + </div>
  32 + <div class="row form-group">
  33 + <div class="col-md-10">
  34 + <div class="checkbox">
  35 + <label>
  36 + <input type="checkbox" name="checkbox"><span class="checkbox-material"></span> {% trans "Allow submissions after deadline?" %}
  37 + </label>
  38 + </div>
86 </div> 39 </div>
87 </div> 40 </div>
  41 + <div class="row form-group" id="buttonAddQuestion">
  42 + <div class="col-md-10">
  43 + <button id="addQuestion" type="button" class="btn btn-raised btn-default">Add new question buton</button>
  44 + </div>
  45 + </div>
  46 + </div>
  47 + <div class="panel-footer">
  48 + <button type="button" class="btn btn-default btn-raised" data-dismiss="modal">{% trans "Close" %}</button>
  49 + {% block button_save %}
  50 + <!-- Put curtom buttons here!!! -->
  51 + <button type="submite" id="button" form="form" class="btn btn-primary btn-raised">{% trans "Create" %}</button>
  52 + {% endblock button_save %}
88 </div> 53 </div>
89 </div> 54 </div>
90 55
91 -<script type="text/javascript">  
92 -  
93 -var id = 1;  
94 -$("#add_question").click(function(){  
95 - $.get("{% url 'course:exam:true_or_false_question' %}", function(data){  
96 -  
97 - $("#questions").append(data);  
98 -  
99 - $("#0").attr("id","true_" + id++);  
100 - });  
101 -});  
102 -var alternativeValue = 3;  
103 -$('#newAlternative').click(function () {  
104 - var element = '<div class="radio radio-primary">' +  
105 - '<label>' +  
106 - '<input type="radio" name="alternatives" id="alternative4"' + 'value="' +alternativeValue + '">' +  
107 - '<textarea class="form-control" rows="1" placeholder="Write your alternative"></textarea>' +  
108 - '</label>' +  
109 - '</div>';  
110 - $('#radios').append(element);  
111 - alternativeValue++;  
112 -});  
113 -var tfAlternativeValue = 3;  
114 -$('#tfAlternative').click(function () {  
115 - var element = '<div class="radio radio-primary">' +  
116 - '<label>' +  
117 - '<textarea class="form-control" rows="1" placeholder="Write your alternative"></textarea>' +  
118 - '</label>' +  
119 - '<label>' +  
120 - '<input type="radio" name="alternative' + tfAlternativeValue +'" value="T">' +  
121 - '</label>' +  
122 - '<label>' +  
123 - '<input type="radio" name="alternative2" value="F">' +  
124 - '</label>' +  
125 - '</div>';  
126 - $('#radiosTF').append(element);  
127 - tfAlternativeValue++;  
128 -});  
129 -$(function() {  
130 - $( "#begin_date,#end_date" ).datepicker();  
131 -});  
132 -  
133 -</script>  
134 -  
135 -  
136 - 56 +{% block javascript %}
  57 + <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
  58 + <script src="{% static 'js/Exam.js' %}"></script>
  59 + <!-- Init material Bootstrap -->
  60 + <script type="text/javascript">$.material.init()</script><!-- O botao radio volta a funcionar quando coloco essa função-->
  61 +{% endblock %}
137 {% endblock content %} 62 {% endblock content %}