def _copy_plugin_to_clipboard(self, request, source_placeholder, target_placeholder): source_language = request.POST['source_language'] source_plugin_id = request.POST.get('source_plugin_id') target_language = request.POST['target_language'] source_plugin = get_object_or_404( CMSPlugin, pk=source_plugin_id, language=source_language, ) old_plugins = (CMSPlugin.get_tree(parent=source_plugin).filter( placeholder=source_placeholder).order_by('path')) if not self.has_copy_plugins_permission(request, old_plugins): message = _('You do not have permission to copy these plugins.') raise PermissionDenied(force_text(message)) # Empty the clipboard target_placeholder.clear() plugin_pairs = copy_plugins.copy_plugins_to( old_plugins, to_placeholder=target_placeholder, to_language=target_language, ) return plugin_pairs[0][0]
def _paste_plugin(self, request, plugin, target_language, target_placeholder, tree_order, target_parent=None): plugins = (CMSPlugin.get_tree(parent=plugin).filter( placeholder=plugin.placeholder_id).order_by('path')) plugins = list(plugins) if not self.has_copy_from_clipboard_permission( request, target_placeholder, plugins): message = force_text( _("You have no permission to paste this plugin")) raise PermissionDenied(message) if target_parent: target_parent_id = target_parent.pk else: target_parent_id = None target_tree_order = [ int(pk) for pk in tree_order if not pk == '__COPY__' ] action_token = self._send_pre_placeholder_operation( request, operation=operations.PASTE_PLUGIN, plugin=plugin, target_language=target_language, target_placeholder=target_placeholder, target_parent_id=target_parent_id, target_order=target_tree_order, ) plugin_pairs = copy_plugins.copy_plugins_to( plugins, to_placeholder=target_placeholder, to_language=target_language, parent_plugin_id=target_parent_id, ) root_plugin = plugin_pairs[0][0] # If an ordering was supplied, replace the item that has # been copied with the new copy target_tree_order.insert(tree_order.index('__COPY__'), root_plugin.pk) reorder_plugins( target_placeholder, parent_id=target_parent_id, language=target_language, order=target_tree_order, ) target_placeholder.mark_as_dirty(target_language, clear_cache=False) # Fetch from db to update position and other tree values root_plugin.refresh_from_db() self._send_post_placeholder_operation( request, operation=operations.PASTE_PLUGIN, plugin=root_plugin.get_bound_plugin(), token=action_token, target_language=target_language, target_placeholder=target_placeholder, target_parent_id=target_parent_id, target_order=target_tree_order, ) return root_plugin