Commit 524efcb7016aa3dc0945a96cdcde76bd6d2c1ab0

Authored by ailsoncgt
2 parents 745e5f6c a7e9e5ba

dev merge

courses/templates/subject/form_view_teacher.html
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
4 <script type="text/javascript" src="{% static 'js/forum.js' %}"></script> 4 <script type="text/javascript" src="{% static 'js/forum.js' %}"></script>
5 <script src="{% static 'js/file.js' %}"></script> 5 <script src="{% static 'js/file.js' %}"></script>
6 <script type="text/javascript" src="{% static 'js/material.js' %}"></script> 6 <script type="text/javascript" src="{% static 'js/material.js' %}"></script>
7 - <script type = "text/javascript" src="{% static 'links.js' %}"></script> 7 + <script type = "text/javascript" src="{% static 'js/links.js' %}"></script>
8 {% endblock %} 8 {% endblock %}
9 <div class="panel panel-default cards-detail"> 9 <div class="panel panel-default cards-detail">
10 <div class="panel-heading topic"> 10 <div class="panel-heading topic">
@@ -39,7 +39,7 @@ @@ -39,7 +39,7 @@
39 </div><!--column--> 39 </div><!--column-->
40 </div><!--row--> 40 </div><!--row-->
41 </div> 41 </div>
42 - <div class="panel-collapse collapseTopic-{{topic.slug}} collapse in" role="tabpanel" aria-labelledby="heading_{{topic.id}}" aria-expanded="true" aria-hidden="false"> 42 + <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">
43 <div class="panel-body"> 43 <div class="panel-body">
44 <div class="presentation" id="presentation_{{topic.slug}}"> 44 <div class="presentation" id="presentation_{{topic.slug}}">
45 <p> 45 <p>
@@ -86,7 +86,7 @@ @@ -86,7 +86,7 @@
86 </div> 86 </div>
87 </div> 87 </div>
88 </div><!--EndPresentation--> 88 </div><!--EndPresentation-->
89 - <div class="editation" id="editation_{{topic.slug}}"> 89 + <div class="editation topic_{{ topic.id }}" id="editation_{{topic.slug}}">
90 <div class="form-group"> 90 <div class="form-group">
91 <label class="control-label" for="focusedInput2">{% trans 'Name Topic' %}</label> 91 <label class="control-label" for="focusedInput2">{% trans 'Name Topic' %}</label>
92 <input type="text" class="form-control" value="{{topic}}"> 92 <input type="text" class="form-control" value="{{topic}}">
@@ -140,11 +140,7 @@ @@ -140,11 +140,7 @@
140 </div> 140 </div>
141 </div> 141 </div>
142 </div><!--EndEditation--> 142 </div><!--EndEditation-->
143 - {% professor_subject topic.subject user as professor_links %}  
144 - {% if professor_links%}  
145 - {% include "links/create_link.html" %}  
146 - {% include "links/delete_link.html" %}  
147 - {% endif %} 143 +
148 </div> 144 </div>
149 </div> 145 </div>
150 </div> 146 </div>
@@ -287,10 +283,7 @@ @@ -287,10 +283,7 @@
287 <!--EndModal--> 283 <!--EndModal-->
288 284
289 <!-- MODAL LINK EDIT--> 285 <!-- MODAL LINK EDIT-->
290 -{% professor_subject topic.subject user as links_update %}  
291 -{% if links_update%}  
292 - {% include "links/update_link.html" %}  
293 -{% endif %} 286 +
294 287
295 <!-- EndModal --> 288 <!-- EndModal -->
296 289
@@ -313,5 +306,3 @@ @@ -313,5 +306,3 @@
313 </div> 306 </div>
314 </div> 307 </div>
315 </div> 308 </div>
316 -  
317 -  
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><i class="fa fa-link" aria-hidden="true"></i> <a href="javascript:get_modal_link('{% url 'course:links:view_link' link.slug %}', '#viewLinkModal','#divModalLink')">{{link}}</a></li> 4 + <li id = "link_{{ link.slug }}"><i class="fa fa-link" aria-hidden="true"></i> <a href="javascript:get_modal_link('{% url 'course:links:view_link' link.slug %}', '#viewLinkModal','#divModalLink')">{{link.name}}</a></li>
5 {% endfor %} 5 {% endfor %}
6 </div> 6 </div>
7 <div class = 'row' id ="divModalLink"> 7 <div class = 'row' id ="divModalLink">
courses/templates/topic/link_topic_list_edit.html
@@ -2,8 +2,12 @@ @@ -2,8 +2,12 @@
2 <div id="list-topic{{ topic.id }}-links-edit"> 2 <div id="list-topic{{ topic.id }}-links-edit">
3 {% for link in links%} 3 {% for link in links%}
4 4
5 - <li class="icon_edit_remove"> <a href="#" data-toggle="modal" data-target="#linksModalEdit"><i class="fa fa-pencil fa-lg" aria-hidden="true"></i></a> <a href="#" data-toggle="modal" data-target="#removeLink"><i class="fa fa-trash fa-lg" aria-hidden="true"></i></a></li>  
6 - <li><i class="fa fa-link" aria-hidden="true"></i> <a href="javascript:get_modal_link('{% url 'course:links:view_link' link.slug %}', '#viewLinkModal','#divModalLink')">{{link}}</a></li> 5 + <li class="icon_edit_remove" id = "link_edit_icon_{{ link.slug }}"> <a href="javascript:get_modal_link('{% url 'course:links:update_link' link.slug %}', '#linksModalEdit', '#divModalLinkUpdate')"><i class="fa fa-pencil fa-lg" aria-hidden="true"></i></a> <a href="javascript:get_modal_link('{% 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:get_modal_link('{% url 'course:links:view_link' link.slug %}', '#viewLinkModal','#divModalLink')">{{link.name}}</a></li>
7 7
8 {% endfor %} 8 {% endfor %}
9 </div> 9 </div>
  10 +
  11 +<div class="row" id="divModalLinkUpdate">
  12 +
  13 +</div>
