Commit 8bbed0fb1cdf143ec796bcd93aeb78b16af04ed0

Authored by fbormann
2 parents 4a5ba549 eb7ac9eb

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

@@ -49,3 +49,4 @@ coverage.xml @@ -49,3 +49,4 @@ coverage.xml
49 49
50 angular_api 50 angular_api
51 logs/ 51 logs/
  52 +amadeus/upload/
amadeus/uploads/ciencia-da-computacao/teorica/tipfef/Apresentacao_da_Cadidatura_a_Marketing_-_Matheus_Lins.pptx
No preview for this file type
amadeus/uploads/ciencia-da-computacao/teorica/tipfef/Cartao_Outubro.pdf
No preview for this file type
amadeus/uploads/django-summernote/2016-11-03/46bdc2b1-ba27-4385-b504-89916637edca.jpg

25.6 KB

amadeus/uploads/django-summernote/2016-11-03/bde587ad-9c4a-4e81-b07d-8f8aa5dced21.jpeg

12.2 KB

amadeus/uploads/django-summernote/2016-11-03/eaa22970-1d01-4deb-8232-60fd2be4f9fa.jpeg

12.2 KB

amadeus/uploads/links/default.jpg

19.5 KB

amadeus/uploads/sistemas-de-informacao/algoritmo/topico-1/Riachuelo_Outubro.pdf
No preview for this file type
amadeus/uploads/users/Captura_de_tela_de_2016-09-21_21-09-40.png

165 KB

courses/static/js/modal_category.js
@@ -16,16 +16,16 @@ var Submite = { @@ -16,16 +16,16 @@ var Submite = {
16 } 16 }
17 } 17 }
18 18
19 -var modal = {  
20 - get: function (url, id_modal, id_div_modal){  
21 - $.get(url, function(data){  
22 - if($(id_modal).length){  
23 - $(id_div_modal).empty();  
24 - $(id_div_modal).append(data);  
25 - } else {  
26 - $(id_div_modal).append(data);  
27 - }  
28 - $(id_modal).modal('show');  
29 - });  
30 - }  
31 -};  
32 \ No newline at end of file 19 \ No newline at end of file
  20 +// var modal = {
  21 +// get: function (url, id_modal, id_div_modal){
  22 +// $.get(url, function(data){
  23 +// if($(id_modal).length){
  24 +// $(id_div_modal).empty();
  25 +// $(id_div_modal).append(data);
  26 +// } else {
  27 +// $(id_div_modal).append(data);
  28 +// }
  29 +// $(id_modal).modal('show');
  30 +// });
  31 +// }
  32 +// };
