|
25 | 25 | from django.contrib.admin.util import get_deleted_objects |
26 | 26 | from urllib2 import unquote |
27 | 27 | from django.contrib.sites.models import Site |
28 | | -from django.core.exceptions import PermissionDenied, ObjectDoesNotExist |
| 28 | +from django.core.exceptions import PermissionDenied, ObjectDoesNotExist, ValidationError |
29 | 29 | from django.core.urlresolvers import reverse |
30 | 30 | from django.db import router, transaction, models |
31 | 31 | from django.forms import CharField |
32 | 32 | from django.http import (HttpResponseRedirect, HttpResponse, Http404, |
33 | | - HttpResponseBadRequest, HttpResponseForbidden, HttpResponseNotAllowed) |
| 33 | + HttpResponseBadRequest, HttpResponseForbidden, HttpResponseNotAllowed, HttpResponseServerError) |
34 | 34 | from django.shortcuts import render_to_response, get_object_or_404 |
35 | 35 | from django.template.context import RequestContext |
36 | 36 | from django.template.defaultfilters import (title, escape, force_escape, |
|
43 | 43 |
|
44 | 44 | DJANGO_1_3 = LooseVersion(django.get_version()) < LooseVersion('1.4') |
45 | 45 |
|
| 46 | +from cms.utils.page_resolver import is_valid_overwrite_url |
| 47 | + |
46 | 48 | if 'reversion' in settings.INSTALLED_APPS: |
47 | 49 | import reversion |
48 | 50 | from reversion.admin import VersionAdmin as ModelAdmin |
@@ -1055,9 +1057,13 @@ def change_status(self, request, page_id): |
1055 | 1057 | return HttpResponseNotAllowed(['POST']) |
1056 | 1058 | page = get_object_or_404(Page, pk=page_id) |
1057 | 1059 | if page.has_publish_permission(request): |
1058 | | - page.published = not page.published |
1059 | | - page.save() |
1060 | | - return admin_utils.render_admin_menu_item(request, page) |
| 1060 | + try: |
| 1061 | + if page.published or is_valid_overwrite_url(page.get_absolute_url(),page): |
| 1062 | + page.published = not page.published |
| 1063 | + page.save() |
| 1064 | + return admin_utils.render_admin_menu_item(request, page) |
| 1065 | + except ValidationError,e: |
| 1066 | + return HttpResponseServerError(unicode(e)) |
1061 | 1067 | else: |
1062 | 1068 | return HttpResponseForbidden(unicode(_("You do not have permission to publish this page"))) |
1063 | 1069 |
|
|
0 commit comments