Commit 781cb416ae8849eff166b124bc134c18d4a378b7
1 parent
ad562111
Exists in
master
and in
3 other branches
Adding file link update
Showing
8 changed files
with
157 additions
and
6 deletions
Show diff stats
amadeus/static/css/base/amadeus.css
file_link/forms.py
| ... | ... | @@ -65,6 +65,12 @@ class FileLinkForm(forms.ModelForm): |
| 65 | 65 | |
| 66 | 66 | return ValueError |
| 67 | 67 | |
| 68 | + | |
| 69 | + if not self.instance.pk: | |
| 70 | + self._errors['file_content'] = [_('This field is required.')] | |
| 71 | + | |
| 72 | + return ValueError | |
| 73 | + | |
| 68 | 74 | return file_content |
| 69 | 75 | |
| 70 | 76 | def save(self, commit = True): | ... | ... |
file_link/models.py
| 1 | +import os | |
| 1 | 2 | from django.db import models |
| 2 | 3 | from django.core.exceptions import ValidationError |
| 3 | 4 | from django.utils.translation import ugettext_lazy as _ |
| ... | ... | @@ -21,12 +22,16 @@ def validate_file_extension(value): |
| 21 | 22 | raise ValidationError(_('File not supported.')) |
| 22 | 23 | |
| 23 | 24 | class FileLink(Resource): |
| 24 | - file_content = models.FileField(_('File'), upload_to = 'files/', validators = [validate_file_extension]) | |
| 25 | + file_content = models.FileField(_('File'), blank = True, upload_to = 'files/', validators = [validate_file_extension]) | |
| 25 | 26 | |
| 26 | 27 | class Meta: |
| 27 | 28 | verbose_name = _('File Link') |
| 28 | 29 | verbose_name_plural = _('File Links') |
| 29 | 30 | |
| 31 | + @property | |
| 32 | + def filename(self): | |
| 33 | + return os.path.basename(self.file_content.name) | |
| 34 | + | |
| 30 | 35 | def __str__(self): |
| 31 | 36 | return self.name |
| 32 | 37 | |
| ... | ... | @@ -34,7 +39,7 @@ class FileLink(Resource): |
| 34 | 39 | return 'file_links:download' |
| 35 | 40 | |
| 36 | 41 | def update_link(self): |
| 37 | - return 'webpages:update' | |
| 42 | + return 'file_links:update' | |
| 38 | 43 | |
| 39 | 44 | def delete_link(self): |
| 40 | 45 | return 'webpages:delete' | ... | ... |
file_link/templates/file_links/_form.html
| ... | ... | @@ -39,9 +39,15 @@ |
| 39 | 39 | </div> |
| 40 | 40 | |
| 41 | 41 | <div class="filedrag"> |
| 42 | - {% trans 'Click or drop the file here' %}<br /> | |
| 43 | - | |
| 44 | - <small>{% trans 'The file could not exceed 10MB.' %}</small> | |
| 42 | + {% if file_link %} | |
| 43 | + <i class="fa fa-file-archive-o"></i> <br /> | |
| 44 | + | |
| 45 | + <small>{{ file_link.filename }}</small> | |
| 46 | + {% else %} | |
| 47 | + {% trans 'Click or drop the file here' %}<br /> | |
| 48 | + | |
| 49 | + <small>{% trans 'The file could not exceed 10MB.' %}</small> | |
| 50 | + {% endif %} | |
| 45 | 51 | </div> |
| 46 | 52 | |
| 47 | 53 | <span id="helpBlock" class="help-block">{{ form.file_content.help_text }}</span> | ... | ... |
| ... | ... | @@ -0,0 +1,36 @@ |
| 1 | +{% extends 'subjects/view.html' %} | |
| 2 | + | |
| 3 | +{% load static i18n django_bootstrap_breadcrumbs %} | |
| 4 | + | |
| 5 | +{% block style %} | |
| 6 | + {{block.super}} | |
| 7 | + <link rel="stylesheet" type="text/css" href="{% static "css/bootstrap-tagsinput.css" %}"> | |
| 8 | +{% endblock %} | |
| 9 | + | |
| 10 | +{% block javascript %} | |
| 11 | + {{block.super}} | |
| 12 | + <script type="text/javascript" src="{% static "js/bootstrap-tagsinput.js" %} "></script> | |
| 13 | +{% endblock %} | |
| 14 | + | |
| 15 | +{% block breadcrumbs %} | |
| 16 | + {{ block.super }} | |
| 17 | + | |
| 18 | + {% breadcrumb topic 'subjects:topic_view' topic.subject.slug topic.slug %} | |
| 19 | + | |
| 20 | + {% trans 'Edit: ' as bread %} | |
| 21 | + {% with bread|add:file_link.name as bread_slug %} | |
| 22 | + {% breadcrumb bread_slug 'file_links:update' topic.slug file_link.slug %} | |
| 23 | + {% endwith %} | |
| 24 | +{% endblock %} | |
| 25 | + | |
| 26 | +{% block content %} | |
| 27 | + <div class="card"> | |
| 28 | + <div class="card-content"> | |
| 29 | + <div class="card-body"> | |
| 30 | + {% include 'file_links/_form.html' %} | |
| 31 | + </div> | |
| 32 | + </div> | |
| 33 | + </div> | |
| 34 | + <br clear="all" /> | |
| 35 | + <br clear="all" /> | |
| 36 | +{% endblock %} | ... | ... |
file_link/urls.py
| ... | ... | @@ -5,5 +5,6 @@ from . import views |
| 5 | 5 | |
| 6 | 6 | urlpatterns = [ |
| 7 | 7 | url(r'^create/(?P<slug>[\w_-]+)/$', views.CreateView.as_view(), name = 'create'), |
| 8 | + url(r'^update/(?P<topic_slug>[\w_-]+)/(?P<slug>[\w_-]+)/$', views.UpdateView.as_view(), name = 'update'), | |
| 8 | 9 | url(r'^download/(?P<slug>[\w_-]+)/$', views.DownloadFile.as_view(), name = 'download'), |
| 9 | 10 | ] | ... | ... |
file_link/views.py
| ... | ... | @@ -145,4 +145,98 @@ class CreateView(LoginRequiredMixin, generic.edit.CreateView): |
| 145 | 145 | def get_success_url(self): |
| 146 | 146 | 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)) |
| 147 | 147 | |
| 148 | + return reverse_lazy('subjects:view', kwargs = {'slug': self.object.topic.subject.slug}) | |
| 149 | + | |
| 150 | +class UpdateView(LoginRequiredMixin, generic.UpdateView): | |
| 151 | + login_url = reverse_lazy("users:login") | |
| 152 | + redirect_field_name = 'next' | |
| 153 | + | |
| 154 | + template_name = 'file_links/update.html' | |
| 155 | + model = FileLink | |
| 156 | + form_class = FileLinkForm | |
| 157 | + context_object_name = 'file_link' | |
| 158 | + | |
| 159 | + def dispatch(self, request, *args, **kwargs): | |
| 160 | + slug = self.kwargs.get('topic_slug', '') | |
| 161 | + topic = get_object_or_404(Topic, slug = slug) | |
| 162 | + | |
| 163 | + if not has_subject_permissions(request.user, topic.subject): | |
| 164 | + return redirect(reverse_lazy('subjects:home')) | |
| 165 | + | |
| 166 | + return super(UpdateView, self).dispatch(request, *args, **kwargs) | |
| 167 | + | |
| 168 | + def get(self, request, *args, **kwargs): | |
| 169 | + self.object = self.get_object() | |
| 170 | + | |
| 171 | + form_class = self.get_form_class() | |
| 172 | + form = self.get_form(form_class) | |
| 173 | + | |
| 174 | + slug = self.kwargs.get('topic_slug', '') | |
| 175 | + topic = get_object_or_404(Topic, slug = slug) | |
| 176 | + | |
| 177 | + pend_form = self.object.pendencies_resource.all() | |
| 178 | + | |
| 179 | + if len(pend_form) > 0: | |
| 180 | + pendencies_form = PendenciesForm(instance = pend_form[0], initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]}) | |
| 181 | + else: | |
| 182 | + pendencies_form = PendenciesForm(initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]}) | |
| 183 | + | |
| 184 | + return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form)) | |
| 185 | + | |
| 186 | + def post(self, request, *args, **kwargs): | |
| 187 | + self.object = self.get_object() | |
| 188 | + | |
| 189 | + form_class = self.get_form_class() | |
| 190 | + form = self.get_form(form_class) | |
| 191 | + | |
| 192 | + slug = self.kwargs.get('topic_slug', '') | |
| 193 | + topic = get_object_or_404(Topic, slug = slug) | |
| 194 | + | |
| 195 | + pend_form = self.object.pendencies_resource.all() | |
| 196 | + | |
| 197 | + if len(pend_form) > 0: | |
| 198 | + pendencies_form = PendenciesForm(self.request.POST, instance = pend_form[0], initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]}) | |
| 199 | + else: | |
| 200 | + pendencies_form = PendenciesForm(self.request.POST, initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]}) | |
| 201 | + | |
| 202 | + if (form.is_valid() and pendencies_form.is_valid()): | |
| 203 | + return self.form_valid(form, pendencies_form) | |
| 204 | + else: | |
| 205 | + return self.form_invalid(form, pendencies_form) | |
| 206 | + | |
| 207 | + def form_invalid(self, form, pendencies_form): | |
| 208 | + return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form)) | |
| 209 | + | |
| 210 | + def form_valid(self, form, pendencies_form): | |
| 211 | + self.object = form.save(commit = False) | |
| 212 | + | |
| 213 | + if not self.object.topic.visible and not self.object.topic.repository: | |
| 214 | + self.object.visible = False | |
| 215 | + | |
| 216 | + self.object.save() | |
| 217 | + | |
| 218 | + pend_form = pendencies_form.save(commit = False) | |
| 219 | + pend_form.resource = self.object | |
| 220 | + | |
| 221 | + if not pend_form.action == "": | |
| 222 | + pend_form.save() | |
| 223 | + | |
| 224 | + return redirect(self.get_success_url()) | |
| 225 | + | |
| 226 | + def get_context_data(self, **kwargs): | |
| 227 | + context = super(UpdateView, self).get_context_data(**kwargs) | |
| 228 | + | |
| 229 | + context['title'] = _('Update File Link') | |
| 230 | + | |
| 231 | + slug = self.kwargs.get('topic_slug', '') | |
| 232 | + topic = get_object_or_404(Topic, slug = slug) | |
| 233 | + | |
| 234 | + context['topic'] = topic | |
| 235 | + context['subject'] = topic.subject | |
| 236 | + | |
| 237 | + return context | |
| 238 | + | |
| 239 | + def get_success_url(self): | |
| 240 | + messages.success(self.request, _('The File Link "%s" was updated successfully!')%(self.object.name)) | |
| 241 | + | |
| 148 | 242 | return reverse_lazy('subjects:view', kwargs = {'slug': self.object.topic.subject.slug}) |
| 149 | 243 | \ No newline at end of file | ... | ... |
webpage/templates/webpages/update.html
| ... | ... | @@ -10,7 +10,6 @@ |
| 10 | 10 | {% block javascript %} |
| 11 | 11 | {{block.super}} |
| 12 | 12 | <script type="text/javascript" src="{% static "js/bootstrap-tagsinput.js" %} "></script> |
| 13 | - <script type="text/javascript" src="{% static "js/jquery.formset.js" %} "></script> | |
| 14 | 13 | {% endblock %} |
| 15 | 14 | |
| 16 | 15 | {% block breadcrumbs %} | ... | ... |