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 ?>

View file

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

View file

@ -1,3 +1,4 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- subject prefix -->
<?cs call:checkbox("f") ?>
<ul><li><input type="text" name="prefix" value="<?cs

View file

@ -1,2 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- public subsccription and archive -->
<?cs call:checkbox("p") ?>

View file

@ -1,7 +1,8 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- trailing text -->
<?cs call:checkbox("t") ?>
<?cs if:(Data.List.Options.t == 1) ?>
<!-- turn off trailaer, if "-t" is not activated, as it will be
<!-- turn off trailer, 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>

View file

@ -0,0 +1,3 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- remove ezmlm-warn -->
<?cs call:checkbox("w") ?>

View file

@ -1,7 +1,10 @@
<!-- REMOVE --><?cs include:TemplateDir + '/macros.cs' ?>
<!-- ezmlm-web administators -->
<?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/>
name="webusers" value="<?cs if:Data.List.WebUsers
?>var:html_escape(Data.List.WebUsers) ?><?cs
else ?><?cs
var:html_escape(Data.WebUser.UserName)
?><?cs /if ?>" size="40" /><br/>
</li></ul>

View file

@ -9,64 +9,16 @@
<fieldset class="form">
<legend><?cs var:html_escape(Lang.Legend.ConfigPosting) ?> </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="posting" />
<ul>
<?cs call:show_options(UI.Options.Config.Posting) ?>
<!-- use deny list -->
<li><?cs call:checkbox("k") ?></li>
<!-- include default form values -->
<?cs include:TemplateDir + '/form_common.cs' ?>
<!-- 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") ?>
<ul>
<!-- only moderators may post -->
<li><?cs call:checkbox("o") ?></li>
<!-- nesage moderator -->
<li><?cs call:setting("7") ?></li>
</ul></li>
<!-- 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>
</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

@ -9,56 +9,17 @@
<fieldset class="form">
<legend><?cs var:html_escape(Lang.Legend.ConfigProcess) ?> </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="processing" />
<ul>
<?cs call:show_options(UI.Options.Config.Processing) ?>
<!-- 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>
<!-- include default form values -->
<?cs include:TemplateDir + '/form_common.cs' ?>
<!-- trailing text -->
<li><?cs call:checkbox("t") ?>
<?cs if:(Data.List.Options.t == 1) ?>
<!-- turn off mimermove, if "-x" 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 ?>
<input type="hidden" name="action" value="config_do" />
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button>
<!-- from address -->
<li><?cs call:setting("3") ?></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.MimeRemove) ?>:<br/>
<textarea name="mimeremove" rows="4" cols="70"><?cs
var:html_escape(Data.List.MimeRemove) ?></textarea></li>
</ul></li><?cs /if ?>
<!-- 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>
<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>
</form>
</fieldset>

View file

@ -9,33 +9,16 @@
<fieldset class="form">
<legend><?cs var:html_escape(Lang.Legend.ConfigSub) ?> </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="subscription" />
<ul>
<?cs call:show_options(UI.Options.Config.Subscription) ?>
<!-- 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") ?>
<ul>
<!-- custom path to subscription moderators -->
<li><?cs call:setting("8") ?><?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>

View file

@ -1,6 +1,6 @@
<div id="footer">
<a href="https://systemausfall.org/toolforge/ezmlm-web">ezmlm-web</a> (v3.1) - <?cs var:html_escape(Lang.Misc.FooterText) ?> <a href="http://www.ezmlm.org/" target="_blank">ezmlm</a>
<a href="https://systemausfall.org/toolforge/ezmlm-web">ezmlm-web</a> (v3.1.1) - <?cs var:html_escape(Lang.Misc.FooterText) ?> <a href="http://www.ezmlm.org/" target="_blank">ezmlm</a>
<br />
</div>

View file