forum/static/js/forum.js
@@ -47,7 +47,7 @@ function createForum(url, topic) { @@ -47,7 +47,7 @@ function createForum(url, topic) {
47 $(".forum_form").html(data); 47 $(".forum_form").html(data);
48 $("#id_topic").val(topic); 48 $("#id_topic").val(topic);
49 49
50 - setForumCreateFormSubmit(); 50 + setForumCreateFormSubmit(topic);
51 } 51 }
52 }); 52 });
53 53
@@ -59,7 +59,7 @@ function createForum(url, topic) { @@ -59,7 +59,7 @@ function createForum(url, topic) {
59 * Function to set the forum's create form submit function 59 * Function to set the forum's create form submit function
60 * 60 *
61 */ 61 */
62 -function setForumCreateFormSubmit() { 62 +function setForumCreateFormSubmit(topic) {
63 $('.date-picker').datepicker({ 63 $('.date-picker').datepicker({
64 language: locale, 64 language: locale,
65 }); 65 });
@@ -72,13 +72,13 @@ function setForumCreateFormSubmit() { @@ -72,13 +72,13 @@ function setForumCreateFormSubmit() {
72 data: frm.serialize(), 72 data: frm.serialize(),
73 dataType: "json", 73 dataType: "json",
74 success: function (data) { 74 success: function (data) {
75 - $('.foruns_list').append("<li><i class='fa fa-commenting' aria-hidden='true'></i> <a id='forum_"+data.forum_id+"' href='"+data.url+"'> "+data.name+"</a></li>"); 75 + $(".topic_" + topic).find('.foruns_list').append("<li><i class='fa fa-commenting' aria-hidden='true'></i> <a id='forum_"+data.forum_id+"' href='"+data.url+"'> "+data.name+"</a></li>");
76 76
77 $("#createForum").modal('hide'); 77 $("#createForum").modal('hide');
78 }, 78 },
79 error: function(data) { 79 error: function(data) {
80 $(".forum_form").html(data.responseText); 80 $(".forum_form").html(data.responseText);
81 - setForumCreateFormSubmit(); 81 + setForumCreateFormSubmit(topic);
82 } 82 }
83 }); 83 });
84 return false; 84 return false;
links/admin.py
@@ -3,8 +3,8 @@ from django.contrib import admin @@ -3,8 +3,8 @@ from django.contrib import admin
3 from .models import Link 3 from .models import Link
4 4
5 class LinkAdmin(admin.ModelAdmin): 5 class LinkAdmin(admin.ModelAdmin):
6 - list_display = ['name', 'link_url','link_description']  
7 - search_fields = ['name', 'link_url','link_description'] 6 + list_display = ['name', 'slug','link_url','link_description']
  7 + search_fields = ['name','slug' ,'link_url','link_description']
8 8
9 9
10 admin.site.register(Link, LinkAdmin) 10 admin.site.register(Link, LinkAdmin)
links/forms.py
@@ -21,6 +21,15 @@ class CreateLinkForm(forms.ModelForm): @@ -21,6 +21,15 @@ class CreateLinkForm(forms.ModelForm):
21 fields = ['name','link_url','link_description'] 21 fields = ['name','link_url','link_description']
22 22
23 class UpdateLinkForm(forms.ModelForm): 23 class UpdateLinkForm(forms.ModelForm):
  24 + def clean_link_url(self):
  25 + link_url = self.cleaned_data['link_url']
  26 + try:
  27 + resposta = requests.head(link_url)
  28 + if resposta.status_code >= 400:
  29 + raise forms.ValidationError(_('Invalid url!'))
  30 + except requests.ConnectionError:
  31 + raise forms.ValidationError(_('Invalid url!'))
  32 + return link_url
24 class Meta: 33 class Meta:
25 model = Link 34 model = Link
26 fields = ['name','link_url','link_description'] 35 fields = ['name','link_url','link_description']
links/static/css/link.css 0 → 100644
@@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
  1 +.modal-backdrop{
  2 + z-index: 0;
  3 +}
0 \ No newline at end of file 4 \ No newline at end of file
links/static/js/links.js 0 → 100644
@@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
  1 +function get_modal_link(url, id,div_content){
  2 + $.get(url, function (data) {
  3 + $(div_content).empty();
  4 + $(div_content).append(data);
  5 + $(id).modal('show');
  6 + });
  7 +
  8 +}
links/templates/links/create_link.html
@@ -13,6 +13,7 @@ @@ -13,6 +13,7 @@
13 <form method="post" action="" id="form-link" enctype="multipart/form-data"> 13 <form method="post" action="" id="form-link" enctype="multipart/form-data">
14 {% csrf_token %} 14 {% csrf_token %}
15 {% for field in form %} 15 {% for field in form %}
  16 + <div class ="form-group">
16 {% if field.field.required %} 17 {% if field.field.required %}
17 <label for="{{ field.auto_id }}">{{ field.label }}<span>*</span></label> 18 <label for="{{ field.auto_id }}">{{ field.label }}<span>*</span></label>
18 {% endif %} 19 {% endif %}
@@ -29,9 +30,10 @@ @@ -29,9 +30,10 @@
29 </ul> 30 </ul>
30 </div> 31 </div>
31 {% endif %} 32 {% endif %}
  33 + </div>
32 {% endfor %} 34 {% endfor %}
33 <div class="form-group"> 35 <div class="form-group">
34 - <a href="javascript:void(0)" class="btn btn-raised btn-default" data-dismiss="modal">{% trans 'Cancel' %}</a> 36 + <button type="button" class="btn btn-danger btn-raised" data-dismiss="modal">{% trans "Cancel" %}</button>
35 <button class="btn btn-raised btn-primary" type="submit">{% trans 'Submit' %}</button> 37 <button class="btn btn-raised btn-primary" type="submit">{% trans 'Submit' %}</button>
36 </div> 38 </div>
37 <!-- .end Card --> 39 <!-- .end Card -->
@@ -41,7 +43,7 @@ @@ -41,7 +43,7 @@
41 </div> 43 </div>
42 <!-- EndModal --> 44 <!-- EndModal -->
43 {% block script_link %} 45 {% block script_link %}
44 - {# // <script src="{% static '/links.js' %}"></script> #} 46 + {# // <script src="{% static 'js/links.js' %}"></script> #}
45 <script type="text/javascript"> 47 <script type="text/javascript">
46 $("#form-link").submit(function(event) { 48 $("#form-link").submit(function(event) {
47 var data = new FormData($('#form-link').get(0)); 49 var data = new FormData($('#form-link').get(0));
links/templates/links/delete_link.html
1 -{% load widget_tweaks i18n %}  
2 -<!-- MODAL REMOVE LINK -->  
3 -<div class="modal" id="removeLink">  
4 - <div class="modal-dialog">  
5 - <div class="modal-content">  
6 - <div class="modal-header">  
7 - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">X</button>  
8 - <h4 class="modal-title"></h4>  
9 - </div>  
10 - <div class="modal-body">  
11 - <p>{% trans 'Do you really want to delete this link?' %}</p>  
12 - </div>  
13 - <div class="modal-footer">  
14 - <!-- -->  
15 - <button type="button" class="btn btn-primary btn-default" data-dismiss="modal">{% trans 'Cancel' %}</button>  
16 - <a href="http://www.google.com" target="_self"><button type="button" class="btn btn-primary" data-dismiss="modal" aria-hidden="true">{% trans 'Confirm' %}</button></a> 1 +{% load static widget_tweaks i18n %}
17 2
18 - </div> 3 +<!-- MODAL DELETE LINK -->
  4 +<link rel="stylesheet" type="text/css" href="{% static 'css/link.css' %}">
  5 +
  6 +<div class="erro-update">
  7 + <div class="modal fade" id="linkDeleteModal" tabindex="-1" role="dialog" aria-labelledby="deleteLinkLabel" style="z-index: 10">
  8 + <div class="modal-dialog" role="document">
  9 + <div class="modal-content">
  10 + <div class="modal-header">
  11 + <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
  12 + <h4 class="modal-title" id="deleteLinkLabel">{% trans 'Delete Link' %}</h4>
  13 + </div>
  14 + <div class="modal-body">
  15 + <!-- Card -->
  16 + <form class="form-horizontal" method="post" id="form-delete-link" enctype="multipart/form-data">
  17 + {% csrf_token %}
  18 + <fieldset>
  19 + <div class="col-md-12">
  20 + {% trans "Are you sure to delete the link " %} <strong>"{{ link.name }}"</strong> </a> of {{ link.topic.name }}?
  21 + </div>
  22 + <div class="form-group">
  23 + <div class="col-md-12">
  24 + <button type="button" class="btn btn-danger btn-raised" data-dismiss="modal">{% trans "Close" %}</button>
  25 + <button class="btn btn-raised btn-primary" type="submit">{% trans 'Delete' %}</button>
  26 + </div>
  27 + </div>
  28 + </fieldset>
  29 + </form>
  30 + <!-- .end Card -->
  31 + </div>
  32 + </div>
  33 + </div>
19 </div> 34 </div>
20 - </div>  
21 </div> 35 </div>
22 -<!-- END --> 36 +
  37 +{% block script_link %}
  38 +
  39 + {# // <script src="{% static 'js/link.js' %}"></script> #}
  40 + <script type="text/javascript">
  41 + $("#form-delete-link").submit(function(event) {
  42 + var data = new FormData($('#form-delete-link').get(0));
  43 + $.ajax({
  44 + url: "{% url 'course:links:delete_link' link.slug %}",
  45 + type: $("#form-delete-link").attr('method'),
  46 + data: data,
  47 + cache: false,
  48 + processData: false,
  49 + contentType: false,
  50 + success: function(data) {
  51 + $('#linkDeleteModal').modal('hide');
  52 + $('#link_{{ link.slug }}').remove();
  53 + $('#link_edit_icon_{{ link.slug }}').remove();
  54 + $('#link_edit_{{ link.slug }}').remove();
  55 + alertify.alert('Link successfully deleted!')
  56 + },
  57 + error: function(data){
  58 + // $('.erro-update').html(data.responseText);
  59 + $('.modal-backdrop').remove();
  60 + $('#linkDeteleModal').modal();
  61 + alertify.alert('Error when trying to delete.');
  62 + }
  63 + });
  64 + event.preventDefault();
  65 + });
  66 + </script>
  67 +{% endblock script_link %}
  68 +<!-- EndModal -->
links/templates/links/render_link.html
1 -<li><i class="fa fa-link" aria-hidden="true"></i> <a href="javascript:get_modal_link('{% url 'course:links:view_link' link.slug %}', '#viewLinkModal','#divModalLink')">{{link}}</a></li> 1 +<li id="link_{{ link.slug }}"><i class="fa fa-link" aria-hidden="true"></i> <a href="javascript:get_modal_link('{% url 'course:links:view_link' link.slug %}', '#viewLinkModal','#divModalLink')">{{link.name}}</a></li>
links/templates/links/update_link.html
@@ -5,29 +5,73 @@ @@ -5,29 +5,73 @@
5 <div class="modal-content"> 5 <div class="modal-content">
6 <div class="modal-header"> 6 <div class="modal-header">
7 <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> 7 <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
8 - <h4 class="modal-title" id="myModalLabel">{% trans 'Links' %}</h4> 8 + <h4 class="modal-title" id="myModalLabel">{% trans 'Edit Link' %}</h4>
9 </div> 9 </div>
10 <div class="modal-body"> 10 <div class="modal-body">
11 <!-- Card --> 11 <!-- Card -->
  12 + <form class="form-horizontal" method="post" id="form-update-link" enctype="multipart/form-data">
  13 + {% csrf_token %}
  14 + {% for field in form %}
  15 + <div class="form-group is-empty">
  16 + <div class="col-md-12">
  17 + {% if field.field.required %}
  18 + <label for="{{ field.auto_id }}" class="control-label">{{ field.label }}<span>*</span></label>
  19 + {% else %}
  20 + <label for="{{ field.auto_id }}" class=" control-label">{{ field.label }}</label>
  21 + {% endif %}
  22 + {% render_field field class='form-control input-sm' %}
  23 + </div>
  24 + </div>
  25 + {% if field.errors %}
  26 + <div class="alert alert-danger alert-dismissible clearfix" role="alert">
  27 + <button type="button" class="close" data-dismiss="alert" aria-label="Close">
  28 + <span aria-hidden="true">&times;</span>
  29 + </button>
  30 + <ul>
  31 + {% for error in field.errors %}
  32 + <li>{{ error }}</li>
  33 + {% endfor %}
  34 + </ul>
  35 + </div>
  36 + {% endif %}
  37 + {% endfor %}
12 <div class="form-group"> 38 <div class="form-group">
13 - <label class="control-label" for="inputDefault">{% trans 'Name' %}</label>  
14 - <input value="Python" type="text" class="form-control" id="inputDefault"> 39 + <button type="button" class="btn btn-danger btn-raised" data-dismiss="modal">{% trans "Cancel" %}</button>
  40 + <button class="btn btn-raised btn-primary" type="submit">{% trans 'Submit' %}</button>
15 </div> 41 </div>
16 - <div class="form-group">  
17 - <label class="control-label" for="inputDefault">{% trans 'URL' %}</label>  
18 - <input value="https://www.python.org/" type="text" class="form-control" id="inputDefault">  
19 - </div>  
20 - <div class="form-group is-empty">  
21 - <label class="control-label" for="inputDefault">{% trans 'Description' %}</label>  
22 - <textarea class="form-control" rows="3"></textarea>  
23 - </div>  
24 - <div class="form-group">  
25 - <a href="javascript:void(0)" class="btn btn-raised btn-default" data-dismiss="modal">{% trans 'Cancel' %}</a>  
26 - <a href="javascript:void(0)" class="btn btn-raised btn-primary">{% trans 'Submit' %}</a>  
27 - </div>  
28 <!-- .end Card --> 42 <!-- .end Card -->
29 </div> 43 </div>
30 </div> 44 </div>
31 </div> 45 </div>
32 </div> 46 </div>
33 <!-- EndModal --> 47 <!-- EndModal -->
  48 +{% block script_link %}
  49 +
  50 + {# // <script src="{% static 'js/links.js' %}"></script> #}
  51 + <script type="text/javascript">
  52 + $("#form-update-link").submit(function(event) {
  53 + var data = new FormData($('#form-update-link').get(0));
  54 + $.ajax({
  55 + url: "{% url 'course:links:update_link' link.slug %}",
  56 + type: $("#form-update-link").attr('method'),
  57 + data: data,
  58 + cache: false,
  59 + processData: false,
  60 + contentType: false,
  61 + success: function(data) {
  62 + $('#linksModalEdit').modal('hide');
  63 + $('#link_edit_{{ link.slug }}').replaceWith(data);
  64 + $('#link_{{ link.slug }}').replaceWith(data);
  65 + alertify.alert("Sucessfully Updated!")
  66 + },
  67 + error: function(data){
  68 + $('.erro-update').html(data.responseText);
  69 + $('.modal-backdrop').remove();
  70 + $('#linksModalEdit').modal();
  71 + alertify.alert('Invalid link, insert a valid one!');
  72 + }
  73 + });
  74 + event.preventDefault();
  75 + });
  76 + </script>
  77 +{% endblock script_link %}
links/tests.py
@@ -154,7 +154,9 @@ class LinkTestCase(TestCase): @@ -154,7 +154,9 @@ class LinkTestCase(TestCase):
154 url = reverse('course:links:update_link',kwargs={'slug': self.link.slug}) 154 url = reverse('course:links:update_link',kwargs={'slug': self.link.slug})
155 print("slug",self.link.slug) 155 print("slug",self.link.slug)
156 data = { 156 data = {
  157 + "name" : 'testinglink',
157 "link_description":'new description', 158 "link_description":'new description',
  159 + "link_url" : 'teste.com',
158 } 160 }
159 self.assertEqual(Link.objects.all()[0].link_description, "testdescription") # old description 161 self.assertEqual(Link.objects.all()[0].link_description, "testdescription") # old description
160 response = self.client.post(url, data) 162 response = self.client.post(url, data)
@@ -3,8 +3,8 @@ from . import views @@ -3,8 +3,8 @@ from . import views
3 3
4 urlpatterns = [ 4 urlpatterns = [
5 url(r'^create_link/(?P<slug>[\w_-]+)/$', views.CreateLink.as_view(), name='create_link'), 5 url(r'^create_link/(?P<slug>[\w_-]+)/$', views.CreateLink.as_view(), name='create_link'),
6 - url(r'^deletelink/(?P<linkname>[\w_-]+)/$', views.deleteLink,name = 'delete_link'),  
7 - url(r'^updatelink/(?P<slug>[\w_-]+)/$', views.UpdateLink.as_view(),name = 'update_link'),  
8 - url(r'^render-link/(?P<id>[0-9]+)/$', views.render_link, name='render_link'), 6 + url(r'^delete_link/(?P<slug>[\w_-]+)/$', views.DeleteLink.as_view(),name = 'delete_link'),
  7 + url(r'^update_link/(?P<slug>[\w_-]+)/$', views.UpdateLink.as_view(),name = 'update_link'),
  8 + url(r'^render-link/(?P<slug>[\w_-]+)/$', views.render_link, name='render_link'),
9 url(r'^view_link/(?P<slug>[\w_-]+)/$',views.ViewLink.as_view(),name = 'view_link') 9 url(r'^view_link/(?P<slug>[\w_-]+)/$',views.ViewLink.as_view(),name = 'view_link')
10 ] 10 ]
links/views.py
@@ -9,7 +9,7 @@ from rolepermissions.mixins import HasRoleMixin @@ -9,7 +9,7 @@ from rolepermissions.mixins import HasRoleMixin
9 from core.mixins import NotificationMixin 9 from core.mixins import NotificationMixin
10 from django.urls import reverse 10 from django.urls import reverse
11 from django.core.files.base import ContentFile 11 from django.core.files.base import ContentFile
12 - 12 +from rolepermissions.verifications import has_role
13 13
14 from .image_crawler import * 14 from .image_crawler import *
15 from courses.models import Topic 15 from courses.models import Topic
@@ -62,20 +62,37 @@ class CreateLink(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.Cr @@ -62,20 +62,37 @@ class CreateLink(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.Cr
62 context["topic"] = topic 62 context["topic"] = topic
63 return context 63 return context
64 def get_success_url(self): 64 def get_success_url(self):
65 - self.success_url = redirect('course:links:render_link', id = self.object.id) 65 + self.success_url = redirect('course:links:render_link', slug = self.object.slug)
66 return self.success_url 66 return self.success_url
67 -def deleteLink(request,linkname):  
68 - link = get_object_or_404(Link,name = linkname)  
69 - link.delete()  
70 - template_name = 'links/delete_link.html'  
71 - messages.success(request,_("Link deleted Successfully!"))  
72 67
73 - return redirect('course:manage') 68 +class DeleteLink(LoginRequiredMixin, HasRoleMixin, generic.DeleteView):
  69 + allowed_roles = ['professor', 'system_admin']
  70 + login_url = reverse_lazy("core:home")
  71 + redirect_field_name = 'next'
  72 + model = Link
  73 + template_name = 'links/delete_link.html'
  74 +
  75 + def dispatch(self, *args, **kwargs):
  76 + link = get_object_or_404(Link, slug = self.kwargs.get('slug'))
  77 + if(not (link.topic.owner == self.request.user) and not(has_role(self.request.user, 'system_admin')) ):
  78 + return self.handle_no_permission()
  79 + return super(DeleteLink, self).dispatch(*args, **kwargs)
  80 +
  81 + def get_context_data(self, **kwargs):
  82 + context = super(DeleteLink, self).get_context_data(**kwargs)
  83 + context['course'] = self.object.topic.subject.course
  84 + context['subject'] = self.object.topic.subject
  85 + context['link'] = self.object
  86 + context["topic"] = self.object.topic
  87 + return context
74 88
75 -def render_link(request, id): 89 + def get_success_url(self):
  90 + return reverse_lazy('course:view_topic', kwargs={'slug' : self.object.topic.slug})
  91 +
  92 +def render_link(request, slug):
76 template_name = 'links/render_link.html' 93 template_name = 'links/render_link.html'
77 context = { 94 context = {
78 - 'link': get_object_or_404(Link, id = id) 95 + 'link': get_object_or_404(Link, slug = slug)
79 } 96 }
80 return render(request, template_name, context) 97 return render(request, template_name, context)
81 98
@@ -85,18 +102,41 @@ class UpdateLink(LoginRequiredMixin, HasRoleMixin, generic.UpdateView): @@ -85,18 +102,41 @@ class UpdateLink(LoginRequiredMixin, HasRoleMixin, generic.UpdateView):
85 template_name = 'links/update_link.html' 102 template_name = 'links/update_link.html'
86 form_class = UpdateLinkForm 103 form_class = UpdateLinkForm
87 success_url = reverse_lazy('course:links:render_link') 104 success_url = reverse_lazy('course:links:render_link')
88 - def form_valid(self, form):  
89 - form.save()  
90 - messages.success(self.request, _('Link updated successfully!'))  
91 105
92 - return super(UpdateLink, self).form_valid(form) 106 + def form_invalid(self,form):
  107 + context = super(UpdateLink, self).form_invalid(form)
  108 + context.status_code = 400
93 109
  110 + return context
  111 + def form_valid(self, form):
  112 + formulario = form
  113 + if formulario.has_changed():
  114 + if 'link_url' in formulario.changed_data:
  115 + self.object = form.save()
  116 + self.link = Link.objects.get(slug = self.object.slug)
  117 + self.formato,self.baixado = get_images(self.link.link_url,self.link.slug)
  118 + self.caminho = 'links/static/images/%s'%(self.link.slug)+'%s'%(self.formato)
  119 + self.setImage()
  120 + else:
  121 + form.save()
  122 + else:
  123 + form.save()
  124 + return super(UpdateLink, self).form_valid(form)
  125 + def setImage(self):
  126 + if self.baixado:
  127 + with open(self.caminho,'rb') as f:
  128 + data = f.read()
  129 + nome = '%s'%(self.link.slug)+"%s"%(self.formato)
  130 + self.object.image.save(nome,ContentFile(data))
  131 + else:
  132 + with open('links/static/images/default.jpg','rb') as f:
  133 + data = f.read()
  134 + self.object.image.save('default.jpg',ContentFile(data))
94 def get_object(self, queryset=None): 135 def get_object(self, queryset=None):
95 self.object = get_object_or_404(Link, slug = self.kwargs.get('slug')) 136 self.object = get_object_or_404(Link, slug = self.kwargs.get('slug'))
96 - print(self.object.link_description)  
97 return self.object 137 return self.object
98 def get_success_url(self): 138 def get_success_url(self):
99 - self.success_url = redirect('course:links:render_link', id = self.object.id) 139 + self.success_url = reverse_lazy('course:links:render_link', args = (self.object.slug, ))
100 return self.success_url 140 return self.success_url
101 class ViewLink(LoginRequiredMixin,HasRoleMixin,generic.DetailView): 141 class ViewLink(LoginRequiredMixin,HasRoleMixin,generic.DetailView):
102 allowed_roles = ['professor', 'system_admin'] 142 allowed_roles = ['professor', 'system_admin']
@@ -109,7 +149,7 @@ class ViewLink(LoginRequiredMixin,HasRoleMixin,generic.DetailView): @@ -109,7 +149,7 @@ class ViewLink(LoginRequiredMixin,HasRoleMixin,generic.DetailView):
109 context['link'] = link 149 context['link'] = link
110 return context 150 return context
111 def get_success_url(self): 151 def get_success_url(self):
112 - self.success_url = redirect('course:links:render_link', id = self.object.id) 152 + self.success_url = redirect('course:links:render_link', slug = self.object.slug)
113 return self.success_url 153 return self.success_url
114 def get_queryset(self): 154 def get_queryset(self):
115 self.queryset = Link.objects.filter(slug = self.kwargs.get('slug')) 155 self.queryset = Link.objects.filter(slug = self.kwargs.get('slug'))