diff --git a/pedagogy/models.py b/pedagogy/models.py
index 7bd0c955..9626b1da 100644
--- a/pedagogy/models.py
+++ b/pedagogy/models.py
@@ -44,8 +44,14 @@ class UV(models.Model):
return user.is_in_group(settings.SITH_GROUP_PEDAGOGY_ADMIN_ID)
def can_be_viewed_by(self, user):
+ """
+ Only visible by subscribers
+ """
return user.is_subscribed
+ def __str__(self):
+ return self.code
+
code = models.CharField(
_("code"),
max_length=10,
diff --git a/pedagogy/templates/pedagogy/guide.jinja b/pedagogy/templates/pedagogy/guide.jinja
index a91c44db..fd6753ca 100644
--- a/pedagogy/templates/pedagogy/guide.jinja
+++ b/pedagogy/templates/pedagogy/guide.jinja
@@ -6,7 +6,18 @@
{% endblock %}
{% block content %}
+ {% if can_create_uv(user) %}
+
+ {% trans %}Create UV{% endtrans %}
+
+ {% endif %}
{% for uv in object_list %}
- {{ uv.code }}
+
+ {{ uv.code }}
+ {% if user.is_owner(uv) -%}
+ {% trans %}Edit{% endtrans %}
+ {% trans %}Delete{% endtrans %}
+ {%- endif -%}
+
{% endfor %}
{% endblock content %}
\ No newline at end of file
diff --git a/pedagogy/urls.py b/pedagogy/urls.py
index 7f826428..c5d7b8b9 100644
--- a/pedagogy/urls.py
+++ b/pedagogy/urls.py
@@ -46,6 +46,7 @@ urlpatterns = [
# Administration : Create Update Delete Edit
url(r"^uv/create$", UVCreateView.as_view(), name="uv_create"),
url(r"^uv/(?P[0-9]+)/delete$", UVDeleteView.as_view(), name="uv_delete"),
+ url(r"^uv/(?P[0-9]+)/edit$", UVUpdateView.as_view(), name="uv_update"),
url(
r"^department/create$",
EducationDepartmentCreateView.as_view(),
diff --git a/pedagogy/views.py b/pedagogy/views.py
index 7427bc17..3b344228 100644
--- a/pedagogy/views.py
+++ b/pedagogy/views.py
@@ -22,7 +22,15 @@
#
#
-from django.views.generic import CreateView, DeleteView, DetailView, ListView, FormView
+from django.views.generic import (
+ CreateView,
+ DeleteView,
+ DetailView,
+ UpdateView,
+ ListView,
+ FormView,
+ View,
+)
from django.core.urlresolvers import reverse_lazy
from core.views import (
@@ -36,6 +44,32 @@ from core.views import (
from pedagogy.forms import UVForm
from pedagogy.models import UV
+# Some mixins
+
+
+class CanCreateUVFunctionMixin(View):
+ """
+ Add the function can_create_uv(user) into the template
+ """
+
+ @staticmethod
+ def can_create_uv(user):
+ """
+ Creates a dummy instance of UV and test is_owner
+ """
+ return user.is_owner(UV())
+
+ def get_context_data(self, **kwargs):
+ """
+ Pass the function to the template
+ """
+ kwargs = super(CanCreateUVFunctionMixin, self).get_context_data(**kwargs)
+ kwargs["can_create_uv"] = self.can_create_uv
+ return kwargs
+
+
+# Acutal views
+
class UVDetailFormView(DetailFormView):
"""
@@ -54,7 +88,7 @@ class UVCommentDetailView(DetailView):
pass
-class UVListView(CanViewMixin, ListView):
+class UVListView(CanViewMixin, CanCreateUVFunctionMixin, ListView):
"""
UV guide main page
"""
@@ -108,12 +142,36 @@ class UVCreateView(CanCreateMixin, CreateView):
return reverse_lazy("pedagogy:uv_detail", kwargs={"uv_id": self.object.id})
-class UVDeleteView(DeleteView):
+class UVDeleteView(CanEditPropMixin, DeleteView):
"""
Allow to delete an UV (Privileged)
"""
- pass
+ model = UV
+ pk_url_kwarg = "uv_id"
+ template_name = "core/delete_confirm.jinja"
+
+ def get_success_url(self):
+ return reverse_lazy("pedagogy:guide")
+
+
+class UVUpdateView(CanEditPropMixin, UpdateView):
+ """
+ Allow to edit an UV (Privilegied)
+ """
+
+ model = UV
+ form_class = UVForm
+ pk_url_kwarg = "uv_id"
+ template_name = "core/edit.jinja"
+
+ def get_form_kwargs(self):
+ kwargs = super(UVUpdateView, self).get_form_kwargs()
+ kwargs["author_id"] = self.request.user.id
+ return kwargs
+
+ def get_success_url(self):
+ return reverse_lazy("pedagogy:uv_detail", kwargs={"uv_id": self.object.id})
class EducationDepartmentCreateView(CreateView):