branch "ui_templates" moved to new trunk

This commit is contained in:
lars 2006-03-29 21:13:14 +00:00
parent 7930994498
commit 33e299a402
72 changed files with 735 additions and 610 deletions

View File

@ -7,7 +7,7 @@ OVERVIEW:
3 - configuration file
4 - compile cgi wrapper
5 - install cgi wrapper
6 - (optional) configure access control (http authentication)
6 - [optional] configure access control (http authentication)
7 - css stylesheet file
8 - final test

23
README
View File

@ -1,6 +1,6 @@
=================
| ezmlm-web-3.1 |
=================
===================
| ezmlm-web-3.1.1 |
===================
If you only want to know how to install ezmlm-web, then you should
read INSTALL.
@ -21,7 +21,7 @@ VIII. Bugs && Bug Reports
I. Copyright Stuff - essentially the FreeBSD licence ...
==================
ezmlm-web - version 3.1 - 12/22/02005
ezmlm-web - version 3.1.1 - 01/19/02006
Copyright (C) 1998, Guy Antony Halse, All Rights Reserved.
@ -107,6 +107,7 @@ This version of ezmlm-web requires the following;
+ Getopt::Std v4.1
+ File::Find v?
+ File::Copy v2.02
+ File::Path v1.07
+ Text::ParseWords v3.24
The version number indicates the version of the module that ezmlm-web was
@ -179,17 +180,19 @@ V. Notes
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
ezmlm-web won't actually delete the list. In this case it moves the <list>
to .<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
(since you can restore lists) and therefore I recommend it.
* The HTML interface has been tested using Nutscrape, Internet Exploder, and
Lynx. If anyone uses anything else and has problems, please let me know.
* I suggest that you make use of custom ezmlmwebrc files rather than using
the -d command line switches - it makes fault diagnosis easier ...
* Please see the section on languages below.
* Vpopmail users should set up different suid wrappers for every single
managed domain.
These wrappers should be accompanied by seperate ezmlmwebrc files with
different DOTQMAIL_DIR settings.
Please send me a more detailed description, if you managed to use ezmlm-web
with this kind of setup :)
VI. Multi-Level Access
@ -236,7 +239,7 @@ VII. Language Portablity
=========================
One of the great new features of version 2.0 is that it is essentially
language independant. All of the fixed strings, help, etc is defined in the
files of lang directory. Of course you can change them or create a new
files of the lang directory. Of course you can change them or create a new
translation.
The language can be selected in ezmlmwebrc with the "HTML_LANGUAGE" option.

5
TODO
View File

@ -1,7 +1,5 @@
ezmlm-idx5: modsub and modpost are ignored, if the flag is not set
check relevance of "t", "f" and "x" flag for idx5
"cancel" button during text editing (simple "reset" input button)
restore user input after failed list_create (especially options)
@ -10,8 +8,7 @@ support for:
* show subscription log
* 'mailinglist' (maybe)
* config directory (maybe)
allow dynamic addition of user-made config templates (seperate directory, ...)
* gpg-ezmlm (defenitely)
interface language switch support
choose basic/expert to disable questions

View File

@ -2,6 +2,15 @@ This file contains some useful hints for upgrading from a previous version of ez
##############################################################################
UPGRADING ezmlm-web 3.1 to ezmlm-web 3.1.4
1) install the perl module File::Path
2) a new (optional) configuration setting is available: DOTQMAIL_DIR
Use it, if you run a multi domain vpopmail setup.
------------------------------------------------------------------------------
UPGRADING ezmlm-web 3.0 to ezmlm-web 3.1
1) update the perl module Mail::Ezmlm to v0.07

View File

@ -1,3 +1,21 @@
Version 3.1.4 - 03/26/02006
* new setting: DOTQMAIL_DIR (useful for multi domain vpopmail setups)
[suggested by Maurits Lamers]
* minor stylesheet change (circumvents IE rendering bug)
* case-insensitive check for mime type during address file upload
Version 3.1.3 - 02/22/02006
* fixed removal of dotqmail files
Version 3.1.2 - 02/15/02006
* honour DEFAULT_OPTIONS for new lists
* fixed portability issue of the suid-wrapper
Version 3.1.1 - 01/19/02006
* more careful removal of dotmail files
* allow dots in webuser names
* allow underscores in descriptive listname
Version 3.1 - 01/14/02006
* fully compatible with ezmlm-idx v5.0
* change language of list (idx >= 5.0)

View File

@ -106,11 +106,11 @@ font.feature {
}
#main_content fieldset.form form ul {
padding-left: 1%;
padding-left: 10px;
}
#main_content fieldset.form form ul li ul {
padding-left: 3%;
padding-left: 25px;
}
#main_content table.list_select {

View File

