added multi-domain support
error checking after config loading fixed language selection behaviour removed obsolete ui_set directories
This commit is contained in:
parent
4b78064a81
commit
3958224115
32
INSTALL
32
INSTALL
|
@ -9,10 +9,11 @@ OVERVIEW:
|
||||||
3 - configuration file
|
3 - configuration file
|
||||||
4 - create a suid cgi wrapper
|
4 - create a suid cgi wrapper
|
||||||
5 - [optional] configure access control (http authentication)
|
5 - [optional] configure access control (http authentication)
|
||||||
6 - css stylesheet file
|
6 - [optional] configure multi domain support
|
||||||
7 - final test
|
7 - css stylesheet file
|
||||||
8 - troubleshooting
|
8 - final test
|
||||||
9 - report problems
|
9 - troubleshooting
|
||||||
|
10 - report problems
|
||||||
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
@ -123,14 +124,29 @@ OVERVIEW:
|
||||||
Again, see the ApacheWeek article for details.
|
Again, see the ApacheWeek article for details.
|
||||||
|
|
||||||
|
|
||||||
6. Copy the stylesheet file (/usr/local/share/ezmlm-web/css/default.css)
|
6. You may skip this step if you manage only one directory containing mailing
|
||||||
|
lists. For more than one domain or multiple user directories you should
|
||||||
|
follow the instructions below. BEWARE: this is an advanced setting.
|
||||||
|
|
||||||
|
1) copy examples/multidomain.conf.dist to /etc/ezmlm-web/multidomain.conf
|
||||||
|
2) add your mailing list parent directories to this file
|
||||||
|
3) uncomment the respective line in your ezmlmwebrc file
|
||||||
|
|
||||||
|
The web interface should now show a "Change domain" link in the navigation
|
||||||
|
bar to the left.
|
||||||
|
|
||||||
|
Direct links to a specifc domain use the following format:
|
||||||
|
http://BASE_URL/ezmlm-web?domain=foo
|
||||||
|
|
||||||
|
|
||||||
|
7. Copy the stylesheet file (/usr/local/share/ezmlm-web/css/default.css)
|
||||||
to a location of your choice. It has to be accessible by an URL - maybe
|
to a location of your choice. It has to be accessible by an URL - maybe
|
||||||
a place like "/var/www/ezmlm-web.css" could be appropriate.
|
a place like "/var/www/ezmlm-web.css" could be appropriate.
|
||||||
Now you may have to change the "HTML_CSS_FILE" setting in your
|
Now you may have to change the "HTML_CSS_FILE" setting in your
|
||||||
ezmlmwebrc file. This value is a URL - not the local filename.
|
ezmlmwebrc file. This value is a URL - not the local filename.
|
||||||
|
|
||||||
|
|
||||||
7. Test the installation with your favourite web browser. You should be
|
8. Test the installation with your favourite web browser. You should be
|
||||||
asked for a username and password (supplied in 6.2) and then be presented
|
asked for a username and password (supplied in 6.2) and then be presented
|
||||||
with a screen entitled "EZ Mailing List Manger". You can then try to
|
with a screen entitled "EZ Mailing List Manger". You can then try to
|
||||||
create and edit mailing lists ... Have Fun :)
|
create and edit mailing lists ... Have Fun :)
|
||||||
|
@ -139,11 +155,11 @@ OVERVIEW:
|
||||||
option correctly in ezmlmwebrc. Check it again.
|
option correctly in ezmlmwebrc. Check it again.
|
||||||
|
|
||||||
|
|
||||||
8. If anything failes - take a look at the web server's error log
|
9. If anything failes - take a look at the web server's error log
|
||||||
(e.g. /var/log/apache/error.log).
|
(e.g. /var/log/apache/error.log).
|
||||||
|
|
||||||
|
|
||||||
9. If the error log of your web server did not help you to solve your problem:
|
10. If the error log of your web server did not help you to solve your problem:
|
||||||
- take a look at https://systemausfall.org/toolforge/ezmlm-web
|
- take a look at https://systemausfall.org/toolforge/ezmlm-web
|
||||||
- send me an email: ezmlm-web@sumpfralle.de
|
- send me an email: ezmlm-web@sumpfralle.de
|
||||||
- subscribe to the mailinglist: ezmlm-web-subscribe@lists.systemausfall.org
|
- subscribe to the mailinglist: ezmlm-web-subscribe@lists.systemausfall.org
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
Version 3.2 - 04/14/02006
|
Version 3.2 - 04/14/02006
|
||||||
* support for encrypted mailing lists
|
* support for encrypted mailing lists
|
||||||
(https://systemausfall.org/toolforge/gpgpy-ezmlm/)
|
(https://systemausfall.org/toolforge/gpgpy-ezmlm/)
|
||||||
|
* support for multi-domain setups
|
||||||
* detect preferred interface language
|
* detect preferred interface language
|
||||||
* user-specific interface language selection
|
* user-specific interface language selection
|
||||||
* handling of empty settings for ezmlm-idx 5.0 fixed (closes #21)
|
* handling of empty settings for ezmlm-idx 5.0 fixed (closes #21)
|
||||||
* script for creating binary suid wrappers added
|
* script for creating binary suid wrappers added
|
||||||
* bug in MySQL support fixed
|
* bug in MySQL support fixed
|
||||||
* treatment of the special character "dot" in listname and list address fixed
|
* handling of the special character "dot" in listname and list address fixed
|
||||||
* the formerly required module "Encode" is now optional
|
* the formerly required module "Encode" is now optional
|
||||||
* support for listing of subscription log
|
* support for listing of subscription log
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,17 @@
|
||||||
# BEWARE: the (resulting) path MUST be absolute (starting with a slash)!
|
# BEWARE: the (resulting) path MUST be absolute (starting with a slash)!
|
||||||
$LIST_DIR = "$HOME_DIR/lists";
|
$LIST_DIR = "$HOME_DIR/lists";
|
||||||
|
|
||||||
|
# Multi-Domain-Support
|
||||||
|
# This is a quite advanced setting for special installations.
|
||||||
|
# Most people should just ignore it.
|
||||||
|
# Anyway - if you want to control more than one directory containing
|
||||||
|
# different lists, then you should:
|
||||||
|
# 1) copy examples/multidomain.conf.dist to /etc/ezmlm-web/multidomain.conf
|
||||||
|
# 2) adjust /etc/ezmlm-web/multidomain.conf to your setup
|
||||||
|
# 3) uncomment the following line
|
||||||
|
# 4) make sure that your multi domain settings are not overriden below
|
||||||
|
#warn "multidomain.conf failed" unless (defined do "/etc/ezmlm-web/multidomain.conf");
|
||||||
|
|
||||||
# Where do we store the dotqmail files of this user?
|
# Where do we store the dotqmail files of this user?
|
||||||
# (defaults to the home directory of the executing user)
|
# (defaults to the home directory of the executing user)
|
||||||
# You will have to change this value, if you use a multi domain
|
# You will have to change this value, if you use a multi domain
|
||||||
|
|
55
examples/multidomain.conf.dist
Normal file
55
examples/multidomain.conf.dist
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
# This is a configuration file for ezmlm-web setups with more than one
|
||||||
|
# mailing list directory.
|
||||||
|
#
|
||||||
|
# If you want to use multi-domain support, then you should somehow know
|
||||||
|
# what you are doing. You have been warned! ;)
|
||||||
|
#
|
||||||
|
# Usually you just need to adjust the $DOMAIN setting below.
|
||||||
|
# Use the existing example as a template.
|
||||||
|
#
|
||||||
|
# If your setup is a little bit more exotic, then you can change the code, too.
|
||||||
|
# In the end, the setting $LIST_DIR should either be an empty string or
|
||||||
|
# the path of a mailing list directory. You may also want to take care for the
|
||||||
|
# $DOTQMAIL_DIR and $MAILDOMAIN settings.
|
||||||
|
#
|
||||||
|
# BEWARE: you may not define new variables as - otherwise they could collide
|
||||||
|
# with the names of variables of the ezmlm-web program.
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
# we do not want to spoil our namespace - but we need CGI input
|
||||||
|
use CGI ();
|
||||||
|
$CURRENT_DOMAIN = new CGI->param('domain');
|
||||||
|
};
|
||||||
|
|
||||||
|
# domain names may not contain any special characters
|
||||||
|
# you must define at least "name" and "list_dir" for each domain
|
||||||
|
%DOMAINS = (
|
||||||
|
foo => {
|
||||||
|
name => "Example Domain Foo",
|
||||||
|
list_dir => "/data/lists/foo",
|
||||||
|
dot_dir => "/data/lists/foo",
|
||||||
|
mail_domain => "lists.foo.org",
|
||||||
|
},
|
||||||
|
bar => {
|
||||||
|
name => "Example Domain Bar",
|
||||||
|
list_dir => "/data/lists/bar",
|
||||||
|
dot_dir => "/data/lists/bar",
|
||||||
|
mail_domain => "lists.bar.org",
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
# this simple code defines $LIST_DIR and $DOTQMAILDIR in a sane way
|
||||||
|
if (defined($CURRENT_DOMAIN) && defined($DOMAINS{$CURRENT_DOMAIN})) {
|
||||||
|
$LIST_DIR = $DOMAINS{$CURRENT_DOMAIN}{'list_dir'}
|
||||||
|
if (defined $DOMAINS{$CURRENT_DOMAIN}{'list_dir'});
|
||||||
|
$DOTQMAIL_DIR = $DOMAINS{$CURRENT_DOMAIN}{'dot_dir'}
|
||||||
|
if (defined $DOMAINS{$CURRENT_DOMAIN}{'dot_dir'});
|
||||||
|
$MAIL_DOMAIN = $DOMAINS{$CURRENT_DOMAIN}{'mail_domain'}
|
||||||
|
if (defined $DOMAINS{$CURRENT_DOMAIN}{'mail_domain'});
|
||||||
|
} else {
|
||||||
|
$LIST_DIR = '';
|
||||||
|
}
|
||||||
|
|
|
@ -22,7 +22,8 @@ use CGI;
|
||||||
use IO::File;
|
use IO::File;
|
||||||
use POSIX;
|
use POSIX;
|
||||||
use English;
|
use English;
|
||||||
use Time::localtime;
|
# TODO: uncomment it later
|
||||||
|
use Time::localtime ();
|
||||||
|
|
||||||
# gettext support is optional
|
# gettext support is optional
|
||||||
my $GETTEXT_SUPPORT = 1;
|
my $GETTEXT_SUPPORT = 1;
|
||||||
|
@ -79,6 +80,8 @@ use vars qw[$HTML_CSS_FILE $TEMPLATE_DIR $LANGUAGE_DIR $HTML_LANGUAGE];
|
||||||
use vars qw[$DEFAULT_HOST];
|
use vars qw[$DEFAULT_HOST];
|
||||||
# some settings for encrypted mailing lists
|
# some settings for encrypted mailing lists
|
||||||
use vars qw[$GPG_SUPPORT];
|
use vars qw[$GPG_SUPPORT];
|
||||||
|
# settings for multi-domain setups
|
||||||
|
use vars qw[%DOMAINS $CURRENT_DOMAIN];
|
||||||
|
|
||||||
# some deprecated configuration settings - they have to be announced
|
# some deprecated configuration settings - they have to be announced
|
||||||
# otherwise old configuration files would break
|
# otherwise old configuration files would break
|
||||||
|
@ -106,7 +109,15 @@ if (defined($opt_C)) {
|
||||||
} else {
|
} else {
|
||||||
&fatal_error("Unable to find config file");
|
&fatal_error("Unable to find config file");
|
||||||
}
|
}
|
||||||
do $config_file;
|
unless (my $return = do $config_file) {
|
||||||
|
if ($@) {
|
||||||
|
&fatal_error("Failed to parse the config file ($config_file): $@");
|
||||||
|
} elsif (!defined $return) {
|
||||||
|
&fatal_error("Failed to read the config file ($config_file): $!");
|
||||||
|
} else {
|
||||||
|
# the last statement of the config file return False -> this is ok
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
####### validate configuration and apply some default settings ##########
|
####### validate configuration and apply some default settings ##########
|
||||||
|
@ -162,8 +173,13 @@ my $action = $q->param('action');
|
||||||
# This is where we decide what to do, depending on the form state and the
|
# This is where we decide what to do, depending on the form state and the
|
||||||
# users chosen course of action ...
|
# users chosen course of action ...
|
||||||
# TODO: unify all these "is list param set?" checks ...
|
# TODO: unify all these "is list param set?" checks ...
|
||||||
# check permissions
|
if (%DOMAINS && (!defined($CURRENT_DOMAIN) || ($CURRENT_DOMAIN eq '')
|
||||||
unless (&check_permission_for_action()) {
|
|| ($action eq 'domain_select'))) {
|
||||||
|
# domain support is enabled, but no domain is selected
|
||||||
|
$pagename = 'domain_select';
|
||||||
|
# undef the currently selected domain
|
||||||
|
undef $CURRENT_DOMAIN;
|
||||||
|
} elsif (!&check_permission_for_action()) {
|
||||||
$pagename = 'list_select';
|
$pagename = 'list_select';
|
||||||
$error = 'Forbidden';
|
$error = 'Forbidden';
|
||||||
} elsif ($action eq '' || $action eq 'list_select') {
|
} elsif ($action eq '' || $action eq 'list_select') {
|
||||||
|
@ -423,6 +439,8 @@ unless (&check_permission_for_action()) {
|
||||||
# set default action, if there is no list available and the user is
|
# set default action, if there is no list available and the user is
|
||||||
# allowed to create a new one
|
# allowed to create a new one
|
||||||
if (((!defined($action)) || ($action eq ''))
|
if (((!defined($action)) || ($action eq ''))
|
||||||
|
&& ((%DOMAINS && defined($CURRENT_DOMAIN) and ($CURRENT_DOMAIN ne ''))
|
||||||
|
|| (!%DOMAINS))
|
||||||
&& (&webauth_create_allowed())
|
&& (&webauth_create_allowed())
|
||||||
&& ($pagedata->getValue('Data.Lists.0','') eq '')) {
|
&& ($pagedata->getValue('Data.Lists.0','') eq '')) {
|
||||||
$pagename = 'list_create';
|
$pagename = 'list_create';
|
||||||
|
@ -524,7 +542,7 @@ sub load_interface_language {
|
||||||
unless (&check_interface_language($HTML_LANGUAGE));
|
unless (&check_interface_language($HTML_LANGUAGE));
|
||||||
|
|
||||||
# first: load default language - in case some translations are incomplete
|
# first: load default language - in case some translations are incomplete
|
||||||
$data->readFile("$LANGUAGE_DIR/$HTML_LANGUAGE" . ".hdf");
|
$data->readFile("$LANGUAGE_DIR/$config_language" . ".hdf");
|
||||||
|
|
||||||
# check for preferred browser language, if the box was not initialized yet
|
# check for preferred browser language, if the box was not initialized yet
|
||||||
my $prefLang = &get_browser_language();
|
my $prefLang = &get_browser_language();
|
||||||
|
@ -583,10 +601,38 @@ sub get_browser_language {
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
sub set_pagedata_domains {
|
||||||
|
|
||||||
|
my ($domain_name);
|
||||||
|
|
||||||
|
# multi-domain setup?
|
||||||
|
if (defined($CURRENT_DOMAIN)) {
|
||||||
|
$pagedata->setValue("Config.UI.LinkAttrs.domain", $CURRENT_DOMAIN);
|
||||||
|
$pagedata->setValue("Data.CurrentDomain", $CURRENT_DOMAIN);
|
||||||
|
$pagedata->setValue("Data.CurrentDomain.Description",
|
||||||
|
$DOMAINS{$CURRENT_DOMAIN}{name});
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach $domain_name (keys %DOMAINS) {
|
||||||
|
$pagedata->setValue("Data.Domains.$domain_name",
|
||||||
|
$DOMAINS{$domain_name}{'name'});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
sub set_pagedata_list_of_lists {
|
sub set_pagedata_list_of_lists {
|
||||||
|
|
||||||
my (@files, $i, $num);
|
my (@files, $i, $num);
|
||||||
|
|
||||||
|
# for a multi-domain setup there are no lists available if no domain
|
||||||
|
# is selected
|
||||||
|
return (0==0) if (%DOMAINS &&
|
||||||
|
(!defined($CURRENT_DOMAIN) || ($CURRENT_DOMAIN eq '')));
|
||||||
|
|
||||||
|
# undefined $LIST_DIR?
|
||||||
|
return (0==0) if (!defined($LIST_DIR) || ($LIST_DIR eq ''));
|
||||||
|
|
||||||
# Read the list directory for mailing lists.
|
# Read the list directory for mailing lists.
|
||||||
return (0==0) unless (opendir DIR, $LIST_DIR);
|
return (0==0) unless (opendir DIR, $LIST_DIR);
|
||||||
|
|
||||||
|
@ -612,6 +658,9 @@ sub set_pagedata {
|
||||||
# read available list of lists
|
# read available list of lists
|
||||||
&set_pagedata_list_of_lists();
|
&set_pagedata_list_of_lists();
|
||||||
|
|
||||||
|
# multi domain support?
|
||||||
|
&set_pagedata_domains() if (%DOMAINS);
|
||||||
|
|
||||||
# username and hostname
|
# username and hostname
|
||||||
# Work out if this user has a virtual host and set input accordingly ...
|
# Work out if this user has a virtual host and set input accordingly ...
|
||||||
if (-e "$QMAIL_BASE/virtualdomains") {
|
if (-e "$QMAIL_BASE/virtualdomains") {
|
||||||
|
@ -2002,6 +2051,11 @@ sub webauth {
|
||||||
|
|
||||||
sub webauth_create_allowed {
|
sub webauth_create_allowed {
|
||||||
|
|
||||||
|
# for a multi-domain setup we disallow list creation until a domain
|
||||||
|
# is selected
|
||||||
|
return (1==0) if (%DOMAINS &&
|
||||||
|
(!defined($CURRENT_DOMAIN) || ($CURRENT_DOMAIN eq '')));
|
||||||
|
|
||||||
# Check if we were called with the deprecated argument "-c" (allow to create lists)
|
# Check if we were called with the deprecated argument "-c" (allow to create lists)
|
||||||
return (0==0) if (defined($opt_c));
|
return (0==0) if (defined($opt_c));
|
||||||
|
|
||||||
|
|
12
lang/de.hdf
12
lang/de.hdf
|
@ -26,7 +26,8 @@ Lang {
|
||||||
Properties = Eigenschaften von
|
Properties = Eigenschaften von
|
||||||
Language = Sprache
|
Language = Sprache
|
||||||
Help = Hilfe (extern)
|
Help = Hilfe (extern)
|
||||||
SubscribeLog = Subscriber's log
|
SubscribeLog = Einschreibungen
|
||||||
|
DomainSelect = Choose a domain
|
||||||
}
|
}
|
||||||
Title {
|
Title {
|
||||||
ConfigMain = Listeneinstellungen
|
ConfigMain = Listeneinstellungen
|
||||||
|
@ -46,12 +47,13 @@ Lang {
|
||||||
ListDelete = Liste löschen
|
ListDelete = Liste löschen
|
||||||
FileSelect = Auswählen eines Textbausteins
|
FileSelect = Auswählen eines Textbausteins
|
||||||
FileEdit = Bearbeitung des Textbausteins
|
FileEdit = Bearbeitung des Textbausteins
|
||||||
SubscribeLog = Subscription events
|
SubscribeLog = Einschreibungsereignisse
|
||||||
GnupgConvert = Verschlüsselung
|
GnupgConvert = Verschlüsselung
|
||||||
GnupgPublic = Öffentliche Schlüssel
|
GnupgPublic = Öffentliche Schlüssel
|
||||||
GnupgSecret = Private Schlüssel
|
GnupgSecret = Private Schlüssel
|
||||||
GnupgGenerate = Erzeugen eines Schlüssels
|
GnupgGenerate = Erzeugen eines Schlüssels
|
||||||
GnupgOptions = Verschlüsselungseinstellungen
|
GnupgOptions = Verschlüsselungseinstellungen
|
||||||
|
DomainSelect = Choose a domain
|
||||||
}
|
}
|
||||||
Buttons {
|
Buttons {
|
||||||
Create = Erzeuge die Liste
|
Create = Erzeuge die Liste
|
||||||
|
@ -112,7 +114,7 @@ Lang {
|
||||||
RequiresIDX5 = Diese Aktion erfordert ezmlm-idx in der Version 5.0
|
RequiresIDX5 = Diese Aktion erfordert ezmlm-idx in der Version 5.0
|
||||||
ResetFileIsDefault = Dieser Textbaustein ist keine angepasste Variante und kann somit nicht zurückgesetzt werden.
|
ResetFileIsDefault = Dieser Textbaustein ist keine angepasste Variante und kann somit nicht zurückgesetzt werden.
|
||||||
ResetFile = Der angepasste Textbaustein konnte nicht entfernt werden.
|
ResetFile = Der angepasste Textbaustein konnte nicht entfernt werden.
|
||||||
LogFile = Reading of log file failed.
|
LogFile = Das Lesen der Protokoll-Datei schlug fehl.
|
||||||
GnupgNoKeyFile = Es wurde keine Datei zum Hochladen ausgewählt!
|
GnupgNoKeyFile = Es wurde keine Datei zum Hochladen ausgewählt!
|
||||||
GnupgDelKey = Mindestens ein Schlüssel konnte nicht gelöscht werden!
|
GnupgDelKey = Mindestens ein Schlüssel konnte nicht gelöscht werden!
|
||||||
GnupgNoKeySelected = Es wurde kein Schlüssel ausgewählt!
|
GnupgNoKeySelected = Es wurde kein Schlüssel ausgewählt!
|
||||||
|
@ -225,6 +227,7 @@ Lang {
|
||||||
GnupgKeySize = Schlüssellänge (in Bytes)
|
GnupgKeySize = Schlüssellänge (in Bytes)
|
||||||
GnupgKeyExpires = Verfallsdatum (in Jahren)
|
GnupgKeyExpires = Verfallsdatum (in Jahren)
|
||||||
Never = nie
|
Never = nie
|
||||||
|
NoDomainsAvailable = No domains are available.
|
||||||
}
|
}
|
||||||
Introduction {
|
Introduction {
|
||||||
ConfigAdmin = Fern-AdministratorInnen sind (per Voreinstellung) auch ModeratorInnen für die Einschreibung und für eingesandte Mails. Sie können berechtigt sein, per Mail Nutzer ein- und auszutragen, sowie Textbausteine zu verändern.
|
ConfigAdmin = Fern-AdministratorInnen sind (per Voreinstellung) auch ModeratorInnen für die Einschreibung und für eingesandte Mails. Sie können berechtigt sein, per Mail Nutzer ein- und auszutragen, sowie Textbausteine zu verändern.
|
||||||
|
@ -268,12 +271,13 @@ Lang {
|
||||||
TextFileReset = Auf die Vorgabe zurücksetzen
|
TextFileReset = Auf die Vorgabe zurücksetzen
|
||||||
TextFileInfo = Nützliche Platzhalter
|
TextFileInfo = Nützliche Platzhalter
|
||||||
AvailableLists = Verfügbare Listen
|
AvailableLists = Verfügbare Listen
|
||||||
SubscribeLog = Events
|
SubscribeLog = Ereignisse
|
||||||
GnupgConvert = Verschlüsselungsunterstützung
|
GnupgConvert = Verschlüsselungsunterstützung
|
||||||
GnupgPublicKeys = Öffentliche Schlüssel dieser Liste
|
GnupgPublicKeys = Öffentliche Schlüssel dieser Liste
|
||||||
GnupgSecretKeys = Private Schlüssel dieser Liste
|
GnupgSecretKeys = Private Schlüssel dieser Liste
|
||||||
GnupgKeyImport = Schlüssel importieren
|
GnupgKeyImport = Schlüssel importieren
|
||||||
GnupgGenerateKey = Schlüssel der Liste erzeugen
|
GnupgGenerateKey = Schlüssel der Liste erzeugen
|
||||||
GnupgOptions = Verschlüsselungseinstellungen
|
GnupgOptions = Verschlüsselungseinstellungen
|
||||||
|
AvailableDomains = Available domains
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,7 @@ Lang {
|
||||||
Language = Language
|
Language = Language
|
||||||
Help = Help (external)
|
Help = Help (external)
|
||||||
SubscribeLog = Subscriber's log
|
SubscribeLog = Subscriber's log
|
||||||
|
DomainSelect = Choose a domain
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -56,6 +57,7 @@ Lang {
|
||||||
GnupgSecret = Secret keys
|
GnupgSecret = Secret keys
|
||||||
GnupgGenerate = Generate a new keypair
|
GnupgGenerate = Generate a new keypair
|
||||||
GnupgOptions = Encryption settings
|
GnupgOptions = Encryption settings
|
||||||
|
DomainSelect = Choose a domain
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -242,6 +244,7 @@ Lang {
|
||||||
GnupgKeySize = Length of the key (bytes)
|
GnupgKeySize = Length of the key (bytes)
|
||||||
GnupgKeyExpires = Expiration time (years)
|
GnupgKeyExpires = Expiration time (years)
|
||||||
Never = never
|
Never = never
|
||||||
|
NoDomainsAvailable = No domains are available.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -295,5 +298,7 @@ Lang {
|
||||||
GnupgKeyImport = Import a key
|
GnupgKeyImport = Import a key
|
||||||
GnupgGenerateKey = Generate the key for this list
|
GnupgGenerateKey = Generate the key for this list
|
||||||
GnupgOptions = Encryption settings
|
GnupgOptions = Encryption settings
|
||||||
|
AvailableDomains = Available domains
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
22
template/domain_select.cs
Normal file
22
template/domain_select.cs
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<div class="title">
|
||||||
|
<h1><?cs var:html_escape(Lang.Title.DomainSelect) ?></h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<fieldset>
|
||||||
|
<legend>
|
||||||
|
<?cs var:html_escape(Lang.Legend.AvailableDomains) ?>
|
||||||
|
</legend>
|
||||||
|
|
||||||
|
<?cs if:subcount(Data.Domains) > 0 ?>
|
||||||
|
<ul>
|
||||||
|
<?cs each:domain = Data.Domains
|
||||||
|
?><li><a href="<?cs call:link('domain',name(domain),'','','','')
|
||||||
|
?>"><?cs var:html_escape(domain) ?></a></li>
|
||||||
|
<?cs /each ?>
|
||||||
|
</ul>
|
||||||
|
<?cs else ?>
|
||||||
|
<p><?cs var:html_escape(Lang.Misc.NoDomainsAvailable) ?></p>
|
||||||
|
<?cs /if ?>
|
||||||
|
|
||||||
|
</fieldset>
|
||||||
|
|
|
@ -4,10 +4,11 @@
|
||||||
<form class="select" method="post" action="<?cs call:link("","","","","","") ?>" enctype="application/x-www-form-urlencoded">
|
<form class="select" method="post" action="<?cs call:link("","","","","","") ?>" enctype="application/x-www-form-urlencoded">
|
||||||
|
|
||||||
<?cs if:Data.List.Name ?><input type="hidden" name="list" value="<?cs
|
<?cs if:Data.List.Name ?><input type="hidden" name="list" value="<?cs
|
||||||
var:Data.List.Name ?>" /><?cs /if ?>
|
var:Data.List.Name ?>" />
|
||||||
|
<input type="hidden" name="action" value="subscribers" /><?cs /if ?>
|
||||||
|
<?cs if:Data.CurrentDomain ?><input type="hidden" name="domain" value="<?cs
|
||||||
|
var:Data.CurrentDomain ?>" /><?cs /if ?>
|
||||||
|
|
||||||
<input type="hidden" name="action" value="show_page" />
|
|
||||||
<input type="hidden" name="pagename" value="<?cs var:Data.Action ?>" />
|
|
||||||
<font class="no_link"><?cs
|
<font class="no_link"><?cs
|
||||||
var:html_escape(Lang.Menue.Language) ?>:</font><br/>
|
var:html_escape(Lang.Menue.Language) ?>:</font><br/>
|
||||||
<select name="web_lang" size="0">
|
<select name="web_lang" size="0">
|
||||||
|
|
|
@ -7,8 +7,11 @@
|
||||||
|
|
||||||
<?cs include:TemplateDir + '/nav.cs' ?>
|
<?cs include:TemplateDir + '/nav.cs' ?>
|
||||||
<div id="main_content">
|
<div id="main_content">
|
||||||
<?cs if:Data.List.Name ?><div id="info_title"><?cs var:Data.List.Name ?> - <?cs
|
<?cs if:Data.List.Name ?><div id="info_title"><?cs
|
||||||
var:Data.List.Address ?></div><?cs /if ?>
|
if:Data.CurrentDomain ?><?cs
|
||||||
|
var:html_escape(Data.CurrentDomain.Description) ?> - <?cs /if
|
||||||
|
?><?cs var:html_escape(Data.List.Name) ?> - <?cs
|
||||||
|
var:html_escape(Data.List.Address) ?></div><?cs /if ?>
|
||||||
<?cs if:Data.Error ?><?cs call:error(Lang.ErrorMessage[Data.Error]) ?><?cs /if ?>
|
<?cs if:Data.Error ?><?cs call:error(Lang.ErrorMessage[Data.Error]) ?><?cs /if ?>
|
||||||
<?cs if:Data.customError ?><?cs call:error(Data.customError) ?><?cs /if ?>
|
<?cs if:Data.customError ?><?cs call:error(Data.customError) ?><?cs /if ?>
|
||||||
<?cs if:Data.Warning ?><?cs call:warning(Lang.WarningMessage[Data.Warning]) ?><?cs /if ?>
|
<?cs if:Data.Warning ?><?cs call:warning(Lang.WarningMessage[Data.Warning]) ?><?cs /if ?>
|
||||||
|
|
|
@ -1,8 +1,16 @@
|
||||||
<!-- $Id$ -->
|
<!-- $Id$ -->
|
||||||
|
|
||||||
<div id="nav_bar">
|
<div id="nav_bar">
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<?cs if:(subcount(Data.Lists) > 0) && (UI.Navigation.ListSelect == 1) ?>
|
<?cs if:(subcount(Data.Domains) > 0) && (UI.Navigation.DomainSelect == 1) ?>
|
||||||
|
<li><a <?cs if:(Data.Action == "domain_select") ?> class="nav_active"<?cs /if ?>
|
||||||
|
href="<?cs call:link('action','domain_select','','','','') ?>"
|
||||||
|
title="<?cs var:html_escape(Lang.Menue.DomainSelect) ?>"><?cs
|
||||||
|
var:html_escape(Lang.Menue.DomainSelect) ?></a>
|
||||||
|
</li>
|
||||||
|
<?cs /if ?>
|
||||||
|
<?cs if:(subcount(Data.Lists) > 0) && (UI.Navigation.ListSelect == 1) ?>
|
||||||
<li><a <?cs if:(Data.Action == "list_select") ?> class="nav_active"<?cs /if ?>
|
<li><a <?cs if:(Data.Action == "list_select") ?> class="nav_active"<?cs /if ?>
|
||||||
href="<?cs call:link("action","list_select","","","","") ?>"
|
href="<?cs call:link("action","list_select","","","","") ?>"
|
||||||
title="<?cs var:html_escape(Lang.Menue.ListSelect) ?>"><?cs var:html_escape(Lang.Menue.ListSelect) ?></a>
|
title="<?cs var:html_escape(Lang.Menue.ListSelect) ?>"><?cs var:html_escape(Lang.Menue.ListSelect) ?></a>
|
||||||
|
|
|
@ -5,14 +5,18 @@
|
||||||
<fieldset class="form">
|
<fieldset class="form">
|
||||||
<legend><?cs var:html_escape(Lang.Legend.SubscribeLog) ?> </legend>
|
<legend><?cs var:html_escape(Lang.Legend.SubscribeLog) ?> </legend>
|
||||||
|
|
||||||
<table>
|
<?cs if:subcount(Data.List.SubscribeLog) > 0 ?>
|
||||||
<?cs each:x = Data.List.SubscribeLog ?>
|
<table>
|
||||||
<tr>
|
<?cs each:x = Data.List.SubscribeLog ?>
|
||||||
<td><?cs var:html_escape(x.address) ?></td>
|
<tr>
|
||||||
<td><?cs var:html_escape(x.text) ?></td>
|
<td><?cs var:html_escape(x.address) ?></td>
|
||||||
<td><?cs var:html_escape(x.date) ?></td>
|
<td><?cs var:html_escape(x.text) ?></td>
|
||||||
</tr>
|
<td><?cs var:html_escape(x.date) ?></td>
|
||||||
<?cs /each ?>
|
</tr>
|
||||||
</table>
|
<?cs /each ?>
|
||||||
|
</table>
|
||||||
|
<?cs else ?>
|
||||||
|
<?cs var:html_escape(Lang.WarningMessage.EmptyList) ?>
|
||||||
|
<?cs /if ?>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
||||||
|
|
|
@ -1,197 +0,0 @@
|
||||||
UI {
|
|
||||||
|
|
||||||
Navigation {
|
|
||||||
ListSelect = 1
|
|
||||||
ListCreate = 1
|
|
||||||
Subscribers {
|
|
||||||
Subscribers = 1
|
|
||||||
Digest = 1
|
|
||||||
Allow = 1
|
|
||||||
Deny = 1
|
|
||||||
Moderators = 1
|
|
||||||
}
|
|
||||||
|
|
||||||
Config {
|
|
||||||
Main = 1
|
|
||||||
Subscription = 1
|
|
||||||
Posting = 1
|
|
||||||
Processing = 1
|
|
||||||
Archive = 1
|
|
||||||
Admin = 1
|
|
||||||
All = 1
|
|
||||||
}
|
|
||||||
|
|
||||||
Gnupg {
|
|
||||||
PublicKeys = 1
|
|
||||||
SecretKeys = 1
|
|
||||||
GenerateKey = 1
|
|
||||||
}
|
|
||||||
|
|
||||||
TextEdit = 1
|
|
||||||
ListDelete = 1
|
|
||||||
GnupgConvert = 1
|
|
||||||
Language = 1
|
|
||||||
Interface = 1
|
|
||||||
Help = 1
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Options {
|
|
||||||
|
|
||||||
Create {
|
|
||||||
Listname = create_listname
|
|
||||||
Listaddress = create_listaddress
|
|
||||||
Listlanguage = lang_select
|
|
||||||
Mysql = mysql
|
|
||||||
Webuser = webusers
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Subscribers {
|
|
||||||
Subscribers = {}
|
|
||||||
Digest {
|
|
||||||
Enabled = digest_enabled
|
|
||||||
Settings = digest_settings
|
|
||||||
}
|
|
||||||
|
|
||||||
Deny {
|
|
||||||
Enabled = block_deny
|
|
||||||
}
|
|
||||||
|
|
||||||
Moderators {
|
|
||||||
Posting {
|
|
||||||
Self = mod_post
|
|
||||||
Path = mod_post_path
|
|
||||||
}
|
|
||||||
Subscription {
|
|
||||||
Self = mod_sub
|
|
||||||
Path = mod_sub_path
|
|
||||||
}
|
|
||||||
Administration {
|
|
||||||
Self = admin_enabled
|
|
||||||
Path = admin_path
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Config {
|
|
||||||
Main {
|
|
||||||
Language = lang_select
|
|
||||||
Charset = charset_select
|
|
||||||
Owner = owner_address
|
|
||||||
MainList = mainlist
|
|
||||||
MailmanRequests = mailman_requests
|
|
||||||
RemoveWarn = warn_remove
|
|
||||||
SQL = mysql
|
|
||||||
WebUsers = webusers
|
|
||||||
}
|
|
||||||
|
|
||||||
Archive {
|
|
||||||
Enabled {
|
|
||||||
Self = archive_enabled
|
|
||||||
Public = public
|
|
||||||
ModOnly = archive_mod_only
|
|
||||||
Guard = archive_deny_unknown
|
|
||||||
}
|
|
||||||
RemovePrivateHeader = archive_remove_private_header
|
|
||||||
}
|
|
||||||
|
|
||||||
Subscription {
|
|
||||||
Public = public
|
|
||||||
ConfirmSub = confirm_sub
|
|
||||||
ConfirmUnsub = confirm_unsub
|
|
||||||
ModSub {
|
|
||||||
Self = mod_sub
|
|
||||||
Path = mod_sub_path
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Admin {
|
|
||||||
Enabled {
|
|
||||||
Self = admin_enabled
|
|
||||||
RequestSubscribers = admin_get_subscribers
|
|
||||||
EditText = admin_edit_text
|
|
||||||
Path = admin_path
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Posting {
|
|
||||||
UseDeny = block_deny
|
|
||||||
BlockOthers = block_others_post
|
|
||||||
Confirm = confirm_post
|
|
||||||
Moderate {
|
|
||||||
Self = mod_post
|
|
||||||
NonMod = block_nonmod_post
|
|
||||||
Path = mod_post_path
|
|
||||||
}
|
|
||||||
SizeMax = msgsize_max
|
|
||||||
SizeMin = msgsize_min
|
|
||||||
MimeCheck {
|
|
||||||
Self = mimecheck
|
|
||||||
MimeReject = mimereject
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Processing {
|
|
||||||
Prefix = prefix
|
|
||||||
Trailer = trailer
|
|
||||||
From = from_address
|
|
||||||
MimeCheck {
|
|
||||||
Self = mimecheck
|
|
||||||
MimeRemove = mimeremove
|
|
||||||
}
|
|
||||||
HeaderRemove = headerremove
|
|
||||||
HeaderAdd = headeradd
|
|
||||||
}
|
|
||||||
|
|
||||||
Overview {
|
|
||||||
Public = public
|
|
||||||
ConfirmSub = confirm_sub
|
|
||||||
ConfirmUnsub = confirm_unsub
|
|
||||||
ModSubEnable = mod_sub
|
|
||||||
UseDeny = block_deny
|
|
||||||
BlockOthers = block_others_post
|
|
||||||
ConfirmPosting = confirm_post
|
|
||||||
ModPosting = mod_post
|
|
||||||
NonModPosting = block_nonmod_post
|
|
||||||
MailmanRequests = mailman_requests
|
|
||||||
RemoveWarn = warn_remove
|
|
||||||
DigestEnabled = digest_enabled
|
|
||||||
DigestSettings = digest_settings
|
|
||||||
ArchiveEnabled = archive_enabled
|
|
||||||
ArchiveModOnly = archive_mod_only
|
|
||||||
ArchiveGuard = archive_deny_unknown
|
|
||||||
RemovePrivateHeader = archive_remove_private_header
|
|
||||||
AdminEnabled = admin_enabled
|
|
||||||
AdminRequestSubscribers = admin_get_subscribers
|
|
||||||
AdminEditText = admin_edit_text
|
|
||||||
FromAddress = from_address
|
|
||||||
Owner = owner_address
|
|
||||||
SQL = mysql
|
|
||||||
MainList = mainlist
|
|
||||||
ModPostPath = mod_post_path
|
|
||||||
ModSubPath = mod_sub_path
|
|
||||||
AdminPath = admin_path
|
|
||||||
Prefix = prefix
|
|
||||||
Trailer = trailer
|
|
||||||
SizeMax = msgsize_max
|
|
||||||
SizeMin = msgsize_min
|
|
||||||
MimeCheck {
|
|
||||||
Self = mimecheck
|
|
||||||
MimeRemove = mimeremove
|
|
||||||
MimeReject = mimereject
|
|
||||||
}
|
|
||||||
HeaderRemove = headerremove
|
|
||||||
HeaderAdd = headeradd
|
|
||||||
Language = lang_select
|
|
||||||
Charset = charset_select
|
|
||||||
WebUsers = webusers
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,57 +0,0 @@
|
||||||
UI {
|
|
||||||
|
|
||||||
Navigation {
|
|
||||||
ListSelect = 1
|
|
||||||
ListCreate = 1
|
|
||||||
Subscribers {
|
|
||||||
Subscribers = 1
|
|
||||||
}
|
|
||||||
|
|
||||||
Config {
|
|
||||||
Main = 1
|
|
||||||
}
|
|
||||||
|
|
||||||
Gnupg {
|
|
||||||
PublicKeys = 1
|
|
||||||
SecretKeys = 1
|
|
||||||
GenerateKey = 1
|
|
||||||
}
|
|
||||||
|
|
||||||
TextEdit = 1
|
|
||||||
ListDelete = 1
|
|
||||||
Language = 1
|
|
||||||
Interface = 1
|
|
||||||
Help = 1
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Options {
|
|
||||||
|
|
||||||
GenerateKey {
|
|
||||||
KeyName = gnupg_keyname
|
|
||||||
KeyComment = gnupg_keycomment
|
|
||||||
KeySize = gnupg_keysize
|
|
||||||
KeyExpiration = gnupg_keyexpires
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Config {
|
|
||||||
Main {
|
|
||||||
#Language = lang_select
|
|
||||||
#Charset = charset_select
|
|
||||||
SignMessages = gnupg_sign_messages
|
|
||||||
EncryptToAll = gnupg_encrypt_to_all
|
|
||||||
AllowKeySubmission = gnupg_allow_key_submission
|
|
||||||
NokeyNocrypt = gnupg_nokey_nocrypt
|
|
||||||
VerifiedKeyReq = gnupg_verified_key_required
|
|
||||||
RequireSub = gnupg_require_subscriber
|
|
||||||
requireSigs = gnupg_require_sigs
|
|
||||||
WebUsers = webusers
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
UI {
|
UI {
|
||||||
|
|
||||||
Navigation {
|
Navigation {
|
||||||
|
DomainSelect = 1
|
||||||
ListSelect = 1
|
ListSelect = 1
|
||||||
ListCreate = 1
|
ListCreate = 1
|
||||||
Subscribers {
|
Subscribers {
|
||||||
|
|
Loading…
Reference in a new issue