#┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ #┃■C-BOARD Moyukuライブラリ #┠────────────────────────────────────── #┃複数掲示板管理関係の関数が含まれています。 #┃ #┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ package BOARD; ##use strict; my $write_dir_mod = 0707; #表記注意 #┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ #┃ 削除 #┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ sub delete { require './app/cmd/lgn.pl'; if ($CNF::syslog{'mode'}) { require './app/cmd/mst.pl'; &MASTER::syslog;} &LOGIN::check or &LOGIN::input; length($::FORM{'id'}) && &::error(\'不正なリクエストです。'); if ($::FORM{'flag'} && ($::FORM{'name'} =~ /^\w+$/)) { &COMMON::del_dir("$CNF::place{'data'}{'path'}/$::FORM{'name'}") or &::error(\('一部削除できませんでした。削除されなかった' . 'ものはFTPソフト等で削除してください。')); &BASE::location("$CNF::place{'this'}{'url'}?cmd=mnb"); } else { &BASE::head2('dlb'); print <<"__HTML__";
掲示板(ID:$::FORM{'name'})を削除します。
掲示板を削除するとこの掲示板のデータが全て失われます。
続行しますか?
(フォルダ構\成を変えた場合はデータを完全には消去できません)

  キャンセル
__HTML__ &BASE::foot2('dlb'); } } #┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ #┃ 管理画面表示 #┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ sub manage { require './app/cmd/mst.pl'; require './app/cmd/lgn.pl'; $CNF::syslog{'mode'} && &MASTER::syslog; &LOGIN::check or &LOGIN::input; length($::FORM{'id'}) && &::error(\'不正なリクエストです。'); my $def_brd = 'myk'; my $base = $::SYS{'path_brd'}; my $now_id = $::FORM{'id'}; opendir(DIR, "$base") or &error(\'データディレクトリを開けませんでした。'); my @board = ( grep(-e "$base/$_/config.cgi" && !/\W/, readdir(DIR))); close(DIR); my(%info, %total, $name); foreach $name (@board) { if ($name ne $def_brd) { untie %CNF::post; untie %CNF::mail; untie %CNF::tag; untie %CNF::upload; untie %CNF::mobile; untie %CNF::STY::psn; untie %CNF::STY::srn; untie %CNF::STY::rst; untie %CNF::STY::csn; untie %CNF::STY::hmn; untie %CNF::STY::ror; untie %CNF::STY::idx; #eval { do "$base/$name/config.cgi" }; $::FORM{'id'} = $name; &COMMANDER::read_cnf(2); if (length($@)) { $info{$name}{'last'} = '致命的エラー'; next;} } #情報取得 $info{$name} = &info; if ($name eq $def_brd) { $info{$name}{'total'}{'size'} += (-s "$::SYS{'path_brd'}/myk/config.cgi"); } else { $info{$name}{'total'}{'size'} += (-s "$base/$name/config.cgi"); } foreach (keys %{$info{$name}}) { $total{$_}{'size'} += $info{$name}{$_}{'size'}; $total{$_}{'number'} += $info{$name}{$_}{'number'}; } $info{$name}{'last'} = (-e "$base/$name/data/total.cgi") ? &COMMON::date('yy/m/d(dddd) hhh:nn', (stat("$base/$name/data/total.cgi"))[9]) : '〜未使用〜'; } #戻す $::FORM{'id'} = $now_id; untie %CNF::post; untie %CNF::mail; untie %CNF::tag; untie %CNF::upload; untie %CNF::mobile; untie %CNF::STY::psn; untie %CNF::STY::srn; untie %CNF::STY::rst; untie %CNF::STY::csn; untie %CNF::STY::hmn; untie %CNF::STY::ror; untie %CNF::STY::idx; #ここはdoで #eval { do "$::SYS{'path_brd'}/myk/config.cgi"; }; &COMMANDER::read_cnf(2); $total{'total'}{'size'} += -s "$base/$name"; foreach ( qq( app skn public tmp ) ) { $total{'total'}{'size'} += &COMMON::dir_size($_); } map($total{$_}{'size'} = &COMMON::size($total{$_}{'size'}), keys %total); foreach $name (keys %info) { map($info{$name}{$_}{'size'} = &COMMON::size($info{$name}{$_}{'size'}), keys %{$info{$name}}); } &BASE::head2('mnb'); print <<"__HTML__";
掲示板管理

 ■掲示板数:@{[scalar(@board)]}  ■総サイズ: $total{'total'}{'size'}  ■総記事数:$total{'message'}{'number'}  ■総記事サイズ: $total{'message'}{'size'}
   ■総添付ファイル数: $total{'file'}{'number'}  ■総添付ファイルサイズ: $total{'file'}{'size'}
   ■総過去ログ数: $total{'log'}{'number'}  ■総過去ログサイズ: $total{'log'}{'size'}

