include (experimental) editable metadata on user documents (#19381)

This commit is contained in:
Frédéric Péters 2017-10-16 14:00:51 +02:00
parent 58c2ce45fa
commit 0c64f7ecf5
8 changed files with 64 additions and 3 deletions

View File

@ -37,3 +37,12 @@ class UploadForm(forms.ModelForm):
class Meta:
model = models.UserDocument
fields = []
class EditForm(forms.ModelForm):
class Meta:
model = models.UserDocument
fields = ['title', 'description', 'expiration_date']
widgets = {
'expiration_date': forms.TextInput(attrs={'type': 'date'})
}

View File

@ -61,6 +61,17 @@ class UserDocument(models.Model):
deletable_by_user = models.BooleanField(
verbose_name=_('deletable by user'),
default=True)
title = models.CharField(
verbose_name=_('title'),
max_length=200,
blank=True)
description = models.TextField(
verbose_name=_('description'),
blank=True)
expiration_date = models.DateField(
verbose_name=_('expiration date'),
blank=True,
null=True)
class Meta:
verbose_name = _('user document')

View File

@ -6,7 +6,7 @@ from copy import deepcopy
from django.core.exceptions import PermissionDenied
from django.views.decorators.clickjacking import xframe_options_exempt
from django.views.generic import CreateView, DeleteView, View, TemplateView
from django.views.generic import CreateView, DeleteView, UpdateView, View, TemplateView
from django.core.urlresolvers import reverse
from django.contrib.auth.decorators import login_required
from django.shortcuts import get_object_or_404, resolve_url
@ -82,6 +82,11 @@ class Homepage(Documents, SingleTableMixin, CommonUpload):
'per_page': 5,
}
def get_context_data(self, **kwargs):
ctx = super(Homepage, self).get_context_data(**kwargs)
ctx['include_edit_link'] = settings.INCLUDE_EDIT_LINK
return ctx
def get_success_url(self):
return ''
@ -121,6 +126,19 @@ class Delete(Logger, DeleteView):
return '../..?%s' % self.request.META['QUERY_STRING']
class Edit(Logger, UpdateView):
model = models.UserDocument
form_class = forms.EditForm
def dispatch(self, request, *args, **kwargs):
if getattr(request, 'user', None) != self.get_object().user:
raise PermissionDenied
return super(Edit, self).dispatch(request, *args, **kwargs)
def get_success_url(self):
return '../..?%s' % self.request.META['QUERY_STRING']
class Pick(Documents, Logger, View):
http_method_allowed = ['post']
@ -273,6 +291,7 @@ thumbnail = login_required(Thumbnail.as_view())
upload = login_required(Upload.as_view())
remote_download = RemoteDownload.as_view()
delete = login_required(Delete.as_view())
edit = login_required(Edit.as_view())
pick = login_required(Pick.as_view())
jsonp = login_required(JSONP.as_view())
json = login_required(JSON.as_view())

View File

@ -207,6 +207,8 @@ LOGGING = {
},
}
INCLUDE_EDIT_LINK = False
local_settings_file = os.environ.get('FARGO_SETTINGS_FILE',
os.path.join(
os.path.dirname(__file__),

View File

@ -135,3 +135,12 @@ thead th.orderable.desc > a:after {
position: absolute;
bottom: 0;
}
.icon-edit::before {
font-family: FontAwesome;
font-weight: normal;
font-style: normal;
display: inline-block;
text-decoration: none;
content: "\f040"; /* pencil */
}

View File

@ -1,12 +1,19 @@
{% extends "fargo/base.html" %}
{% load render_table from django_tables2 %}
{% load i18n %}
{% load gadjo i18n staticfiles %}
{% block content %}
<script src="{% xstatic 'jquery-ui' 'jquery-ui.min.js' %}"></script>
<script src="{% static "js/gadjo.js" %}"></script>
<script>
$(function () {
$('tbody').on("click", "tr", function (event) {
var $target = $(event.target)
if ($target.is('a')) {
/* let it be */
return true;
}
if (! $target.is('tr')) {
$target = $target.parents('tr');
}

View File

@ -32,6 +32,9 @@
{% endwith %}
<td class="action-column">
{% block action-column %}
{% if include_edit_link %}
<a class="icon-edit" rel="popup" href="{% url 'edit' pk=row.record.pk %}"></a>
{% endif %}
{% if row.record.deletable_by_user %}
<form method="post" action="{% url 'delete' pk=row.record.pk %}{% querystring %}">
{% csrf_token %}

View File

@ -2,7 +2,7 @@ from django.conf import settings
from django.conf.urls import include, url
from django.contrib import admin
from .fargo.views import (home, jsonp, json, document, download, pick, delete, upload,
from .fargo.views import (home, jsonp, json, document, download, pick, delete, upload, edit,
remote_download, login, logout, pick_list, document_types, thumbnail)
from .fargo.api_views import (push_document, recent_documents, router)
@ -12,6 +12,7 @@ urlpatterns = [
url(r'^jsonp/$', jsonp, name='jsonp'),
url(r'^json/$', json, name='json'),
url(r'^(?P<pk>\d+)/$', document, name='document'),
url(r'^(?P<pk>\d+)/edit/$', edit, name='edit'),
url(r'^(?P<pk>\d+)/delete/$', delete, name='delete'),
url(r'^(?P<pk>\d+)/pick/$', pick, name='pick'),
url(r'^(?P<pk>\d+)/download/(?P<filename>[^/]*)$', download,