@ -5,40 +5,9 @@
<fieldset class="form">
<legend><?cs var:html_escape(Lang.Legend.ListCreate) ?> </legend>
<form method="post" action="<?cs var:ScriptName ?>" enctype="application/x-www-form-urlencoded">
<ul>
<li><label for="listname"><?cs var:html_escape(Lang.Misc.ListName) ?>:</label>
<input type="text" name="list" id="listname" size="25"></li>
<li><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>
<?cs if:subcount(Data.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.AvailableLanguages ?>
<option <?cs if:(item == 'default')
?>selected="selected"<?cs /if ?>><?cs var:item ?></option>
<?cs /each ?>
</select></li><?cs /if ?>
<?cs if:Data.Modules.MySQL ?>
<!-- Allow creation of mysql table if the module allows it -->
<li><?cs call:setting("6") ?></li><?cs /if ?>
<?cs if:Data.WebUser.show ?>
<li><label for="webusers"><?cs var:html_escape(Lang.Misc.AllowedToEdit) ?></label>
<ul><li><input type="text" id="webusers"
name="webusers" size="30" value="<?cs
var:html_escape(Data.WebUser.UserName) ?>"></li></ul></li>
<?cs /if ?>
</ul>
<form method="post" action="<?cs call:link("","","","","","") ?>" enctype="application/x-www-form-urlencoded">
<?cs call:show_options(UI.Options.Create) ?>
<!-- include default form values -->
<?cs include:TemplateDir + '/form_common.cs' ?>

View file

@ -10,7 +10,7 @@
<legend><?cs var:html_escape(Lang.Legend.ListDelete) ?> </legend>
<p><?cs var:Lang.Misc.ConfirmDelete ?></p>
<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="list" value="<?cs var:Data.List.Name ?>" />
<input type="hidden" name="action" value="list_delete_do" />

View file

@ -24,7 +24,9 @@
<?cs loop: y = #0, columns-1, #1 ?>
<td>
<?cs set:listname = Data.Lists[y * col_len + x] ?><?cs
if:listname ?><a href="<?cs var:ScriptName ?>?list=<?cs var:url_escape(listname) ?>&amp;action=subscribers" title="<?cs var:html_escape(listname) ?>"><?cs call:limit_string_len(html_escape(listname),18) ?></a>
if:listname ?><a href="<?cs call:link("list",listname,"action","subscribers",
"","") ?>" title="<?cs var:html_escape(listname) ?>"><?cs
call:limit_string_len(html_escape(listname),18) ?></a>
<?cs /if ?>
</td>
<?cs /loop ?>

View file

