diff options
-rw-r--r-- | ishtar_common/menu_base.py | 3 | ||||
-rw-r--r-- | ishtar_common/menus.py | 8 | ||||
-rw-r--r-- | ishtar_common/models.py | 6 | ||||
-rw-r--r-- | ishtar_common/templates/ishtar/blocks/modify_toolbar.html | 1 | ||||
-rw-r--r-- | ishtar_common/templates/ishtar/sheet.html | 1 | ||||
-rw-r--r-- | ishtar_common/templates/ishtar/sheet_person.html | 8 | ||||
-rw-r--r-- | ishtar_common/templates/ishtar/sheet_toolbar.html | 2 | ||||
-rw-r--r-- | ishtar_common/templatetags/link_to_window.py | 22 | ||||
-rw-r--r-- | ishtar_common/urls.py | 2 | ||||
-rw-r--r-- | ishtar_common/views.py | 9 |
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)], |