diff options
Diffstat (limited to 'ishtar_common')
| -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)], | 
