summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ishtar_common/models.py44
-rw-r--r--ishtar_common/templates/ishtar/blocks/window_nav.html18
-rw-r--r--ishtar_common/templatetags/window_header.py17
-rw-r--r--ishtar_common/urls.py28
-rw-r--r--ishtar_common/utils.py2
-rw-r--r--ishtar_common/views.py15
6 files changed, 74 insertions, 50 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index 3715c0326..bc0cb7b09 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -1216,9 +1216,34 @@ class DocumentItem(object):
return Document.objects.none()
return self.documents.filter(image__isnull=False).exclude(image="")
+ def get_extra_actions(self, request):
+ """
+ For sheet template: return "Add document / image" action
+ """
+ # url, base_text, icon, extra_text, extra css class
+ actions = []
+ can_add_doc = request.user.ishtaruser.has_right(
+ 'add_document', request.session) or (
+ request.user.ishtaruser.has_right(
+ 'add_own_document', request.session) and
+ self.is_own(request.user.ishtaruser)
+ )
+ if can_add_doc:
+ actions = [
+ (
+ reverse("create-document") + "?{}={}".format(self.SLUG,
+ self.pk),
+ _(u"Add document/image"),
+ "fa fa-plus",
+ _(u"doc./image"),
+ ""
+ )
+ ]
+ return actions
+
-class BaseHistorizedItem(FullSearch, Imported, JsonData, FixAssociated,
- DocumentItem):
+class BaseHistorizedItem(DocumentItem, FullSearch, Imported, JsonData,
+ FixAssociated):
"""
Historized item with external ID management.
All historized items are searcheable and have a data json field
@@ -2707,19 +2732,16 @@ class Person(Address, Merge, OwnPerms, ValueGetter):
return slugify(u"-".join(values))
def operation_docs_q(self):
- from archaeological_operations.models import OperationSource
- return OperationSource.objects.filter(
- authors__person=self)
+ return Document.objects.filter(
+ authors__person=self, operations__pk__isnull=False)
def contextrecord_docs_q(self):
- from archaeological_context_records.models import ContextRecordSource
- return ContextRecordSource.objects.filter(
- authors__person=self)
+ return Document.objects.filter(
+ authors__person=self, context_records__pk__isnull=False)
def find_docs_q(self):
- from archaeological_finds.models import FindSource
- return FindSource.objects.filter(
- authors__person=self)
+ return Document.objects.filter(
+ authors__person=self, finds__pk__isnull=False)
def save(self, *args, **kwargs):
super(Person, self).save(*args, **kwargs)
diff --git a/ishtar_common/templates/ishtar/blocks/window_nav.html b/ishtar_common/templates/ishtar/blocks/window_nav.html
index 89263d0de..764797ce2 100644
--- a/ishtar_common/templates/ishtar/blocks/window_nav.html
+++ b/ishtar_common/templates/ishtar/blocks/window_nav.html
@@ -32,19 +32,25 @@
<div class='offset-md-8 col-md-4 text-right'>
{% endif %}
<div class="btn-group btn-group-sm" role="group" aria-label="{% trans 'Actions' %}">
- {% block extra_actions %}{% endblock %}
+ {% if pin_action and item.SLUG %}
+ <a class="btn btn-secondary" href="#" class='pin-action'
+ onclick='$.get("{% url "pin" item.SLUG item.pk %}", function(){load_shortcut_menu(); display_info("{% trans 'Item pined in your shortcut menu.' %}")});' title="{% trans 'Pin' %}">
+ <i class="fa fa-thumb-tack"></i>
+ </a>
+ {% endif %}
+ {% block extra_actions %}{% endblock %}
{% if modify_url %}
<a class="btn btn-secondary" href='{% url modify_url item.pk %}'
title="{% trans 'Modify' %}">
<i class="fa fa-pencil"></i>
</a>
{% endif %}
- {% if pin_action and item.SLUG %}
- <a class="btn btn-secondary" href="#" class='pin-action'
- onclick='$.get("{% url "pin" item.SLUG item.pk %}", function(){load_shortcut_menu(); display_info("{% trans 'Item pined in your shortcut menu.' %}")});' title="{% trans 'Pin' %}">
- <i class="fa fa-thumb-tack"></i>
+ {% for url, base_text, icon, extra_text, css_class in extra_actions %}
+ <a class="btn btn-secondary{% if css_class %} {{css_class}}{% endif %}"
+ href='{{url}}' title="{{base_text}}">
+ <i class="{{icon}}"></i> {{extra_text}}
</a>
- {% endif %}
+ {% endfor %}
<a class="btn btn-secondary" href='{% url show_url item.pk "odt" %}'
title='{% trans "Export as OpenOffice.org file"%}'>
ODT <i class="fa fa-file-word-o" aria-hidden="true"></i>
diff --git a/ishtar_common/templatetags/window_header.py b/ishtar_common/templatetags/window_header.py
index 5322c4478..ef66a89ff 100644
--- a/ishtar_common/templatetags/window_header.py
+++ b/ishtar_common/templatetags/window_header.py
@@ -4,9 +4,12 @@ from django.utils.safestring import mark_safe
register = template.Library()
-@register.inclusion_tag('ishtar/blocks/window_nav.html')
-def window_nav(item, window_id, show_url, modify_url='', histo_url='',
+@register.inclusion_tag('ishtar/blocks/window_nav.html', takes_context=True)
+def window_nav(context, item, window_id, show_url, modify_url='', histo_url='',
revert_url='', previous=None, nxt=None, pin_action=False):
+ extra_actions = []
+ if hasattr(item, 'get_extra_actions'):
+ extra_actions = item.get_extra_actions(context['request'])
return {
'show_url': show_url,
'modify_url': modify_url,
@@ -16,11 +19,16 @@ def window_nav(item, window_id, show_url, modify_url='', histo_url='',
'window_id': window_id,
'previous': previous,
'next': nxt,
+ 'extra_actions': extra_actions,
'pin_action': pin_action}
-@register.inclusion_tag('ishtar/blocks/window_file_nav.html')
-def window_file_nav(item, window_id, previous=None, nxt=None):
+@register.inclusion_tag('ishtar/blocks/window_file_nav.html',
+ takes_context=True)
+def window_file_nav(context, item, window_id, previous=None, nxt=None):
+ extra_actions = []
+ if hasattr(item, 'get_extra_actions'):
+ extra_actions = item.get_extra_actions(context['request'])
show_url = 'show-file'
modify_url = 'file_modify'
histo_url = 'show-historized-file'
@@ -36,4 +44,5 @@ def window_file_nav(item, window_id, previous=None, nxt=None):
'window_id': window_id,
'previous': previous,
'next': nxt,
+ 'extra_actions': extra_actions,
'pin_action': True}
diff --git a/ishtar_common/urls.py b/ishtar_common/urls.py
index d030c4529..0c249d131 100644
--- a/ishtar_common/urls.py
+++ b/ishtar_common/urls.py
@@ -248,34 +248,6 @@ urlpatterns += [
url(r'(?P<action_slug>' + actions + r')/$', views.action, name='action'),
]
-"""
- url(r'operation_source_search/(?P<step>.+)?$',
- check_rights(['view_operation', 'view_own_operation'])(
- views.operation_source_search_wizard),
- name='operation_source_search'),
- url(r'operation_source_creation/(?P<step>.+)?$',
- check_rights(['change_operation', 'change_own_operation'])(
- views.operation_source_creation_wizard),
- name='operation_source_creation'),
- url(r'operation_source_modification/(?P<step>.+)?$',
- check_rights(['change_operation', 'change_own_operation'])(
- views.operation_source_modification_wizard),
- name='operation_source_modification'),
- url(r'operation_source_modify/(?P<pk>.+)/$',
- views.operation_source_modify, name='operation_source_modify'),
- url(r'operation_source_deletion/(?P<step>.+)?$',
- check_rights(['change_operation', 'change_own_operation'])(
- views.operation_source_deletion_wizard),
- name='operation_source_deletion'),
-
- url(r'show-operationsource(?:/(?P<pk>.+))?/(?P<type>.+)?$',
- views.show_operationsource, name=models.OperationSource.SHOW_URL),
- url(r'get-operationsource/(?P<type>.+)?$',
- views.get_operationsource, name='get-operationsource'),
- url(r'get-operationsource-full/(?P<type>.+)?$',
- views.get_operationsource, name='get-operationsource-full',
- kwargs={'full': True}),
-"""
if settings.DEBUG:
urlpatterns += static(settings.STATIC_URL,
diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py
index b089ddcee..6331766e1 100644
--- a/ishtar_common/utils.py
+++ b/ishtar_common/utils.py
@@ -62,7 +62,7 @@ class BColors:
CSV_OPTIONS = {'delimiter': ',', 'quotechar': '"', 'quoting': QUOTE_ALL}
-def check_rights(rights=[], redirect_url='/'):
+def check_rights(rights=None, redirect_url='/'):
"""
Decorator that checks the rights to access the view.
"""
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index 74aa589c1..2baa5994a 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -1596,6 +1596,21 @@ class DocumentFormMixin(IshtarMixin, LoginRequiredMixin):
class DocumentCreateView(DocumentFormMixin, CreateView):
page_name = _(u"Document creation")
+ def get_form_kwargs(self):
+ kwargs = super(DocumentCreateView, self).get_form_kwargs()
+ initial = kwargs.get('initial', {})
+ for related_key in models.Document.RELATED_MODELS_ALT:
+ model = models.Document._meta.get_field(related_key).related_model
+ if model.SLUG in self.request.GET:
+ try:
+ item = model.objects.get(pk=self.request.GET[model.SLUG])
+ except model.DoesNotExist:
+ continue
+ initial[related_key] = str(item.pk)
+ if initial:
+ kwargs['initial'] = initial
+ return kwargs
+
class DocumentSelectView(IshtarMixin, LoginRequiredMixin,
FormView):