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,10 +64,12 @@ OVERVIEW:
|
|||
Finally, copy the ezmlmwebrc file to one of
|
||||
the following places:
|
||||
1) the home directory of the user that runs ezmlm-web.cgi (~/.ezmlmwebrc)
|
||||
2) the directory, that contains your cgi binary (index.cgi)
|
||||
3) /etc/ezmlm-web/ezmlmwebrc
|
||||
4) /etc/ezmlm/ezmlmwebrc [deprecated]
|
||||
2) /etc/ezmlm-web/ezmlmwebrc
|
||||
3) /etc/ezmlm/ezmlmwebrc [deprecated]
|
||||
(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
|
||||
|
@ -86,6 +88,10 @@ OVERVIEW:
|
|||
i: Execute CGI Scripts and
|
||||
ii: Be access controlled (here I mean both web and user access) by
|
||||
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
|
||||
|
|
25
README
25
README
|
@ -75,7 +75,7 @@ This version of ezmlm-web requires the following;
|
|||
+ File::Copy v2.02
|
||||
+ File::Path v1.07
|
||||
+ Text::ParseWords v3.24
|
||||
+ Locale::gettext v1.01
|
||||
+ Encode (optional)
|
||||
|
||||
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
|
||||
|
@ -86,18 +86,17 @@ versions are expected to work as well.
|
|||
To install perl modules you may use the cpan command line interface.
|
||||
Just run "cpan" and type something like "install Mail::Ezmlm".
|
||||
|
||||
You can download clearsilver (a templating engine - it is required since
|
||||
ezmlm-web v3.0) from http://clearsilver.net.
|
||||
You can download clearsilver (a templating engine) from http://clearsilver.net.
|
||||
|
||||
|
||||
III. Notes
|
||||
==========
|
||||
* 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.
|
||||
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>
|
||||
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.
|
||||
|
||||
* 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
|
||||
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
|
||||
======================
|
||||
|
@ -160,14 +162,8 @@ translation.
|
|||
|
||||
The language can be selected in ezmlmwebrc with the "HTML_LANGUAGE" option.
|
||||
|
||||
If anyone gets round to writing full templates for languages I would
|
||||
appreciate it if you would do two things:
|
||||
|
||||
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.
|
||||
Please visit the translation center at http://translate.systemausfall.org
|
||||
to contribute some strings translated to yoru native language. Thanks!
|
||||
|
||||
|
||||
VI. Encrypted mailing lists
|
||||
|
@ -182,7 +178,7 @@ VII. Bugs && Bug Reports
|
|||
I don't know of any bugs ...
|
||||
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
|
||||
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.
|
||||
|
||||
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
|
||||
* Henning Rieger (age@systemausfall.org) - he designed most of the new
|
||||
interface for v3.0
|
||||
* Clavdia Horvat - she designed the new color scheme of v3.2
|
||||
|
||||
|
||||
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:
|
||||
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
|
||||
|
||||
1) the following dependencies were added:
|
||||
1) the following dependency was added:
|
||||
- File::Path
|
||||
- Locale::gettext
|
||||
|
||||
2) a new (optional) configuration setting is available: DOTQMAIL_DIR
|
||||
It can be useful if you run a multi domain vpopmail setup.
|
||||
2) design update
|
||||
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
|
||||
(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)
|
||||
* simplified rules for subscribing, posting and archive access
|
||||
* support for more ezmlm-idx: 'headerkeep', 'mimekeep' and 'copylines'
|
||||
* added configuration setting for site-specific links
|
||||
* script for creating binary suid wrappers added
|
||||
* handling of empty settings for ezmlm-idx 5.0 fixed (closes #21)
|
||||
* bug in MySQL support fixed
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
man/ezmlm-web-make-suid.1
|
||||
man/ezmlm-web.wrapper.1
|
||||
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
|
||||
# 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.
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
@ -21,7 +24,7 @@ $LIST_DIR = "$HOME_DIR/lists";
|
|||
# 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
|
||||
# 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");
|
||||
|
||||
# Where do we store the dotqmail files of this user?
|
||||
|
@ -76,11 +79,19 @@ $FILE_UPLOAD = 1;
|
|||
$DEFAULT_OPTIONS = "aBDFGHiJkLMNOpQRSTUWx";
|
||||
|
||||
# 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
|
||||
$HTML_CSS_FILE = "/ezmlm-web.css";
|
||||
$HTML_CSS_URL = "/ezmlm-web.css";
|
||||
|
||||
# the default interface language
|
||||
# can only be changed via the web interface if gettext support is available
|
||||
|
|
|
@ -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 POSIX;
|
||||
use English;
|
||||
use Time::localtime ();
|
||||
|
||||
# gettext support is optional
|
||||
my $GETTEXT_SUPPORT = 1;
|
||||
unless (&safely_import_module("Locale::gettext")) {
|
||||
$GETTEXT_SUPPORT = 0;
|
||||
warn "Gettext support is not available - the multilingual web interface is not available!";
|
||||
}
|
||||
# optional modules - they will be loaded later if they are available
|
||||
#Encode
|
||||
#Mail::Ezmlm::Gpg
|
||||
|
||||
|
||||
# the Encode module is optional - we do not break if it is absent
|
||||
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 ##################
|
||||
|
||||
|
@ -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[$QMAIL_BASE $PRETTY_NAMES $DOTQMAIL_DIR];
|
||||
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[$MAIL_ADDRESS_PREFIX];
|
||||
use vars qw[$HTML_CSS_URL $TEMPLATE_DIR $LANGUAGE_DIR $HTML_LANGUAGE];
|
||||
use vars qw[$MAIL_ADDRESS_PREFIX @HTML_LINKS];
|
||||
# some settings for encrypted mailing lists
|
||||
use vars qw[$GPG_SUPPORT];
|
||||
# settings for multi-domain setups
|
||||
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
|
||||
# otherwise old configuration files would break
|
||||
# for now there are no deprecated settings
|
||||
|
@ -99,8 +94,6 @@ if (defined($opt_C)) {
|
|||
$config_file = $1; # Command Line
|
||||
} elsif (-e "$HOME_DIR/.ezmlmwebrc") {
|
||||
$config_file = "$HOME_DIR/.ezmlmwebrc"; # User
|
||||
} elsif (-e "./ezmlmwebrc") {
|
||||
$config_file = "./ezmlmwebrc"; # Install
|
||||
} elsif (-e "/etc/ezmlm-web/ezmlmwebrc") {
|
||||
$config_file = "/etc/ezmlm-web/ezmlmwebrc"; # System (new style - since v2.2)
|
||||
} elsif (-e "/etc/ezmlm/ezmlmwebrc") {
|
||||
|
@ -138,6 +131,14 @@ if (defined($opt_d)) {
|
|||
$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),
|
||||
# then use former default value for compatibility
|
||||
$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
|
||||
$DOTQMAIL_DIR = $HOME_DIR unless defined($DOTQMAIL_DIR);
|
||||
|
||||
# check optional stylesheet
|
||||
$HTML_CSS_FILE = '' unless defined($HTML_CSS_FILE);
|
||||
# check default options for new mailing lists
|
||||
$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
|
||||
$TEMPLATE_DIR = 'template' unless defined($TEMPLATE_DIR);
|
||||
|
@ -154,6 +171,24 @@ $TEMPLATE_DIR = 'template' unless defined($TEMPLATE_DIR);
|
|||
# check 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
|
||||
unless (defined($MAIL_DOMAIN) && ($MAIL_DOMAIN ne '')) {
|
||||
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
|
||||
# users chosen course of action ...
|
||||
# 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();
|
||||
exit 0;
|
||||
} elsif (%DOMAINS && (!defined($CURRENT_DOMAIN) || ($CURRENT_DOMAIN eq '')
|
||||
|
@ -526,9 +561,16 @@ sub init_hdf {
|
|||
$hdf = &load_interface_language($hdf);
|
||||
|
||||
$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");
|
||||
|
||||
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?
|
||||
$hdf->setValue("Config.Features.Crypto", 1) if ($GPG_SUPPORT);
|
||||
|
||||
|
@ -1206,7 +1248,7 @@ sub set_pagedata_subscription_log {
|
|||
|
||||
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";
|
||||
|
||||
# break if there is no log_file
|
||||
|
@ -1219,18 +1261,20 @@ sub set_pagedata_subscription_log {
|
|||
}
|
||||
|
||||
$i = 0;
|
||||
|
||||
while (<LOG_FILE>) {
|
||||
chomp;
|
||||
split;
|
||||
@event = @_;
|
||||
@event = split;
|
||||
if ($#event eq 2) {
|
||||
$epoch_seconds = $event[0];
|
||||
my $datetext = ctime($epoch_seconds);
|
||||
$datetext = localtime($epoch_seconds);
|
||||
$note = $event[1];
|
||||
$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.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);
|
||||
$i++;
|
||||
}
|
||||
|
@ -1328,6 +1372,8 @@ sub untaint {
|
|||
next if ($params[$i] eq 'mailaddressfile');
|
||||
next if ($params[$i] eq 'gnupg_key_file');
|
||||
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])) {
|
||||
next if $param eq '';
|
||||
if ($param =~ /^([#-\@\w\.\/\[\]\:\n\r\>\< _"']+)$/) {
|
||||
|
|
12
lang/en.hdf
12
lang/en.hdf
|
@ -282,6 +282,18 @@ Lang {
|
|||
normal = default
|
||||
expert = expert
|
||||
}
|
||||
MailAddress = Mail address
|
||||
SubscribeAction = Event
|
||||
SubscribeActionDetails = Details
|
||||
SubscribeActions {
|
||||
remove = removed
|
||||
add = added
|
||||
mod = moderated
|
||||
manual = manual
|
||||
auto = automatical
|
||||
unknown = unknown
|
||||
}
|
||||
Date = Date
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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>
|
||||
<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" />
|
||||
|
||||
<?cs call:show_options(UI.Options.Config.Admin) ?>
|
||||
|
||||
<ul><li>
|
||||
<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>
|
||||
</fieldset>
|
||||
|
|
|
@ -9,13 +9,14 @@
|
|||
<fieldset>
|
||||
<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" />
|
||||
|
||||
<?cs call:show_options(UI.Options.Config.Overview) ?>
|
||||
|
||||
<ul><li>
|
||||
<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>
|
||||
</fieldset>
|
||||
|
|
|
@ -9,14 +9,15 @@
|
|||
<fieldset>
|
||||
<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" />
|
||||
|
||||
<?cs call:show_options(UI.Options.Config.Archive) ?>
|
||||
|
||||
<ul><li>
|
||||
<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>
|
||||
</fieldset>
|
||||
|
||||
</fieldset>
|
||||
|
|
|
@ -9,13 +9,14 @@
|
|||
<fieldset>
|
||||
<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" />
|
||||
|
||||
<?cs call:show_options(UI.Options.Config.GnupgOptions) ?>
|
||||
|
||||
<ul><li>
|
||||
<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>
|
||||
|
||||
|
|
|
@ -9,13 +9,14 @@
|
|||
<fieldset>
|
||||
<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" />
|
||||
|
||||
<?cs call:show_options(UI.Options.Config.Main) ?>
|
||||
|
||||
<ul><li>
|
||||
<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>
|
||||
|
||||
|
|
|
@ -9,13 +9,14 @@
|
|||
<fieldset>
|
||||
<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" />
|
||||
|
||||
<?cs call:show_options(UI.Options.Config.Posting) ?>
|
||||
|
||||
<ul><li>
|
||||
<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>
|
||||
|
||||
|
|
|
@ -9,15 +9,17 @@
|
|||
<fieldset>
|
||||
<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" />
|
||||
|
||||
<?cs call:show_options(UI.Options.Config.Processing) ?>
|
||||
|
||||
<ul><li>
|
||||
<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>
|
||||
|
||||
</fieldset>
|
||||
|
||||
<?cs include:TemplateDir + '/help_tag_susbtitution.cs' ?>
|
||||
|
|
|
@ -9,13 +9,14 @@
|
|||
<fieldset>
|
||||
<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" />
|
||||
|
||||
<?cs call:show_options(UI.Options.Config.Subscription) ?>
|
||||
|
||||
<ul><li>
|
||||
<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>
|
||||
|
||||
|
|
|
@ -9,7 +9,8 @@
|
|||
<fieldset>
|
||||
<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
|
||||
?><button type="submit" name="send" value="do"><?cs
|
||||
var:html_escape(Lang.Buttons.GnupgConvertToPlain) ?></button>
|
||||
|
@ -19,6 +20,7 @@
|
|||
var:html_escape(Lang.Buttons.GnupgConvertToEncrypted) ?></button>
|
||||
<input type="hidden" name="action" value="gnupg_convert_enable" /><?cs
|
||||
/if ?>
|
||||
</li></ul>
|
||||
</form>
|
||||
|
||||
</fieldset>
|
||||
|
|
|
@ -9,14 +9,15 @@
|
|||
<fieldset>
|
||||
<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" />
|
||||
|
||||
<?cs call:show_options(UI.Options.GenerateKey) ?>
|
||||
|
||||
<ul><li>
|
||||
<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>
|
||||
|
||||
</fieldset>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<fieldset>
|
||||
<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
|
||||
if:Data.Action == 'gnupg_public' ?>public<?cs
|
||||
|
|
|
@ -13,10 +13,10 @@
|
|||
|
||||
<?cs if:subcount(Data.List.gnupg_keys.public) > 0 ?>
|
||||
|
||||
<?cs call:form_header("gnupg_public_keys", "") ?>
|
||||
<input type="hidden" name="gnupg_subset" value="public" />
|
||||
|
||||
<table class="gnupg_keys">
|
||||
<?cs call:form_header("gnupg_public_keys") ?>
|
||||
|
||||
<ul>
|
||||
<li><table class="gnupg_keys">
|
||||
<?cs each:key = Data.List.gnupg_keys.public
|
||||
?><tr><td><input type="checkbox" name="gnupg_key_<?cs var:key.id ?>"
|
||||
id="gnupg_key_<?cs var:key.id ?>" /></td>
|
||||
|
@ -36,10 +36,13 @@
|
|||
?></a></td>
|
||||
</tr>
|
||||
<?cs /each ?>
|
||||
</table>
|
||||
</table></li>
|
||||
|
||||
<input type="hidden" name="action" value="gnupg_do" />
|
||||
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.DeletePublicKey) ?></button>
|
||||
<li><input type="hidden" name="action" value="gnupg_do" />
|
||||
<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>
|
||||
<?cs else ?>
|
||||
|
|
|
@ -13,10 +13,10 @@
|
|||
|
||||
<?cs if:subcount(Data.List.gnupg_keys.secret) > 0 ?>
|
||||
|
||||
<?cs call:form_header("gnupg_secret_keys", "") ?>
|
||||
<input type="hidden" name="gnupg_subset" value="secret" />
|
||||
<?cs call:form_header("gnupg_secret_keys") ?>
|
||||
|
||||
<table class="gnupg_keys">
|
||||
<ul>
|
||||
<li><table class="gnupg_keys">
|
||||
<?cs each:key = Data.List.gnupg_keys.secret
|
||||
?><tr><td><input type="checkbox" name="gnupg_key_<?cs var:key.id ?>"
|
||||
id="gnupg_key_<?cs var:key.id ?>" /></td>
|
||||
|
@ -36,10 +36,14 @@
|
|||
?></a></td>
|
||||
</tr>
|
||||
<?cs /each ?>
|
||||
</table>
|
||||
</table></li>
|
||||
|
||||
<input type="hidden" name="action" value="gnupg_do" />
|
||||
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.DeleteSecretKey) ?></button>
|
||||
<li>
|
||||
<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>
|
||||
<?cs else ?>
|
||||
|
|
|
@ -16,10 +16,23 @@
|
|||
</head>
|
||||
|
||||
<body>
|
||||
<div id="top">
|
||||
<div id="perm_nav">
|
||||
<?cs var:Config.PageTitle ?>
|
||||
</div>
|
||||
<h1>ezmlm-web</h1>
|
||||
</div>
|
||||
<table id="top"><tr>
|
||||
<td id="title">
|
||||
<h1>ezmlm-web</h1>
|
||||
<?cs if:Config.PageTitle
|
||||
?><p><?cs var:Config.PageTitle ?></p><?cs /if ?>
|
||||
</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 -->
|
||||
<?cs if:subcount(Config.UI.Interfaces) > 0 ?>
|
||||
|
||||
<?cs call:form_header("select_interface", "template") ?>
|
||||
|
||||
<?cs if:Data.List.Name ?><input type="hidden" name="action"
|
||||
value="subscribers" /><?cs /if ?>
|
||||
<!-- allows the user to change the interface style and the language-->
|
||||
<?cs if:((subcount(Config.UI.Interfaces) > 0) && UI.Top.Interface)
|
||||
|| ((subcount(Config.UI.Languages) > 0) && UI.Top.Language) ?>
|
||||
|
||||
<?cs call:form_header_ignore("select_interface", "template", "web_lang", "")
|
||||
|
||||
?><?cs if:Data.List.Name ?><input type="hidden" name="action"
|
||||
value="subscribers" /><?cs /if
|
||||
|
||||
?><?cs if:subcount(Config.UI.Interfaces) > 0 ?>
|
||||
<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">
|
||||
<?cs each: ttemp = Config.UI.Interfaces
|
||||
?><option value="<?cs var:name(ttemp) ?>"<?cs
|
||||
if:name(ttemp) == Config.UI.LinkAttrs.template
|
||||
?> selected="selected"<?cs /if?>><?cs
|
||||
var:html_escape(Lang.Misc.Interfaces[ttemp]) ?></option>
|
||||
<?cs /each ?>
|
||||
</select> <button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.InterfaceSet) ?></button>
|
||||
<?cs /each ?></select><?cs
|
||||
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>
|
||||
|
||||
<?cs /if ?>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!-- allows the user to change the interface language (not of the list!) -->
|
||||
<?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"
|
||||
value="subscribers" /><?cs /if ?>
|
||||
|
|
|
@ -5,12 +5,14 @@
|
|||
<fieldset>
|
||||
<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) ?>
|
||||
|
||||
<ul><li>
|
||||
<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>
|
||||
|
||||
</fieldset>
|
||||
|
|
|
@ -9,10 +9,14 @@
|
|||
<fieldset>
|
||||
<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", "") ?>
|
||||
<input type="hidden" name="action" value="list_delete_do" />
|
||||
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.ConfirmDeletion) ?></button>
|
||||
<?cs call:form_header("delete_list_confirm") ?>
|
||||
<ul>
|
||||
<li><?cs var:html_escape(Lang.Misc.ConfirmDelete) ?></li>
|
||||
<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>
|
||||
|
||||
</fieldset>
|
||||
|
|
|
@ -101,14 +101,15 @@ def:link(attr1, value1, attr2, value2, attr3, value3)
|
|||
/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
|
||||
form action - thus we have to use hidden input fields instead
|
||||
?><form accept-charset="utf-8" name="<?cs var:html_escape(form_name)
|
||||
?>" method="post" action="<?cs var:ScriptName
|
||||
?>" enctype="<?cs var:enctype ?>">
|
||||
<?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(attr) ?>" /><?cs /if ?>
|
||||
<?cs /each ?><?cs
|
||||
|
@ -117,15 +118,21 @@ def:form_header_generic(form_name, ignore_attr, enctype)
|
|||
/def ?><?cs
|
||||
|
||||
|
||||
def:form_header(form_name, ignore_attr)
|
||||
?><?cs call:form_header_generic(form_name, ignore_attr,
|
||||
"application/x-www-form-urlencoded") ?><?cs
|
||||
def:form_header(form_name)
|
||||
?><?cs call:form_header_generic(form_name,
|
||||
"application/x-www-form-urlencoded", '', '', '') ?><?cs
|
||||
/def ?><?cs
|
||||
|
||||
|
||||
def:form_header_upload(form_name, ignore_attr)
|
||||
?><?cs call:form_header_generic(form_name, ignore_attr,
|
||||
"multipart/form-data") ?><?cs
|
||||
def:form_header_ignore(form_name, ignore1, ignore2, ignore3)
|
||||
?><?cs call:form_header_generic(form_name,
|
||||
"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
|
||||
|
||||
|
||||
|
|
|
@ -24,7 +24,8 @@
|
|||
<?cs /if ?>
|
||||
|
||||
<?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>
|
||||
<?cs /if ?>
|
||||
|
||||
|
@ -189,18 +190,6 @@
|
|||
<li><hr/></li>
|
||||
<?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
|
||||
?><li><a href="http://www.ezmlm.org/ezman/index.html#toc1" target="_blank"
|
||||
title="<?cs var:html_escape(Lang.Misc.HelpLink) ?>"><?cs
|
||||
|
|
|
@ -6,17 +6,37 @@
|
|||
<legend><?cs var:html_escape(Lang.Legend.SubscribeLog) ?> </legend>
|
||||
|
||||
<?cs if:subcount(Data.List.SubscribeLog) > 0 ?>
|
||||
<table>
|
||||
<?cs each:x = Data.List.SubscribeLog ?>
|
||||
<table class="subscribe_log">
|
||||
<tr>
|
||||
<td><?cs var:html_escape(x.address) ?></td>
|
||||
<td><?cs var:html_escape(x.text) ?></td>
|
||||
<td><?cs var:html_escape(x.date) ?></td>
|
||||
<th><?cs var:html_escape(Lang.Misc.MailAddress) ?></th>
|
||||
<th><?cs var:html_escape(Lang.Misc.SubscribeAction) ?></th>
|
||||
<th><?cs var:html_escape(Lang.Misc.SubscribeActionDetails) ?></th>
|
||||
<th><?cs var:html_escape(Lang.Misc.Date) ?></th>
|
||||
</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>
|
||||
<?cs else ?>
|
||||
<?cs var:html_escape(Lang.WarningMessage.EmptyList) ?>
|
||||
<p><?cs var:html_escape(Lang.WarningMessage.EmptyList) ?></p>
|
||||
<?cs /if ?>
|
||||
</fieldset>
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
<fieldset>
|
||||
<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 ?>" />
|
||||
|
||||
|
@ -75,7 +75,7 @@
|
|||
|
||||
<table class="subscribers"><tr>
|
||||
<?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 ?>
|
||||
<input type="hidden" name="part" value="<?cs var:Data.List.PartType ?>" />
|
||||
<?cs /if ?>
|
||||
|
@ -98,19 +98,20 @@
|
|||
<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>
|
||||
</ul></form>
|
||||
<ul>
|
||||
<li><?cs call:form_header("download_subscribers", "") ?>
|
||||
<?cs call:form_header("download_subscribers") ?>
|
||||
<ul><li>
|
||||
<input type="hidden" name="action" value="download_subscribers" />
|
||||
<?cs if:Data.List.PartType ?>
|
||||
<input type="hidden" name="part" value="<?cs
|
||||
var:Data.List.PartType ?>" /><?cs /if ?>
|
||||
<button type="submit" name="send" value="do"><?cs
|
||||
var:html_escape(Lang.Buttons.DownloadSubscribersList)
|
||||
?></button></form></li>
|
||||
</ul></td>
|
||||
?></button></li>
|
||||
</ul></form>
|
||||
</td>
|
||||
<?cs /if ?>
|
||||
|
||||
<td><?cs call:form_header_upload("upload_subscribers", "") ?>
|
||||
<td><?cs call:form_header_upload("upload_subscribers") ?>
|
||||
<?cs if:Data.List.PartType ?>
|
||||
<input type="hidden" name="part" value="<?cs var:Data.List.PartType ?>" />
|
||||
<?cs /if ?>
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
<?cs var:html_escape(Lang.Introduction.ResetTextFile) ?>
|
||||
</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="action" value="textfile_reset" />
|
||||
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.ResetFile) ?></button>
|
||||
|
@ -28,7 +28,7 @@
|
|||
<fieldset>
|
||||
<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 ?>">
|
||||
|
||||
<p><textarea name="content" rows="13"
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
<fieldset>
|
||||
<legend><?cs var:html_escape(Lang.Legend.TextFiles) ?> </legend>
|
||||
|
||||
<?cs call:form_header("select_textfile", "") ?>
|
||||
<?cs call:form_header("select_textfile") ?>
|
||||
<ul>
|
||||
<?cs if:subcount(Data.List.CustomizedFiles) +
|
||||
subcount(Data.List.DefaultFiles) > 0 ?>
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
UI {
|
||||
|
||||
Top {
|
||||
Language = 1
|
||||
Interface = 1
|
||||
}
|
||||
|
||||
Navigation {
|
||||
DomainSelect = 1
|
||||
ListSelect = 1
|
||||
|
@ -25,8 +30,6 @@ UI {
|
|||
ListDelete = 1
|
||||
SubscribeLog = 1
|
||||
GnupgConvert = 1
|
||||
Language = 1
|
||||
Interface = 1
|
||||
Help = 1
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
UI {
|
||||
|
||||
Top {
|
||||
Language = 1
|
||||
Interface = 1
|
||||
}
|
||||
|
||||
Navigation {
|
||||
DomainSelect = 1
|
||||
ListSelect = 1
|
||||
|
@ -33,8 +38,6 @@ UI {
|
|||
ListDelete = 1
|
||||
SubscribeLog = 1
|
||||
GnupgConvert = 1
|
||||
Language = 1
|
||||
Interface = 1
|
||||
Help = 1
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
UI {
|
||||
|
||||
Top {
|
||||
Language = 1
|
||||
Interface = 1
|
||||
}
|
||||
|
||||
Navigation {
|
||||
DomainSelect = 1
|
||||
ListSelect = 1
|
||||
|
@ -32,8 +37,6 @@ UI {
|
|||
ListDelete = 1
|
||||
SubscribeLog = 1
|
||||
GnupgConvert = 1
|
||||
Language = 1
|
||||
Interface = 1
|
||||
Help = 1
|
||||
}
|
||||
|
||||
|
|
|
@ -8,13 +8,15 @@ body {
|
|||
|
||||
a { text-decoration: none; }
|
||||
|
||||
button, select { cursor: pointer; }
|
||||
|
||||
/***************** navbar *************************/
|
||||
/***************** navgation bar *************************/
|
||||
|
||||
#nav_bar {
|
||||
clear: left;
|
||||
float: left;
|
||||
width: 20%;
|
||||
color: inherit;
|
||||
color: black;
|
||||
background-color: #3465a4;
|
||||
background-image: url(horiz_grad_blue.png);
|
||||
margin: 1%;
|
||||
|
@ -27,6 +29,7 @@ a { text-decoration: none; }
|
|||
|
||||
#nav_bar hr {
|
||||
margin: 10px 30px 10px 10px;
|
||||
font-size: 0%; /* otherwise IE6 adds a huge gap above */
|
||||
}
|
||||
|
||||
#nav_bar ul {
|
||||
|
@ -63,7 +66,7 @@ a { text-decoration: none; }
|
|||
}
|
||||
|
||||
#nav_bar a {
|
||||
color: inherit;
|
||||
color: black; /* necessary: IE6 ignores 'inherit' */
|
||||
background-color: inherit;
|
||||
}
|
||||
|
||||
|
@ -72,35 +75,6 @@ a { text-decoration: none; }
|
|||
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 **************************/
|
||||
|
||||
|
@ -109,39 +83,80 @@ a { text-decoration: none; }
|
|||
background-color: #cc0000;
|
||||
background-image: url(vert_grad_red.png);
|
||||
background-position: top;
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
padding: 2px 3px 2px 3px;
|
||||
}
|
||||
|
||||
#top * {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
#top h1 {
|
||||
#title {
|
||||
text-align: left;
|
||||
border-bottom: solid 2px #ffffff;
|
||||
padding: 5px;
|
||||
font-weight: bold;
|
||||
letter-spacing: -1px;
|
||||
}
|
||||
|
||||
#title * {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#top #perm_nav {
|
||||
float: right;
|
||||
padding-right: 5px;
|
||||
font-size: 100%;
|
||||
}
|
||||
|
||||
#top #perm_nav a {
|
||||
#title h1 {
|
||||
font-weight: bold;
|
||||
padding-left: 2px;
|
||||
padding-right: 2px;
|
||||
text-decoration: none;
|
||||
letter-spacing: -1px;
|
||||
}
|
||||
|
||||
#top #perm_nav a:hover {
|
||||
color: #e9b96e;
|
||||
#perm_nav {
|
||||
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;
|
||||
}
|
||||
|
||||
#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 ************************/
|
||||
|
||||
|
@ -171,6 +186,7 @@ a { text-decoration: none; }
|
|||
#main_content ul {
|
||||
line-height: 1.8em;
|
||||
list-style: none;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
#main_content ul li {
|
||||
|
@ -185,11 +201,12 @@ a { text-decoration: none; }
|
|||
padding-bottom: 0px;
|
||||
}
|
||||
|
||||
#main_content fieldset {
|
||||
margin-top: 0.5%;
|
||||
margin-bottom: 1%;
|
||||
padding-top: 1%;
|
||||
padding-bottom: 1.5%;
|
||||
#main_content > fieldset { /* sub-fieldsets do not need margin/padding */
|
||||
padding: 5px 5px 10px 5px; /* IE6 acts weird for %-values */
|
||||
}
|
||||
|
||||
#main_content fieldset p {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
#main_content fieldset form ul { padding-left: 10px; }
|
||||
|
@ -202,16 +219,26 @@ a { text-decoration: none; }
|
|||
text-align: left;
|
||||
line-height: 1.2em;
|
||||
border-width: 0;
|
||||
/* padding-left: 2%; */
|
||||
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 {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
#main_content div.warning, div.error, div.success {
|
||||
margin-left: 10%;
|
||||
#main_content div.warning,
|
||||
#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-top: 2%;
|
||||
margin-bottom: 3%;
|
||||
|
@ -225,14 +252,14 @@ a { text-decoration: none; }
|
|||
#main_content div.warning,
|
||||
#main_content div.error {
|
||||
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 {
|
||||
padding-right: 10px;
|
||||
|
@ -255,7 +282,6 @@ a { text-decoration: none; }
|
|||
background-color: #d3d7cf;
|
||||
border: 1px dotted #555753;
|
||||
font-size: 90%;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#main_content button:hover {
|
||||
|
@ -263,7 +289,6 @@ a { text-decoration: none; }
|
|||
background-color: #d3d7cf;
|
||||
border: 1px dotted #ace149;
|
||||
font-size: 90%;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/************************** footer ******************************/
|
||||
|
@ -276,7 +301,7 @@ a { text-decoration: none; }
|
|||
clear: left; /* do not overlap with left navigation bar */
|
||||
text-align: center;
|
||||
font-size: 90%;
|
||||
margin: 0px;
|
||||
margin: 10px 0 0 0;
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
id="stop3683" />
|
||||
<stop
|
||||
id="stop5459"
|
||||
offset="0.5"
|
||||
offset="0.25"
|
||||
style="stop-color:#ef2929;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#ef2929;stop-opacity:1;"
|
||||
|
@ -56,7 +56,7 @@
|
|||
style="stop-color:#3465a4;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#729fcf;stop-opacity:1;"
|
||||
offset="0.5"
|
||||
offset="0.25"
|
||||
id="stop2794" />
|
||||
<stop
|
||||
id="stop2792"
|
||||
|
@ -72,23 +72,23 @@
|
|||
x2="450.08337"
|
||||
y2="624.87115"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(0,-213.9658)" />
|
||||
gradientTransform="matrix(2,0,0,1,-65.36665,-117.8995)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3681"
|
||||
id="linearGradient3687"
|
||||
x1="47.064362"
|
||||
y1="119.26222"
|
||||
x2="147.06436"
|
||||
y2="119.26222"
|
||||
x1="47.053432"
|
||||
y1="123.98675"
|
||||
x2="147.06433"
|
||||
y2="123.98675"
|
||||
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
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3680"
|
||||
id="linearGradient2793"
|
||||
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"
|
||||
y1="624.87115"
|
||||
x2="450.08337"
|
||||
|
@ -104,9 +104,9 @@
|
|||
objecttolerance="10"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.45801722"
|
||||
inkscape:cx="372.04724"
|
||||
inkscape:cy="526.18109"
|
||||
inkscape:zoom="0.84666115"
|
||||
inkscape:cx="287.3556"
|
||||
inkscape:cy="378.57053"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:window-width="1014"
|
||||
|
@ -174,16 +174,19 @@
|
|||
<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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
|
@ -192,38 +195,38 @@
|
|||
<text
|
||||
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"
|
||||
x="52.399776"
|
||||
y="218.3324"
|
||||
x="-255.44891"
|
||||
y="901.71283"
|
||||
id="text6346"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan6348"
|
||||
x="52.399776"
|
||||
y="218.3324">1x100px</tspan><tspan
|
||||
x="-255.44891"
|
||||
y="901.71283">1x400px</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="52.399776"
|
||||
y="258.3324"
|
||||
x="-255.44891"
|
||||
y="941.71283"
|
||||
id="tspan6360">90dpi</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="52.399776"
|
||||
y="298.3324"
|
||||
x="-255.44891"
|
||||
y="981.71283"
|
||||
id="tspan6350">vert_grad_red.png</tspan></text>
|
||||
<text
|
||||
id="text6352"
|
||||
y="508.71448"
|
||||
x="53.849804"
|
||||
y="604.78076"
|
||||
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"
|
||||
xml:space="preserve"><tspan
|
||||
y="508.71448"
|
||||
x="53.849804"
|
||||
y="604.78076"
|
||||
x="38.566536"
|
||||
id="tspan6354"
|
||||
sodipodi:role="line">400x1px</tspan><tspan
|
||||
y="548.71448"
|
||||
x="53.849804"
|
||||
sodipodi:role="line">800x1px</tspan><tspan
|
||||
y="644.78076"
|
||||
x="38.566536"
|
||||
sodipodi:role="line"
|
||||
id="tspan6358">90dpi</tspan><tspan
|
||||
id="tspan6356"
|
||||
y="588.71448"
|
||||
x="53.849804"
|
||||
y="684.78076"
|
||||
x="38.566536"
|
||||
sodipodi:role="line">horiz_grad_blue.png</tspan></text>
|
||||
<rect
|
||||
inkscape:export-ydpi="90"
|
||||
|
@ -233,25 +236,25 @@
|
|||
id="rect2783"
|
||||
width="800"
|
||||
height="80"
|
||||
x="39.166756"
|
||||
y="635.08759" />
|
||||
x="34.800106"
|
||||
y="744.25378" />
|
||||
<text
|
||||
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"
|
||||
x="42.933186"
|
||||
y="772.89667"
|
||||
x="38.566536"
|
||||
y="882.06287"
|
||||
id="text2785"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan2787"
|
||||
x="42.933186"
|
||||
y="772.89667">800x1px</tspan><tspan
|
||||
x="38.566536"
|
||||
y="882.06287">800x1px</tspan><tspan
|
||||
id="tspan2789"
|
||||
sodipodi:role="line"
|
||||
x="42.933186"
|
||||
y="812.89667">90dpi</tspan><tspan
|
||||
x="38.566536"
|
||||
y="922.06287">90dpi</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="42.933186"
|
||||
y="852.89667"
|
||||
x="38.566536"
|
||||
y="962.06287"
|
||||
id="tspan2791">horiz_grad_blue_long.png</tspan></text>
|
||||
</g>
|
||||
</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 New Issue