示例#1
0
    def move_plugin(self, request):
        # only allow POST
        if request.method != "POST":
            return HttpResponse(str("error"))

        if 'plugin_id' in request.POST:  # single plugin moving
            plugin = CMSPlugin.objects.get(pk=int(request.POST['plugin_id']))

            if 'placeholder_id' in request.POST:
                placeholder = Placeholder.objects.get(
                    pk=int(request.POST['placeholder_id']))
            else:
                placeholder = plugin.placeholder

            # check permissions
            if not placeholder.has_change_permission(request):
                raise Http404

            try:
                has_reached_plugin_limit(placeholder, plugin.plugin_type,
                                         plugin.language)
            except PluginLimitReached, e:
                return HttpResponseBadRequest(str(e))

            # plugin positions are 0 based, so just using count here should give us 'last_position + 1'
            position = CMSPlugin.objects.filter(
                placeholder=placeholder).count()
            plugin.placeholder = placeholder
            plugin.position = position
            plugin.save()
示例#2
0
    def move_plugin(self, request):
        # only allow POST
        if request.method != "POST":
            return HttpResponse(str("error"))

        if 'plugin_id' in request.POST: # single plugin moving
            plugin = CMSPlugin.objects.get(pk=int(request.POST['plugin_id']))

            if 'placeholder_id' in request.POST:
                placeholder = Placeholder.objects.get(pk=int(request.POST['placeholder_id']))
            else:
                placeholder = plugin.placeholder

            # check permissions
            if not placeholder.has_change_permission(request):
                raise Http404

            try:
                has_reached_plugin_limit(placeholder, plugin.plugin_type, plugin.language)
            except PluginLimitReached, e:
                return HttpResponseBadRequest(str(e))

            # plugin positions are 0 based, so just using count here should give us 'last_position + 1'
            position = CMSPlugin.objects.filter(placeholder=placeholder).count()
            plugin.placeholder = placeholder
            plugin.position = position
            plugin.save()
示例#3
0
    def add_plugin(self, request):
        # only allow POST
        if request.method != "POST":
            raise Http404
        plugin_type = request.POST['plugin_type']
        if not has_plugin_permission(request.user, plugin_type, "add"):
            return HttpResponseForbidden(
                "You don't have permission to add plugins")

        placeholder_id = request.POST.get('placeholder', None)
        position = None
        language = self.get_language_from_request(request)
        parent = None
        # check if we got a placeholder (id)
        if placeholder_id:
            placeholder = get_object_or_404(Placeholder, pk=placeholder_id)
        else:  # else get the parent_id
            parent_id = request.POST.get('parent_id', None)
            if not parent_id:  # if we get neither a placeholder nor a parent, bail out
                raise Http404
            parent = get_object_or_404(CMSPlugin, pk=parent_id)
            placeholder = parent.placeholder

        # check add permissions on placeholder
        if not placeholder.has_add_permission(request):
            return HttpResponseForbidden(
                _("You don't have permission to add content here."))

        try:
            has_reached_plugin_limit(placeholder, plugin_type, language)
        except PluginLimitReached, e:
            return HttpResponseBadRequest(str(e))
示例#4
0
    def add_plugin(self, request):
        # only allow POST
        if request.method != "POST":
            raise Http404
        plugin_type = request.POST['plugin_type']
        if not has_plugin_permission(request.user, plugin_type, "add"):
            return HttpResponseForbidden("You don't have permission to add plugins")

        placeholder_id = request.POST.get('placeholder', None)
        position = None
        language = self.get_language_from_request(request)
        parent = None
        # check if we got a placeholder (id)
        if placeholder_id:
            placeholder = get_object_or_404(Placeholder, pk=placeholder_id)
        else: # else get the parent_id
            parent_id = request.POST.get('parent_id', None)
            if not parent_id: # if we get neither a placeholder nor a parent, bail out
                raise Http404
            parent = get_object_or_404(CMSPlugin, pk=parent_id)
            placeholder = parent.placeholder

        # check add permissions on placeholder
        if not placeholder.has_add_permission(request):
            return HttpResponseForbidden(_("You don't have permission to add content here."))

        try:
            has_reached_plugin_limit(placeholder, plugin_type, language)
        except PluginLimitReached, e:
            return HttpResponseBadRequest(str(e))
示例#5
0
 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')
