diff options
Diffstat (limited to 'ishtar/furnitures/menus.py')
| -rw-r--r-- | ishtar/furnitures/menus.py | 163 |
1 files changed, 101 insertions, 62 deletions
diff --git a/ishtar/furnitures/menus.py b/ishtar/furnitures/menus.py index ab7715903..12c81ced3 100644 --- a/ishtar/furnitures/menus.py +++ b/ishtar/furnitures/menus.py @@ -31,6 +31,26 @@ class SectionItem: 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=[]): @@ -56,73 +76,97 @@ class MenuItem: 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=[ - 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']), + 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"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('file_management', _(u"Archaelogical file management"), + childs=[SectionItem('files', _(u"Archaelogical file"), + childs=[ + 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_administrativeact', + _(u"Add"), + model=models.Operation, + access_controls=['change_file', 'change_own_file']), + MenuItem('file_administrativeact_modification', + _(u"Modification"), + model=models.AdministrativeAct, + access_controls=['change_file', 'change_own_file']), + MenuItem('file_administrativeact_deletion', + _(u"Deletion"), + 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']), + childs=[SectionItem('operation', _(u"Operation"), + childs=[ + 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_administrativeact', + _(u"Add"), + model=models.Operation, + access_controls=['change_operation', + 'change_own_operation']), + MenuItem('operation_administrativeact_modification', + _(u"Modification"), + model=models.AdministrativeAct, + access_controls=['change_operation', + 'change_own_operation']), + MenuItem('operation_administrativeact_deletion', + _(u"Deletion"), + model=models.AdministrativeAct, + access_controls=['operation_deletion', + 'delete_own_operation']), + ],), ]), ] self.items = {} @@ -130,14 +174,9 @@ class Menu: def init(self): if self.initialized: return + self.items = {} 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 + main_menu.set_items(self.user, self.items) self.initialized = True menu = Menu(None) |
