updated UPGRADE file
new configuration setting: HTML_LINKS changed layout of top div fixed some IE rendering problems improved visualization of subscriber's log changed interface of 'form_header' macros moved interface and language selection to the top of the page reverse order of subscriber's log entries set explicit default values for UNSAFE_RM, PRETTY_NAMES, ALIAS_USER, HTML_LINKS, HTML_LANGUAGE, FILE_UPLOAD and DEFAULT_OPTIONS HTML_CSS_FILE replaced by HTML_CSS_URL - it defaults to '/ezmlm-web.css' added manpages for 'webusers' and 'ezmlmwebrc' file formats added check for required settings ignore 'taintness' of 'send' input data due to non-ascii characters in buttons' values
This commit is contained in:
parent
2318ec1a8b
commit
4c83771e11
12
INSTALL
12
INSTALL
|
@ -64,11 +64,13 @@ OVERVIEW:
|
||||||
Finally, copy the ezmlmwebrc file to one of
|
Finally, copy the ezmlmwebrc file to one of
|
||||||
the following places:
|
the following places:
|
||||||
1) the home directory of the user that runs ezmlm-web.cgi (~/.ezmlmwebrc)
|
1) the home directory of the user that runs ezmlm-web.cgi (~/.ezmlmwebrc)
|
||||||
2) the directory, that contains your cgi binary (index.cgi)
|
2) /etc/ezmlm-web/ezmlmwebrc
|
||||||
3) /etc/ezmlm-web/ezmlmwebrc
|
3) /etc/ezmlm/ezmlmwebrc [deprecated]
|
||||||
4) /etc/ezmlm/ezmlmwebrc [deprecated]
|
|
||||||
(ezmlm-web will look for it in these places in the given order)
|
(ezmlm-web will look for it in these places in the given order)
|
||||||
|
|
||||||
|
See the manpage of ezmlmwebrc (5) for a complete description of all
|
||||||
|
configuration settings.
|
||||||
|
|
||||||
|
|
||||||
4. For every user/virtual host that needs to manage mailing lists, you
|
4. For every user/virtual host that needs to manage mailing lists, you
|
||||||
need to create a suid wrapper owned by the user whom the mailing lists
|
need to create a suid wrapper owned by the user whom the mailing lists
|
||||||
|
@ -87,6 +89,10 @@ OVERVIEW:
|
||||||
ii: Be access controlled (here I mean both web and user access) by
|
ii: Be access controlled (here I mean both web and user access) by
|
||||||
some method (eg .htaccess for Apache).
|
some method (eg .htaccess for Apache).
|
||||||
|
|
||||||
|
Alternatively you can also manage multiple domains/users/virtual hosts
|
||||||
|
with a single suid-wrapper. Take a look at examples/multidomain.conf for
|
||||||
|
details.
|
||||||
|
|
||||||
|
|
||||||
5. Install some method of securing access to the page. The following
|
5. Install some method of securing access to the page. The following
|
||||||
information is applicable to Apache web servers ... Detailed
|
information is applicable to Apache web servers ... Detailed
|
||||||
|
|
25
README
25
README
|
@ -75,7 +75,7 @@ This version of ezmlm-web requires the following;
|
||||||
+ File::Copy v2.02
|
+ File::Copy v2.02
|
||||||
+ File::Path v1.07
|
+ File::Path v1.07
|
||||||
+ Text::ParseWords v3.24
|
+ Text::ParseWords v3.24
|
||||||
+ Locale::gettext v1.01
|
+ Encode (optional)
|
||||||
|
|
||||||
The version number indicates the version of the module that ezmlm-web was
|
The version number indicates the version of the module that ezmlm-web was
|
||||||
developed with. Earlier versions may work, but then they haven't been
|
developed with. Earlier versions may work, but then they haven't been
|
||||||
|
@ -86,18 +86,17 @@ versions are expected to work as well.
|
||||||
To install perl modules you may use the cpan command line interface.
|
To install perl modules you may use the cpan command line interface.
|
||||||
Just run "cpan" and type something like "install Mail::Ezmlm".
|
Just run "cpan" and type something like "install Mail::Ezmlm".
|
||||||
|
|
||||||
You can download clearsilver (a templating engine - it is required since
|
You can download clearsilver (a templating engine) from http://clearsilver.net.
|
||||||
ezmlm-web v3.0) from http://clearsilver.net.
|
|
||||||
|
|
||||||
|
|
||||||
III. Notes
|
III. Notes
|
||||||
==========
|
==========
|
||||||
* There is a function to delete mailing lists, but I really don't like the
|
* There is a function to delete mailing lists, but I really don't like the
|
||||||
idea. The only reason I put it in is that bvi@rucus asked for it.
|
idea. The only reason I put it in is that bvi@rucus asked for it.
|
||||||
If you set $UNSAFE_RD = 0 (the default) in the config section, the
|
If you set $UNSAFE_RM = 0 (the default) in the config section, the
|
||||||
ezmlm-web won't actually delete the list. In this case it moves the <list>
|
ezmlm-web won't actually delete the list. In this case it moves the <list>
|
||||||
and all the associated .qmail files to a sub-directory called
|
and all the associated .qmail files to a sub-directory called
|
||||||
deleted.qmail/ (In the users home directory. This is by far a safer way
|
_deleted_lists/ (In the user's home directory. This is by far a safer way
|
||||||
(since you can restore lists) and therefore I recommend it.
|
(since you can restore lists) and therefore I recommend it.
|
||||||
|
|
||||||
* I suggest that you make use of custom ezmlmwebrc files rather than using
|
* I suggest that you make use of custom ezmlmwebrc files rather than using
|
||||||
|
@ -150,6 +149,9 @@ option "-c" for ezmlm-web.cgi will still allow everyone to create lists. The
|
||||||
use of this option is deprecated, since the line "ALLOW_CREATE: ALL" provides
|
use of this option is deprecated, since the line "ALLOW_CREATE: ALL" provides
|
||||||
the same effect in a cleaner way.
|
the same effect in a cleaner way.
|
||||||
|
|
||||||
|
You find the details of the format of webusers (5) file in the respective
|
||||||
|
manpage.
|
||||||
|
|
||||||
|
|
||||||
V. Language Portablity
|
V. Language Portablity
|
||||||
======================
|
======================
|
||||||
|
@ -160,14 +162,8 @@ translation.
|
||||||
|
|
||||||
The language can be selected in ezmlmwebrc with the "HTML_LANGUAGE" option.
|
The language can be selected in ezmlmwebrc with the "HTML_LANGUAGE" option.
|
||||||
|
|
||||||
If anyone gets round to writing full templates for languages I would
|
Please visit the translation center at http://translate.systemausfall.org
|
||||||
appreciate it if you would do two things:
|
to contribute some strings translated to yoru native language. Thanks!
|
||||||
|
|
||||||
Firstly, make them public and announce them on the ezmlm@lists.cr.yp.to
|
|
||||||
mailing list so that others may benefit.
|
|
||||||
|
|
||||||
Secondly, please mail me a copy (ezmlm-web@sumpfralle.de) so that I may use
|
|
||||||
them in any future releases of ezmlm-web.
|
|
||||||
|
|
||||||
|
|
||||||
VI. Encrypted mailing lists
|
VI. Encrypted mailing lists
|
||||||
|
@ -182,7 +178,7 @@ VII. Bugs && Bug Reports
|
||||||
I don't know of any bugs ...
|
I don't know of any bugs ...
|
||||||
Ezmlm-web has been tested reasonably well, but not exhaustively. I know it
|
Ezmlm-web has been tested reasonably well, but not exhaustively. I know it
|
||||||
works on FreeBSD 4.0-STABLE, FreeBSD 3.4-RELEASE, RedHat 5.1, Redhat 6.0 and
|
works on FreeBSD 4.0-STABLE, FreeBSD 3.4-RELEASE, RedHat 5.1, Redhat 6.0 and
|
||||||
Debian 3.0 all using an Apache web server, but I would be interested to know
|
Debian 3.1 all using an Apache web server, but I would be interested to know
|
||||||
whether it works on other OSs and with other web servers.
|
whether it works on other OSs and with other web servers.
|
||||||
|
|
||||||
Please mail bug reports and comments to
|
Please mail bug reports and comments to
|
||||||
|
@ -216,6 +212,7 @@ VIII. Acknowledgements
|
||||||
* Reinin Ooyama (lenin@hasiru.net) - a japanese translation and bugixes for v2.3
|
* Reinin Ooyama (lenin@hasiru.net) - a japanese translation and bugixes for v2.3
|
||||||
* Henning Rieger (age@systemausfall.org) - he designed most of the new
|
* Henning Rieger (age@systemausfall.org) - he designed most of the new
|
||||||
interface for v3.0
|
interface for v3.0
|
||||||
|
* Clavdia Horvat - she designed the new color scheme of v3.2
|
||||||
|
|
||||||
|
|
||||||
IX. Availability
|
IX. Availability
|
||||||
|
|
2
TODO
2
TODO
|
@ -1,4 +1,4 @@
|
||||||
Reply-To-Option
|
check the content of the Log file for automatic subscription
|
||||||
|
|
||||||
Infos fuer Massen-Hosting:
|
Infos fuer Massen-Hosting:
|
||||||
http://www.fbis.ch/index-de.php?page=14&frameset=4
|
http://www.fbis.ch/index-de.php?page=14&frameset=4
|
||||||
|
|
26
UPGRADING
26
UPGRADING
|
@ -4,15 +4,31 @@ This file contains some useful hints for upgrading from a previous version of ez
|
||||||
|
|
||||||
UPGRADING ezmlm-web 3.1 to ezmlm-web 3.2
|
UPGRADING ezmlm-web 3.1 to ezmlm-web 3.2
|
||||||
|
|
||||||
1) the following dependencies were added:
|
1) the following dependency was added:
|
||||||
- File::Path
|
- File::Path
|
||||||
- Locale::gettext
|
|
||||||
|
|
||||||
2) a new (optional) configuration setting is available: DOTQMAIL_DIR
|
2) design update
|
||||||
It can be useful if you run a multi domain vpopmail setup.
|
The css stylesheet file changed significantly. Please update your copy.
|
||||||
|
Additionally you should also copy the images of the directory www-data/
|
||||||
|
to the directory of your local stylesheet file.
|
||||||
|
|
||||||
3) install Mail::Ezmlm::Gpg if you want to handle encrypted mailing lists
|
3) install Mail::Ezmlm::Gpg if you want to handle encrypted mailing lists
|
||||||
(see README.gnupg for details)
|
(see README.gnupg for details)
|
||||||
|
|
||||||
|
4) possible locations of ezmlmwebrc
|
||||||
|
ezmlm-web does no longer search for a configuration file (ezmlmwebrc) in
|
||||||
|
the current directory, as this can be a security risk.
|
||||||
|
If you relied on this behavior (should be rare), then you have two options:
|
||||||
|
A) move your configuration file to one of the other possible locations
|
||||||
|
B) patch the source of ezmlm-web.cgi to include the deprecated
|
||||||
|
configuration file location. Do this on your own risk!
|
||||||
|
|
||||||
|
5) renamed configuration setting
|
||||||
|
The configuration setting 'HTML_CSS_FILE' is replaced by 'HTML_CSS_URL' for
|
||||||
|
clarity. 'HTML_CSS_URL' falls back to the value of 'HTML_CSS_FILE' if it is
|
||||||
|
undefined. Thus your setup should work as before. But you are encouraged to
|
||||||
|
replace the setting, as it might break your setup in a future version of
|
||||||
|
ezmlm-web.
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@ Version 3.2 - 04/14/02006
|
||||||
* user-specific interface selection (easy/default/expert)
|
* user-specific interface selection (easy/default/expert)
|
||||||
* simplified rules for subscribing, posting and archive access
|
* simplified rules for subscribing, posting and archive access
|
||||||
* support for more ezmlm-idx: 'headerkeep', 'mimekeep' and 'copylines'
|
* support for more ezmlm-idx: 'headerkeep', 'mimekeep' and 'copylines'
|
||||||
|
* added configuration setting for site-specific links
|
||||||
* script for creating binary suid wrappers added
|
* script for creating binary suid wrappers added
|
||||||
* handling of empty settings for ezmlm-idx 5.0 fixed (closes #21)
|
* handling of empty settings for ezmlm-idx 5.0 fixed (closes #21)
|
||||||
* bug in MySQL support fixed
|
* bug in MySQL support fixed
|
||||||
|
|
2
debian/ezmlm-web.manpages
vendored
2
debian/ezmlm-web.manpages
vendored
|
@ -1,3 +1,5 @@
|
||||||
man/ezmlm-web-make-suid.1
|
man/ezmlm-web-make-suid.1
|
||||||
man/ezmlm-web.wrapper.1
|
man/ezmlm-web.wrapper.1
|
||||||
blib/man1/ezmlm-web.cgi.1p
|
blib/man1/ezmlm-web.cgi.1p
|
||||||
|
man/ezmlmwebrc.5
|
||||||
|
man/webusers.5
|
||||||
|
|
|
@ -1,10 +1,13 @@
|
||||||
# Configuration file for ezmlm-web 2.3
|
# Configuration file for ezmlm-web 3.2
|
||||||
# ===========================================================================
|
# ===========================================================================
|
||||||
|
|
||||||
# This file is not just an ordinary configuration file - it contains valid
|
# This file is not just an ordinary configuration file - it contains valid
|
||||||
# perl statements that are executed just like any other perl script. When
|
# perl statements that are executed just like any other perl script. When
|
||||||
# editing this file, be careful that it is still valid perl when you have
|
# editing this file, be careful that it is still valid perl when you have
|
||||||
# finished (perl -w ezmlmwebrc ;-)
|
# finished (perl -w ezmlmwebrc ;-)
|
||||||
|
#
|
||||||
|
# See the manpage of ezmlmwebrc(5) for a list of all available configuration
|
||||||
|
# settings.
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -21,7 +24,7 @@ $LIST_DIR = "$HOME_DIR/lists";
|
||||||
# 1) copy examples/multidomain.conf.dist to /etc/ezmlm-web/multidomain.conf
|
# 1) copy examples/multidomain.conf.dist to /etc/ezmlm-web/multidomain.conf
|
||||||
# 2) adjust /etc/ezmlm-web/multidomain.conf to your setup
|
# 2) adjust /etc/ezmlm-web/multidomain.conf to your setup
|
||||||
# 3) uncomment the following line
|
# 3) uncomment the following line
|
||||||
# 4) make sure that your multi domain settings are not overriden below
|
# 4) make sure that your multi domain settings are not overriden by settings below
|
||||||
#warn "multidomain.conf failed" unless (defined do "/etc/ezmlm-web/multidomain.conf");
|
#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?
|
||||||
|
@ -76,11 +79,19 @@ $FILE_UPLOAD = 1;
|
||||||
$DEFAULT_OPTIONS = "aBDFGHiJkLMNOpQRSTUWx";
|
$DEFAULT_OPTIONS = "aBDFGHiJkLMNOpQRSTUWx";
|
||||||
|
|
||||||
# What is the title of this document?
|
# What is the title of this document?
|
||||||
$HTML_TITLE = "ezmlm-web - a mailinglists' administration interface";
|
$HTML_TITLE = "ezmlm-web - a mailinglist administration interface";
|
||||||
|
|
||||||
# Optional: use a cascading style sheet (css)
|
# Optional: some permanent links (visible in the top right corner)
|
||||||
|
#@HTML_LINKS = (
|
||||||
|
# { name => 'ezmlm-web homepage',
|
||||||
|
# url => 'https://systemausfall.org/toolforge/ezmlm-web' },
|
||||||
|
# { name => 'domain\'s root',
|
||||||
|
# url => '/'},
|
||||||
|
# );
|
||||||
|
|
||||||
|
# use a cascading style sheet (css)
|
||||||
# this is a URL - you have to copy the css file to the right location before
|
# this is a URL - you have to copy the css file to the right location before
|
||||||
$HTML_CSS_FILE = "/ezmlm-web.css";
|
$HTML_CSS_URL = "/ezmlm-web.css";
|
||||||
|
|
||||||
# the default interface language
|
# the default interface language
|
||||||
# can only be changed via the web interface if gettext support is available
|
# can only be changed via the web interface if gettext support is available
|
||||||
|
|
26
examples/ezmlmwebrc.minimal-dist
Normal file
26
examples/ezmlmwebrc.minimal-dist
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
# Configuration file for ezmlm-web 3.2
|
||||||
|
# ===========================================================================
|
||||||
|
|
||||||
|
# This file is not just an ordinary configuration file - it contains valid
|
||||||
|
# perl statements that are executed just like any other perl script. When
|
||||||
|
# editing this file, be careful that it is still valid perl when you have
|
||||||
|
# finished (perl -w ezmlmwebrc ;-)
|
||||||
|
#
|
||||||
|
# See the manpage of ezmlmwebrc(5) for a list of all available configuration
|
||||||
|
# settings.
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Where do we store lists on this server ... Try "$HOME_DIR/lists".
|
||||||
|
# This directory will automatically be created if needed.
|
||||||
|
# BEWARE: the (resulting) path MUST be absolute (starting with a slash)!
|
||||||
|
$LIST_DIR = "$HOME_DIR/lists";
|
||||||
|
|
||||||
|
# Where are the language files
|
||||||
|
# usually something like /usr/local/share/ezmlm-web/lang
|
||||||
|
$LANGUAGE_DIR = "/usr/local/share/ezmlm-web/lang";
|
||||||
|
|
||||||
|
# Where are the template files
|
||||||
|
# usually something like /usr/local/share/ezmlm-web/template
|
||||||
|
$TEMPLATE_DIR = "/usr/local/share/ezmlm-web/template";
|
||||||
|
|
|
@ -22,14 +22,11 @@ use CGI;
|
||||||
use IO::File;
|
use IO::File;
|
||||||
use POSIX;
|
use POSIX;
|
||||||
use English;
|
use English;
|
||||||
use Time::localtime ();
|
|
||||||
|
|
||||||
# gettext support is optional
|
# optional modules - they will be loaded later if they are available
|
||||||
my $GETTEXT_SUPPORT = 1;
|
#Encode
|
||||||
unless (&safely_import_module("Locale::gettext")) {
|
#Mail::Ezmlm::Gpg
|
||||||
$GETTEXT_SUPPORT = 0;
|
|
||||||
warn "Gettext support is not available - the multilingual web interface is not available!";
|
|
||||||
}
|
|
||||||
|
|
||||||
# the Encode module is optional - we do not break if it is absent
|
# the Encode module is optional - we do not break if it is absent
|
||||||
my $ENCODE_SUPPORT = 1;
|
my $ENCODE_SUPPORT = 1;
|
||||||
|
@ -39,11 +36,6 @@ unless (&safely_import_module("Encode")) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# do not forget: we depend on Mail::Ezmlm::Gpg if the corresponding configuration
|
|
||||||
# setting is enabled
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
################## some preparations at the beginning ##################
|
################## some preparations at the beginning ##################
|
||||||
|
|
||||||
|
@ -75,13 +67,16 @@ use vars qw[$HOME_DIR]; $HOME_DIR=$tmp[7];
|
||||||
use vars qw[$DEFAULT_OPTIONS $UNSAFE_RM $ALIAS_USER $LIST_DIR];
|
use vars qw[$DEFAULT_OPTIONS $UNSAFE_RM $ALIAS_USER $LIST_DIR];
|
||||||
use vars qw[$QMAIL_BASE $PRETTY_NAMES $DOTQMAIL_DIR];
|
use vars qw[$QMAIL_BASE $PRETTY_NAMES $DOTQMAIL_DIR];
|
||||||
use vars qw[$FILE_UPLOAD $WEBUSERS_FILE $MAIL_DOMAIN $HTML_TITLE];
|
use vars qw[$FILE_UPLOAD $WEBUSERS_FILE $MAIL_DOMAIN $HTML_TITLE];
|
||||||
use vars qw[$HTML_CSS_FILE $TEMPLATE_DIR $LANGUAGE_DIR $HTML_LANGUAGE];
|
use vars qw[$HTML_CSS_URL $TEMPLATE_DIR $LANGUAGE_DIR $HTML_LANGUAGE];
|
||||||
use vars qw[$MAIL_ADDRESS_PREFIX];
|
use vars qw[$MAIL_ADDRESS_PREFIX @HTML_LINKS];
|
||||||
# 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
|
# settings for multi-domain setups
|
||||||
use vars qw[%DOMAINS $CURRENT_DOMAIN];
|
use vars qw[%DOMAINS $CURRENT_DOMAIN];
|
||||||
|
|
||||||
|
# deprecated settings
|
||||||
|
use vars qw[$HTML_CSS_FILE]; # replaced by HTML_CSS_URL since v3.2
|
||||||
|
|
||||||
# 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
|
||||||
# for now there are no deprecated settings
|
# for now there are no deprecated settings
|
||||||
|
@ -99,8 +94,6 @@ if (defined($opt_C)) {
|
||||||
$config_file = $1; # Command Line
|
$config_file = $1; # Command Line
|
||||||
} elsif (-e "$HOME_DIR/.ezmlmwebrc") {
|
} elsif (-e "$HOME_DIR/.ezmlmwebrc") {
|
||||||
$config_file = "$HOME_DIR/.ezmlmwebrc"; # User
|
$config_file = "$HOME_DIR/.ezmlmwebrc"; # User
|
||||||
} elsif (-e "./ezmlmwebrc") {
|
|
||||||
$config_file = "./ezmlmwebrc"; # Install
|
|
||||||
} elsif (-e "/etc/ezmlm-web/ezmlmwebrc") {
|
} elsif (-e "/etc/ezmlm-web/ezmlmwebrc") {
|
||||||
$config_file = "/etc/ezmlm-web/ezmlmwebrc"; # System (new style - since v2.2)
|
$config_file = "/etc/ezmlm-web/ezmlmwebrc"; # System (new style - since v2.2)
|
||||||
} elsif (-e "/etc/ezmlm/ezmlmwebrc") {
|
} elsif (-e "/etc/ezmlm/ezmlmwebrc") {
|
||||||
|
@ -138,6 +131,14 @@ if (defined($opt_d)) {
|
||||||
$LIST_DIR = $1 if ($opt_d =~ /^([-\@\w.\/]+)$/);
|
$LIST_DIR = $1 if ($opt_d =~ /^([-\@\w.\/]+)$/);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# check required configuration settings
|
||||||
|
&fatal_error("Configuration setting 'LIST_DIR' not specified!")
|
||||||
|
unless (defined($LIST_DIR));
|
||||||
|
&fatal_error("Configuration setting 'LANGUAGE_DIR' not specified!")
|
||||||
|
unless (defined($LANGUAGE_DIR));
|
||||||
|
&fatal_error("Configuration setting 'TEMPLATE_DIR' not specified!")
|
||||||
|
unless (defined($TEMPLATE_DIR));
|
||||||
|
|
||||||
# If WEBUSERS_FILE is not defined in ezmlmwebrc (as before version 2.2),
|
# If WEBUSERS_FILE is not defined in ezmlmwebrc (as before version 2.2),
|
||||||
# then use former default value for compatibility
|
# then use former default value for compatibility
|
||||||
$WEBUSERS_FILE = $LIST_DIR . '/webusers' unless (defined($WEBUSERS_FILE));
|
$WEBUSERS_FILE = $LIST_DIR . '/webusers' unless (defined($WEBUSERS_FILE));
|
||||||
|
@ -145,8 +146,24 @@ $WEBUSERS_FILE = $LIST_DIR . '/webusers' unless (defined($WEBUSERS_FILE));
|
||||||
# check for non-default dotqmail directory
|
# check for non-default dotqmail directory
|
||||||
$DOTQMAIL_DIR = $HOME_DIR unless defined($DOTQMAIL_DIR);
|
$DOTQMAIL_DIR = $HOME_DIR unless defined($DOTQMAIL_DIR);
|
||||||
|
|
||||||
# check optional stylesheet
|
# check default options for new mailing lists
|
||||||
$HTML_CSS_FILE = '' unless defined($HTML_CSS_FILE);
|
$DEFAULT_OPTIONS = 'aBDFGHiJkLMNOpQRSTUWx' unless defined($DEFAULT_OPTIONS);
|
||||||
|
|
||||||
|
# check default language
|
||||||
|
$HTML_LANGUAGE = 'en' unless defined($HTML_LANGUAGE);
|
||||||
|
|
||||||
|
# check stylesheet
|
||||||
|
# HTML_CSS_FILE was replaced by HTML_CSS_URL in v3.2
|
||||||
|
unless (defined($HTML_CSS_URL)) {
|
||||||
|
# HTML_CSS_URL is undefined - we will check the deprecated setting first
|
||||||
|
if (defined($HTML_CSS_FILE)) {
|
||||||
|
# ok - we fall back to the deprecated setting
|
||||||
|
$HTML_CSS_URL = $HTML_CSS_FILE;
|
||||||
|
} else {
|
||||||
|
# nothing is defined - we use the default value
|
||||||
|
$HTML_CSS_URL = '/ezmlm-web.css';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# check template directory
|
# check template directory
|
||||||
$TEMPLATE_DIR = 'template' unless defined($TEMPLATE_DIR);
|
$TEMPLATE_DIR = 'template' unless defined($TEMPLATE_DIR);
|
||||||
|
@ -154,6 +171,24 @@ $TEMPLATE_DIR = 'template' unless defined($TEMPLATE_DIR);
|
||||||
# check QMAIL_BASE
|
# check QMAIL_BASE
|
||||||
$QMAIL_BASE = '/var/qmail/control' unless defined($QMAIL_BASE);
|
$QMAIL_BASE = '/var/qmail/control' unless defined($QMAIL_BASE);
|
||||||
|
|
||||||
|
# check UNSAFE_RM
|
||||||
|
$UNSAFE_RM = 0 unless defined($UNSAFE_RM);
|
||||||
|
|
||||||
|
# check PRETTY_NAMES
|
||||||
|
$PRETTY_NAMES = 0 unless defined($PRETTY_NAMES);
|
||||||
|
|
||||||
|
# check FILE_UPLOAD
|
||||||
|
$FILE_UPLOAD = 1 unless defined($FILE_UPLOAD);
|
||||||
|
|
||||||
|
# check ALIAS_USER
|
||||||
|
$ALIAS_USER = 'alias' unless defined($ALIAS_USER);
|
||||||
|
|
||||||
|
# check HTML_TITLE
|
||||||
|
$HTML_TITLE = '' unless defined($HTML_TITLE);
|
||||||
|
|
||||||
|
# check HTML_LINKS
|
||||||
|
@HTML_LINKS = () unless defined(@HTML_LINKS);
|
||||||
|
|
||||||
# determine MAIL_DOMAIN
|
# determine MAIL_DOMAIN
|
||||||
unless (defined($MAIL_DOMAIN) && ($MAIL_DOMAIN ne '')) {
|
unless (defined($MAIL_DOMAIN) && ($MAIL_DOMAIN ne '')) {
|
||||||
if ((-e "$QMAIL_BASE/virtualdomains") && open(VD, "<$QMAIL_BASE/virtualdomains")) {
|
if ((-e "$QMAIL_BASE/virtualdomains") && open(VD, "<$QMAIL_BASE/virtualdomains")) {
|
||||||
|
@ -199,7 +234,7 @@ 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 ...
|
||||||
if ($action eq 'show_mime_examples') {
|
if (defined($action) && ($action eq 'show_mime_examples')) {
|
||||||
&output_mime_examples();
|
&output_mime_examples();
|
||||||
exit 0;
|
exit 0;
|
||||||
} elsif (%DOMAINS && (!defined($CURRENT_DOMAIN) || ($CURRENT_DOMAIN eq '')
|
} elsif (%DOMAINS && (!defined($CURRENT_DOMAIN) || ($CURRENT_DOMAIN eq '')
|
||||||
|
@ -526,9 +561,16 @@ sub init_hdf {
|
||||||
$hdf = &load_interface_language($hdf);
|
$hdf = &load_interface_language($hdf);
|
||||||
|
|
||||||
$hdf->setValue("ScriptName", $ENV{SCRIPT_NAME}) if (defined($ENV{SCRIPT_NAME}));
|
$hdf->setValue("ScriptName", $ENV{SCRIPT_NAME}) if (defined($ENV{SCRIPT_NAME}));
|
||||||
$hdf->setValue("Stylesheet", "$HTML_CSS_FILE");
|
$hdf->setValue("Stylesheet", "$HTML_CSS_URL");
|
||||||
$hdf->setValue("Config.PageTitle", "$HTML_TITLE");
|
$hdf->setValue("Config.PageTitle", "$HTML_TITLE");
|
||||||
|
|
||||||
|
my $i;
|
||||||
|
for $i (0 .. $#HTML_LINKS) {
|
||||||
|
$hdf->setValue("Config.PageLinks.$i.name", $HTML_LINKS[$i]{name});
|
||||||
|
$hdf->setValue("Config.PageLinks.$i.url", $HTML_LINKS[$i]{url});
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
|
||||||
# support for encrypted mailing lists?
|
# support for encrypted mailing lists?
|
||||||
$hdf->setValue("Config.Features.Crypto", 1) if ($GPG_SUPPORT);
|
$hdf->setValue("Config.Features.Crypto", 1) if ($GPG_SUPPORT);
|
||||||
|
|
||||||
|
@ -1206,7 +1248,7 @@ sub set_pagedata_subscription_log {
|
||||||
|
|
||||||
my ($listname) = @_;
|
my ($listname) = @_;
|
||||||
|
|
||||||
my ($log_file, @event, $i, $epoch_seconds, $note, $address);
|
my ($log_file, @event, $i, $datetext, $epoch_seconds, $note, $address);
|
||||||
$log_file = "$LIST_DIR/" . $q->param('list') . "/Log";
|
$log_file = "$LIST_DIR/" . $q->param('list') . "/Log";
|
||||||
|
|
||||||
# break if there is no log_file
|
# break if there is no log_file
|
||||||
|
@ -1219,18 +1261,20 @@ sub set_pagedata_subscription_log {
|
||||||
}
|
}
|
||||||
|
|
||||||
$i = 0;
|
$i = 0;
|
||||||
|
|
||||||
while (<LOG_FILE>) {
|
while (<LOG_FILE>) {
|
||||||
chomp;
|
chomp;
|
||||||
split;
|
@event = split;
|
||||||
@event = @_;
|
|
||||||
if ($#event eq 2) {
|
if ($#event eq 2) {
|
||||||
$epoch_seconds = $event[0];
|
$epoch_seconds = $event[0];
|
||||||
my $datetext = ctime($epoch_seconds);
|
$datetext = localtime($epoch_seconds);
|
||||||
$note = $event[1];
|
$note = $event[1];
|
||||||
$address = $event[2];
|
$address = $event[2];
|
||||||
|
# the date in gmt format - this should be sufficient
|
||||||
$pagedata->setValue("Data.List.SubscribeLog.$i.date", $datetext);
|
$pagedata->setValue("Data.List.SubscribeLog.$i.date", $datetext);
|
||||||
$pagedata->setValue("Data.List.SubscribeLog.$i.text", $note);
|
# the first letter of 'note' should be +/-
|
||||||
|
$pagedata->setValue("Data.List.SubscribeLog.$i.action", substr($note,0,1));
|
||||||
|
# manual/auto/mod - TODO: verify "auto"
|
||||||
|
$pagedata->setValue("Data.List.SubscribeLog.$i.details", substr($note,1));
|
||||||
$pagedata->setValue("Data.List.SubscribeLog.$i.address", $address);
|
$pagedata->setValue("Data.List.SubscribeLog.$i.address", $address);
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
|
@ -1328,6 +1372,8 @@ sub untaint {
|
||||||
next if ($params[$i] eq 'mailaddressfile');
|
next if ($params[$i] eq 'mailaddressfile');
|
||||||
next if ($params[$i] eq 'gnupg_key_file');
|
next if ($params[$i] eq 'gnupg_key_file');
|
||||||
next if ($params[$i] eq 'content');
|
next if ($params[$i] eq 'content');
|
||||||
|
# the button description may contain non-ascii characters - skip check
|
||||||
|
next if ($params[$i] eq 'send');
|
||||||
foreach $param ($q->param($params[$i])) {
|
foreach $param ($q->param($params[$i])) {
|
||||||
next if $param eq '';
|
next if $param eq '';
|
||||||
if ($param =~ /^([#-\@\w\.\/\[\]\:\n\r\>\< _"']+)$/) {
|
if ($param =~ /^([#-\@\w\.\/\[\]\:\n\r\>\< _"']+)$/) {
|
||||||
|
|
12
lang/en.hdf
12
lang/en.hdf
|
@ -282,6 +282,18 @@ Lang {
|
||||||
normal = default
|
normal = default
|
||||||
expert = expert
|
expert = expert
|
||||||
}
|
}
|
||||||
|
MailAddress = Mail address
|
||||||
|
SubscribeAction = Event
|
||||||
|
SubscribeActionDetails = Details
|
||||||
|
SubscribeActions {
|
||||||
|
remove = removed
|
||||||
|
add = added
|
||||||
|
mod = moderated
|
||||||
|
manual = manual
|
||||||
|
auto = automatical
|
||||||
|
unknown = unknown
|
||||||
|
}
|
||||||
|
Date = Date
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
122
man/ezmlmwebrc.5
Normal file
122
man/ezmlmwebrc.5
Normal file
|
@ -0,0 +1,122 @@
|
||||||
|
.TH ezmlmwebrc 5 "April 02007" "ezmlm-web" "configuration file"
|
||||||
|
.SH NAME
|
||||||
|
ezmlmwebrc \- configuration file for ezmlm-web
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.PP
|
||||||
|
\fBezmlmwebrc\fR contains the configuration settings necessary for ezmlm-web.
|
||||||
|
.PP
|
||||||
|
The file is required for ezmlm-web and must exist in one of the following
|
||||||
|
locations:
|
||||||
|
.IP \fB~/.ezmlmwebrc\fR
|
||||||
|
user-specific configuration file
|
||||||
|
.IP \fB/etc/ezmlm-web/ezmlmwebrc\fR
|
||||||
|
system-wide default configuration file
|
||||||
|
.IP \fB/etc/ezmlm/ezmlmwebrc\fR
|
||||||
|
system-wide default configuration file (deprecated since v2.2)
|
||||||
|
.PP
|
||||||
|
Additionally the location of the configuration file may be overriden by the
|
||||||
|
command line switch \fB\-C\fR of \fIezmlm-web.cgi (1p)\fR.
|
||||||
|
.SH FILE FORMAT
|
||||||
|
.PP
|
||||||
|
The file itself is sourced by the perl script \fIezmlm-web.cgi\fR, so it is
|
||||||
|
required that the file conforms to the syntax of perl scripts. See the
|
||||||
|
manpage of perl (1) for details.
|
||||||
|
.PP
|
||||||
|
You should avoid to declare other variables than the settings described below.
|
||||||
|
Otherwise you may run into namespace conflicts. Just don't do it.
|
||||||
|
.PP
|
||||||
|
You may rely on the existence (and meaningful content) of the following
|
||||||
|
variables:
|
||||||
|
.IP \fI$USER\fR
|
||||||
|
the name of the owner of the current process
|
||||||
|
.IP \fI$HOME\fR
|
||||||
|
the home directory of the owner of the current process
|
||||||
|
.SH REQUIRED SETTINGS
|
||||||
|
.IP \fB$LIST_DIR\fR
|
||||||
|
This is the directory containing the lists, that you want to manage via
|
||||||
|
ezmlm-web. It will be created automatically if it does not exist yet.
|
||||||
|
The value \fI$HOME/lists\fR should be quite reasonable.
|
||||||
|
.IP \fB$LANGUAGE_DIR\fR
|
||||||
|
This directory contains the language files of ezmlm-web (e.g. \fIen.hdf\fR).
|
||||||
|
Usually this should be something like \fI/usr/local/share/ezmlm-web/lang\fR.
|
||||||
|
.IP \fB$TEMPLATE_DIR\fR
|
||||||
|
This directory contains the template files of ezmlm-web (e.g. \fImain.cs\fR).
|
||||||
|
Usually this should be something like
|
||||||
|
\fI/usr/local/share/ezmlm-web/template\fR.
|
||||||
|
.SH OPTIONAL SETTINGS
|
||||||
|
.IP \fB$DEFAULT_OPTIONS\fR
|
||||||
|
Specify the default options used for ezmlm-make (1) when creating a new list.
|
||||||
|
The default value is: \fIaBDFGHiJkLMNOpQRSTUWx\fR. See the manpage of
|
||||||
|
ezmlm-make (1) for details.
|
||||||
|
.IP \fB$ALIAS_USER\fR
|
||||||
|
The alias user of a qmail installation manages all mail addresses that are
|
||||||
|
not handled by specific dotqmail files or other definitions. It defaults to
|
||||||
|
\fIalias\fR.
|
||||||
|
.IP \fB$QMAIL_BASE\fR
|
||||||
|
This is the control directory of your qmail setup. It defaults to
|
||||||
|
\fI/var/qmail/control\fR.
|
||||||
|
.IP \fB$DOTQMAIL_DIR\fR
|
||||||
|
The directory of the dotqmail (5) files of the lists managed by ezmlm-web.
|
||||||
|
It defaults to the home directory of the owner of the current process
|
||||||
|
(\fI$HOME\fR).
|
||||||
|
.IP \fB$WEBUSERS_FILE\fR
|
||||||
|
This file contains the access rules for the lists managed by ezmlm-web.
|
||||||
|
Read the README file of ezmlm-web for details. This setting defaults to
|
||||||
|
\fI$LISTS/webusers\fR.
|
||||||
|
.IP \fB$MAIL_DOMAIN\fR
|
||||||
|
Specify the default domain name of new mailing lists. Leave it empty if you
|
||||||
|
want ezmlm-web to try to detect this value automatically.
|
||||||
|
.IP \fB$MAIL_ADDRESS_PREFIX\fR
|
||||||
|
Specify the default prefix for the local part of the addresses of new mailing
|
||||||
|
lists. By default it is empty ('').
|
||||||
|
.IP \fB$PRETTY_NAMES\fR
|
||||||
|
Do you want to store connections between real names and mail addresses if both
|
||||||
|
were provided when adding a new subscriber? This results in a file called
|
||||||
|
\fIwebnames\fR being created in every mailing list directory when necessary.
|
||||||
|
.IP \fB$FILE_UPLOAD\fR
|
||||||
|
Should the upload of subscriber files be possible? The default is \fI1\fR.
|
||||||
|
If you consider this as a security risk, then you should set it to \fI0\fR.
|
||||||
|
.IP \fB$UNSAFE_RM\fR
|
||||||
|
This setting defines, if list removal requested via the web interface should
|
||||||
|
be recoverable or not. The value \fI1\fR will make ezmlm-web remove the list
|
||||||
|
directory completely without any chance of recovery. The default value \fI0\fR
|
||||||
|
will just move deleted lists to a safe place. Thus deletion is recoverable.
|
||||||
|
.IP \fB$HTML_TITLE\fR
|
||||||
|
Print a reasonable name of the web interface to the left upper corner of every
|
||||||
|
page. By default this string is empty.
|
||||||
|
.IP \fB$HTML_CSS_URL\fR
|
||||||
|
This is the URL of the stylesheet file to be used by ezmlm-web. Make sure it is
|
||||||
|
actually available, as the design of the web interface will suffer a lot
|
||||||
|
without it.
|
||||||
|
.IP \fB@HTML_LINKS\fR
|
||||||
|
This array may contain hashes with the elements \fIname\fR and \fIurl\fR.
|
||||||
|
These links will be visible in the upper right corner of every page.
|
||||||
|
Please pay attention to the syntax of perl and use the example configuration
|
||||||
|
file distributed with ezmlm-web as a template. By default, this array is
|
||||||
|
empty.
|
||||||
|
.IP \fB$HTML_LANGUAGE\fR
|
||||||
|
Specify the defaut language of the web interface. This value will be overriden
|
||||||
|
when the browser requests an available language or when the user explicitly
|
||||||
|
selects a different language. The default value is \fIen\fR.
|
||||||
|
.IP \fB$GPG_SUPPORT\fR
|
||||||
|
Enable support for encrypted mailing lists. Currently this feature is still
|
||||||
|
considered as beta quality. User reports are warmly welcome!
|
||||||
|
.IP \fB%DOMAINS\fR
|
||||||
|
This hash of hashes (\fIname\fR associated with a hash of domain specific
|
||||||
|
information) can be used to define a multi-domain setup. See the example
|
||||||
|
configuration file (\fImultidomain.conf\fR) as distributed with ezmlm-web for
|
||||||
|
more details.
|
||||||
|
.SH EXAMPLES
|
||||||
|
.IP "A minimal example configuration file:"
|
||||||
|
.sp
|
||||||
|
.nf
|
||||||
|
$LIST_DIR = "$HOME_DIR/lists";
|
||||||
|
$LANGUAGE_DIR = "/usr/local/share/ezmlm-web/lang";
|
||||||
|
$TEMPLATE_DIR = "/usr/local/share/ezmlm-web/template";
|
||||||
|
.SH AUTHOR
|
||||||
|
Written by Lars Kruse
|
||||||
|
.SH "REPORTING BUGS"
|
||||||
|
Report bugs to <devel@sumpfralle.de>
|
||||||
|
.SH COPYRIGHT
|
||||||
|
Copyright \(co 02007 Lars Kruse
|
||||||
|
|
60
man/webusers.5
Normal file
60
man/webusers.5
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
.TH webusers 5 "April 02007" "ezmlm-web" "access configuration file"
|
||||||
|
.SH NAME
|
||||||
|
webusers \- define the access permissions for a directory of lists
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.PP
|
||||||
|
\fBwebusers\fR contains the access definitions for the lists below a certain
|
||||||
|
directory.
|
||||||
|
.PP
|
||||||
|
This file is optional. The actions of users are unrestricted, if the
|
||||||
|
\fBwebusers\fR file does not exist. Be careful when using this setting.
|
||||||
|
.PP
|
||||||
|
A webusers file is only useful if you can request some kind of authentication
|
||||||
|
from the user. Usually this should be done via http-authentication. See
|
||||||
|
the INSTALL file for more details.
|
||||||
|
.SH LOCATION
|
||||||
|
By default the \fBwebusers\fR file is located in the same directory as the
|
||||||
|
mailing lists. This can be adjusted with the setting \fIWEBUSERS_FILE\fR in
|
||||||
|
the configuration file ezmlmwebrc (5). Read its manpage for details.
|
||||||
|
.SH FILE FORMAT
|
||||||
|
.IP "The file consists of lines of the following form:"
|
||||||
|
.sp
|
||||||
|
.nf
|
||||||
|
LISTNAME: USER1 USER2
|
||||||
|
.PP
|
||||||
|
Empty lines and lines starting with a '#' are ignored. The same goes for
|
||||||
|
invalid configuration lines.
|
||||||
|
.PP
|
||||||
|
If \fILISTNAME\fR equals the string \fIALL\fR, then the following users are
|
||||||
|
allowed to manage all existing mailing lists.
|
||||||
|
.PP
|
||||||
|
If \fILISTNAME\fR equals the string \fIALLOW_CREATE\fR, then the following
|
||||||
|
users are allowed to create new lists.
|
||||||
|
.PP
|
||||||
|
Otherwise the named users are allowed to manage only list \fILISTNAME\fR.
|
||||||
|
.PP
|
||||||
|
If one of the usernames equals the string \fIALL\fR, then every authenticated
|
||||||
|
user is allowed to perform the action specified by \fILISTNAME\fR.
|
||||||
|
.SH EXAMPLES
|
||||||
|
.IP "A minimal example access configuration file:"
|
||||||
|
.sp
|
||||||
|
.nf
|
||||||
|
comm: guy arb
|
||||||
|
users: arb
|
||||||
|
members: ALL
|
||||||
|
ALL: root
|
||||||
|
ALLOW_CREATE: root guy
|
||||||
|
.PP
|
||||||
|
In the example above, the users \fIroot\fR and \fIguy\fR are allowed to create
|
||||||
|
new lists.
|
||||||
|
.PP
|
||||||
|
Every authenticated user may configure the list \fImembers\fR.
|
||||||
|
.PP
|
||||||
|
The user \fIroot\fR can manage all mailing lists.
|
||||||
|
.SH AUTHOR
|
||||||
|
Written by Lars Kruse
|
||||||
|
.SH "REPORTING BUGS"
|
||||||
|
Report bugs to <devel@sumpfralle.de>
|
||||||
|
.SH COPYRIGHT
|
||||||
|
Copyright \(co 02007 Lars Kruse
|
||||||
|
|
|
@ -9,13 +9,14 @@
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend><?cs var:html_escape(Lang.Legend.ConfigAdmin) ?> </legend>
|
<legend><?cs var:html_escape(Lang.Legend.ConfigAdmin) ?> </legend>
|
||||||
|
|
||||||
<?cs call:form_header("config_admin", "") ?>
|
<?cs call:form_header("config_admin") ?>
|
||||||
<input type="hidden" name="config_subset" value="admin" />
|
<input type="hidden" name="config_subset" value="admin" />
|
||||||
|
|
||||||
<?cs call:show_options(UI.Options.Config.Admin) ?>
|
<?cs call:show_options(UI.Options.Config.Admin) ?>
|
||||||
|
|
||||||
|
<ul><li>
|
||||||
<input type="hidden" name="action" value="config_do" />
|
<input type="hidden" name="action" value="config_do" />
|
||||||
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button>
|
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button></li></ul>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
|
@ -9,13 +9,14 @@
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend><?cs var:html_escape(Lang.Legend.ConfigAll) ?> </legend>
|
<legend><?cs var:html_escape(Lang.Legend.ConfigAll) ?> </legend>
|
||||||
|
|
||||||
<?cs call:form_header("config_all", "") ?>
|
<?cs call:form_header("config_all") ?>
|
||||||
<input type="hidden" name="config_subset" value="all" />
|
<input type="hidden" name="config_subset" value="all" />
|
||||||
|
|
||||||
<?cs call:show_options(UI.Options.Config.Overview) ?>
|
<?cs call:show_options(UI.Options.Config.Overview) ?>
|
||||||
|
|
||||||
|
<ul><li>
|
||||||
<input type="hidden" name="action" value="config_do" />
|
<input type="hidden" name="action" value="config_do" />
|
||||||
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button>
|
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button></li></ul>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
|
@ -9,14 +9,15 @@
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend><?cs var:html_escape(Lang.Legend.ConfigArchive) ?> </legend>
|
<legend><?cs var:html_escape(Lang.Legend.ConfigArchive) ?> </legend>
|
||||||
|
|
||||||
<?cs call:form_header("config_archive", "") ?>
|
<?cs call:form_header("config_archive") ?>
|
||||||
<input type="hidden" name="config_subset" value="archive" />
|
<input type="hidden" name="config_subset" value="archive" />
|
||||||
|
|
||||||
<?cs call:show_options(UI.Options.Config.Archive) ?>
|
<?cs call:show_options(UI.Options.Config.Archive) ?>
|
||||||
|
|
||||||
|
<ul><li>
|
||||||
<input type="hidden" name="action" value="config_do" />
|
<input type="hidden" name="action" value="config_do" />
|
||||||
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button>
|
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button></li></ul>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
</fieldset>
|
|
||||||
|
|
||||||
|
</fieldset>
|
||||||
|
|
|
@ -9,13 +9,14 @@
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend><?cs var:html_escape(Lang.Legend.GnupgOptions) ?> </legend>
|
<legend><?cs var:html_escape(Lang.Legend.GnupgOptions) ?> </legend>
|
||||||
|
|
||||||
<?cs call:form_header("config_encryption", "") ?>
|
<?cs call:form_header("config_encryption") ?>
|
||||||
<input type="hidden" name="config_subset" value="encryption" />
|
<input type="hidden" name="config_subset" value="encryption" />
|
||||||
|
|
||||||
<?cs call:show_options(UI.Options.Config.GnupgOptions) ?>
|
<?cs call:show_options(UI.Options.Config.GnupgOptions) ?>
|
||||||
|
|
||||||
|
<ul><li>
|
||||||
<input type="hidden" name="action" value="config_do" />
|
<input type="hidden" name="action" value="config_do" />
|
||||||
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button>
|
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button></li></ul>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
|
|
@ -9,13 +9,14 @@
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend><?cs var:html_escape(Lang.Legend.ConfigMain) ?> </legend>
|
<legend><?cs var:html_escape(Lang.Legend.ConfigMain) ?> </legend>
|
||||||
|
|
||||||
<?cs call:form_header("config_main", "") ?>
|
<?cs call:form_header("config_main") ?>
|
||||||
<input type="hidden" name="config_subset" value="main" />
|
<input type="hidden" name="config_subset" value="main" />
|
||||||
|
|
||||||
<?cs call:show_options(UI.Options.Config.Main) ?>
|
<?cs call:show_options(UI.Options.Config.Main) ?>
|
||||||
|
|
||||||
|
<ul><li>
|
||||||
<input type="hidden" name="action" value="config_do" />
|
<input type="hidden" name="action" value="config_do" />
|
||||||
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button>
|
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button></li></ul>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
|
|
@ -9,13 +9,14 @@
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend><?cs var:html_escape(Lang.Legend.ConfigPosting) ?> </legend>
|
<legend><?cs var:html_escape(Lang.Legend.ConfigPosting) ?> </legend>
|
||||||
|
|
||||||
<?cs call:form_header("config_posting", "") ?>
|
<?cs call:form_header("config_posting") ?>
|
||||||
<input type="hidden" name="config_subset" value="posting" />
|
<input type="hidden" name="config_subset" value="posting" />
|
||||||
|
|
||||||
<?cs call:show_options(UI.Options.Config.Posting) ?>
|
<?cs call:show_options(UI.Options.Config.Posting) ?>
|
||||||
|
|
||||||
|
<ul><li>
|
||||||
<input type="hidden" name="action" value="config_do" />
|
<input type="hidden" name="action" value="config_do" />
|
||||||
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button>
|
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button></li></ul>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
|
|
@ -9,15 +9,17 @@
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend><?cs var:html_escape(Lang.Legend.ConfigProcess) ?> </legend>
|
<legend><?cs var:html_escape(Lang.Legend.ConfigProcess) ?> </legend>
|
||||||
|
|
||||||
<?cs call:form_header("config_processing", "") ?>
|
<?cs call:form_header("config_processing") ?>
|
||||||
<input type="hidden" name="config_subset" value="processing" />
|
<input type="hidden" name="config_subset" value="processing" />
|
||||||
|
|
||||||
<?cs call:show_options(UI.Options.Config.Processing) ?>
|
<?cs call:show_options(UI.Options.Config.Processing) ?>
|
||||||
|
|
||||||
|
<ul><li>
|
||||||
<input type="hidden" name="action" value="config_do" />
|
<input type="hidden" name="action" value="config_do" />
|
||||||
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button>
|
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button></li></ul>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
||||||
<?cs include:TemplateDir + '/help_tag_susbtitution.cs' ?>
|
<?cs include:TemplateDir + '/help_tag_susbtitution.cs' ?>
|
||||||
|
|
|
@ -9,13 +9,14 @@
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend><?cs var:html_escape(Lang.Legend.ConfigSub) ?> </legend>
|
<legend><?cs var:html_escape(Lang.Legend.ConfigSub) ?> </legend>
|
||||||
|
|
||||||
<?cs call:form_header("config_subscription", "") ?>
|
<?cs call:form_header("config_subscription") ?>
|
||||||
<input type="hidden" name="config_subset" value="subscription" />
|
<input type="hidden" name="config_subset" value="subscription" />
|
||||||
|
|
||||||
<?cs call:show_options(UI.Options.Config.Subscription) ?>
|
<?cs call:show_options(UI.Options.Config.Subscription) ?>
|
||||||
|
|
||||||
|
<ul><li>
|
||||||
<input type="hidden" name="action" value="config_do" />
|
<input type="hidden" name="action" value="config_do" />
|
||||||
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button>
|
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button></li></ul>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,8 @@
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend><?cs var:html_escape(Lang.Legend.GnupgConvert) ?> </legend>
|
<legend><?cs var:html_escape(Lang.Legend.GnupgConvert) ?> </legend>
|
||||||
|
|
||||||
<?cs call:form_header("gnupg_convert", "") ?>
|
<?cs call:form_header("gnupg_convert") ?>
|
||||||
|
<ul><li>
|
||||||
<?cs if:Data.List.Features.Crypto
|
<?cs if:Data.List.Features.Crypto
|
||||||
?><button type="submit" name="send" value="do"><?cs
|
?><button type="submit" name="send" value="do"><?cs
|
||||||
var:html_escape(Lang.Buttons.GnupgConvertToPlain) ?></button>
|
var:html_escape(Lang.Buttons.GnupgConvertToPlain) ?></button>
|
||||||
|
@ -19,6 +20,7 @@
|
||||||
var:html_escape(Lang.Buttons.GnupgConvertToEncrypted) ?></button>
|
var:html_escape(Lang.Buttons.GnupgConvertToEncrypted) ?></button>
|
||||||
<input type="hidden" name="action" value="gnupg_convert_enable" /><?cs
|
<input type="hidden" name="action" value="gnupg_convert_enable" /><?cs
|
||||||
/if ?>
|
/if ?>
|
||||||
|
</li></ul>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
|
@ -9,14 +9,15 @@
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend><?cs var:html_escape(Lang.Legend.GnupgGenerateKey) ?> </legend>
|
<legend><?cs var:html_escape(Lang.Legend.GnupgGenerateKey) ?> </legend>
|
||||||
|
|
||||||
<?cs call:form_header("gnupg_generate_key", "") ?>
|
<?cs call:form_header("gnupg_generate_key") ?>
|
||||||
|
|
||||||
<input type="hidden" name="gnupg_subset" value="generate_key" />
|
<input type="hidden" name="gnupg_subset" value="generate_key" />
|
||||||
|
|
||||||
<?cs call:show_options(UI.Options.GenerateKey) ?>
|
<?cs call:show_options(UI.Options.GenerateKey) ?>
|
||||||
|
|
||||||
|
<ul><li>
|
||||||
<input type="hidden" name="action" value="gnupg_do" />
|
<input type="hidden" name="action" value="gnupg_do" />
|
||||||
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.GnupgGenerateKey) ?></button>
|
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.GnupgGenerateKey) ?></button></li></ul>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend><?cs var:html_escape(Lang.Legend.GnupgKeyImport) ?> </legend>
|
<legend><?cs var:html_escape(Lang.Legend.GnupgKeyImport) ?> </legend>
|
||||||
<?cs call:form_header_upload("gnupg_key_upload", "") ?>
|
<?cs call:form_header_upload("gnupg_key_upload") ?>
|
||||||
|
|
||||||
<input type="hidden" name="gnupg_subset" value="<?cs
|
<input type="hidden" name="gnupg_subset" value="<?cs
|
||||||
if:Data.Action == 'gnupg_public' ?>public<?cs
|
if:Data.Action == 'gnupg_public' ?>public<?cs
|
||||||
|
|
|
@ -13,10 +13,10 @@
|
||||||
|
|
||||||
<?cs if:subcount(Data.List.gnupg_keys.public) > 0 ?>
|
<?cs if:subcount(Data.List.gnupg_keys.public) > 0 ?>
|
||||||
|
|
||||||
<?cs call:form_header("gnupg_public_keys", "") ?>
|
<?cs call:form_header("gnupg_public_keys") ?>
|
||||||
<input type="hidden" name="gnupg_subset" value="public" />
|
|
||||||
|
|
||||||
<table class="gnupg_keys">
|
<ul>
|
||||||
|
<li><table class="gnupg_keys">
|
||||||
<?cs each:key = Data.List.gnupg_keys.public
|
<?cs each:key = Data.List.gnupg_keys.public
|
||||||
?><tr><td><input type="checkbox" name="gnupg_key_<?cs var:key.id ?>"
|
?><tr><td><input type="checkbox" name="gnupg_key_<?cs var:key.id ?>"
|
||||||
id="gnupg_key_<?cs var:key.id ?>" /></td>
|
id="gnupg_key_<?cs var:key.id ?>" /></td>
|
||||||
|
@ -36,10 +36,13 @@
|
||||||
?></a></td>
|
?></a></td>
|
||||||
</tr>
|
</tr>
|
||||||
<?cs /each ?>
|
<?cs /each ?>
|
||||||
</table>
|
</table></li>
|
||||||
|
|
||||||
<input type="hidden" name="action" value="gnupg_do" />
|
<li><input type="hidden" name="action" value="gnupg_do" />
|
||||||
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.DeletePublicKey) ?></button>
|
<input type="hidden" name="gnupg_subset" value="public" />
|
||||||
|
<button type="submit" name="send" value="do"><?cs
|
||||||
|
var:html_escape(Lang.Buttons.DeletePublicKey) ?></button></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
<?cs else ?>
|
<?cs else ?>
|
||||||
|
|
|
@ -13,10 +13,10 @@
|
||||||
|
|
||||||
<?cs if:subcount(Data.List.gnupg_keys.secret) > 0 ?>
|
<?cs if:subcount(Data.List.gnupg_keys.secret) > 0 ?>
|
||||||
|
|
||||||
<?cs call:form_header("gnupg_secret_keys", "") ?>
|
<?cs call:form_header("gnupg_secret_keys") ?>
|
||||||
<input type="hidden" name="gnupg_subset" value="secret" />
|
|
||||||
|
|
||||||
<table class="gnupg_keys">
|
<ul>
|
||||||
|
<li><table class="gnupg_keys">
|
||||||
<?cs each:key = Data.List.gnupg_keys.secret
|
<?cs each:key = Data.List.gnupg_keys.secret
|
||||||
?><tr><td><input type="checkbox" name="gnupg_key_<?cs var:key.id ?>"
|
?><tr><td><input type="checkbox" name="gnupg_key_<?cs var:key.id ?>"
|
||||||
id="gnupg_key_<?cs var:key.id ?>" /></td>
|
id="gnupg_key_<?cs var:key.id ?>" /></td>
|
||||||
|
@ -36,10 +36,14 @@
|
||||||
?></a></td>
|
?></a></td>
|
||||||
</tr>
|
</tr>
|
||||||
<?cs /each ?>
|
<?cs /each ?>
|
||||||
</table>
|
</table></li>
|
||||||
|
|
||||||
<input type="hidden" name="action" value="gnupg_do" />
|
<li>
|
||||||
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.DeleteSecretKey) ?></button>
|
<input type="hidden" name="gnupg_subset" value="secret" />
|
||||||
|
<input type="hidden" name="action" value="gnupg_do" />
|
||||||
|
<button type="submit" name="send" value="do"><?cs
|
||||||
|
var:html_escape(Lang.Buttons.DeleteSecretKey) ?></button></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
<?cs else ?>
|
<?cs else ?>
|
||||||
|
|
|
@ -16,10 +16,23 @@
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div id="top">
|
<table id="top"><tr>
|
||||||
<div id="perm_nav">
|
<td id="title">
|
||||||
<?cs var:Config.PageTitle ?>
|
<h1>ezmlm-web</h1>
|
||||||
</div>
|
<?cs if:Config.PageTitle
|
||||||
<h1>ezmlm-web</h1>
|
?><p><?cs var:Config.PageTitle ?></p><?cs /if ?>
|
||||||
</div>
|
</td>
|
||||||
|
<td id="perm_nav">
|
||||||
|
<?cs if:subcount(Config.PageLinks) > 0 ?><p><?cs
|
||||||
|
loop: x = #0, subcount(Config.PageLinks)-1, #1
|
||||||
|
?><?cs if:x > #0 ?> | <?cs /if
|
||||||
|
?><a href="<?cs var:html_escape(Config.PageLinks[x].url)
|
||||||
|
?>"><?cs var:html_escape(Config.PageLinks[x].name)
|
||||||
|
?></a>
|
||||||
|
<?cs /loop ?></p><?cs /if ?>
|
||||||
|
<?cs if:UI.Top.Language || UI.Top.Interface ?>
|
||||||
|
<?cs include: TemplateDir + '/interface_select.cs' ?>
|
||||||
|
<?cs /if ?>
|
||||||
|
</td>
|
||||||
|
</tr></table>
|
||||||
|
|
||||||
|
|
|
@ -1,21 +1,39 @@
|
||||||
<!-- allows the user to change the interface style -->
|
<!-- allows the user to change the interface style and the language-->
|
||||||
<?cs if:subcount(Config.UI.Interfaces) > 0 ?>
|
<?cs if:((subcount(Config.UI.Interfaces) > 0) && UI.Top.Interface)
|
||||||
|
|| ((subcount(Config.UI.Languages) > 0) && UI.Top.Language) ?>
|
||||||
|
|
||||||
<?cs call:form_header("select_interface", "template") ?>
|
<?cs call:form_header_ignore("select_interface", "template", "web_lang", "")
|
||||||
|
|
||||||
<?cs if:Data.List.Name ?><input type="hidden" name="action"
|
?><?cs if:Data.List.Name ?><input type="hidden" name="action"
|
||||||
value="subscribers" /><?cs /if ?>
|
value="subscribers" /><?cs /if
|
||||||
|
|
||||||
|
?><?cs if:subcount(Config.UI.Interfaces) > 0 ?>
|
||||||
<font class="no_link"><?cs
|
<font class="no_link"><?cs
|
||||||
var:html_escape(Lang.Menue.Interface) ?>:</font><br/>
|
var:html_escape(Lang.Menue.Language) ?>:</font>
|
||||||
|
<select name="web_lang" size="0">
|
||||||
|
<?cs each: tlang = Config.UI.Languages
|
||||||
|
?><option value="<?cs var:name(tlang) ?>"<?cs
|
||||||
|
if:name(tlang) == Config.UI.LinkAttrs.web_lang
|
||||||
|
?> selected="selected"<?cs /if?>><?cs
|
||||||
|
var:html_escape(tlang) ?></option>
|
||||||
|
<?cs /each ?></select><?cs
|
||||||
|
else ?>
|
||||||
|
<input type="hidden" name="web_lang" value="<?cs
|
||||||
|
var:Config.UI.LinkAttrs.web_lang ?>" /><?cs /if
|
||||||
|
?><?cs if:subcount(Config.UI.Interfaces) > 0 ?>
|
||||||
|
<font class="no_link"><?cs
|
||||||
|
var:html_escape(Lang.Menue.Interface) ?>:</font>
|
||||||
<select name="template" size="0">
|
<select name="template" size="0">
|
||||||
<?cs each: ttemp = Config.UI.Interfaces
|
<?cs each: ttemp = Config.UI.Interfaces
|
||||||
?><option value="<?cs var:name(ttemp) ?>"<?cs
|
?><option value="<?cs var:name(ttemp) ?>"<?cs
|
||||||
if:name(ttemp) == Config.UI.LinkAttrs.template
|
if:name(ttemp) == Config.UI.LinkAttrs.template
|
||||||
?> selected="selected"<?cs /if?>><?cs
|
?> selected="selected"<?cs /if?>><?cs
|
||||||
var:html_escape(Lang.Misc.Interfaces[ttemp]) ?></option>
|
var:html_escape(Lang.Misc.Interfaces[ttemp]) ?></option>
|
||||||
<?cs /each ?>
|
<?cs /each ?></select><?cs
|
||||||
</select> <button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.InterfaceSet) ?></button>
|
else ?>
|
||||||
|
<input type="hidden" name="template" value="<?cs
|
||||||
|
var:Config.UI.LinkAttrs.template ?>" /><?cs /if
|
||||||
|
?><button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.InterfaceSet) ?></button>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<?cs /if ?>
|
<?cs /if ?>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<!-- allows the user to change the interface language (not of the list!) -->
|
<!-- allows the user to change the interface language (not of the list!) -->
|
||||||
<?cs if:subcount(Config.UI.Languages) > 0 ?>
|
<?cs if:subcount(Config.UI.Languages) > 0 ?>
|
||||||
|
|
||||||
<?cs call:form_header("select_language", "web_lang") ?>
|
<?cs call:form_header("select_language") ?>
|
||||||
|
|
||||||
<?cs if:Data.List.Name ?><input type="hidden" name="action"
|
<?cs if:Data.List.Name ?><input type="hidden" name="action"
|
||||||
value="subscribers" /><?cs /if ?>
|
value="subscribers" /><?cs /if ?>
|
||||||
|
|
|
@ -5,12 +5,14 @@
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend><?cs var:html_escape(Lang.Legend.ListCreate) ?> </legend>
|
<legend><?cs var:html_escape(Lang.Legend.ListCreate) ?> </legend>
|
||||||
|
|
||||||
<?cs call:form_header("list_create", "") ?>
|
<?cs call:form_header("list_create") ?>
|
||||||
|
|
||||||
<?cs call:show_options(UI.Options.Create) ?>
|
<?cs call:show_options(UI.Options.Create) ?>
|
||||||
|
|
||||||
|
<ul><li>
|
||||||
<input type="hidden" name="action" value="list_create_do" />
|
<input type="hidden" name="action" value="list_create_do" />
|
||||||
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.Create) ?></button>
|
<button type="submit" name="send" value="do"><?cs
|
||||||
|
var:html_escape(Lang.Buttons.Create) ?></button></li></ul>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
|
@ -9,10 +9,14 @@
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend><?cs var:html_escape(Lang.Legend.ListDelete) ?> </legend>
|
<legend><?cs var:html_escape(Lang.Legend.ListDelete) ?> </legend>
|
||||||
|
|
||||||
<p><?cs var:html_escape(Lang.Misc.ConfirmDelete) ?></p>
|
<?cs call:form_header("delete_list_confirm") ?>
|
||||||
<?cs call:form_header("delete_list_confirm", "") ?>
|
<ul>
|
||||||
<input type="hidden" name="action" value="list_delete_do" />
|
<li><?cs var:html_escape(Lang.Misc.ConfirmDelete) ?></li>
|
||||||
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.ConfirmDeletion) ?></button>
|
<li><input type="hidden" name="action" value="list_delete_do" />
|
||||||
|
<button type="submit" name="send" value="do"><?cs
|
||||||
|
var:html_escape(Lang.Buttons.ConfirmDeletion) ?></button>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
|
@ -101,14 +101,15 @@ def:link(attr1, value1, attr2, value2, attr3, value3)
|
||||||
/def ?><?cs
|
/def ?><?cs
|
||||||
|
|
||||||
|
|
||||||
def:form_header_generic(form_name, ignore_attr, enctype)
|
def:form_header_generic(form_name, enctype, ignore1, ignore2, ignore3)
|
||||||
?><?cs # somehow perl's CGI has problems to evaluate the querystring of a
|
?><?cs # somehow perl's CGI has problems to evaluate the querystring of a
|
||||||
form action - thus we have to use hidden input fields instead
|
form action - thus we have to use hidden input fields instead
|
||||||
?><form accept-charset="utf-8" name="<?cs var:html_escape(form_name)
|
?><form accept-charset="utf-8" name="<?cs var:html_escape(form_name)
|
||||||
?>" method="post" action="<?cs var:ScriptName
|
?>" method="post" action="<?cs var:ScriptName
|
||||||
?>" enctype="<?cs var:enctype ?>">
|
?>" enctype="<?cs var:enctype ?>">
|
||||||
<?cs each:attr = Config.UI.LinkAttrs ?><?cs
|
<?cs each:attr = Config.UI.LinkAttrs ?><?cs
|
||||||
if:name(attr) != ignore_attr ?><input type="hidden" name="<?cs
|
if:(name(attr) != ignore1) && (name(attr) != ignore2)
|
||||||
|
&& (name(attr) != ignore3) ?><input type="hidden" name="<?cs
|
||||||
var:html_escape(name(attr)) ?>" value="<?cs
|
var:html_escape(name(attr)) ?>" value="<?cs
|
||||||
var:html_escape(attr) ?>" /><?cs /if ?>
|
var:html_escape(attr) ?>" /><?cs /if ?>
|
||||||
<?cs /each ?><?cs
|
<?cs /each ?><?cs
|
||||||
|
@ -117,15 +118,21 @@ def:form_header_generic(form_name, ignore_attr, enctype)
|
||||||
/def ?><?cs
|
/def ?><?cs
|
||||||
|
|
||||||
|
|
||||||
def:form_header(form_name, ignore_attr)
|
def:form_header(form_name)
|
||||||
?><?cs call:form_header_generic(form_name, ignore_attr,
|
?><?cs call:form_header_generic(form_name,
|
||||||
"application/x-www-form-urlencoded") ?><?cs
|
"application/x-www-form-urlencoded", '', '', '') ?><?cs
|
||||||
/def ?><?cs
|
/def ?><?cs
|
||||||
|
|
||||||
|
|
||||||
def:form_header_upload(form_name, ignore_attr)
|
def:form_header_ignore(form_name, ignore1, ignore2, ignore3)
|
||||||
?><?cs call:form_header_generic(form_name, ignore_attr,
|
?><?cs call:form_header_generic(form_name,
|
||||||
"multipart/form-data") ?><?cs
|
"application/x-www-form-urlencoded", ignore1, ignore2, ignore3)
|
||||||
|
?><?cs /def ?><?cs
|
||||||
|
|
||||||
|
|
||||||
|
def:form_header_upload(form_name)
|
||||||
|
?><?cs call:form_header_generic(form_name, "multipart/form-data",
|
||||||
|
'', '', '') ?><?cs
|
||||||
/def ?><?cs
|
/def ?><?cs
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,8 @@
|
||||||
<?cs /if ?>
|
<?cs /if ?>
|
||||||
|
|
||||||
<?cs if:((subcount(Data.Lists) > 0) && (UI.Navigation.ListSelect == 1))
|
<?cs if:((subcount(Data.Lists) > 0) && (UI.Navigation.ListSelect == 1))
|
||||||
|| (Data.Permissions.Create && (UI.Navigation.ListCreate == 1)) ?>
|
|| (Data.Permissions.Create && (UI.Navigation.ListCreate == 1))
|
||||||
|
|| ((subcount(Data.Domains) > 0) && (UI.Navigation.DomainSelect == 1)) ?>
|
||||||
<li><hr/></li>
|
<li><hr/></li>
|
||||||
<?cs /if ?>
|
<?cs /if ?>
|
||||||
|
|
||||||
|
@ -189,18 +190,6 @@
|
||||||
<li><hr/></li>
|
<li><hr/></li>
|
||||||
<?cs /if ?>
|
<?cs /if ?>
|
||||||
|
|
||||||
<?cs if:UI.Navigation.Language || UI.Navigation.Interface ?>
|
|
||||||
<?cs if:UI.Navigation.Language ?>
|
|
||||||
<li><?cs include:TemplateDir + '/language_select.cs' ?></li>
|
|
||||||
<?cs /if ?>
|
|
||||||
<?cs if:UI.Navigation.Interface ?>
|
|
||||||
<li><?cs include:TemplateDir + '/interface_select.cs' ?></li>
|
|
||||||
<?cs /if ?>
|
|
||||||
|
|
||||||
<li><hr/></li>
|
|
||||||
|
|
||||||
<?cs /if ?>
|
|
||||||
|
|
||||||
<?cs if:UI.Navigation.Help
|
<?cs if:UI.Navigation.Help
|
||||||
?><li><a href="http://www.ezmlm.org/ezman/index.html#toc1" target="_blank"
|
?><li><a href="http://www.ezmlm.org/ezman/index.html#toc1" target="_blank"
|
||||||
title="<?cs var:html_escape(Lang.Misc.HelpLink) ?>"><?cs
|
title="<?cs var:html_escape(Lang.Misc.HelpLink) ?>"><?cs
|
||||||
|
|
|
@ -6,17 +6,37 @@
|
||||||
<legend><?cs var:html_escape(Lang.Legend.SubscribeLog) ?> </legend>
|
<legend><?cs var:html_escape(Lang.Legend.SubscribeLog) ?> </legend>
|
||||||
|
|
||||||
<?cs if:subcount(Data.List.SubscribeLog) > 0 ?>
|
<?cs if:subcount(Data.List.SubscribeLog) > 0 ?>
|
||||||
<table>
|
<table class="subscribe_log">
|
||||||
<?cs each:x = Data.List.SubscribeLog ?>
|
|
||||||
<tr>
|
<tr>
|
||||||
<td><?cs var:html_escape(x.address) ?></td>
|
<th><?cs var:html_escape(Lang.Misc.MailAddress) ?></th>
|
||||||
<td><?cs var:html_escape(x.text) ?></td>
|
<th><?cs var:html_escape(Lang.Misc.SubscribeAction) ?></th>
|
||||||
<td><?cs var:html_escape(x.date) ?></td>
|
<th><?cs var:html_escape(Lang.Misc.SubscribeActionDetails) ?></th>
|
||||||
|
<th><?cs var:html_escape(Lang.Misc.Date) ?></th>
|
||||||
</tr>
|
</tr>
|
||||||
<?cs /each ?>
|
<?cs loop:x = subcount(Data.List.SubscribeLog)-1, #0, -1 ?><?cs
|
||||||
|
# we print the lines backward ?>
|
||||||
|
<tr>
|
||||||
|
<td><?cs var:html_escape(Data.List.SubscribeLog[x].address) ?></td>
|
||||||
|
<td><?cs if:Data.List.SubscribeLog[x].action == '+' ?><?cs
|
||||||
|
var:html_escape(Lang.Misc.SubscribeActions.add) ?><?cs
|
||||||
|
elif:Data.List.SubscribeLog[x].action == '-' ?><?cs
|
||||||
|
var:html_escape(Lang.Misc.SubscribeActions.remove) ?><?cs
|
||||||
|
else ?><?cs var:html_escape(Lang.Misc.SubscribeActions.unknown)
|
||||||
|
?><?cs /if ?></td>
|
||||||
|
<td><?cs if:Data.List.SubscribeLog[x].details == 'manual' ?><?cs
|
||||||
|
var:html_escape(Lang.Misc.SubscribeActions.manual) ?><?cs
|
||||||
|
elif:Data.List.SubscribeLog[x].details == 'mod' ?><?cs
|
||||||
|
var:html_escape(Lang.Misc.SubscribeActions.mod) ?><?cs
|
||||||
|
elif:Data.List.SubscribeLog[x].details == 'auto' ?><?cs
|
||||||
|
var:html_escape(Lang.Misc.SubscribeActions.auto) ?><?cs
|
||||||
|
else ?><?cs var:html_escape(Lang.Misc.SubscribeActions.unknown)
|
||||||
|
?><?cs /if ?></td>
|
||||||
|
<td><?cs var:html_escape(Data.List.SubscribeLog[x].date) ?></td>
|
||||||
|
</tr>
|
||||||
|
<?cs /loop ?>
|
||||||
</table>
|
</table>
|
||||||
<?cs else ?>
|
<?cs else ?>
|
||||||
<?cs var:html_escape(Lang.WarningMessage.EmptyList) ?>
|
<p><?cs var:html_escape(Lang.WarningMessage.EmptyList) ?></p>
|
||||||
<?cs /if ?>
|
<?cs /if ?>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend><?cs var:html_escape(Lang.Legend.RelevantOptions) ?> </legend>
|
<legend><?cs var:html_escape(Lang.Legend.RelevantOptions) ?> </legend>
|
||||||
|
|
||||||
<?cs call:form_header("config_subscription", "") ?>
|
<?cs call:form_header("config_subscription") ?>
|
||||||
|
|
||||||
<input type="hidden" name="part" value="<?cs var:Data.List.PartType ?>" />
|
<input type="hidden" name="part" value="<?cs var:Data.List.PartType ?>" />
|
||||||
|
|
||||||
|
@ -75,7 +75,7 @@
|
||||||
|
|
||||||
<table class="subscribers"><tr>
|
<table class="subscribers"><tr>
|
||||||
<?cs if:subcount(Data.List.Subscribers) > 0 ?>
|
<?cs if:subcount(Data.List.Subscribers) > 0 ?>
|
||||||
<td><?cs call:form_header("remove_subscriber", "") ?>
|
<td><?cs call:form_header("remove_subscriber") ?>
|
||||||
<?cs if:Data.List.PartType ?>
|
<?cs if:Data.List.PartType ?>
|
||||||
<input type="hidden" name="part" value="<?cs var:Data.List.PartType ?>" />
|
<input type="hidden" name="part" value="<?cs var:Data.List.PartType ?>" />
|
||||||
<?cs /if ?>
|
<?cs /if ?>
|
||||||
|
@ -98,19 +98,20 @@
|
||||||
<li><input type="hidden" name="action" value="address_del" />
|
<li><input type="hidden" name="action" value="address_del" />
|
||||||
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.DeleteAddress) ?></button></li>
|
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.DeleteAddress) ?></button></li>
|
||||||
</ul></form>
|
</ul></form>
|
||||||
<ul>
|
<?cs call:form_header("download_subscribers") ?>
|
||||||
<li><?cs call:form_header("download_subscribers", "") ?>
|
<ul><li>
|
||||||
<input type="hidden" name="action" value="download_subscribers" />
|
<input type="hidden" name="action" value="download_subscribers" />
|
||||||
<?cs if:Data.List.PartType ?>
|
<?cs if:Data.List.PartType ?>
|
||||||
<input type="hidden" name="part" value="<?cs
|
<input type="hidden" name="part" value="<?cs
|
||||||
var:Data.List.PartType ?>" /><?cs /if ?>
|
var:Data.List.PartType ?>" /><?cs /if ?>
|
||||||
<button type="submit" name="send" value="do"><?cs
|
<button type="submit" name="send" value="do"><?cs
|
||||||
var:html_escape(Lang.Buttons.DownloadSubscribersList)
|
var:html_escape(Lang.Buttons.DownloadSubscribersList)
|
||||||
?></button></form></li>
|
?></button></li>
|
||||||
</ul></td>
|
</ul></form>
|
||||||
|
</td>
|
||||||
<?cs /if ?>
|
<?cs /if ?>
|
||||||
|
|
||||||
<td><?cs call:form_header_upload("upload_subscribers", "") ?>
|
<td><?cs call:form_header_upload("upload_subscribers") ?>
|
||||||
<?cs if:Data.List.PartType ?>
|
<?cs if:Data.List.PartType ?>
|
||||||
<input type="hidden" name="part" value="<?cs var:Data.List.PartType ?>" />
|
<input type="hidden" name="part" value="<?cs var:Data.List.PartType ?>" />
|
||||||
<?cs /if ?>
|
<?cs /if ?>
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
<?cs var:html_escape(Lang.Introduction.ResetTextFile) ?>
|
<?cs var:html_escape(Lang.Introduction.ResetTextFile) ?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<?cs call:form_header("textfile_reset", "") ?>
|
<?cs call:form_header("textfile_reset") ?>
|
||||||
<input type="hidden" name="file" value="<?cs var:Data.List.File.Name ?>">
|
<input type="hidden" name="file" value="<?cs var:Data.List.File.Name ?>">
|
||||||
<input type="hidden" name="action" value="textfile_reset" />
|
<input type="hidden" name="action" value="textfile_reset" />
|
||||||
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.ResetFile) ?></button>
|
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.ResetFile) ?></button>
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend><?cs var:html_escape(Lang.Legend.TextFileEdit) ?> </legend>
|
<legend><?cs var:html_escape(Lang.Legend.TextFileEdit) ?> </legend>
|
||||||
|
|
||||||
<?cs call:form_header("textfile_reset", "") ?>
|
<?cs call:form_header("textfile_reset") ?>
|
||||||
<input type="hidden" name="file" value="<?cs var:Data.List.File.Name ?>">
|
<input type="hidden" name="file" value="<?cs var:Data.List.File.Name ?>">
|
||||||
|
|
||||||
<p><textarea name="content" rows="13"
|
<p><textarea name="content" rows="13"
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend><?cs var:html_escape(Lang.Legend.TextFiles) ?> </legend>
|
<legend><?cs var:html_escape(Lang.Legend.TextFiles) ?> </legend>
|
||||||
|
|
||||||
<?cs call:form_header("select_textfile", "") ?>
|
<?cs call:form_header("select_textfile") ?>
|
||||||
<ul>
|
<ul>
|
||||||
<?cs if:subcount(Data.List.CustomizedFiles) +
|
<?cs if:subcount(Data.List.CustomizedFiles) +
|
||||||
subcount(Data.List.DefaultFiles) > 0 ?>
|
subcount(Data.List.DefaultFiles) > 0 ?>
|
||||||
|
|
|
@ -1,5 +1,10 @@
|
||||||
UI {
|
UI {
|
||||||
|
|
||||||
|
Top {
|
||||||
|
Language = 1
|
||||||
|
Interface = 1
|
||||||
|
}
|
||||||
|
|
||||||
Navigation {
|
Navigation {
|
||||||
DomainSelect = 1
|
DomainSelect = 1
|
||||||
ListSelect = 1
|
ListSelect = 1
|
||||||
|
@ -25,8 +30,6 @@ UI {
|
||||||
ListDelete = 1
|
ListDelete = 1
|
||||||
SubscribeLog = 1
|
SubscribeLog = 1
|
||||||
GnupgConvert = 1
|
GnupgConvert = 1
|
||||||
Language = 1
|
|
||||||
Interface = 1
|
|
||||||
Help = 1
|
Help = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,10 @@
|
||||||
UI {
|
UI {
|
||||||
|
|
||||||
|
Top {
|
||||||
|
Language = 1
|
||||||
|
Interface = 1
|
||||||
|
}
|
||||||
|
|
||||||
Navigation {
|
Navigation {
|
||||||
DomainSelect = 1
|
DomainSelect = 1
|
||||||
ListSelect = 1
|
ListSelect = 1
|
||||||
|
@ -33,8 +38,6 @@ UI {
|
||||||
ListDelete = 1
|
ListDelete = 1
|
||||||
SubscribeLog = 1
|
SubscribeLog = 1
|
||||||
GnupgConvert = 1
|
GnupgConvert = 1
|
||||||
Language = 1
|
|
||||||
Interface = 1
|
|
||||||
Help = 1
|
Help = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,10 @@
|
||||||
UI {
|
UI {
|
||||||
|
|
||||||
|
Top {
|
||||||
|
Language = 1
|
||||||
|
Interface = 1
|
||||||
|
}
|
||||||
|
|
||||||
Navigation {
|
Navigation {
|
||||||
DomainSelect = 1
|
DomainSelect = 1
|
||||||
ListSelect = 1
|
ListSelect = 1
|
||||||
|
@ -32,8 +37,6 @@ UI {
|
||||||
ListDelete = 1
|
ListDelete = 1
|
||||||
SubscribeLog = 1
|
SubscribeLog = 1
|
||||||
GnupgConvert = 1
|
GnupgConvert = 1
|
||||||
Language = 1
|
|
||||||
Interface = 1
|
|
||||||
Help = 1
|
Help = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,13 +8,15 @@ body {
|
||||||
|
|
||||||
a { text-decoration: none; }
|
a { text-decoration: none; }
|
||||||
|
|
||||||
|
button, select { cursor: pointer; }
|
||||||
|
|
||||||
/***************** navbar *************************/
|
/***************** navgation bar *************************/
|
||||||
|
|
||||||
#nav_bar {
|
#nav_bar {
|
||||||
|
clear: left;
|
||||||
float: left;
|
float: left;
|
||||||
width: 20%;
|
width: 20%;
|
||||||
color: inherit;
|
color: black;
|
||||||
background-color: #3465a4;
|
background-color: #3465a4;
|
||||||
background-image: url(horiz_grad_blue.png);
|
background-image: url(horiz_grad_blue.png);
|
||||||
margin: 1%;
|
margin: 1%;
|
||||||
|
@ -27,6 +29,7 @@ a { text-decoration: none; }
|
||||||
|
|
||||||
#nav_bar hr {
|
#nav_bar hr {
|
||||||
margin: 10px 30px 10px 10px;
|
margin: 10px 30px 10px 10px;
|
||||||
|
font-size: 0%; /* otherwise IE6 adds a huge gap above */
|
||||||
}
|
}
|
||||||
|
|
||||||
#nav_bar ul {
|
#nav_bar ul {
|
||||||
|
@ -63,7 +66,7 @@ a { text-decoration: none; }
|
||||||
}
|
}
|
||||||
|
|
||||||
#nav_bar a {
|
#nav_bar a {
|
||||||
color: inherit;
|
color: black; /* necessary: IE6 ignores 'inherit' */
|
||||||
background-color: inherit;
|
background-color: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -72,35 +75,6 @@ a { text-decoration: none; }
|
||||||
background-color: inherit;
|
background-color: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
#nav_bar form select {
|
|
||||||
color: inherit;
|
|
||||||
background-color: #729fcf;
|
|
||||||
border-width: 1px;
|
|
||||||
border-style: solid;
|
|
||||||
border-color: #557353;
|
|
||||||
}
|
|
||||||
|
|
||||||
#nav_bar form button {
|
|
||||||
color: inherit;
|
|
||||||
background-color: #babdb6;
|
|
||||||
border-width: 1px;
|
|
||||||
border-style: solid;
|
|
||||||
border-color: #557353;
|
|
||||||
}
|
|
||||||
|
|
||||||
#nav_bar form button:hover {
|
|
||||||
color: #555753;
|
|
||||||
background-color: #d3d7cf;
|
|
||||||
border-width: 1px;
|
|
||||||
border-style: solid;
|
|
||||||
border-color: #557353;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
#nav_bar form {
|
|
||||||
margin: 7px 0px 7px 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***************************** header **************************/
|
/***************************** header **************************/
|
||||||
|
|
||||||
|
@ -109,39 +83,80 @@ a { text-decoration: none; }
|
||||||
background-color: #cc0000;
|
background-color: #cc0000;
|
||||||
background-image: url(vert_grad_red.png);
|
background-image: url(vert_grad_red.png);
|
||||||
background-position: top;
|
background-position: top;
|
||||||
|
width: 100%;
|
||||||
|
margin: 0;
|
||||||
|
padding: 2px 3px 2px 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#top * {
|
#top * {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
#top h1 {
|
#title {
|
||||||
text-align: left;
|
text-align: left;
|
||||||
border-bottom: solid 2px #ffffff;
|
}
|
||||||
padding: 5px;
|
|
||||||
font-weight: bold;
|
#title * {
|
||||||
letter-spacing: -1px;
|
padding: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#top #perm_nav {
|
#title h1 {
|
||||||
float: right;
|
|
||||||
padding-right: 5px;
|
|
||||||
font-size: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#top #perm_nav a {
|
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
padding-left: 2px;
|
letter-spacing: -1px;
|
||||||
padding-right: 2px;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#top #perm_nav a:hover {
|
#perm_nav {
|
||||||
color: #e9b96e;
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
#perm_nav * {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#perm_nav p {
|
||||||
|
padding: 1px 0 2px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#perm_nav a {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #eeeeec;
|
||||||
background-color: inherit;
|
background-color: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#perm_nav a:hover {
|
||||||
|
color: #fce94f;
|
||||||
|
background-color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
#top form {
|
||||||
|
font-size: 85%;
|
||||||
|
margin: 2px 0 2px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#top form select {
|
||||||
|
background-color: #d3d7c4;
|
||||||
|
margin-right: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#top form select:hover {
|
||||||
|
background-color: #eeeeec;
|
||||||
|
}
|
||||||
|
|
||||||
|
#top form button {
|
||||||
|
border-color: #ef2929;
|
||||||
|
border-style: groove;
|
||||||
|
background-color: #f57900;
|
||||||
|
margin-left: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#top form button:hover {
|
||||||
|
background-color: #fcaf3e;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/******************************* content ************************/
|
/******************************* content ************************/
|
||||||
|
|
||||||
|
@ -171,6 +186,7 @@ a { text-decoration: none; }
|
||||||
#main_content ul {
|
#main_content ul {
|
||||||
line-height: 1.8em;
|
line-height: 1.8em;
|
||||||
list-style: none;
|
list-style: none;
|
||||||
|
margin-left: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#main_content ul li {
|
#main_content ul li {
|
||||||
|
@ -185,11 +201,12 @@ a { text-decoration: none; }
|
||||||
padding-bottom: 0px;
|
padding-bottom: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#main_content fieldset {
|
#main_content > fieldset { /* sub-fieldsets do not need margin/padding */
|
||||||
margin-top: 0.5%;
|
padding: 5px 5px 10px 5px; /* IE6 acts weird for %-values */
|
||||||
margin-bottom: 1%;
|
}
|
||||||
padding-top: 1%;
|
|
||||||
padding-bottom: 1.5%;
|
#main_content fieldset p {
|
||||||
|
margin-left: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#main_content fieldset form ul { padding-left: 10px; }
|
#main_content fieldset form ul { padding-left: 10px; }
|
||||||
|
@ -202,16 +219,26 @@ a { text-decoration: none; }
|
||||||
text-align: left;
|
text-align: left;
|
||||||
line-height: 1.2em;
|
line-height: 1.2em;
|
||||||
border-width: 0;
|
border-width: 0;
|
||||||
/* padding-left: 2%; */
|
|
||||||
padding-right: 0;
|
padding-right: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#main_content table.list_select td {
|
||||||
|
padding-left: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#main_content table.subscribe_log {
|
||||||
|
border-collapse: separate;
|
||||||
|
border-spacing: 10px 3px;
|
||||||
|
}
|
||||||
|
|
||||||
#main_content div.introduction {
|
#main_content div.introduction {
|
||||||
font-size: 80%;
|
font-size: 80%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#main_content div.warning, div.error, div.success {
|
#main_content div.warning,
|
||||||
margin-left: 10%;
|
#main_content div.error,
|
||||||
|
#main_content div.success {
|
||||||
|
margin-left: 30%; /* we have to include the width of the nav-bar */
|
||||||
margin-right: 10%;
|
margin-right: 10%;
|
||||||
margin-top: 2%;
|
margin-top: 2%;
|
||||||
margin-bottom: 3%;
|
margin-bottom: 3%;
|
||||||
|
@ -225,14 +252,14 @@ a { text-decoration: none; }
|
||||||
#main_content div.warning,
|
#main_content div.warning,
|
||||||
#main_content div.error {
|
#main_content div.error {
|
||||||
color: #2e3436;
|
color: #2e3436;
|
||||||
background-color: inherit;
|
background-color: inherit; /* just to avaid css syntax warnings */
|
||||||
}
|
}
|
||||||
|
|
||||||
#main_content div.warning { background-color: #40d070; }
|
#main_content div.success { background-color: #40d070; }
|
||||||
|
|
||||||
#main_content div.warning { background-color: #e0a0a0; }
|
#main_content div.warning { background-color: #ef2929; }
|
||||||
|
|
||||||
#main_content div.error { background-color: #cc0000; }
|
#main_content div.error { background-color: #a40000; }
|
||||||
|
|
||||||
#main_content table.gnupg_keys td {
|
#main_content table.gnupg_keys td {
|
||||||
padding-right: 10px;
|
padding-right: 10px;
|
||||||
|
@ -255,7 +282,6 @@ a { text-decoration: none; }
|
||||||
background-color: #d3d7cf;
|
background-color: #d3d7cf;
|
||||||
border: 1px dotted #555753;
|
border: 1px dotted #555753;
|
||||||
font-size: 90%;
|
font-size: 90%;
|
||||||
cursor: pointer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#main_content button:hover {
|
#main_content button:hover {
|
||||||
|
@ -263,7 +289,6 @@ a { text-decoration: none; }
|
||||||
background-color: #d3d7cf;
|
background-color: #d3d7cf;
|
||||||
border: 1px dotted #ace149;
|
border: 1px dotted #ace149;
|
||||||
font-size: 90%;
|
font-size: 90%;
|
||||||
cursor: pointer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************** footer ******************************/
|
/************************** footer ******************************/
|
||||||
|
@ -276,7 +301,7 @@ a { text-decoration: none; }
|
||||||
clear: left; /* do not overlap with left navigation bar */
|
clear: left; /* do not overlap with left navigation bar */
|
||||||
text-align: center;
|
text-align: center;
|
||||||
font-size: 90%;
|
font-size: 90%;
|
||||||
margin: 0px;
|
margin: 10px 0 0 0;
|
||||||
padding: 3px;
|
padding: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@
|
||||||
id="stop3683" />
|
id="stop3683" />
|
||||||
<stop
|
<stop
|
||||||
id="stop5459"
|
id="stop5459"
|
||||||
offset="0.5"
|
offset="0.25"
|
||||||
style="stop-color:#ef2929;stop-opacity:1;" />
|
style="stop-color:#ef2929;stop-opacity:1;" />
|
||||||
<stop
|
<stop
|
||||||
style="stop-color:#ef2929;stop-opacity:1;"
|
style="stop-color:#ef2929;stop-opacity:1;"
|
||||||
|
@ -56,7 +56,7 @@
|
||||||
style="stop-color:#3465a4;stop-opacity:1;" />
|
style="stop-color:#3465a4;stop-opacity:1;" />
|
||||||
<stop
|
<stop
|
||||||
style="stop-color:#729fcf;stop-opacity:1;"
|
style="stop-color:#729fcf;stop-opacity:1;"
|
||||||
offset="0.5"
|
offset="0.25"
|
||||||
id="stop2794" />
|
id="stop2794" />
|
||||||
<stop
|
<stop
|
||||||
id="stop2792"
|
id="stop2792"
|
||||||
|
@ -72,23 +72,23 @@
|
||||||
x2="450.08337"
|
x2="450.08337"
|
||||||
y2="624.87115"
|
y2="624.87115"
|
||||||
gradientUnits="userSpaceOnUse"
|
gradientUnits="userSpaceOnUse"
|
||||||
gradientTransform="translate(0,-213.9658)" />
|
gradientTransform="matrix(2,0,0,1,-65.36665,-117.8995)" />
|
||||||
<linearGradient
|
<linearGradient
|
||||||
inkscape:collect="always"
|
inkscape:collect="always"
|
||||||
xlink:href="#linearGradient3681"
|
xlink:href="#linearGradient3681"
|
||||||
id="linearGradient3687"
|
id="linearGradient3687"
|
||||||
x1="47.064362"
|
x1="47.053432"
|
||||||
y1="119.26222"
|
y1="123.98675"
|
||||||
x2="147.06436"
|
x2="147.06433"
|
||||||
y2="119.26222"
|
y2="123.98675"
|
||||||
gradientUnits="userSpaceOnUse"
|
gradientUnits="userSpaceOnUse"
|
||||||
gradientTransform="matrix(1,0,0,1.25,22.19786,-256.1422)" />
|
gradientTransform="matrix(4,0,0,1.25,270.9353,58.25642)" />
|
||||||
<linearGradient
|
<linearGradient
|
||||||
inkscape:collect="always"
|
inkscape:collect="always"
|
||||||
xlink:href="#linearGradient3680"
|
xlink:href="#linearGradient3680"
|
||||||
id="linearGradient2793"
|
id="linearGradient2793"
|
||||||
gradientUnits="userSpaceOnUse"
|
gradientUnits="userSpaceOnUse"
|
||||||
gradientTransform="matrix(2,0,0,1,-60.99997,50.21641)"
|
gradientTransform="matrix(2,0,0,1,-65.36662,159.3826)"
|
||||||
x1="50.083374"
|
x1="50.083374"
|
||||||
y1="624.87115"
|
y1="624.87115"
|
||||||
x2="450.08337"
|
x2="450.08337"
|
||||||
|
@ -104,9 +104,9 @@
|
||||||
objecttolerance="10"
|
objecttolerance="10"
|
||||||
inkscape:pageopacity="0.0"
|
inkscape:pageopacity="0.0"
|
||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:zoom="0.45801722"
|
inkscape:zoom="0.84666115"
|
||||||
inkscape:cx="372.04724"
|
inkscape:cx="287.3556"
|
||||||
inkscape:cy="526.18109"
|
inkscape:cy="378.57053"
|
||||||
inkscape:document-units="px"
|
inkscape:document-units="px"
|
||||||
inkscape:current-layer="layer1"
|
inkscape:current-layer="layer1"
|
||||||
inkscape:window-width="1014"
|
inkscape:window-width="1014"
|
||||||
|
@ -174,16 +174,19 @@
|
||||||
<rect
|
<rect
|
||||||
style="opacity:1;fill:url(#linearGradient3687);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
style="opacity:1;fill:url(#linearGradient3687);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
id="rect1890"
|
id="rect1890"
|
||||||
width="100"
|
|
||||||
height="100"
|
|
||||||
x="69.262222"
|
|
||||||
y="-157.06436"
|
|
||||||
transform="matrix(0,1,-1,0,0,0)" />
|
|
||||||
<rect
|
|
||||||
y="370.9054"
|
|
||||||
x="50.083374"
|
|
||||||
height="80"
|
|
||||||
width="400"
|
width="400"
|
||||||
|
height="100"
|
||||||
|
x="459.19263"
|
||||||
|
y="157.3343"
|
||||||
|
transform="matrix(0,1,-1,0,0,0)"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90"
|
||||||
|
inkscape:export-filename="/home/lars/subversion/ezmlm-web/trunk/www-data/vert_grad_red.png" />
|
||||||
|
<rect
|
||||||
|
y="466.97165"
|
||||||
|
x="34.800106"
|
||||||
|
height="80"
|
||||||
|
width="800"
|
||||||
id="rect1892"
|
id="rect1892"
|
||||||
style="opacity:1;fill:url(#linearGradient2786);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
style="opacity:1;fill:url(#linearGradient2786);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
inkscape:export-filename="/home/lars/subversion/ezmlm-web/trunk/www-data/horiz_grad_blue.png"
|
inkscape:export-filename="/home/lars/subversion/ezmlm-web/trunk/www-data/horiz_grad_blue.png"
|
||||||
|
@ -192,38 +195,38 @@
|
||||||
<text
|
<text
|
||||||
xml:space="preserve"
|
xml:space="preserve"
|
||||||
style="font-size:32px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
|
style="font-size:32px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
|
||||||
x="52.399776"
|
x="-255.44891"
|
||||||
y="218.3324"
|
y="901.71283"
|
||||||
id="text6346"><tspan
|
id="text6346"><tspan
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
id="tspan6348"
|
id="tspan6348"
|
||||||
x="52.399776"
|
x="-255.44891"
|
||||||
y="218.3324">1x100px</tspan><tspan
|
y="901.71283">1x400px</tspan><tspan
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
x="52.399776"
|
x="-255.44891"
|
||||||
y="258.3324"
|
y="941.71283"
|
||||||
id="tspan6360">90dpi</tspan><tspan
|
id="tspan6360">90dpi</tspan><tspan
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
x="52.399776"
|
x="-255.44891"
|
||||||
y="298.3324"
|
y="981.71283"
|
||||||
id="tspan6350">vert_grad_red.png</tspan></text>
|
id="tspan6350">vert_grad_red.png</tspan></text>
|
||||||
<text
|
<text
|
||||||
id="text6352"
|
id="text6352"
|
||||||
y="508.71448"
|
y="604.78076"
|
||||||
x="53.849804"
|
x="38.566536"
|
||||||
style="font-size:32px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
|
style="font-size:32px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
|
||||||
xml:space="preserve"><tspan
|
xml:space="preserve"><tspan
|
||||||
y="508.71448"
|
y="604.78076"
|
||||||
x="53.849804"
|
x="38.566536"
|
||||||
id="tspan6354"
|
id="tspan6354"
|
||||||
sodipodi:role="line">400x1px</tspan><tspan
|
sodipodi:role="line">800x1px</tspan><tspan
|
||||||
y="548.71448"
|
y="644.78076"
|
||||||
x="53.849804"
|
x="38.566536"
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
id="tspan6358">90dpi</tspan><tspan
|
id="tspan6358">90dpi</tspan><tspan
|
||||||
id="tspan6356"
|
id="tspan6356"
|
||||||
y="588.71448"
|
y="684.78076"
|
||||||
x="53.849804"
|
x="38.566536"
|
||||||
sodipodi:role="line">horiz_grad_blue.png</tspan></text>
|
sodipodi:role="line">horiz_grad_blue.png</tspan></text>
|
||||||
<rect
|
<rect
|
||||||
inkscape:export-ydpi="90"
|
inkscape:export-ydpi="90"
|
||||||
|
@ -233,25 +236,25 @@
|
||||||
id="rect2783"
|
id="rect2783"
|
||||||
width="800"
|
width="800"
|
||||||
height="80"
|
height="80"
|
||||||
x="39.166756"
|
x="34.800106"
|
||||||
y="635.08759" />
|
y="744.25378" />
|
||||||
<text
|
<text
|
||||||
xml:space="preserve"
|
xml:space="preserve"
|
||||||
style="font-size:32px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
|
style="font-size:32px;font-style:normal;font-weight:normal;fill:black;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Charter"
|
||||||
x="42.933186"
|
x="38.566536"
|
||||||
y="772.89667"
|
y="882.06287"
|
||||||
id="text2785"><tspan
|
id="text2785"><tspan
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
id="tspan2787"
|
id="tspan2787"
|
||||||
x="42.933186"
|
x="38.566536"
|
||||||
y="772.89667">800x1px</tspan><tspan
|
y="882.06287">800x1px</tspan><tspan
|
||||||
id="tspan2789"
|
id="tspan2789"
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
x="42.933186"
|
x="38.566536"
|
||||||
y="812.89667">90dpi</tspan><tspan
|
y="922.06287">90dpi</tspan><tspan
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
x="42.933186"
|
x="38.566536"
|
||||||
y="852.89667"
|
y="962.06287"
|
||||||
id="tspan2791">horiz_grad_blue_long.png</tspan></text>
|
id="tspan2791">horiz_grad_blue_long.png</tspan></text>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 9.1 KiB |
Binary file not shown.
Before Width: | Height: | Size: 257 B After Width: | Height: | Size: 705 B |
Binary file not shown.
Before Width: | Height: | Size: 184 B After Width: | Height: | Size: 1.1 KiB |
Loading…
Reference in a new issue