#!/usr/bin/perl
##################################################
# Topics CGI(SSIバージョン) Rev.2.0.0.1
# Created by CATWALK(伊藤智子)
# Created on 2002年4月30日
##################################################
use CGI qw/:standard/;
use CGI::Carp qw(fatalsToBrowser);
##################################################
# 初期設定ここから
##################################################
require 'shinsengumi.pl';
require 'jcode.pl';
#戻るリンク
$BackURL = '../index.shtml';
#このCGIのURL
$CgiURL = './infoed.cgi';
#デザインファイル
$CSSFile = '../css/font_win.css';
#データファイル
$DataFile = '../data/info.dat';
#パスワードファイル
$PasswdFile = '../data/passwd.cgi';
#画像のURL
$ImgURL = '../img/';
#CGIのタイトル
$CgiTitle = '新着情報CGI';
#最大ログ保存数
$MaxLog = 50;
#管理画面最大表示数
$MaxAdminShow = 3;
#ロックファイル
$LockFile = '../var/lock.lck';
#ロックフラグ
#1の時、シンボリックリンクでロック
#2の時、$LockFileに1(解除は0)を書き込む
#3の時、flockを使ってロック
#4の時、何もしない
#1〜4以外のときは1と同じ
$lockflag = 1;
#Newアイコン
$NewIcon = $ImgURL . 'icn_newer.gif';
#新しい記事アイコン
$new_icon = <<"EOL";
"$NewIcon" width="90" height="30" alt="新しい記事へ" border="0"
EOL
#Oldアイコン
$OldIcon = $ImgURL . 'icn_older.gif';
#古い記事アイコン
$old_icon = <<"EOL";
"$OldIcon" width="90" height="30" alt="古い記事へ" border="0"
EOL
#HTMLヘッダデザイン
$HTML_HEAD = <<"EOL";
$CgiTitle
EOL
##################################################
# 初期設定ここまで
##################################################
$CopyRight = <<"EOL";
TopicsCGIWeb新撰組
EOL
sub bynumber { $b <=> $a; } # 並び替えルーチン
if(param('action')){
$action = param('action');
}else{
$action = 'show_login';
}
&LoginCheck;
if($action eq 'show_login'){
#############################
# 管理ログイン画面
#############################
&ShowLogin;
}elsif($action eq 'show_data'){
#############################
# 過去のデータ表示
#############################
&ShowData;
}elsif($action eq 'show_new_form'){
#############################
# 新規登録フォーム表示
#############################
&ShowNewForm;
}elsif($action eq 'check_new_write'){
#############################
# 新規書き込み確認
#############################
&CheckNewWrite;
}elsif($action eq 'go_write'){
#############################
# 新規書き込み
#############################
&GoWrite;
}elsif($action eq 'show_change_form'){
#############################
# 編集フォーム表示
#############################
&ShowChangeForm;
}elsif($action eq 'check_change_data'){
#############################
# 編集データ確認
#############################
&CheckChangeData;
}elsif($action eq 'go_change_data'){
#############################
# データ編集実行
#############################
&GoChangeData;
}elsif($action eq 'check_delete'){
#############################
# データ削除確認
#############################
&CheckDelete;
}elsif($action eq 'go_delete'){
#############################
# データ削除実行
#############################
&GoDelete;
}elsif($action eq 'change_passwd'){
##############################
# 管理パスワード変更フォーム
##############################
&ChangePasswd;
}elsif($action eq 'go_change_passwd'){
##############################
# 管理パスワード変更実行
##############################
&GoChangePasswd;
}else{
&error(999,'予期せぬエラー');
}
exit;
#############################
# ログイン画面表示
#############################
sub ShowLogin{
$HTML = <<"EOL";
$HTML_HEAD
$CgiTitle
管理モード
$CopyRight
EOL
&jcode::euc2sjis(*HTML);
print "Content-type: text/html; charset=Shift_JIS\n\n";
print $HTML;
}
#############################
# 過去のデータ表示
#############################
sub ShowData{
if (param('start')){
$start = param('start');
}else{
$start = 0;
}
open(IN,"$DataFile") || &error(100,"データファイルが開けません");
while(){
$line = $_;
chop($line);
$sec = (split(/Enc_Sep_Code/,$line))[3];
push @allsec,$sec;
$ALLLINES{$sec} = $line;
}
close(IN);
@allsec = sort bynumber @allsec;
foreach $sec(@allsec){
push @alllines,$ALLLINES{$sec};
}
#HTMLその1ヘッダ部分
$HTML_HEADER=<<"EOL";
$HTML_HEAD
$CgiTitle
管理モード
EOL
$newnum = $start - $MaxAdminShow;
$oldnum = $start + $MaxAdminShow;
if($newnum >= 0){
$HTML_HEADER .= <<"EOL";
 |
EOL
}else{
$HTML_HEADER .= <<"EOL";
|
EOL
}
if($oldnum <= $#alllines ){
$HTML_HEADER .= <<"EOL";
 |
EOL
}else{
$HTML_HEADER .= <<"EOL";
|
EOL
}
$HTML_HEADER .= <<"EOL";
EOL
$HTML_NAVI .= <<"EOL";
EOL
if($newnum >= 0){
$HTML_NAVI .= <<"EOL";
 |
EOL
}else{
$HTML_NAVI .= <<"EOL";
|
EOL
}
if($oldnum <= $#alllines ){
$HTML_NAVI .= <<"EOL";
 |
EOL
}else{
$HTML_NAVI .= <<"EOL";
|
EOL
}
$HTML_NAVI .= <<"EOL";
EOL
$end = $start + $MaxAdminShow;
if ($end > $#alllines){
$end = $#alllines + 1;
}
for($i=$start;$i<$end;$i++){
($datanum,$name,$text,$sec) = split(/Enc_Sep_Code/,$alllines[$i]);
$date = &GetToday($sec);
$admin_action=<<"EOL";
EOL
#HTMLその2データ表示部分
$HTML_BODY .=<<"EOL";
|
$date
|
|
担当者:$name
|
|
$text
$admin_action
|
|
EOL
}
$HTML_BODY =~ s/
$//;
#HTMLその3フッタ表示部分
$HTML_FOOT=<<"EOL";
$CopyRight