def copy_plugins(self, request): """ POST request should have the following data: - source_language - source_placeholder_id - source_plugin_id (optional) - target_language - target_placeholder_id - target_plugin_id (optional, new parent) """ source_language = request.POST['source_language'] source_placeholder_id = request.POST['source_placeholder_id'] source_plugin_id = request.POST.get('source_plugin_id', None) target_language = request.POST['target_language'] target_placeholder_id = request.POST['target_placeholder_id'] target_plugin_id = request.POST.get('target_plugin_id', None) 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(_("Language must be set to a supported language!")) if source_plugin_id: source_plugin = get_object_or_404(CMSPlugin, pk=source_plugin_id) reload_required = requires_reload(PLUGIN_COPY_ACTION, [source_plugin]) plugins = list( source_placeholder.cmsplugin_set.filter(tree_id=source_plugin.tree_id, lft__gte=source_plugin.lft, rght__lte=source_plugin.rght).order_by('tree_id', 'level', 'position')) else: plugins = list( source_placeholder.cmsplugin_set.filter(language=source_language).order_by('tree_id', 'level', 'position')) reload_required = requires_reload(PLUGIN_COPY_ACTION, plugins) if not self.has_copy_plugin_permission(request, source_placeholder, target_placeholder, plugins): return HttpResponseForbidden(_('You do not have permission to copy these plugins.')) copy_plugins.copy_plugins_to(plugins, target_placeholder, target_language, target_plugin_id) plugin_list = CMSPlugin.objects.filter(language=target_language, placeholder=target_placeholder).order_by( 'tree_id', 'level', 'position') 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_unicode(plugin.get_short_description())}) self.post_copy_plugins(request, source_placeholder, target_placeholder, plugins) json_response = {'plugin_list': reduced_list, 'reload': reload_required} return HttpResponse(simplejson.dumps(json_response), content_type='application/json')
def move_plugin(self, request): """ POST request with following parameters: -plugin_id -placeholder_id -plugin_language (optional) -plugin_parent (optional) -plugin_order (array, optional) """ plugin = CMSPlugin.objects.get(pk=int(request.POST['plugin_id'])) placeholder = Placeholder.objects.get(pk=request.POST['placeholder_id']) parent_id = request.POST.get('plugin_parent', None) language = request.POST.get('plugin_language', plugin.language) if not parent_id: parent_id = None else: parent_id = int(parent_id) order = request.POST.getlist("plugin_order[]") if not self.has_move_plugin_permission(request, plugin, placeholder): return HttpResponseForbidden(_("You have no permission to move this plugin")) if plugin.parent_id != parent_id: if parent_id: parent = CMSPlugin.objects.get(pk=parent_id) if parent.placeholder_id != placeholder.pk: return HttpResponseBadRequest('parent must be in the same placeholder') if parent.language != language: return HttpResponseBadRequest('parent must be in the same language as plugin_language') else: parent = None plugin.move_to(parent, position='last-child') try: template = self.get_placeholder_template(request, placeholder) has_reached_plugin_limit(placeholder, plugin.plugin_type, plugin.language, template=template) except PluginLimitReached as er: return HttpResponseBadRequest(er) plugin.save() for child in plugin.get_descendants(include_self=True): child.placeholder = placeholder child.language = language child.save() plugins = CMSPlugin.objects.filter(parent=parent_id, placeholder=placeholder) for level_plugin in plugins: x = 0 for pk in order: if level_plugin.pk == int(pk): level_plugin.position = x level_plugin.save() break x += 1 self.post_move_plugin(request, plugin) json_response = {'reload': requires_reload(PLUGIN_MOVE_ACTION, [plugin])} return HttpResponse(simplejson.dumps(json_response), content_type='application/json')
def move_plugin(self, request): """ POST request with following parameters: -plugin_id -placeholder_id -plugin_language (optional) -plugin_parent (optional) -plugin_order (array, optional) """ plugin = CMSPlugin.objects.get(pk=int(request.POST['plugin_id'])) placeholder = Placeholder.objects.get( pk=request.POST['placeholder_id']) parent_id = request.POST.get('plugin_parent', None) language = request.POST.get('plugin_language', plugin.language) if not parent_id: parent_id = None else: parent_id = int(parent_id) order = request.POST.getlist("plugin_order[]") if not self.has_move_plugin_permission(request, plugin, placeholder): return HttpResponseForbidden( _("You have no permission to move this plugin")) if plugin.parent_id != parent_id: if parent_id: parent = CMSPlugin.objects.get(pk=parent_id) if parent.placeholder_id != placeholder.pk: return HttpResponseBadRequest( 'parent must be in the same placeholder') if parent.language != language: return HttpResponseBadRequest( 'parent must be in the same language as plugin_language' ) else: parent = None plugin.move_to(parent, position='last-child') try: template = self.get_placeholder_template(request, placeholder) has_reached_plugin_limit(placeholder, plugin.plugin_type, plugin.language, template=template) except PluginLimitReached as er: return HttpResponseBadRequest(er) plugin.save() for child in plugin.get_descendants(include_self=True): child.placeholder = placeholder child.language = language child.save() plugins = CMSPlugin.objects.filter(parent=parent_id, placeholder=placeholder) for level_plugin in plugins: x = 0 for pk in order: if level_plugin.pk == int(pk): level_plugin.position = x level_plugin.save() break x += 1 self.post_move_plugin(request, plugin) json_response = { 'reload': requires_reload(PLUGIN_MOVE_ACTION, [plugin]) } return HttpResponse(simplejson.dumps(json_response), content_type='application/json')
def copy_plugins(self, request): """ POST request should have the following data: - source_language - source_placeholder_id - source_plugin_id (optional) - target_language - target_placeholder_id - target_plugin_id (optional, new parent) """ source_language = request.POST['source_language'] source_placeholder_id = request.POST['source_placeholder_id'] source_plugin_id = request.POST.get('source_plugin_id', None) target_language = request.POST['target_language'] target_placeholder_id = request.POST['target_placeholder_id'] target_plugin_id = request.POST.get('target_plugin_id', None) 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( _("Language must be set to a supported language!")) if source_plugin_id: source_plugin = get_object_or_404(CMSPlugin, pk=source_plugin_id) reload_required = requires_reload(PLUGIN_COPY_ACTION, [source_plugin]) plugins = list( source_placeholder.cmsplugin_set.filter( tree_id=source_plugin.tree_id, lft__gte=source_plugin.lft, rght__lte=source_plugin.rght).order_by( 'tree_id', 'level', 'position')) else: plugins = list( source_placeholder.cmsplugin_set.filter( language=source_language).order_by('tree_id', 'level', 'position')) reload_required = requires_reload(PLUGIN_COPY_ACTION, plugins) if not self.has_copy_plugin_permission(request, source_placeholder, target_placeholder, plugins): return HttpResponseForbidden( _('You do not have permission to copy these plugins.')) copy_plugins.copy_plugins_to(plugins, target_placeholder, target_language, target_plugin_id) plugin_list = CMSPlugin.objects.filter( language=target_language, placeholder=target_placeholder).order_by('tree_id', 'level', 'position') 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_unicode(plugin.get_short_description()) }) self.post_copy_plugins(request, source_placeholder, target_placeholder, plugins) json_response = { 'plugin_list': reduced_list, 'reload': reload_required } return HttpResponse(simplejson.dumps(json_response), content_type='application/json')