Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
mpicms/mpicms/base/views.py
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
122 lines (93 sloc)
4.07 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from django.shortcuts import render | |
from django.core.paginator import Paginator | |
from django.shortcuts import get_object_or_404, redirect | |
from django.core.exceptions import PermissionDenied | |
from django.views.decorators.http import require_POST | |
from django.utils.http import is_safe_url | |
from django.utils.translation import gettext as _ | |
from wagtail.admin import messages | |
from wagtail.core.models import Page | |
from wagtail.core import hooks | |
from wagtail.search.models import Query | |
from wagtail.admin.views.account import LogoutView as LView | |
from wagtail.admin.views.pages.utils import get_valid_next_url_from_request | |
from .utils import can_create | |
def search(request): | |
search_query = request.GET.get('query', None) | |
if search_query: | |
search_results = Page.objects.live().search(search_query) | |
# Log the query so Wagtail can suggest promoted results | |
Query.get(search_query).add_hit() | |
else: | |
search_results = Page.objects.none() | |
paginator = Paginator(search_results, 8) | |
page = request.GET.get('page') | |
search_results = paginator.get_page(page) | |
return render(request, 'base/search_results.html', { | |
'paginator': paginator, | |
'search_query': search_query, | |
'search_results': search_results, | |
}) | |
class LogoutView(LView): | |
"""Prevent error for unprevileged users when redirect to admin""" | |
next_page = '/' | |
def account(request): | |
"""Override wagtail account view to remove email and password menu items""" | |
items = [] | |
for fn in hooks.get_hooks('register_account_menu_item'): | |
item = fn(request) | |
if item: | |
if any(excluded in item['url'] for excluded in ['change_email', 'change_password']): | |
continue | |
items.append(item) | |
return render(request, 'wagtailadmin/account/account.html', { | |
'items': items, | |
}) | |
def add_subpage(request, parent_page_id): | |
"""Override wagtail view to prevent creation of limited pages""" | |
parent_page = get_object_or_404(Page, id=parent_page_id).specific | |
if not parent_page.permissions_for_user(request.user).can_add_subpage(): | |
raise PermissionDenied | |
page_types = [ | |
(model.get_verbose_name(), model._meta.app_label, model._meta.model_name) | |
for model in type(parent_page).creatable_subpage_models() | |
if model.can_create_at(parent_page) and can_create(request, model) | |
] | |
# sort by lower-cased version of verbose name | |
page_types.sort(key=lambda page_type: page_type[0].lower()) | |
if len(page_types) == 1: | |
# Only one page type is available - redirect straight to the create form rather than | |
# making the user choose | |
verbose_name, app_label, model_name = page_types[0] | |
return redirect('wagtailadmin_pages:add', app_label, model_name, parent_page.id) | |
return render(request, 'wagtailadmin/pages/add_subpage.html', { | |
'parent_page': parent_page, | |
'page_types': page_types, | |
'next': get_valid_next_url_from_request(request), | |
}) | |
@require_POST | |
def subscribe(request, page_id): | |
# Get the page | |
page = get_object_or_404(Page, id=page_id).specific | |
# Lock the page | |
page.subscribers.add(request.user) | |
messages.success(request, _("Successfully subscribed to '{}'.").format(page.get_admin_display_title())) | |
# Redirect | |
redirect_to = request.POST.get('next', None) | |
if redirect_to and is_safe_url(url=redirect_to, allowed_hosts={request.get_host()}): | |
return redirect(redirect_to) | |
else: | |
return redirect('wagtailadmin_explore', page.get_parent().id) | |
@require_POST | |
def unsubscribe(request, page_id): | |
# Get the page | |
page = get_object_or_404(Page, id=page_id).specific | |
# Lock the page | |
page.subscribers.remove(request.user) | |
messages.success(request, _("Successfully unsubscribed from '{}'.").format(page.get_admin_display_title())) | |
# Redirect | |
redirect_to = request.POST.get('next', None) | |
if redirect_to and is_safe_url(url=redirect_to, allowed_hosts={request.get_host()}): | |
return redirect(redirect_to) | |
else: | |
return redirect('wagtailadmin_explore', page.get_parent().id) |