include (experimental) editable metadata on user documents (#19381)
This commit is contained in:
parent
58c2ce45fa
commit
0c64f7ecf5
|
@ -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'})
|
||||
}
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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())
|
||||
|
|
|
@ -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__),
|
||||
|
|
|
@ -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 */
|
||||
}
|
||||
|
|
|
@ -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');
|
||||
}
|
||||
|
|
|
@ -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 %}
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue