mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-18 05:51:26 +02:00
@@ -1,4 +1,4 @@
|
||||
{% load i18n lib_tags %}{% load url from future %}
|
||||
{% load i18n form_tags %}{% load url from future %}
|
||||
<h2>{% trans "Profile" %} <small>{% trans "Update your personal information" %}</small></h2>
|
||||
<hr>
|
||||
<form class="form-horizontal" method="POST" action="{% url 'modoboa.core.views.user.profile' %}"
|
||||
|
||||
@@ -23,8 +23,7 @@ class DomainFormGeneral(forms.ModelForm, DynamicForm):
|
||||
help_text=ugettext_lazy(
|
||||
"Default quota in MB applied to mailboxes. Leave empty to use the "
|
||||
"default value."
|
||||
),
|
||||
widget=forms.TextInput(attrs={"class": "col-md-1 form-control"})
|
||||
)
|
||||
)
|
||||
aliases = DomainNameField(
|
||||
label=ugettext_lazy("Alias(es)"),
|
||||
@@ -32,12 +31,11 @@ class DomainFormGeneral(forms.ModelForm, DynamicForm):
|
||||
help_text=ugettext_lazy(
|
||||
"Alias(es) of this domain. Indicate only one name per input, "
|
||||
"press ENTER to add a new input."
|
||||
),
|
||||
widget=forms.TextInput(attrs={"class": "col-md-1 form-control"})
|
||||
)
|
||||
)
|
||||
name = DomainNameField(
|
||||
widget=forms.TextInput(attrs={"class": "col-md-1 form-control"})
|
||||
)
|
||||
widget=forms.TextInput()
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = Domain
|
||||
@@ -49,6 +47,10 @@ class DomainFormGeneral(forms.ModelForm, DynamicForm):
|
||||
self.oldname = kwargs["instance"].name
|
||||
super(DomainFormGeneral, self).__init__(*args, **kwargs)
|
||||
|
||||
self.field_widths = {
|
||||
"quota": 3
|
||||
}
|
||||
|
||||
if len(args) and isinstance(args[0], QueryDict):
|
||||
self._load_from_qdict(args[0], "aliases", DomainNameField)
|
||||
elif "instance" in kwargs:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{% load lib_tags %}
|
||||
{% load form_tags %}
|
||||
{% render_field form.role %}
|
||||
{% render_field form.username %}
|
||||
{% render_field form.first_name %}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{% extends "common/generic_modal_form.html" %}{% load lib_tags %}
|
||||
{% extends "common/generic_modal_form.html" %}{% load form_tags %}
|
||||
{% block formbody %}
|
||||
{% render_field form.email %}
|
||||
{% render_fields_group form "recipients" %}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{% load i18n lib_tags %}
|
||||
{% load i18n form_tags %}
|
||||
{% render_field form.name %}
|
||||
{% render_field_appended form.quota _("MB") %}
|
||||
{% render_fields_group form "aliases" %}
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
{% load i18n lib_tags %}{% if form.fields %}
|
||||
{% load i18n form_tags %}
|
||||
{% if form.fields %}
|
||||
{% render_field form.create_dom_admin %}
|
||||
{% render_field_appended form.dom_admin_username "@" %}
|
||||
{% render_field form.create_aliases %}
|
||||
{% else %}<div class="alert alert-warning">{% trans "You can't create a new domain administrator" %}</div>{% endif %}
|
||||
{% else %}
|
||||
<div class="alert alert-warning">{% trans "You can't create a new domain administrator" %}</div>
|
||||
{% endif %}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{% load i18n lib_tags %}{% load url from future %}
|
||||
{% load i18n form_tags %}{% load url from future %}
|
||||
<h2>{% trans "Forward" %} <small>{% trans "Automatically forward emails to another address" %}</small></h2>
|
||||
<hr>
|
||||
<form class="form-horizontal" method="POST" action="{% url 'modoboa.extensions.admin.views.user.forward' %}"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{% extends "common/generic_modal_form.html" %}
|
||||
{% load lib_tags i18n %}
|
||||
{% load form_tags i18n %}
|
||||
{% block formbody %}
|
||||
<div class="alert alert-info">
|
||||
<h4>{% trans "Help" %}</h4>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{% load lib_tags %}
|
||||
{% load form_tags %}
|
||||
{% render_field form.email %}
|
||||
{% include "common/generic_field.html" with field=form.quota help_display_mode="tooltip" appended_text=_("MB") activator=True activator_value=form.quota_act.value deactivate_if_empty=False activator_label=_("Use domain default value") %}
|
||||
{% render_extra_fields form %}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{% extends "common/generic_modal_form.html" %}{% load lib_tags %}{% block formbody %}
|
||||
{% extends "common/generic_modal_form.html" %}{% load form_tags %}{% block formbody %}
|
||||
{% render_field form.name %}
|
||||
{% render_field_appended form.quota _("MB") %}
|
||||
{% render_fields_group form "aliases" %}
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
{% load lib_tags %}
|
||||
{% load form_tags %}
|
||||
{% render_fields_group form "domains" %}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{% load i18n lib_tags %}
|
||||
{% load i18n form_tags %}
|
||||
{% render_field form.bypass_virus_checks %}
|
||||
{% render_field form.bypass_spam_checks %}
|
||||
<div class="input-group">
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{% load i18n lib_tags %}{% load url from future %}
|
||||
{% load i18n form_tags %}{% load url from future %}
|
||||
<h2>{% trans "Auto-reply message" %} <small>{% trans "Define a message to automatically send when you are off" %}</small></h2>
|
||||
<hr>
|
||||
<form class="form-horizontal" method="POST"
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
{% load lib_tags %}
|
||||
{% load form_tags %}
|
||||
{% render_field form.name %}
|
||||
{% render_field form.target_host %}
|
||||
{% include "postfix_relay_domains/service_field.html" with field=form.service %}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{% extends "common/generic_modal_form.html" %}
|
||||
{% load i18n lib_tags sfilters_tags %}
|
||||
{% load i18n form_tags sfilters_tags %}
|
||||
{% block formbody %}
|
||||
{% if oldname %}<input type="hidden" name="oldname" value="{{ oldname }}" />{% endif %}
|
||||
{% render_field form.name %}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{% load i18n lib_tags %}{% load url from future %}
|
||||
{% load i18n form_tags %}{% load url from future %}
|
||||
<form class="form-horizontal" method="POST" action="{{ posturl }}" id="composemail">{% csrf_token %}
|
||||
<div id="compose-container" class="col-lg-12">
|
||||
<div id="mailheader" class="well">
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
"""
|
||||
Form rendering tags.
|
||||
"""
|
||||
|
||||
from django import forms
|
||||
from django import template
|
||||
from django.template.loader import render_to_string
|
||||
from django.utils.translation import ugettext_lazy
|
||||
|
||||
from modoboa.lib.formutils import SeparatorField
|
||||
|
||||
register = template.Library()
|
||||
|
||||
|
||||
@register.simple_tag
|
||||
def render_form(form, tpl=None):
|
||||
"""Render a form."""
|
||||
if tpl is not None:
|
||||
return render_to_string(tpl, dict(form=form))
|
||||
|
||||
ret = ""
|
||||
for field in form:
|
||||
ret += "%s\n" % render_field(field)
|
||||
return ret
|
||||
|
||||
|
||||
def configure_field_classes(field):
|
||||
"""Add required CSS classes to field."""
|
||||
if isinstance(field.field.widget, forms.CheckboxInput) or \
|
||||
isinstance(field.field.widget, forms.RadioSelect):
|
||||
return
|
||||
if "class" in field.field.widget.attrs:
|
||||
field.field.widget.attrs["class"] += " form-control"
|
||||
else:
|
||||
field.field.widget.attrs["class"] = "form-control"
|
||||
|
||||
|
||||
@register.simple_tag
|
||||
def render_field(field, help_display_mode="tooltip"):
|
||||
"""Render a field."""
|
||||
from modoboa.core.templatetags.core_tags import visirule
|
||||
|
||||
if type(field.field) is SeparatorField:
|
||||
return "<h5%s>%s</h5>" % (visirule(field), unicode(field.label))
|
||||
configure_field_classes(field)
|
||||
return render_to_string("common/generic_field.html", dict(
|
||||
field=field, help_display_mode=help_display_mode
|
||||
))
|
||||
|
||||
|
||||
@register.simple_tag
|
||||
def render_field_appended(field, text):
|
||||
configure_field_classes(field)
|
||||
return render_to_string("common/generic_field.html", dict(
|
||||
field=field, help_display_mode="tooltip", appended_text=text
|
||||
))
|
||||
|
||||
|
||||
@register.simple_tag
|
||||
def render_field_with_activator(field, activator_label=ugettext_lazy("activate")):
|
||||
return render_to_string("common/generic_field.html", {
|
||||
"field": field, "help_display_mode": "tooltip", "activator": True,
|
||||
"activator_label": activator_label, "deactivate_if_empty": True
|
||||
})
|
||||
|
||||
|
||||
@register.simple_tag
|
||||
def render_and_hide_field(field):
|
||||
return render_to_string("common/generic_field.html", dict(
|
||||
field=field, hidden=True
|
||||
))
|
||||
|
||||
|
||||
@register.simple_tag
|
||||
def render_fields_group(form, pattern):
|
||||
first = forms.BoundField(form, form.fields[pattern], pattern)
|
||||
configure_field_classes(first)
|
||||
label = first.label
|
||||
group = [first]
|
||||
cpt = 1
|
||||
haserror = len(first.errors) != 0
|
||||
while True:
|
||||
fname = "%s_%d" % (pattern, cpt)
|
||||
if not fname in form.fields:
|
||||
break
|
||||
bfield = forms.BoundField(form, form.fields[fname], fname)
|
||||
if len(bfield.errors):
|
||||
haserror = True
|
||||
configure_field_classes(bfield)
|
||||
group += [bfield]
|
||||
cpt += 1
|
||||
|
||||
return render_to_string("common/generic_fields_group.html", dict(
|
||||
label=label, help_text=first.help_text, group=group, haserror=haserror
|
||||
))
|
||||
|
||||
|
||||
@register.simple_tag
|
||||
def render_extra_fields(form):
|
||||
result = ''
|
||||
for fname in form.extra_fields:
|
||||
result += render_to_string("common/generic_field.html", {
|
||||
'field': form[fname], 'help_display_mode': 'tooltip'
|
||||
})
|
||||
return result
|
||||
|
||||
|
||||
@register.simple_tag
|
||||
def render_field_width(field):
|
||||
"""."""
|
||||
form = field.form
|
||||
if hasattr(form, "field_widths") and field.name in form.field_widths:
|
||||
width = form.field_widths[field.name]
|
||||
else:
|
||||
width = 5
|
||||
return "col-lg-{0} col-md-{0} col-sm-{0}".format(width)
|
||||
@@ -1,11 +1,11 @@
|
||||
# coding: utf-8
|
||||
from datetime import datetime
|
||||
|
||||
from django import template
|
||||
from django.template import Template, Context
|
||||
from django.template.loader import render_to_string
|
||||
from django.utils.translation import ugettext_lazy
|
||||
|
||||
from modoboa.lib import events
|
||||
from modoboa.lib.formutils import SeparatorField
|
||||
|
||||
register = template.Library()
|
||||
|
||||
@@ -25,85 +25,6 @@ def tolist(values):
|
||||
return "[%s]" % ",".join(['"%s"' % v for v in values])
|
||||
|
||||
|
||||
@register.simple_tag
|
||||
def render_form(form, tpl=None):
|
||||
if tpl is not None:
|
||||
return render_to_string(tpl, dict(form=form))
|
||||
|
||||
ret = ""
|
||||
for field in form:
|
||||
ret += "%s\n" % render_field(field)
|
||||
return ret
|
||||
|
||||
|
||||
@register.simple_tag
|
||||
def render_field(field, help_display_mode="tooltip"):
|
||||
from modoboa.core.templatetags.core_tags import visirule
|
||||
|
||||
if type(field.form.fields[field.name]) is SeparatorField:
|
||||
return "<h5%s>%s</h5>" % (visirule(field), unicode(field.label))
|
||||
|
||||
return render_to_string("common/generic_field.html", dict(
|
||||
field=field, help_display_mode=help_display_mode
|
||||
))
|
||||
|
||||
|
||||
@register.simple_tag
|
||||
def render_field_appended(field, text):
|
||||
return render_to_string("common/generic_field.html", dict(
|
||||
field=field, help_display_mode="tooltip", appended_text=text
|
||||
))
|
||||
|
||||
|
||||
@register.simple_tag
|
||||
def render_field_with_activator(field, activator_label=ugettext_lazy("activate")):
|
||||
return render_to_string("common/generic_field.html", {
|
||||
"field": field, "help_display_mode": "tooltip", "activator": True,
|
||||
"activator_label": activator_label, "deactivate_if_empty": True
|
||||
})
|
||||
|
||||
|
||||
@register.simple_tag
|
||||
def render_and_hide_field(field):
|
||||
return render_to_string("common/generic_field.html", dict(
|
||||
field=field, hidden=True
|
||||
))
|
||||
|
||||
|
||||
@register.simple_tag
|
||||
def render_fields_group(form, pattern):
|
||||
from django.forms import forms
|
||||
|
||||
first = forms.BoundField(form, form.fields[pattern], pattern)
|
||||
label = first.label
|
||||
group = [first]
|
||||
cpt = 1
|
||||
haserror = len(first.errors) != 0
|
||||
while True:
|
||||
fname = "%s_%d" % (pattern, cpt)
|
||||
if not fname in form.fields:
|
||||
break
|
||||
bfield = forms.BoundField(form, form.fields[fname], fname)
|
||||
if len(bfield.errors):
|
||||
haserror = True
|
||||
group += [bfield]
|
||||
cpt += 1
|
||||
|
||||
return render_to_string("common/generic_fields_group.html", dict(
|
||||
label=label, help_text=first.help_text, group=group, haserror=haserror
|
||||
))
|
||||
|
||||
|
||||
@register.simple_tag
|
||||
def render_extra_fields(form):
|
||||
result = ''
|
||||
for fname in form.extra_fields:
|
||||
result += render_to_string("common/generic_field.html", {
|
||||
'field': form[fname], 'help_display_mode': 'tooltip'
|
||||
})
|
||||
return result
|
||||
|
||||
|
||||
@register.simple_tag
|
||||
def pagination_bar(page):
|
||||
return render_to_string("common/pagination_bar.html", dict(
|
||||
|
||||
@@ -1,54 +1,55 @@
|
||||
{% load i18n core_tags lib_tags %}
|
||||
{% load i18n core_tags form_tags %}
|
||||
<div class="form-group
|
||||
{% if field.errors %}error{% endif %}
|
||||
{{ extra_classes }}"{% visirule field %}
|
||||
{% if hidden %}style="display: none"{% endif %}
|
||||
>
|
||||
|
||||
{% if field.label %}
|
||||
<label class="control-label col-lg-4 col-md-4 col-sm-4" for="id_{{ field.html_name }}">{{ field.label }}
|
||||
{% if help_display_mode == "tooltip" and field.help_text %}
|
||||
<a href="#" class="help" data-original-title="{% trans 'Help:' %} {{ field.label }}" data-content="{{ field.help_text }}" rel="popover">?</a>
|
||||
{% if field.label %}
|
||||
<label class="control-label col-lg-4 col-md-4 col-sm-4" for="id_{{ field.html_name }}">{{ field.label }}
|
||||
{% if help_display_mode == "tooltip" and field.help_text %}
|
||||
<a href="#" class="help" data-original-title="{% trans 'Help:' %} {{ field.label }}" data-content="{{ field.help_text }}" rel="popover">?</a>
|
||||
{% endif %}
|
||||
</label>
|
||||
{% endif %}
|
||||
|
||||
<div class="{% render_field_width field %}">
|
||||
{% if appended_text %}
|
||||
<div class="input-group">
|
||||
{% endif %}
|
||||
</label>
|
||||
{% endif %}
|
||||
|
||||
<div class="col-lg-5 col-md-5 col-sm-5">
|
||||
{% if appended_text %}
|
||||
<div class="input-group">
|
||||
{% endif %}
|
||||
{{ field }}
|
||||
{% if appended_text %}
|
||||
<span class="input-group-addon">{{ appended_text }}</span></div>
|
||||
{{ field }}
|
||||
{% if appended_text %}
|
||||
<span class="input-group-addon">{{ appended_text }}</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if help_display_mode == "inline" and field.help_text %}
|
||||
<span class="help-block pull-right">{{ field.help_text }}</span>
|
||||
<span class="help-block pull-right">{{ field.help_text }}</span>
|
||||
{% endif %}
|
||||
{% if inline_message %}
|
||||
<span class="help-block pull-right">{{ inline_message }}</span>
|
||||
<span class="help-block pull-right">{{ inline_message }}</span>
|
||||
{% endif %}
|
||||
{% if activator %}
|
||||
<div class="checkbox">
|
||||
<label class="checkbox-inline" for="id_{{ field.name }}_act">
|
||||
<input type="checkbox" class="activator" id="id_{{ field.name }}_act" name="{{ field.name }}_act"
|
||||
{% if activator_value %}checked='checked'
|
||||
{% else %}
|
||||
{% if deactivate_if_empty and field.value == None %}
|
||||
checked='checked'
|
||||
{% endif %}
|
||||
{% endif %}/>
|
||||
{{ activator_label }}
|
||||
</label>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if field.errors %}
|
||||
<p class="help-block">
|
||||
{% for error in field.errors %}
|
||||
{{ error|safe }}
|
||||
{% endfor %}
|
||||
</p>
|
||||
{% endif %}
|
||||
{% block extra_controls %}
|
||||
{% endblock %}
|
||||
<div class="checkbox">
|
||||
<label class="checkbox-inline" for="id_{{ field.name }}_act">
|
||||
<input type="checkbox" class="activator" id="id_{{ field.name }}_act" name="{{ field.name }}_act"
|
||||
{% if activator_value %}checked='checked'
|
||||
{% else %}
|
||||
{% if deactivate_if_empty and field.value == None %}
|
||||
checked='checked'
|
||||
{% endif %}
|
||||
{% endif %}/>
|
||||
{{ activator_label }}
|
||||
</label>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if field.errors %}
|
||||
<p class="help-block">
|
||||
{% for error in field.errors %}
|
||||
{{ error|safe }}
|
||||
{% endfor %}
|
||||
</p>
|
||||
{% endif %}
|
||||
{% block extra_controls %}
|
||||
{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
{% extends "common/generic_modal.html" %}
|
||||
{% load lib_tags %}
|
||||
|
||||
{% load form_tags %}
|
||||
|
||||
{% block modalbody %}
|
||||
{% if error %}<div class="alert alert-danger">{{ error }}</div>{% endif %}
|
||||
{% if error %}<div class="alert alert-danger">{{ error }}</div>{% endif %}
|
||||
<form class="form-horizontal" action="{{ action }}" enctype="{{ enctype }}"
|
||||
method="POST" id="{{ formid }}" name="{{ formid }}"
|
||||
target="{{ target }}">{% csrf_token %}
|
||||
target="{{ target }}">
|
||||
{% csrf_token %}
|
||||
{% block formbody %}
|
||||
{% render_form form %}
|
||||
{% block extrafields %}{% endblock %}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{% load lib_tags %}
|
||||
{% load form_tags %}
|
||||
<div class="tabbable">
|
||||
<ul class="nav nav-tabs">
|
||||
{% for form in forms %}<li{% if forloop.first %} class="active"{% endif %}><a href="#{{ forloop.counter }}" data-toggle="tab">{{ form.label }}</a></li>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{% extends "common/generic_modal.html" %}
|
||||
{% load i18n lib_tags %}
|
||||
{% load i18n form_tags %}
|
||||
{% block modalbody %}
|
||||
<form id="{{ formid }}" class="form-horizontal" action="{{ action }}" method="POST">{% csrf_token %}
|
||||
<ul class="nav nav-pills">{% for tab in tabs %}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{% load i18n lib_tags %}
|
||||
{% load i18n form_tags %}
|
||||
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
<title>{% block pagetitle %}{% endblock %}</title>
|
||||
<link rel="icon" type="image/png" href="{{ STATIC_URL }}css/logo-icon.png" />
|
||||
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/bootstrap.css" />
|
||||
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/bootstrap-responsive.css" />
|
||||
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/bootstrap-datetimepicker.css" />
|
||||
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/bootstrap-select.min.css" />
|
||||
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/custom.css" />
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!DOCTYPE html>{% load i18n core_tags lib_tags %}{% load url from future %}
|
||||
<!DOCTYPE html>{% load i18n core_tags lib_tags form_tags %}{% load url from future %}
|
||||
<html lang="{{ LANGUAGE_CODE }}">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
|
||||
Reference in New Issue
Block a user