diff options
Diffstat (limited to 'ishtar/ishtar_base/menus.py')
| -rw-r--r-- | ishtar/ishtar_base/menus.py | 263 | 
1 files changed, 263 insertions, 0 deletions
diff --git a/ishtar/ishtar_base/menus.py b/ishtar/ishtar_base/menus.py new file mode 100644 index 000000000..3f8a7dd59 --- /dev/null +++ b/ishtar/ishtar_base/menus.py @@ -0,0 +1,263 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (C) 2010-2011 Étienne Loks  <etienne.loks_AT_peacefrogsDOTnet> + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero 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 Affero General Public License for more details. + +# You should have received a copy of the GNU Affero General Public License +# along with this program.  If not, see <http://www.gnu.org/licenses/>. + +# 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 +        self.items = {} + +    def can_be_available(self, user): +        for child in self.childs: +            if child.can_be_available(user): +                return True +        return False + +    def is_available(self, user, obj=None): +        for child in self.childs: +            if child.is_available(user, obj): +                return True +        return False + +    def set_items(self, user, items): +        if user: +            self.available = self.can_be_available(user) +        for child in self.childs: +            child.set_items(user, items) +            items[child.idx] = child + +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 + +    def set_items(self, user, items): +        if user: +            self.available = self.can_be_available(user) + +class Menu: +    def __init__(self, user): +        self.user = user +        self.initialized = False +        self.childs = [ +        SectionItem('administration', _(u"Administration"), +            childs=[SectionItem('person', _(u"Person"), +                childs=[ +                    MenuItem('person_creation', _(u"Creation"), +                        model=models.Person, +                        access_controls=['add_person', 'add_own_person']), +                    MenuItem('person_modification', _(u"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"Archaelogical file"), +            childs=[ +                    MenuItem('file_search', _(u"Search"), +                        model=models.File, +                        access_controls=['view_file', 'view_own_file']), +                    MenuItem('file_creation', _(u"Creation"), +                        model=models.File, +                        access_controls=['add_file', 'add_own_file']), +                    MenuItem('file_modification', _(u"Modification"), +                        model=models.File, +                        access_controls=['change_file', 'change_own_file']), +                    MenuItem('file_deletion', _(u"Deletion"), +                        model=models.File, +                        access_controls=['delete_file', 'delete_own_file']), +                    SectionItem('admin_act_files', _(u"Administrative act"), +                childs=[ +                    MenuItem('file_administrativeactfile', +                             _(u"Add"), +                      model=models.Operation, +                      access_controls=['change_file', 'change_own_file']), +                    MenuItem('file_administrativeactfile_modification', +                             _(u"Modification"), +                      model=models.AdministrativeAct, +                      access_controls=['change_file', 'change_own_file']), +                    MenuItem('file_administrativeactfile_deletion', +                             _(u"Deletion"), +                      model=models.AdministrativeAct, +                      access_controls=['delete_file', 'delete_own_file']), +                    ],), +            ]), +        SectionItem('operation_management', _(u"Operation"), +            childs=[ +                    MenuItem('operation_search', _(u"Search"), +                        model=models.Operation, +                        access_controls=['view_operation', +                                         'view_own_operation']), +                    MenuItem('operation_creation', _(u"Creation"), +                        model=models.Operation, +                        access_controls=['add_operation', +                                         'add_own_operation']), +                    MenuItem('operation_modification', _(u"Modification"), +                      model=models.Operation, +                      access_controls=['change_operation', +                                       'change_own_operation']), +                    MenuItem('operation_closing', _(u"Closing"), +                      model=models.Operation, +                      access_controls=['change_operation', +                                       'change_own_operation']), +                    MenuItem('operation_deletion', _(u"Deletion"), +                      model=models.Operation, +                      access_controls=['change_operation', +                                       'change_own_operation']), +                    SectionItem('admin_act_operations', +                                _(u"Administrative act"), +                childs=[ +                    MenuItem('operation_administrativeactop', +                             _(u"Add"), +                      model=models.Operation, +                      access_controls=['change_operation', +                                       'change_own_operation']), +                    MenuItem('operation_administrativeactop_modification', +                             _(u"Modification"), +                      model=models.AdministrativeAct, +                      access_controls=['change_operation', +                                       'change_own_operation']), +                    MenuItem('operation_administrativeactop_deletion', +                             _(u"Deletion"), +                      model=models.AdministrativeAct, +                      access_controls=['operation_deletion', +                                       'delete_own_operation']), +                    ],), +            ]), +        SectionItem('record_management', _(u"Context record"), +            childs=[ +                MenuItem('record_search', _(u"Search"), +                    model=models.ContextRecord, +                    access_controls=['view_contextrecord', +                                     'view_own_contextrecord']), +                MenuItem('record_creation', _(u"Creation"), +                    model=models.ContextRecord, +                    access_controls=['add_contextrecord', +                                     'add_own_contextrecord']), +                MenuItem('record_modification', _(u"Modification"), +                    model=models.ContextRecord, +                    access_controls=['change_contextrecord', +                                     'change_own_contextrecord']), +                MenuItem('record_deletion', _(u"Deletion"), +                    model=models.ContextRecord, +                    access_controls=['delete_contextrecord', +                                     'delete_own_contextrecord']), +            ]), +        SectionItem('item_management', _(u"Item"), +            childs=[ +                MenuItem('item_search', _(u"Search"), +                    model=models.Item, +                    access_controls=['view_item', +                                     'view_own_item']), +                MenuItem('item_creation', _(u"Creation"), +                    model=models.Item, +                    access_controls=['add_item', +                                     'add_own_item']), +                MenuItem('item_modification', _(u"Modification"), +                    model=models.Item, +                    access_controls=['change_item', +                                     'change_own_item']), +                MenuItem('treatment_creation', _(u"Add a treatment"), +                    model=models.Treatment, +                    access_controls=['add_treatment', +                                     'add_own_treatment']), +            ]), +        SectionItem('source_management', _(u"Documentation"), +            childs=[SectionItem('admin_add_sources', _(u"Add"), +                childs=[ +                MenuItem('operation_source_add', _(u"Related to an operation"), +                         model=models.OperationSource, +                         access_controls=['change_operation', +                                          'change_own_operation']), +                ]), +            ]), +        SectionItem('warehouse', _(u"Warehouse"), +            childs=[ +                    MenuItem('warehouse_inventory', _(u"Inventory"), +                        model=models.Warehouse, +                        access_controls=['change_warehouse',]), +                    MenuItem('warehouse_recording', _(u"Recording"), +                        model=models.Treatment, +                        access_controls=['add_treatment', 'add_own_treatment']), +                    MenuItem('warehouse_packaging', _(u"Packaging"), +                        model=models.Treatment, +                        access_controls=['add_treatment', 'add_own_treatment']), +                    MenuItem('warehouse_lend', _(u"Lending"), +                        model=models.Treatment, +                        access_controls=['add_treatment', 'add_own_treatment']), +            ]), +        SectionItem('dashboard', _(u"Dashboard"), +            childs=[ +                    MenuItem('dashboard_file', _(u"Files"), +                        model=models.File, +                        access_controls=['change_file',]), +                    MenuItem('dashboard_operation', _(u"Operations"), +                        model=models.Operation, +                        access_controls=['change_operation',]), +                    MenuItem('dashboard_treatment', _(u"Treatments"), +                        model=models.Treatment, +                        access_controls=['change_treatment',]), +                    MenuItem('dashboard_warehouse', _(u"Warehouses"), +                        model=models.Warehouse, +                        access_controls=['change_warehouse',]), +            ]), +        ] +        self.items = {} + +    def init(self): +        if self.initialized: +            return +        self.items = {} +        for main_menu in self.childs: +            main_menu.set_items(self.user, self.items) +        self.initialized = True + +menu = Menu(None) +menu.init()  | 
