From 24dbc452b9d2809656b8a869df015538881db304 Mon Sep 17 00:00:00 2001 From: lars Date: Tue, 11 Oct 2005 18:49:38 +0000 Subject: [PATCH] oyama's patch --- ezmlm-web-2.3.1/CHANGES | 7 ++ ezmlm-web-2.3.1/ezmlm-web.cgi | 77 ++++++++++---- ezmlm-web-2.3.1/ezmlmwebrc | 8 +- ezmlm-web-2.3.1/lang/jp.pm | 187 ++++++++++++++++++++++++++++++++++ 4 files changed, 254 insertions(+), 25 deletions(-) create mode 100644 ezmlm-web-2.3.1/lang/jp.pm diff --git a/ezmlm-web-2.3.1/CHANGES b/ezmlm-web-2.3.1/CHANGES index 9e6e97f..7b97108 100644 --- a/ezmlm-web-2.3.1/CHANGES +++ b/ezmlm-web-2.3.1/CHANGES @@ -95,3 +95,10 @@ Version 2.3 - 10/06/02005 * file upload typo fixed * update of webusers file fixed * moderator unsubscribe fixed + +Version 2.3.1 - 13/09/02005 +* Japanese translarion of web interface and support text edit for multibye +* many web style improvement +* mimeremove and prefix option delete enable +* add $USER value For virtual USER +* another lot of bug fix diff --git a/ezmlm-web-2.3.1/ezmlm-web.cgi b/ezmlm-web-2.3.1/ezmlm-web.cgi index 8ad62cd..84f8781 100755 --- a/ezmlm-web-2.3.1/ezmlm-web.cgi +++ b/ezmlm-web-2.3.1/ezmlm-web.cgi @@ -1,6 +1,6 @@ #!/usr/bin/perl #=========================================================================== -# ezmlm-web.cgi - version 2.3 - 10/06/02005 +# ezmlm-web.cgi - version 2.3.1 - 13/09/02005 # # Copyright (C) 1999/2000, Guy Antony Halse, All Rights Reserved. # Please send bug reports and comments to guy-ezmlm@rucus.ru.ac.za @@ -45,12 +45,14 @@ use Mail::Address; use DB_File; use CGI; use CGI::Carp qw(fatalsToBrowser set_message); +use Encode qw/ from_to /; # add by ooyama for char convert # These two are actually included later and are put here so we remember them. #use File::Find if ($UNSAFE_RM == 1); #use File::Copy if ($UNSAFE_RM == 0); my $q = new CGI; +$q->charset('utf8'); # add by ooyama for support UTF-8 $q->import_names('Q'); use vars qw[$opt_c $opt_d $opt_C]; getopts('cd:C:'); @@ -60,7 +62,7 @@ $ENV{'PATH'} = '/bin'; # We run suid so we can't use $ENV{'HOME'} and $ENV{'USER'} to determine the # user. :( Don't alter this line unless you are _sure_ you have to. -my @tmp = getpwuid($>); my $USER=$tmp[0]; +my @tmp = getpwuid($>); use vars qw[$USER]; $USER=$tmp[0]; # add by ooyama for virtual user # use strict is a good thing++ @@ -70,10 +72,12 @@ use vars qw[$QMAIL_BASE $EZMLM_CGI_RC $EZMLM_CGI_URL $HTML_BGCOLOR $PRETTY_NAMES use vars qw[%HELPER $HELP_ICON_URL $HTML_HEADER $HTML_FOOTER $HTML_TEXT $HTML_LINK]; use vars qw[%BUTTON %LANGUAGE $HTML_VLINK $HTML_TITLE $FILE_UPLOAD $WEBUSERS_FILE]; use vars qw[$HTML_CSS_FILE]; +use vars qw[$TEXT_ENCODE]; $TEXT_ENCODE='us-ascii'; # by ooyama for multibyte convert support # Get user configuration stuff if(defined($opt_C)) { - require "$opt_C"; # Command Line + $opt_C =~ /^([-\w.\/]+)$/; + require "$1"; # Command Line For perl security check by ooyama } elsif(-e "$HOME_DIR/.ezmlmwebrc") { require "$HOME_DIR/.ezmlmwebrc"; # User } elsif(-e "/etc/ezmlm/ezmlmwebrc") { @@ -99,12 +103,20 @@ my($DEFAULT_HOST); open (GETHOST, "<$QMAIL_BASE/me") || open (GETHOST, "<$QMAIL_BASE/defaultdomain") || die "Unable to read $QMAIL_BASE/me: $!"; chomp($DEFAULT_HOST = ); close GETHOST; +# add by ooyama DEFAULT_DOMAIN +my($DEFAULT_DOMAIN); +if(open (GETDOMAIN, "<$QMAIL_BASE/defaultdomain")){ + chomp($DEFAULT_DOMAIN = ); + close GETDOMAIN; +}else{ + $DEFAULT_DOMAIN = $DEFAULT_HOST; +} # Untaint form input ... &untaint; # redirect must come before headers are printed -if(defined($Q::action) && $Q::action eq '[Web Archive]') { +if(defined($Q::action) && $Q::action eq "[$BUTTON{'webarchive'}]") { # bug fix print $q->redirect(&ezmlmcgirc); exit; } @@ -286,7 +298,7 @@ sub select_list { print $q->startform; print $q->hidden(-name=>'state', -default=>'select'); - print '
'; + print '
'; # By ooayam For better style print $q->scrolling_list(-name=>'list', -size=>$scrollsize, -values=>\@lists) if defined(@lists); print '
'; # end of main_mainlinglists_list @@ -352,7 +364,7 @@ sub display_list { # Begin of content print '
'; - print '
'; + print '
'; # by ooyama for style print "

$LANGUAGE{'subscribersto'} $Q::list

"; print "

($listaddress)

"; print '
'; @@ -369,6 +381,7 @@ sub display_list { print '
'; print '

', ($#subscribers + 1), ' ', $LANGUAGE{'subscribers'}, '

' if defined(@subscribers); print '', $q->submit(-name=>'action', -value=>"[$BUTTON{'deleteaddress'}]"), '' if defined(@subscribers); + print '

'; # by ooyama for style print '', $q->textfield(-name=>'addsubscriber', -size=>'40'), ' '; print '', $q->filefield(-name=>'addfile', -size=>20, -maxlength=>100), ' ' if ($FILE_UPLOAD); print '', $q->submit(-name=>'action', -value=>"[$BUTTON{'addaddress'}]"), ''; @@ -648,6 +661,7 @@ sub part_subscribers { print '

'; print '', $q->submit(-name=>'action', -value=>"[$BUTTON{'deleteaddress'}]"), '' if defined(@subscribers); + print '

'; print '', $q->textfield(-name=>'addsubscriber', -size=>'40'), ' '; print '', $q->filefield(-name=>'addfile', -size=>20, -maxlength=>100), ' ' if ($FILE_UPLOAD); print '', $q->submit(-name=>'action', -value=>"[$BUTTON{'addaddress'}]"), ''; @@ -665,7 +679,7 @@ sub part_subscribers { sub allow_create_list { # Let the user select options for list creation ... - my($username, $hostname, %labels, $j); + my($username, $hostname, %labels, $j, $domain); # by ooyama add dmain # Work out if this user has a virtual host and set input accordingly ... if(-e "$QMAIL_BASE/virtualdomains") { @@ -679,6 +693,9 @@ sub allow_create_list { if(!defined($hostname)) { $username = "$USER-" if ($USER ne $ALIAS_USER); $hostname = $DEFAULT_HOST; + $domain = $DEFAULT_DOMAIN; # by ooyama add domain + }else{ + $domain = $hostname; } print '

'; @@ -696,9 +713,11 @@ sub allow_create_list { print '
'; print '', $LANGUAGE{'listname'}, ': ', $q->textfield(-name=>'list', -size=>'20'), ' '; - print '', $LANGUAGE{'listaddress'}, ': ', $q->textfield(-name=>'inlocal', -default=>$username, -size=>'10'); - print ' @ ', $q->textfield(-name=>'inhost', -default=>$hostname, -size=>'30'), ' '; + print '

