diff options
| -rw-r--r-- | ishtar_common/menus.py | 37 | ||||
| -rw-r--r-- | ishtar_common/models.py | 2 | 
2 files changed, 30 insertions, 9 deletions
| diff --git a/ishtar_common/menus.py b/ishtar_common/menus.py index e00c6fbef..7cc7b751e 100644 --- a/ishtar_common/menus.py +++ b/ishtar_common/menus.py @@ -72,22 +72,43 @@ class Menu:          self.session = session          self.items_by_idx = {} -    def set_menu_updated_key(self): -        cache_key = u"{}-{}".format( -            settings.PROJECT_SLUG, 'menu_updated') +    def reinit_menu_for_all_user(self): +        lst_cache_key = u"{}-{}".format( +            settings.PROJECT_SLUG, 'menu_updated_list', +        ) +        lst_ids = cache.get(lst_cache_key) +        if not lst_ids: +            return +        for idx in lst_ids: +            self.init(idx, force=True) + +    def set_menu_updated_key(self, cache_key, user_id): +        lst_cache_key = u"{}-{}".format( +            settings.PROJECT_SLUG, 'menu_updated_list', +        ) +        lst_ids = cache.get(lst_cache_key) +        if not lst_ids: +            lst_ids = [] +        if not lst_ids or user_id not in lst_ids: +            lst_ids.append(user_id) +            cache.set(lst_cache_key, lst_ids, settings.CACHE_TIMEOUT) +          time = unicode(datetime.datetime.now().isoformat())          cache.set(cache_key, time, settings.CACHE_TIMEOUT)          self.initialized = time -    def init(self, force=False): -        cache_key = u"{}-{}".format( -            settings.PROJECT_SLUG, 'menu_updated') +    def init(self, user_id=0, force=False): +        if not user_id and self.user: +            user_id = self.user.pk +        cache_key = u"{}-{}-{}".format( +            settings.PROJECT_SLUG, 'menu_updated', +            user_id +        )          menu_updated = cache.get(cache_key)          if not force and menu_updated and self.initialized \                  and self.initialized == menu_updated:              return -        menu_updated = cache.get(cache_key) -        self.set_menu_updated_key() +        self.set_menu_updated_key(cache_key, user_id)          self.items = {}          self.items_by_idx = {}          for idx, main_menu in enumerate(self.childs): diff --git a/ishtar_common/models.py b/ishtar_common/models.py index b20392656..839a71d39 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -1687,7 +1687,7 @@ def get_current_profile(force=False):  def cached_site_changed(sender, **kwargs):      get_current_profile(force=True)      from ishtar_common.menus import menu -    menu.init(force=True) +    menu.reinit_menu_for_all_user()  post_save.connect(cached_site_changed, sender=IshtarSiteProfile) | 
