'POST request should have the following data:
- cms_path
- source_language
- source_placeholder_id
- source_plugin_id (optional)
- target_language
- target_placeholder_id
- target_plugin_id (deprecated/unused)'

@method_decorator(require_POST)
@xframe_options_sameorigin
@transaction.atomic
def copy_plugins(self, request):

    source_placeholder_id = request.POST['source_placeholder_id']
    target_language = request.POST['target_language']
    target_placeholder_id = request.POST['target_placeholder_id']
    source_placeholder = get_object_or_404(Placeholder, pk=source_placeholder_id)
    target_placeholder = get_object_or_404(Placeholder, pk=target_placeholder_id)
    if ((not target_language) or (not (target_language in get_language_list()))):
        return HttpResponseBadRequest(force_text(_('Language    must    be    set    to    a    supported    language!')))
    copy_to_clipboard = (target_placeholder.pk == request.toolbar.clipboard.pk)
    source_plugin_id = request.POST.get('source_plugin_id', None)
    if (copy_to_clipboard and source_plugin_id):
        old_plugins = self._copy_plugin_to_clipboard(request, source_placeholder, target_placeholder)
    elif copy_to_clipboard:
        old_plugins = self._copy_placeholder_to_clipboard(request, source_placeholder, target_placeholder)
    else:
        old_plugins = self._add_plugins_from_placeholder(request, source_placeholder, target_placeholder)
    plugin_list = target_placeholder.get_plugins_list(target_language)
    reload_required = requires_reload(PLUGIN_COPY_ACTION, old_plugins)
    reduced_list = []
    for plugin in plugin_list:
        reduced_list.append({'id': plugin.pk, 'type': plugin.plugin_type, 'parent': plugin.parent_id, 'position': plugin.position, 'desc': force_text(plugin.get_short_description()), 'language': plugin.language, 'placeholder_id': plugin.placeholder_id})
    target_placeholder_admin = self._get_attached_admin(target_placeholder)
    uses_copy_hook = _instance_overrides_method(PlaceholderAdminMixin, self, 'post_copy_plugins')
    if (target_placeholder_admin and (not uses_copy_hook)):
        uses_copy_hook = _instance_overrides_method(PlaceholderAdminMixin, target_placeholder_admin, 'post_copy_plugins')
    if uses_copy_hook:
        warnings.warn('The    post_copy_plugins    hook    has    been    deprecated.    Please    use    placeholder    operation    signals    instead.', DeprecationWarning)
        self.post_copy_plugins(request, source_placeholder, target_placeholder, old_plugins)
        if (target_placeholder_admin and (target_placeholder_admin.model != self.model)):
            target_placeholder_admin.post_copy_plugins(request, source_placeholder=source_placeholder, target_placeholder=target_placeholder, plugins=old_plugins)
    json_response = {'plugin_list': reduced_list, 'reload': reload_required}
    return HttpResponse(json.dumps(json_response), content_type='application/json')
