Esempio n. 1
0
def newaccount(request, tplname='common/wizard_forms.html'):
    def create_account(steps):
        """Account creation callback

        Called when all creation steps have been validated.

        :param steps: the steps data
        """
        genform = steps[0]["form"]
        genform.is_valid()
        account = genform.save()
        account.post_create(request.user)

        mailform = steps[1]["form"]
        mailform.save(request.user, account)

    ctx = dict(
        title=_("New account"),
        action=reverse(newaccount),
        formid="newaccount_form",
        submit_label=_("Create")
    )
    cwizard = CreationWizard(create_account)
    cwizard.add_step(AccountFormGeneral, _("General"),
                     [dict(classes="btn-inverse next", label=_("Next"))],
                     new_args=[request.user])
    cwizard.add_step(AccountFormMail, _("Mail"),
                     [dict(classes="btn-primary submit", label=_("Create")),
                      dict(classes="btn-inverse prev", label=_("Previous"))],
                     formtpl="admin/mailform.html")

    if request.method == "POST":
        retcode, data = cwizard.validate_step(request)
        if retcode == -1:
            raise AdminError(data)
        if retcode == 1:
            return ajax_simple_response(dict(
                status="ok", title=cwizard.get_title(data + 1), stepid=data
            ))
        if retcode == 2:
            return ajax_simple_response(dict(
                status="ok", respmsg=_("Account created")
            ))

        from modoboa.lib.templatetags.libextras import render_form
        return ajax_simple_response(dict(
            status="ko", stepid=data,
            form=render_form(cwizard.steps[data]["form"])
        ))

    cwizard.create_forms()
    ctx.update(steps=cwizard.steps)
    ctx.update(subtitle="1. %s" % cwizard.steps[0]['title'])
    return render(request, tplname, ctx)
Esempio n. 2
0
def newaccount(request, tplname='common/wizard_forms.html'):
    """Create a new account.

    .. note:: An issue still remains int this code: if all validation
       steps are successful but an error occurs after we call 'save',
       the account will be created. It happens transaction management
       doesn't work very well with nested functions. Need to wait for
       django 1.6 and atomicity.
    """
    cwizard = CreationWizard()
    cwizard.add_step(AccountFormGeneral,
                     _("General"),
                     [dict(classes="btn-inverse next", label=_("Next"))],
                     new_args=[request.user])
    cwizard.add_step(AccountFormMail,
                     _("Mail"), [
                         dict(classes="btn-primary submit", label=_("Create")),
                         dict(classes="btn-inverse prev", label=_("Previous"))
                     ],
                     formtpl="admin/mailform.html")

    if request.method == "POST":
        retcode, data = cwizard.validate_step(request)
        if retcode == -1:
            raise BadRequest(data)
        if retcode == 1:
            return render_to_json_response({
                'title': cwizard.get_title(data + 1),
                'stepid': data
            })
        if retcode == 2:
            genform = cwizard.steps[0]["form"]
            account = genform.save()
            account.post_create(request.user)
            mailform = cwizard.steps[1]["form"]
            mailform.save(request.user, account)
            return render_to_json_response(_("Account created"))
        return render_to_json_response(
            {
                'stepid': data,
                'form_errors': cwizard.errors
            }, status=400)

    ctx = {
        'title': _("New account"),
        'action': reverse(newaccount),
        'formid': 'newaccount_form',
        'submit_label': _("Create")
    }
    cwizard.create_forms()
    ctx.update(steps=cwizard.steps)
    ctx.update(subtitle="1. %s" % cwizard.steps[0]['title'])
    return render(request, tplname, ctx)
Esempio n. 3
0
def newdomain(request, tplname="common/wizard_forms.html"):
    events.raiseEvent("CanCreate", request.user, "domains")

    def newdomain_cb(steps):
        genform = steps[0]["form"]
        genform.is_valid()
        domain = genform.save(request.user)
        domain.post_create(request.user)
        steps[1]["form"].save(request.user, domain)

    commonctx = {
        "title": _("New domain"),
        "action_label": _("Create"),
        "action_classes": "submit",
        "action": reverse(newdomain),
        "formid": "domform"
    }
    cwizard = CreationWizard(newdomain_cb)
    cwizard.add_step(DomainFormGeneral,
                     _("General"),
                     [dict(classes="btn-inverse next", label=_("Next"))],
                     formtpl="admin/domain_general_form.html")
    cwizard.add_step(DomainFormOptions,
                     _("Options"), [
                         dict(classes="btn-primary submit", label=_("Create")),
                         dict(classes="btn-inverse prev", label=_("Previous"))
                     ],
                     formtpl="admin/domain_options_form.html")

    if request.method == "POST":
        retcode, data = cwizard.validate_step(request)
        if retcode == -1:
            raise AdminError(data)
        if retcode == 1:
            return ajax_simple_response(
                dict(status="ok",
                     title=cwizard.get_title(data + 1),
                     stepid=data))
        if retcode == 2:
            return ajax_simple_response(
                dict(status="ok", respmsg=_("Domain created")))

        from modoboa.lib.templatetags.libextras import render_form
        return ajax_simple_response(
            dict(status="ko",
                 stepid=data,
                 form=render_form(cwizard.steps[data]["form"])))

    cwizard.create_forms()
    commonctx.update(steps=cwizard.steps)
    commonctx.update(subtitle="1. %s" % cwizard.steps[0]['title'])
    return render(request, tplname, commonctx)
