def save_model(self, request, obj, form, change): if request.POST.get('save_clipboard'): placeholder_reference = PlaceholderReference.objects.last() if placeholder_reference: placeholder = placeholder_reference.placeholder_ref obj.data = serialize_from_placeholder(placeholder, self.admin_site) request.POST = request.POST.copy() request.POST['_continue'] = True messages.add_message( request, messages.INFO, _("The clipboard's content has been persisted for later.")) if request.POST.get('restore_clipboard'): request.POST = request.POST.copy() request.POST['_continue'] = True messages.add_message( request, messages.INFO, _("Persisted content has been restored to the clipboard.")) if request.POST.get('restore_clipboard'): deserialize_to_clipboard(request, obj.data) obj.last_accessed_at = now() super().save_model(request, obj, form, change)
def paste_from_clipboard(self, request, form): placeholder = form.cleaned_data['placeholder'] language = form.cleaned_data['language'] cascade_clipboard = form.cleaned_data['clipboard'] tree_order = placeholder.get_plugin_tree_order(language) deserialize_to_clipboard(request, cascade_clipboard.data) cascade_clipboard.last_accessed_at = now() cascade_clipboard.save(update_fields=['last_accessed_at']) # detach plugins from clipboard and reattach them to current placeholder cb_placeholder_plugin = request.toolbar.clipboard.cmsplugin_set.filter( plugin_type='PlaceholderPlugin').first() cb_placeholder_instance, _ = cb_placeholder_plugin.get_plugin_instance( ) new_plugins = cb_placeholder_instance.placeholder_ref.get_plugins() new_plugins.update(placeholder=placeholder) # reorder root plugins in placeholder root_plugins = placeholder.get_plugins(language).filter( parent__isnull=True).order_by('changed_date') for position, plugin in enumerate(root_plugins.iterator()): plugin.update(position=position) placeholder.mark_as_dirty(language, clear_cache=False) # create a list of pasted plugins to be added to the structure view all_plugins = placeholder.get_plugins(language) if all_plugins.exists(): new_plugins = placeholder.get_plugins(language).exclude( pk__in=tree_order) data = json.loads( get_plugin_tree_as_json(request, list(new_plugins))) data['plugin_order'] = tree_order + ['__COPY__'] else: return render(request, 'cascade/admin/clipboard_reload_page.html') data['target_placeholder_id'] = placeholder.pk context = {'structure_data': json.dumps(data)} return render(request, 'cascade/admin/clipboard_paste_plugins.html', context)