@ -1,57 +1,97 @@
<?cs def:checkbox(option)
?><?cs if:Lang.Options[option]
?><input type="checkbox" name="option_<?cs var:option ?>"
id="option_<?cs var:option ?>" value="selected" <?cs
if:(Data.List.Options[option] == 1) ?>checked="checked"<?cs /if ?> />
<label for="option_<?cs var:option ?>"><?cs var:html_escape(Lang.Options[option])
?><input type="checkbox" name="option_<?cs var:option ?>" id="option_<?cs
var:option ?>" value="selected" <?cs
if:(Data.List.Options[option] == 1) ?>checked="checked"<?cs
/if ?> /> <label for="option_<?cs var:option ?>"><?cs
var:html_escape(Lang.Options[option])
?></label><?cs
set:available_options = available_options + option ?><?cs
else ?>unknown option (<?cs var:option ?>)<?cs /if ?><?cs
/def ?>
/def ?><?cs
<?cs def:setting(setting)
def:setting(setting)
?><?cs if:Lang.Settings[setting]
?><input type="checkbox" name="setting_state_<?cs var:setting
?>" id="setting_state_<?cs var:setting ?>" value="selected" <?cs
if:(Data.List.Settings[setting].state == 1) ?>checked="checked"<?cs /if ?> />
<label for="setting_state_<?cs var:setting ?>"><?cs
var:html_escape(Lang.Settings[setting]) ?></label>
<ul><li><input type="text" name="setting_value_<?cs var:setting
if:(Data.List.Settings[setting].state == 1) ?>checked="checked"<?cs /if
?> /> <label for="setting_state_<?cs var:setting ?>"><?cs
var:html_escape(Lang.Settings[setting])
?></label><ul><li><input type="text" name="setting_value_<?cs var:setting
?>" id="setting_value_<?cs var:setting ?>" value="<?cs
var:html_escape(Data.List.Settings[setting].value) ?>" size="30" /></li></ul><?cs
set:available_settings = available_settings + setting ?><?cs
else ?>unknown setting (<?cs var:setting ?>)<?cs /if ?><?cs
/def ?>
/def ?><?cs
<?cs def:warning(warntext)
?><div class="warning">
<?cs alt:warntext ?>unknown warning message (<?cs
var:Data.Warning ?>)<?cs /alt ?>
</div><?cs
/def ?>
def:warning(warntext)
?><div class="warning"><?cs alt:warntext ?>unknown warning message (<?cs
var:Data.Warning ?>)<?cs /alt ?></div><?cs
/def ?><?cs
<?cs def:error(errtext)
def:error(errtext)
?><div class="error">
<?cs alt:errtext ?>unknown error message (<?cs
var:Data.Error ?>)<?cs /alt ?>
</div><?cs
/def ?>
var:Data.Error ?>)<?cs /alt ?></div><?cs
/def ?><?cs
<?cs def:success(succtext)
def:success(succtext)
?><div class="success">
<?cs alt:succtext ?>unknown success message (<?cs
var:Data.Success ?>)<?cs /alt ?>
</div><?cs
/def ?>
var:Data.Success ?>)<?cs /alt ?></div><?cs
/def ?><?cs
<?cs def:limit_string_len(text,limit)
def:limit_string_len(text,limit)
?><?cs set:text2 = text ?><?cs set:len = string.length(text2) ?><?cs
if:len > limit ?><?cs
var:string.slice(text,0,limit / #2 + limit % #2 - 1) ?>...<?cs
var:string.slice(text,len - limit / #2 + #3 - #1, len) ?><?cs
else ?><?cs var:text ?><?cs /if ?><?cs
/def ?>
/def ?><?cs
<?cs def:display_option(optname)
?><?cs linclude:TemplateDir + "/config_options/" + optname + ".cs" ?><?cs
def:show_options(element)
?><?cs if:subcount(element) == 0 ?><li><?cs
linclude:TemplateDir + '/config_options/' + element + '.cs' ?></li><?cs
else ?><?cs if:element["Self"] ?><li><?cs
linclude:TemplateDir + '/config_options/' + element["Self"] + '.cs' ?><?cs
/if ?><ul><?cs each:opts = element ?><?cs if:name(opts) != "Self" ?><?cs
call:show_options(opts) ?><?cs
/if ?><?cs /each
?></ul><?cs if:element["Self"] ?></li><?cs /if ?><?cs
/if ?><?cs
/def ?><?cs
def:is_substring(text_in, search_in)
?><?cs set:text = text_in
?><?cs set:search = search_in
?><?cs set:found = 0
?><?cs loop: index = #0, string.length(text), #1
?><?cs if:string.slice(text, index, index + string.length(search) - #1) == searchi
?><?cs set:found = 1 ?><?cs /if
?><?cs /loop ?><?cs
/def ?><?cs
def:link(attr1, value1, attr2, value2, attr3, value3)
?><?cs each:attrs = Temp
?><?cs set:attrs = ""
?><?cs /each
?><?cs each:attrs = Config.UI.LinkAttrs
?><?cs set:Temp[name(attrs)] = attrs
?><?cs /each
?><?cs if:attr1 != "" ?><?cs set:Temp[attr1] = value1 ?><?cs /if
?><?cs if:attr2 != "" ?><?cs set:Temp[attr2] = value2 ?><?cs /if
?><?cs if:attr3 != "" ?><?cs set:Temp[attr3] = value3 ?><?cs /if
?><?cs var:ScriptName
?><?cs set:first_each = 1
?><?cs if:subcount(Temp) > 0
?><?cs each:attrs = Temp
?><?cs if:(name(attrs) != "") && (attrs != "")
?><?cs if:first_each == 1 ?><?cs
set:first_each = 0 ?>?<?cs
else
?>&amp;<?cs /if
?><?cs var:url_escape(name(attrs)) ?>=<?cs var:url_escape(attrs)
?><?cs /if
?><?cs /each
?><?cs /if ?><?cs
/def ?>

View file

@ -2,15 +2,15 @@
<div id="nav_bar">
<ul>
<?cs if:(subcount(Data.Lists) > 0) ?>
<?cs if:(subcount(Data.Lists) > 0) && (UI.Navigation.ListSelect == 1) ?>
<li><a <?cs if:(Data.Action == "list_select") ?> class="nav_active"<?cs /if ?>
href="<?cs var:ScriptName ?>?action=list_select"
href="<?cs call:link("action","list_select","","","","") ?>"
title="<?cs var:html_escape(Lang.Menue.ListSelect) ?>"><?cs var:html_escape(Lang.Menue.ListSelect) ?></a>
</li>
<?cs /if ?>
<?cs if:Data.Permissions.Create ?>
<?cs if:Data.Permissions.Create && (UI.Navigation.ListCreate == 1) ?>
<li><a <?cs if:(Data.Action == "list_create") ?> class="nav_active"<?cs /if ?>
href="<?cs var:ScriptName ?>?action=list_create_ask"
href="<?cs call:link("action","list_create_ask","","","","") ?>"
title="<?cs var:html_escape(Lang.Menue.ListCreate) ?>"><?cs var:html_escape(Lang.Menue.ListCreate) ?></a>
</li>
<?cs /if ?>
@ -18,53 +18,119 @@
<?cs if:Data.List.Name ?>
<li><font class="no_link"><?cs var:html_escape(Lang.Menue.Properties) ?> <?cs call:limit_string_len(html_escape(Data.List.Name),25) ?></font><ul>
<li><a <?cs if:((Data.Action == "subscribers") && ((Data.List.PartType == "") || !Data.List.PartType)) ?>class="nav_active"<?cs /if ?>
href="<?cs var:ScriptName ?>?list=<?cs var:url_escape(Data.List.Name) ?>&amp;action=subscribers" title="<?cs var:html_escape(Lang.Menue.Subscribers) ?>"><?cs var:html_escape(Lang.Menue.Subscribers) ?></a>
<li><font class="no_link"><?cs var:html_escape(Lang.Menue.Properties) ?> <?cs call:limit_string_len(html_escape(Data.List.Name),25) ?></font><ul><li>
<?cs if:UI.Navigation.Subscribers.Subscribers == 1
?><a <?cs if:((Data.Action == "subscribers")
&& ((Data.List.PartType == "") || !Data.List.PartType))
?>class="nav_active"<?cs /if ?>
href="<?cs call:link("list",Data.List.Name,"action","subscribers","","") ?>"
title="<?cs var:html_escape(Lang.Menue.Subscribers) ?>"><?cs
else ?><font class="no_link"><?cs /if ?><?cs
var:html_escape(Lang.Menue.Subscribers) ?><?cs
if:UI.Navigation.Subscribers.Subscribers == 1 ?></a><?cs else ?></font><?cs
/if ?>
<ul>
<li><a <?cs if:((Data.Action == "subscribers") &&
<?cs if:UI.Navigation.Subscribers.Allow == 1
?><li><a <?cs if:((Data.Action == "subscribers") &&
(Data.List.PartType == "allow")) ?>class="nav_active"<?cs /if ?>
href="<?cs var:ScriptName ?>?list=<?cs var:url_escape(Data.List.Name) ?>&amp;action=subscribers&amp;part=allow"><?cs var:html_escape(Lang.Menue.AllowList) ?></a></li>
<li><a <?cs if:((Data.Action == "subscribers") &&
href="<?cs call:link("list",Data.List.Name,"action","subscribers",
"part","allow") ?>"><?cs
var:html_escape(Lang.Menue.AllowList) ?></a></li><?cs /if ?>
<?cs if:UI.Navigation.Subscribers.Deny == 1
?><li><a <?cs if:((Data.Action == "subscribers") &&
(Data.List.PartType == "deny")) ?> class="nav_active"<?cs /if ?>
href="<?cs var:ScriptName ?>?list=<?cs var:url_escape(Data.List.Name) ?>&amp;action=subscribers&amp;part=deny"><?cs var:html_escape(Lang.Menue.DenyList) ?></a></li>
<li><a <?cs if:((Data.Action == "subscribers") &&
href="<?cs call:link("list",Data.List.Name,"action","subscribers",
"part","deny") ?>"><?cs
var:html_escape(Lang.Menue.DenyList) ?></a></li><?cs /if ?>
<?cs if:UI.Navigation.Subscribers.Digest == 1
?><li><a <?cs if:((Data.Action == "subscribers") &&
(Data.List.PartType == "digest")) ?> class="nav_active"<?cs /if ?>
href="<?cs var:ScriptName ?>?list=<?cs var:url_escape(Data.List.Name) ?>&amp;action=subscribers&amp;part=digest"><?cs var:html_escape(Lang.Menue.DigestList) ?></a></li>
<li><a <?cs if:((Data.Action == "subscribers") &&
href="<?cs call:link("list",Data.List.Name,"action","subscribers",
"part","digest") ?>"><?cs
var:html_escape(Lang.Menue.DigestList) ?></a></li><?cs /if ?>
<?cs if:UI.Navigation.Subscribers.Moderators == 1
?><li><a <?cs if:((Data.Action == "subscribers") &&
(Data.List.PartType == "mod")) ?> class="nav_active"<?cs /if ?>
href="<?cs var:ScriptName ?>?list=<?cs var:url_escape(Data.List.Name) ?>&amp;action=subscribers&amp;part=mod"><?cs var:html_escape(Lang.Menue.ModList) ?></a></li>
href="<?cs call:link("list",Data.List.Name,"action","subscribers",
"part","mod") ?>"><?cs
var:html_escape(Lang.Menue.ModList) ?></a></li><?cs /if ?>
</ul>
</li>
<li><a <?cs if:(Data.Action == "config_main") ?> class="nav_active"<?cs /if ?>
href="<?cs var:ScriptName ?>?list=<?cs var:url_escape(Data.List.Name) ?>&amp;action=config_ask&amp;config_subset=main" title="<?cs var:html_escape(Lang.Menue.ConfigMain) ?>"><?cs var:html_escape(Lang.Menue.ConfigMain) ?></a>
<li><?cs if:UI.Navigation.Config.Main == 1
?><a <?cs if:(Data.Action == "config_main") ?> class="nav_active"<?cs /if ?>
href="<?cs call:link("list",Data.List.Name,"action","config_ask",
"config_subset","main") ?>" title="<?cs
var:html_escape(Lang.Menue.ConfigMain) ?>"><?cs
else ?><font class="no_link"><?cs /if ?><?cs
var:html_escape(Lang.Menue.ConfigMain) ?><?cs
if UI.Navigation.Config.Main == 1 ?></a><?cs else ?></font><?cs /if ?>
<ul>
<li><a <?cs if:(Data.Action == "config_subscription") ?> class="nav_active"<?cs /if ?>
href="<?cs var:ScriptName ?>?list=<?cs var:url_escape(Data.List.Name) ?>&amp;action=config_ask&amp;config_subset=subscription" title="<?cs var:html_escape(Lang.Menue.ConfigSub) ?>"><?cs var:html_escape(Lang.Menue.ConfigSub) ?></a></li>
<li><a <?cs if:(Data.Action == "config_posting") ?> class="nav_active"<?cs /if ?>
href="<?cs var:ScriptName ?>?list=<?cs var:url_escape(Data.List.Name) ?>&amp;action=config_ask&amp;config_subset=posting" title="<?cs var:html_escape(Lang.Menue.ConfigPost) ?>"><?cs var:html_escape(Lang.Menue.ConfigPost) ?></a></li>
<li><a <?cs if:(Data.Action == "config_processing") ?> class="nav_active"<?cs /if ?>
href="<?cs var:ScriptName ?>?list=<?cs var:url_escape(Data.List.Name) ?>&amp;action=config_ask&amp;config_subset=processing" title="<?cs var:html_escape(Lang.Menue.ConfigProcess) ?>"><?cs var:html_escape(Lang.Menue.ConfigProcess) ?></a></li>
<li><a <?cs if:(Data.Action == "config_archive") ?> class="nav_active"<?cs /if ?>
href="<?cs var:ScriptName ?>?list=<?cs var:url_escape(Data.List.Name) ?>&amp;action=config_ask&amp;config_subset=archive" title="<?cs var:html_escape(Lang.Menue.ConfigArchive) ?>"><?cs var:html_escape(Lang.Menue.ConfigArchive) ?></a></li>
<li><a <?cs if:(Data.Action == "config_admin") ?> class="nav_active"<?cs /if ?>
href="<?cs var:ScriptName ?>?list=<?cs var:url_escape(Data.List.Name) ?>&amp;action=config_ask&amp;config_subset=admin" title="<?cs var:html_escape(Lang.Menue.ConfigAdmin) ?>"><?cs var:html_escape(Lang.Menue.ConfigAdmin) ?></a></li>
<li><a <?cs if:(Data.Action == "config_all") ?> class="nav_active"<?cs /if ?>
href="<?cs var:ScriptName ?>?list=<?cs var:url_escape(Data.List.Name) ?>&amp;action=config_ask&amp;config_subset=all" title="<?cs var:html_escape(Lang.Menue.ConfigAll) ?>"><?cs var:html_escape(Lang.Menue.ConfigAll) ?></a></li>
<?cs if:UI.Navigation.Config.Subscription == 1
?><li><a <?cs if:(Data.Action == "config_subscription")
?> class="nav_active"<?cs /if ?>
href="<?cs call:link("list",Data.List.Name,"action","config_ask",
"config_subset","subscription") ?>"
title="<?cs var:html_escape(Lang.Menue.ConfigSub) ?>"><?cs
var:html_escape(Lang.Menue.ConfigSub) ?></a></li><?cs /if ?>
<?cs if:UI.Navigation.Config.Posting == 1
?><li><a <?cs if:(Data.Action == "config_posting")
?> class="nav_active"<?cs /if ?>
href="<?cs call:link("list",Data.List.Name,"action","config_ask",
"config_subset","posting") ?>" title="<?cs
var:html_escape(Lang.Menue.ConfigPost) ?>"><?cs
var:html_escape(Lang.Menue.ConfigPost) ?></a></li><?cs /if ?>
<?cs if:UI.Navigation.Config.Processing == 1
?><li><a <?cs if:(Data.Action == "config_processing")
?> class="nav_active"<?cs /if ?>
href="<?cs call:link("list",Data.List.Name,"action","config_ask",
"config_subset","processing") ?>"
title="<?cs var:html_escape(Lang.Menue.ConfigProcess) ?>"><?cs
var:html_escape(Lang.Menue.ConfigProcess) ?></a></li><?cs /if ?>
<?cs if:UI.Navigation.Config.Archive == 1
?><li><a <?cs if:(Data.Action == "config_archive") ?>
class="nav_active"<?cs /if ?>
href="<?cs call:link("list",Data.List.Name,"action","config_ask",
"config_subset","archive") ?>"
title="<?cs var:html_escape(Lang.Menue.ConfigArchive) ?>"><?cs
var:html_escape(Lang.Menue.ConfigArchive) ?></a></li><?cs /if ?>
<?cs if:UI.Navigation.Config.Admin == 1
?><li><a <?cs if:(Data.Action == "config_admin") ?>
class="nav_active"<?cs /if ?>
href="<?cs call:link("list",Data.List.Name,"action","config_ask",
"config_subset","admin") ?>"
title="<?cs var:html_escape(Lang.Menue.ConfigAdmin) ?>"><?cs
var:html_escape(Lang.Menue.ConfigAdmin) ?></a></li><?cs /if ?>
<?cs if:UI.Navigation.Config.All == 1
?><li><a <?cs if:(Data.Action == "config_all") ?>
class="nav_active"<?cs /if ?>
href="<?cs call:link("list",Data.List.Name,"action","config_ask",
"config_subset","all") ?>"
title="<?cs var:html_escape(Lang.Menue.ConfigAll) ?>"><?cs
var:html_escape(Lang.Menue.ConfigAll) ?></a></li><?cs /if ?>
</ul></li>
<li><a <?cs if:((Data.Action == "textfiles") || (Data.Action == "textfile_edit")) ?> class="nav_active"<?cs /if ?>
href="<?cs var:ScriptName ?>?list=<?cs var:url_escape(Data.List.Name) ?>&amp;action=textfiles" title="<?cs var:html_escape(Lang.Menue.TextFiles) ?>"><?cs var:html_escape(Lang.Menue.TextFiles) ?></a></li>
<?cs if:UI.Navigation.TextEdit == 1
?><li><a <?cs if:((Data.Action == "textfiles")
|| (Data.Action == "textfile_edit")) ?> class="nav_active"<?cs /if ?>
href="<?cs call:link("list",Data.List.Name,"action","textfiles","","") ?>"
title="<?cs var:html_escape(Lang.Menue.TextFiles) ?>"><?cs
var:html_escape(Lang.Menue.TextFiles) ?></a></li><?cs /if ?>
<li><a <?cs if:(Data.Action == "list_delete") ?> class="nav_active"<?cs /if ?>
href="<?cs var:ScriptName ?>?list=<?cs var:url_escape(Data.List.Name) ?>&amp;action=list_delete_ask" title="<?cs var:html_escape(Lang.Menue.ListDelete) ?>"><?cs var:html_escape(Lang.Menue.ListDelete) ?></a></li>
<?cs if:UI.Navigation.ListDelete == 1
?><li><a <?cs if:(Data.Action == "list_delete") ?> class="nav_active"<?cs /if ?>
href="<?cs call:link("list",Data.List.Name,"action","list_delete_ask","","") ?>"
title="<?cs var:html_escape(Lang.Menue.ListDelete) ?>"><?cs
var:html_escape(Lang.Menue.ListDelete) ?></a></li><?cs /if ?>
</ul></li>
<?cs /if ?>
<li><a href="http://www.ezmlm.org/ezman/index.html#toc1" target="_blank" title="<?cs var:html_escape(Lang.Misc.HelpLink) ?>"><?cs var:html_escape(Lang.Menue.Help) ?></a></li>
<?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
var:html_escape(Lang.Menue.Help) ?></a></li><?cs /if ?>
</ul>