__HTML__ foreach $name (@board) { my $id = ($name eq $def_brd) ? '' : $name; my $callname = ($name eq $def_brd) ? "デフォルト($name)" : $name; print <<"__HTML__"; __HTML__ } print <<"__HTML__";
ID 最終投稿 総サイズ 記事データ 添付ファイル 過去ログ 管 理
$callname $info{$name}{'last'} $info{$name}{'total'}{'size'} $info{$name}{'message'}{'size'} / $info{$name}{'message'}{'number'} @{[defined $info{$name}{'file'}{'size'} ? "$info{$name}{'file'}{'size'} / " . "$info{$name}{'file'}{'number'}" : '---']} @{[defined $info{$name}{'log'}{'size'} ? "$info{$name}{'log'}{'size'} / " . "$info{$name}{'log'}{'number'}" : '---']} MENU @{[($name eq '【デフォルト】') ? '-----' : qq|削 除|]}

 ■掲示板作成  ID:   設定継承  
__HTML__ &BASE::foot2('mnb'); } #┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ #┃ 掲示板作成 #┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ sub make { require './app/cmd/sty.pl'; require './app/cmd/lgn.pl'; if ($CNF::syslog{'mode'}) { require './app/cmd/mst.pl'; &MASTER::syslog;} &LOGIN::check or &LOGIN::input; length($::FORM{'id'}) && &::error(\'不正なリクエストです。'); ($::FORM{'name'} =~ /^\w+$/) or &::error(\'IDが不正です。半角英数字で指定して下さい。'); (length($::FORM{'name'}) > 15) && &::error(\'IDが長すぎます。半角15文字以内にして下さい。'); my $base = "$::SYS{'path_brd'}/$::FORM{'name'}"; (-e "$base") && &::error(\('既に同一のIDの掲示板が存在している可能性があります。')); my $config; if ($::FORM{'suc'} eq '*') { $config = "$::SYS{'path_brd'}/myk/config.cgi";} elsif (length($::FORM{'suc'})) { if (-e "$::SYS{'path_brd'}/$::FORM{'suc'}/config.cgi") { $config = "$::SYS{'path_brd'}/$::FORM{'suc'}/config.cgi"; } else { &::error(\('継承元の設定ファイルが存在しません。')); } } else { $config = './app/default/config.cgi';} #作成開始 umask 000; if (!mkdir("$base", $write_dir_mod) || !mkdir("$base/data", $write_dir_mod) || !mkdir("$base/upload", $write_dir_mod) || !mkdir("$base/image", $write_dir_mod) || !mkdir("$base/past", $write_dir_mod) || !mkdir("$base/cache", $write_dir_mod) || !open(CNF, ">$base/config.cgi") || !open(CNF_, "<$config") || !open(CSS, ">$base/data/c-board.css") || !open(CSS_, "<./app/default/c-board.css")) { rmdir("$base/data"); rmdir("$base/upload"); rmdir("$base/image"); rmdir("$base/past"); rmdir("$base/cache"); close(CNF); close(CSS); close(CNF_); close(CSS_); unlink("$base/config.cgi", "$base/data/c-board.css"); rmdir("$base"); &::error(\'作成できませんでした。'); } my $buf; while (read(CNF_, $buf, 16384)) { print CNF $buf;} print CNF <<"__CONFIG__"; #'━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━' package CNF; %cookie = ( 'expire' => '30', 'name' => 'Cboard_$::FORM{'name'}', ); %place = ( cache => { path => '$base/cache', }, css => { path => '$base/data', url => '$base/data', }, data => { path => '$base/data', }, digit => { url => '$base/image', }, file => { path => '$base/upload', url => '$base/upload', }, gzip => { path => '$CNF::place{'gzip'}{'path'}', }, image => { path => '$base/image', url => '$base/image', }, log => { path => '$base/past', url => '$base/past', }, sendmail => { path => '$CNF::place{'sendmail'}{'path'}', }, smtp => { path => '$CNF::place{'smtp'}{'path'}', }, this => { path => '$CNF::place{'this'}{'path'}', url => '$CNF::place{'this'}{'url'}', }, ); 1; __CONFIG__ close(CNF); close(CNF_); while (read(CSS_, $buf, 16384)) { print CSS $buf;} close(CSS); close(CSS_); if ( ! open( IDX, ">$base/data/index.htm" ) ) { &::error(\'データディレクトリのindex.htmが作成できませんでした。'); close(IDX); } untie %CNF::post; untie %CNF::mail; untie %CNF::tag; untie %CNF::upload; untie %CNF::mobile; untie %CNF::STY::psn; untie %CNF::STY::srn; untie %CNF::STY::rst; untie %CNF::STY::csn; untie %CNF::STY::hmn; untie %CNF::STY::ror; untie %CNF::STY::idx; eval { require "$base/config.cgi" }; if (length($@)) { rmdir("$base/data"); rmdir("$base/upload"); rmdir("$base/image"); rmdir("$base/past"); unlink("$base/config.cgi", "$base/data/c-board.css"); rmdir("$base"); &::error(\'作成できませんでした。'); } foreach (@{$::FLAG{'lock'}{'mode'}}) { open(LCK, ">$base/data/$_\_lock") or &::error(\'ロック用ファイルを作成できませんでした。'); } untie %CNF::post; untie %CNF::mail; untie %CNF::tag; untie %CNF::upload; untie %CNF::mobile; untie %CNF::STY::psn; untie %CNF::STY::srn; untie %CNF::STY::rst; untie %CNF::STY::csn; untie %CNF::STY::hmn; untie %CNF::STY::ror; untie %CNF::STY::idx; # ここはdoで #eval { do "$::SYS{'path_brd'}/myk/config.cgi"; }; &COMMANDER::read_cnf(2); foreach (0 .. 9) { open(IMG_, "<$CNF::place{'image'}{'path'}/$_.gif") && open(IMG, ">$base/image/$_.gif") or next; binmode(IMG_); binmode(IMG); while (read(IMG_, $buf, 16384)) { print IMG $buf;} close(IMG_); close(IMG); } #表示 &BASE::head2('mkb'); print <<"__HTML__";
掲示板(ID:$::FORM{'name'})を作成しました。$CNF::place{'image'}{'path'}
URLは「 $CNF::place{'this'}{'url'}?id=$::FORM{'name'} 」になります。
設定は継承してない限り、デフォルト(パスワード:無し)のままなので、早めに セットアップセットアップ(スタイル) を実行して下さい。

