From 122cac8bd5aa5743a9d7dc7b3acdc2bed3e4e103 Mon Sep 17 00:00:00 2001 From: JT Smith Date: Mon, 8 Jul 2002 01:13:50 +0000 Subject: [PATCH] Added translations manager. --- docs/upgrades/upgrade_4.1.0-4.2.0.sql | 22 +- lib/WebGUI/Macro/AdminBar.pm | 1 + lib/WebGUI/Operation.pm | 1 + lib/WebGUI/Operation/International.pm | 386 ++++++++++++++++++++++++++ lib/WebGUI/Operation/User.pm | 1 + lib/WebGUI/Utility.pm | 1 + 6 files changed, 411 insertions(+), 1 deletion(-) create mode 100644 lib/WebGUI/Operation/International.pm diff --git a/docs/upgrades/upgrade_4.1.0-4.2.0.sql b/docs/upgrades/upgrade_4.1.0-4.2.0.sql index 495f5c0d4..362e966b6 100644 --- a/docs/upgrades/upgrade_4.1.0-4.2.0.sql +++ b/docs/upgrades/upgrade_4.1.0-4.2.0.sql @@ -762,7 +762,27 @@ update help set language=5 where language='Portugu update help set language=6 where language='Svenska'; update help set language=7 where language='¼òÌåÖÐÎÄ'; alter table help change language languageId int not null default 1; - +insert into international values (584,'WebGUI',1,'Add a new language.'); +insert into international values (585,'WebGUI',1,'Manage translations.'); +insert into international values (586,'WebGUI',1,'Languages'); +insert into international values (588,'WebGUI',1,'Are you certain you wish to submit this translation to Plain Black for inclusion in the default distribution? By clicking on the yes link you understand that you\'re giving Plain Black an unlimited license to use the translation in its software distributions.'); +insert into international values (587,'WebGUI',1,'Are you certain you wish to delete this language and all the help and international messages that go with it?'); +insert into international values (589,'WebGUI',1,'Edit Language'); +insert into international values (590,'WebGUI',1,'Language ID'); +insert into international values (591,'WebGUI',1,'Language'); +insert into international values (592,'WebGUI',1,'Character Set'); +insert into international values (593,'WebGUI',1,'Submit translation to Plain Black.'); +insert into international values (594,'WebGUI',1,'Translate international messages.'); +insert into international values (595,'WebGUI',1,'International Messages'); +insert into international values (596,'WebGUI',1,'MISSING'); +insert into international values (597,'WebGUI',1,'Edit International Message'); +insert into international values (598,'WebGUI',1,'Edit language.'); +insert into international values (599,'WebGUI',1,'Translate help.'); +insert into international values (600,'WebGUI',1,'Help ID'); +insert into international values (601,'WebGUI',1,'International ID'); +insert into international values (602,'WebGUI',1,'Edit Help'); +insert into international values (603,'WebGUI',1,'Action'); +insert into international values (604,'WebGUI',1,'Object'); diff --git a/lib/WebGUI/Macro/AdminBar.pm b/lib/WebGUI/Macro/AdminBar.pm index 559abcf6c..68821966b 100644 --- a/lib/WebGUI/Macro/AdminBar.pm +++ b/lib/WebGUI/Macro/AdminBar.pm @@ -57,6 +57,7 @@ sub _replacement { %hash = ( WebGUI::URL::page('op=listGroups')=>WebGUI::International::get(5), WebGUI::URL::page('op=manageSettings')=>WebGUI::International::get(4), + WebGUI::URL::page('op=listLanguages')=>WebGUI::International::get(585), WebGUI::URL::page('op=listUsers')=>WebGUI::International::get(7), WebGUI::URL::gateway('trash')=>WebGUI::International::get(10), WebGUI::URL::page('op=listRoots')=>WebGUI::International::get(410), diff --git a/lib/WebGUI/Operation.pm b/lib/WebGUI/Operation.pm index be0248e9e..63e88b440 100644 --- a/lib/WebGUI/Operation.pm +++ b/lib/WebGUI/Operation.pm @@ -16,6 +16,7 @@ use WebGUI::Operation::Admin; use WebGUI::Operation::Group; use WebGUI::Operation::Help; use WebGUI::Operation::Image; +use WebGUI::Operation::International; use WebGUI::Operation::Package; use WebGUI::Operation::Page; use WebGUI::Operation::ProfileSettings; diff --git a/lib/WebGUI/Operation/International.pm b/lib/WebGUI/Operation/International.pm new file mode 100644 index 000000000..87f77856d --- /dev/null +++ b/lib/WebGUI/Operation/International.pm @@ -0,0 +1,386 @@ +package WebGUI::Operation::International; + +#------------------------------------------------------------------- +# WebGUI is Copyright 2001-2002 Plain Black Software. +#------------------------------------------------------------------- +# Please read the legal notices (docs/legal.txt) and the license +# (docs/license.txt) that came with this distribution before using +# this software. +#------------------------------------------------------------------- +# http://www.plainblack.com info@plainblack.com +#------------------------------------------------------------------- + +use Exporter; +use strict; +use Tie::CPHash; +use WebGUI::HTMLForm; +use WebGUI::Icon; +use WebGUI::International; +use WebGUI::Mail; +use WebGUI::Paginator; +use WebGUI::Session; +use WebGUI::SQL; +use WebGUI::URL; + +our @ISA = qw(Exporter); +our @EXPORT = qw(&www_listLanguages &www_editLanguage &www_submitTranslation &www_submitTranslationConfirm &www_deleteLanguage &www_deleteLanguageConfirm + &www_listInternationalMessages &www_editLanguageSave &www_editInternationalMessage &www_editInternationalMessageSave &www_listHelpMessages + &www_editHelpMessage &www_editHelpMessageSave); + + +#------------------------------------------------------------------- +sub _submenu { + my ($output); + $output = ''; + $output .= ''; + $output .= '
'.$_[0].''; + $output .= '
  • '.WebGUI::International::get(598).''; + $output .= '
  • '.WebGUI::International::get(594).''; + $output .= '
  • '.WebGUI::International::get(599).''; + $output .= '
  • '.WebGUI::International::get(593).''; + $output .= '
  • '.WebGUI::International::get(585).''; + $output .= '
  • '.WebGUI::International::get(493).''; + $output .= '
  • '; + return $output; +} + +#------------------------------------------------------------------- +sub www_deleteLanguage { + my ($output); + if ($session{form}{lid} < 1000 && $session{form}{lid} > 0) { + return WebGUI::Privilege::vitalComponent(); + } elsif (WebGUI::Privilege::isInGroup(3)) { + $output .= '

    '.WebGUI::International::get(42).'

    '; + $output .= WebGUI::International::get(587).'

    '; + $output .= '

    '.WebGUI::International::get(44).''; + $output .= '    '.WebGUI::International::get(45).'
    '; + return $output; + } else { + return WebGUI::Privilege::adminOnly(); + } +} + +#------------------------------------------------------------------- +sub www_deleteLanguageConfirm { + if ($session{form}{lid} < 1000 && $session{form}{lid} > 0) { + return WebGUI::Privilege::vitalComponent(); + } elsif (WebGUI::Privilege::isInGroup(3)) { + WebGUI::SQL->write("delete from language where languageId=".$session{form}{lid}); + WebGUI::SQL->write("delete from international where languageId=".$session{form}{lid}); + WebGUI::SQL->write("delete from help where languageId=".$session{form}{lid}); + WebGUI::SQL->write("delete from userProfileData where fieldName='language' and fieldData=".$session{form}{lid}); + return www_listLanguages(); + } else { + return WebGUI::Privilege::adminOnly(); + } +} + +#------------------------------------------------------------------- +sub www_editHelpMessage { + my ($output, %data, $f, $language, $action, $object); + tie %data, 'Tie::CPHash'; + if (WebGUI::Privilege::isInGroup(3)) { + ($language) = WebGUI::SQL->quickArray("select language from language where languageId=".$session{form}{lid}); + $action = WebGUI::International::get(603); + $object = WebGUI::International::get(604); + $output = '

    '.WebGUI::International::get(602).'

    '; + $f = WebGUI::HTMLForm->new; + $f->readOnly($session{form}{hid},WebGUI::International::get(600)); + $f->hidden("lid",$session{form}{lid}); + $f->hidden("hid",$session{form}{hid}); + $f->hidden("missing",$session{form}{missing}); + $f->hidden("pn",$session{form}{pn}); + $f->hidden("namespace",$session{form}{namespace}); + $f->hidden("op","editHelpMessageSave"); + %data = WebGUI::SQL->quickHash("select action,object,body from help where helpId=".$session{form}{hid}." + and namespace='".$session{form}{namespace}."' and languageId=".$session{form}{lid}); + $f->text("action",$action,$data{action}); + $f->text("object",$object,$data{object}); + $f->HTMLArea("body",$language,$data{body}); + $f->submit; + %data = WebGUI::SQL->quickHash("select action,object,body from help where helpId=".$session{form}{hid}." + and namespace='".$session{form}{namespace}."' and languageId=1"); + $f->readOnly($data{action},$action); + $f->readOnly($data{object},$object); + $f->readOnly($data{body},"English"); + $output .= $f->print; + return _submenu($output); + } else { + return WebGUI::Privilege::adminOnly(); + } +} + +#------------------------------------------------------------------- +sub www_editHelpMessageSave { + if (WebGUI::Privilege::isInGroup(3)) { + if ($session{form}{missing}) { + WebGUI::SQL->write("insert into help (body,action,object,namespace,languageId,helpId) values (".quote($session{form}{body}).", " + .quote($session{form}{action}).", ".quote($session{form}{action}).",".quote($session{form}{namespace})."," + .$session{form}{lid}.",".$session{form}{hid}.")"); + } else { + WebGUI::SQL->write("update help set body=".quote($session{form}{body}).", action=".quote($session{form}{action}).", + object=".quote($session{form}{action})." where namespace=".quote($session{form}{namespace})." + and languageId=".$session{form}{lid}." and helpId=".$session{form}{hid}); + } + return www_listHelpMessages(); + } else { + return WebGUI::Privilege::adminOnly(); + } +} + +#------------------------------------------------------------------- +sub www_editInternationalMessage { + my ($output, $message, $f, $language); + if (WebGUI::Privilege::isInGroup(3)) { + ($language) = WebGUI::SQL->quickArray("select language from language where languageId=".$session{form}{lid}); + $output = '

    '.WebGUI::International::get(597).'

    '; + $f = WebGUI::HTMLForm->new; + $f->readOnly($session{form}{iid},WebGUI::International::get(601)); + $f->hidden("lid",$session{form}{lid}); + $f->hidden("missing",$session{form}{missing}); + $f->hidden("iid",$session{form}{iid}); + $f->hidden("pn",$session{form}{pn}); + $f->hidden("namespace",$session{form}{namespace}); + $f->hidden("op","editInternationalMessageSave"); + ($message) = WebGUI::SQL->quickArray("select message from international where internationalId=".$session{form}{iid}." + and namespace='".$session{form}{namespace}."' and languageId=".$session{form}{lid}); + $f->textarea("message",$language,$message); + $f->submit; + ($message) = WebGUI::SQL->quickArray("select message from international where internationalId=".$session{form}{iid}." + and namespace='".$session{form}{namespace}."' and languageId=1"); + $f->readOnly($message,"English"); + $output .= $f->print; + return _submenu($output); + } else { + return WebGUI::Privilege::adminOnly(); + } +} + +#------------------------------------------------------------------- +sub www_editInternationalMessageSave { + if (WebGUI::Privilege::isInGroup(3)) { + if ($session{form}{missing}) { + WebGUI::SQL->write("insert into international (message,namespace,languageId,internationalId) values (".quote($session{form}{message}) + .",".quote($session{form}{namespace}).",".$session{form}{lid}.",".$session{form}{iid}.")"); + } else { + WebGUI::SQL->write("update international set message=".quote($session{form}{message})." where namespace=".quote($session{form}{namespace})." + and languageId=".$session{form}{lid}." and internationalId=".$session{form}{iid}); + } + return www_listInternationalMessages(); + } else { + return WebGUI::Privilege::adminOnly(); + } +} + +#------------------------------------------------------------------- +sub www_editLanguage { + my ($output, %data, $f); + tie %data, 'Tie::CPHash'; + if (WebGUI::Privilege::isInGroup(3)) { + if ($session{form}{lid} eq "new") { + $data{characterSet} = "ISO-8859-1"; + } else { + %data = WebGUI::SQL->quickHash("select * from language where languageId=".$session{form}{lid}); + } + $output = '

    '.WebGUI::International::get(589).'

    '; + $f = WebGUI::HTMLForm->new; + $f->readOnly($session{form}{lid},WebGUI::International::get(590)); + $f->hidden("lid",$session{form}{lid}); + $f->hidden("op","editLanguageSave"); + $f->text("language",WebGUI::International::get(591),$data{language}); + $f->text("characterSet",WebGUI::International::get(592),$data{characterSet}); + $f->submit; + $output .= $f->print; + if ($session{form}{lid} ne "new") { + $output .= ''; + } + return _submenu($output); + } else { + return WebGUI::Privilege::adminOnly(); + } +} + +#------------------------------------------------------------------- +sub www_editLanguageSave { + if (WebGUI::Privilege::isInGroup(3)) { + if ($session{form}{lid} eq "new") { + $session{form}{lid} = getNextId("languageId"); + WebGUI::SQL->write("insert into language (languageId) values ($session{form}{lid})"); + } + WebGUI::SQL->write("update language set language=".quote($session{form}{language}).", characterSet=".quote($session{form}{characterSet})." + where languageId=".$session{form}{lid}); + return www_editLanguage(); + } else { + return WebGUI::Privilege::adminOnly(); + } +} + +#------------------------------------------------------------------- +sub www_listHelpMessages { + my ($output, $sth, $key, $p, %data, %newList, %list, $i, $missing, @row, @split,$new); + tie %data, 'Tie::CPHash'; + tie %list, 'Tie::IxHash'; + tie %newList, 'Tie::IxHash'; + if (WebGUI::Privilege::isInGroup(3)) { + %data = WebGUI::SQL->quickHash("select language from language where languageId=".$session{form}{lid}); + $missing = ''.WebGUI::International::get(596).''; + $output = '

    '.WebGUI::International::get(595).' ('.$data{language}.')

    '; + $sth = WebGUI::SQL->read("select * from help where languageId=".$session{form}{lid}); + while (%data = $sth->hash) { + $list{$data{helpId}."-".$data{namespace}} = $data{action}.' '.$data{object}; + } + $sth->finish; + $sth = WebGUI::SQL->read("select * from help where languageId=1"); + while (%data = $sth->hash) { + unless ($list{$data{helpId}."-".$data{namespace}}) { + $list{"missing-".$data{helpId}."-".$data{namespace}} = $missing; + } + } + $sth->finish; + foreach $key (sort {$b cmp $a} keys %list) { + $newList{$key}=$list{$key}; + } + foreach $key (keys %newList) { + @split = split(/-/,$key); + if ($split[0] eq "missing") { + $split[0] = $split[1]; + $split[1] = $split[2]; + $new = 1; + } else { + $new = 0; + } + $row[$i] = editIcon('op=editHelpMessage&lid='.$session{form}{lid}.'&hid='.$split[0].'&namespace='.$split[1].'&pn='.$session{form}{pn}.'&missing='.$new) + .' '.$newList{$key}."
    "; + $i++; + } + $p = WebGUI::Paginator->new(WebGUI::URL::page('op=listHelpMessages&lid='.$session{form}{lid}),\@row,50); + $output .= $p->getPage($session{form}{pn}); + $output .= $p->getBarTraditional($session{form}{pn}); + return _submenu($output); + } else { + return WebGUI::Privilege::adminOnly(); + } +} + +#------------------------------------------------------------------- +sub www_listInternationalMessages { + my ($output, $sth, $new, $key, $p, %data, %newList, %list, $i, $missing, @row, @split); + tie %data, 'Tie::CPHash'; + tie %list, 'Tie::IxHash'; + tie %newList, 'Tie::IxHash'; + if (WebGUI::Privilege::isInGroup(3)) { + %data = WebGUI::SQL->quickHash("select language from language where languageId=".$session{form}{lid}); + $missing = ''.WebGUI::International::get(596).''; + $output = '

    '.WebGUI::International::get(595).' ('.$data{language}.')

    '; + $sth = WebGUI::SQL->read("select * from international where languageId=".$session{form}{lid}); + while (%data = $sth->hash) { + $list{$data{internationalId}."-".$data{namespace}} = $data{message}; + } + $sth->finish; + $sth = WebGUI::SQL->read("select * from international where languageId=1"); + while (%data = $sth->hash) { + unless ($list{$data{internationalId}."-".$data{namespace}}) { + $list{"missing-".$data{internationalId}."-".$data{namespace}} = $missing; + } + } + $sth->finish; + foreach $key (sort {$b cmp $a} keys %list) { + $newList{$key}=$list{$key}; + } + foreach $key (keys %newList) { + @split = split(/-/,$key); + if ($split[0] eq "missing") { + $split[0] = $split[1]; + $split[1] = $split[2]; + $new = 1; + } else { + $new = 0; + } + $row[$i] = editIcon('op=editInternationalMessage&lid='.$session{form}{lid}.'&iid='.$split[0].'&namespace='.$split[1] + .'&pn='.$session{form}{pn}.'&missing='.$new) + .' '.$newList{$key}."
    "; + $i++; + } + $p = WebGUI::Paginator->new(WebGUI::URL::page('op=listInternationalMessages&lid='.$session{form}{lid}),\@row,100); + $output .= $p->getPage($session{form}{pn}); + $output .= $p->getBarTraditional($session{form}{pn}); + return _submenu($output); + } else { + return WebGUI::Privilege::adminOnly(); + } +} + +#------------------------------------------------------------------- +sub www_listLanguages { + my ($output, $sth, %data); + tie %data, 'Tie::CPHash'; + if (WebGUI::Privilege::isInGroup(3)) { + $output = '

    '.WebGUI::International::get(586).'

    '; + $output .= ''.WebGUI::International::get(584).''; + $output .= '

    '; + $sth = WebGUI::SQL->read("select languageId,language from language where languageId<>1 order by language"); + while (%data = $sth->hash) { + $output .= deleteIcon("op=deleteLanguage&lid=".$data{languageId}) + .editIcon("op=editLanguage&lid=".$data{languageId}) + .' '.$data{language}.'
    '; + } + $sth->finish; + return $output; + } else { + return WebGUI::Privilege::adminOnly(); + } +} + +#------------------------------------------------------------------- +sub www_submitTranslation { + my ($output); + $output .= '

    '.WebGUI::International::get(42).'

    '; + $output .= WebGUI::International::get(588).'

    '; + $output .= '

    '.WebGUI::International::get(44).''; + $output .= '    '.WebGUI::International::get(45).'
    '; + return _submenu($output); +} + +#------------------------------------------------------------------- +sub www_submitTranslationConfirm { + my ($sth, @data, $submission); + $submission = "#language\n\n"; + $sth = WebGUI::SQL->read("select * from language where languageId=".$session{form}{lid}); + while (@data = $sth->array) { + $submission .= join("\t",@data)."\n"; + } + $sth->finish; + $submission .= "\n#international\n\n"; + $sth = WebGUI::SQL->read("select * from international where languageId=".$session{form}{lid}); + while (@data = $sth->array) { + $submission .= join("\t",@data)."\n"; + } + $sth->finish; + $submission .= "\n#help\n\n"; + $sth = WebGUI::SQL->read("select * from help where languageId=".$session{form}{lid}); + while (@data = $sth->array) { + $submission .= join("\t",@data)."\n"; + } + $sth->finish; + WebGUI::Mail::send("info\@plainblack.com","International Message Submission",$submission); + return www_editLanguage(); +} + + + + + + +1; + + diff --git a/lib/WebGUI/Operation/User.pm b/lib/WebGUI/Operation/User.pm index ed540f0aa..e8de402f7 100644 --- a/lib/WebGUI/Operation/User.pm +++ b/lib/WebGUI/Operation/User.pm @@ -43,6 +43,7 @@ sub _subMenu { $output .= '
  • '.WebGUI::International::get(555).''; } $output .= '
  • '.WebGUI::International::get(456).''; + $output .= '
  • '.WebGUI::International::get(493).''; $output .= ''; return $output; } diff --git a/lib/WebGUI/Utility.pm b/lib/WebGUI/Utility.pm index 8f00c264a..d984a8534 100644 --- a/lib/WebGUI/Utility.pm +++ b/lib/WebGUI/Utility.pm @@ -110,3 +110,4 @@ sub sortHashDescending { 1; +