summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2016-04-08 14:50:16 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2016-04-15 21:54:18 +0200
commitbe41cbcdc427d931fb20e65f6c2a019de97f9f23 (patch)
treef3fa77fb457d24b628b2fb2399467b4d26a2902f
parent03df7178744588f3d69cb5ffb36d55eea9217e28 (diff)
downloadIshtar-be41cbcdc427d931fb20e65f6c2a019de97f9f23.tar.bz2
Ishtar-be41cbcdc427d931fb20e65f6c2a019de97f9f23.zip
Modify a person from his sheet
-rw-r--r--ishtar_common/menu_base.py3
-rw-r--r--ishtar_common/menus.py8
-rw-r--r--ishtar_common/models.py6
-rw-r--r--ishtar_common/templates/ishtar/blocks/modify_toolbar.html1
-rw-r--r--ishtar_common/templates/ishtar/sheet.html1
-rw-r--r--ishtar_common/templates/ishtar/sheet_person.html8
-rw-r--r--ishtar_common/templates/ishtar/sheet_toolbar.html2
-rw-r--r--ishtar_common/templatetags/link_to_window.py22
-rw-r--r--ishtar_common/urls.py2
-rw-r--r--ishtar_common/views.py9
10 files changed, 52 insertions, 10 deletions
diff --git a/ishtar_common/menu_base.py b/ishtar_common/menu_base.py
index eb08d8c78..d8ee0775c 100644
--- a/ishtar_common/menu_base.py
+++ b/ishtar_common/menu_base.py
@@ -107,7 +107,8 @@ class MenuItem:
prefix = (self.model._meta.app_label + '.') if self.model else ''
for access_control in self.access_controls:
access_control = prefix + access_control
- if user.has_perm(access_control, self.model, obj):
+ if user.has_perm(access_control, self.model, obj=obj,
+ session=session):
return True
# manage by person type
if hasattr(user, 'ishtaruser'):
diff --git a/ishtar_common/menus.py b/ishtar_common/menus.py
index e55b288bf..36b53b162 100644
--- a/ishtar_common/menus.py
+++ b/ishtar_common/menus.py
@@ -59,12 +59,20 @@ class Menu:
self.current_action = current_action
self.selected_idx = None
self.session = session
+ self.items_by_idx = {}
def init(self):
if self.initialized:
return
self.items = {}
+ self.items_by_idx = {}
for idx, main_menu in enumerate(self.childs):
+ self.items_by_idx[main_menu.idx] = main_menu
+ for child in main_menu.childs:
+ self.items_by_idx[child.idx] = child
+ if hasattr(child, 'childs'):
+ for subchild in child.childs:
+ self.items_by_idx[subchild.idx] = subchild
selected = main_menu.set_items(
self.user, self.items,
self.current_action, session=self.session)
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index a3c3ba575..6021d5fa8 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -2056,6 +2056,8 @@ class Person(Address, Merge, OwnPerms, ValueGetter):
)
TABLE_COLS = ('name', 'surname', 'raw_name', 'email', 'person_types_list',
'attached_to')
+ SHOW_URL = 'show-person'
+ MODIFY_URL = 'person_modify'
title = models.CharField(_(u"Title"), max_length=100, choices=TYPE,
blank=True, null=True)
surname = models.CharField(_(u"Surname"), max_length=50, blank=True,
@@ -2236,7 +2238,7 @@ class IshtarUser(User):
def full_label(self):
return self.person.full_label()
- def has_perm(self, perm, model=None, session=None):
+ def has_perm(self, perm, model=None, session=None, obj=None):
if not session:
return super(IshtarUser, self).has_perm(perm, model)
cache_key = 'usersession-{}-{}'.format(session.session_key, perm,
@@ -2244,7 +2246,7 @@ class IshtarUser(User):
res = cache.get(cache_key)
if res in (True, False):
return res
- res = super(IshtarUser, self).has_perm(perm, model)
+ res = super(IshtarUser, self).has_perm(perm, obj)
cache.set(cache_key, res, settings.CACHE_SMALLTIMEOUT)
return res
diff --git a/ishtar_common/templates/ishtar/blocks/modify_toolbar.html b/ishtar_common/templates/ishtar/blocks/modify_toolbar.html
new file mode 100644
index 000000000..6f8cc7584
--- /dev/null
+++ b/ishtar_common/templates/ishtar/blocks/modify_toolbar.html
@@ -0,0 +1 @@
+{% load i18n link_to_window %}{% if item %}<div class='tool modify'><a href='{{item|link_to_modify}}'>{% trans "Modify" %}</a></div>{% endif %}
diff --git a/ishtar_common/templates/ishtar/sheet.html b/ishtar_common/templates/ishtar/sheet.html
index 1302e4637..714bfa762 100644
--- a/ishtar_common/templates/ishtar/sheet.html
+++ b/ishtar_common/templates/ishtar/sheet.html
@@ -44,6 +44,7 @@ jQuery(document).ready(function(){
});
</script>
{% endblock %}
+{% block header_title %}{% endblock %}
<div class="body">
{% block toolbar %}{% endblock %}
{% block content %}
diff --git a/ishtar_common/templates/ishtar/sheet_person.html b/ishtar_common/templates/ishtar/sheet_person.html
index 5027026c5..f63bbc588 100644
--- a/ishtar_common/templates/ishtar/sheet_person.html
+++ b/ishtar_common/templates/ishtar/sheet_person.html
@@ -1,14 +1,10 @@
{% extends "ishtar/sheet.html" %}
{% load i18n window_field window_tables %}
-{% block head_sheet %}
-{{block.super}}
-<h1>{% trans "Person"%}</h1>
-{% endblock %}
+{% block header_title %}<h1>{% trans "Person"%}</h1>{% endblock %}
+{% block toolbar %}{% include "ishtar/sheet_toolbar.html" %}{% endblock %}
{% block content %}
-<div class='tool'>{%trans "Export as:"%} <a href='{% url show-person item.pk "odt" %}'>{%trans "OpenOffice.org file"%}</a>, <a href='{% url show-person item.pk "pdf" %}'>{%trans "PDF file"%}</a></div>
-
<h3>{% trans "Identity" %}</h3>
{% field "Name" item.name %}
diff --git a/ishtar_common/templates/ishtar/sheet_toolbar.html b/ishtar_common/templates/ishtar/sheet_toolbar.html
index 2e059781e..7e2c1659a 100644
--- a/ishtar_common/templates/ishtar/sheet_toolbar.html
+++ b/ishtar_common/templates/ishtar/sheet_toolbar.html
@@ -1,2 +1,2 @@
{% load i18n link_to_window %}<div class='tool'>{%trans "Export as:"%} <a href='{{item|link_to_odt}}'>{%trans "OpenOffice.org file"%}</a>, <a href='{{item|link_to_pdf}}'>{%trans "PDF file"%}</a></div>
-
+{% modify_toolbar item "person_modification" %}
diff --git a/ishtar_common/templatetags/link_to_window.py b/ishtar_common/templatetags/link_to_window.py
index 65e8b23ca..5ff928bb1 100644
--- a/ishtar_common/templatetags/link_to_window.py
+++ b/ishtar_common/templatetags/link_to_window.py
@@ -24,3 +24,25 @@ def link_to_odt(item):
@register.filter
def link_to_pdf(item):
return reverse(item.SHOW_URL, args=[item.pk, 'pdf'])
+
+
+@register.filter
+def link_to_modify(item):
+ if not hasattr(item, 'MODIFY_URL') or not item:
+ return ""
+ return reverse(item.MODIFY_URL, args=[item.pk])
+
+
+@register.inclusion_tag('ishtar/blocks/modify_toolbar.html',
+ takes_context=True)
+def modify_toolbar(context, item, action):
+ request = context.get('request')
+ items_by_idx = request.session['MENU'].items_by_idx.keys()
+ if action not in items_by_idx:
+ return {}
+ menu = request.session['MENU'].items_by_idx[action]
+ user = request.user
+ if not hasattr(user, 'ishtaruser') or \
+ not menu.is_available(user.ishtaruser, item):
+ return {}
+ return {'item': item}
diff --git a/ishtar_common/urls.py b/ishtar_common/urls.py
index 036494354..a3bcaffb5 100644
--- a/ishtar_common/urls.py
+++ b/ishtar_common/urls.py
@@ -43,6 +43,8 @@ urlpatterns = patterns(
url(r'person_modification/(?P<step>.+)?$',
check_rights(['change_person', 'change_own_person'])(
views.person_modification_wizard), name='person_modification'),
+ url(r'person_modify/(?P<pk>.+)/$', views.person_modify,
+ name='person_modify'),
url(r'person_deletion/(?P<step>.+)?$',
check_rights(['change_person', 'change_own_person'])(
views.person_deletion_wizard), name='person_deletion'),
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index 54eb9164f..296d56648 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -103,6 +103,15 @@ person_modification_wizard = wizards.PersonModifWizard.as_view(
label=_(u"Person modification"),
url_name='person_modification')
+
+def person_modify(request, pk):
+ person_modification_wizard(request)
+ wizards.PersonModifWizard.session_set_value(
+ request, 'selec-person_modification', 'pk', pk, reset=True)
+ return redirect(reverse('person_modification',
+ kwargs={'step': 'identity-person_modification'}))
+
+
person_deletion_wizard = wizards.PersonDeletionWizard.as_view(
[('selec-person_deletion', forms.PersonFormSelection),
('final-person_deletion', FinalDeleteForm)],