summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@proxience.com>2014-10-30 00:49:28 +0100
committerÉtienne Loks <etienne.loks@proxience.com>2014-10-30 00:52:17 +0100
commit64575e18848ed4020019f532560dbdf8d2b3adb0 (patch)
tree316a8cfc21ab85b6a652fb685a87d72ad90a27a6 /ishtar_common
parent46c62fbab9959af12bfab844938879d3966dae42 (diff)
downloadIshtar-64575e18848ed4020019f532560dbdf8d2b3adb0.tar.bz2
Ishtar-64575e18848ed4020019f532560dbdf8d2b3adb0.zip
Add a new menu for admin tasks - new view for global variable edition (refs #2111)
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/ishtar_menu.py13
-rw-r--r--ishtar_common/menu_base.py6
-rw-r--r--ishtar_common/static/media/style.css8
-rw-r--r--ishtar_common/templates/blocks/inline_formset.html8
-rw-r--r--ishtar_common/templates/ishtar/formset.html11
-rw-r--r--ishtar_common/urls.py4
-rw-r--r--ishtar_common/views.py30
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']