diff options
| -rw-r--r-- | ishtar/furnitures/menus.py | 163 | ||||
| -rw-r--r-- | ishtar/furnitures/urls.py | 6 | ||||
| -rw-r--r-- | ishtar/templates/base.html | 8 | ||||
| -rw-r--r-- | static/js/ishtar.js | 4 | 
4 files changed, 115 insertions, 66 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) diff --git a/ishtar/furnitures/urls.py b/ishtar/furnitures/urls.py index 09ff7efa2..7d223df58 100644 --- a/ishtar/furnitures/urls.py +++ b/ishtar/furnitures/urls.py @@ -66,7 +66,11 @@ urlpatterns = patterns('',           )  for section in menu.childs:      for menu_item in section.childs: -        actions.append(menu_item.idx) +        if hasattr(menu_item, 'childs'): +            for menu_subitem in menu_item.childs: +                actions.append(menu_subitem.idx) +        else: +            actions.append(menu_item.idx)  actions = r"|".join(actions)  urlpatterns += patterns('ishtar.furnitures.views', diff --git a/ishtar/templates/base.html b/ishtar/templates/base.html index 4d9502d39..e7570e6c3 100644 --- a/ishtar/templates/base.html +++ b/ishtar/templates/base.html @@ -62,8 +62,14 @@        {% if section.available %}<li>{{section.label}}        <ul>          {% for menu_item in section.childs %}{%if menu_item.available%} +        {% if menu_item.childs %}<li>{{menu_item.label}} +            <ul> +                {% for menu_subitem in menu_item.childs %}{%if menu_subitem.available%} +                <li{%ifequal menu_subitem.idx CURRENT_ACTION%} class='selected'{%endifequal%}><a href='{% url action menu_subitem.idx%}'>{{menu_subitem.label}}</a></li> +            {%endif%}{% endfor %}</ul></li> +        {%else%}          <li{%ifequal menu_item.idx CURRENT_ACTION%} class='selected'{%endifequal%}><a href='{% url action menu_item.idx%}'>{{menu_item.label}}</a></li> -        {%endif%}{% endfor %} +        {%endif%}{% endif %}{% endfor %}        </ul>        </li>{%endif%}        {% endfor %} diff --git a/static/js/ishtar.js b/static/js/ishtar.js index 174e56f0b..131a220c9 100644 --- a/static/js/ishtar.js +++ b/static/js/ishtar.js @@ -25,8 +25,8 @@ beforeSend: function(xhr, settings) {  $(document).ready(function(){ -    $("#main_menu ul ul").hide(); -    $("#main_menu ul ul .selected").parent().show(); +    $("#main_menu > ul > li > ul").hide(); +    $("#main_menu ul ul .selected").parents().show();      var items = new Array('file', 'operation');      $("#current_file").change(function(){          $.post('/' + url_path + 'update-current-item/', | 