courses/templates/subject/form_view_teacher.html
1 {% load static i18n list_topic_foruns permission_tags widget_tweaks professor_access%} 1 {% load static i18n list_topic_foruns permission_tags widget_tweaks professor_access%}
2 2
3 -{% block javascript %}  
4 - <script type="text/javascript" src="{% static 'js/forum.js' %}"></script>  
5 - <script src="{% static 'js/file.js' %}"></script>  
6 - <script type="text/javascript" src="{% static 'js/material.js' %}"></script>  
7 - <script type = "text/javascript" src="{% static 'js/topic_editation_presentation.js' %}"></script>  
8 - <script type = "text/javascript" src="{% static 'js/links.js' %}"></script>  
9 -{% endblock %}  
10 <div class="panel panel-default cards-detail"> 3 <div class="panel panel-default cards-detail">
11 <div class="panel-heading topic"> 4 <div class="panel-heading topic">
12 <div class="row"> 5 <div class="row">
@@ -23,6 +16,8 @@ @@ -23,6 +16,8 @@
23 <button class="btn btn-default btn-sm dropdown-toggle" type="button" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> 16 <button class="btn btn-default btn-sm dropdown-toggle" type="button" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
24 <i class="fa fa-ellipsis-v fa-2x" aria-hidden="true"></i> 17 <i class="fa fa-ellipsis-v fa-2x" aria-hidden="true"></i>
25 </button> 18 </button>
  19 +
  20 + {# dropdown de topic com as opções de replicar, editar e deletar #}
26 {% professor_subject topic.subject user as dropdown_topic %} 21 {% professor_subject topic.subject user as dropdown_topic %}
27 {% if dropdown_topic %} 22 {% if dropdown_topic %}
28 <ul class="dropdown-menu pull-right" aria-labelledby="moreActions"> 23 <ul class="dropdown-menu pull-right" aria-labelledby="moreActions">
@@ -32,11 +27,13 @@ @@ -32,11 +27,13 @@
32 </ul> 27 </ul>
33 {% endif %} 28 {% endif %}
34 </div> 29 </div>
35 - </div><!--column-->  
36 - </div><!--row--> 30 + </div>
  31 + </div>
37 </div> 32 </div>
38 <div class="panel-collapse collapseTopic-{{topic.slug}} topic_{{ topic.id }} collapse in" role="tabpanel" aria-labelledby="heading_{{topic.id}}" aria-expanded="true" aria-hidden="false"> 33 <div class="panel-collapse collapseTopic-{{topic.slug}} topic_{{ topic.id }} collapse in" role="tabpanel" aria-labelledby="heading_{{topic.id}}" aria-expanded="true" aria-hidden="false">
39 <div class="panel-body"> 34 <div class="panel-body">
  35 +
  36 + {# dados do tópico no modo de visualização #}
40 <div class="presentation_{{topic.slug}}"> 37 <div class="presentation_{{topic.slug}}">
41 <p> 38 <p>
42 <i> 39 <i>
@@ -44,6 +41,8 @@ @@ -44,6 +41,8 @@
44 </i> 41 </i>
45 </p> 42 </p>
46 </div> 43 </div>
  44 +
  45 + {# dados dos topicos no modo de edição #}
47 <div class="form-group editation editation_{{topic.slug}}"> 46 <div class="form-group editation editation_{{topic.slug}}">
48 <label class="control-label" for="focusedInput2">{% trans 'Name Topic' %}</label> 47 <label class="control-label" for="focusedInput2">{% trans 'Name Topic' %}</label>
49 <input type="text" class="form-control" value="{{topic}}"> 48 <input type="text" class="form-control" value="{{topic}}">
@@ -52,56 +51,82 @@ @@ -52,56 +51,82 @@
52 <label class="control-label" for="focusedInput2">{% trans 'Description' %}</label> 51 <label class="control-label" for="focusedInput2">{% trans 'Description' %}</label>
53 <textarea class="form-control" rows="3" id="textArea">{{topic.description}}</textarea> 52 <textarea class="form-control" rows="3" id="textArea">{{topic.description}}</textarea>
54 </div> 53 </div>
  54 +
  55 + {# materiais do topico#}
55 <div class="row"> 56 <div class="row">
56 <div class="col-xs-6 col-md-6"> 57 <div class="col-xs-6 col-md-6">
57 <div class="resource_inline"> 58 <div class="resource_inline">
58 <h4>{% trans 'Material' %}</h4> 59 <h4>{% trans 'Material' %}</h4>
59 </div> 60 </div>
60 <div class="resource_inline"> 61 <div class="resource_inline">
  62 +
  63 + {# dropdown de create material #}
61 <div class="dropdown"> 64 <div class="dropdown">
62 <a href="#" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-plus-circle fa-lg" aria-hidden="true"></i></a> 65 <a href="#" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-plus-circle fa-lg" aria-hidden="true"></i></a>
63 <ul class="dropdown-menu" aria-labelledby="dLabel"> 66 <ul class="dropdown-menu" aria-labelledby="dLabel">
64 - <li><a href="javascript:get_modal_link('{% url 'course:links:create_link' topic.slug %}', '#createLinksModal','#divModalLink') ">{% trans 'Create a Link' %}</a></li>  
65 - <li><a href="javascript:get_modal_file('{% url 'course:file:create_file' topic.slug %}', '#fileModal', '#divModalFile')">{% trans "Create a file" %}</a></li> 67 + <li><a href="javascript:modal.get('{% url 'course:links:create_link' topic.slug %}', '#createLinksModal','#requisicoes_ajax') ">{% trans 'Create a Link' %}</a></li>
  68 + <li><a href="javascript:modal.get('{% url 'course:file:create_file' topic.slug %}', '#fileModal', '#requisicoes_ajax')">{% trans "Create a file" %}</a></li>
66 </ul> 69 </ul>
67 </div> 70 </div>
68 </div> 71 </div>
69 <div class="presentation_{{topic.slug}}"> 72 <div class="presentation_{{topic.slug}}">
  73 +
  74 + {# materiais do tópico no modo de visualização #}
70 <ul> 75 <ul>
71 {% list_topic_file request topic %} 76 {% list_topic_file request topic %}
72 {% list_topic_link request topic%} 77 {% list_topic_link request topic%}
73 </ul> 78 </ul>
74 </div> 79 </div>
75 <div class="editation editation_{{topic.slug}}"> 80 <div class="editation editation_{{topic.slug}}">
  81 +
  82 + {# materiais do tópico no modo de edição #}
76 <ul> 83 <ul>
77 {% list_topic_file_edit request topic %} 84 {% list_topic_file_edit request topic %}
78 {% list_topic_link_edit request topic%} 85 {% list_topic_link_edit request topic%}
79 </ul> 86 </ul>
80 </div> 87 </div>
81 </div> 88 </div>
  89 +
  90 + {# avaliações do topico #}
82 <div class="col-xs-4 col-md-4"> 91 <div class="col-xs-4 col-md-4">
83 <div class="resource_inline"> 92 <div class="resource_inline">
84 <h4>{% trans 'Activities' %}</h4> 93 <h4>{% trans 'Activities' %}</h4>
85 </div> 94 </div>
86 <div class="resource_inline"> 95 <div class="resource_inline">
  96 +
  97 + {# dropdown de avaliações #}
87 <div class="dropdown"> 98 <div class="dropdown">
88 <a href="#" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-plus-circle fa-lg" aria-hidden="true"></i></a> 99 <a href="#" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-plus-circle fa-lg" aria-hidden="true"></i></a>
89 <ul class="dropdown-menu" aria-labelledby="dLabel"> 100 <ul class="dropdown-menu" aria-labelledby="dLabel">
90 <li><a href="javascript:createForum('{% url 'course:forum:create' %}', '{{ topic.id }}')">{% trans 'Create Forum' %}</a></li> 101 <li><a href="javascript:createForum('{% url 'course:forum:create' %}', '{{ topic.id }}')">{% trans 'Create Forum' %}</a></li>
91 - <li><a href="javascript:modal.get('{% url 'course:poll:create_poll' topic.slug%}','#poll','#modal_poll');">{% trans 'Create Poll' %}</a></li> 102 + <li><a href="javascript:modal.get('{% url 'course:poll:create_poll' topic.slug%}','#poll','#requisicoes_ajax');">{% trans 'Create Poll' %}</a></li>
92 </ul> 103 </ul>
93 </div> 104 </div>
94 </div> 105 </div>
95 - <ul>  
96 - {% list_topic_poll request topic %}  
97 - {% list_topic_foruns request topic %}  
98 - </ul> 106 + <div class="presentation_{{topic.slug}}">
  107 +
  108 + {# avaliações do tópico no modo de visualização #}
  109 + <ul>
  110 + {% list_topic_poll request topic %}
  111 + {% list_topic_foruns request topic %}
  112 + </ul>
  113 + </div>
  114 + <div class="editation editation_{{topic.slug}}">
  115 +
  116 + {# avaliações do tópico no modo de edição #}
  117 + <ul>
  118 + {% list_topic_poll_teacher request topic %}
  119 + {% list_topic_foruns request topic %}
  120 + </ul>
  121 + </div>
99 </div> 122 </div>
100 </div> 123 </div>
  124 +
  125 + {# opções de cancelar e editar no modo de edição #}
101 <div class="form-group editation editation_{{topic.slug}}"> 126 <div class="form-group editation editation_{{topic.slug}}">
102 <div class="col-md-10"> 127 <div class="col-md-10">
103 - <a href="javascript:show_presentation('{{topic.slug}}')" class="btn btn-raised btn-default">{% trans 'Cancel' %}</a>  
104 - <a href="javascript:show_presentation('{{topic.slug}}')" class="btn btn-raised btn-primary">{% trans 'Submit' %}</a> 128 + <a href="javascript:show_presentation('{{topic.slug}}')" class="btn btn-raise btn-default">{% trans 'Back' %}</a>
  129 + {# <a href="javascript:show_presentation('{{topic.slug}}')" class="btn btn-raised btn-primary">{% trans 'Submit' %}</a>#}
105 </div> 130 </div>
106 </div> 131 </div>
107 </div> 132 </div>
@@ -112,7 +137,7 @@ @@ -112,7 +137,7 @@
112 137
113 138
114 <!-- MODAL REMOVE TOPIC --> 139 <!-- MODAL REMOVE TOPIC -->
115 -<div class="modal" id="removeTopic"> 140 +<div class="modal" id="{{topic.slug}}">
116 <div class="modal-dialog"> 141 <div class="modal-dialog">
117 <div class="modal-content"> 142 <div class="modal-content">
118 <div class="modal-header"> 143 <div class="modal-header">
@@ -152,18 +177,18 @@ @@ -152,18 +177,18 @@
152 <label for="textArea" class="col-md-2 control-label">{% trans 'Code' %}:</label> 177 <label for="textArea" class="col-md-2 control-label">{% trans 'Code' %}:</label>
153 178
154 <div class="col-md-10"> 179 <div class="col-md-10">
155 - <textarea class="form-control" rows="2" id="textArea"></textarea>  
156 - <span class="help-block">{% trans 'Material description' %}</span> 180 + <textarea class="form-control" rows="2" id="textArea"></textarea>
  181 + <span class="help-block">{% trans 'Material description' %}</span>
157 </div> 182 </div>
158 </div> 183 </div>
159 <div class="form-group is-empty"> 184 <div class="form-group is-empty">
160 - <label for="number" class="col-md-2 control-label">{% trans 'Height' %}</label> 185 + <label for="number" class="col-md-2 control-label">{% trans 'Height' %}</label>
161 <div class="col-md-4"> 186 <div class="col-md-4">
162 <input type="number" class="form-control" id="inputNumber" placeholder="Heiht"> 187 <input type="number" class="form-control" id="inputNumber" placeholder="Heiht">
163 </div> 188 </div>
164 </div> 189 </div>
165 <div class="form-group is-empty"> 190 <div class="form-group is-empty">
166 - <label for="number" class="col-md-2 control-label">{% trans 'Weight' %}</label> 191 + <label for="number" class="col-md-2 control-label">{% trans 'Weight' %}</label>
167 <div class="col-md-4"> 192 <div class="col-md-4">
168 <input type="number" class="form-control" id="inputNumber" placeholder="Weight"> 193 <input type="number" class="form-control" id="inputNumber" placeholder="Weight">
169 </div> 194 </div>
@@ -173,7 +198,7 @@ @@ -173,7 +198,7 @@
173 </div> 198 </div>
174 <div class="modal-footer"> 199 <div class="modal-footer">
175 <!-- Don't remove that!!! 200 <!-- Don't remove that!!!
176 - <button type="button" class="btn btn-danger btn-raised" data-dismiss="modal">Close</button>--> 201 + {# <button type="button" class="btn btn-danger btn-raised" data-dismiss="modal">Close</button>-->#}
177 202
178 <!-- Put curtom buttons here!!! --> 203 <!-- Put curtom buttons here!!! -->
179 <button type="button" class="btn btn-primary btn-raised">{% trans 'Confirm' %}</button> 204 <button type="button" class="btn btn-primary btn-raised">{% trans 'Confirm' %}</button>
@@ -182,86 +207,3 @@ @@ -182,86 +207,3 @@
182 </div> 207 </div>
183 </div> 208 </div>
184 <!-- EndModal --> 209 <!-- EndModal -->
185 -  
186 -<!-- MODAL ACTIVITIES-->  
187 -<div class="modal fade" id="ActivityModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">  
188 - <div class="modal-dialog" role="document">  
189 - <div class="modal-content">  
190 - <div class="modal-header">  
191 - <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>  
192 - <h4 class="modal-title" id="myModalLabel"></h4>  
193 - </div>  
194 - <div class="modal-body">  
195 - <form class="form-horizontal">  
196 -  
197 - <fieldset>  
198 - <legend>{% trans 'Proposal Activity' %}</legend>  
199 - <div class="form-group is-empty">  
200 - <label for="NameIn" class="col-md-2 control-label">{% trans 'Name' %}:</label>  
201 - <div class="col-md-10">  
202 - <input type="text" id="NameIn" class="form-control">  
203 - </div>  
204 - </div>  
205 - <div class="form-group is-empty">  
206 - <label for="DescIn" class="col-md-2 control-label">{% trans 'Describe' %}:</label>  
207 - <div class="col-md-10">  
208 - <textarea class="form-control" id="DescIn" rows="2"></textarea>  
209 - </div>  
210 - </div>  
211 - <div class="form-group is-empty">  
212 - <label for="DateIn" class="col-md-2 control-label">{% trans 'Opening' %}: </label>  
213 - <div class="col-md-10">  
214 - <input type="text" id="DateIn" class="form-control date-picker" requerid="">  
215 - </div>  
216 - </div>  
217 - <div class="form-group is-empty">  
218 - <label for="DateIn" class="col-md-2 control-label">{% trans 'Ending' %}: </label>  
219 - <div class="col-md-10">  
220 - <input type="text" id="DateIn" class="form-control date-picker" requerid="">  
221 - </div>  
222 - </div>  
223 - <div class="form-group" style="margin-top: 0;">  
224 - <div class="col-md-offset-2 col-md-10">  
225 - <div class="checkbox">  
226 - <label>  
227 - <input type="checkbox"><span class="checkbox-material"><span class="check"></span></span> {% trans 'Send Later' %}  
228 - </label>  
229 - </div>  
230 - </div>  
231 - </div>  
232 - <div class="form-group">  
233 - <div class="col-md-10 col-md-offset-2">  
234 - <button type="button" class="btn btn-default">{% trans 'Cancel' %}</button>  
235 - <button type="submit" class="btn btn-primary">{% trans 'Submit' %}</button>  
236 - </div>  
237 - </div>  
238 -  
239 -  
240 - </fieldset>  
241 - </form>  
242 - </div>  
243 - </div>  
244 - </div>  
245 -</div>  
246 -<!--EndModal-->  
247 -  
248 -  
249 -  
250 -<div class="modal fade" id="createForum" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">  
251 - <div class="modal-dialog" role="document">  
252 - <div class="modal-content">  
253 - <div class="modal-header">  
254 - <h4 class="modal-title" id="myModalLabel">{% trans 'Forum' %}</h4>  
255 - </div>  
256 - <div class="modal-body">  
257 - <section>  
258 - <div class="forum_form"></div>  
259 - </section>  
260 - </div>  
261 - <div class="modal-footer">  
262 - <button type="button" class="btn btn-danger btn-raised" data-dismiss="modal">{% trans 'Close' %}</button>  
263 - <button type="button" onclick="$('#forum_create').submit();" class="btn btn-primary btn-raised">{% trans 'Create' %}</button>  
264 - </div>  
265 - </div>  
266 - </div>  
267 -</div>  
courses/templates/subject/index.html
@@ -2,103 +2,148 @@ @@ -2,103 +2,148 @@
2 2
3 {% load static i18n permission_tags professor_access %} 3 {% load static i18n permission_tags professor_access %}
4 4
  5 +{% block javascript %}
  6 + <script type="text/javascript" src="{% static 'js/forum.js' %}"></script>
  7 + <script src="{% static 'js/file.js' %}"></script>
  8 + <script type="text/javascript" src="{% static 'js/material.js' %}"></script>
  9 + <script type="text/javascript" src="{% static 'js/modals_requisitions.js' %}"></script>
  10 + <script type = "text/javascript" src="{% static 'js/topic_editation_presentation.js' %}"></script>
  11 + <script type = "text/javascript" src="{% static 'js/links.js' %}"></script>
  12 + <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
  13 + <script src="{% static 'js/modal_poll.js' %}"></script>
  14 +{% endblock %}
  15 +
5 {% block breadcrumbs %} 16 {% block breadcrumbs %}
6 -<ol class="breadcrumb">  
7 - <li><a href="{% url 'app:index' %}">{% trans 'Home' %}</a></li>  
8 - <li><a href="{% url 'course:manage' %}">{% trans 'Courses' %}</a></li>  
9 - <li><a href="{% url 'course:view' course.slug %}">{{ course }}</a></li>  
10 - <li class="active">{{ subject }}</li>  
11 -</ol> 17 + <ol class="breadcrumb">
  18 + <li><a href="{% url 'app:index' %}">{% trans 'Home' %}</a></li>
  19 + <li><a href="{% url 'course:manage' %}">{% trans 'Courses' %}</a></li>
  20 + <li><a href="{% url 'course:view' course.slug %}">{{ course }}</a></li>
  21 + <li class="active">{{ subject }}</li>
  22 + </ol>
12 {% endblock %} 23 {% endblock %}
13 {% block sidebar %} 24 {% block sidebar %}
14 -<div class="panel panel-primary"> 25 + <div class="panel panel-primary">
15 <div class="panel-heading"> 26 <div class="panel-heading">
16 - <h4>{% trans 'Menu' %}</h4> 27 + <h4>{% trans 'Menu' %}</h4>
17 </div> 28 </div>
18 <div class="panel-body"> 29 <div class="panel-body">
19 - <ul class="nav nav-pills nav-stacked">  
20 - <li><a href="{% url 'app:index' %}">{% trans 'Home' %}</a></li>  
21 - <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li>  
22 - {% if user|has_role:'student' or not user.is_staff %}  
23 - <li><a href="{% url 'course:manage' %}">{% trans 'My courses' %}</a></li>  
24 - <li><a href="{% url 'core:guest' %}">{% trans 'All Courses' %}</a></li>  
25 - {% endif %}  
26 - <li><a href="{% url 'core:guest' %}">{% trans 'Courses' %}</a></li>  
27 - {% if user|has_role:'system_admin' %}  
28 - <li> <a href="{% url 'users:manage' %}">{% trans 'Manage Users' %}</a></li>  
29 - {% endif %}  
30 - {% if user|has_role:'system_admin' or user|has_role:'professor' %}  
31 - <li>  
32 - <a href="#courses_list" class="accordion" data-toggle="collapse">{% trans 'Manage Courses' %}</a>  
33 - <div id="courses_list" class="collapse">  
34 - <ul class="nav nav-pill nav-stacked accordion_list">  
35 - {% for course in courses_list %}  
36 - <li><a href="{% url 'course:view' course.slug %}">{{ course }}</a></li>  
37 - {% endfor %}  
38 - </ul>  
39 - </div>  
40 - </li>  
41 - {% endif %}  
42 - </ul> 30 + <ul class="nav nav-pills nav-stacked">
  31 + <li><a href="{% url 'app:index' %}">{% trans 'Home' %}</a></li>
  32 + <li><a href="{% url 'users:profile' %}">{% trans 'Profile' %}</a></li>
  33 + {% if user|has_role:'student' or not user.is_staff %}
  34 + <li><a href="{% url 'course:manage' %}">{% trans 'My courses' %}</a></li>
  35 + <li><a href="{% url 'core:guest' %}">{% trans 'All Courses' %}</a></li>
  36 + {% endif %}
  37 + <li><a href="{% url 'core:guest' %}">{% trans 'Courses' %}</a></li>
  38 + {% if user|has_role:'system_admin' %}
  39 + <li> <a href="{% url 'users:manage' %}">{% trans 'Manage Users' %}</a></li>
  40 + {% endif %}
  41 + {% if user|has_role:'system_admin' or user|has_role:'professor' %}
  42 + <li>
  43 + <a href="#courses_list" class="accordion" data-toggle="collapse">{% trans 'Manage Courses' %}</a>
  44 + <div id="courses_list" class="collapse">
  45 + <ul class="nav nav-pill nav-stacked accordion_list">
  46 + {% for course in courses_list %}
  47 + <li><a href="{% url 'course:view' course.slug %}">{{ course }}</a></li>
  48 + {% endfor %}
  49 + </ul>
  50 + </div>
  51 + </li>
  52 + {% endif %}
  53 + </ul>
43 </div> 54 </div>
44 -</div> 55 + </div>
45 56
46 57
47 {% endblock %} 58 {% endblock %}
48 59
49 {% block content %} 60 {% block content %}
50 - <div class="panel panel-info">  
51 - <div class="panel-heading course-detail"> 61 + <div class="panel panel-info">
  62 + <div class="panel-heading course-detail">
52 <div class="row"> 63 <div class="row">
53 - <div class="col-md-10 col-sm-10">  
54 - <h4>{{subject}}</h4>  
55 - </div>  
56 - <div class="col-xs-4 col-md-2 divMoreActions">  
57 - {% professor_subject subject user as subject_professor%}  
58 - {% if subject_professor %}  
59 - <div class="btn-group">  
60 - <button class="btn btn-default btn-sm dropdown-toggle" type="button" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">  
61 - <i class="fa fa-ellipsis-v fa-2x" aria-hidden="true"></i>  
62 - </button>  
63 - <ul class="dropdown-menu pull-right" aria-labelledby="moreActions">  
64 - <li><a href="{% url 'course:replicate_subject' subject.slug %}"><i class="fa fa-files-o fa-fw" aria-hidden="true"></i>&nbsp; {% trans "Replicate" %}</a></li>  
65 - <li><a href="{% url 'course:update_subject' subject.slug %}" <i class="fa fa-pencil fa-fw" aria-hidden="true"></i>&nbsp; {% trans "Edit" %}</a></li>  
66 - <li><a href="{% url 'course:delete_subject' subject.slug %}" ><i class="fa fa-trash fa-fw" aria-hidden="true"></i>&nbsp; {% trans "Remove" %}</a></li>  
67 - </ul>  
68 - </div>  
69 - {% endif %}  
70 - </div>  
71 - </div>  
72 - </div>  
73 - <div class="panel-body">  
74 - <p><b>{% trans "Professor" %}:</b> {% for professor in subject.professors.all %}{% if not forloop.first %},{% endif %}  
75 - {{professor}}{% if forloop.last %}.{% endif %}{% endfor %}</p>  
76 - <p>  
77 - <b>{% trans "Description" %}:</b>  
78 - {{subject.description|safe}}  
79 - </p>  
80 - <div class="row">  
81 - <div class="col-xs-6 col-md-6">  
82 - <p><b>{% trans "Beginning" %}:</b> {{subject.init_date}}</p>  
83 - </div>  
84 - <div class="col-xs-6 col-md-6">  
85 - <p><b>{% trans "End" %}:</b> {{subject.end_date}}</p>  
86 - </div> 64 + <div class="col-md-10 col-sm-10">
  65 + <h4>{{subject}}</h4>
  66 + </div>
  67 +
  68 + {# dropdown de subject com as opções de replicar, editar e deletar #}
  69 + <div class="col-xs-4 col-md-2 divMoreActions">
  70 + {% professor_subject subject user as subject_professor%}
  71 + {% if subject_professor %}
  72 + <div class="btn-group">
  73 + <button class="btn btn-default btn-sm dropdown-toggle" type="button" id="moreActions" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  74 + <i class="fa fa-ellipsis-v fa-2x" aria-hidden="true"></i>
  75 + </button>
  76 + <ul class="dropdown-menu pull-right" aria-labelledby="moreActions">
  77 + <li><a href="{% url 'course:replicate_subject' subject.slug %}"><i class="fa fa-files-o fa-fw" aria-hidden="true"></i>&nbsp; {% trans "Replicate" %}</a></li>
  78 + <li><a href="{% url 'course:update_subject' subject.slug %}" <i class="fa fa-pencil fa-fw" aria-hidden="true"></i>&nbsp; {% trans "Edit" %}</a></li>
  79 + <li><a href="{% url 'course:delete_subject' subject.slug %}" ><i class="fa fa-trash fa-fw" aria-hidden="true"></i>&nbsp; {% trans "Remove" %}</a></li>
  80 + </ul>
87 </div> 81 </div>
88 - </div> 82 + {% endif %}
  83 + </div>
  84 +
  85 + </div>
89 </div> 86 </div>
90 - {% for topic in topics %}  
91 - {% professor_subject topic.subject user as topic_professor%}  
92 - {% if topic_professor %}  
93 - {% include "subject/form_view_teacher.html" %}  
94 - {% else %}  
95 - {% include "subject/form_view_student.html" %}  
96 - {% endif %}  
97 - {% endfor %}  
98 - {% professor_subject subject user as professor_sub %}  
99 - {% if professor_sub %}  
100 - <div class="form-group">  
101 - <a href="{% url 'course:create_topic' subject.slug %}" data-toggle="modal" data-target="" class="btn btn-primary btn-lg btn-block btn-raised" name="create_topic">{% trans "Create Topic" %}<div class="ripple-container"></div></a> 87 +
  88 + {# informações do subject(professor, descrição etc) #}
  89 + <div class="panel-body">
  90 + <p><b>{% trans "Professor" %}:</b> {% for professor in subject.professors.all %}{% if not forloop.first %},{% endif %}
  91 + {{professor}}{% if forloop.last %}.{% endif %}{% endfor %}</p>
  92 + <p>
  93 + <b>{% trans "Description" %}:</b>
  94 + {{subject.description|safe}}
  95 + </p>
  96 + <div class="row">
  97 + <div class="col-xs-6 col-md-6">
  98 + <p><b>{% trans "Beginning" %}:</b> {{subject.init_date}}</p>
  99 + </div>
  100 + <div class="col-xs-6 col-md-6">
  101 + <p><b>{% trans "End" %}:</b> {{subject.end_date}}</p>
  102 + </div>
102 </div> 103 </div>
103 - {% endif %} 104 + </div>
  105 +
  106 + </div>
  107 +
  108 + {# lista de tópicos #}
  109 + {% for topic in topics %}
  110 + {% professor_subject topic.subject user as topic_professor%}
  111 + {% if topic_professor %}
  112 + {% include "subject/form_view_teacher.html" %}
  113 + {% else %}
  114 + {% include "subject/form_view_student.html" %}
  115 + {% endif %}
  116 + {% endfor %}
  117 +
  118 + {# botão create topic #}
  119 + {% professor_subject subject user as professor_sub %}
  120 + {% if professor_sub %}
  121 + <div class="form-group">
  122 + <a href="{% url 'course:create_topic' subject.slug %}" data-toggle="modal" data-target="" class="btn btn-primary btn-lg btn-block btn-raised" name="create_topic">{% trans "Create Topic" %}<div class="ripple-container"></div></a>
  123 + </div>
  124 + {% endif %}
  125 +
  126 + {# local onde vai ser colocado todos os HTML's que retornan de uma requisição ajax feitas dentro de subject #}
  127 + <div class = 'row' id ="requisicoes_ajax">
  128 + {# Não mudar o id #}
  129 + </div>
  130 +
  131 + <div class="modal fade" id="createForum" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
  132 + <div class="modal-dialog" role="document">
  133 + <div class="modal-content">
  134 + <div class="modal-header">
  135 + <h4 class="modal-title" id="myModalLabel">{% trans 'Forum' %}</h4>
  136 + </div>
  137 + <div class="modal-body">
  138 + <section>
  139 + <div class="forum_form"></div>
  140 + </section>
  141 + </div>
  142 + <div class="modal-footer">
  143 + <button type="button" class="btn btn-default btn-raised" data-dismiss="modal">{% trans 'Close' %}</button>
  144 + <button type="button" onclick="$('#forum_create').submit();" class="btn btn-primary btn-raised">{% trans 'Create' %}</button>
  145 + </div>
  146 + </div>
  147 + </div>
  148 + </div>
104 {% endblock %} 149 {% endblock %}
courses/templates/subject/poll_item_actions.html
1 {% load static i18n permission_tags professor_access %} 1 {% load static i18n permission_tags professor_access %}
2 2
3 -<script src="{% static 'js/modals_requisitions.js'%}"></script>  
4 -<script src="{% static 'js/modal_poll.js'%}"></script>  
5 -  
6 -{% for poll in polls %}  
7 - {% professor_subject poll.topic.subject request.user as permission%}  
8 - {% if permission %}  
9 - <li id="poll_{{poll.slug}}"><i class="material-icons">{% trans 'poll' %}</i> <a href="javascript:modal.get('{% url 'course:poll:update_poll' poll.slug %}','#poll','#modal_poll');">{{ poll.name }}</a><a href="javascript:modal.get('{% url 'course:poll:delete_poll' poll.slug %}','#poll','#modal_poll');"><span class="glyphicon glyphicon-remove"></span></a></li>  
10 - {% else %}  
11 - <li id="poll_{{poll.slug}}"><i class="material-icons">{% trans 'poll' %}</i> <a href="javascript:modal.get('{% url 'course:poll:view_poll' poll.slug %}','#poll','#modal_poll');">{{ poll.name }}</a></li>  
12 - {% endif %} 3 +<div id="list-topic-{{ topic.slug }}-poll">
  4 + {% for poll in polls %}
  5 + <li id="poll_{{poll.slug}}"><i class="fa fa-bar-chart"></i> <a href="javascript:modal.get('{% url 'course:poll:view_poll' poll.slug %}','#poll','#requisicoes_ajax');">{{ poll }}</a></li>
13 {% endfor %} 6 {% endfor %}
14 -{# <button class="btn btn-primary btn-raised" onclick="javascript:modal.get('{% url 'course:poll:create_poll' topic.slug%}','#poll','#modal_poll');">{% trans '+ Create Poll' %}</button> #}  
15 -<div class="row" id="modal_poll">  
16 -  
17 </div> 7 </div>
courses/templates/subject/poll_item_actions_teacher.html 0 → 100644
@@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
  1 +{% load static i18n permission_tags professor_access %}
  2 +
  3 +<div id="list-topic-{{ topic.slug }}-poll-edit">
  4 + {% for poll in polls %}
  5 + <div id="poll_{{poll.slug}}_div">
  6 + <li class="icon_edit_remove" ><a href="javascript:modal.get('{% url 'course:poll:update_poll' poll.slug %}','#poll','#requisicoes_ajax');"><i class="fa fa-pencil fa-lg" aria-hidden="true"></i></a> <a href="javascript:modal.get('{% url 'course:poll:delete_poll' poll.slug %}','#poll','#requisicoes_ajax');"><i class="fa fa-trash fa-lg" aria-hidden="true"></i></a></li>
  7 + <li><i class="fa fa-bar-chart"></i> <a href="javascript:modal.get('{% url 'course:poll:view_poll' poll.slug %}','#poll','#requisicoes_ajax');">{{poll}}</a></li>
  8 + </div>
  9 + {% endfor %}
  10 +</div>
courses/templates/topic/delete.html 0 → 100644
@@ -0,0 +1,36 @@ @@ -0,0 +1,36 @@
  1 +{% load static i18n permission_tags %}
  2 +
  3 +<!-- Modal (remember to change the ids!!!) -->
  4 +<div class="modal fade" id="subject" tabindex="-1" role="dialog" aria-labelledby="{{topic.slug}}_delete">
  5 + <div class="modal-dialog" role="document">
  6 + <div class="modal-content">
  7 + <!-- Modal Header -->
  8 + <div class="modal-header">
  9 +
  10 + <h4 class="modal-title" id="{{topic.slug}}_delete">{% trans "Delete Course" %}</h4>
  11 + </div>
  12 + <!-- Modal Body -->
  13 + <div class="modal-body">
  14 + <!-- Put ONLY your content here!!! -->
  15 + <form id="delete_topic_{{topic.slug}}" action="" method="post">
  16 + {% csrf_token %}
  17 + <p>{% trans 'Are you sure you want to delete the subject' %} "{{subject.name}}"?</p>
  18 + </form>
  19 + </div>
  20 + <!-- Modal Footer -->
  21 + <div class="modal-footer">
  22 + <!-- Don't remove that!!! -->
  23 + <button type="button" class="btn btn-danger btn-raised" data-dismiss="modal">{% trans "Close" %}</button>
  24 + <button type="submit" id="button" form="delete_topic_{{topic.slug}}" class="btn btn-primary btn-raised">{% trans "Delete" %}</button>
  25 + <script>
  26 + $("#delete_topic_{{topic.slug}}").submit(function(event) {
  27 + RemoveCourse.remove("{% url 'course:delete_subject' subject.slug %}",$(this).serialize(),"#subject_{{subject.slug}}");
  28 + event.preventDefault();
  29 + });
  30 + </script>
  31 + </div>
  32 + </div>
  33 + </div>
  34 +</div>
  35 +<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
  36 +<script src="{% static 'js/modal_subject.js' %}"></script>
courses/templates/topic/link_topic_list.html
1 {% load static i18n list_topic_foruns permission_tags %} 1 {% load static i18n list_topic_foruns permission_tags %}
2 <div id="list-topic{{ topic.id }}-links"> 2 <div id="list-topic{{ topic.id }}-links">
3 {% for link in links%} 3 {% for link in links%}
4 - <li id = "link_{{ link.slug }}"><i class="fa fa-link" aria-hidden="true"></i> <a href="javascript:modal.get('{% url 'course:links:view_link' link.slug %}', '#viewLinkModal','#divModalLink')">{{link.name}}</a></li> 4 + <li id = "link_{{ link.slug }}"><i class="fa fa-link" aria-hidden="true"></i> <a href="javascript:modal.get('{% url 'course:links:view_link' link.slug %}', '#viewLinkModal','#requisicoes_ajax')">{{link.name}}</a></li>
5 {% endfor %} 5 {% endfor %}
6 </div> 6 </div>
7 -<div class = 'row' id ="divModalLink">  
8 -  
9 -</div>  
courses/templates/topic/link_topic_list_edit.html
1 {% load static i18n list_topic_foruns permission_tags %} 1 {% load static i18n list_topic_foruns permission_tags %}
2 <div id="list-topic{{ topic.id }}-links-edit"> 2 <div id="list-topic{{ topic.id }}-links-edit">
3 -{% for link in links%}  
4 -  
5 - <li class="icon_edit_remove" id = "link_edit_icon_{{ link.slug }}"> <a href="javascript:modal.get('{% url 'course:links:update_link' link.slug %}', '#linksModalEdit', '#divModalLinkUpdate')"><i class="fa fa-pencil fa-lg" aria-hidden="true"></i></a> <a href="javascript:modal.get('{% url 'course:links:delete_link' link.slug %}', '#linkDeleteModal', '#divModalLinkUpdate')"><i class="fa fa-trash fa-lg" aria-hidden="true"></i></a></li>  
6 - <li id = "link_edit_{{ link.slug }}"><i class="fa fa-link" aria-hidden="true"></i> <a href="javascript:modal.get('{% url 'course:links:view_link' link.slug %}', '#viewLinkModal','#divModalLink')">{{link.name}}</a></li>  
7 -  
8 -{% endfor %}  
9 -</div>  
10 -  
11 -<div class="row" id="divModalLinkUpdate">  
12 - 3 + {% for link in links%}
  4 + <li class="icon_edit_remove" id = "link_edit_icon_{{ link.slug }}"> <a href="javascript:modal.get('{% url 'course:links:update_link' link.slug %}', '#linksModalEdit', '#requisicoes_ajax')"><i class="fa fa-pencil fa-lg" aria-hidden="true"></i></a> <a href="javascript:modal.get('{% url 'course:links:delete_link' link.slug %}', '#linkDeleteModal', '#requisicoes_ajax')"><i class="fa fa-trash fa-lg" aria-hidden="true"></i></a></li>
  5 + <li id = "link_{{ link.slug }}"><i class="fa fa-link" aria-hidden="true"></i> <a href="javascript:modal.get('{% url 'course:links:view_link' link.slug %}', '#viewLinkModal','#requisicoes_ajax')">{{link.name}}</a></li>
  6 + {% endfor %}
13 </div> 7 </div>
courses/templates/topic/list_file.html
@@ -3,10 +3,10 @@ @@ -3,10 +3,10 @@
3 <div id="list-topic{{ topic.id }}-files"> 3 <div id="list-topic{{ topic.id }}-files">
4 {% for file in files %} 4 {% for file in files %}
5 <li id="file_{{ file.slug }}"><i class="material-icons">{{ file.file_type.icon }}</i> <a href="{% url 'course:file_material_view' file.slug %}" target="_blank">{{ file.name }}</a></li> 5 <li id="file_{{ file.slug }}"><i class="material-icons">{{ file.file_type.icon }}</i> <a href="{% url 'course:file_material_view' file.slug %}" target="_blank">{{ file.name }}</a></li>
6 - {% endfor %} 6 + {% endfor %}
7 </div> 7 </div>
8 -  
9 8
10 -<div class="row" id="divModalFile">  
11 9
12 -</div> 10 +{# <div class="row" id="divModalFile">#}
  11 +
  12 +{# </div>#}
courses/templates/topic/list_file_edit.html
@@ -2,11 +2,11 @@ @@ -2,11 +2,11 @@
2 2
3 <div id="list-topic{{ topic.id }}-files-edit"> 3 <div id="list-topic{{ topic.id }}-files-edit">
4 {% for file in files %} 4 {% for file in files %}
5 - <li class="icon_edit_remove" id="file_edit_icon_{{ file.slug }}"> <a href="javascript:modal.get('{% url 'course:file:update_file' file.slug %}', '#fileUpdateModal', '#divModalFileUpdate')" ><i class="fa fa-pencil fa-lg" aria-hidden="true"></i></a> <a href="javascript:modal.get('{% url 'course:file:delete_file' file.slug %}', '#fileDeleteModal', '#divModalFileUpdate')"><i class="fa fa-trash fa-lg" aria-hidden="true"></i></a></li> 5 + <li class="icon_edit_remove" id="file_edit_icon_{{ file.slug }}"> <a href="javascript:modal.get('{% url 'course:file:update_file' file.slug %}', '#fileUpdateModal', '#requisicoes_ajax')" ><i class="fa fa-pencil fa-lg" aria-hidden="true"></i></a> <a href="javascript:modal.get('{% url 'course:file:delete_file' file.slug %}', '#fileDeleteModal', '#requisicoes_ajax')"><i class="fa fa-trash fa-lg" aria-hidden="true"></i></a></li>
6 <li id="file_edit_{{ file.slug }}"><i class="material-icons">{{ file.file_type.icon }}</i> <a href="{{ file.file_url.url }}" target="_blank">{{ file.name }}</a></li> 6 <li id="file_edit_{{ file.slug }}"><i class="material-icons">{{ file.file_type.icon }}</i> <a href="{{ file.file_url.url }}" target="_blank">{{ file.name }}</a></li>
7 {% endfor %} 7 {% endfor %}
8 </div> 8 </div>
9 9
10 -<div class="row" id="divModalFileUpdate"> 10 +{# <div class="row" id="divModalFileUpdate">#}
11 11
12 -</div>  
13 \ No newline at end of file 12 \ No newline at end of file
  13 +{# </div>#}
courses/templatetags/list_topic_foruns.py
@@ -31,6 +31,17 @@ def list_topic_poll(request, topic): @@ -31,6 +31,17 @@ def list_topic_poll(request, topic):
31 31
32 return context 32 return context
33 33
  34 +@register.inclusion_tag('subject/poll_item_actions_teacher.html')
  35 +def list_topic_poll_teacher(request, topic):
  36 + context = {
  37 + 'request': request,
  38 + }
  39 +
  40 + context['polls'] = Poll.objects.filter(topic = topic)
  41 + context['topic'] = topic
  42 +
  43 + return context
  44 +
34 @register.inclusion_tag('topic/list_file.html') 45 @register.inclusion_tag('topic/list_file.html')
35 def list_topic_file(request, topic): 46 def list_topic_file(request, topic):
36 context = { 47 context = {
courses/urls.py
@@ -22,6 +22,7 @@ urlpatterns = [ @@ -22,6 +22,7 @@ urlpatterns = [
22 url(r'^subjects/subscribe/(?P<slug>[\w_-]+)/$', views.subscribe_subject, name='subscribe_subject'), 22 url(r'^subjects/subscribe/(?P<slug>[\w_-]+)/$', views.subscribe_subject, name='subscribe_subject'),
23 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'),
24 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'),
  25 + url(r'^topics/update/(?P<slug>[\w_-]+)/$', views.DeleteTopic.as_view(), name='update_topic'),
25 url(r'^topics/(?P<slug>[\w_-]+)/$', views.TopicsView.as_view(), name='view_topic'), 26 url(r'^topics/(?P<slug>[\w_-]+)/$', views.TopicsView.as_view(), name='view_topic'),
26 url(r'^subjects/categories$',views.IndexSubjectCategoryView.as_view(), name='subject_category_index'), 27 url(r'^subjects/categories$',views.IndexSubjectCategoryView.as_view(), name='subject_category_index'),
27 url(r'^forum/', include('forum.urls', namespace = 'forum')), 28 url(r'^forum/', include('forum.urls', namespace = 'forum')),
courses/views.py
@@ -142,7 +142,7 @@ class AllCoursesView(LoginRequiredMixin, NotificationMixin, generic.ListView): @@ -142,7 +142,7 @@ class AllCoursesView(LoginRequiredMixin, NotificationMixin, generic.ListView):
142 context['aparece'] = self.aparece 142 context['aparece'] = self.aparece
143 143
144 return context 144 return context
145 - 145 +
146 class CreateCourseView(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMixin, generic.edit.CreateView): 146 class CreateCourseView(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMixin, generic.edit.CreateView):
147 log_component = "course" 147 log_component = "course"
148 log_resource = "course" 148 log_resource = "course"
@@ -314,7 +314,7 @@ class DeleteCourseView(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.Delet @@ -314,7 +314,7 @@ class DeleteCourseView(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.Delet
314 self.log_context['course_category_name'] = self.object.category.name 314 self.log_context['course_category_name'] = self.object.category.name
315 315
316 super(DeleteCourseView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) 316 super(DeleteCourseView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context)
317 - 317 +
318 return reverse_lazy('course:manage') 318 return reverse_lazy('course:manage')
319 319
320 320
@@ -359,7 +359,7 @@ class CourseView(LogMixin, NotificationMixin, generic.DetailView): @@ -359,7 +359,7 @@ class CourseView(LogMixin, NotificationMixin, generic.DetailView):
359 if not category_sub is None: 359 if not category_sub is None:
360 cat = get_object_or_404(CategorySubject, slug = category_sub) 360 cat = get_object_or_404(CategorySubject, slug = category_sub)
361 subjects = subjects.filter(category = cat) 361 subjects = subjects.filter(category = cat)
362 - 362 +
363 context['subjects'] = subjects 363 context['subjects'] = subjects
364 364
365 if has_role(self.request.user,'system_admin'): 365 if has_role(self.request.user,'system_admin'):
@@ -389,12 +389,12 @@ class CourseView(LogMixin, NotificationMixin, generic.DetailView): @@ -389,12 +389,12 @@ class CourseView(LogMixin, NotificationMixin, generic.DetailView):
389 389
390 return context 390 return context
391 391
392 -class DeleteView(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.DeleteView): 392 +class DeleteTopic(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.DeleteView):
393 393
394 allowed_roles = ['professor', 'system_admin'] 394 allowed_roles = ['professor', 'system_admin']
395 login_url = reverse_lazy("core:home") 395 login_url = reverse_lazy("core:home")
396 redirect_field_name = 'next' 396 redirect_field_name = 'next'
397 - model = Course 397 + model = Topic
398 template_name = 'course/delete.html' 398 template_name = 'course/delete.html'
399 success_url = reverse_lazy('course:manage') 399 success_url = reverse_lazy('course:manage')
400 400
@@ -412,7 +412,7 @@ def subscribe_course(request, slug): @@ -412,7 +412,7 @@ def subscribe_course(request, slug):
412 412
413 if request.user in course.students.all(): 413 if request.user in course.students.all():
414 414
415 - log_context = {} 415 + log_context = {}
416 log_context['course_id'] = course.id 416 log_context['course_id'] = course.id
417 log_context['course_name'] = course.name 417 log_context['course_name'] = course.name
418 log_context['course_slug'] = course.slug 418 log_context['course_slug'] = course.slug
@@ -665,7 +665,7 @@ class TopicsView(LoginRequiredMixin, LogMixin, generic.ListView): @@ -665,7 +665,7 @@ class TopicsView(LoginRequiredMixin, LogMixin, generic.ListView):
665 topic = get_object_or_404(Topic, slug = self.kwargs.get('slug')) 665 topic = get_object_or_404(Topic, slug = self.kwargs.get('slug'))
666 subject = topic.subject 666 subject = topic.subject
667 topics_q = Topic.objects.filter(subject = subject, visible=True) 667 topics_q = Topic.objects.filter(subject = subject, visible=True)
668 - 668 +
669 return topics_q 669 return topics_q
670 670
671 def get_context_data(self, **kwargs): 671 def get_context_data(self, **kwargs):
@@ -681,7 +681,7 @@ class TopicsView(LoginRequiredMixin, LogMixin, generic.ListView): @@ -681,7 +681,7 @@ class TopicsView(LoginRequiredMixin, LogMixin, generic.ListView):
681 context['students_activit'] = students_activit 681 context['students_activit'] = students_activit
682 context['materials'] = materials 682 context['materials'] = materials
683 context['form'] = ActivityForm 683 context['form'] = ActivityForm
684 - 684 +
685 return context 685 return context
686 686
687 687
@@ -716,7 +716,7 @@ class CreateTopicView(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMi @@ -716,7 +716,7 @@ class CreateTopicView(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMi
716 self.object.owner = self.request.user 716 self.object.owner = self.request.user
717 self.object.save() 717 self.object.save()
718 action = super(CreateTopicView, self).createorRetrieveAction("create Topic") 718 action = super(CreateTopicView, self).createorRetrieveAction("create Topic")
719 - super(CreateTopicView, self).createNotification("Topic "+ self.object.name + " was created", 719 + super(CreateTopicView, self).createNotification("Topic "+ self.object.name + " was created",
720 resource_name=self.object.name, resource_link= reverse('course:view_topic',args=[self.object.slug]), 720 resource_name=self.object.name, resource_link= reverse('course:view_topic',args=[self.object.slug]),
721 actor=self.request.user, users = self.object.subject.course.students.all() ) 721 actor=self.request.user, users = self.object.subject.course.students.all() )
722 722
@@ -733,7 +733,7 @@ class CreateTopicView(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMi @@ -733,7 +733,7 @@ class CreateTopicView(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMi
733 self.log_context['course_category_name'] = self.object.subject.course.category.name 733 self.log_context['course_category_name'] = self.object.subject.course.category.name
734 734
735 super(CreateTopicView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) 735 super(CreateTopicView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context)
736 - 736 +
737 return super(CreateTopicView, self).form_valid(form) 737 return super(CreateTopicView, self).form_valid(form)
738 738
739 class UpdateTopicView(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.UpdateView): 739 class UpdateTopicView(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.UpdateView):
@@ -939,7 +939,7 @@ def subscribe_subject(request, slug): @@ -939,7 +939,7 @@ def subscribe_subject(request, slug):
939 subject.students.add(request.user) 939 subject.students.add(request.user)
940 940
941 if request.user in subject.students.all(): 941 if request.user in subject.students.all():
942 - log_context = {} 942 + log_context = {}
943 log_context['subject_id'] = subject.id 943 log_context['subject_id'] = subject.id
944 log_context['subject_name'] = subject.name 944 log_context['subject_name'] = subject.name
945 log_context['subject_slug'] = subject.slug 945 log_context['subject_slug'] = subject.slug
links/static/js/links.js
@@ -4,5 +4,4 @@ function get_modal_link(url, id,div_content){ @@ -4,5 +4,4 @@ function get_modal_link(url, id,div_content){
4 $(div_content).append(data); 4 $(div_content).append(data);
5 $(id).modal('show'); 5 $(id).modal('show');
6 }); 6 });
7 -  
8 } 7 }
poll/models.py
@@ -12,7 +12,7 @@ class Poll(Activity): @@ -12,7 +12,7 @@ class Poll(Activity):
12 verbose_name_plural = _('Polls') 12 verbose_name_plural = _('Polls')
13 13
14 def __str__(self): 14 def __str__(self):
15 - return str(self.name) + str("/") + str(self.topic) 15 + return str(self.name)
16 16
17 class Answer(models.Model): 17 class Answer(models.Model):
18 answer = models.CharField(_("Answer"), max_length = 200) 18 answer = models.CharField(_("Answer"), max_length = 200)
poll/static/js/modal_poll.js
1 -//controles do modal  
2 -$(window).ready(function() { // utilizado para abrir o modal quando tiver tido algum erro no preenchimento do formulario  
3 - if($('.not_submited').length){  
4 - $('#poll').modal('show');  
5 - }  
6 -}); 1 +//
  2 +// //controles do modal
  3 +// $(window).ready(function() { // utilizado para abrir o modal quando tiver tido algum erro no preenchimento do formulario
  4 +// if($('.not_submited').length){
  5 +// $('#poll').modal('show');
  6 +// }
  7 +// });
  8 +
7 var Answer = { 9 var Answer = {
8 init: function(url) { // utilizado para adicionar um novo campo de resposta 10 init: function(url) { // utilizado para adicionar um novo campo de resposta
9 $.get(url, function(data){ 11 $.get(url, function(data){
@@ -17,24 +19,59 @@ var Answer = { @@ -17,24 +19,59 @@ var Answer = {
17 }; 19 };
18 20
19 var Submite = { 21 var Submite = {
20 - post: function(url,dados){ 22 + create: function(url,dados, slug){
  23 + $('#poll').modal('hide');
  24 + var poll = null;
  25 + $.post(url,dados, function(data){
  26 + $.ajax({
  27 + method: "get",
  28 + url: data["view"],
  29 + success: function(view){
  30 + $('#list-topic-'+ slug +'-poll').append(view);
  31 + }
  32 + });
  33 + $.ajax({
  34 + method: "get",
  35 + url: data["edit"],
  36 + success: function(edit){
  37 + $('#list-topic-'+ slug +'-poll-edit').append(edit);
  38 + }
  39 + });
  40 + $("#requisicoes_ajax").empty();
  41 + alertify.alert('Link successfully created!');
  42 + }).fail(function(data){
  43 + $("div.modal-backdrop.fade.in").remove();
  44 + $("#requisicoes_ajax").empty();
  45 + $("#requisicoes_ajax").append(data.responseText);
  46 + $('#poll').modal('show');
  47 + });
  48 + },
  49 + update: function(url,dados, slug_poll, slug_topic){
21 $('#poll').modal('hide'); 50 $('#poll').modal('hide');
22 $.post(url,dados, function(data){ 51 $.post(url,dados, function(data){
  52 + $('#list-topic-'+ slug_topic +'-poll #'+slug_poll).remove();
  53 + $('#list-topic-'+ slug_topic +'-poll #'+slug_poll).remove();
  54 + $('#list-topic-'+ slug_topic +'-poll').append(data);
  55 + $('#list-topic-'+ slug_topic +'-poll-edit').append(data);
  56 + $("#requisicoes_ajax").empty();
  57 + alertify.alert('Link successfully updated!')
23 }).fail(function(data){ 58 }).fail(function(data){
24 $("div.modal-backdrop.fade.in").remove(); 59 $("div.modal-backdrop.fade.in").remove();
25 - $("#modal_poll").empty();  
26 - $("#modal_poll").append(data.responseText); 60 + $("#requisicoes_ajax").empty();
  61 + $("#requisicoes_ajax").append(data.responseText);
  62 + $('#poll').modal('show');
27 }); 63 });
28 }, 64 },
29 remove: function(url,dados, id_li_link){ 65 remove: function(url,dados, id_li_link){
30 $('#poll').modal('hide'); 66 $('#poll').modal('hide');
31 $.post(url,dados, function(data){ 67 $.post(url,dados, function(data){
32 $(id_li_link).remove(); 68 $(id_li_link).remove();
33 - $("#modal_poll").empty(); 69 + $(id_li_link+"_div").remove();
  70 + $("#requisicoes_ajax").empty();
34 $("div.modal-backdrop.fade.in").remove(); 71 $("div.modal-backdrop.fade.in").remove();
35 }).fail(function(){ 72 }).fail(function(){
36 - $("#modal_poll").empty();  
37 - $("#modal_poll").append(data); 73 + $("#requisicoes_ajax").empty();
  74 + $("#requisicoes_ajax").append(data);
38 $('#poll').modal('show'); 75 $('#poll').modal('show');
39 }); 76 });
40 } 77 }
poll/templates/poll/create.html
@@ -2,13 +2,6 @@ @@ -2,13 +2,6 @@
2 2
3 {% load i18n widget_tweaks dict_access static%} 3 {% load i18n widget_tweaks dict_access static%}
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_poll.js' %}"></script>  
8 -  
9 -{# {% endblock %} #}  
10 -  
11 -{# {% block content %} #}  
12 <!-- Modal (remember to change the ids!!!) --> 5 <!-- Modal (remember to change the ids!!!) -->
13 <div class="modal fade" id="poll" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> 6 <div class="modal fade" id="poll" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
14 <div class="modal-dialog" role="document"> 7 <div class="modal-dialog" role="document">
@@ -178,7 +171,7 @@ @@ -178,7 +171,7 @@
178 }); 171 });
179 172
180 $("#form").submit(function(event) { 173 $("#form").submit(function(event) {
181 - Submite.post("{% url 'course:poll:create_poll' topic.slug %}",$(this).serialize()); 174 + Submite.create("{% url 'course:poll:create_poll' topic.slug %}",$(this).serialize(), "{{topic.slug}}");
182 event.preventDefault(); 175 event.preventDefault();
183 }); 176 });
184 </script> 177 </script>
poll/templates/poll/poll_edit.html 0 → 100644
@@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
  1 +<div id="poll_{{poll.slug}}_div">
  2 + <li class="icon_edit_remove" ><a href="javascript:modal.get('{% url 'course:poll:update_poll' poll.slug %}','#poll','#requisicoes_ajax');"><i class="fa fa-pencil fa-lg" aria-hidden="true"></i></a> <a href="javascript:modal.get('{% url 'course:poll:delete_poll' poll.slug %}','#poll','#requisicoes_ajax');"><i class="fa fa-trash fa-lg" aria-hidden="true"></i></a></li>
  3 + <li><i class="fa fa-bar-chart"></i> <a href="javascript:modal.get('{% url 'course:poll:view_poll' poll.slug %}','#poll','#requisicoes_ajax');">{{poll}}</a></li>
  4 +</div>
poll/templates/poll/poll_view.html 0 → 100644
@@ -0,0 +1 @@ @@ -0,0 +1 @@
  1 +<li id="poll_{{poll.slug}}"><i class="fa fa-bar-chart"></i> <a href="javascript:modal.get('{% url 'course:poll:view_poll' poll.slug %}','#poll','#requisicoes_ajax');">{{ poll }}</a></li>
poll/templates/poll/remove.html
@@ -10,15 +10,15 @@ @@ -10,15 +10,15 @@
10 {% block content_poll %} 10 {% block content_poll %}
11 <script src="{% static 'js/modal_poll.js' %}"></script> 11 <script src="{% static 'js/modal_poll.js' %}"></script>
12 <!-- Put ONLY your content here!!! --> 12 <!-- Put ONLY your content here!!! -->
13 -<form id="delete_form" action="" method="post"> 13 +<form id="delete_poll" action="" method="post">
14 {% csrf_token %} 14 {% csrf_token %}
15 <p>{% trans 'Are you sure you want to delete the subject' %} "{{poll.name}}"?</p> 15 <p>{% trans 'Are you sure you want to delete the subject' %} "{{poll.name}}"?</p>
16 </form> 16 </form>
17 {% endblock content_poll %} 17 {% endblock content_poll %}
18 {% block button_save %} 18 {% block button_save %}
19 -<button type="submite" id="button" form="delete_form" class="btn btn-primary btn-raised">{% trans "Delete" %}</button> 19 +<button type="submite" id="button" form="delete_poll" class="btn btn-primary btn-raised">{% trans "Delete" %}</button>
20 <script> 20 <script>
21 - $("#delete_form").submit(function(event) { 21 + $("#delete_poll").submit(function(event) {
22 Submite.remove("{% url 'course:poll:delete_poll' poll.slug %}",$(this).serialize(),"#poll_{{poll.slug}}"); 22 Submite.remove("{% url 'course:poll:delete_poll' poll.slug %}",$(this).serialize(),"#poll_{{poll.slug}}");
23 event.preventDefault(); 23 event.preventDefault();
24 }); 24 });
poll/templates/poll/update.html
@@ -25,7 +25,7 @@ @@ -25,7 +25,7 @@
25 }); 25 });
26 26
27 $("#form").submit(function(event) { 27 $("#form").submit(function(event) {
28 - Submite.post("{% url 'course:poll:update_poll' poll.slug %}",$(this).serialize()); 28 + Submite.update("{% url 'course:poll:update_poll' poll.slug %}",$(this).serialize(), "{{poll.slug}}");
29 event.preventDefault(); 29 event.preventDefault();
30 }); 30 });
31 </script> 31 </script>
@@ -9,4 +9,6 @@ urlpatterns = [ @@ -9,4 +9,6 @@ urlpatterns = [
9 url(r'^delete/(?P<slug>[\w\-_]+)/$', views.DeletePoll.as_view(), name='delete_poll'), # poll 9 url(r'^delete/(?P<slug>[\w\-_]+)/$', views.DeletePoll.as_view(), name='delete_poll'), # poll
10 url(r'^answer/$', views.AnswerPoll.as_view(), name='answer_poll'), # poll 10 url(r'^answer/$', views.AnswerPoll.as_view(), name='answer_poll'), # poll
11 url(r'^answer-poll/(?P<slug>[\w\-_]+)/$', views.AnswerStudentPoll.as_view(), name='answer_student_poll'), # poll slug 11 url(r'^answer-poll/(?P<slug>[\w\-_]+)/$', views.AnswerStudentPoll.as_view(), name='answer_student_poll'), # poll slug
  12 + url(r'^poll-view/(?P<slug>[\w\-_]+)/$', views.render_poll_view, name='render_poll_view'), # poll slug
  13 + url(r'^poll-edit/(?P<slug>[\w\-_]+)/$', views.render_poll_edit, name='render_poll_edit'), # poll slug
12 ] 14 ]
@@ -20,6 +20,8 @@ from courses.models import Course, Topic @@ -20,6 +20,8 @@ from courses.models import Course, Topic
20 20
21 import datetime 21 import datetime
22 22
  23 +from django.http import JsonResponse
  24 +
23 class ViewPoll(LoginRequiredMixin, LogMixin, generic.DetailView): 25 class ViewPoll(LoginRequiredMixin, LogMixin, generic.DetailView):
24 log_component = "poll" 26 log_component = "poll"
25 log_resource = "poll" 27 log_resource = "poll"
@@ -96,7 +98,6 @@ class CreatePoll(LoginRequiredMixin,HasRoleMixin, LogMixin, NotificationMixin,ge @@ -96,7 +98,6 @@ class CreatePoll(LoginRequiredMixin,HasRoleMixin, LogMixin, NotificationMixin,ge
96 context.context_data['keys'] = keys 98 context.context_data['keys'] = keys
97 context.context_data['form'] = form 99 context.context_data['form'] = form
98 context.status_code = 400 100 context.status_code = 400
99 - s  
100 return context 101 return context
101 102
102 def form_valid(self, form): 103 def form_valid(self, form):
@@ -107,7 +108,7 @@ class CreatePoll(LoginRequiredMixin,HasRoleMixin, LogMixin, NotificationMixin,ge @@ -107,7 +108,7 @@ class CreatePoll(LoginRequiredMixin,HasRoleMixin, LogMixin, NotificationMixin,ge
107 self.object.save() 108 self.object.save()
108 109
109 super(CreatePoll, self).createNotification(message="created a Poll at "+ self.object.topic.name, actor=self.request.user, 110 super(CreatePoll, self).createNotification(message="created a Poll at "+ self.object.topic.name, actor=self.request.user,
110 - resource_name=self.object.name, resource_link= reverse('course:view_topic', args=[self.object.topic.slug]), 111 + resource_name=self.object.name, resource_link= reverse('course:view_topic', args=[self.object.topic.slug]),
111 users=self.object.topic.subject.students.all()) 112 users=self.object.topic.subject.students.all())
112 for key in self.request.POST: 113 for key in self.request.POST:
113 if(key != 'csrfmiddlewaretoken' and key != 'name' and key != 'limit_date' and key != 'all_students' and key != 'students'): 114 if(key != 'csrfmiddlewaretoken' and key != 'name' and key != 'limit_date' and key != 'all_students' and key != 'students'):
@@ -130,7 +131,14 @@ class CreatePoll(LoginRequiredMixin,HasRoleMixin, LogMixin, NotificationMixin,ge @@ -130,7 +131,14 @@ class CreatePoll(LoginRequiredMixin,HasRoleMixin, LogMixin, NotificationMixin,ge
130 131
131 super(CreatePoll, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) 132 super(CreatePoll, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context)
132 133
133 - return self.render_to_response(self.get_context_data(form = form), status = 200) 134 + return JsonResponse({"view":reverse_lazy('course:poll:render_poll_view', kwargs={'slug' : self.object.slug}),
  135 + "edit":reverse_lazy('course:poll:render_poll_edit', kwargs={'slug' : self.object.slug}),
  136 + })
  137 +
  138 +
  139 + # def get_success_url(self):
  140 + # self.success_url = redirect('course:poll:render_poll', slug = self.object.slug)
  141 + # return self.success_url
134 142
135 def get_context_data(self, **kwargs): 143 def get_context_data(self, **kwargs):
136 context = super(CreatePoll, self).get_context_data(**kwargs) 144 context = super(CreatePoll, self).get_context_data(**kwargs)
@@ -141,6 +149,20 @@ class CreatePoll(LoginRequiredMixin,HasRoleMixin, LogMixin, NotificationMixin,ge @@ -141,6 +149,20 @@ class CreatePoll(LoginRequiredMixin,HasRoleMixin, LogMixin, NotificationMixin,ge
141 context['subjects'] = topic.subject.course.subjects.all() 149 context['subjects'] = topic.subject.course.subjects.all()
142 return context 150 return context
143 151
  152 +def render_poll_view(request, slug):
  153 + template_name = 'poll/poll_view.html'
  154 + context = {
  155 + 'poll': get_object_or_404(Poll, slug = slug)
  156 + }
  157 + return render(request, template_name, context)
  158 +
  159 +def render_poll_edit(request, slug):
  160 + template_name = 'poll/poll_edit.html'
  161 + context = {
  162 + 'poll': get_object_or_404(Poll, slug = slug)
  163 + }
  164 + return render(request, template_name, context)
  165 +
144 class UpdatePoll(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.UpdateView): 166 class UpdatePoll(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.UpdateView):
145 log_component = "poll" 167 log_component = "poll"
146 log_resource = "poll" 168 log_resource = "poll"
@@ -325,9 +347,9 @@ class AnswerStudentPoll(LoginRequiredMixin, LogMixin, generic.CreateView): @@ -325,9 +347,9 @@ class AnswerStudentPoll(LoginRequiredMixin, LogMixin, generic.CreateView):
325 347
326 date_time_click = datetime.datetime.strptime(self.request.session.get('time_spent'), "%Y-%m-%d %H:%M:%S.%f") 348 date_time_click = datetime.datetime.strptime(self.request.session.get('time_spent'), "%Y-%m-%d %H:%M:%S.%f")
327 _now = datetime.datetime.now() 349 _now = datetime.datetime.now()
328 - 350 +
329 time_spent = _now - date_time_click 351 time_spent = _now - date_time_click
330 - 352 +
331 secs = time_spent.total_seconds() 353 secs = time_spent.total_seconds()
332 hours = int(secs / 3600) 354 hours = int(secs / 3600)
333 minutes = int(secs / 60) % 60 355 minutes = int(secs / 60) % 60