※「セットアップ」⇒「セットアップ(スタイル)」の順で2つとも実行しないと正常に動作しません。

__HTML__ &BASE::foot2('mkb'); } #┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ #┃ 掲示板情報 #┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ sub info { require './app/lib/file/msg.pl'; require './app/lib/file/fle.pl'; require './app/lib/file/ttl.pl'; my %info; my $o_message = new FILE::MESSAGE($CNF::place{'data'}{'path'}); $info{'message'}{'size'} = $o_message->size(); my $o_total = new FILE::TOTAL($CNF::place{'data'}{'path'}); (my $r_total = $o_total->read) or &::error(\'記事データを読み込めませんでした'); $info{'message'}{'number'} = ${$r_total}{'message'}; my $o_file = new FILE::FILE($CNF::place{'data'}{'path'}); ($info{'file'} = $o_file->info()) or &::error(\'添付ファイル情報を読み込めませんでした。'); $info{'total'}{'size'} += &COMMON::dir_size($CNF::place{'image'}{'path'}); $info{'total'}{'size'} += -s $CNF::place{'css'}{'url'}; $info{'total'}{'size'} += $info{'message'}{'size'} + $info{'file'}{'size'}; if ($CNF::log{'mode'}) { require './app/cmd/log.pl'; my $log_info = &LOG::info; $info{'log'}{'size'} = $$log_info{'size'}; $info{'log'}{'number'} = $$log_info{'tre'}{'no'}; } $info{'message'}{'percent'} = sprintf('%1.1f', $info{'message'}{'number'} * 100 / ($CNF::post{'total'} || 1)); $info{'file'}{'percent'} = sprintf('%1.1f', $info{'file'}{'size'} * 100 / ($CNF::upload{'size'}{'total'} || 1)); return(\%info); } 1;