Skip to content

Commit 1327620

Browse files
committed
fix: Create alias view errored
1 parent 66ee5c0 commit 1327620

File tree

4 files changed

+32
-36
lines changed

4 files changed

+32
-36
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
.idea/
55
.tox/
66
.eggs/
7+
.vscode/
78
dist/
89
!djangocms_alias/static/djangocms_alias/js/dist/
910
build/

djangocms_alias/cms_plugins.py

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
from copy import copy
2-
31
from cms.plugin_base import CMSPluginBase, PluginMenuItem
42
from cms.plugin_pool import plugin_pool
53
from cms.toolbar.utils import get_object_edit_url
@@ -140,26 +138,24 @@ def can_detach(cls, user, target_placeholder, plugins):
140138

141139
@classmethod
142140
def detach_alias_plugin(cls, plugin, language):
143-
source_placeholder = plugin.alias.get_placeholder(language, show_draft_content=True) # We're in edit mode
141+
source_plugins = plugin.alias.get_plugins(language, show_draft_content=True) # We're in edit mode
144142
target_placeholder = plugin.placeholder
143+
plugin_position = plugin.position
144+
plugin_parent = plugin.parent
145+
target_placeholder.delete_plugin(plugin)
146+
if source_plugins:
147+
if target_last_plugin := target_placeholder.get_last_plugin(plugin.language):
148+
target_placeholder._shift_plugin_positions(
149+
language,
150+
start=plugin_position,
151+
offset=len(source_plugins) + target_last_plugin.position + 1, # enough space to shift back
152+
)
145153

146-
# Deleting uses a copy of a plugin to preserve pk on existing
147-
# ``plugin`` object. This is done due to
148-
# plugin.get_plugin_toolbar_info requiring a PK in a passed
149-
# instance.
150-
target_placeholder.delete_plugin(copy(plugin))
151-
target_placeholder._shift_plugin_positions(
152-
language,
153-
plugin.position,
154-
offset=target_placeholder.get_last_plugin_position(language),
155-
)
156-
if source_placeholder:
157-
source_plugins = source_placeholder.get_plugins_list()
158-
copied_plugins = copy_plugins_to_placeholder(
154+
return copy_plugins_to_placeholder(
159155
source_plugins,
160156
placeholder=target_placeholder,
161157
language=language,
162-
start_positions={language: plugin.position},
158+
root_plugin=plugin_parent,
159+
start_positions={language: plugin_position},
163160
)
164-
return copied_plugins
165161
return []

djangocms_alias/models.py

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -193,13 +193,13 @@ def get_placeholder(self, language=None, show_draft_content=False):
193193
content = self.get_content(language=language, show_draft_content=show_draft_content)
194194
return getattr(content, "placeholder", None)
195195

196-
def get_plugins(self, language=None):
196+
def get_plugins(self, language=None, show_draft_content=False):
197197
if not language:
198198
language = get_language()
199199
try:
200200
return self._plugins_cache[language]
201201
except KeyError:
202-
placeholder = self.get_placeholder(language)
202+
placeholder = self.get_placeholder(language, show_draft_content=show_draft_content)
203203
plugins = placeholder.get_plugins_list() if placeholder else []
204204
self._plugins_cache[language] = plugins
205205
return self._plugins_cache[language]
@@ -307,25 +307,27 @@ def populate(self, replaced_placeholder=None, replaced_plugin=None, plugins=None
307307
placeholder=self.placeholder,
308308
)
309309
return
310-
311310
if replaced_placeholder:
312-
plugins = replaced_placeholder.get_plugins(self.language)
313-
placeholder = replaced_placeholder
314-
add_plugin_kwargs = {}
315-
else:
316-
plugins = CMSPlugin.objects.filter(
317-
id__in=[replaced_plugin.pk] + replaced_plugin._get_descendants_ids(),
311+
replaced_placeholder.cmsplugin_set.update(placeholder=self.placeholder)
312+
return add_plugin(
313+
replaced_placeholder,
314+
plugin_type="Alias",
315+
language=self.language,
316+
alias=self.alias,
318317
)
319-
placeholder = replaced_plugin.placeholder
320-
add_plugin_kwargs = {"position": "left", "target": replaced_plugin}
318+
319+
placeholder = replaced_plugin.placeholder
320+
plugins = CMSPlugin.objects.filter(
321+
id__in=[replaced_plugin.pk] + replaced_plugin._get_descendants_ids(),
322+
)
323+
add_plugin_kwargs = {"position": "left", "target": replaced_plugin}
321324

322325
copy_plugins_to_placeholder(
323326
plugins,
324327
placeholder=self.placeholder,
325328
language=self.language,
326329
)
327-
plugins.delete()
328-
placeholder._recalculate_plugin_positions(self.language)
330+
replaced_plugin.delete()
329331

330332
new_plugin = add_plugin(
331333
placeholder,
@@ -334,9 +336,6 @@ def populate(self, replaced_placeholder=None, replaced_plugin=None, plugins=None
334336
alias=self.alias,
335337
**add_plugin_kwargs,
336338
)
337-
if replaced_plugin:
338-
new_plugin.position = replaced_plugin.position
339-
new_plugin.save(update_fields=["position"])
340339
return new_plugin
341340

342341

djangocms_alias/views.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,13 +144,13 @@ def create_alias_view(request):
144144
emit_content_change([alias_content])
145145

146146
if replace:
147-
plugin = create_form.cleaned_data.get("plugin")
147+
create_form.cleaned_data.get("plugin")
148148
placeholder = create_form.cleaned_data.get("placeholder")
149149
return render_replace_response(
150150
request,
151151
new_plugins=[alias_plugin],
152152
source_placeholder=placeholder,
153-
source_plugin=plugin,
153+
# source_plugin=plugin,
154154
)
155155

156156
return HttpResponse(JAVASCRIPT_SUCCESS_RESPONSE)

0 commit comments

Comments
 (0)