'; # By ooyama For style + print '', $LANGUAGE{'listaddress'}, ': ', $q->textfield(-name=>'inlocal', -default=>$username, -size=>'20'); + print ' @ ', $q->textfield(-name=>'inhost', -default=>$domain, -size=>'40'), ' '; # by ooyama change to use domain + print '

'; # By ooyama For style print '', $LANGUAGE{'listoptions'}, ':'; &display_options($DEFAULT_OPTIONS); @@ -820,10 +839,10 @@ sub list_config { print '

'; print '

', $LANGUAGE{'listname'}, ": $listname

"; print '

', "$LANGUAGE{'listaddress'}: $listaddress

"; + print '

', $LANGUAGE{'listoptions'}, ':

'; # by ooyama for style print '
'; # end of config->info print '
'; - print '

', $LANGUAGE{'listoptions'}, ':

'; # Print a list of options, selecting the ones that apply to this list ... &display_options($list->getconfig); @@ -834,10 +853,11 @@ sub list_config { $mimeremove = $list->getpart('mimeremove'); $prefix = $list->getpart('prefix'); - print '', $LANGUAGE{'prefix'}, ': ', $q->textfield(-name=>'prefix', -default=>$prefix, -size=>12), ' ' if defined($prefix); - print '

', $LANGUAGE{'headerremove'}, ':
', $q->textarea(-name=>'headerremove', -default=>$headerremove, -rows=>5, -columns=>70), ''; - print '', $LANGUAGE{'headeradd'}, ':
', $q->textarea(-name=>'headeradd', -default=>$headeradd, -rows=>5, -columns=>70), '

'; - print '', $LANGUAGE{'mimeremove'}, ':
', $q->textarea(-name=>'mimeremove', -default=>$mimeremove, -rows=>5, -columns=>70), '
' if defined($mimeremove); + # by ooyama change for style and bug fix + print '', $LANGUAGE{'prefix'}, ': ', $q->textfield(-name=>'prefix', -default=>$prefix, -size=>20), '

' if defined($prefix); + print '', $LANGUAGE{'headerremove'}, ':
', $q->textarea(-name=>'headerremove', -default=>$headerremove, -rows=>5, -columns=>70), '

'; + print '', $LANGUAGE{'headeradd'}, ':
', $q->textarea(-name=>'headeradd', -default=>$headeradd, -rows=>5, -columns=>70), '

'; + print '', $LANGUAGE{'mimeremove'}, ':
', $q->textarea(-name=>'mimeremove', -default=>$mimeremove, -rows=>5, -columns=>70), '

' if defined($mimeremove); if(open(WEBUSER, "<$WEBUSERS_FILE")) { my($webusers); @@ -849,8 +869,8 @@ sub list_config { print '', $LANGUAGE{'allowedtoedit'}, ': '; print $q->textfield(-name=>'webusers', -value=>$webusers, -size=>'30'); - print ' ', - print '', $HELPER{'allowedit'}, ''; + print '

', + print '', $HELPER{'allowedit'}, '

'; } print '