View file

@ -26,45 +26,35 @@
<?cs /if ?>
<?cs if:((Data.List.PartType == "digest") || (Data.List.PartType == "deny") || (Data.List.PartType == 'mod')) ?>
<?cs if:( ((Data.List.PartType == "digest")
&& (subcount(UI.Options.Subscribers.Digest) >0))
|| ((Data.List.PartType == "deny")
&& (subcount(UI.Options.Subscribers.Deny) >0))
|| ((Data.List.PartType == 'mod')
&& (subcount(UI.Options.Subscribers.Moderators) >0))) ?>
<fieldset class="form">
<legend><?cs var:html_escape(Lang.Legend.RelevantOptions) ?> </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="part" value="<?cs var:Data.List.PartType ?>" />
<ul>
<?cs if:(Data.List.PartType == "digest") ?>
<li><?cs call:checkbox("d") ?></li>
<li><?cs call:setting("4") ?></li>
<?cs call:show_options(UI.Options.Subscribers.Digest) ?>
<?cs elif:(Data.List.PartType == "deny") ?>
<li><?cs call:checkbox("k") ?></li>
<?cs call:show_options(UI.Options.Subscribers.Deny) ?>
<?cs elif:(Data.List.PartType == "mod") ?>
<li><?cs call:checkbox("m") ?>
<?cs if:Data.List.Options.m ?>
<ul><li><?cs call:setting("7") ?></li></ul><?cs /if ?>
</li>
<li><?cs call:checkbox("s") ?>
<?cs if:Data.List.Options.s ?>
<ul><li><?cs call:setting("8") ?></li></ul><?cs /if ?>
</li>
<li><?cs call:checkbox("r") ?>
<?cs if:Data.List.Options.r ?>
<ul><li><?cs call:setting("9") ?>
<?cs var:Lang.Misc.ModSubOverridesRemote ?></li></ul><?cs /if ?>
</li>
<?cs call:show_options(UI.Options.Subscribers.Moderators) ?>
<?cs /if ?>
<li><!-- include default form values -->
<!-- include default form values -->
<?cs include:TemplateDir + '/form_common.cs' ?>
<input type="hidden" name="config_subset" value="RESERVED-subscribers" />
<input type="hidden" name="list" value="<?cs var:Data.List.Name ?>" />
<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>
<button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.UpdateConfiguration) ?></button>
</form>
</fieldset>
<?cs /if ?>
@ -89,7 +79,7 @@
<table class="subscribers"><tr>
<?cs if:subcount(Data.List.Subscribers) > 0 ?>
<td><form method="post" action="<?cs var:ScriptName ?>" enctype="application/x-www-form-urlencoded">
<td><form method="post" action="<?cs call:link("","","","","","") ?>" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="list" value="<?cs var:Data.List.Name ?>" />
<?cs if:Data.List.PartType ?>
<input type="hidden" name="part" value="<?cs var:Data.List.PartType ?>" />
@ -115,7 +105,7 @@
</ul></form></td>
<?cs /if ?>
<td><form method="post" action="<?cs var:ScriptName ?>" enctype="multipart/form-data">
<td><form method="post" action="<?cs call:link("","","","","","") ?>" enctype="multipart/form-data">
<!-- this form has to be "multipart/form-data" to make file upload work -->
<input type="hidden" name="list" value="<?cs var:Data.List.Name ?>" />
<?cs if:Data.List.PartType ?>

