diff --git a/amadeus/static/css/base/amadeus.css b/amadeus/static/css/base/amadeus.css
index 4d78347..1ff4001 100755
--- a/amadeus/static/css/base/amadeus.css
+++ b/amadeus/static/css/base/amadeus.css
@@ -609,6 +609,10 @@ a:focus {
cursor: pointer;
}
+.filedrag i {
+ font-size: 35px;
+}
+
.theme_img {
width: 100%;
}
diff --git a/file_link/forms.py b/file_link/forms.py
index 1430f8d..3319c45 100644
--- a/file_link/forms.py
+++ b/file_link/forms.py
@@ -65,6 +65,12 @@ class FileLinkForm(forms.ModelForm):
return ValueError
+
+ if not self.instance.pk:
+ self._errors['file_content'] = [_('This field is required.')]
+
+ return ValueError
+
return file_content
def save(self, commit = True):
diff --git a/file_link/models.py b/file_link/models.py
index 57e6e7b..e112b9d 100644
--- a/file_link/models.py
+++ b/file_link/models.py
@@ -1,3 +1,4 @@
+import os
from django.db import models
from django.core.exceptions import ValidationError
from django.utils.translation import ugettext_lazy as _
@@ -21,12 +22,16 @@ def validate_file_extension(value):
raise ValidationError(_('File not supported.'))
class FileLink(Resource):
- file_content = models.FileField(_('File'), upload_to = 'files/', validators = [validate_file_extension])
+ file_content = models.FileField(_('File'), blank = True, upload_to = 'files/', validators = [validate_file_extension])
class Meta:
verbose_name = _('File Link')
verbose_name_plural = _('File Links')
+ @property
+ def filename(self):
+ return os.path.basename(self.file_content.name)
+
def __str__(self):
return self.name
@@ -34,7 +39,7 @@ class FileLink(Resource):
return 'file_links:download'
def update_link(self):
- return 'webpages:update'
+ return 'file_links:update'
def delete_link(self):
return 'webpages:delete'
diff --git a/file_link/templates/file_links/_form.html b/file_link/templates/file_links/_form.html
index 3ba2a17..41bc79e 100644
--- a/file_link/templates/file_links/_form.html
+++ b/file_link/templates/file_links/_form.html
@@ -39,9 +39,15 @@
- {% trans 'Click or drop the file here' %}
-
- {% trans 'The file could not exceed 10MB.' %}
+ {% if file_link %}
+
+
+ {{ file_link.filename }}
+ {% else %}
+ {% trans 'Click or drop the file here' %}
+
+ {% trans 'The file could not exceed 10MB.' %}
+ {% endif %}
{{ form.file_content.help_text }}
diff --git a/file_link/templates/file_links/update.html b/file_link/templates/file_links/update.html
new file mode 100644
index 0000000..6da1ef9
--- /dev/null
+++ b/file_link/templates/file_links/update.html
@@ -0,0 +1,36 @@
+{% extends 'subjects/view.html' %}
+
+{% load static i18n django_bootstrap_breadcrumbs %}
+
+{% block style %}
+ {{block.super}}
+
+{% endblock %}
+
+{% block javascript %}
+ {{block.super}}
+
+{% endblock %}
+
+{% block breadcrumbs %}
+ {{ block.super }}
+
+ {% breadcrumb topic 'subjects:topic_view' topic.subject.slug topic.slug %}
+
+ {% trans 'Edit: ' as bread %}
+ {% with bread|add:file_link.name as bread_slug %}
+ {% breadcrumb bread_slug 'file_links:update' topic.slug file_link.slug %}
+ {% endwith %}
+{% endblock %}
+
+{% block content %}
+
+
+
+ {% include 'file_links/_form.html' %}
+
+
+
+
+
+{% endblock %}
diff --git a/file_link/urls.py b/file_link/urls.py
index 9147791..097870e 100644
--- a/file_link/urls.py
+++ b/file_link/urls.py
@@ -5,5 +5,6 @@ from . import views
urlpatterns = [
url(r'^create/(?P[\w_-]+)/$', views.CreateView.as_view(), name = 'create'),
+ url(r'^update/(?P[\w_-]+)/(?P[\w_-]+)/$', views.UpdateView.as_view(), name = 'update'),
url(r'^download/(?P[\w_-]+)/$', views.DownloadFile.as_view(), name = 'download'),
]
diff --git a/file_link/views.py b/file_link/views.py
index 1de24df..7d106fa 100644
--- a/file_link/views.py
+++ b/file_link/views.py
@@ -145,4 +145,98 @@ class CreateView(LoginRequiredMixin, generic.edit.CreateView):
def get_success_url(self):
messages.success(self.request, _('The File Link "%s" was added to the Topic "%s" of the virtual environment "%s" successfully!')%(self.object.name, self.object.topic.name, self.object.topic.subject.name))
+ return reverse_lazy('subjects:view', kwargs = {'slug': self.object.topic.subject.slug})
+
+class UpdateView(LoginRequiredMixin, generic.UpdateView):
+ login_url = reverse_lazy("users:login")
+ redirect_field_name = 'next'
+
+ template_name = 'file_links/update.html'
+ model = FileLink
+ form_class = FileLinkForm
+ context_object_name = 'file_link'
+
+ def dispatch(self, request, *args, **kwargs):
+ slug = self.kwargs.get('topic_slug', '')
+ topic = get_object_or_404(Topic, slug = slug)
+
+ if not has_subject_permissions(request.user, topic.subject):
+ return redirect(reverse_lazy('subjects:home'))
+
+ return super(UpdateView, self).dispatch(request, *args, **kwargs)
+
+ def get(self, request, *args, **kwargs):
+ self.object = self.get_object()
+
+ form_class = self.get_form_class()
+ form = self.get_form(form_class)
+
+ slug = self.kwargs.get('topic_slug', '')
+ topic = get_object_or_404(Topic, slug = slug)
+
+ pend_form = self.object.pendencies_resource.all()
+
+ if len(pend_form) > 0:
+ pendencies_form = PendenciesForm(instance = pend_form[0], initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]})
+ else:
+ pendencies_form = PendenciesForm(initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]})
+
+ return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form))
+
+ def post(self, request, *args, **kwargs):
+ self.object = self.get_object()
+
+ form_class = self.get_form_class()
+ form = self.get_form(form_class)
+
+ slug = self.kwargs.get('topic_slug', '')
+ topic = get_object_or_404(Topic, slug = slug)
+
+ pend_form = self.object.pendencies_resource.all()
+
+ if len(pend_form) > 0:
+ pendencies_form = PendenciesForm(self.request.POST, instance = pend_form[0], initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]})
+ else:
+ pendencies_form = PendenciesForm(self.request.POST, initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]})
+
+ if (form.is_valid() and pendencies_form.is_valid()):
+ return self.form_valid(form, pendencies_form)
+ else:
+ return self.form_invalid(form, pendencies_form)
+
+ def form_invalid(self, form, pendencies_form):
+ return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form))
+
+ def form_valid(self, form, pendencies_form):
+ self.object = form.save(commit = False)
+
+ if not self.object.topic.visible and not self.object.topic.repository:
+ self.object.visible = False
+
+ self.object.save()
+
+ pend_form = pendencies_form.save(commit = False)
+ pend_form.resource = self.object
+
+ if not pend_form.action == "":
+ pend_form.save()
+
+ return redirect(self.get_success_url())
+
+ def get_context_data(self, **kwargs):
+ context = super(UpdateView, self).get_context_data(**kwargs)
+
+ context['title'] = _('Update File Link')
+
+ slug = self.kwargs.get('topic_slug', '')
+ topic = get_object_or_404(Topic, slug = slug)
+
+ context['topic'] = topic
+ context['subject'] = topic.subject
+
+ return context
+
+ def get_success_url(self):
+ messages.success(self.request, _('The File Link "%s" was updated successfully!')%(self.object.name))
+
return reverse_lazy('subjects:view', kwargs = {'slug': self.object.topic.subject.slug})
\ No newline at end of file
diff --git a/webpage/templates/webpages/update.html b/webpage/templates/webpages/update.html
index 7dbe79f..3b66aa9 100644
--- a/webpage/templates/webpages/update.html
+++ b/webpage/templates/webpages/update.html
@@ -10,7 +10,6 @@
{% block javascript %}
{{block.super}}
-
{% endblock %}
{% block breadcrumbs %}
--
libgit2 0.21.2