Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Purge menu cache while creation/editing and various version state changes #38

Merged
merged 6 commits into from Mar 12, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
7 changes: 7 additions & 0 deletions djangocms_navigation/admin.py
Expand Up @@ -17,6 +17,7 @@
from .constants import SELECT2_CONTENT_OBJECT_URL_NAME
from .forms import MenuContentForm, MenuItemForm
from .models import Menu, MenuContent, MenuItem
from .utils import purge_menu_cache
from .views import ContentObjectSelect2View, MenuContentPreviewView


Expand Down Expand Up @@ -168,10 +169,13 @@ def change_view(
except ConditionFailed as error:
messages.error(request, str(error))
return HttpResponseRedirect(version_list_url(menu_content))
# purge menu cache
purge_menu_cache(site_id=menu_content.menu.site_id)
extra_context["list_url"] = reverse(
"admin:djangocms_navigation_menuitem_list",
kwargs={"menu_content_id": menu_content_id},
)

return super().change_view(
request, object_id, form_url="", extra_context=extra_context
)
Expand All @@ -190,10 +194,13 @@ def add_view(self, request, menu_content_id=None, form_url="", extra_context=Non
except ConditionFailed as error:
messages.error(request, str(error))
return HttpResponseRedirect(version_list_url(menu_content))
# purge menu cache
purge_menu_cache(site_id=menu_content.menu.site_id)
extra_context["list_url"] = reverse(
"admin:djangocms_navigation_menuitem_list",
kwargs={"menu_content_id": menu_content_id},
)

return super().add_view(request, form_url=form_url, extra_context=extra_context)

def changelist_view(self, request, menu_content_id=None, extra_context=None):
Expand Down
25 changes: 25 additions & 0 deletions djangocms_navigation/cms_config.py
Expand Up @@ -5,6 +5,7 @@
from cms.models import Page

from .models import MenuContent, MenuItem
from .utils import purge_menu_cache


class NavigationCMSExtension(CMSAppExtension):
Expand Down Expand Up @@ -61,6 +62,26 @@ def copy_menu_content(original_content):
return new_content


def on_menu_content_publish(version):
menu_content = version.content
purge_menu_cache(site_id=menu_content.menu.site_id)


def on_menu_content_unpublish(version):
menu_content = version.content
purge_menu_cache(site_id=menu_content.menu.site_id)


def on_menu_content_draft_create(version):
menu_content = version.content
purge_menu_cache(site_id=menu_content.menu.site_id)


def on_menu_content_archive(version):
menu_content = version.content
purge_menu_cache(site_id=menu_content.menu.site_id)


class NavigationCMSAppConfig(CMSAppConfig):
djangocms_navigation_enabled = getattr(
settings, "DJANGOCMS_NAVIGATION_CMS_MODELS_ENABLED", True
Expand All @@ -85,6 +106,10 @@ class NavigationCMSAppConfig(CMSAppConfig):
grouper_field_name="menu",
copy_function=copy_menu_content,
preview_url=MenuContent.get_preview_url,
on_publish=on_menu_content_publish,
on_unpublish=on_menu_content_unpublish,
on_draft_create=on_menu_content_draft_create,
on_archive=on_menu_content_archive,
)
]
moderated_models = [MenuContent]
6 changes: 6 additions & 0 deletions djangocms_navigation/utils.py
Expand Up @@ -3,6 +3,8 @@
from django.apps import apps
from django.contrib.contenttypes.models import ContentType

from menus.menu_pool import menu_pool


@lru_cache(maxsize=1)
def supported_models():
Expand Down Expand Up @@ -38,3 +40,7 @@ def get_versionable_for_content(content):
return versionables.for_content(content)
except KeyError:
return


def purge_menu_cache(site_id=None, language=None):
menu_pool.clear(site_id=site_id, language=language)