'; # end of config->input @@ -872,13 +892,15 @@ sub list_config { sub update_config { # Save the new user entered config ... - my ($list, $options, $i, @inlocal, @inhost); + my ($list, $options, $i, @inlocal, @inhost, $opt_mime, $opt_prefix); # add by ooyama $list = new Mail::Ezmlm("$LIST_DIR/$Q::list"); # Work out the command line options ... foreach $i (grep {/\D/} keys %EZMLM_LABELS) { if (defined($q->param($i))) { $options .= $i; + $opt_mime = 1 if($i eq 'x'); # add by ooyama + $opt_prefix = 1 if($i eq 'f'); # add by ooyama } else { $options .= uc($i); } @@ -898,8 +920,16 @@ sub update_config { # Update headeradd, headerremove, mimeremove and prefix ... $list->setpart('headeradd', $q->param('headeradd')); $list->setpart('headerremove', $q->param('headerremove')); - $list->setpart('mimeremove', $q->param('mimeremove')) if defined($q->param('mimeremove')); - $list->setpart('prefix', $q->param('prefix')) if defined($q->param('prefix')); + if($opt_mime){ + $list->setpart('mimeremove', $q->param('mimeremove')) if defined($q->param('mimeremove')); + }else{ # add by ooyama to delete option f + unlink "$LIST_DIR/$Q::list/mimeremove" if(-f "$LIST_DIR/$Q::list/mimeremove"); + } + if($opt_prefix){ + $list->setpart('prefix', $q->param('prefix')) if defined($q->param('prefix')); + }else{ # add by ooyama to delete option f + unlink "$LIST_DIR/$Q::list/prefix" if(-f "$LIST_DIR/$Q::list/prefix"); + } &update_webusers(); } @@ -990,6 +1020,7 @@ sub edit_text { my ($content); my($list) = new Mail::Ezmlm("$LIST_DIR/$Q::list"); $content = $list->getpart("text/$Q::file"); + from_to($content,$TEXT_ENCODE,'utf8'); # by ooyama for multibyte # Begin of content print '
'; @@ -1031,7 +1062,9 @@ sub save_text { # Save new text in DIR/text ... my ($list) = new Mail::Ezmlm("$LIST_DIR/$Q::list"); - $list->setpart("text/$Q::file", $q->param('content')); + my ($content) = $q->param('content'); + from_to($content,'utf8',$TEXT_ENCODE); # by ooyama for multibyte + $list->setpart("text/$Q::file", $content); } @@ -1096,7 +1129,7 @@ sub display_options { print '', $q->checkbox(-name=>$i, -value=>$i, -label=>$EZMLM_LABELS{$i}[0]); } print ''; - print ''; $j++; + $j++; # By ooyama bug fix if ($j >= 3) { $j = 0; print '

'; } @@ -1111,7 +1144,7 @@ sub display_options { print '', $q->checkbox(-name=>$i, -value=>$i, -label=>$EZMLM_LABELS{$i}[0]); } print ''; - print '', $q->textfield(-name=>"$i-value", -value=>$1||$EZMLM_LABELS{$i}[2], -size=>30), ''; + print '', $q->textfield(-name=>"$i-value", -value=>$1||$EZMLM_LABELS{$i}[2], -size=>50), ''; print '

