mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-25 05:58:42 +01:00
* Improved parameters management (see #392)
* Supporting mailboxes rename and removal only with Dovecot 2.x (see #389)
This commit is contained in:
@@ -40,50 +40,13 @@ class Amavis(ModoExtension):
|
||||
priority=7, policy=p)
|
||||
|
||||
def load(self):
|
||||
parameters.register_admin(
|
||||
"MAX_MESSAGES_AGE", type="int",
|
||||
deflt=14,
|
||||
help=_("Quarantine messages maximum age (in days) before deletion")
|
||||
)
|
||||
parameters.register_admin(
|
||||
"RELEASED_MSGS_CLEANUP", type="list_yesno", deflt="no",
|
||||
help=_("Remove messages marked as released while cleaning up the database")
|
||||
)
|
||||
parameters.register_admin("AM_PDP_MODE", type="list",
|
||||
deflt="unix",
|
||||
values=[("inet", "inet"), ("unix", "unix")],
|
||||
help=ugettext_lazy("Mode used to access the PDP server"))
|
||||
parameters.register_admin("AM_PDP_HOST", type="string",
|
||||
deflt="localhost",
|
||||
visible_if="AM_PDP_MODE=inet",
|
||||
help=ugettext_lazy("PDP server address (if inet mode)"))
|
||||
parameters.register_admin("AM_PDP_PORT", type="int",
|
||||
deflt=9998,
|
||||
visible_if="AM_PDP_MODE=inet",
|
||||
help=ugettext_lazy("PDP server port (if inet mode)"))
|
||||
parameters.register_admin("AM_PDP_SOCKET", type="string",
|
||||
deflt="/var/amavis/amavisd.sock",
|
||||
visible_if="AM_PDP_MODE=unix",
|
||||
help=ugettext_lazy("Path to the PDP server socket (if unix mode)"))
|
||||
parameters.register_admin("CHECK_REQUESTS_INTERVAL", type="int",
|
||||
deflt=30,
|
||||
help=ugettext_lazy("Interval between two release requests checks"))
|
||||
parameters.register_admin("USER_CAN_RELEASE", type="list_yesno", deflt="no",
|
||||
help=ugettext_lazy("Allow users to directly release their messages"))
|
||||
parameters.register_admin("SELF_SERVICE", type="list_yesno", deflt="no",
|
||||
help=ugettext_lazy("Activate the 'self-service' mode"))
|
||||
parameters.register_admin("NOTIFICATIONS_SENDER", type="string", deflt="notification@modoboa.org",
|
||||
help=ugettext_lazy("The e-mail address used to send notitications"))
|
||||
|
||||
parameters.register_user(
|
||||
"MESSAGES_PER_PAGE", type="int", deflt=40,
|
||||
label="Number of displayed emails per page",
|
||||
help=ugettext_lazy("Sets the maximum number of messages displayed in a page")
|
||||
)
|
||||
|
||||
from app_settings import ParametersForm, UserSettings
|
||||
parameters.register(ParametersForm, "Amavis")
|
||||
parameters.register(UserSettings, _("Quarantine"))
|
||||
|
||||
def destroy(self):
|
||||
events.unregister("UserMenuDisplay", menu)
|
||||
parameters.unregister_app("amavis")
|
||||
parameters.unregister()
|
||||
|
||||
exts_pool.register_extension(Amavis)
|
||||
|
||||
|
||||
@@ -1,35 +1,7 @@
|
||||
# coding: utf-8
|
||||
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django import forms
|
||||
from models import Policy, Users
|
||||
from django.utils.translation import ugettext_lazy
|
||||
from django.forms.widgets import RadioSelect, RadioInput
|
||||
from django.utils.html import conditional_escape
|
||||
from django.utils.encoding import force_unicode
|
||||
from django.utils.safestring import mark_safe
|
||||
|
||||
|
||||
class CustomRadioInput(RadioInput):
|
||||
def __unicode__(self):
|
||||
if 'id' in self.attrs:
|
||||
label_for = ' for="%s_%s"' % (self.attrs['id'], self.index)
|
||||
else:
|
||||
label_for = ''
|
||||
choice_label = conditional_escape(force_unicode(self.choice_label))
|
||||
return mark_safe(u'<label class="radio inline" %s>%s %s</label>' % (label_for, self.tag(), choice_label))
|
||||
|
||||
|
||||
class InlineRadioRenderer(RadioSelect.renderer):
|
||||
def __iter__(self):
|
||||
for i, choice in enumerate(self.choices):
|
||||
yield CustomRadioInput(self.name, self.value, self.attrs.copy(), choice, i)
|
||||
|
||||
def render(self):
|
||||
return mark_safe(u'\n'.join([u'%s\n' % force_unicode(w) for w in self]))
|
||||
|
||||
|
||||
class InlineRadioSelect(RadioSelect):
|
||||
renderer = InlineRadioRenderer
|
||||
|
||||
|
||||
class DomainPolicyForm(forms.ModelForm):
|
||||
|
||||
@@ -12,6 +12,7 @@ from modoboa.lib import events, parameters
|
||||
from modoboa.extensions import ModoExtension, exts_pool
|
||||
from models import *
|
||||
|
||||
|
||||
class PostfixAutoreply(ModoExtension):
|
||||
name = "postfix_autoreply"
|
||||
label = "Postfix autoreply"
|
||||
@@ -20,7 +21,7 @@ class PostfixAutoreply(ModoExtension):
|
||||
|
||||
def init(self):
|
||||
from modoboa.admin.models import Domain
|
||||
|
||||
|
||||
for dom in Domain.objects.all():
|
||||
try:
|
||||
trans = Transport.objects.get(domain="autoreply.%s" % dom.name)
|
||||
@@ -36,11 +37,8 @@ class PostfixAutoreply(ModoExtension):
|
||||
onCreateMailbox(None, mb)
|
||||
|
||||
def load(self):
|
||||
parameters.register_admin(
|
||||
"AUTOREPLIES_TIMEOUT",
|
||||
type="int", deflt=86400,
|
||||
help=ugettext_lazy("Timeout in seconds between two auto-replies to the same recipient")
|
||||
)
|
||||
from app_settings import ParametersForm
|
||||
parameters.register(ParametersForm, _("Automatic replies"))
|
||||
|
||||
def destroy(self):
|
||||
events.unregister("CreateDomain", onCreateDomain)
|
||||
@@ -49,14 +47,16 @@ class PostfixAutoreply(ModoExtension):
|
||||
events.unregister("DeleteMailbox", onDeleteMailbox)
|
||||
events.unregister("ModifyMailbox", onModifyMailbox)
|
||||
events.unregister("UserMenuDisplay", menu)
|
||||
parameters.unregister_app("postfix_autoreply")
|
||||
parameters.unregister()
|
||||
|
||||
exts_pool.register_extension(PostfixAutoreply)
|
||||
|
||||
|
||||
@events.observe("ExtraUprefsRoutes")
|
||||
def extra_routes():
|
||||
return [(r'^autoreply/$', 'modoboa.extensions.postfix_autoreply.views.autoreply'),]
|
||||
|
||||
|
||||
@events.observe("ExtraUprefsJS")
|
||||
def extra_js():
|
||||
return ["""function autoreply_cb() {
|
||||
@@ -64,20 +64,20 @@ def extra_js():
|
||||
}
|
||||
""" % 'en']
|
||||
|
||||
|
||||
@events.observe("UserMenuDisplay")
|
||||
def menu(target, user):
|
||||
import views
|
||||
|
||||
if target != "uprefs_menu":
|
||||
return []
|
||||
if not user.has_mailbox:
|
||||
return []
|
||||
return [
|
||||
{"name" : "autoreply",
|
||||
"class" : "ajaxlink",
|
||||
"url" : "autoreply/",
|
||||
"label" : ugettext_lazy("Auto-reply message")}
|
||||
]
|
||||
{"name": "autoreply",
|
||||
"class": "ajaxlink",
|
||||
"url": "autoreply/",
|
||||
"label": ugettext_lazy("Auto-reply message")}
|
||||
]
|
||||
|
||||
|
||||
@events.observe("CreateDomain")
|
||||
def onCreateDomain(user, domain):
|
||||
@@ -86,11 +86,13 @@ def onCreateDomain(user, domain):
|
||||
transport.method = "autoreply:"
|
||||
transport.save()
|
||||
|
||||
|
||||
@events.observe("DeleteDomain")
|
||||
def onDeleteDomain(domain):
|
||||
trans = Transport.objects.get(domain="autoreply.%s" % domain.name)
|
||||
trans.delete()
|
||||
|
||||
|
||||
@events.observe("CreateMailbox")
|
||||
def onCreateMailbox(user, mailbox):
|
||||
alias = Alias()
|
||||
@@ -99,6 +101,7 @@ def onCreateMailbox(user, mailbox):
|
||||
"%s@autoreply.%s" % (mailbox.full_address, mailbox.domain.name)
|
||||
alias.save()
|
||||
|
||||
|
||||
@events.observe("DeleteMailbox")
|
||||
def onDeleteMailbox(mailboxes):
|
||||
from modoboa.admin.models import Mailbox
|
||||
@@ -113,6 +116,7 @@ def onDeleteMailbox(mailboxes):
|
||||
else:
|
||||
alias.delete()
|
||||
|
||||
|
||||
@events.observe("ModifyMailbox")
|
||||
def onModifyMailbox(mailbox, oldmailbox):
|
||||
if oldmailbox.full_address == mailbox.full_address:
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
# coding: utf-8
|
||||
from django.utils.translation import ugettext_lazy
|
||||
from django import forms
|
||||
from modoboa.lib.parameters import AdminParametersForm
|
||||
|
||||
|
||||
class ParametersForm(AdminParametersForm):
|
||||
app = "postfix_autoreply"
|
||||
|
||||
autoreplies_timeout = forms.IntegerField(
|
||||
label=ugettext_lazy("Automatic reply timeout"),
|
||||
initial=86400,
|
||||
help_text=ugettext_lazy("Timeout in seconds between two auto-replies to the same recipient")
|
||||
)
|
||||
|
||||
@@ -3,7 +3,7 @@ from django.utils.translation import ugettext as _, ugettext_lazy
|
||||
from django.core.urlresolvers import reverse
|
||||
from modoboa.lib import events, parameters
|
||||
from modoboa.extensions import ModoExtension, exts_pool
|
||||
from sievelib.managesieve import SUPPORTED_AUTH_MECHS
|
||||
|
||||
|
||||
class SieveFilters(ModoExtension):
|
||||
name = "sievefilters"
|
||||
@@ -13,32 +13,13 @@ class SieveFilters(ModoExtension):
|
||||
url = "sfilters"
|
||||
|
||||
def load(self):
|
||||
parameters.register_app(uparams_opts=dict(needs_mailbox=True))
|
||||
|
||||
parameters.register_admin("SERVER", type="string",
|
||||
deflt="127.0.0.1",
|
||||
help=ugettext_lazy("Address of your MANAGESIEVE server"))
|
||||
parameters.register_admin("PORT", type="int", deflt="2000",
|
||||
help=ugettext_lazy("Listening port of your MANAGESIEVE server"))
|
||||
parameters.register_admin("STARTTLS", type="list_yesno", deflt="no",
|
||||
help=ugettext_lazy("Use the STARTTLS extension"))
|
||||
from app_settings import ParametersForm, UserSettings
|
||||
parameters.register(ParametersForm, _("Sieve filters"))
|
||||
parameters.register(UserSettings, _("Message filters"))
|
||||
|
||||
values = [('AUTO', 'auto')]
|
||||
for m in SUPPORTED_AUTH_MECHS:
|
||||
values += [(m, m.lower())]
|
||||
parameters.register_admin("AUTHENTICATION_MECH", type="list", deflt="auto",
|
||||
values=values,
|
||||
help=ugettext_lazy("Prefered authentication mechanism"))
|
||||
|
||||
# User parameters
|
||||
parameters.register_user("EDITOR_MODE", type="list", deflt="raw",
|
||||
label=ugettext_lazy("Editor mode"),
|
||||
values=[("raw", "raw"), ("gui", "simplified")],
|
||||
help=ugettext_lazy("Select the mode you want the editor to work in"))
|
||||
|
||||
def destroy(self):
|
||||
events.unregister("UserMenuDisplay", menu)
|
||||
parameters.unregister_app("sievefilters")
|
||||
parameters.unregister()
|
||||
|
||||
exts_pool.register_extension(SieveFilters)
|
||||
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
# coding: utf-8
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django import forms
|
||||
from sievelib.managesieve import SUPPORTED_AUTH_MECHS
|
||||
from modoboa.lib.parameters import AdminParametersForm, UserParametersForm
|
||||
from modoboa.lib.formutils import SeparatorField, YesNoField
|
||||
|
||||
|
||||
def supported_auth_mechs():
|
||||
values = [('AUTO', 'auto')]
|
||||
for m in SUPPORTED_AUTH_MECHS:
|
||||
values += [(m, m.lower())]
|
||||
return values
|
||||
|
||||
|
||||
class ParametersForm(AdminParametersForm):
|
||||
app = "sievefilters"
|
||||
|
||||
sep1 = SeparatorField(label=_("ManageSieve settings"))
|
||||
|
||||
server = forms.CharField(
|
||||
label=_("Server address"),
|
||||
initial="127.0.0.1",
|
||||
help_text=_("Address of your MANAGESIEVE server")
|
||||
)
|
||||
|
||||
port = forms.IntegerField(
|
||||
label=_("Server port"),
|
||||
initial=2000,
|
||||
help_text=_("Listening port of your MANAGESIEVE server")
|
||||
)
|
||||
|
||||
starttls = YesNoField(
|
||||
label=_("Connect using STARTTLS"),
|
||||
initial="no",
|
||||
help_text=_("Use the STARTTLS extension")
|
||||
)
|
||||
|
||||
authentication_mech = forms.ChoiceField(
|
||||
label=_("Authentication mechanism"),
|
||||
choices=supported_auth_mechs(),
|
||||
initial="auto",
|
||||
help_text=_("Prefered authentication mechanism")
|
||||
)
|
||||
|
||||
|
||||
class UserSettings(UserParametersForm):
|
||||
app = "sievefilters"
|
||||
|
||||
editor_mode = forms.ChoiceField(
|
||||
initial="raw",
|
||||
label=_("Editor mode"),
|
||||
choices=[("raw", "raw"), ("gui", "simplified")],
|
||||
help_text=_("Select the mode you want the editor to work in")
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def has_access(user):
|
||||
return user.has_mailbox
|
||||
@@ -12,6 +12,7 @@ from django.utils.translation import ugettext as _, ugettext_lazy
|
||||
from modoboa.lib import events, parameters
|
||||
from modoboa.extensions import ModoExtension, exts_pool
|
||||
|
||||
|
||||
class Stats(ModoExtension):
|
||||
name = "stats"
|
||||
label = "Statistics"
|
||||
@@ -20,32 +21,26 @@ class Stats(ModoExtension):
|
||||
needs_media = True
|
||||
|
||||
def load(self):
|
||||
from app_settings import ParametersForm
|
||||
events.registerEvent("GetGraphSets")
|
||||
|
||||
parameters.register_admin("LOGFILE", type="string",
|
||||
deflt="/var/log/mail.log",
|
||||
help=ugettext_lazy("Path to log file used to collect statistics"))
|
||||
parameters.register_admin("RRD_ROOTDIR", type="string",
|
||||
deflt="/tmp/modoboa",
|
||||
help=ugettext_lazy("Path to directory where RRD files are stored"))
|
||||
parameters.register_admin("IMG_ROOTDIR", type="string",
|
||||
deflt="/tmp/modoboa",
|
||||
help=ugettext_lazy("Path to directory where PNG files are stored"))
|
||||
parameters.register(ParametersForm, ugettext_lazy("Graphical statistics"))
|
||||
|
||||
def destroy(self):
|
||||
events.unregister("AdminMenuDisplay", menu)
|
||||
|
||||
exts_pool.register_extension(Stats)
|
||||
|
||||
|
||||
@events.observe("UserMenuDisplay")
|
||||
def menu(target, user):
|
||||
if target != "top_menu" or user.group == "SimpleUsers":
|
||||
return []
|
||||
return [
|
||||
{"name" : "stats",
|
||||
"label" : _("Statistics"),
|
||||
"url" : reverse('fullindex')}
|
||||
]
|
||||
{"name": "stats",
|
||||
"label": _("Statistics"),
|
||||
"url": reverse('fullindex')}
|
||||
]
|
||||
|
||||
|
||||
@events.observe("GetGraphSets")
|
||||
def get_default_graph_sets():
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
# coding: utf-8
|
||||
from django.utils.translation import ugettext_lazy
|
||||
from django import forms
|
||||
from modoboa.lib.parameters import AdminParametersForm
|
||||
|
||||
|
||||
class ParametersForm(AdminParametersForm):
|
||||
app = "stats"
|
||||
|
||||
logfile = forms.CharField(
|
||||
label=ugettext_lazy("Path to the log file"),
|
||||
initial="/var/log/mail.log",
|
||||
help_text=ugettext_lazy("Path to log file used to collect statistics")
|
||||
)
|
||||
|
||||
rrd_rootdir = forms.CharField(
|
||||
label=ugettext_lazy("Directory to store RRD files"),
|
||||
initial="/tmp/modoboa",
|
||||
help_text=ugettext_lazy("Path to directory where RRD files are stored")
|
||||
)
|
||||
|
||||
img_rootdir = forms.CharField(
|
||||
label=ugettext_lazy("Directory to store PNG files"),
|
||||
initial="/tmp/modoboa",
|
||||
help_text=ugettext_lazy("Path to directory where PNG files are stored")
|
||||
)
|
||||
@@ -4,6 +4,7 @@ from django.core.urlresolvers import reverse
|
||||
from modoboa.lib import events, parameters
|
||||
from modoboa.extensions import ModoExtension, exts_pool
|
||||
|
||||
|
||||
class Webmail(ModoExtension):
|
||||
name = "webmail"
|
||||
label = "Webmail"
|
||||
@@ -12,67 +13,14 @@ class Webmail(ModoExtension):
|
||||
needs_media = True
|
||||
|
||||
def load(self):
|
||||
parameters.register_app(uparams_opts=dict(needs_mailbox=True))
|
||||
from app_settings import ParametersForm, UserSettings
|
||||
|
||||
parameters.register_admin("IMAP_SERVER", type="string",
|
||||
deflt="127.0.0.1",
|
||||
help=ugettext_lazy("Address of your IMAP server"))
|
||||
parameters.register_admin("IMAP_SECURED", type="list_yesno",
|
||||
deflt="no",
|
||||
help=ugettext_lazy("Use a secured connection to access IMAP server"))
|
||||
parameters.register_admin("IMAP_PORT", type="int", deflt="143",
|
||||
help=ugettext_lazy("Listening port of your IMAP server"))
|
||||
parameters.register_admin("SMTP_SERVER", type="string",
|
||||
deflt="127.0.0.1",
|
||||
help=ugettext_lazy("Address of your SMTP server"))
|
||||
parameters.register_admin("SMTP_SECURED_MODE", type="list",
|
||||
values=[("none", ugettext_lazy("None")),
|
||||
("starttls", "STARTTLS"),
|
||||
("ssl", "SSL/TLS")],
|
||||
deflt="none",
|
||||
help=ugettext_lazy("Use a secured connection to access SMTP server"))
|
||||
parameters.register_admin("SMTP_PORT", type="int", deflt="25",
|
||||
help=ugettext_lazy("Listening port of your SMTP server"))
|
||||
parameters.register_admin("SMTP_AUTHENTICATION", type="list_yesno",
|
||||
deflt="no",
|
||||
help=ugettext_lazy("Server needs authentication"))
|
||||
parameters.register_admin("MAX_ATTACHMENT_SIZE", type="int", deflt=2048,
|
||||
help=ugettext_lazy("Maximum attachment size in bytes (or KB, MB, GB if specified)"))
|
||||
|
||||
parameters.register_user("MESSAGES_PER_PAGE", type="int", deflt=40,
|
||||
label=ugettext_lazy("Number of displayed emails per page"),
|
||||
help=ugettext_lazy("Sets the maximum number of messages displayed in a page"))
|
||||
parameters.register_user("REFRESH_INTERVAL", type="int", deflt=300,
|
||||
label=ugettext_lazy("Listing refresh rate"),
|
||||
help=ugettext_lazy("Automatic folder refresh rate (in seconds)"))
|
||||
parameters.register_user("TRASH_FOLDER", type="string", deflt="Trash",
|
||||
label=ugettext_lazy("Trash folder"),
|
||||
help=ugettext_lazy("Folder where deleted messages go"))
|
||||
parameters.register_user("SENT_FOLDER", type="string", deflt="Sent",
|
||||
label=ugettext_lazy("Sent folder"),
|
||||
help=ugettext_lazy("Folder where copies of sent messages go"))
|
||||
parameters.register_user("DRAFTS_FOLDER", type="string", deflt="Drafts",
|
||||
label=ugettext_lazy("Drafts folder"),
|
||||
help=ugettext_lazy("Folder where drafts go"))
|
||||
parameters.register_user("SIGNATURE", type="text", deflt="",
|
||||
label=ugettext_lazy("Signature text"),
|
||||
help=ugettext_lazy("User defined email signature"))
|
||||
parameters.register_user("EDITOR", type="list", deflt="plain",
|
||||
label=ugettext_lazy("Default editor"),
|
||||
values=[("html", "html"), ("plain", "text")],
|
||||
help=ugettext_lazy("The default editor to use when composing a message"))
|
||||
parameters.register_user("DISPLAYMODE", type="list", deflt="plain",
|
||||
label=ugettext_lazy("Default message display mode"),
|
||||
values=[("html", "html"), ("plain", "text")],
|
||||
help=ugettext_lazy("The default mode used when displaying a message"))
|
||||
parameters.register_user("ENABLE_LINKS", type="list_yesno", deflt="no",
|
||||
label=ugettext_lazy("Enable HTML links display"),
|
||||
visible_if="DISPLAYMODE=html",
|
||||
help=ugettext_lazy("Enable/Disable HTML links display"))
|
||||
parameters.register(ParametersForm, "Webmail")
|
||||
parameters.register(UserSettings, "Webmail")
|
||||
|
||||
def destroy(self):
|
||||
events.unregister("UserMenuDisplay", menu)
|
||||
parameters.unregister_app("webmail")
|
||||
parameters.unregister()
|
||||
|
||||
exts_pool.register_extension(Webmail)
|
||||
|
||||
|
||||
@@ -0,0 +1,141 @@
|
||||
# coding: utf-8
|
||||
from django import forms
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from modoboa.lib.parameters import AdminParametersForm, UserParametersForm
|
||||
from modoboa.lib.formutils import SeparatorField, YesNoField
|
||||
|
||||
|
||||
class ParametersForm(AdminParametersForm):
|
||||
app = "webmail"
|
||||
|
||||
sep3 = SeparatorField(label=_("General"))
|
||||
|
||||
max_attachment_size = forms.CharField(
|
||||
label=_("Maximum attachment size"),
|
||||
initial="2048",
|
||||
help_text=_("Maximum attachment size in bytes (or KB, MB, GB if specified)")
|
||||
)
|
||||
|
||||
sep1 = SeparatorField(label=_("IMAP settings"))
|
||||
|
||||
imap_server = forms.CharField(
|
||||
label=_("Server address"),
|
||||
initial="127.0.0.1",
|
||||
help_text=_("Address of your IMAP server")
|
||||
)
|
||||
|
||||
imap_secured = YesNoField(
|
||||
label=_("Use a secured connection"),
|
||||
initial="no",
|
||||
help_text=_("Use a secured connection to access IMAP server")
|
||||
)
|
||||
|
||||
imap_port = forms.IntegerField(
|
||||
label=_("Server port"),
|
||||
initial=143,
|
||||
help_text=_("Listening port of your IMAP server")
|
||||
)
|
||||
|
||||
sep2 = SeparatorField(label=_("SMTP settings"))
|
||||
|
||||
smtp_server = forms.CharField(
|
||||
label=_("Server address"),
|
||||
initial="127.0.0.1",
|
||||
help_text=_("Address of your SMTP server")
|
||||
)
|
||||
|
||||
smtp_secured_mode = forms.ChoiceField(
|
||||
label=_("Secured connection mode"),
|
||||
choices=[("none", _("None")),
|
||||
("starttls", "STARTTLS"),
|
||||
("ssl", "SSL/TLS")],
|
||||
initial="none",
|
||||
help_text=_("Use a secured connection to access SMTP server")
|
||||
)
|
||||
|
||||
smtp_port = forms.IntegerField(
|
||||
label=_("Server port"),
|
||||
initial=25,
|
||||
help_text=_("Listening port of your SMTP server")
|
||||
)
|
||||
|
||||
smtp_authentication = YesNoField(
|
||||
label=_("Authentication required"),
|
||||
initial="no",
|
||||
help_text=_("Server needs authentication")
|
||||
)
|
||||
|
||||
|
||||
class UserSettings(UserParametersForm):
|
||||
app = "webmail"
|
||||
|
||||
sep1 = SeparatorField(label=_("Display"))
|
||||
|
||||
displaymode = forms.ChoiceField(
|
||||
initial="plain",
|
||||
label=_("Default message display mode"),
|
||||
choices=[("html", "html"), ("plain", "text")],
|
||||
help_text=_("The default mode used when displaying a message")
|
||||
)
|
||||
|
||||
enable_links = YesNoField(
|
||||
initial="no",
|
||||
label=_("Enable HTML links display"),
|
||||
help_text=_("Enable/Disable HTML links display")
|
||||
)
|
||||
|
||||
messages_per_page = forms.IntegerField(
|
||||
initial=40,
|
||||
label=_("Number of displayed emails per page"),
|
||||
help_text=_("Sets the maximum number of messages displayed in a page")
|
||||
)
|
||||
|
||||
refresh_interval = forms.IntegerField(
|
||||
initial=300,
|
||||
label=_("Listing refresh rate"),
|
||||
help_text=_("Automatic folder refresh rate (in seconds)")
|
||||
)
|
||||
|
||||
sep2 = SeparatorField(label=_("Mailboxes"))
|
||||
|
||||
trash_folder = forms.CharField(
|
||||
initial="Trash",
|
||||
label=_("Trash folder"),
|
||||
help_text=_("Folder where deleted messages go")
|
||||
)
|
||||
|
||||
sent_folder = forms.CharField(
|
||||
initial="Sent",
|
||||
label=_("Sent folder"),
|
||||
help_text=_("Folder where copies of sent messages go")
|
||||
)
|
||||
|
||||
drafts_folder = forms.CharField(
|
||||
initial="Drafts",
|
||||
label=_("Drafts folder"),
|
||||
help_text=_("Folder where drafts go")
|
||||
)
|
||||
|
||||
sep3 = SeparatorField(label=_("Composing messages"))
|
||||
|
||||
editor = forms.ChoiceField(
|
||||
initial="plain",
|
||||
label=_("Default editor"),
|
||||
choices=[("html", "html"), ("plain", "text")],
|
||||
help_text=_("The default editor to use when composing a message")
|
||||
)
|
||||
|
||||
signature = forms.CharField(
|
||||
initial="",
|
||||
label=_("Signature text"),
|
||||
help_text=_("User defined email signature"),
|
||||
widget=forms.widgets.Textarea,
|
||||
required=False
|
||||
)
|
||||
|
||||
def visibility_enable_links(self):
|
||||
return "displaymode=html"
|
||||
|
||||
@staticmethod
|
||||
def has_access(user):
|
||||
return user.has_mailbox
|
||||
@@ -2,6 +2,7 @@
|
||||
from django import forms
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
|
||||
class ComposeMailForm(forms.Form):
|
||||
from_ = forms.CharField(label=_("From"))
|
||||
to = forms.CharField(label=_("To"))
|
||||
|
||||
@@ -554,7 +554,7 @@ class IMAPconnector(object):
|
||||
return
|
||||
|
||||
quotadef = data[1][0]
|
||||
m = re.match("[^\s]+ \(STORAGE (\d+) (\d+)\)", quotadef)
|
||||
m = re.search("\(STORAGE (\d+) (\d+)\)", quotadef)
|
||||
if not m:
|
||||
print "Problem while parsing quota def"
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user