View file

@ -16,7 +16,7 @@
<?cs var:html_escape(Lang.Introduction.ResetTextFile) ?>
</div>
<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="list" value="<?cs var:Data.List.Name ?>">
<input type="hidden" name="file" value="<?cs var:Data.List.File.Name ?>">
<input type="hidden" name="action" value="textfile_reset" />
@ -29,7 +29,7 @@
<fieldset class="form">
<legend><?cs var:html_escape(Lang.Legend.TextFileEdit) ?> </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="list" value="<?cs var:Data.List.Name ?>">
<input type="hidden" name="file" value="<?cs var:Data.List.File.Name ?>">

View file

@ -9,7 +9,7 @@
<fieldset class="form">
<legend><?cs var:html_escape(Lang.Legend.TextFiles) ?> </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="list" value="<?cs var:Data.List.Name ?>" />
<ul>

View file

@ -0,0 +1,189 @@
UI {
Navigation {
ListSelect = 1
ListCreate = 1
Subscribers {
Subscribers = 1
Digest = 1
Allow = 1
Deny = 1
Moderators = 1
}
Config {
Main = 1
Subscription = 1
Posting = 1
Processing = 1
Archive = 1
Admin = 1
All = 1
}
TextEdit = 1
ListDelete = 1
Help = 1
}
Options {
Create {
Listname = create_listname
Listaddress = create_listaddress
Listlanguage = lang_select
Mysql = mysql
Webuser = webusers
}
Subscribers {
Subscribers = {}
Digest {
Enabled = digest_enabled
Settings = digest_settings
}
Deny {
Enabled = block_deny
}
Moderators {
Posting {
Self = mod_post
Path = mod_post_path
}
Subscription {
Self = mod_sub
Path = mod_sub_path
}
Administration {
Self = admin_enabled
Path = admin_path
}
}
}
Config {
Main {
Language = lang_select
Charset = charset_select
Owner = owner_address
MainList = mainlist
MailmanRequests = mailman_requests
RemoveWarn = warn_remove
SQL = mysql
WebUsers = webusers
}
Archive {
Enabled {
Self = archive_enabled
Public = public
ModOnly = archive_mod_only
Guard = archive_deny_unknown
}
RemovePrivateHeader = archive_remove_private_header
}
Subscription {
Public = public
ConfirmSub = confirm_sub
ConfirmUnsub = confirm_unsub
ModSub {
Self = mod_sub
Path = mod_sub_path
}
}
Admin {
Enabled {
Self = admin_enabled
RequestSubscribers = admin_get_subscribers
EditText = admin_edit_text
Path = admin_path
}
}
Posting {
UseDeny = block_deny
BlockOthers = block_others_post
Confirm = confirm_post
Moderate {
Self = mod_post
NonMod = block_nonmod_post
Path = mod_post_path
}
SizeMax = msgsize_max
SizeMin = msgsize_min
MimeCheck {
Self = mimecheck
MimeReject = mimereject
}
}
Processing {
Prefix = prefix
Trailer = trailer
From = from_address
MimeCheck {
Self = mimecheck
MimeRemove = mimeremove
}
HeaderRemove = headerremove
HeaderAdd = headeradd
}
Overview {
Public = public
ConfirmSub = confirm_sub
ConfirmUnsub = confirm_unsub
ModSubEnable = mod_sub
UseDeny = block_deny
BlockOthers = block_others_post
ConfirmPosting = confirm_post
ModPosting = mod_post
NonModPosting = block_nonmod_post
MailmanRequests = mailman_requests
RemoveWarn = warn_remove
DigestEnabled = digest_enabled
DigestSettings = digest_settings
ArchiveEnabled = archive_enabled
ArchiveModOnly = archive_mod_only
ArchiveGuard = archive_deny_unknown
RemovePrivateHeader = archive_remove_private_header
AdminEnabled = admin_enabled
AdminRequestSubscribers = admin_get_subscribers
AdminEditText = admin_edit_text
FromAddress = from_address
Owner = owner_address
SQL = mysql
MainList = mainlist
ModPostPath = mod_post_path
ModSubPath = mod_sub_path
AdminPath = admin_path
Prefix = prefix
Trailer = trailer
SizeMax = msgsize_max
SizeMin = msgsize_min
MimeCheck {
Self = mimecheck
MimeRemove = mimeremove
MimeReject = mimereject
}
HeaderRemove = headerremove
HeaderAdd = headeradd
Language = lang_select
Charset = charset_select
WebUsers = webusers
}
}
}
}