'; } diff --git a/ezmlm-web-2.3.1/ezmlmwebrc b/ezmlm-web-2.3.1/ezmlmwebrc index 944373e..eb3dce8 100644 --- a/ezmlm-web-2.3.1/ezmlmwebrc +++ b/ezmlm-web-2.3.1/ezmlmwebrc @@ -1,4 +1,4 @@ -# Configuration file for ezmlm-web 2.3 +# Configuration file for ezmlm-web 2.3.1 # =========================================================================== # This file is not just an ordinary configuration file - it contains valid @@ -62,7 +62,7 @@ $HTML_HEADER .= '
'; -$HTML_FOOTER .= 'ezmlm-web (v2.3) A web interface to ezmlm
'; +$HTML_FOOTER .= 'ezmlm-web (v2.3.1) A web interface to ezmlm'; # NEW: # html properties (e.g. color, background-color) can be defined in a @@ -74,8 +74,10 @@ $HTML_TITLE = 'E Z Mailing List Manager'; # Optional: use a cascading style sheet (css) $HTML_CSS_FILE = "css/default.css"; -# choose a language (en|de) +# choose a language (en|de|jp) $HTML_LANGUAGE = 'en'; +# choose a text charset (jis or another) +#$TEXT_ENCODE = 'jis'; # --------------------------------------------------------------------------- # include language-specific definitions diff --git a/ezmlm-web-2.3.1/lang/jp.pm b/ezmlm-web-2.3.1/lang/jp.pm new file mode 100644 index 0000000..522fbad --- /dev/null +++ b/ezmlm-web-2.3.1/lang/jp.pm @@ -0,0 +1,187 @@ +# language-specific definitions for ezmlm-web +# in Japanese + +# The meanings of the various ezmlm-make command line switches. The default +# ones match the ezmlm-idx 0.4 default ezmlmrc ... Alter them to suit your +# own ezmlmrc. Removing options from this list makes them unavailable +# through ezmlm-web - this could be useful for things like -w + +%EZMLM_LABELS = ( +# option => ['Short Name', +# 'Long Help Description'], + + a => ['アーカイブ保存', + 'メッセージをアーカイブする'], + b => ['アーカイブブロック', + 'モデレータのみアーカイブにアクセス可能'], +# c => config. This is implicity called, so is not defined here + d => ['ダイジェスト作成', + 'メッセージのダイジェストリストをセットアップする'], +# e => edit. Also implicity called, so not defined here + f => ['件名にPrefixを付加する', + '件名に指定したPrefix文字を付加する'], + g => ['アーカイブ制限', + '送信者が未登録の場合アーカイブのアクセスを拒否する'], + h => ['登録確認をしない', + 'メールによる登録時に確認メールを送らない'], + i => ['インデックス作成', + 'WWW アーカイブアクセス用インデックスの作成'], + j => ['登録解除確認をしない', + 'メールによる登録解除時に確認メールを送らない'], + k => ['拒否リスト有効', + '拒否リストに登録されたアドレスを拒否する'], + l => ['登録者リスト取出', + '遠隔管理者に登録者リストを送る'], + m => ['投稿の審査', + '全ての投稿メッセージを審査する'], + n => ['テキスト編集', + '遠隔管理者にテキスト編集を許可する'], + o => ['モデレータのみ投稿可', + 'モデレータ以外の投稿を拒否する'], + p => ['公開する', + 'メールによる登録、登録解除などを有効にする'], + q => ['リクエスト形式有効', + 'local-request@host のメールを処理する'], + r => ['遠隔管理', + '遠隔管理を有効にする'], + s => ['登録の審査', + '登録を審査する'], + t => ['Trailerを付加する', + 'メッセージの末尾にTrailerを付加する'], + u => ['登録者のみ投稿可', + '登録者の投稿のみを受け付ける'], +# v => version. I doubt you will really need this ;-) + w => ['警告を出さない', + 'ezmlm-warn(1) の挙動を抑止する'], + x => ['指定mime typeの削除', + '指定したmime typeの貼付ファイルを削除する'], +# y => not used +# z => not used + +# These all take an extra argument, which is the default value to use + + 0 => ['サブリストにする', + '指定したメインリストのサブリストにする', + 'mainlist@host'], +# 1 => not used +# 2 => not used + 3 => ['送信者アドレス固定', + '指定した Fromアドレスに固定する', + 'fromarg'], + 4 => ['ダイジェストオプション', + 'ezmlm-tstdig(1) のオプションを指定する', + '-t24 -m30 -k64'], + 5 => ['オーナーアドレス', + 'リストオーナーのアドレスを指定する', + ''], + 6 => ['SQLデータベース', + 'SQLデータベースへの接続情報', + 'host:port:user:password:datab:table'], + 7 => ['メッセージモデレータのデータベース', + 'メッセージモデレータのデータベースへのフルパス', + '/some/full/path'], + 8 => ['登録モデレータのデータベース', + '登録モデレータのデータベースへのフルパス', + '/some/full/path'], + 9 => ['遠隔管理者データベース', + '遠隔管理者のデータベースへのフルパス', + '/some/full/path'] + +); + +# This list defines most of the context sensitive help in ezmlm-web. What +# isn't defined here is the options, which are defined above ... You can +# alter these if you feel something else would make more sense to your users +# Just be careful of what can fit on a screen! + +%HELPER = ( + + # These should be self explainitory + addaddress => 'RFC822 に準拠したメールアドレスを入れます 例; J Random User ', + addaddressfile => 'または RFC822 に準拠したアドレスを、1行毎に含むテキストファイルを選択します', + moderator => 'モデレータ: 登録や投稿を審査する人のリスト', + deny => '拒絶リスト: メーリングリストへの参加を拒絶する人のリスト', + allow => '許可リスト: メーリングリストへの参加を特に許可する人のリスト', + digest => 'ダイジェストリスト: 全てのメッセージのダイジェストの受け取りを許可された人のリスト', + webarch => 'ウェブベースのアーカイブリストの閲覧', + config => 'メーリングリストの設定の変更', + listname => 'リスト選択時に表示される名前.また、実際に作成されるサブディレクトリの名前.', + listadd => 'メーリングリストの投稿に使用されるアドレス.特殊な場合を除き、- 以前は変更削除しないこと', + webusers => 'NB! 現在は、ここで指定できるユーザーは実在のユーザーに限る. ユーザーの追加は将来の追加課題', + prefix => '件名の先頭に付加される文字列 #で、メッセージ番号がつきます', + headerremove => 'メッセージから取り除くヘッダーを指定する', + headeradd => 'メッセージに追加するヘッダーを指定する', + mimeremove => '指定した mime type の貼付ファイルをメッセージから削除する', + allowedit => 'ユーザー名のカンマ区切りリストまたは、ALL (有効な全てのユーザー)', + mysqlcreate => 'MySQLに必要なテーブルを作成する' + +); + +# This defines the captions of each of the buttons in ezmlm-web, and allows +# you to configure them for your own language or taste. Since these are used +# by the switching algorithm it is important that every button has a unique +# caption - ie we can't have two 'Edit' buttons doing different things. + +%BUTTON = ( + + # These MUST all be unique! + create => '作成', + createlist => 'リスト作成', + edit => '編集', + delete => '削除', + deleteaddress => 'アドレス削除', + addaddress => 'アドレス追加', + moderators => 'モデレータ', + denylist => '拒絶リスト', + allowlist => '許可リスト', + digestsubscribers => 'ダイジェスト登録者', + configuration => '設定', + yes => 'はい', + no => 'いいえ', + updateconfiguration => '設定更新', + edittexts => 'テキスト編集', + editfile => 'ファイル編集', + savefile => 'ファイル保存', + webarchive => 'ウェブアーカイブ', + selectlist => 'リスト選択', + subscribers => '登録者編集', + cancel => 'キャンセル', + resetform => 'リセット', + +); + +# This defines the fixed text strings that are used in ezmlm-web. By editing +# these along with the button labels and help texts, you can convert ezmlm-web +# to another language :-) If anyone gets arround to doing complete templates +# for other languages I would appreciate a copy so that I can include it in +# future releases of ezmlm-web. + +%LANGUAGE = ( + nop => 'Action not yet implemented', + chooselistinfo => "
  • メーリングリストを選択するか、または、 [$BUTTON{'create'}] ボタンを押して作成してください.
  • 変更する場合は、選択して、 [$BUTTON{'edit'}] ボタンを押してください.
  • 削除する場合は、選択して、 [$BUTTON{'delete'}] ボタンを押してください.
