diff --git a/amadeus/settings.py b/amadeus/settings.py
index 62302a1..faad125 100644
--- a/amadeus/settings.py
+++ b/amadeus/settings.py
@@ -67,7 +67,8 @@ INSTALLED_APPS = [
'webpage',
'mailsender',
'security',
- 'themes'
+ 'themes',
+ 'links'
]
MIDDLEWARE_CLASSES = [
diff --git a/amadeus/urls.py b/amadeus/urls.py
index 0e91d7d..d614248 100644
--- a/amadeus/urls.py
+++ b/amadeus/urls.py
@@ -35,6 +35,7 @@ urlpatterns = [
url(r'^security/', include('security.urls', namespace = 'security')),
url(r'^themes/', include('themes.urls', namespace = 'themes')),
url(r'^notifications/', include('notifications.urls', namespace = 'notifications')),
+ url(r'^links/', include('links.urls', namespace='links')),
#API
url(r'^o/', include('oauth2_provider.urls', namespace='oauth2_provider')),
#S3Direct
diff --git a/links/forms.py b/links/forms.py
new file mode 100644
index 0000000..6721de1
--- /dev/null
+++ b/links/forms.py
@@ -0,0 +1,88 @@
+# coding=utf-8
+from django import forms
+from django.utils.translation import ugettext_lazy as _
+from django.utils.html import strip_tags
+
+from subjects.models import Tag
+
+from pendencies.forms import PendenciesForm
+from .models import Link
+
+class LinkForm(forms.ModelForm):
+ subject = None
+ MAX_UPLOAD_SIZE = 10*1024*1024
+
+ def __init__(self, *args, **kwargs):
+ super(LinkForm, self).__init__(*args, **kwargs)
+
+ self.subject = kwargs['initial'].get('subject', None)
+
+ if self.instance.id:
+ self.subject = self.instance.topic.subject
+ self.initial['tags'] = ", ".join(self.instance.tags.all().values_list("name", flat = True))
+
+ self.fields['students'].queryset = self.subject.students.all()
+ self.fields['groups'].queryset = self.subject.group_subject.all()
+
+ tags = forms.CharField(label = _('Tags'), required = False)
+ link_url = forms.URLField(label = _('Website URL'),required=True)
+ class Meta:
+ model = Link
+ fields = ['name','link_url', 'initial_view','initial_view_date', 'end_view','end_view_date', 'brief_description', 'all_students', 'students', 'groups', 'visible']
+ labels = {
+ 'name': _('Link name'),
+ }
+ widgets = {
+ 'brief_description': forms.Textarea,
+ 'students': forms.SelectMultiple,
+ 'groups': forms.SelectMultiple,
+ }
+
+ def clean_name(self):
+ name = self.cleaned_data.get('name', '')
+
+ topics = self.subject.topic_subject.all()
+
+ for topic in topics:
+ if self.instance.id:
+ same_name = topic.resource_topic.filter(name__unaccent__iexact = name).exclude(id = self.instance.id).count()
+ else:
+ same_name = topic.resource_topic.filter(name__unaccent__iexact = name).count()
+
+ if same_name > 0:
+ self._errors['name'] = [_('This subject already has a link with this name')]
+
+ return ValueError
+
+ return name
+
+
+
+ def save(self, commit = True):
+ super(LinkForm, self).save(commit = True)
+
+ self.instance.save()
+
+ previous_tags = self.instance.tags.all()
+
+ tags = self.cleaned_data['tags'].split(",")
+
+ #Excluding unwanted tags
+ for prev in previous_tags:
+ if not prev.name in tags:
+ self.instance.tags.remove(prev)
+
+ for tag in tags:
+ tag = tag.strip()
+
+ exist = Tag.objects.filter(name = tag).exists()
+
+ if exist:
+ new_tag = Tag.objects.get(name = tag)
+ else:
+ new_tag = Tag.objects.create(name = tag)
+
+ if not new_tag in self.instance.tags.all():
+ self.instance.tags.add(new_tag)
+
+ return self.instance
\ No newline at end of file
diff --git a/links/models.py b/links/models.py
index 9210420..890472e 100644
--- a/links/models.py
+++ b/links/models.py
@@ -1,25 +1,23 @@
from django.db import models
-from subject.models import Tag
+from django.utils.translation import ugettext_lazy as _
+from autoslug.fields import AutoSlugField
-from topics.models import Topic
+import datetime
+from topics.models import Topic, Resource
from users.models import User
+from django.utils import timezone
# Create your models here.
-class Link(models.Model):
- name = models.CharField( _("Name"), unique = True,max_length= 200)
- slug = AutoSlugField(_("Slug"),populate_from='name',unique=True)
+class Link(Resource):
+
- description_brief = models.TextField(_("simpler_description"), blank=True)
- description = models.TextField(_("description"), blank= True)
+ description = models.TextField(_("simpler_description"), blank=True)
link_url = models.URLField(verbose_name = _("Link_URL"))
-
- tags = models.ManyToManyField(Tag, verbose_name='tags', blank=True, null=True)
- visible = models.BooleanField(_('Visible'), default = True)
- all_students = models.BooleanField(_('all_students'), default= False)
- students = models.ManyToManyField(User,verbose_name=_('Students'), related_name='students', blank = True)
- topic = models.ForeignKey(Topic, verbose_name='topic')
+
initial_view = models.BooleanField(_('Initial View'), default = False)
- initia_view_date = models.DateField(_('Initial View Date'), required= False)
+ initial_view_date = models.DateField(_('Initial View Date'), default=timezone.now)
+ end_view = models.BooleanField(_('Initial View'), default = False)
+ end_view_date = models.DateField(_('Initial View Date'), default=timezone.now)
class Meta:
verbose_name = "Link"
verbose_name_plural = "Links"
diff --git a/links/templates/links/_form.html b/links/templates/links/_form.html
new file mode 100644
index 0000000..f7c72b4
--- /dev/null
+++ b/links/templates/links/_form.html
@@ -0,0 +1,370 @@
+{% load static i18n %}
+{% load widget_tweaks %}
+
+
+
+
\ No newline at end of file
diff --git a/links/templates/links/create.html b/links/templates/links/create.html
new file mode 100644
index 0000000..41b1001
--- /dev/null
+++ b/links/templates/links/create.html
@@ -0,0 +1,34 @@
+{% 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 'Create File Link' as bread %}
+ {% breadcrumb bread 'links:create' topic.slug %}
+{% endblock %}
+
+{% block content %}
+
+
+
+ {% include 'links/_form.html' %}
+
+
+
+
+
+{% endblock %}
diff --git a/links/urls.py b/links/urls.py
new file mode 100644
index 0000000..bd42049
--- /dev/null
+++ b/links/urls.py
@@ -0,0 +1,7 @@
+from django.conf.urls import url
+from django.contrib.auth import views as auth_views
+
+from . import views
+
+urlpatterns = [
+ url(r'^create/(?P[\w_-]+)/$', views.CreateLinkView.as_view(), name='create'),]
\ No newline at end of file
diff --git a/links/views.py b/links/views.py
index 91ea44a..5f46845 100644
--- a/links/views.py
+++ b/links/views.py
@@ -1,3 +1,137 @@
-from django.shortcuts import render
+from django.shortcuts import render, get_object_or_404, redirect
+from django.views import generic
+from .models import Link
+from django.utils.translation import ugettext_lazy as _
+from django.core.urlresolvers import reverse_lazy
+from django.contrib.auth.mixins import LoginRequiredMixin
+from .forms import LinkForm
+from rolepermissions.mixins import HasRoleMixin
+
+from log.mixins import LogMixin
+from log.decorators import log_decorator_ajax
+from log.models import Log
+
+from pendencies.forms import PendenciesForm
+
+from amadeus.permissions import has_subject_permissions, has_resource_permissions
+
+from topics.models import Topic
# Create your views here.
+class CreateLinkView(LoginRequiredMixin, LogMixin, generic.edit.CreateView):
+ log_component = 'resources'
+ log_action = 'create'
+ log_resource = 'file_link'
+ log_context = {}
+
+ login_url = reverse_lazy("users:login")
+ redirect_field_name = 'next'
+
+ template_name = 'links/create.html'
+ form_class = LinkForm
+
+ def dispatch(self, request, *args, **kwargs):
+ slug = self.kwargs.get('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(CreateLinkView, self).dispatch(request, *args, **kwargs)
+
+ def get(self, request, *args, **kwargs):
+ self.object = None
+
+ form_class = self.get_form_class()
+ form = self.get_form(form_class)
+
+ slug = self.kwargs.get('slug', '')
+ topic = get_object_or_404(Topic, slug = slug)
+
+ 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 = None
+
+ form_class = self.get_form_class()
+ form = self.get_form(form_class)
+
+ slug = self.kwargs.get('slug', '')
+ topic = get_object_or_404(Topic, slug = slug)
+
+ 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 get_initial(self):
+ initial = super(CreateLinkView, self).get_initial()
+
+ slug = self.kwargs.get('slug', '')
+
+ topic = get_object_or_404(Topic, slug = slug)
+ initial['subject'] = topic.subject
+
+ return initial
+
+ 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)
+
+ slug = self.kwargs.get('slug', '')
+ topic = get_object_or_404(Topic, slug = slug)
+
+ self.object.topic = topic
+ self.object.order = topic.resource_topic.count() + 1
+
+ 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()
+
+ self.log_context['category_id'] = self.object.topic.subject.category.id
+ self.log_context['category_name'] = self.object.topic.subject.category.name
+ self.log_context['category_slug'] = self.object.topic.subject.category.slug
+ self.log_context['subject_id'] = self.object.topic.subject.id
+ self.log_context['subject_name'] = self.object.topic.subject.name
+ self.log_context['subject_slug'] = self.object.topic.subject.slug
+ self.log_context['topic_id'] = self.object.topic.id
+ self.log_context['topic_name'] = self.object.topic.name
+ self.log_context['topic_slug'] = self.object.topic.slug
+ self.log_context['link_id'] = self.object.id
+ self.log_context['link_name'] = self.object.name
+ self.log_context['link_slug'] = self.object.slug
+
+ super(CreateLinkView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context)
+
+ return redirect(self.get_success_url())
+
+ def get_context_data(self, **kwargs):
+ context = super(CreateLinkView, self).get_context_data(**kwargs)
+
+ context['title'] = _('Create Webiste Link')
+
+ slug = self.kwargs.get('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 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})
\ No newline at end of file
diff --git a/subjects/forms.py b/subjects/forms.py
index 99fb746..e345dad 100644
--- a/subjects/forms.py
+++ b/subjects/forms.py
@@ -131,8 +131,8 @@ class UpdateSubjectForm(forms.ModelForm):
class Meta:
model = Subject
- fields = ('name', 'description_brief', 'description',
- 'visible', 'professor', 'students', )
+ fields = ('name', 'description_brief', 'description', 'init_date', 'end_date','subscribe_begin', 'subscribe_end',
+ 'visible', 'professor', 'students', )
widgets = {
diff --git a/subjects/models.py b/subjects/models.py
index 3dcdcaf..a2fce0c 100644
--- a/subjects/models.py
+++ b/subjects/models.py
@@ -27,7 +27,7 @@ class Subject(models.Model):
init_date = models.DateField(_('Begin of Subject Date'))
end_date = models.DateField(_('End of Subject Date'))
- tags = models.ManyToManyField(Tag, verbose_name='tags', blank=True, null=True)
+ tags = models.ManyToManyField(Tag, verbose_name='tags', blank=True)
create_date = models.DateTimeField(_('Creation Date'), auto_now_add = True)
update_date = models.DateTimeField(_('Date of last update'), auto_now=True)
diff --git a/topics/templates/topics/list.html b/topics/templates/topics/list.html
index ca2659a..04181e3 100644
--- a/topics/templates/topics/list.html
+++ b/topics/templates/topics/list.html
@@ -55,7 +55,7 @@
{% trans 'Video Embed' %}
{% trans 'Forum' %}
{% trans 'File Link' %}
- {% trans "Link to Website" %}
+ {% trans "Link to Website" %}
{% trans 'Webpage' %}
{% trans 'Questionary' %}
--
libgit2 0.21.2