def editable(parsed, context, token): """ Add the required HTML to the parsed content for in-line editing, such as the icon and edit form if the object is deemed to be editable - either it has an ``editable`` method which returns ``True``, or the logged in user has change permissions for the model. """ def parse_field(field): field = field.split(".") obj = context[field.pop(0)] attr = field.pop() while field: obj = getattr(obj, field.pop(0)) return obj, attr fields = [parse_field(f) for f in token.split_contents()[1:]] if fields: fields = [f for f in fields if len(f) == 2 and f[0] is fields[0][0]] if not parsed.strip(): try: parsed = "".join([unicode(getattr(*field)) for field in fields]) except AttributeError: pass if fields and "request" in context: obj = fields[0][0] if isinstance(obj, Model) and is_editable(obj, context["request"]): field_names = ",".join([f[1] for f in fields]) context["form"] = get_edit_form(obj, field_names) context["original"] = parsed t = get_template("includes/editable_form.html", context) return t.render(Context(context)) return parsed
def editable(parsed, context, token): """ Add the required HTML to the parsed content for in-line editing, such as the icon and edit form if the object is deemed to be editable - either it has an ``editable`` method which returns ``True``, or the logged in user has change permissions for the model. """ def parse_field(field): field = field.split(".") obj = context.get(field.pop(0), None) attr = field.pop() while field: obj = getattr(obj, field.pop(0)) return obj, attr fields = [parse_field(f) for f in token.split_contents()[1:]] if fields: fields = [f for f in fields if len(f) == 2 and f[0] is fields[0][0]] if not parsed.strip(): try: parsed = "".join([unicode(getattr(*field)) for field in fields]) except AttributeError: pass if fields and "request" in context: obj = fields[0][0] if isinstance(obj, Model) and is_editable(obj, context["request"]): field_names = ",".join([f[1] for f in fields]) context["form"] = get_edit_form(obj, field_names) context["original"] = parsed t = get_template("includes/editable_form.html") return t.render(Context(context)) return parsed
def edit(request): """ Process the inline editing form. """ model = get_model(request.POST["app"], request.POST["model"]) obj = model.objects.get(id=request.POST["id"]) form = get_edit_form(obj, request.POST["fields"], data=request.POST, files=request.FILES) if not is_editable(obj, request): response = "Permission denied" elif form.is_valid(): form.save() response = "" else: response = form.errors.values()[0][0] return HttpResponse(unicode(response))
def edit(request): """ Process the inline editing form. """ model = get_model(request.POST["app"], request.POST["model"]) obj = model.objects.get(id=request.POST["id"]) form = get_edit_form(obj, request.POST["fields"], data=request.POST, files=request.FILES) if not is_editable(obj, request): response = _("Permission denied") elif form.is_valid(): form.save() model_admin = ModelAdmin(model, admin.site) message = model_admin.construct_change_message(request, form, None) model_admin.log_change(request, obj, message) response = "" else: response = form.errors.values()[0][0] return HttpResponse(unicode(response))
def widget_list(request): """ Renders widget options based on supplied widget class or displays a select screen """ data = {} if not is_editable(Widget(), request): response = _("Permission denied") data = { 'error': [response], 'permission': False } else: if request.POST: "widget class exists so render widget options if any" ctx = RequestContext(request) widget_form = WidgetForm(request.POST) widget_class = request.POST["widget_class"] widget_class_obj = get_widget(widget_class) # if hasattr(widget_class_obj, "options"): "Widget has options, lets generate the options form" options_form = WidgetOptionsForm(widget_class) if widget_form.is_valid(): o = get_template("widget/options.html") ctx.update({'options_form': options_form, 'widget_class': widget_class_obj }) options = o.render(ctx) data = {'valid': False, 'type':'fi', 'data':options} else: data = ajaxerror(widget_form) return HttpResponse(json_serializer.encode(data), mimetype='application/json') else: return HttpResponseRedirect("/")
def create_widget(request, **kwargs): """ Renders widget options based on supplied widget class or displays a select screen """ data = {} if not is_editable(Widget(), request): response = _("Permission denied") data = { 'error': {"_all_": [response]}, 'permission': False } else: if request.POST: widget_class = request.POST["widget_class"] slot = request.POST["widgetslot"] try: page_obj = Page.objects.published(request.user)\ .get(id=request.POST["page"]) options_form = WidgetOptionsForm(widget_class, request.POST) if options_form.is_valid(): try: "update widget if it exists" widget = Widget.objects.get(id=request.POST["widget"]) except Exception: widget = Widget(widgetslot=slot, page=page_obj, widget_class=widget_class, user=request.user) widget.save() if options_form.save(widget=widget): data = {'valid': True, 'form': 'saved'} elif options_form.errors: data = ajaxerror(options_form) except Exception, e: data = {"valid": "false", "error": { "_all_": ["Something went wrong, please refresh the page"],}}