#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright (C) 2010-2011 Étienne Loks # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as # published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # See the file COPYING for details. """ Menus """ from django.utils.translation import ugettext_lazy as _ import models class SectionItem: def __init__(self, idx, label, childs=[]): self.idx = idx self.label = label self.childs = childs self.available = False class MenuItem: def __init__(self, idx, label, model=None, access_controls=[]): self.idx = idx self.label = label self.model = model self.access_controls = access_controls self.available = False def can_be_available(self, user): if not self.access_controls: return True for access_control in self.access_controls: if user.has_perm('furnitures.' + access_control, self.model): return True return False def is_available(self, user, obj=None): if not self.access_controls: return True for access_control in self.access_controls: if user.has_perm('furnitures.' + access_control, self.model, obj): return True return False class Menu: def __init__(self, user): self.user = user self.initialized = False self.childs = [ SectionItem('administration', _(u"Administration"), childs=[ MenuItem('person_creation', _(u"Person creation"), model=models.Person, access_controls=['add_person', 'add_own_person']), MenuItem('person_modification', _(u"Person modification"), model=models.Person, access_controls=['change_person', 'change_own_person']), MenuItem('account_management', _(u"Account management"), model=models.IshtarUser, access_controls=['add_ishtaruser',]), ]), SectionItem('file_management', _(u"File management"), childs=[ MenuItem('file_creation', _(u"File creation"), model=models.File, access_controls=['add_file', 'add_own_file']), MenuItem('file_modification', _(u"File modification"), model=models.File, access_controls=['change_file', 'change_own_file']), MenuItem('file_deletion', _(u"File deletion"), model=models.File, access_controls=['delete_file', 'delete_own_file']), MenuItem('file_administrativeact', _(u"Add an administrative act"), model=models.Operation, access_controls=['change_file', 'change_own_file']), MenuItem('file_administrativeact_modification', _(u"Modify an administrative act"), model=models.AdministrativeAct, access_controls=['change_file', 'change_own_file']), MenuItem('file_administrativeact_deletion', _(u"Delete an administrative act"), model=models.AdministrativeAct, access_controls=['delete_file', 'delete_own_file']), ]), SectionItem('operation_management', _(u"Operation management"), childs=[ MenuItem('operation_creation', _(u"Operation creation"), model=models.Operation, access_controls=['add_operation', 'add_own_operation']), MenuItem('operation_modification', _(u"Operation modification"), model=models.Operation, access_controls=['change_operation', 'change_own_operation']), MenuItem('operation_closing', _(u"Operation closing"), model=models.Operation, access_controls=['change_operation', 'change_own_operation']), MenuItem('operation_deletion', _(u"Operation deletion"), model=models.Operation, access_controls=['change_operation', 'change_own_operation']), MenuItem('operation_administrativeact', _(u"Add an administrative act"), model=models.Operation, access_controls=['change_operation', 'change_own_operation']), MenuItem('operation_administrativeact_modification', _(u"Modify an administrative act"), model=models.AdministrativeAct, access_controls=['change_operation', 'change_own_operation']), MenuItem('operation_administrativeact_deletion', _(u"Delete an administrative act"), model=models.AdministrativeAct, access_controls=['operation_deletion', 'delete_own_operation']), ]), ] self.items = {} def init(self): if self.initialized: return for main_menu in self.childs: main_menu.available = False for child in main_menu.childs: if self.user: child.available = child.can_be_available(self.user) if child.available: main_menu.available = True self.items[child.idx] = child self.initialized = True menu = Menu(None) menu.init()