", + confirmdelete => '削除確認', # list name + subscribersto => '登録者編集', # list name + subscribers => '登録者', + additionalparts => 'リスト付加情報', + posting => '投稿', + subscription => '登録', + remoteadmin => '遠隔管理', + for => 'for', # as in; moderators for blahlist + createnew => '新規リスト作成', + listname => 'リスト名', + listaddress => 'リストアドレス', + listoptions => 'リストオプション', + allowedtoedit => 'リスト編集許可者', + editconfiguration => 'リスト設定編集', + prefix => '件名に付加する文字 prefix', + headerremove => '削除するヘッダー情報', + headeradd => '追加するヘッダー情報', + mimeremove => '削除する貼付ファイルのmime type', + edittextinfo => "左側にある一覧は、DIR/text の中にあるテキストファイルです.
これらのファイルは、ユーザーのリクエストに対する返信内容,または、配信されるメールに付加される内容です.

このファイルを編集するには, 左の一覧から選択して、 [$BUTTON{'editfile'}] ボタンを押します.

終了または、中止するときは、[$BUTTON{'cancel'}] ボタンを押します.", + editingfile => 'ファイル編集', + editfileinfo => 'マネージ用
<#l#> リスト名
<#A#> 投稿者アドレス
<#R#> 投稿者が返信するアドレス

メッセージ埋め込み用
<#l#> リスト名
<#A#> 受け取りアドレス
<#R#> 拒絶アドレス', + mysqlcreate => '必要ならば MySQL データベースを作成', + +); + +# === Configuration file ends ===