Esempio n. 4
0
def newdomain(request, tplname="common/wizard_forms.html"):
    events.raiseEvent("CanCreate", request.user, "domains")

    def newdomain_cb(steps):
        genform = steps[0]["form"]
        genform.is_valid()
        domain = genform.save(request.user)
        domain.post_create(request.user)
        steps[1]["form"].save(request.user, domain)

    commonctx = {"title": _("New domain"),
                 "action_label": _("Create"),
                 "action_classes": "submit",
                 "action": reverse(newdomain),
                 "formid": "domform"}
    cwizard = CreationWizard(newdomain_cb)
    cwizard.add_step(DomainFormGeneral, _("General"),
                     [dict(classes="btn-inverse next", label=_("Next"))],
                     formtpl="admin/domain_general_form.html")
    cwizard.add_step(DomainFormOptions, _("Options"),
                     [dict(classes="btn-primary submit", label=_("Create")),
                      dict(classes="btn-inverse prev", label=_("Previous"))],
                     formtpl="admin/domain_options_form.html")

    if request.method == "POST":
        retcode, data = cwizard.validate_step(request)
        if retcode == -1:
            raise AdminError(data)
        if retcode == 1:
            return ajax_simple_response(dict(
                status="ok", title=cwizard.get_title(data + 1), stepid=data
            ))
        if retcode == 2:
            return ajax_simple_response(
                dict(status="ok", respmsg=_("Domain created"))
            )

        from modoboa.lib.templatetags.libextras import render_form
        return ajax_simple_response(dict(
            status="ko", stepid=data,
            form=render_form(cwizard.steps[data]["form"])
        ))

    cwizard.create_forms()
    commonctx.update(steps=cwizard.steps)
    commonctx.update(subtitle="1. %s" % cwizard.steps[0]['title'])
    return render(request, tplname, commonctx)
Esempio n. 5
0
def newaccount(request, tplname='common/wizard_forms.html'):
    """Create a new account.

    .. note:: An issue still remains int this code: if all validation
       steps are successful but an error occurs after we call 'save',
       the account will be created. It happens transaction management
       doesn't work very well with nested functions. Need to wait for
       django 1.6 and atomicity.
    """
    cwizard = CreationWizard()
    cwizard.add_step(AccountFormGeneral, _("General"),
                     [dict(classes="btn-inverse next", label=_("Next"))],
                     new_args=[request.user])
    cwizard.add_step(AccountFormMail, _("Mail"),
                     [dict(classes="btn-primary submit", label=_("Create")),
                      dict(classes="btn-inverse prev", label=_("Previous"))],
                     formtpl="admin/mailform.html")

    if request.method == "POST":
        retcode, data = cwizard.validate_step(request)
        if retcode == -1:
            raise BadRequest(data)
        if retcode == 1:
            return render_to_json_response(
                {'title': cwizard.get_title(data + 1), 'stepid': data}
            )
        if retcode == 2:
            genform = cwizard.steps[0]["form"]
            account = genform.save()
            account.post_create(request.user)
            mailform = cwizard.steps[1]["form"]
            mailform.save(request.user, account)
            return render_to_json_response(_("Account created"))
        return render_to_json_response({
            'stepid': data, 'form_errors': cwizard.errors
        }, status=400)

    ctx = {
        'title': _("New account"),
        'action': reverse(newaccount),
        'formid': 'newaccount_form',
        'submit_label': _("Create")
    }
    cwizard.create_forms()
    ctx.update(steps=cwizard.steps)
    ctx.update(subtitle="1. %s" % cwizard.steps[0]['title'])
    return render(request, tplname, ctx)
Esempio n. 6
0
def newdomain(request, tplname="common/wizard_forms.html"):
    events.raiseEvent("CanCreate", request.user, "domains")

    cwizard = CreationWizard()
    cwizard.add_step(DomainFormGeneral, _("General"),
                     [dict(classes="btn-inverse next", label=_("Next"))],
                     formtpl="admin/domain_general_form.html")
    cwizard.add_step(
        DomainFormOptions, _("Options"),
        [dict(classes="btn-primary submit", label=_("Create")),
         dict(classes="btn-inverse prev", label=_("Previous"))],
        formtpl="admin/domain_options_form.html",
        new_args=[request.user]
    )

    if request.method == "POST":
        retcode, data = cwizard.validate_step(request)
        if retcode == -1:
            raise BadRequest(data)
        if retcode == 1:
            return render_to_json_response(
                {'title': cwizard.get_title(data + 1), 'stepid': data}
            )
        if retcode == 2:
            genform = cwizard.steps[0]["form"]
            domain = genform.save(request.user)
            domain.post_create(request.user)
            try:
                cwizard.steps[1]["form"].save(request.user, domain)
            except ModoboaException as e:
                transaction.rollback()
                raise
            return render_to_json_response(_("Domain created"))
        return render_to_json_response({
            'stepid': data, 'form_errors': cwizard.errors
        }, status=400)

    ctx = {"title": _("New domain"),
           "action_label": _("Create"),
           "action_classes": "submit",
           "action": reverse(newdomain),
           "formid": "domform"}
    cwizard.create_forms()
    ctx.update(steps=cwizard.steps)
    ctx.update(subtitle="1. %s" % cwizard.steps[0]['title'])
    return render(request, tplname, ctx)
Esempio n. 7
0
def newdomain(request, tplname="common/wizard_forms.html"):
    events.raiseEvent("CanCreate", request.user, "domains")

    cwizard = CreationWizard()
    cwizard.add_step(DomainFormGeneral, _("General"),
                     [dict(classes="btn-inverse next", label=_("Next"))],
                     formtpl="admin/domain_general_form.html")
    cwizard.add_step(
        DomainFormOptions, _("Options"),
        [dict(classes="btn-primary submit", label=_("Create")),
         dict(classes="btn-inverse prev", label=_("Previous"))],
        formtpl="admin/domain_options_form.html",
        new_args=[request.user]
    )

    if request.method == "POST":
        retcode, data = cwizard.validate_step(request)
        if retcode == -1:
            raise BadRequest(data)
        if retcode == 1:
            return render_to_json_response(
                {'title': cwizard.get_title(data + 1), 'stepid': data}
            )
        if retcode == 2:
            genform = cwizard.steps[0]["form"]
            domain = genform.save(request.user)
            domain.post_create(request.user)
            try:
                cwizard.steps[1]["form"].save(request.user, domain)
            except ModoboaException as e:
                transaction.rollback()
                raise
            return render_to_json_response(_("Domain created"))
        return render_to_json_response({
            'stepid': data, 'form_errors': cwizard.errors
        }, status=400)

    ctx = {"title": _("New domain"),
           "action_label": _("Create"),
           "action_classes": "submit",
           "action": reverse(newdomain),
           "formid": "domform"}
    cwizard.create_forms()
    ctx.update(steps=cwizard.steps)
    ctx.update(subtitle="1. %s" % cwizard.steps[0]['title'])
    return render(request, tplname, ctx)
Esempio n. 8
0
def newaccount(request, tplname='common/wizard_forms.html'):
    def create_account(steps):
        """Account creation callback

        Called when all creation steps have been validated.

        :param steps: the steps data
        """
        genform = steps[0]["form"]
        genform.is_valid()
        account = genform.save()
        account.post_create(request.user)

        mailform = steps[1]["form"]
        try:
            mailform.save(request.user, account)
        except AdminError:
            # A bit uggly: transaction management doesn't work very
            # well with nested functions. Need to wait for django 1.6
            # and atomicity.
            account.delete(request.user, False)
            raise

    ctx = dict(title=_("New account"),
               action=reverse(newaccount),
               formid="newaccount_form",
               submit_label=_("Create"))
    cwizard = CreationWizard(create_account)
    cwizard.add_step(AccountFormGeneral,
                     _("General"),
                     [dict(classes="btn-inverse next", label=_("Next"))],
                     new_args=[request.user])
    cwizard.add_step(AccountFormMail,
                     _("Mail"), [
                         dict(classes="btn-primary submit", label=_("Create")),
                         dict(classes="btn-inverse prev", label=_("Previous"))
                     ],
                     formtpl="admin/mailform.html")

    if request.method == "POST":
        retcode, data = cwizard.validate_step(request)
        if retcode == -1:
            raise AdminError(data)
        if retcode == 1:
            return ajax_simple_response(
                dict(status="ok",
                     title=cwizard.get_title(data + 1),
                     stepid=data))
        if retcode == 2:
            return ajax_simple_response(
                dict(status="ok", respmsg=_("Account created")))

        from modoboa.lib.templatetags.lib_tags import render_form
        return ajax_simple_response(
            dict(status="ko",
                 stepid=data,
                 form=render_form(cwizard.steps[data]["form"])))

    cwizard.create_forms()
    ctx.update(steps=cwizard.steps)
    ctx.update(subtitle="1. %s" % cwizard.steps[0]['title'])
    return render(request, tplname, ctx)