diff options
Diffstat (limited to 'ishtar_common')
| -rw-r--r-- | ishtar_common/ishtar_menu.py | 13 | ||||
| -rw-r--r-- | ishtar_common/menu_base.py | 6 | ||||
| -rw-r--r-- | ishtar_common/static/media/style.css | 8 | ||||
| -rw-r--r-- | ishtar_common/templates/blocks/inline_formset.html | 8 | ||||
| -rw-r--r-- | ishtar_common/templates/ishtar/formset.html | 11 | ||||
| -rw-r--r-- | ishtar_common/urls.py | 4 | ||||
| -rw-r--r-- | ishtar_common/views.py | 30 | 
7 files changed, 70 insertions, 10 deletions
| diff --git a/ishtar_common/ishtar_menu.py b/ishtar_common/ishtar_menu.py index 0f869dd66..4303b707e 100644 --- a/ishtar_common/ishtar_menu.py +++ b/ishtar_common/ishtar_menu.py @@ -25,6 +25,16 @@ from ishtar_common.menu_base import SectionItem, MenuItem  import models  MENU_SECTIONS = [ +    (5, SectionItem('admin', _(u"Administration"), +            childs=[ +                MenuItem('account_management', _(u"Account management"), +                    model=models.IshtarUser, +                    access_controls=['add_ishtaruser',]), +                MenuItem('admin-globalvar', _(u"Global variables"), +                    model=models.GlobalVar, +                    access_controls=['add_globalvar',]), +            ]) +    ),      (10, SectionItem('administration', _(u"Directory"),              childs=[                  SectionItem('person', _(u"Person"), @@ -54,9 +64,6 @@ MENU_SECTIONS = [                          access_controls=['change_organization',                                           'change_own_organization']),                      ]), -                MenuItem('account_management', _(u"Account management"), -                    model=models.IshtarUser, -                    access_controls=['add_ishtaruser',]),              ])      )  ] diff --git a/ishtar_common/menu_base.py b/ishtar_common/menu_base.py index 24d63a3e6..2331ecbd7 100644 --- a/ishtar_common/menu_base.py +++ b/ishtar_common/menu_base.py @@ -57,8 +57,9 @@ class MenuItem:      def can_be_available(self, user):          if not self.access_controls:              return True +        prefix = (self.model._meta.app_label + '.') if self.model else ''          for access_control in self.access_controls: -            access_control = self.model._meta.app_label + '.' + access_control +            access_control = prefix + access_control              if user.has_perm(access_control, self.model) or \                 access_control in user.get_group_permissions():                  return True @@ -71,8 +72,9 @@ class MenuItem:      def is_available(self, user, obj=None):          if not self.access_controls:              return True +        prefix = (self.model._meta.app_label + '.') if self.model else ''          for access_control in self.access_controls: -            access_control = self.model._meta.app_label + '.' + access_control +            access_control = prefix + access_control              if user.has_perm(access_control, self.model, obj):                  return True          # manage by person type diff --git a/ishtar_common/static/media/style.css b/ishtar_common/static/media/style.css index 3c2c429b1..23bc28832 100644 --- a/ishtar_common/static/media/style.css +++ b/ishtar_common/static/media/style.css @@ -593,6 +593,14 @@ table.confirm tr.spacer td:last-child{      right:135px;  } +#global-vars textarea{ +    width:220px; +} + +#global-vars input[type=text]{ +    width:160px; +} +  #dashboard{      padding-top: 20px;  } diff --git a/ishtar_common/templates/blocks/inline_formset.html b/ishtar_common/templates/blocks/inline_formset.html index e36405118..744e125f5 100644 --- a/ishtar_common/templates/blocks/inline_formset.html +++ b/ishtar_common/templates/blocks/inline_formset.html @@ -1,12 +1,12 @@  {% load i18n %}      {% if extra_formset.non_form_errors %}<div class='errors'>{{extra_formset.non_form_errors.as_ul}}</div>{% endif %} -    {% if header %}<table class='inline-table'> +    {% if header %}<table class='inline-table' id='{{formset}}aaa'>      <caption>{% trans caption %}</caption> -    {% endif %}{% for frm in formset%}{% if header %}<thead> -    <tr>{% for field in frm.visible_fields%} +    <thead> +    <tr>{% for field in formset.0.visible_fields%}          <th>{{field.label}}</th>{%endfor%}      </tr> -    </thead>{% endif %} +    </thead>{% endif %}{% for frm in formset%}      {% if forloop.first and not skip %}<tbody>{%endif%}      {% if not skip or not forloop.first %}<tr>{% endif %}{% for field in frm.visible_fields %}          <td> diff --git a/ishtar_common/templates/ishtar/formset.html b/ishtar_common/templates/ishtar/formset.html new file mode 100644 index 000000000..5ae0e7c51 --- /dev/null +++ b/ishtar_common/templates/ishtar/formset.html @@ -0,0 +1,11 @@ +{% extends "base.html" %} +{% load i18n inline_formset %} +{% block content %} +<h2>{% trans "Global variables" %}</h2> +<div class='form' id='global-vars'> +<form action="." method="post">{% csrf_token %} +  {% inline_formset ' ' formset %} +<input type="submit" value="{% trans "Validate" %}"/> +</form> +</div> +{% endblock %} diff --git a/ishtar_common/urls.py b/ishtar_common/urls.py index 8b148530e..c361ef438 100644 --- a/ishtar_common/urls.py +++ b/ishtar_common/urls.py @@ -23,7 +23,7 @@ from django.conf.urls.static import static  from menus import menu -import views +from ishtar_common import views  urlpatterns, actions = [], [] @@ -91,6 +91,8 @@ urlpatterns += patterns('ishtar_common.views',             'show_organization', name='show-organization'),       url(r'autocomplete-organization/([0-9_]+)?$',             'autocomplete_organization', name='autocomplete-organization'), +     url(r'admin-globalvar/', views.GlobalVarEdit.as_view(), +        name='admin-globalvar'),       url(r'(?P<action_slug>' + actions + r')/$', 'action',             name='action'),  ) diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 889bd3893..c27aae74b 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -32,8 +32,11 @@ from tempfile import NamedTemporaryFile  import ho.pisa as pisa  import unicodedata +from extra_views import ModelFormSetView +  from django.conf import settings  from django.contrib.auth import logout +from django.contrib.auth.decorators import login_required  from django.core import serializers  from django.core.exceptions import ObjectDoesNotExist  from django.core.urlresolvers import reverse, NoReverseMatch @@ -41,6 +44,7 @@ from django.db.models import Q, ImageField  from django.http import HttpResponse, Http404  from django.shortcuts import render_to_response, redirect  from django.template import RequestContext, loader +from django.utils.decorators import method_decorator  from django.utils.translation import ugettext, ugettext_lazy as _  if settings.XHTML2ODT_PATH: @@ -790,3 +794,29 @@ def dashboard_main_detail(request, item_name):                  '%d_%d_%d' % (n.minute, n.second, n.microsecond)      return render_to_response('ishtar/dashboards/dashboard_main_detail.html',                              dct, context_instance=RequestContext(request)) + + +class LoginRequiredMixin(object): +    @method_decorator(login_required) +    def dispatch(self, request, *args, **kwargs): +        return super(LoginRequiredMixin, self).dispatch(request, *args, +                                                        **kwargs) +        if kwargs.get('pk') and not self.request.user.is_staff and \ +           not str(kwargs['pk']) == str(self.request.user.company.pk): +            return redirect(reverse('index')) +        return super(LoginRequiredMixin, self).dispatch(request, *args, +                                                        **kwargs) + +class AdminLoginRequiredMixin(LoginRequiredMixin): +    def dispatch(self, request, *args, **kwargs): +        if not request.user.is_staff: +            return redirect(reverse('start')) +        return super(AdminLoginRequiredMixin, self).dispatch(request, *args, +                                                        **kwargs) + +class GlobalVarEdit(AdminLoginRequiredMixin, ModelFormSetView): +    template_name = 'ishtar/formset.html' +    model = models.GlobalVar +    extra = 1 +    can_delete = True +    fields = ['slug', 'value', 'description'] | 
