示例#1
0
 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)
示例#2
0
    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)