@ -1,5 +1,5 @@
Package: ezmlm-web
Version: 3.1-3
Version: 3.1.1-1
Section: admin
Priority: extra
Architecture: all
@ -16,5 +16,6 @@ Description: Web interface for ezmlm-idx mailing list administration
* qmail - http://cr.yp.to/qmail.html
* ezmlm-idx - http://ezmlm.org/
* clearsilver for perl (>= 0.10.2) - http://www.clearsilver.net/downloads/
* some perl modules (see README.Debian)
* Mail::Ezmlm perl module via cpan or as debian package from
https://systemausfall.org/toolforge/debian

View File

@ -1,6 +1,6 @@
#!/usr/bin/perl
#===========================================================================
# ezmlm-web.cgi - version 3.1
# ezmlm-web.cgi - version 3.1.1
# ==========================================================================
# All user configuration happens in the config file ``ezmlmwebrc''
# POD documentation is at the end of this file
@ -15,6 +15,7 @@ use ClearSilver;
use Mail::Ezmlm;
use Mail::Address;
use File::Copy;
use File::Path;
use DB_File;
use CGI;
use IO::File;
@ -42,7 +43,7 @@ my @tmp = getpwuid($>); use vars qw[$USER]; $USER=$tmp[0];
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];
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];
@ -75,11 +76,15 @@ if(defined($opt_d)) {
$LIST_DIR = $1 if ($opt_d =~ /^([-\@\w.\/]+)$/);
}
# If WEBUSERS_FILE is not defined in ezmlmwebrc (as before version 2.2), then use former default value for compatibility
# If WEBUSERS_FILE is not defined in ezmlmwebrc (as before version 2.2),
# then use former default value for compatibility
if (!defined($WEBUSERS_FILE)) {
$WEBUSERS_FILE = $LIST_DIR . '/webusers'
}
# 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);
@ -150,7 +155,6 @@ elsif ($action eq '' || $action eq 'list_select') {
}
} elsif ($action eq 'list_delete_do') {
# User really wants to delete a list ...
warn "do it";
if (defined($q->param('list'))) {
$success = 'DeleteList' if (&delete_list());
} else {
@ -292,6 +296,14 @@ sub load_hdf {
$hdf->setValue("TemplateDir", "$TEMPLATE_DIR/");
&fatal_error("Language data dir ($LANGUAGE_DIR) not found!") unless (-e $LANGUAGE_DIR);
$hdf->setValue("LanguageDir", "$LANGUAGE_DIR/");
my $ui_set = 'default';
my $ui_template = "normal";
&fatal_error("UI template file not found") unless (-e "$TEMPLATE_DIR/ui/$ui_set/${ui_template}.hdf");
$hdf->setValue("Config.UI.LinkAttrs.web_lang", $HTML_LANGUAGE);
$hdf->setValue("Config.UI.LinkAttrs.template", $ui_template);
$hdf->readFile("$TEMPLATE_DIR/ui/$ui_set/${ui_template}.hdf");
$hdf->setValue("ScriptName", $ENV{'SCRIPT_NAME'});
$hdf->setValue("Stylesheet", "$HTML_CSS_FILE");
$hdf->setValue("Config.PageTitle", "$HTML_TITLE");
@ -322,7 +334,12 @@ sub output_page {
$cs->parseFile($pagefile);
print $cs->render();
my $output;
if ($output = $cs->render()) {
print $output;
} else {
&fatal_error($cs->displayError());
}
}
# ---------------------------------------------------------------------------
@ -567,7 +584,6 @@ sub set_pagedata4options {
for ($i=0; $i<=9; $i++) {
unless (($i eq 1) || ($i eq 2)) {
# TODO: maybe add "-" to the pattern to avoid strange directory settings ending in a digit :)
$state = ($options =~ /\s-$i (?:'(.+?)')/);
unless ($state) {
# set default values
@ -613,11 +629,54 @@ sub get_list_part
# ---------------------------------------------------------------------------
sub get_dotqmail_files {
my ($list, @files, $qmail_prefix);
$list = new Mail::Ezmlm("$LIST_DIR/" . $q->param('list'));
# get the location of the dotqmail files of the list
# read 'dot' for idx v5
$qmail_prefix = $list->getpart('dot');
# untaint content (we trust in it)
if ($qmail_prefix) {
$qmail_prefix =~ m/^(.*)$/;
$qmail_prefix = $1;
}
# read 'config' (line starts with "T") for idx v4
unless ($qmail_prefix) {
my $config = $list->getpart('config');
$config =~ m/^T:(.*)$/m;
$qmail_prefix = $1;
}
chomp($qmail_prefix);
# return without result and print a warning, if no dotqmail files were found
unless ($qmail_prefix) {
warn "[ezmlm-web]: could not get the location of the dotqmail files of this list";
return ();
}
# get list of existing files (remove empty entries)
@files = grep {/./} map { (-e "$qmail_prefix$_")? "$qmail_prefix$_" : undef } (
'',
'-default',
'-owner',
'-return-default',
'-reject-default',
'-accept-default',
'-confirm-default',
'-discard-default',
'-digest-owner',
'-digest',
'-digest-return-default');
return @files;
}
# ---------------------------------------------------------------------------
sub delete_list {
# Delete a list ...
# Fixes a bug from the previous version ... when the .qmail file has a
# different name to the list. We use outlocal to handle vhosts ...
my ($list, $listaddress, $listadd);
$list = new Mail::Ezmlm("$LIST_DIR/" . $q->param('list'));
if ($listadd = $list->getpart('outlocal')) {
@ -641,41 +700,46 @@ sub delete_list {
$SAFE_DIR .= '/' . $q->param('list') . "-$i";
my ($oldfile); $oldfile = "$LIST_DIR/" . $q->param('list');
my @files = &get_dotqmail_files();
# remove list directory
my $oldfile = "$LIST_DIR/" . $q->param('list');
unless (move($oldfile, $SAFE_DIR)) {
$warning = 'SafeRemoveRenameDirFailed';
return (1==0);
}
unless (opendir(DIR, "$HOME_DIR")) {
$warning = 'DotQmailDirAccessDenied';
return (1==0);
}
# TODO: this could possibly move some qmail files of other lists - improve it!
my @files = map { "$HOME_DIR/$1" if m{^(\.qmail.+)$} } grep { /^\.qmail-$listaddress/ } readdir DIR;
closedir DIR;
# remove dotqmail files
foreach (@files) {
unless (move($_, "$SAFE_DIR")) {
$warning = 'SafeRemoveMoveDotQmailFailed';
return (1==0);
}
}
warn "List '$oldfile' moved (deleted)";
} else {
# This, however, does DELETE the list. I don't like the idea, but I was
# asked to include support for it so ...
unless (rmtree("$LIST_DIR/" . $q->param('list'))) {
my @files = &get_dotqmail_files();
my $olddir = $q->param('list');
# untaint list directory name
$olddir =~ m#^([^/]*)$#;
$olddir = $1;
# first: check for invalid list directory
unless (($olddir ne '') && ($olddir ne '.' ) && ($olddir ne '..')) {
$warning = 'UnsafeRemoveListDirFailed';
return (1==0);
}
opendir(DIR, "$HOME_DIR") or &fatal_error("Unable to get directory listing: $!");
my @files = map { "$HOME_DIR/$1" if m{^(\.qmail.+)$} } grep { /^\.qmail-$listaddress/ } readdir DIR;
closedir DIR;
if (unlink(@files) <= 0) {
$warning = 'UnsafeRemoveDotQmailFailed';
return (1==0);
}
warn "List '$list->thislist()' deleted";
unless (File::Path::rmtree("$LIST_DIR/$olddir")) {
$warning = 'UnsafeRemoveListDirFailed';
return (1==0);
}
warn "List '" . $list->thislist() . "' deleted";
}
$q->param(-name=>'list', -values=>'');
}
@ -748,8 +812,9 @@ sub add_address {
# Sanity check
my $fileinfo = $q->uploadInfo($q->param('mailaddressfile'));
my $filetype = $fileinfo->{'Content-Type'};
unless($filetype =~ m{^text/}) {
unless($filetype =~ m{^text/}i) {
$warning = 'InvalidFileFormat';
warn "[ezmlm-web] mime type of uploaded file rejected: $filetype";
return (1==0);
}
@ -882,7 +947,7 @@ sub create_list {
# Some taint checking ...
$qmail = $1 if $q->param('inlocal') =~ /(?:$USER-)?([^\<\>\\\/\s]+)$/;
$listname = $q->param('list');
if ($listname =~ m/[^\w\.-]/) {
if ($listname =~ m/[^\w\._\-]/) {
$warning = 'InvalidListName';
return (1==0);
}
@ -904,7 +969,7 @@ sub create_list {
$warning = 'ListNameAlreadyExists';
return (1==0);
}
if (-e "$HOME_DIR/.qmail-$qmail") {
if (-e "$DOTQMAIL_DIR/.qmail-$qmail") {
$warning = 'ListAddressAlreadyExists';
return (1==0);
}
@ -914,7 +979,7 @@ sub create_list {
my($list) = new Mail::Ezmlm;
unless ($list->make(-dir=>"$LIST_DIR/$listname",
-qmail=>"$HOME_DIR/.qmail-$qmail",
-qmail=>"$DOTQMAIL_DIR/.qmail-$qmail",
-name=>$q->param('inlocal'),
-host=>$q->param('inhost'),
-switches=>$options,
@ -950,14 +1015,20 @@ sub extract_options_from_params()
{
# Work out the command line options ...
my ($options, $avail_options, $settings, $avail_settings, $i);
my ($listname, $list, $old_options, $state, $old_key);
my ($listname, $old_options, $state, $old_key);
# NOTE: we have to define _every_ (even unchanged) setting
# as ezmlm-make removes any undefined value
$listname = $q->param('list');
$list = new Mail::Ezmlm("$LIST_DIR/$listname");
$old_options = $list->getconfig();
if (-e "$LIST_DIR/$listname") {
# the list does already exist
my $list = new Mail::Ezmlm("$LIST_DIR/$listname");
$old_options = $list->getconfig();
} else {
# creating a new list
$old_options = $DEFAULT_OPTIONS;
}
################ options ################
$i = 0;
@ -1140,7 +1211,7 @@ sub update_webusers {
my $listname = $q->param('list');
my $webusers_filtered = $q->param('webusers');
# remove any insecure characters (e.g. a line break :))
$webusers_filtered =~ s/[^\w_,-]/ /gs;
$webusers_filtered =~ s/[^\w,_\.\-]/ /gs;
open(TMP, "<$temp_file");
unless (open(WU, ">$WEBUSERS_FILE")) {
warn "the webusers file ($WEBUSERS_FILE) is not writable";
@ -1272,26 +1343,6 @@ sub check_language {
# ---------------------------------------------------------------------------
sub rmtree {
# A subroutine to recursively delete a directory (like rm -f).
# Based on the one in the perl cookbook :)
use File::Find qw(finddepth);
File::Find::finddepth sub {
# assume that File::Find::name is secure since it only uses data we pass it
my($name) = $File::Find::name =~ m{^(.+)$};
if (!-l && -d _) {
rmdir($name) or warn "couldn't rmdir $name: $!";
} else {
unlink($name) or warn "couldn't unlink $name: $!";
}
}, @_;
1;
}
# ------------------------------------------------------------------------
sub fatal_error() {
my $text = shift;

View File

@ -12,6 +12,12 @@
# This directory will automatically be created if needed.
$LIST_DIR = "$HOME_DIR/lists";
# Where do we store the dotqmail files of this user?
# (defaults to the home directory of the executing user)
# You will have to change this value, if you use a multi domain
# vpopmail setup. Otherwise just leave the setting turned off.
#$DOTQMAIL_DIR = '/home/vpopmail/domain';
# Where is the webusers file for access-permissions
# defaults to "$LIST_DIR/webusers"
$WEBUSERS_FILE = "$LIST_DIR/webusers";

31
index.c
View File

@ -1,6 +1,7 @@
/* $Id: index.c,v 1.2 2000/09/25 18:14:12 guy Exp $ */
/* $Id$ */
#include <stdio.h>
#include <unistd.h>
/* C wrapper to allow ezmlm-web.cgi to run suid */
/* Copyright (C) 1999/2000, Guy Antony Halse, All Rights Reserved */
@ -8,18 +9,26 @@
int main(void) {
/* Change this path to wherever you decided to put ezmlm-web.cgi */
execv("/usr/local/bin/ezmlm-web.cgi");
execv("/usr/local/bin/ezmlm-web.cgi", NULL);
/* Note that you could also use the following to allow a specific user
to store their mailing lists and configuration file in a different
location. This overrides the default.
ezmlm-web.cgi understands the following parameters:
-C /path/to/config.file
-d /path/to/list/directory
See README for the default values. */
/* Note that you could also use the following to allow a specific user
to store their mailing lists in a different directory defined by
/tmp/ezmlm-web-demo ... This over-rides the default . */
/* Look at the exec(3) man page if you don't understand how the arguments
list below works */
/* Look at the exec(3) man page if you don't understand how the arguments
list below works */
/*
char *switches[] = { "ezmlm-web.cgi", "-d", "/tmp/ezmlm-web-demo", NULL };
execv("/usr/local/bin/ezmlm-web.cgi", switches);
*/
/*
char *switches[] = { "ezmlm-web.cgi", "-d", "/tmp/ezmlm-web-demo", NULL };
execv("/usr/local/bin/ezmlm-web.cgi", switches);
*/
}

View File

@ -4,6 +4,8 @@ LanguageDir
Stylesheet
HelpIconURL
Config.Title
Config.UI.LinkAttrs.web_lang
Config.UI.LinkAttrs.template
Data.Action
Data.areDefaultTextsAvailable

View File

@ -1,10 +1,13 @@
1) update version number
* changelog
* README
* ezmlm-web.cgi
* UPGRADING
* template/footer.cs
* debian-related/changelog.Debian
* debian-related/DEBIAN/control
2) update changelog
2) create new tag
3) create tar.gz
./make-tar.sh X.Y.Z
@ -17,3 +20,4 @@
scp XYZ.deb uml-bastelecke@systemausfall.org:/data/deb-repo/incoming/unstable
6) update website

View File

@ -9,30 +9,16 @@
<fieldset class="form">
<legend><?cs var:html_escape(Lang.Legend.ConfigAdmin) ?> </legend>
<form method="post" action="<?cs var:ScriptName ?>" enctype="application/x-www-form-urlencoded">
<form method="post" action="<?cs call:link("","","","","","") ?>" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="config_subset" value="admin" />
<ul>
<?cs call:show_options(UI.Options.Config.Admin) ?>
<!-- enable remote administration -->
<li><?cs call:checkbox("r") ?>
<ul>
<!-- administrators may request subscribers list -->
<li><?cs call:checkbox("l") ?></li>
<!-- include default form values -->
<?cs include:TemplateDir + '/form_common.cs' ?>
<!-- administrators may edit text files via mail -->
<li><?cs call:checkbox("n") ?></li>
<!-- custom path to administrators database -->
<li><?cs call:setting("9") ?><?cs if:(Data.List.Settings.8.state && Data.List.Settings.9.state) ?>(<?cs var:Lang.Misc.ModSubOverridesRemote ?>)<?cs /if ?></li>
</ul></li>
<li><!-- include default form values -->
<?cs include:TemplateDir + '/form_common.cs' ?>
<input type="hidden" name="action" value="config_do" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button></li>
</ul>
<input type="hidden" name="action" value="config_do" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button>
</form>
</fieldset>

View File

@ -9,176 +9,16 @@
<fieldset class="form">
<legend><?cs var:html_escape(Lang.Legend.ConfigAll) ?> </legend>
<form method="post" action="<?cs var:ScriptName ?>" enctype="application/x-www-form-urlencoded">
<form method="post" action="<?cs call:link("","","","","","") ?>" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="config_subset" value="all" />
<ul>
<?cs call:show_options(UI.Options.Config.Overview) ?>
<!-- public subsccription and archive -->
<li><?cs call:checkbox("p") ?></li>
<!-- include default form values -->
<?cs include:TemplateDir + '/form_common.cs' ?>
<!-- do not require confirmation for subscription -->
<li><?cs call:checkbox("h") ?></li>
<!-- do not require confirmation for unsubscribe -->
<li><?cs call:checkbox("j") ?></li>
<!-- moderate subscription -->
<li><?cs call:checkbox("s") ?></li>
<!-- use deny list -->
<li><?cs call:checkbox("k") ?></li>
<!-- only subscribers may post -->
<li><?cs call:checkbox("u") ?></li>
<!-- require confirmation from poster -->
<li><?cs call:checkbox("y") ?></li>
<!-- posted messages are moderated -->
<li><?cs call:checkbox("m") ?></li>
<!-- only moderators may post -->
<li><?cs call:checkbox("o") ?></li>
<!-- process mailman-style requests -->
<li><?cs call:checkbox("q") ?></li>
<!-- remove ezmlm-warn -->
<li><?cs call:checkbox("w") ?></li>
<!-- archive messages -->
<li><?cs call:checkbox("a") ?></li>
<!-- only moderators may access the archive -->
<li><?cs call:checkbox("b") ?></li>
<!-- block unknown users from archive -->
<li><?cs call:checkbox("g") ?></li>
<!-- remove 'no-archive' header -->
<li><?cs call:checkbox("i") ?></li>
<!-- enable remote administration -->
<li><?cs call:checkbox("r") ?></li>
<!-- administrators may request subscribers list -->
<li><?cs call:checkbox("l") ?></li>
<!-- administrators may edit text files via mail -->
<li><?cs call:checkbox("n") ?></li>
<!-- from address -->
<li><?cs call:setting("3") ?></li>
<!-- list owner address -->
<li><?cs call:setting("5") ?></li>
<!-- mysql database -->
<?cs if:Data.Modules.mySQL ?>
<li><?cs call:setting("6") ?></li><?cs /if ?>
<!-- set main list name -->
<li><?cs call:setting("0") ?></li>
<!-- messsage moderator -->
<li><?cs call:setting("7") ?></li>
<!-- custom path to subscription moderators -->
<li><?cs call:setting("8") ?></li>
<!-- custom path to remote administrators -->
<li><?cs call:setting("9") ?>(<?cs var:Lang.Misc.ModSubOverridesRemote ?>)</li>
<!-- subject prefix -->
<li><?cs call:checkbox("f") ?>
<ul><li><input type="text" name="prefix" value="<?cs
var:html_escape(Data.List.Prefix) ?>" size="70" />
</li></ul></li>
<!-- trailing text -->
<li><?cs call:checkbox("t") ?>
<?cs if:(Data.List.Options.t == 1) ?>
<!-- turn off trailaer, if "-t" is not activated, as it will be
removed during the next config_update -->
<ul><li><textarea name="trailing_text" rows="3" cols="72"><?cs
var:html_escape(Data.List.TrailingText) ?></textarea></li>
</ul></li><?cs /if ?>
<!-- message size limit -->
<li><input type="checkbox" name="msgsize_max_state"
value="selected" id="msgsize_max_state" <?cs
if:Data.List.MsgSize.Max>0 ?>checked="checked"<?cs /if ?> />
<label for="msgsize_max_state"><?cs var:html_escape(Lang.Misc.MessageSize.Max) ?></label>
<ul><li><input type="text" name="msgsize_max_value" size="10"
style="text-align:right" value="<?cs
alt:Data.List.MsgSize.Max ?>30000<?cs /alt ?>" /> <?cs
var:html_escape(Lang.Misc.MessageSize.Unit) ?></li></ul></li>
<li><input type="checkbox" name="msgsize_min_state"
value="selected" id="msgsize_min_state" <?cs
if:Data.List.MsgSize.Min>0 ?>checked="checked"<?cs /if ?> />
<label for="msgsize_min_state"><?cs var:html_escape(Lang.Misc.MessageSize.Min) ?></label>
<ul><li><input type="text" name="msgsize_min_value" size="10"
style="text-align:right" value="<?cs
alt:Data.List.MsgSize.Min ?>2<?cs /alt ?>" /> <?cs
var:html_escape(Lang.Misc.MessageSize.Unit) ?></li></ul></li>
<!-- mimeremove and mimereject -->
<li><?cs call:checkbox("x") ?>
<?cs if:(Data.List.Options.x == 1) ?><ul>
<!-- turn off mimermove, if "-x" is not activated, as it will be
removed during the next config_update -->
<li><?cs var:html_escape(Lang.Misc.MimeReject) ?>:<br/>
<textarea name="mimereject" rows="4" cols="70"><?cs
var:html_escape(Data.List.MimeReject) ?></textarea></li>
<li><?cs var:html_escape(Lang.Misc.MimeRemove) ?>:<br/>
<textarea name="mimeremove" rows="4" cols="70"><?cs
var:html_escape(Data.List.MimeRemove) ?></textarea></li>
</ul><?cs /if ?></li>
<!-- headerremove -->
<li><?cs var:html_escape(Lang.Misc.HeaderRemove) ?>:<br/>
<ul><li><textarea name="headerremove" rows="5" cols="70"><?cs
var:html_escape(Data.List.HeaderRemove) ?></textarea></li></ul></li>
<!-- headeradd -->
<li><?cs var:html_escape(Lang.Misc.HeaderAdd) ?>:<br/>
<ul><li><textarea name="headeradd" rows="5" cols="70"><?cs
var:html_escape(Data.List.HeaderAdd) ?></textarea></li></ul></li>
<!-- language -->
<?cs if:subcount(Data.List.AvailableLanguages) > 0 ?>
<li><label for="list_language"><?cs var:html_escape(Lang.Misc.ListLanguage)
?>:</label>
<select name="list_language" id="list_language">
<?cs each:item = Data.List.AvailableLanguages ?>
<option <?cs if:(item == Data.List.Language)
?>selected="selected"<?cs /if ?>><?cs var:item ?></option>
<?cs /each ?>
</select></li><?cs /if ?>
<!-- charset -->
<?cs if:Data.List.CharSet ?>
<li><label for="list_charset"><?cs var:html_escape(Lang.Misc.ListCharset)
?>:</label>
<input type="text" name="list_charset" id="list_charset" size="30"
value="<?cs var:Data.List.CharSet ?>" />
</li><?cs /if ?>
<!-- ezmlm-web administators -->
<?cs if:Data.WebUser.show && Data.List.WebUsers ?>
<li><?cs var:html_escape(Lang.Misc.AllowedToEdit) ?>
<ul><li><input type="text"
name="webusers" value="<?cs var:html_escape(Data.List.WebUsers)
?>" size="40" /><br/>
</li></ul></li><?cs /if ?>
<li><!-- include default form values -->
<?cs include:TemplateDir + '/form_common.cs' ?>
<input type="hidden" name="action" value="config_do" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button></li>
</ul>
<input type="hidden" name="action" value="config_do" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button>
</form>
</fieldset>

View File

@ -9,33 +9,16 @@
<fieldset class="form">
<legend><?cs var:html_escape(Lang.Legend.ConfigArchive) ?> </legend>
<form method="post" action="<?cs var:ScriptName ?>" enctype="application/x-www-form-urlencoded">
<form method="post" action="<?cs call:link("","","","","","") ?>" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="config_subset" value="archive" />
<ul>
<!-- archive messages -->
<li><?cs call:checkbox("a") ?>
<ul>
<!-- subscripiton and archive are public -->
<li><?cs call:checkbox("p") ?></li>
<!-- only moderators may access the archive -->
<li><?cs call:checkbox("b") ?></li>
<?cs call:show_options(UI.Options.Config.Archive) ?>
<!-- block unknown users from archive -->
<li><?cs call:checkbox("g") ?></li>
</ul></li>
<!-- include default form values -->
<?cs include:TemplateDir + '/form_common.cs' ?>
<!-- remove 'no-archive' header -->
<li><?cs call:checkbox("i") ?></li>
<li><!-- include default form values -->
<?cs include:TemplateDir + '/form_common.cs' ?>
<input type="hidden" name="action" value="config_do" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button></li>
</ul>
<input type="hidden" name="action" value="config_do" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button>
</form>
</fieldset>

View File

@ -9,60 +9,16 @@
<fieldset class="form">
<legend><?cs var:html_escape(Lang.Legend.ConfigMain) ?> </legend>
<form method="post" action="<?cs var:ScriptName ?>" enctype="application/x-www-form-urlencoded">
<form method="post" action="<?cs call:link("","","","","","") ?>" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="config_subset" value="main" />
<ul>
<?cs call:show_options(UI.Options.Config.Main) ?>
<!-- list language -->
<?cs if:subcount(Data.List.AvailableLanguages) > 0 ?>
<li><label for="list_language"><?cs var:html_escape(Lang.Misc.ListLanguage)
?>:</label>
<select name="list_language" id="list_language">
<?cs each:item = Data.List.AvailableLanguages ?>
<option <?cs if:(item == Data.List.Language)
?>selected="selected"<?cs /if ?>><?cs var:item ?></option>
<?cs /each ?>
</select></li><?cs /if ?>
<!-- include default form values -->
<?cs include:TemplateDir + '/form_common.cs' ?>
<!-- charset -->
<?cs if:Data.List.CharSet ?>
<li><label for="list_charset"><?cs var:html_escape(Lang.Misc.ListCharset)
?>:</label>
<input type="text" name="list_charset" id="list_charset" size="30"
value="<?cs var:Data.List.CharSet ?>" />
</li><?cs /if ?>
<!-- list owner address -->
<li><?cs call:setting("5") ?></li>
<!-- set main list name -->
<li><?cs call:setting("0") ?></li>
<!-- process mailman-style requests -->
<li><?cs call:checkbox("q") ?></li>
<!-- remove ezmlm-warn -->
<li><?cs call:checkbox("w") ?></li>
<!-- mysql database -->
<?cs if:Data.Modules.mySQL ?>
<li><?cs call:setting("6") ?></li><?cs /if ?>
<!-- ezmlm-web administators -->
<?cs if:Data.WebUser.show && Data.List.WebUsers ?>
<li><?cs var:html_escape(Lang.Misc.AllowedToEdit) ?>
<ul><li><input type="text"
name="webusers" value="<?cs var:html_escape(Data.List.WebUsers)
?>" size="40" /><br/>
</li></ul></li><?cs /if ?>
<li><!-- include default form values -->
<?cs include:TemplateDir + '/form_common.cs' ?>
<input type="hidden" name="action" value="config_do" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button></li>
</ul>
<input type="hidden" name="action" value="config_do" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button>
</form>

View File

@ -1,2 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- administrators may edit text files via mail -->
<?cs call:checkbox("n") ?>

View File

@ -1,3 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- enable remote administration -->
<?cs call:checkbox("r") ?>

View File

@ -1,2 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- administrators may request subscribers list -->
<?cs call:checkbox("l") ?>

View File

@ -0,0 +1,7 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<?cs if:Data.List.Options.r ?>
<!-- custom path to remote administrators -->
<?cs call:setting("9") ?><?cs
if:((Data.List.Settings.8.state == 1) && (Data.List.Settings.9.state == 1))
?>(<?cs var:Lang.Misc.ModSubOverridesRemote ?>)<?cs /if ?>
<?cs /if ?>

View File

@ -0,0 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- block unknown users from archive -->
<?cs call:checkbox("g") ?>

View File

@ -0,0 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- enable archiving -->
<?cs call:checkbox("a") ?>

View File

@ -0,0 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- only moderators may access the archive -->
<?cs call:checkbox("b") ?>

View File

@ -1,2 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- remove 'no-archive' header -->
<?cs call:checkbox("i") ?>

View File

@ -1,2 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- use deny list -->
<?cs call:checkbox("k") ?>

View File

@ -1,2 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- only moderators may post -->
<?cs call:checkbox("o") ?>

View File

@ -1,2 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- block unknown users from archive -->
<?cs call:checkbox("g") ?>

View File

@ -1,2 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- only subscribers may post -->
<?cs call:checkbox("u") ?>

View File

@ -0,0 +1,7 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- charset -->
<?cs if:Data.List.CharSet ?>
<label for="list_charset"><?cs var:html_escape(Lang.Misc.ListCharset)
?>:</label>
<input type="text" name="list_charset" id="list_charset" size="30"
value="<?cs var:Data.List.CharSet ?>" /><?cs /if ?>

View File

@ -1,2 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- require confirmation from poster -->
<?cs call:checkbox("y") ?>

View File

@ -1,2 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- do not require confirmation for subscription -->
<?cs call:checkbox("h") ?>

View File

@ -1,2 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- do not require confirmation for unsubscribe -->
<?cs call:checkbox("j") ?>

View File

@ -0,0 +1,5 @@
<label for="listaddress"><?cs var:html_escape(Lang.Misc.ListAddress) ?>:</label>
<input type="text" id="listaddress" name="inlocal" size="20"
value="<?cs var:html_escape(Data.UserName)
?>"> @ <input type="text" name="inhost" size="30" value="<?cs
var:html_escape(Data.HostName) ?>"></li>

View File

@ -0,0 +1,2 @@
<label for="listname"><?cs var:html_escape(Lang.Misc.ListName) ?>:</label>
<input type="text" name="list" id="listname" size="25">

View File

@ -0,0 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- turn on digest list -->
<?cs call:checkbox("d") ?>

View File

@ -0,0 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- digest settings -->
<?cs call:setting("4") ?>

View File

@ -1,2 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- from address -->
<?cs call:setting("3") ?>

View File

@ -1,3 +1,4 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- headeradd -->
<?cs var:html_escape(Lang.Misc.HeaderAdd) ?>:<br/>
<ul><li><textarea name="headeradd" rows="5" cols="70"><?cs

View File

@ -1,3 +1,4 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- headerremove -->
<?cs var:html_escape(Lang.Misc.HeaderRemove) ?>:<br/>
<ul><li><textarea name="headerremove" rows="5" cols="70"><?cs

View File

@ -0,0 +1,24 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- list language -->
<?cs if:Data.Action != "list_create" ?>
<?cs if:subcount(Data.List.AvailableLanguages) > 0 ?>
<label for="list_language"><?cs var:html_escape(Lang.Misc.ListLanguage)
?>:</label>
<select name="list_language" id="list_language">
<?cs each:item = Data.List.AvailableLanguages ?>
<option <?cs if:(item == Data.List.Language)
?>selected="selected"<?cs /if ?>><?cs var:item ?></option>
<?cs /each ?>
</select><?cs /if ?>
<?cs else ?>
<?cs if:subcount(Data.AvailableLanguages) > 0 ?>
<label for="list_language"><?cs var:html_escape(Lang.Misc.ListLanguage)
?>:</label>
<select name="list_language" id="list_language">
<?cs each:item = Data.AvailableLanguages ?>
<option <?cs if:item == "default"
?>selected="selected"<?cs /if ?>><?cs var:item ?></option>
<?cs /each ?>
</select><?cs /if ?>
<?cs /if ?>

View File

@ -0,0 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- process mailman-style requests -->
<?cs call:checkbox("q") ?>

View File

@ -1,2 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- set main list name -->
<?cs call:setting("0") ?>

View File

@ -1,3 +1,4 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- mimeremove and mimereject -->
<?cs call:checkbox("x") ?>
<?cs if:(Data.List.Options.x == 1) ?><ul>
@ -6,4 +7,3 @@
<?cs call:display_option('mimereject') ?>
<?cs call:display_option('mimeremove') ?>
</ul><?cs /if ?>

View File

@ -0,0 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- care for mime(reject|remove) -->
<?cs call:checkbox("x") ?>

View File

@ -1,5 +1,8 @@
<!-- turn off mimermove, if "-x" is not activated, as it will be
removed during the next config_update -->
<?cs var:html_escape(Lang.Misc.MimeReject) ?>:<br/>
<textarea name="mimereject" rows="4" cols="70"><?cs
var:html_escape(Data.List.MimeReject) ?></textarea>
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<?cs if:Data.List.Options.x == 1 ?>
<!-- turn off mimermove, if "-x" is not activated, as it will be
removed during the next config_update -->
<?cs var:html_escape(Lang.Misc.MimeReject) ?>:<br/>
<textarea name="mimereject" rows="4" cols="70"><?cs
var:html_escape(Data.List.MimeReject) ?></textarea>
<?cs /if ?>

View File

@ -1,5 +1,8 @@
<!-- turn off mimermove, if "-x" is not activated, as it will be
removed during the next config_update -->
<?cs var:html_escape(Lang.Misc.MimeRemove) ?>:<br/>
<textarea name="mimeremove" rows="4" cols="70"><?cs
var:html_escape(Data.List.MimeRemove) ?></textarea>
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<?cs if:Data.List.Options.x == 1 ?>
<!-- turn off mimermove, if "-x" is not activated, as it will be
removed during the next config_update -->
<?cs var:html_escape(Lang.Misc.MimeRemove) ?>:<br/>
<textarea name="mimeremove" rows="4" cols="70"><?cs
var:html_escape(Data.List.MimeRemove) ?></textarea>
<?cs /if ?>

View File

@ -1,2 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- posted messages are moderated -->
<?cs call:checkbox("m") ?>

View File

@ -1,2 +1,5 @@
<!-- messsage moderator path -->
<?cs call:setting("7") ?>
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<?cs if:Data.List.Options.m ?>
<!-- messsage moderator path -->
<?cs call:setting("7") ?>
<?cs /if ?>

View File

@ -1,2 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- moderate subscription -->
<?cs call:checkbox("s") ?>

View File

@ -1,2 +1,5 @@
<!-- custom path to subscription moderators -->
<?cs call:setting("8") ?>
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<?cs if:Data.List.Options.s ?>
<!-- custom path to subscription moderators -->
<?cs call:setting("8") ?>
<?cs /if ?>

View File

@ -1,3 +1,4 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- message size limit -->
<input type="checkbox" name="msgsize_max_state"
value="selected" id="msgsize_max_state" <?cs

View File

@ -1,3 +1,4 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- message size limit -->
<input type="checkbox" name="msgsize_min_state"
value="selected" id="msgsize_min_state" <?cs

View File

@ -1,2 +1,4 @@
<!-- mysql database -->
<?cs call:setting("6") ?>
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<?cs if:Data.Modules.mySQL ?>
<!-- mysql database -->
<?cs call:setting("6") ?><?cs /if ?>