示例#6
0
    def add_plugin(self, request):
        """
        POST request should have the following data:

        - placeholder_id
        - plugin_type
        - plugin_language
        - plugin_parent (optional)
        """
        plugin_type = request.POST['plugin_type']

        placeholder_id = request.POST.get('placeholder_id', None)
        parent_id = request.POST.get('parent_id', None)
        if parent_id:
            warnings.warn("parent_id is deprecated and will be removed in 3.0.1, use plugin_parent instead",
                          DeprecationWarning)
        if not parent_id:
            parent_id = request.POST.get('plugin_parent', None)
        placeholder = get_object_or_404(Placeholder, pk=placeholder_id)
        if not self.has_add_plugin_permission(request, placeholder, plugin_type):
            return HttpResponseForbidden(_('You do not have permission to add a plugin'))
        parent = None
        language = request.POST.get('plugin_language') or get_language_from_request(request)
        try:
            has_reached_plugin_limit(placeholder, plugin_type, language,
                                     template=self.get_placeholder_template(request, placeholder))
        except PluginLimitReached as er:
            return HttpResponseBadRequest(er)
            # page add-plugin
        if not parent_id:

            position = request.POST.get('plugin_order',
                                        CMSPlugin.objects.filter(language=language, placeholder=placeholder).count())
        # in-plugin add-plugin
        else:
            parent = get_object_or_404(CMSPlugin, pk=parent_id)
            placeholder = parent.placeholder
            position = request.POST.get('plugin_order',
                                        CMSPlugin.objects.filter(language=language, parent=parent).count())
            # placeholder (non-page) add-plugin

        # Sanity check to make sure we're not getting bogus values from JavaScript:
        if settings.USE_I18N:
            if not language or not language in [lang[0] for lang in settings.LANGUAGES]:
                return HttpResponseBadRequest(_("Language must be set to a supported language!"))
            if parent and parent.language != language:
                return HttpResponseBadRequest(_("Parent plugin language must be same as language!"))
        else:
            language = settings.LANGUAGE_CODE
        plugin = CMSPlugin(language=language, plugin_type=plugin_type, position=position, placeholder=placeholder)

        if parent:
            plugin.position = CMSPlugin.objects.filter(parent=parent).count()
            plugin.insert_at(parent, position='last-child', save=False)
        plugin.save()
        self.post_add_plugin(request, placeholder, plugin)
        response = {
            'url': force_unicode(
                reverse("admin:%s_%s_edit_plugin" % (self.model._meta.app_label, self.model._meta.module_name),
                        args=[plugin.pk])),
            'breadcrumb': plugin.get_breadcrumb(),
        }
        return HttpResponse(simplejson.dumps(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 add_plugin(self, request):
        """
        POST request should have the following data:

        - placeholder_id
        - plugin_type
        - plugin_language
        - plugin_parent (optional)
        """
        plugin_type = request.POST['plugin_type']

        placeholder_id = request.POST.get('placeholder_id', None)
        parent_id = request.POST.get('parent_id', None)
        if parent_id:
            warnings.warn(
                "parent_id is deprecated and will be removed in 3.0.1, use plugin_parent instead",
                DeprecationWarning)
        if not parent_id:
            parent_id = request.POST.get('plugin_parent', None)
        placeholder = get_object_or_404(Placeholder, pk=placeholder_id)
        if not self.has_add_plugin_permission(request, placeholder,
                                              plugin_type):
            return HttpResponseForbidden(
                _('You do not have permission to add a plugin'))
        parent = None
        language = request.POST.get(
            'plugin_language') or get_language_from_request(request)
        try:
            has_reached_plugin_limit(placeholder,
                                     plugin_type,
                                     language,
                                     template=self.get_placeholder_template(
                                         request, placeholder))
        except PluginLimitReached as er:
            return HttpResponseBadRequest(er)
            # page add-plugin
        if not parent_id:

            position = request.POST.get(
                'plugin_order',
                CMSPlugin.objects.filter(language=language,
                                         placeholder=placeholder).count())
        # in-plugin add-plugin
        else:
            parent = get_object_or_404(CMSPlugin, pk=parent_id)
            placeholder = parent.placeholder
            position = request.POST.get(
                'plugin_order',
                CMSPlugin.objects.filter(language=language,
                                         parent=parent).count())
            # placeholder (non-page) add-plugin

        # Sanity check to make sure we're not getting bogus values from JavaScript:
        if settings.USE_I18N:
            if not language or not language in [
                    lang[0] for lang in settings.LANGUAGES
            ]:
                return HttpResponseBadRequest(
                    _("Language must be set to a supported language!"))
            if parent and parent.language != language:
                return HttpResponseBadRequest(
                    _("Parent plugin language must be same as language!"))
        else:
            language = settings.LANGUAGE_CODE
        plugin = CMSPlugin(language=language,
                           plugin_type=plugin_type,
                           position=position,
                           placeholder=placeholder)

        if parent:
            plugin.position = CMSPlugin.objects.filter(parent=parent).count()
            plugin.insert_at(parent, position='last-child', save=False)
        plugin.save()
        self.post_add_plugin(request, placeholder, plugin)
        response = {
            'url':
            force_unicode(
                reverse(
                    "admin:%s_%s_edit_plugin" %
                    (self.model._meta.app_label, self.model._meta.module_name),
                    args=[plugin.pk])),
            'breadcrumb':
            plugin.get_breadcrumb(),
        }
        return HttpResponse(simplejson.dumps(response),
                            content_type='application/json')