#============================================================
# MyPluginApplication
#============================================================
package MyPluginApplication;
use MyApplication;
@ISA = qw(MyApplication);
use strict;
use SQLDB;
#==========================================
# 大域変数
#==========================================
my $DefaultSendmail = '/usr/sbin/sendmail';
my $SourceCharCode = Jcode::getcode('月火水木金土日 ');
#============================================================
# 静的関数
#============================================================
sub LoadModule
{
my ($Dir, $Module) = @_;
my ($drive, $directory, $filename, $ext1, $lastdir, $filebody) = Deps::SplitFilePath($ENV{SCRIPT_FILENAME});
my $path = Utils::MakePath("$drive$directory", [$Dir, "$Module.pm"], '/', 0);
$path = Utils::ReduceDirectory($path, '/');
#Utils::InitHTML();
#print("$ENV{SCRIPT_FILENAME}
\n");
#print("D[$Dir]
\n");
#print("P[$path
]\n");
if(-f $path) {
require $path;
}
else {
Utils::InitHTML();
print("
Error in MyPluginApplication::LoadModule: Can not find file [$path].
\n");
return -1;
}
return 1;
}
#============================================================
# 変数等取得関数
#============================================================
#============================================================
# コンストラクタ、デストラクタ
#============================================================
BEGIN { }
sub new
{
my ($module, $app) = @_;
my $this = {};
bless $this;
# $this->SUPER::new(@_);
return $this;
}
sub DESTROY
{
my $this = shift;
# $this->SUPER::DESTROY(@_);
}
#============================================================
# 継承クラスで定義しなおす関数
#============================================================
#============================================================
# 一般関数
#============================================================
sub SearchModules
{
my ($this, $PluginDir) = @_;
my @files = glob(Deps::MakePath($PluginDir, "*.pm", 0));
my @Modules;
foreach my $f (@files) {
my $ModuleName = Deps::ExtractFileBody($f);
next if($ModuleName =~ /^(\$~|~)/);
push(@Modules, $ModuleName);
}
return @Modules;
}
sub UpdateModuleParams
{
my ($App, $pParams) = @_;
foreach my $pm ($App->{pAdminModules}, $App->{pUserModules}, $App->{pNoLogonModules}) {
#$App->print("pm=$pm\n");
next if(!defined $pm);
for(my $i = 0 ; $i < @$pm ; $i++) {
my $m = $App->{'p' . $pm->[$i]};
next if(!$m);
#$App->print("m=$m [$pm->[$i]]\n");
$m->OnInitialized($App, $pParams) if($m->can('OnInitialized'));
}
}
}
sub LoadModulesInADirectory
{
my ($this, $pParams, $Type, $PluginDir, $pModules, $pModuleInf, $pLoadedModuleHash, $OnlyLoadModules, $pExcludeModules) = @_;
#$this->print("PluginDir [$PluginDir]\n");
return if(!defined $PluginDir);
if(!-d $PluginDir) {
$this->H3("Warning in MyPluginApplication::LoadModulesInADirectory: Plugin dir [$PluginDir] is not found.\n");
return undef;
}
my @files = glob(Deps::MakePath($PluginDir, "*.pm", 0));
foreach my $f (@files) {
my $ModuleName = Deps::ExtractFileBody($f);
#$this->print("Try loading [$ModuleName].. Only=[$OnlyLoadModules] Excluded=[", join(',', %$pExcludeModules), "]\n");
next if($OnlyLoadModules ne '' and $OnlyLoadModules !~ /,$ModuleName,/i);
#$this->print("1\n");
next if($ModuleName =~ /^(\$~|~)/);
#$this->print("2\n");
next if($pLoadedModuleHash->{$ModuleName});
#$this->print("3\n");
next if($pExcludeModules->{$ModuleName});
#$this->print(" => Load $ModuleName\n");
$f =~ s/\\/\//g;
require $f;
# my $pModule = $this->{"p$ModuleName"} = eval("new $ModuleName");
my $pModule = $this->{"p$ModuleName"} = $ModuleName->new();
$pLoadedModuleHash->{$ModuleName}++;
if(1) {
$pParams->{PrevFunction} = "MyPluginApplication::LoadModules AdminPlugin";
Utils::MergeHash($this->pParams(), $pModule->GetParameterHash($this, $this->pParams())) if($pModule->can('GetParameterHash'));
}
else {
$this->print("M: $ModuleName: GetParameterHash not exisits\n");
}
$pModule->OnLoad($this, $this->pParams()) if($pModule->can('OnLoad'));
push(@$pModules, $ModuleName);
my %inf = (
Name => $ModuleName,
Path => $PluginDir,
Type => $Type,
);
push(@$pModuleInf, \%inf);
}
return $pModules;
}
sub GetModuleDirs
{
my ($App, $pParams, $key, $dir) = @_;
my $DirKey = "p${key}PluginDirs";
return $App->{DirKey} if($App->{DirKey});
my $root = $pParams->{BinRootDir};
$root =~ s/\\/\//g;
$root =~ s/\/$//;
my $RootRegExp = Utils::RegExpQuote($root);
#$App->print("root[$root]\n");
$dir =~ s/\\/\//g;
$dir =~ s/\/$//;
#$App->print("dir[$dir]\n");
my @keys;
if($key eq 'Admin') {
my $d = $pParams->{ExtraModuleDirs};
push(@keys, $d) if($d);
$d = $pParams->{ExtraAdminModuleDirs};
push(@keys, $d) if($d);
}
elsif($key eq 'User') {
my $d = $pParams->{ExtraUserModuleDirs};
#$App->print("ud[$d]\n");
push(@keys, $d) if($d);
}
elsif($key eq 'NoLogon') {
my $d = $pParams->{ExtraNoLogonModuleDirs};
push(@keys, $d) if($d);
}
push(@keys, $key);
my @dirs;
while(1) {
# last if($dir !~ /^$RootRegExp/i or $dir eq $root);
last if($dir !~ /^$RootRegExp/i);
my ($parent, $lastdir) = ($dir =~ /^(.*)\/([^\/]+?)$/);
last if(!$lastdir);
if($lastdir eq $key) {
$dir = $parent;
next;
}
for(my $i = 0 ; $i < @keys ; $i++) {
my $d = Utils::MakePath($dir, $keys[$i], '/', 0);
#$App->print("[$key] $i [$d]\n");
push(@dirs, $d) if($lastdir eq $key or -e $d);
}
$dir = $parent;
}
for(my $i = 0 ; $i < @keys ; $i++) {
my $d = Utils::MakePath($pParams->{CommonFileRootDir}, $keys[$i], '/', 0);
#$App->print("[$key] $i [$d]\n");
push(@dirs, $d) if(-e $d);
}
#for(my $i = 0 ; $i < @dirs ; $i++) {
#$App->print("[$key] $i: $dirs[$i]\n");
#}
return $App->{$DirKey} = \@dirs;
}
sub LoadModules
{
my ($this, $AdminPluginDir, $UserPluginDir, $UpdateParams) = @_;
my $NoLogonPluginDir;
if($UpdateParams =~ /[^\d]/) {
($this, $AdminPluginDir, $UserPluginDir, $NoLogonPluginDir, $UpdateParams) = @_;
}
my $pParams = $this->pParams();
my $OnlyLoadModules = ($pParams->{OnlyLoadModules} eq '')? '' : ',' . $pParams->{OnlyLoadModules} . ',';
my %ExcludeModules = $this->GetExcludeModulesHash($pParams);
$this->{pAdminModules} = [] if(!$this->{pAdminModules});
$this->{pUserModules} = [] if(!$this->{pUserModules});
$this->{pNoLogonModules} = [] if(!$this->{pNoLogonModules});
$this->{pModuleInf} = [] if(!$this->{pModuleInf});
$this->{pLoadedModuleHash} = {} if(!$this->{pLoadedModuleHash});
# my @AdminModules = ($this->{pAdminModules})? @{$this->{pAdminModules}} : ();
# my @UserModules = ($this->{pUserModules})? @{$this->{pUserModules}} : ();
# my @NoLogonModules = ($this->{pNoLogonModules})? @{$this->{pNoLogonModules}} : ();
my $pAdminModuleDirs = $this->GetModuleDirs($pParams, 'Admin', $AdminPluginDir);
for(my $i = 0 ; $i < @$pAdminModuleDirs ; $i++) {
$this->LoadModulesInADirectory($pParams, 'Admin', $pAdminModuleDirs->[$i], $this->{pAdminModules},
$this->{pModuleInf}, $this->{pLoadedModuleHash}, $OnlyLoadModules, \%ExcludeModules);
}
my $pUserModuleDirs = $this->GetModuleDirs($pParams, 'User', $UserPluginDir);
for(my $i = 0 ; $i < @$pUserModuleDirs ; $i++) {
$this->LoadModulesInADirectory($pParams, 'User', $pUserModuleDirs->[$i], $this->{pUserModules},
$this->{pModuleInf}, $this->{pLoadedModuleHash}, $OnlyLoadModules, \%ExcludeModules);
}
my $pNoLogonModuleDirs = $this->GetModuleDirs($pParams, 'NoLogon', $NoLogonPluginDir);
for(my $i = 0 ; $i < @$pNoLogonModuleDirs ; $i++) {
$this->LoadModulesInADirectory($pParams, 'NoLogon', $pNoLogonModuleDirs->[$i], $this->{pNoLogonModules},
$this->{pModuleInf}, $this->{pLoadedModuleHash}, $OnlyLoadModules, \%ExcludeModules);
}
if(0) {
if($pParams->{ExtraModuleDirs}) {
my @dirs = Utils::Split("[\\s,]+", $pParams->{ExtraModuleDirs});
for(my $i = 0 ; $i < @dirs ; $i++) {
my $PersonalPluginDir = $AdminPluginDir;
$PersonalPluginDir =~ s/\/Admin$/\/$dirs[$i]/;
$this->LoadModulesInADirectory($pParams, 'Admin', $PersonalPluginDir, $this->{pAdminModules},
$this->{pModuleInf}, $this->{pLoadedModuleHash}, $OnlyLoadModules, \%ExcludeModules);
}
}
if($pParams->{ExtraAdminModuleDirs}) {
my @dirs = Utils::Split("[\\s,]+", $pParams->{ExtraAdminModuleDirs});
for(my $i = 0 ; $i < @dirs ; $i++) {
my $PersonalPluginDir = $AdminPluginDir;
$PersonalPluginDir =~ s/\/Admin$/\/$dirs[$i]/;
$this->LoadModulesInADirectory($pParams, 'Admin', $PersonalPluginDir, $this->{pAdminModules},
$this->{pModuleInf}, $this->{pLoadedModuleHash}, $OnlyLoadModules, \%ExcludeModules);
}
}
$this->LoadModulesInADirectory($pParams, 'Admin', $AdminPluginDir, $this->{pAdminModules},
$this->{pModuleInf}, $this->{pLoadedModuleHash}, $OnlyLoadModules, \%ExcludeModules);
my $dir = Utils::MakePath($pParams->{CommonFileRootDir}, 'Admin', '/', 0);
#$this->print("d[$dir][$pParams->{CommonFileRootDir}]\n");
$this->LoadModulesInADirectory($pParams, 'Admin', $dir, $this->{pAdminModules},
$this->{pModuleInf}, $this->{pLoadedModuleHash}, $OnlyLoadModules, \%ExcludeModules);
if($pParams->{ExtraUserModuleDirs}) {
my @dirs = Utils::Split("[\\s,]+", $pParams->{ExtraUserModuleDirs});
for(my $i = 0 ; $i < @dirs ; $i++) {
my $PersonalPluginDir = $UserPluginDir;
$PersonalPluginDir =~ s/\/User$/\/$dirs[$i]/;
$this->LoadModulesInADirectory($pParams, 'User', $PersonalPluginDir, $this->{pUserModules},
$this->{pModuleInf}, $this->{pLoadedModuleHash}, $OnlyLoadModules, \%ExcludeModules);
}
}
$this->LoadModulesInADirectory($pParams, 'User', $UserPluginDir, $this->{pUserModules},
$this->{pModuleInf}, $this->{pLoadedModuleHash}, $OnlyLoadModules, \%ExcludeModules);
$dir = Utils::MakePath($pParams->{CommonFileRootDir}, 'User', '/', 0);
$this->LoadModulesInADirectory($pParams, 'User', $dir, $this->{pUserModules},
$this->{pModuleInf}, $this->{pLoadedModuleHash}, $OnlyLoadModules, \%ExcludeModules);
if($pParams->{ExtraNoLogonModuleDirs}) {
my @dirs = Utils::Split("[\\s,]+", $pParams->{ExtraNoLogonModuleDirs});
for(my $i = 0 ; $i < @dirs ; $i++) {
my $PersonalPluginDir = $AdminPluginDir;
$PersonalPluginDir =~ s/\/Admin$/\/$dirs[$i]/;
$this->LoadModulesInADirectory($pParams, 'NoLogon', $PersonalPluginDir, $this->{pNoLogonModules},
$this->{pModuleInf}, $this->{pLoadedModuleHash}, $OnlyLoadModules, \%ExcludeModules);
}
}
$this->LoadModulesInADirectory($pParams, 'NoLogon', $NoLogonPluginDir, $this->{pNoLogonModules},
$this->{pModuleInf}, $this->{pLoadedModuleHash}, $OnlyLoadModules, \%ExcludeModules);
$dir = Utils::MakePath($pParams->{CommonFileRootDir}, 'NoLogon', '/', 0);
$this->LoadModulesInADirectory($pParams, 'NoLogon', $dir, $this->{pNoLogonModules},
$this->{pModuleInf}, $this->{pLoadedModuleHash}, $OnlyLoadModules, \%ExcludeModules);
}
my %NoLogonModuleHash;
my $p = $this->{pNoLogonModules};
for(my $i = 0 ; $i < @$p ; $i++) {
my $name = $p->[$i];
$NoLogonModuleHash{$name} = 1;
}
$this->{pNoLogonModuleHash} = \%NoLogonModuleHash;
$this->MergeModuleParameters($this->{pParams}) if($UpdateParams);
}
sub MergeAModuleParameters
{
my ($this, $pParams, $pModules, $ModuleDescription) = @_;
return if(!$pModules);
foreach my $m (@$pModules) {
my $p = $this->{"p$m"};
if($p) {
if($p->can("GetParameterHash")) {
$pParams->{PrevFunction} = "MyCGIApplication::MergeModuleParameters AdminPlugin";
Utils::MergeHash($pParams, $p->GetParameterHash($this, $pParams));
}
}
else {
$this->H3("Error: Can not find the $ModuleDescription [$m]");
}
}
}
sub MergeModuleParameters
{
my ($this, $pParams) = @_;
return if($this->{nModuleParametersLoaded});
$this->{nModuleParametersLoaded}++;
my $pAdminModules = ($this->{pAdminModules})? $this->{pAdminModules} : $pParams->{pAdminModules};
$this->MergeAModuleParameters($pParams, $pAdminModules, 'AdminModule');
my $pUserModules = ($this->{pUserModules})? $this->{pUserModules} : $pParams->{pUserModules};
$this->MergeAModuleParameters($pParams, $pUserModules, 'UserModule');
my $pNoLogonModules = ($this->{pNoLogonModules})? $this->{pNoLogonModules} : $pParams->{pNoLogonModules};
$this->MergeAModuleParameters($pParams, $pNoLogonModules, 'NoLogonModule');
}
sub nOpenAdminModules
{
my ($this, $pParams) = @_;
my $pAdminModules = $this->{pAdminModules};
return 0 if(!defined $pAdminModules);
#Utils::InitHTML();
my $n = 0;
my %Loaded;
foreach my $m (@$pAdminModules) {
if($this->{"p$m"}->can("IsOpen")) {
# if(defined &{"$m::IsOpen"}) {
my $ret = $this->{"p$m"}->IsOpen($this, $pParams, 0);
$n++ if($ret);
#$this->print("$n: $m [$ret]\n");
}
}
return $n;
}
sub IsModuleIncluded
{
my ($this, $ModuleName, $pModules) = @_;
for(my $i = 0 ; $i < @$pModules ; $i++) {
return 1 if($ModuleName eq $pModules->[$i]);
}
return 0;
}
sub GetExcludeModulesArray
{
my ($App, $pParams) = @_;
#$App->print("EE[$pParams->{ExcludeModules}]\n");
my @em = ($pParams->{ExcludeModules} eq '')? () : Utils::Split("[\\n\\r,]+", $pParams->{ExcludeModules});
#foreach my $key (sort @em) {
# $App->print("excl:[$key]\n");
#}
my $DB = $App->DB();
return @em if(!$DB);
$DB->Search($pParams->{DBVariablesTableName}, "VarName='ExcludeModules' order by sn", "");
my $nHit = $DB->nHit();
return @em if($nHit == 0);
my %Hit = $DB->GetNextHit();
my @em = Utils::Split("[\\n\\r,]+", $Hit{Value});
return @em;
}
sub GetExcludeModulesHash
{
my ($App, $pParams) = @_;
my @em = $App->GetExcludeModulesArray($pParams);
my %ExcludeModules;
for(my $i = 0 ; $i < @em ; $i++) {
#$App->print("H: [$em[$i]]\n");
$ExcludeModules{$em[$i]}++;
}
return %ExcludeModules;
}
sub ShowAMenu
{
my ($App, $pParams, $m, $MenuMode, $FrameMode, $ProgramPath, $BaseOption, $pre, $post, %args) = @_;
$MenuMode = ($pParams->{MenuMode})? $pParams->{MenuMode} : $App->MenuMode() if(!defined $MenuMode);
$FrameMode = $App->GetFrameMode() if(!defined $FrameMode);
$pre = '' if(!defined $pre);
$post = '' if(!defined $post);
return if(!$App->{"p$m"} or !$App->{"p$m"}->can("ShowMenu"));
#$App->print("m[$m]\n");
my $pModule = $App->{"p$m"};
my $s = $App->GetMenuString($pModule, $pParams, $ProgramPath, $BaseOption, $pre, $post);
return if($s eq '');
$s =~ s/\<\/?span[^\>]*\>/\n/g;
my @menus = Utils::Split("\\n", $s);
for(my $i2 = 0 ; $i2 < @menus ; $i2++) {
my $m2 = $menus[$i2];
$m2 =~ s/\<\/?span[^\>]*\>//g;
$m2 =~ s/\
]*\>//g;
Utils::DelSpace($m2);
if($m2 ne '' and $MenuMode =~ /superfish/i) {
if($args{style}) {
$m2 =~ s/\>/ style=\"$args{style}\"\>/;
}
#$App->print("m2[$m2]\n");
# $App->PrintItem($m2);
$App->BeginItemElement($m2);
if($i2 == 0) {
my $s2 = $App->GetSubMenuString($pModule, $pParams, $ProgramPath, $BaseOption, $pre, $post);
$s2 =~ s/\<\/?span[^\>]*\>/\n/g;
my @menus3 = Utils::Split("\\n", $s2);
$App->BeginItem(0, style => 'border: none; background-color: #FFFFFF; margin-top: 0px; padding-top: 0px;') if(@menus3 > 0);
for(my $i3 = 0 ; $i3 < @menus3 ; $i3++) {
my $m3 = $menus3[$i3];
$m3 =~ s/\<\/?span[^\>]*\>//g;
$m3 =~ s/\
]*\>//g;
Utils::DelSpace($m3);
#$App->print("m3[$m3]\n");
$App->PrintItem($m3) if($m3 ne '');
}
$App->EndItem() if(@menus3 > 0);
}
#$App->print(" m2[$m2] end\n");
$App->EndItemElement();
}
elsif($m2 ne '') {
$App->PrintRawHTML("$pre$m2$post\n");
}
$App->print("\n") if($FrameMode =~ /cols/i);
}
}
sub ShowUserModuleMenus
{
my ($App, $pParams, $ProgramPath, $BaseOption, $pModuleOrder, $FrameMode, $pre, $post) = @_;
#$this->print("UO: ", join(', ', @$pModuleOrder), "\n");
#$App->print("mm[$pParams->{MenuMode}]\n");
my $MenuMode = ($pParams->{MenuMode})? $pParams->{MenuMode} : $App->MenuMode();
my $pUserModules = $App->{pUserModules};
$FrameMode = $App->GetFrameMode() if(!defined $FrameMode);
return if(!defined $pUserModules);
my %Loaded;
if($pModuleOrder) {
for(my $i = 0 ; $i < @$pModuleOrder ; $i++) {
my $m = $pModuleOrder->[$i];
if($App->{"p$m"} and $App->IsModuleIncluded($m, $pUserModules)) {
#$this->print("User module[$i]: [$m]\n");
$App->ShowAMenu($pParams, $m, $MenuMode, $FrameMode, $ProgramPath, $BaseOption, $pre, $post);
$Loaded{"p$m"}++;
}
}
}
foreach my $m (@$pUserModules) {
next if($Loaded{"p$m"});
#print "m2=$m\n";
$App->ShowAMenu($pParams, $m, $MenuMode, $FrameMode, $ProgramPath, $BaseOption, $pre, $post);
}
}
sub ShowAdminModuleMenus
{
my ($App, $pParams, $ProgramPath, $BaseOption, $pModuleOrder, $FrameMode, $pre, $post) = @_;
my $MenuMode = ($pParams->{MenuMode})? $pParams->{MenuMode} : $App->MenuMode();
my $pAdminModules = $App->{pAdminModules};
$FrameMode = $App->GetFrameMode() if(!defined $FrameMode);
return if(!defined $pAdminModules);
$pre = '' if(!defined $pre);
$post = '' if(!defined $post);
my %Loaded;
if($pModuleOrder) {
for(my $i = 0 ; $i < @$pModuleOrder ; $i++) {
my $m = $pModuleOrder->[$i];
if($App->{"p$m"} and $App->IsModuleIncluded($m, $pAdminModules)) {
$App->ShowAMenu($pParams, $m, $MenuMode, $FrameMode, $ProgramPath, $BaseOption, $pre, $post);
$Loaded{"p$m"}++;
}
}
}
foreach my $m (@$pAdminModules) {
next if($Loaded{"p$m"});
$App->ShowAMenu($pParams, $m, $MenuMode, $FrameMode, $ProgramPath, $BaseOption, $pre, $post);
}
}
sub ShowMenu
{
my ($App, $pParams, $EMail, $Password) = @_;
return if($pParams->{NoMenu} or $pParams->{DoNotShowMenu});
return if($pParams->{Action} =~ /^NoLogon\w+::\w+$/);
$App->print("");
#$App->print("Action: $pParams->{Action} EM=$pParams->{ExtendedMenu}\n");
# $pParams = $App->BuildParameterHash();
$pParams = $App->pParams();
my $MenuMode = ($pParams->{MenuMode})? $pParams->{MenuMode} : $App->MenuMode();
my $ProgramPath = $pParams->{ScriptPath};
my $ShowMenuButtons = (defined $pParams->{ShowMenuButtons})? $pParams->{ShowMenuButtons} : 1;
#$App->print("s: $ShowMenuButtons\n");
#$App->print("MM: $MenuMode\n");
if($MenuMode =~ /superfish/i) {
print <
EOT
}
my ($year, $mon, $mday, $hour, $min, $sec, $year, $wday, $yday, $isdst) = Utils::GetDateTime(time(), 0);
$pParams->{Year} = $year if(!defined $pParams->{Year} or $pParams->{Year} =~ /\{/);
$pParams->{Month} = $mon if(!defined $pParams->{Month} or $pParams->{Month} =~ /\{/);
$pParams->{Day} = $mday if(!defined $pParams->{Day} or $pParams->{Day} =~ /\{/);
my $Year = $pParams->{Year};
my $Month = $pParams->{Month};
my $Day = $pParams->{Day};
my $Apparatus = $pParams->{App};
$EMail = $pParams->{EMail} if($EMail eq '');
$Password = $pParams->{Password} if($Password eq '');
my $Action = $pParams->{Action};
if($pParams->{Action} eq 'ChangeApparatus') {
$Action = $pParams->{PrevAction};
}
my $FrameMode = ($App->can('GetFrameMode'))? $App->GetFrameMode() : 0;
# $pParams->{IsChildFrame} = 0;
my ($BaseOption, $target) = $App->GetCGIParameters(
{
# PrevAction => $pParams->{Action},
},
[qw(EMail Password ShowAll ExtendedMenu UseFrame IsChildFrame DBConfigName File Path Year Month Day)]);
# undef);
# $target = '_top';
# $target = 'Main';
# undef $target;
my $url = "$pParams->{ScriptPath}?Action=$pParams->{Action}&$BaseOption&App=$pParams->{Apparatus}&Language=";
my $LanguageSelectFormString = ($ShowMenuButtons)?
$App->GetLanguageSelectFormString(onChange => "ChangePage(document.LangSelect.Language, '$url')" ) :
$App->GetLanguageSelectFormString(onChange => "ChangePage(document.LangSelect.Language, '$url')" );
# $App->GetLanguageSelectFormString(onChange => 'ChangeAppLanguage(document.LangSelect.Language)') :
# $App->GetLanguageSelectFormString(onChange => 'ChangeAppLanguage(document.LangSelect.Language)');
# $App->GetLanguageSelectFormString(class => 'Language', onChange => 'ChangeAppLanguage(document.Language)');
#$App->print("LSF[$LanguageSelectFormString]\n");
my $nLanguage = $App->GetnLanguage();
my $nAdminModules = $App->nOpenAdminModules($pParams);
my @Apparatus = ($App->can('GetAllowedApparatuses'))? $App->GetAllowedApparatuses($EMail) : ();
$url = "$pParams->{ScriptPath}?Action=$pParams->{Action}&$BaseOption&Language=$pParams->{Language}&App=";
my $AppSelectFormString = ($App->can('GetApparatusSelectionFormString'))?
$App->GetApparatusSelectionFormString($pParams, "App", $pParams->{App}, undef,
onChange => "ChangePage(document.AppSelect.App, '$url')" ) : '';
# onChange => 'ChangeApparatus(document.AppSelect.App)') : '';
#$App->print("AA: [", join(',', @Apparatus), "]\n");
#$App->print("S: [$SelectStr]\n");
($BaseOption, $target) = $App->GetCGIParameters(
{
PrevAction => $pParams->{Action},
},
[qw(EMail Password App Language ShowAll ExtendedMenu UseFrame IsChildFrame DBConfigName File Path Year Month Day)]);
#$App->print("L[$pParams->{Language}]\n");
#$App->print("B[$BaseOption]\n");
my $pUserModuleLoadOrder = $pParams->{pUserPluginLoadOrder};
$pUserModuleLoadOrder = [] if(!defined $pUserModuleLoadOrder);
my $pAdminModuleLoadOrder = $pParams->{pAdminPluginLoadOrder};
$pAdminModuleLoadOrder = [] if(!defined $pAdminModuleLoadOrder);
my $ExtendedMenu = $pParams->{ExtendedMenu};
my $ExtendedMenuOriginal = $pParams->{ExtendedMenu};
# $pParams->{ExtendedMenu} = ! $pParams->{ExtendedMenu};
# $pParams->{ExtendedMenu} = $ExtendedMenuOriginal;
$ExtendedMenu = 0 if($nAdminModules == 0);
my $ExtendedMenuMode = (defined $pParams->{ExtendedMenuMode})? $pParams->{ExtendedMenuMode} : 'extend';
#$App->print("E: $ExtendedMenu\n");
my $ShowAll = $pParams->{ShowAll};
my ($MainPre, $MainPost, $pre, $post) = $App->GetMainMenuKeys($pParams);
if($MenuMode eq 'css') {
# $App->BeginMenu('MainMenu');
$App->PrintRawHTML($MainPre);
}
elsif($MenuMode =~ /superfish/i) {
}
else {
if(($nLanguage > 1 or @Apparatus > 1)) {
# if($ShowMenuButtons and ($nLanguage > 1 or @Apparatus > 1)) {
$App->PrintRawHTML("
EOT2
}
}
elsif(@Apparatus > 1) {
$App->PrintRawHTML($AppSelectFormString);
}
# 言語ボックスの表示
$ButtonStr = ($ShowMenuButtons)? ' ' : '';
if($nLanguage > 1) {
# if($ShowMenuButtons and $nLanguage > 1) {
if($MenuMode =~ /superfish/i) {
$App->ShowAMenu($pParams, 'SelectLanguage', $MenuMode, $FrameMode, $ProgramPath, $BaseOption, $pre, $post,
style => "background-color: #AAFFFF; color: #888888;");
}
elsif($MenuMode eq 'css') {
$App->PrintRawHTML("
EOT2
}
}
elsif($nLanguage > 1) {
if($MenuMode !~ /superfish/i) {
$App->PrintRawHTML($LanguageSelectFormString);
}
}
if($MenuMode =~ /superfish/i) {
$App->EndItem();
$App->BR();
$App->BR();
$App->BR();
# $App->H2('aa');
# $App->HR();
}
elsif($MenuMode eq 'css') {
# $App->EndMenu();
$App->PrintRawHTML($MainPost);
# $App->print("\n\n");
# $App->HR();
}
else {
# $App->HR();
$App->HR() if(defined $pParams->{IsChildFrame} and !$pParams->{IsChildFrame});
}
$App->HR();
$App->ClearFloat();
}
sub ShowSubMenu
{
my ($App, $pParams, $SubMenuFunc) = @_;
$SubMenuFunc = $pParams->{SubMenuFunction} if($SubMenuFunc eq '');
return 0 if($SubMenuFunc eq '');
$App->Execute2($pParams, $SubMenuFunc);
$App->ClearFloat();
}
sub ExtendMenu
{
my ($this, $App, $pParams) = @_;
$pParams->{ExtendedMenu} = 1;
$pParams->{Action} = $pParams->{PrevAction};
if($pParams->{IsChildFrame}) {
$pParams->{Action} = 'ShowMenu';
$pParams->{NoMenu} = 0;
$this->ShowMenu($pParams);
return;
}
elsif($pParams->{PrevAction} =~ /Update/i or $pParams->{PrevAction} =~ /^(ShrinkMenu|ExtendMenu|PreRegistration)$/) {
$pParams->{Action} = 'ShowStartPage';
}
$this->Execute($pParams);
return;
# $App->ShowMenu($pParams, $pParams->{EMail}, $pParams->{Password});
## $App->Execute($pParams);
my $act = $pParams->{Action};
if(defined &$act) {
$this->$act($App, $pParams);
}
elsif(defined &{"main::$act"}) {
no strict;
&{"main::$act"} ($App, $this, $pParams);
use strict;
}
}
sub ShrinkMenu
{
my ($this, $App, $pParams) = @_;
$pParams->{ExtendedMenu} = 0;
$pParams->{Action} = $pParams->{PrevAction};
if($pParams->{IsChildFrame}) {
$pParams->{Action} = 'ShowMenu';
$pParams->{NoMenu} = 0;
$this->ShowMenu($pParams);
return;
}
elsif($pParams->{PrevAction} =~ /Update/i or $pParams->{PrevAction} =~ /^(ShrinkMenu|ExtendMenu|PreRegistration)$/) {
$pParams->{Action} = 'ShowStartPage';
}
$this->Execute($pParams);
return;
# $App->ShowMenu($pParams, $pParams->{EMail}, $pParams->{Password});
## $App->Execute($pParams);
my $act = $pParams->{Action};
if(defined &$act) {
$this->$act($App, $pParams);
}
elsif(defined &{"main::$act"}) {
no strict;
&{"main::$act"} ($App, $this, $pParams);
use strict;
}
}
sub GetMenuString {
my ($App, $pModule, $pParams, $ProgramPath, $BaseOption, $pre, $post, $ForceGetString) = @_;
$ProgramPath = $pParams->{ScriptPath} if(!defined $ProgramPath);
my ($MainPre1, $MainPost1, $pre1, $post1) = $App->GetMainMenuKeys($pParams);
$pre = $pre1 if(!defined $pre);
$post = $post1 if(!defined $post);
my ($BaseOption1, $target1) = $App->GetCGIParameters({}, undef);
$BaseOption = $BaseOption1 if(!defined $BaseOption);
$ForceGetString = 0;
my $PrevMode = $App->GetOutputMode();
$App->SetOutputMode('WriteBuffer');
my $s = '';
if($pModule and $pModule->can('ShowMenu') and $pModule->ShowMenu($App, $pParams, $ProgramPath, $BaseOption, $pre, $post, $ForceGetString)) {
$s = $App->GetBuffer(1);
}
$App->SetOutputMode($PrevMode);
return $s;
}
sub GetSubMenuString {
my ($App, $pModule, $pParams, $ProgramPath, $BaseOption, $pre, $post, $ForceGetString) = @_;
$ProgramPath = $pParams->{ScriptPath} if(!defined $ProgramPath);
my ($MainPre1, $MainPost1, $pre1, $post1) = $App->GetSubMenuKeys($pParams);
$pre = $pre1 if(!defined $pre);
$post = $post1 if(!defined $post);
my ($BaseOption1, $target1) = $App->GetCGIParameters({}, undef);
$BaseOption = $BaseOption1 if(!defined $BaseOption);
$ForceGetString = 0;
my $PrevMode = $App->GetOutputMode();
$App->SetOutputMode('WriteBuffer');
my $s = '';
if($pModule and $pModule->can('ShowSubMenu') and $pModule->ShowSubMenu($App, $pParams, $ProgramPath, $BaseOption, $pre, $post, $ForceGetString)) {
$s = $App->GetBuffer(1);
}
$App->SetOutputMode($PrevMode);
return $s;
}
1;