support for encrypted mailing lists finished
small stylesheet improvements language detection language selection implemented (prepared for release 3.2)
This commit is contained in:
parent
9eb084e460
commit
88072eec38
9
README
9
README
|
@ -1,6 +1,6 @@
|
||||||
===================
|
=================
|
||||||
| ezmlm-web-3.1.1 |
|
| ezmlm-web-3.2 |
|
||||||
===================
|
=================
|
||||||
|
|
||||||
If you only want to know how to install ezmlm-web, then you should
|
If you only want to know how to install ezmlm-web, then you should
|
||||||
read INSTALL.
|
read INSTALL.
|
||||||
|
@ -21,9 +21,10 @@ VIII. Bugs && Bug Reports
|
||||||
|
|
||||||
I. Copyright Stuff - essentially the FreeBSD licence ...
|
I. Copyright Stuff - essentially the FreeBSD licence ...
|
||||||
==================
|
==================
|
||||||
ezmlm-web - version 3.1.1 - 01/19/02006
|
ezmlm-web - version 3.2 - 04/14/02006
|
||||||
|
|
||||||
Copyright (C) 1998, Guy Antony Halse, All Rights Reserved.
|
Copyright (C) 1998, Guy Antony Halse, All Rights Reserved.
|
||||||
|
Copyright (C) 02005-02006, Lars Kruse, All Rights Reserved.
|
||||||
|
|
||||||
Please send bug reports and comments to ezmlm-web@sumpfralle.de
|
Please send bug reports and comments to ezmlm-web@sumpfralle.de
|
||||||
|
|
||||||
|
|
|
@ -2,13 +2,16 @@ 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
|
UPGRADING ezmlm-web 3.1 to ezmlm-web 3.2
|
||||||
|
|
||||||
1) install the perl module File::Path
|
1) install the perl module File::Path
|
||||||
|
|
||||||
2) a new (optional) configuration setting is available: DOTQMAIL_DIR
|
2) a new (optional) configuration setting is available: DOTQMAIL_DIR
|
||||||
Use it, if you run a multi domain vpopmail setup.
|
Use it, if you run a multi domain vpopmail setup.
|
||||||
|
|
||||||
|
3) install Mail::Ezmlm::Gpg if you want to handle encrypted mailing lists
|
||||||
|
(see README.gnupg for details)
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
UPGRADING ezmlm-web 3.0 to ezmlm-web 3.1
|
UPGRADING ezmlm-web 3.0 to ezmlm-web 3.1
|
||||||
|
|
|
@ -1,3 +1,10 @@
|
||||||
|
Version 3.2 - 04/14/02006
|
||||||
|
* support for encrypted mailing lists
|
||||||
|
(http://www.synacklabs.net/projects/crypt-ml/)
|
||||||
|
* detect preferred interface language
|
||||||
|
* user-specific interface language selection
|
||||||
|
* handling of empty settings for ezmlm-idx 5.0 fixed (closes #21)
|
||||||
|
|
||||||
Version 3.1.4 - 03/26/02006
|
Version 3.1.4 - 03/26/02006
|
||||||
* new setting: DOTQMAIL_DIR (useful for multi domain vpopmail setups)
|
* new setting: DOTQMAIL_DIR (useful for multi domain vpopmail setups)
|
||||||
[suggested by Maurits Lamers]
|
[suggested by Maurits Lamers]
|
||||||
|
|
|
@ -30,8 +30,19 @@ font.feature {
|
||||||
padding-top: 1.5%;
|
padding-top: 1.5%;
|
||||||
padding-bottom: 1.5%;
|
padding-bottom: 1.5%;
|
||||||
background-color: #c0c0b0;
|
background-color: #c0c0b0;
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 2px 2px 1px 1px;
|
||||||
|
border-color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#nav_bar hr {
|
||||||
|
color: #707770;
|
||||||
|
background-color: #707770;
|
||||||
|
margin: 10px 30px 10px 10px;
|
||||||
|
align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
.nav_group {
|
.nav_group {
|
||||||
margin-top: 1%;
|
margin-top: 1%;
|
||||||
padding-bottom: 1%;
|
padding-bottom: 1%;
|
||||||
|
@ -50,6 +61,12 @@ font.feature {
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
v_bar ul li ul {
|
||||||
|
/* small space between middle level entries */
|
||||||
|
margin-bottom: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#nav_bar ul li ul li {
|
#nav_bar ul li ul li {
|
||||||
/* no space between lower level entries */
|
/* no space between lower level entries */
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
|
@ -74,6 +91,28 @@ font.feature {
|
||||||
color: #2f4860;
|
color: #2f4860;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#nav_bar form.select select {
|
||||||
|
background-color: #c8c8b8;
|
||||||
|
border-width: 1px;
|
||||||
|
border-style: dotted;
|
||||||
|
border-color: #b0b0a0;
|
||||||
|
color: #2f4860;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav_bar form.select button {
|
||||||
|
background-color: #c4c4b4;
|
||||||
|
border-width: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav_bar form.select button:hover {
|
||||||
|
background-color: #d8d8d8;
|
||||||
|
color: #2f4860;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav_bar form.select {
|
||||||
|
margin: 7px 0px 7px 0px;
|
||||||
|
}
|
||||||
|
|
||||||
#main_content {
|
#main_content {
|
||||||
margin-left: 22%;
|
margin-left: 22%;
|
||||||
padding-left: 3%;
|
padding-left: 3%;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
Package: ezmlm-web
|
Package: ezmlm-web
|
||||||
Version: 3.1.1-1
|
Version: 3.2-1
|
||||||
Section: admin
|
Section: admin
|
||||||
Priority: extra
|
Priority: extra
|
||||||
Architecture: all
|
Architecture: all
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
ezmlm-web (0.3.1-1) unstable; urgency=low
|
ezmlm-web (0.3.2-1) unstable; urgency=low
|
||||||
* Initial release
|
* Initial release
|
||||||
-- Lars Kruse <devel@sumpfralle.de> Sat, 07 Jan 2006 00:45:47 +0100
|
-- Lars Kruse <devel@sumpfralle.de> Fri, 14 Apr 2006 14:36:47 +0100
|
||||||
|
|
189
ezmlm-web.cgi
189
ezmlm-web.cgi
|
@ -1,6 +1,6 @@
|
||||||
#!/usr/bin/perl
|
#!/usr/bin/perl
|
||||||
#===========================================================================
|
#===========================================================================
|
||||||
# ezmlm-web.cgi - version 3.1.1
|
# ezmlm-web.cgi - version 3.2
|
||||||
# ==========================================================================
|
# ==========================================================================
|
||||||
# All user configuration happens in the config file ``ezmlmwebrc''
|
# All user configuration happens in the config file ``ezmlmwebrc''
|
||||||
# POD documentation is at the end of this file
|
# POD documentation is at the end of this file
|
||||||
|
@ -21,11 +21,16 @@ use CGI;
|
||||||
use IO::File;
|
use IO::File;
|
||||||
use POSIX qw(tmpnam);
|
use POSIX qw(tmpnam);
|
||||||
use Encode qw/ from_to /; # add by ooyama for char convert
|
use Encode qw/ from_to /; # add by ooyama for char convert
|
||||||
|
use English; # for dropping privileges
|
||||||
|
|
||||||
# do not forget: we depend on Mail::Ezmlm::Gpg if the corresponding configuration
|
# do not forget: we depend on Mail::Ezmlm::Gpg if the corresponding configuration
|
||||||
# setting is turned on
|
# setting is turned on
|
||||||
|
|
||||||
|
|
||||||
|
# drop privileges (necessary for calling gpg)
|
||||||
|
$UID = $EUID;
|
||||||
|
$GID = $EGID;
|
||||||
|
|
||||||
my $q = new CGI;
|
my $q = new CGI;
|
||||||
$q->import_names('Q');
|
$q->import_names('Q');
|
||||||
use vars qw[$opt_c $opt_d $opt_C];
|
use vars qw[$opt_c $opt_d $opt_C];
|
||||||
|
@ -80,8 +85,8 @@ do $config_file;
|
||||||
|
|
||||||
# do we support encrypted mailing lists?
|
# do we support encrypted mailing lists?
|
||||||
# see http://www.synacklabs.net/projects/crypt-ml/
|
# see http://www.synacklabs.net/projects/crypt-ml/
|
||||||
if (-e "$config_file" . ".encrypted") {
|
if (-e "$config_file" . ".gnupg") {
|
||||||
do "$config_file.encrypted";
|
do "$config_file.gnupg";
|
||||||
# the config file should include "use Mail::Ezmlm::Gpg" as the use-line may not
|
# the config file should include "use Mail::Ezmlm::Gpg" as the use-line may not
|
||||||
# be used here
|
# be used here
|
||||||
if (defined($GPG_SUPPORT) && ($GPG_SUPPORT)) {
|
if (defined($GPG_SUPPORT) && ($GPG_SUPPORT)) {
|
||||||
|
@ -138,6 +143,12 @@ unless (&check_permission_for_action) {
|
||||||
elsif ($action eq '' || $action eq 'list_select') {
|
elsif ($action eq '' || $action eq 'list_select') {
|
||||||
# Default action. Present a list of available lists to the user ...
|
# Default action. Present a list of available lists to the user ...
|
||||||
$pagename = 'list_select';
|
$pagename = 'list_select';
|
||||||
|
} elsif ($action eq 'show_page') {
|
||||||
|
$pagename = $q->param('pagename');
|
||||||
|
unless (-e "$TEMPLATE_DIR/$pagename.cs") {
|
||||||
|
$pagename = 'list_select';
|
||||||
|
$error = 'UnknownAction';
|
||||||
|
}
|
||||||
} elsif ($action eq 'subscribers') {
|
} elsif ($action eq 'subscribers') {
|
||||||
# display list (or part list) subscribers
|
# display list (or part list) subscribers
|
||||||
if (defined($q->param('list'))) {
|
if (defined($q->param('list'))) {
|
||||||
|
@ -219,16 +230,30 @@ elsif ($action eq '' || $action eq 'list_select') {
|
||||||
$error = 'ParameterMissing';
|
$error = 'ParameterMissing';
|
||||||
$pagename = 'list_select';
|
$pagename = 'list_select';
|
||||||
}
|
}
|
||||||
} elsif ($action eq 'gnupg_convert') {
|
} elsif ($GPG_SUPPORT && ($action eq 'gnupg_convert_ask')) {
|
||||||
|
$pagename = 'gnupg_convert';
|
||||||
|
} elsif ($GPG_SUPPORT && ($action eq 'gnupg_convert_do')) {
|
||||||
my $tlist = new Mail::Ezmlm::Gpg("$LIST_DIR/" . $q->param('list'));
|
my $tlist = new Mail::Ezmlm::Gpg("$LIST_DIR/" . $q->param('list'));
|
||||||
if ($tlist->convert()) {
|
if ($tlist->is_gpg()) {
|
||||||
|
if ($tlist->convert_to_plaintext()) {
|
||||||
$pagename = 'subscribers';
|
$pagename = 'subscribers';
|
||||||
$success = 'GnupgConvert';
|
$success = 'GnupgConvert';
|
||||||
} else {
|
} else {
|
||||||
$pagename = 'subscribers';
|
warn $tlist->errmsg();
|
||||||
|
$pagename = 'gnupg_convert';
|
||||||
$warning = 'GnupgConvert';
|
$warning = 'GnupgConvert';
|
||||||
}
|
}
|
||||||
} elsif (($action eq 'gnupg_ask') || ($action eq 'gnupg_do')) {
|
} else {
|
||||||
|
if ($tlist->convert_to_encrypted()) {
|
||||||
|
$pagename = 'gnupg_generate_key';
|
||||||
|
$success = 'GnupgConvert';
|
||||||
|
} else {
|
||||||
|
warn $tlist->errmsg();
|
||||||
|
$pagename = 'gnupg_convert';
|
||||||
|
$warning = 'GnupgConvert';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} elsif ($GPG_SUPPORT && (($action eq 'gnupg_ask') || ($action eq 'gnupg_do'))) {
|
||||||
# User wants to manage keys (only for encrypted mailing lists)
|
# User wants to manage keys (only for encrypted mailing lists)
|
||||||
my $subset = $q->param('gnupg_subset');
|
my $subset = $q->param('gnupg_subset');
|
||||||
if (defined($q->param('list')) && ($subset ne '')) {
|
if (defined($q->param('list')) && ($subset ne '')) {
|
||||||
|
@ -248,7 +273,7 @@ elsif ($action eq '' || $action eq 'list_select') {
|
||||||
$error = 'ParameterMissing';
|
$error = 'ParameterMissing';
|
||||||
$pagename = 'list_select';
|
$pagename = 'list_select';
|
||||||
}
|
}
|
||||||
} elsif ($action eq 'gnupg_export') {
|
} elsif ($GPG_SUPPORT && ($action eq 'gnupg_export')) {
|
||||||
if (defined($q->param('list')) && defined($q->param('gnupg_keyid'))) {
|
if (defined($q->param('list')) && defined($q->param('gnupg_keyid'))) {
|
||||||
if (&gnupg_export_key($q->param('list'), $q->param('gnupg_keyid'))) {
|
if (&gnupg_export_key($q->param('list'), $q->param('gnupg_keyid'))) {
|
||||||
exit 0;
|
exit 0;
|
||||||
|
@ -362,16 +387,21 @@ sub load_hdf {
|
||||||
&fatal_error("Template dir ($TEMPLATE_DIR) not found!") unless (-e $TEMPLATE_DIR);
|
&fatal_error("Template dir ($TEMPLATE_DIR) not found!") unless (-e $TEMPLATE_DIR);
|
||||||
$hdf->setValue("TemplateDir", "$TEMPLATE_DIR/");
|
$hdf->setValue("TemplateDir", "$TEMPLATE_DIR/");
|
||||||
|
|
||||||
# TODO: put some language detection and "web_lang" handling here
|
|
||||||
$hdf->readFile($LANGUAGE_DIR . '/' . $HTML_LANGUAGE . '.hdf');
|
|
||||||
|
|
||||||
# "normal", "basic" and "expert" should be supported
|
# "normal", "basic" and "expert" should be supported
|
||||||
# TODO: should be selected via web interface
|
# TODO: should be selected via web interface
|
||||||
$ui_template = "normal";
|
$ui_template = "normal";
|
||||||
$ui_set = "default"; # may be overwritten later
|
$ui_set = "default"; # may be overwritten later
|
||||||
$hdf->setValue("Config.UI.LinkAttrs.web_lang", $HTML_LANGUAGE);
|
|
||||||
$hdf->setValue("Config.UI.LinkAttrs.template", $ui_template);
|
$hdf->setValue("Config.UI.LinkAttrs.template", $ui_template);
|
||||||
|
|
||||||
|
# retrieve available languages and add them to the dataset
|
||||||
|
my %languages = &get_available_interface_languages();
|
||||||
|
my $lang;
|
||||||
|
foreach $lang (keys %languages) {
|
||||||
|
$hdf->setValue("Config.UI.Languages.$lang", $languages{$lang});
|
||||||
|
}
|
||||||
|
|
||||||
|
$hdf = &load_interface_language($hdf);
|
||||||
|
|
||||||
$hdf->setValue("ScriptName", $ENV{'SCRIPT_NAME'});
|
$hdf->setValue("ScriptName", $ENV{'SCRIPT_NAME'});
|
||||||
$hdf->setValue("Stylesheet", "$HTML_CSS_FILE");
|
$hdf->setValue("Stylesheet", "$HTML_CSS_FILE");
|
||||||
$hdf->setValue("Config.PageTitle", "$HTML_TITLE");
|
$hdf->setValue("Config.PageTitle", "$HTML_TITLE");
|
||||||
|
@ -417,6 +447,75 @@ sub output_page {
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
sub load_interface_language
|
||||||
|
{
|
||||||
|
my ($data) = @_;
|
||||||
|
my $config_language;
|
||||||
|
|
||||||
|
# load $HTML_LANGUAGE - this is necessary, if a translation is incomplete
|
||||||
|
$data->readFile("$LANGUAGE_DIR/$HTML_LANGUAGE" . ".hdf");
|
||||||
|
|
||||||
|
# set default language
|
||||||
|
$config_language = 'en';
|
||||||
|
$config_language = $HTML_LANGUAGE
|
||||||
|
unless (&check_interface_language($HTML_LANGUAGE));
|
||||||
|
|
||||||
|
# check for preferred browser language, if the box was not initialized yet
|
||||||
|
my $prefLang = &get_browser_language();
|
||||||
|
# take it, if a supported browser language was found
|
||||||
|
$config_language = $prefLang unless ($prefLang eq '');
|
||||||
|
|
||||||
|
######### temporary language setting? ############
|
||||||
|
# the default language can be overriden by the language selection form
|
||||||
|
if ($q->param('web_lang')) {
|
||||||
|
my $weblang = $q->param('web_lang');
|
||||||
|
if (&check_interface_language($weblang)) {
|
||||||
|
# load the data
|
||||||
|
$config_language = "$weblang";
|
||||||
|
} else {
|
||||||
|
# no valid language was selected - so you may ignore it
|
||||||
|
$warning = 'InvalidLanguage';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# add the setting to every link
|
||||||
|
$data->setValue('Config.UI.LinkAttrs.web_lang', "$config_language");
|
||||||
|
|
||||||
|
# import the configured resp. the temporarily selected language
|
||||||
|
$data->readFile("$LANGUAGE_DIR/$config_language" . ".hdf");
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# look for preferred browser language setting
|
||||||
|
# this code was adapted from Per Cederberg
|
||||||
|
# http://www.percederberg.net/home/perl/select.perl
|
||||||
|
# it returns an empty string, if no supported language was found
|
||||||
|
sub get_browser_language
|
||||||
|
{
|
||||||
|
my ($str, @langs, @res);
|
||||||
|
|
||||||
|
# Use language preference settings
|
||||||
|
if ($ENV{'HTTP_ACCEPT_LANGUAGE'} ne '')
|
||||||
|
{
|
||||||
|
@langs = split(/,/, $ENV{'HTTP_ACCEPT_LANGUAGE'});
|
||||||
|
foreach (@langs)
|
||||||
|
{
|
||||||
|
# get the first part of the language setting
|
||||||
|
($str) = ($_ =~ m/([a-z]+)/);
|
||||||
|
# check, if it is available
|
||||||
|
$res[$#res+1] = $str if check_interface_language($str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# if everything fails - return empty string
|
||||||
|
$res[0] = "" if ($#res lt 0);
|
||||||
|
return $res[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
sub set_pagedata_list_of_lists()
|
sub set_pagedata_list_of_lists()
|
||||||
{
|
{
|
||||||
my (@files, $i, $num);
|
my (@files, $i, $num);
|
||||||
|
@ -521,10 +620,12 @@ sub set_pagedata4list
|
||||||
if (&is_list_gnupg($listname)) {
|
if (&is_list_gnupg($listname)) {
|
||||||
# some encryption specific stuff
|
# some encryption specific stuff
|
||||||
&set_pagedata4list_gnupg($listname);
|
&set_pagedata4list_gnupg($listname);
|
||||||
|
$pagedata->setValue("Data.List.Type","gnupg");
|
||||||
$ui_set = "gnupg";
|
$ui_set = "gnupg";
|
||||||
} else {
|
} else {
|
||||||
# do the non-encryption configuration
|
# do the non-encryption configuration
|
||||||
&set_pagedata4list_normal($listname, $part_type);
|
&set_pagedata4list_normal($listname, $part_type);
|
||||||
|
$pagedata->setValue("Data.List.Type","default");
|
||||||
$ui_set = "default";
|
$ui_set = "default";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -542,15 +643,14 @@ sub set_pagedata4list_gnupg() {
|
||||||
$gpg_list = new Mail::Ezmlm::Gpg("$LIST_DIR/$listname");
|
$gpg_list = new Mail::Ezmlm::Gpg("$LIST_DIR/$listname");
|
||||||
|
|
||||||
# read the configuration
|
# read the configuration
|
||||||
my %config = $gpg_list->getconfig();
|
%config = $gpg_list->getconfig();
|
||||||
my $item;
|
|
||||||
foreach $item (keys %config) {
|
foreach $item (keys %config) {
|
||||||
$pagedata->setValue("Data.List.Options.gnupg_$item", $config{$item});
|
$pagedata->setValue("Data.List.Options.gnupg_$item", $config{$item});
|
||||||
}
|
}
|
||||||
|
|
||||||
# retrieve the currently available public keys
|
# retrieve the currently available public keys
|
||||||
@gpg_keys = $gpg_list->get_public_keys();
|
@gpg_keys = $gpg_list->get_public_keys();
|
||||||
for (my $i = 0; $i <= $#gpg_keys; $i++) {
|
for (my $i = 0; $i < @gpg_keys; $i++) {
|
||||||
$pagedata->setValue("Data.List.gnupg_keys.public.$i.id" , $gpg_keys[$i]{id});
|
$pagedata->setValue("Data.List.gnupg_keys.public.$i.id" , $gpg_keys[$i]{id});
|
||||||
$pagedata->setValue("Data.List.gnupg_keys.public.$i.email" , $gpg_keys[$i]{email});
|
$pagedata->setValue("Data.List.gnupg_keys.public.$i.email" , $gpg_keys[$i]{email});
|
||||||
$pagedata->setValue("Data.List.gnupg_keys.public.$i.name" , $gpg_keys[$i]{name});
|
$pagedata->setValue("Data.List.gnupg_keys.public.$i.name" , $gpg_keys[$i]{name});
|
||||||
|
@ -559,7 +659,7 @@ sub set_pagedata4list_gnupg() {
|
||||||
|
|
||||||
# retrieve the currently available secret keys
|
# retrieve the currently available secret keys
|
||||||
@gpg_keys = $gpg_list->get_secret_keys();
|
@gpg_keys = $gpg_list->get_secret_keys();
|
||||||
for (my $i = 0; $i <= $#gpg_keys; $i++) {
|
for (my $i = 0; $i < @gpg_keys; $i++) {
|
||||||
$pagedata->setValue("Data.List.gnupg_keys.secret.$i.id" , $gpg_keys[$i]{id});
|
$pagedata->setValue("Data.List.gnupg_keys.secret.$i.id" , $gpg_keys[$i]{id});
|
||||||
$pagedata->setValue("Data.List.gnupg_keys.secret.$i.email" , $gpg_keys[$i]{email});
|
$pagedata->setValue("Data.List.gnupg_keys.secret.$i.email" , $gpg_keys[$i]{email});
|
||||||
$pagedata->setValue("Data.List.gnupg_keys.secret.$i.name" , $gpg_keys[$i]{name});
|
$pagedata->setValue("Data.List.gnupg_keys.secret.$i.name" , $gpg_keys[$i]{name});
|
||||||
|
@ -810,7 +910,9 @@ sub get_dotqmail_files {
|
||||||
# get list of existing files (remove empty entries)
|
# get list of existing files (remove empty entries)
|
||||||
@files = grep {/./} map { (-e "$qmail_prefix$_")? "$qmail_prefix$_" : undef } (
|
@files = grep {/./} map { (-e "$qmail_prefix$_")? "$qmail_prefix$_" : undef } (
|
||||||
'',
|
'',
|
||||||
|
'.no-gpg',
|
||||||
'-default',
|
'-default',
|
||||||
|
'-default.no-gpg',
|
||||||
'-owner',
|
'-owner',
|
||||||
'-return-default',
|
'-return-default',
|
||||||
'-reject-default',
|
'-reject-default',
|
||||||
|
@ -1144,7 +1246,7 @@ sub create_list {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (defined($q->param('list_language')) && ($q->param('list_language') ne 'default')) {
|
if (defined($q->param('list_language')) && ($q->param('list_language') ne 'default')) {
|
||||||
if (&check_language($list, $q->param('list_language'))) {
|
if (&check_list_language($list, $q->param('list_language'))) {
|
||||||
$list->set_lang($q->param('list_language'));
|
$list->set_lang($q->param('list_language'));
|
||||||
} else {
|
} else {
|
||||||
$warning = 'InvalidListLanguage';
|
$warning = 'InvalidListLanguage';
|
||||||
|
@ -1268,9 +1370,29 @@ sub gnupg_export_key()
|
||||||
{
|
{
|
||||||
my ($listname, $keyid) = @_;
|
my ($listname, $keyid) = @_;
|
||||||
my $list = new Mail::Ezmlm::Gpg("$LIST_DIR/$listname");
|
my $list = new Mail::Ezmlm::Gpg("$LIST_DIR/$listname");
|
||||||
|
|
||||||
|
# get the name of the key (for the download filename)
|
||||||
|
my @all_keys = $list->get_public_keys();
|
||||||
|
my ($i, $key, $name);
|
||||||
|
for ($i = 0; $i < @all_keys; $i++) {
|
||||||
|
$name = $all_keys[$i]{name} if ($keyid == $all_keys[$i]{id});
|
||||||
|
}
|
||||||
|
warn "vorher: $name";
|
||||||
|
if ($name) {
|
||||||
|
$name =~ s/\W+/_/g;
|
||||||
|
$name .= '.asc';
|
||||||
|
} else {
|
||||||
|
$name = "public_key.asc";
|
||||||
|
}
|
||||||
|
warn "nachher: $name";
|
||||||
|
|
||||||
my $key_armor;
|
my $key_armor;
|
||||||
if ($key_armor = $list->export_key($keyid)) {
|
if ($key_armor = $list->export_key($keyid)) {
|
||||||
print "Content-Type: application/pgp\n\n";
|
print "Content-Type: application/pgp\n";
|
||||||
|
# suggest a download filename
|
||||||
|
# (taken from http://www.bewley.net/perl/download.pl)
|
||||||
|
print "Content-Disposition: attachment; filename=$name\n";
|
||||||
|
print "Content-Description: exported key";
|
||||||
print $key_armor;
|
print $key_armor;
|
||||||
return (0==0);
|
return (0==0);
|
||||||
} else {
|
} else {
|
||||||
|
@ -1485,7 +1607,7 @@ sub update_config {
|
||||||
# update language
|
# update language
|
||||||
# this _must_ happen after set_charset to avaoid accidently overriding default charset
|
# this _must_ happen after set_charset to avaoid accidently overriding default charset
|
||||||
if (defined($q->param('list_language'))) {
|
if (defined($q->param('list_language'))) {
|
||||||
if (&check_language($list, $q->param('list_language'))) {
|
if (&check_list_language($list, $q->param('list_language'))) {
|
||||||
$list->set_lang($q->param('list_language'));
|
$list->set_lang($q->param('list_language'));
|
||||||
} else {
|
} else {
|
||||||
$warning = 'InvalidListLanguage';
|
$warning = 'InvalidListLanguage';
|
||||||
|
@ -1647,7 +1769,34 @@ sub webauth_create_allowed {
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
sub check_language {
|
sub get_available_interface_languages {
|
||||||
|
my (%languages, @files, $file);
|
||||||
|
opendir(DIR, $LANGUAGE_DIR)
|
||||||
|
or &fatal_error ("Language directory ($LANGUAGE_DIR) not accessible!");
|
||||||
|
@files = sort grep { /.*\.hdf$/ } readdir(DIR);
|
||||||
|
close(DIR);
|
||||||
|
|
||||||
|
foreach $file (@files) {
|
||||||
|
my $hdf = ClearSilver::HDF->new();
|
||||||
|
$hdf->readFile("$LANGUAGE_DIR/$file");
|
||||||
|
substr($file, -4) = "";
|
||||||
|
my $lang_name = $hdf->getValue("Lang.Name", "$file");
|
||||||
|
$languages{$file} = $lang_name;
|
||||||
|
}
|
||||||
|
return %languages;
|
||||||
|
}
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
sub check_interface_language {
|
||||||
|
my ($language) = @_;
|
||||||
|
my %languages = &get_available_interface_languages();
|
||||||
|
return defined($languages{$language});
|
||||||
|
}
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
sub check_list_language {
|
||||||
my ($list, $lang) = @_;
|
my ($list, $lang) = @_;
|
||||||
my $found = 0;
|
my $found = 0;
|
||||||
my $item;
|
my $item;
|
||||||
|
|
12
ezmlmwebrc.gnupg
Normal file
12
ezmlmwebrc.gnupg
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
# sample configuration file for encrypted mailing list support
|
||||||
|
|
||||||
|
# BEWARE: enable the following line ONLY if you installed the
|
||||||
|
# Mail::Ezmlm::Gpg module - otherwise ezmlm-web will not work!
|
||||||
|
#use Mail::Ezmlm::Gpg;
|
||||||
|
|
||||||
|
# turn support for encrypted mailing lists on or off
|
||||||
|
# defaults to 0 (off)
|
||||||
|
# you MUST enable the "use" line above, if you turn on the gpg support
|
||||||
|
$GPG_SUPPORT = 0;
|
||||||
|
|
||||||
|
|
6
index.c
6
index.c
|
@ -10,12 +10,6 @@
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
|
|
||||||
/* Set the (real) uid to the same value, as the effective uid.
|
|
||||||
This is necesary, as (the suid) gpg tries to run on behalf of www-data
|
|
||||||
instead of the presumed user.
|
|
||||||
I hope, that this will not break on non-linux systems ... */
|
|
||||||
setreuid(getuid(), -1);
|
|
||||||
|
|
||||||
/* Change this path to wherever you decided to put ezmlm-web.cgi */
|
/* Change this path to wherever you decided to put ezmlm-web.cgi */
|
||||||
execv("/usr/local/bin/ezmlm-web.cgi", NULL);
|
execv("/usr/local/bin/ezmlm-web.cgi", NULL);
|
||||||
|
|
||||||
|
|
26
lang/de.hdf
26
lang/de.hdf
|
@ -1,9 +1,10 @@
|
||||||
LanguageID = de
|
|
||||||
|
|
||||||
LanguageName = Deutsch
|
|
||||||
|
|
||||||
Lang {
|
Lang {
|
||||||
|
|
||||||
|
ID = de
|
||||||
|
|
||||||
|
Name = Deutsch
|
||||||
|
|
||||||
|
|
||||||
Menue {
|
Menue {
|
||||||
ListCreate = Neue Liste anlegen
|
ListCreate = Neue Liste anlegen
|
||||||
ListDelete = Liste löschen
|
ListDelete = Liste löschen
|
||||||
|
@ -23,10 +24,11 @@ Lang {
|
||||||
GnupgPublicKeys = öffentliche Schlüssel
|
GnupgPublicKeys = öffentliche Schlüssel
|
||||||
GnupgSecretKeys = private Schlüssel
|
GnupgSecretKeys = private Schlüssel
|
||||||
GnupgGenerateKey = Schlüssel anlegen
|
GnupgGenerateKey = Schlüssel anlegen
|
||||||
GnupgConvert = Verschlüsselung aktivieren
|
GnupgConvert = Verschlüsselung
|
||||||
TextFiles = Texte
|
TextFiles = Texte
|
||||||
ListSelect = Auswahl einer Liste
|
ListSelect = Auswahl einer Liste
|
||||||
Properties = Eigenschaften von
|
Properties = Eigenschaften von
|
||||||
|
Language = Sprache
|
||||||
Help = Hilfe (extern)
|
Help = Hilfe (extern)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,6 +51,7 @@ Lang {
|
||||||
ListDelete = Löschung von
|
ListDelete = Löschung von
|
||||||
FileSelect = Auswählen eines Textbausteins
|
FileSelect = Auswählen eines Textbausteins
|
||||||
FileEdit = Bearbeitung des Textbausteins
|
FileEdit = Bearbeitung des Textbausteins
|
||||||
|
GnupgConvert = Verschlüsselung
|
||||||
GnupgPublic = Öffentliche Schlüssel
|
GnupgPublic = Öffentliche Schlüssel
|
||||||
GnupgSecret = Private Schlüssel
|
GnupgSecret = Private Schlüssel
|
||||||
GnupgGenerate = Erzeugen eines Schlüssels
|
GnupgGenerate = Erzeugen eines Schlüssels
|
||||||
|
@ -65,8 +68,11 @@ Lang {
|
||||||
EditFile = Datei bearbeiten
|
EditFile = Datei bearbeiten
|
||||||
SaveFile = Datei speichern
|
SaveFile = Datei speichern
|
||||||
ResetFile = Angepassten Textbaustein verwerfen
|
ResetFile = Angepassten Textbaustein verwerfen
|
||||||
DeletePublicKey = Öffentliche(n) Schlüssel lälschen
|
LanguageSet = wählen
|
||||||
DeleteSecretKey = Private(n) Schlüssel lälschen
|
DeletePublicKey = Öffentliche(n) Schlüssel löschen
|
||||||
|
DeleteSecretKey = Private(n) Schlüssel löschen
|
||||||
|
GnupgConvertToEncrypted = Wandle in eine verschlüsselte Liste um
|
||||||
|
GnupgConvertToNormal = Wandle in eine unverschlüsselte Liste um
|
||||||
GnupgImportKey = Schlüssel importieren
|
GnupgImportKey = Schlüssel importieren
|
||||||
GnupgGenerateKey = Schlüsselpaar erzeugen
|
GnupgGenerateKey = Schlüsselpaar erzeugen
|
||||||
GnupgExportKey = exportieren
|
GnupgExportKey = exportieren
|
||||||
|
@ -120,7 +126,7 @@ Lang {
|
||||||
GnupgInvalidExpiration = Das Verfallsdatum is ungültig!
|
GnupgInvalidExpiration = Das Verfallsdatum is ungültig!
|
||||||
GnupgInvalidKeySize = Die Schlüssellänge ist ungültig!
|
GnupgInvalidKeySize = Die Schlüssellänge ist ungültig!
|
||||||
GnupgExportKey = Fehler beim Exportieren des Schlüssels!
|
GnupgExportKey = Fehler beim Exportieren des Schlüssels!
|
||||||
GnupgConvert = Beim umwandeln in eine verschlüsselte Mailingliste trat ein Fehler auf!
|
GnupgConvert = Beim Umwandeln trat ein Fehler auf!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -253,7 +259,8 @@ Lang {
|
||||||
TextFiles = Das Auswahlfeld beinhaltet die Liste aller verfügbaren Textbausteine im Texte-Verzeichnis der Liste. Diese Textbausteine werden zur Erstellung der automatischen Antworten der Mailingliste benutzt.
|
TextFiles = Das Auswahlfeld beinhaltet die Liste aller verfügbaren Textbausteine im Texte-Verzeichnis der Liste. Diese Textbausteine werden zur Erstellung der automatischen Antworten der Mailingliste benutzt.
|
||||||
EditTextFile = Passe den Textbaustein an die Erfordernisse der Liste an. Eventuell möchtest du dafür auch einige der reservierten Platzhalter verwenden, die am Ende dieser Seite aufgeführt sind.
|
EditTextFile = Passe den Textbaustein an die Erfordernisse der Liste an. Eventuell möchtest du dafür auch einige der reservierten Platzhalter verwenden, die am Ende dieser Seite aufgeführt sind.
|
||||||
ResetTextFile = Der Textbaustein wurde spezifisch an diese Liste angepasst. Um stattdessen den vorgegebenen Baustein der eingestellten Sprache zu verwenden, kannst du diesen listenspezifischen Baustein entfernen.
|
ResetTextFile = Der Textbaustein wurde spezifisch an diese Liste angepasst. Um stattdessen den vorgegebenen Baustein der eingestellten Sprache zu verwenden, kannst du diesen listenspezifischen Baustein entfernen.
|
||||||
GnupgGenerateKey = Um eine verschlüsselte Mailingliste verwenden zu können, ist es erforderlich, einen Schlüssel für die Liste zu erzeugen (oder zu importieren). Nachdem du das folgende Formular ausgefüllt und abgeschickt hast, wird es (abhängig von der Schlüssellänge) eine Weile dauern, bis der Schlüssel fertig ist. Sei also bitte geduldig.
|
GnupgConvert = Du kannst eine normale Mailingliste in eine verschlüsselte umwandeln und umgekehrt.
|
||||||
|
GnupgGenerateKey = Um eine verschlüsselte Mailingliste verwenden zu können, ist es erforderlich, einen Schlüssel für die Liste zu erzeugen (oder zu importieren). Nachdem du das folgende Formular ausgefüllt und abgeschickt hast, wird es eine Weile (bis zu mehreren Minuten) dauern, bis der Schlüssel fertig ist. Sei also bitte geduldig.
|
||||||
}
|
}
|
||||||
|
|
||||||
Legend {
|
Legend {
|
||||||
|
@ -277,6 +284,7 @@ Lang {
|
||||||
TextFileReset = Auf die Vorgabe zurücksetzen
|
TextFileReset = Auf die Vorgabe zurücksetzen
|
||||||
TextFileInfo = Nützliche Platzhalter
|
TextFileInfo = Nützliche Platzhalter
|
||||||
AvailableLists = Verfügbare Listen
|
AvailableLists = Verfügbare Listen
|
||||||
|
GnupgConvert = Verschlüsselungsunterstützung
|
||||||
GnupgPublicKeys = öffentliche Schlüssel dieser Liste
|
GnupgPublicKeys = öffentliche Schlüssel dieser Liste
|
||||||
GnupgSecretKeys = Private Schlüssel dieser Liste
|
GnupgSecretKeys = Private Schlüssel dieser Liste
|
||||||
GnupgKeyImport = Schlüssel importieren
|
GnupgKeyImport = Schlüssel importieren
|
||||||
|
|
19
lang/en.hdf
19
lang/en.hdf
|
@ -1,9 +1,9 @@
|
||||||
LanguageID = en
|
|
||||||
|
|
||||||
LanguageName = English
|
|
||||||
|
|
||||||
Lang {
|
Lang {
|
||||||
|
|
||||||
|
ID = en
|
||||||
|
|
||||||
|
Name = English
|
||||||
|
|
||||||
Menue {
|
Menue {
|
||||||
ListCreate = Create new list
|
ListCreate = Create new list
|
||||||
ListDelete = Delete list
|
ListDelete = Delete list
|
||||||
|
@ -23,10 +23,11 @@ Lang {
|
||||||
GnupgPublicKeys = public keys
|
GnupgPublicKeys = public keys
|
||||||
GnupgSecretKeys = secret keys
|
GnupgSecretKeys = secret keys
|
||||||
GnupgGenerateKey = generate key
|
GnupgGenerateKey = generate key
|
||||||
GnupgConvert = Enable encryption
|
GnupgConvert = Encryption
|
||||||
TextFiles = Text files
|
TextFiles = Text files
|
||||||
ListSelect = Choose a list
|
ListSelect = Choose a list
|
||||||
Properties = Properties of
|
Properties = Properties of
|
||||||
|
Language = Language
|
||||||
Help = Help (external)
|
Help = Help (external)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,6 +50,7 @@ Lang {
|
||||||
ListDelete = Delete list
|
ListDelete = Delete list
|
||||||
FileSelect = Choose a file for editing
|
FileSelect = Choose a file for editing
|
||||||
FileEdit = Editing file
|
FileEdit = Editing file
|
||||||
|
GnupgConvert = Encryption
|
||||||
GnupgPublic = Public keys
|
GnupgPublic = Public keys
|
||||||
GnupgSecret = Secret keys
|
GnupgSecret = Secret keys
|
||||||
GnupgGenerate = Generate a new keypair
|
GnupgGenerate = Generate a new keypair
|
||||||
|
@ -65,6 +67,9 @@ Lang {
|
||||||
EditFile = Edit file
|
EditFile = Edit file
|
||||||
SaveFile = Save file
|
SaveFile = Save file
|
||||||
ResetFile = Remove customized file
|
ResetFile = Remove customized file
|
||||||
|
LanguageSet = select
|
||||||
|
GnupgConvertToEncrypted = Convert to an encrypted mailinglist
|
||||||
|
GnupgConvertToNormal = Convert to a plaintext mainlinglist
|
||||||
DeletePublicKey = Delete public key(s)
|
DeletePublicKey = Delete public key(s)
|
||||||
DeleteSecretKey = Delete secret key(s)
|
DeleteSecretKey = Delete secret key(s)
|
||||||
GnupgImportKey = Import key
|
GnupgImportKey = Import key
|
||||||
|
@ -253,7 +258,8 @@ Lang {
|
||||||
TextFiles = The selection box contains a list of files available in the DIR/text directory. These files are sent out in response to specfic user requests or as part of all outgoing messages. Edit them as necessary.
|
TextFiles = The selection box contains a list of files available in the DIR/text directory. These files are sent out in response to specfic user requests or as part of all outgoing messages. Edit them as necessary.
|
||||||
EditTextFile = Change this text according to your needs. Maybe you would like to use some of the reserved tags, that are described at the bottom of this page.
|
EditTextFile = Change this text according to your needs. Maybe you would like to use some of the reserved tags, that are described at the bottom of this page.
|
||||||
ResetTextFile = This text file was customized for this list. If you want to use the system-wide default text file of the choosen language instead, you may remove this customized file.
|
ResetTextFile = This text file was customized for this list. If you want to use the system-wide default text file of the choosen language instead, you may remove this customized file.
|
||||||
GnupgGenerateKey = Every encrypted mailing list needs a secret key. You can import this key or create it with the form below. After submitting the form, you have to be patient, as it takes some time to create a key.
|
GnupgConvert = You can convert a normal mailinglist to an encrypted list and vice versa.
|
||||||
|
GnupgGenerateKey = Every encrypted mailing list needs a secret key. You can import this key or create it using the form below. After submitting the form, you have to be patient, as it takes some time (up to several minutes) to create a key.
|
||||||
}
|
}
|
||||||
|
|
||||||
Legend {
|
Legend {
|
||||||
|
@ -277,6 +283,7 @@ Lang {
|
||||||
TextFileReset = Discard customized text
|
TextFileReset = Discard customized text
|
||||||
TextFileInfo = Useful placeholders
|
TextFileInfo = Useful placeholders
|
||||||
AvailableLists = Available lists
|
AvailableLists = Available lists
|
||||||
|
GnupgConvert = Encryption support
|
||||||
GnupgPublicKeys = Public keys of this list
|
GnupgPublicKeys = Public keys of this list
|
||||||
GnupgSecretKeys = Secret keys of this list
|
GnupgSecretKeys = Secret keys of this list
|
||||||
GnupgKeyImport = Import a key
|
GnupgKeyImport = Import a key
|
||||||
|
|
|
@ -4,6 +4,7 @@ LanguageDir
|
||||||
Stylesheet
|
Stylesheet
|
||||||
HelpIconURL
|
HelpIconURL
|
||||||
Config.Title
|
Config.Title
|
||||||
|
Config.UI.Languages.[names]
|
||||||
Config.UI.LinkAttrs.web_lang
|
Config.UI.LinkAttrs.web_lang
|
||||||
Config.UI.LinkAttrs.template
|
Config.UI.LinkAttrs.template
|
||||||
|
|
||||||
|
@ -38,6 +39,7 @@ Data.List.Settings.[0-9].state
|
||||||
Data.List.SubModPath
|
Data.List.SubModPath
|
||||||
Data.List.Subscribers.*
|
Data.List.Subscribers.*
|
||||||
Data.List.TrailingText
|
Data.List.TrailingText
|
||||||
|
Data.List.Type ("default" or "gnupg")
|
||||||
Data.List.WebUsers
|
Data.List.WebUsers
|
||||||
Data.Lists.[0-9]+
|
Data.Lists.[0-9]+
|
||||||
Data.ListsCount
|
Data.ListsCount
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
|
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
<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>
|
<a href="https://systemausfall.org/toolforge/ezmlm-web">ezmlm-web</a> (v3.2) - <?cs var:html_escape(Lang.Misc.FooterText) ?> <a href="http://www.ezmlm.org/" target="_blank">ezmlm</a>
|
||||||
<br />
|
<br />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
24
template/gnupg_convert.cs
Normal file
24
template/gnupg_convert.cs
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
<div class="title">
|
||||||
|
<h1><?cs var:html_escape(Lang.Title.GnupgConvert) ?></h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="introduction">
|
||||||
|
<p><?cs var:html_escape(Lang.Introduction.GnupgConvert) ?></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<fieldset class="form">
|
||||||
|
<legend><?cs var:html_escape(Lang.Legend.GnupgConvert) ?> </legend>
|
||||||
|
|
||||||
|
<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="gnupg_convert_do" />
|
||||||
|
<button type="submit" name="send" value="do"><?cs
|
||||||
|
if:Data.List.Type == "gnupg" ?><?cs
|
||||||
|
var:html_escape(Lang.Buttons.GnupgConvertToNormal) ?><?cs
|
||||||
|
else ?><?cs
|
||||||
|
var:html_escape(Lang.Buttons.GnupgConvertToEncrypted) ?><?cs
|
||||||
|
/if ?></button>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</fieldset>
|
23
template/language_select.cs
Normal file
23
template/language_select.cs
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
<!-- allows the user to change the interface language (not of the list!) -->
|
||||||
|
<?cs if:subcount(Config.UI.Languages) > 0 ?>
|
||||||
|
|
||||||
|
<form class="select" method="post" action="<?cs call:link("","","","","","") ?>" enctype="application/x-www-form-urlencoded">
|
||||||
|
|
||||||
|
<?cs if:Data.List.Name ?><input type="hidden" name="list" value="<?cs
|
||||||
|
var:Data.List.Name ?>" /><?cs /if ?>
|
||||||
|
|
||||||
|
<input type="hidden" name="action" value="show_page" />
|
||||||
|
<input type="hidden" name="pagename" value="<?cs var:Data.Action ?>" />
|
||||||
|
<font class="no_link"><?cs
|
||||||
|
var:html_escape(Lang.Menue.Language) ?>:</font><br/>
|
||||||
|
<select name="web_lang" size="0">
|
||||||
|
<?cs each: tlang = Config.UI.Languages
|
||||||
|
?><option value="<?cs var:name(tlang) ?>"<?cs
|
||||||
|
if:name(tlang) == Config.UI.LinkAttrs.web_lang
|
||||||
|
?> selected="selected"<?cs /if?>><?cs
|
||||||
|
var:html_escape(tlang) ?></option>
|
||||||
|
<?cs /each ?>
|
||||||
|
</select> <button type="submit" name="send" value="do"><?cs var:html_escape(Lang.Buttons.LanguageSet) ?></button>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<?cs /if ?>
|
|
@ -15,6 +15,11 @@
|
||||||
</li>
|
</li>
|
||||||
<?cs /if ?>
|
<?cs /if ?>
|
||||||
|
|
||||||
|
<?cs if:((subcount(Data.Lists) > 0) && (UI.Navigation.ListSelect == 1))
|
||||||
|
|| (Data.Permissions.Create && (UI.Navigation.ListCreate == 1)) ?>
|
||||||
|
<hr/>
|
||||||
|
<?cs /if ?>
|
||||||
|
|
||||||
|
|
||||||
<?cs if:Data.List.Name ?>
|
<?cs if:Data.List.Name ?>
|
||||||
|
|
||||||
|
@ -145,8 +150,9 @@
|
||||||
var:html_escape(Lang.Menue.TextFiles) ?></a></li><?cs /if ?>
|
var:html_escape(Lang.Menue.TextFiles) ?></a></li><?cs /if ?>
|
||||||
|
|
||||||
<?cs if:UI.Navigation.GnupgConvert == 1
|
<?cs if:UI.Navigation.GnupgConvert == 1
|
||||||
?><li><a <?cs if:Data.Action == "gnupg_convert" ?> class="nav_active"<?cs /if ?>
|
?><li><a <?cs if:(Data.Action == "gnupg_convert_ask") ||
|
||||||
href="<?cs call:link("list",Data.List.Name,"action","gnupg_convert","","") ?>"
|
(Data.Action == "gnupg_convert_do") ?> class="nav_active"<?cs /if ?>
|
||||||
|
href="<?cs call:link("list",Data.List.Name,"action","gnupg_convert_ask","","") ?>"
|
||||||
title="<?cs var:html_escape(Lang.Menue.GnupgConvert) ?>"><?cs
|
title="<?cs var:html_escape(Lang.Menue.GnupgConvert) ?>"><?cs
|
||||||
var:html_escape(Lang.Menue.GnupgConvert) ?></a></li><?cs /if ?>
|
var:html_escape(Lang.Menue.GnupgConvert) ?></a></li><?cs /if ?>
|
||||||
|
|
||||||
|
@ -158,8 +164,16 @@
|
||||||
|
|
||||||
</ul></li>
|
</ul></li>
|
||||||
|
|
||||||
|
<hr/>
|
||||||
<?cs /if ?>
|
<?cs /if ?>
|
||||||
|
|
||||||
|
<?cs if:UI.Navigation.Language
|
||||||
|
?><li><?cs include:TemplateDir + '/language_select.cs' ?></li>
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<?cs /if ?>
|
||||||
|
|
||||||
<?cs if:UI.Navigation.Help
|
<?cs if:UI.Navigation.Help
|
||||||
?><li><a href="http://www.ezmlm.org/ezman/index.html#toc1" target="_blank"
|
?><li><a href="http://www.ezmlm.org/ezman/index.html#toc1" target="_blank"
|
||||||
title="<?cs var:html_escape(Lang.Misc.HelpLink) ?>"><?cs
|
title="<?cs var:html_escape(Lang.Misc.HelpLink) ?>"><?cs
|
||||||
|
|
|
@ -24,7 +24,8 @@ UI {
|
||||||
TextEdit = 1
|
TextEdit = 1
|
||||||
ListDelete = 1
|
ListDelete = 1
|
||||||
GnupgConvert = 1
|
GnupgConvert = 1
|
||||||
|
Language = 1
|
||||||
|
Interface = 1
|
||||||
Help = 1
|
Help = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,9 @@ UI {
|
||||||
|
|
||||||
TextEdit = 1
|
TextEdit = 1
|
||||||
ListDelete = 1
|
ListDelete = 1
|
||||||
|
GnupgConvert = 1
|
||||||
|
Language = 1
|
||||||
|
Interface = 1
|
||||||
Help = 1
|
Help = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue