Skip to content

Commit 9891bfd

Browse files
authored
fix: Minor usability improvements (#317)
* fix: ajax_error_msg * Fix tests * Feat: New draft in stead of edit button if editing will create a new draft * feat: discard changes menu * Fix: Discard changes only if there are changes * Replace deprecated icons * Update admin.py to use new cms.icons.css * Consistent labels for "Discard Changes"
1 parent 65f6da9 commit 9891bfd

File tree

5 files changed

+27
-10
lines changed

5 files changed

+27
-10
lines changed

djangocms_versioning/admin.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ class Media:
130130
js = ("admin/js/jquery.init.js", "djangocms_versioning/js/actions.js")
131131
css = {
132132
"all": (
133-
static_with_version("cms/css/cms.pagetree.css"),
133+
static_with_version("cms/css/cms.icons.css"),
134134
"djangocms_versioning/css/actions.css",
135135
)
136136
}
@@ -402,7 +402,7 @@ class VersionAdmin(admin.ModelAdmin):
402402
class Media:
403403
js = ("admin/js/jquery.init.js", "djangocms_versioning/js/actions.js", "djangocms_versioning/js/compare.js",)
404404
css = {"all": (
405-
static_with_version("cms/css/cms.pagetree.css"),
405+
static_with_version("cms/css/cms.icons.css"),
406406
"djangocms_versioning/css/actions.css",
407407
)}
408408

djangocms_versioning/cms_config.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import collections
22

33
from django.conf import settings
4-
from django.contrib import messages
54
from django.contrib.admin.utils import flatten_fieldsets
65
from django.core.exceptions import (
76
ImproperlyConfigured,
@@ -358,7 +357,7 @@ def change_innavigation(self, request, object_id):
358357
try:
359358
version.check_modify(request.user)
360359
except ConditionFailed as e:
361-
self.message_user(request, force_str(e), messages.ERROR)
360+
# Send error message
362361
return HttpResponseForbidden(force_str(e))
363362
return super().change_innavigation(request, object_id)
364363

djangocms_versioning/cms_toolbars.py

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from django.apps import apps
55
from django.conf import settings
66
from django.contrib.auth import get_permission_codename
7+
from django.contrib.contenttypes.models import ContentType
78
from django.urls import reverse
89
from django.utils.http import urlencode
910
from django.utils.translation import gettext_lazy as _
@@ -15,15 +16,15 @@
1516
PlaceholderToolbar,
1617
)
1718
from cms.models import PageContent
18-
from cms.toolbar.items import ButtonList
19+
from cms.toolbar.items import Break, ButtonList
1920
from cms.toolbar.utils import get_object_preview_url
2021
from cms.toolbar_pool import toolbar_pool
2122
from cms.utils import page_permissions
2223
from cms.utils.conf import get_cms_setting
2324
from cms.utils.i18n import get_language_dict, get_language_tuple
2425
from cms.utils.urlutils import add_url_parameters, admin_reverse
2526

26-
from djangocms_versioning.constants import PUBLISHED
27+
from djangocms_versioning.constants import DRAFT, PUBLISHED
2728
from djangocms_versioning.helpers import (
2829
get_latest_admin_viewable_page_content,
2930
version_list_url,
@@ -107,8 +108,15 @@ def _add_edit_button(self, disabled=False):
107108
),
108109
args=(version.pk,),
109110
)
111+
pks_for_grouper = version.versionable.for_content_grouping_values(
112+
version.content
113+
).values_list("pk", flat=True)
114+
content_type = ContentType.objects.get_for_model(version.content)
115+
draft_exists = Version.objects.filter(
116+
object_id__in=pks_for_grouper, content_type=content_type, state=DRAFT
117+
).exists()
110118
item.add_button(
111-
_("Edit"),
119+
_("Edit") if draft_exists else _("New Draft"),
112120
url=edit_url,
113121
disabled=disabled,
114122
extra_classes=["cms-btn-action", "cms-versioning-js-edit-btn"],
@@ -164,6 +172,7 @@ def _add_versioning_menu(self):
164172
):
165173
url = version_list_url(version.content)
166174
versioning_menu.add_sideframe_item(_("Manage Versions"), url=url)
175+
# Compare to source menu entry
167176
if version.source:
168177
name = _("Compare to {source}").format(source=_(version.source.short_name()))
169178
proxy_model = self._get_proxy_model()
@@ -176,6 +185,15 @@ def _add_versioning_menu(self):
176185
back=self.request.get_full_path(),
177186
))
178187
versioning_menu.add_link_item(name, url=url)
188+
# Discard changes menu entry (wrt to source)
189+
if version.check_discard.as_bool(self.request.user): # pragma: no cover
190+
versioning_menu.add_item(Break())
191+
versioning_menu.add_link_item(
192+
_("Discard Changes"),
193+
url=reverse("admin:{app}_{model}_discard".format(
194+
app=proxy_model._meta.app_label, model=proxy_model.__name__.lower()
195+
), args=(version.pk,))
196+
)
179197

180198
def _get_published_page_version(self):
181199
"""Returns a published page if one exists for the toolbar object

djangocms_versioning/helpers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ def get_admin_url(model, action, *args):
279279

280280
def remove_published_where(queryset):
281281
"""
282-
By default the versioned queryset filters out so that only versions
282+
By default, the versioned queryset filters out so that only versions
283283
that are published are returned. If you need to return the full queryset
284284
this method can be used.
285285

djangocms_versioning/indicators.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ def get_indicator_menu(cls, request, page_content):
7777
))
7878
if len(versions) >= 2 and versions[0].state == DRAFT and versions[1].state == PUBLISHED:
7979
menu.append((
80-
_("Compare Draft to Published..."), "cms-icon-layers",
80+
_("Compare Draft to Published..."), "cms-icon-compare",
8181
reverse("admin:djangocms_versioning_pagecontentversion_compare", args=(versions[1].pk,)) +
8282
"?" + urlencode(dict(
8383
compare_to=versions[0].pk,
@@ -87,7 +87,7 @@ def get_indicator_menu(cls, request, page_content):
8787
))
8888
menu.append(
8989
(
90-
_("Manage Versions..."), "cms-icon-copy",
90+
_("Manage Versions..."), "cms-icon-manage-versions",
9191
version_list_url(versions[0].content),
9292
"",
9393
)

0 commit comments

Comments
 (0)