メンバー専用


かばさんのCGI 再配布について

かばさんの「かばの遊べるCGI」というページが消えてしまいました。

かばさんのCGI利用規約(抜粋)

◆当サイトのCGIスクリプトは、アダルト・サイト、違法サイト
公序良俗に反するサイト以外でしたら、どなたでも自由に
使っていただいてかまいませんが、著作権は放棄していません。

◆当サイトのCGIスクリプトは改造・再配布とも自由です。

◆当サイトのスクリプトを使ったことによって生じたいかなる
損害・不都合にも、作者は一切責任を取れません。

◆当サイトのCGIスクリプトとこの「CGI利用規約」は
予告なく変更することがあります。



かばさんのCGI F.A.Q(抜粋)

Q.解凍したファイルが文字化けして読めません。(重要)

A. このサイトで配布しているスクリプトはimode用のものを除いて
EUCで書いてあります。主な日本語コードには、JIS、Shift-JIS、EUC
がありますが、この中でPerlと一番相性が良くトラブルを起こさないのが
EUCだからです。Windowsに標準で付いているメモ帳やワードパットは
Shift-JISしか読めませんので、ここのCGIは文字化けして読めません。
WindowsでCGIを編集するときは、「秀丸」や「K2Editor」のようなEUCも
扱えるテキスト・エディタを利用してください。

秀丸 シェアウエア \4,000
http://hide.maruo.co.jp/

K2Editor フリーソフト
http://www.forest.impress.co.jp/library/k2editor.html

私はノートパットで開いたものを、エディタで編集しなおしても
不具合が発生しました。

Q.アポイントメントでメールが送信されません。

A. 考えられる原因には、@sendmailのパスが合っていない、
Ankfのパスが合っていない、B$mailtoや$infoMailが
コメントアウトされている、Cメールアドレスをタイプミスしている、
のようなことが考えられます。
@とAはサーバー管理者によく確認してください。
sendmail、nkfともUNIX系のサーバーでは一般的ですが、
Windowsのサーバーではサポートされていないことがあります。
Bは、sendmailとnkfがサポートされていない場合を想定して、
初期状態ではコメントアウトしています。必要な場合には#を削除してください。
Cは言うまでもないですが、メールアドレスは間違えやすい
ものですので一応確認してみてください。
(ドットとカンマとか見つけにくいミスが結構あります)


フリーでとてもよくできていると思いますので再配布します。
ただし全て自己責任でお願いします!
当方は、再配布以外一切サポートも責任も取りませんので
確認のうえダウンロードしてください。


アポイントメント      サンプル (配布とは内容が異なります)

このCGIはちょこっと改造すれば、医療関係以外でも美容院、各種教室、スポーツジム等
時間予約の必要なホームページに利用できます。

以下全てかばさんの説明のコピーです。かばさんごめんなさい!

【公開用ページ(appmedic.cgi)】

  • 再来月の末までの予約を受け付けます。
  • 予約の内容は表示しません。
  • キャンセルをクリックすると、その予約をキャンセルできます。
  • 先約がある時間は予約できません。(上書きはできません)
  • キャンセルする場合は、名前かキーが一致しないとできません。
  • フォームに入力した情報はクッキーで保存され、次回からは入力する必要がありません。
  • CGI起動時にデータファイルをチェックして、保存期間が切れた情報は自動的に削除します。
  • 日付別をクリックすると、その月の日付毎の予約状況一覧を表示します。
  • 名前とメール以外は、設定によりフォームから削除できます。
  • 名前以外は、設定により任意入力扱いにできます。
  • メールアドレスを指定しておくと予約が入ったことをメールで通知できます。
  • 定休日を、曜日・祭日別に設定できます。AMのみ、PMのみ、1日中の3種類が選べます。

【管理用ページ(appment.cgi)】

  • 管理用ページに入るにはパスワードが要ります。
  • 一度パスワードの認証がうまくいくと、セッションが終了するまでパスワードを入れ直す必要はありません。(クッキーを使って制御しています)
  • 予約を強制的にキャンセルし、相手にキャンセルを通知するメールを送信できます。
  • 定休日以外の臨時休診を設定できます。休診にした日に既に予約者がいてメールアドレスが指定されている場合、休診の旨を通知するメールを送信します。
  • 日付別をクリックすると、その月の日付毎の予約状況一覧を表示します。

【iモード用ページ(appimode.cgi)】

  • お試し版です。動かないかも知れません。その場合は情報の提供をお願いします。
  • 起動すると日にちを聞きます。
  • 日にちを指定すると、その日の予約状況を表示します。
  • 指定した時間帯に予約があるときはキャンセル用フォームを表示し、予約がないときは予約用フォームを表示します。
  • 予約した内容は、PC版と同じデータベースに記録されます。

(1) ダウンロード

まず、下のファイルをダウンロードして、解凍します。解凍すると、"appmedic.cgi"、"appment.cgi"、"appimode.cgi"、"include.pl"、"kabalib.pl"の4つのテキスト・ファイルと、"date.gif"、"key.gif"、"cancel.gif"の3つのGIFファイルができます。

※"appmedic.cgi"は一般公開用CGI、"appimode.cgi"はiモード向け一般公開用CGIで、"appment.cgi"は管理者用CGIです。"include.pl"は両方のCGI共通の参照ファイルです。

※kabalib.plはVer.1.20以降を使ってください。

ファイルをダウンロード

cgi-lib.plを入手します。

http://cgi-lib.berkeley.edu/

jcode.plを入手します。

ftp://ftp.iij.ad.jp/pub/IIJ/dist/utashiro/perl/


(2) カスタマイズ

"appmedic.cgi"、"appment.cgi"、"include.pl"をテキスト・エディタで編集します。
※全てEUCで書いてありますので、EUCが扱えるエディタでないと読めません。

最低限、次の個所を変更する必要があります。

#!/usr/local/bin/perl
perlへのパス("appmedic.cgi"と"appment.cgi")
$htmpath = 'appoint.html';
[もどる]ボタンでジャンプするパス。("include.pl")
use lib '../lib';
"include.pl"から見て、cgi-lib.pl、jcode.pl、kabalib.plがあるパス。("include.pl")
@cellsAM = ('9:00','9:30','10:00', ... );
@cellsPM = ('16:00', '16:20', '16:40', ... );
予約できる時間帯。昼休みをはさんで午前(@cellsAM)と午後(@cellsPM)を分けて書いてください。("include.pl")
$accKey = '0123';
管理者用ページに入るためのパスワード("include.pl")。絶対変更してください。

(3) アップロード&設定

ftpソフトなどでサーバーのCGI用ディレクトリにアップロードしましょう。仮にcgi-bin/にアップロードしたら、次のようにディレクトリとパーミッションを設定します。
※kabalib.plはappoint/の下でもOKです。
※jcode.plとcgi-lib.plはCGIスクリプトではしょっちゅう参照される定番なので、lib/ディレクトリとして独立させておくと使いまわせて便利です。

cgi-bin/
    ├-- lib/
    |    ├-- jcode.pl
    |    ├-- cgi-lib.pl
    |    └-- kabalib.pl
    └-- appoint (755)/
          ├-- data (777)/
          ├-- appmedic.cgi (755)
          ├-- appment.cgi (755)
          ├-- appimode.cgi (755)
          ├-- include.pl
          └-- *.gif

(4) テスト

設定が終わったら、ブラウザからCGIを設置したURLを開いてみましょう。上の例のようなディレクトリ構成なら、次のようなURLになります。

http://xxx.yyy.zzz/cgi-bin/appoint/appmedic.cgi


カスタマイズ

"include.pl"の「設定、適当に変更してください」〜「設定はここまで」の間を適当に変更すると、色々カスタマイズできます。

(1)メール通知機能を設定しよう

次の部分を設定すると、予約が入ったことを管理人にメールで通知したり、管理人が予約をキャンセルした時に先方にお断りメールを送信したりできます。
$mailtoに管理人のメールアドレスが指定されていれば、公開ページから予約が入った時に管理人にメールで通知します。$infoMailが1なら、管理人から予約をお断りしたときに、患者さん宛てにメールを送信します。管理ページの理由欄に書いた内容もメールに反映します。

※$mailtoと$infoMailは初期状態ではコメントアウトされています。利用する場合には先頭の'#'を削除してください。

#メール送信
$mailer = '/usr/lib/sendmail'; #sendmailへのパス
$nkf = '/usr/local/bin/nkf';   #nkfへのパス
$mailto = 'aaa@bbb.ccc';       #メール送信先(複数の時はカンマで区切る)
$infoMail = 1;                 #1なら管理人がキャンセル/休診した時メールで連絡(不要なら0)

(2)定休日を指定しよう

曜日と祭日に対して、1日休診、AM休診、PM休診、1日診察の4種類を設定できます。1日休診にした日はカレンダーにリンクが付きません。また、土曜または日曜を1日休診にすると、予約状況表にその曜日の列が出なくなります。

#定休日と半ドン(1日休診=0、AMのみ診察=1、1日診察=2, PMのみ診察=3)
#  土日だけは1日休診の場合、列そのものを表示しません。
$enw[0] = 0;          #日曜日
$enw[1] = 2;          #月曜日
$enw[2] = 2;          #火曜日
$enw[3] = 2;          #水曜日
$enw[4] = 1;          #木曜日
$enw[5] = 2;          #金曜日
$enw[6] = 1;          #土曜日
$enHoliday = 0;       #祝日

(3)フォームの項目を変更しよう

入力フォームの項目を非表示にしたり、任意入力と必須入力を切り替えたりできます。

#フォームの項目(不要=0、必須項目=1、任意入力=それ以外)
#    メールだけは0にすると、フォームのカッコがつかなくなります。
$enSex = 2;           #性別
$enAge = 2;           #年齢
$enTel = 1;           #電話番号
$enMail = 1;          #メールアドレス(0にはしないで)
$enCard = 2;          #診察券番号
$enSym = 2;           #症状
$enCon = 2;           #相談事項
$enKey = 2;           #削除キー

名前だけは非表示にしたり、任意入力扱いにはできません。メールアドレスは、非表示にすると、フォームの見た目がおかしくなりますので、0にはしないでください。

(4)表の幅を変えよう

表の幅を変更できます。$twidthにピクセル数で指定してください。

#予約状況表のセル幅(ピクセル)
$twidth = 70;

(5)アイコンを変えよう

一発キャンセル、日付別一覧、キーのアイコンは変更できます。サイトのイメージに合った画像に替えてみるのも楽しいと思います。ただし、小さいものにしないと見た目がおかしくなります。

#画像ファイル
$dateImg = "date.gif";      #日付別一覧を開くためのボタン
$keyImg = "key.gif";        #キーがついた予約を示すアイコン
$cancelImg = "cancel.gif";  #一発キャンセル・ボタン

(6)色を変えよう

下にある色は好きなように変更できます。変更できるのは、表、セル、ブラウザの背景色ばかりで、文字色はコントロールしていません(警告メッセージだけは例外)。文字はブラウザのデフォルト色である黒や青になるはずなので、背景色は淡い色にしておくのが無難です。

#色指定
$calbg    = '#FFFFFF';      #カレンダー部の背景色(白)
$tblbg    = '#F5F5F5';      #予約状況フレームの背景色(ホワイトスモーク)
$tblbgt   = '#FFFFFF';      #予約状況表の背景色(白)
$listbg   = '#CCFFCC';      #一覧表示画面の背景色(薄いグリーン)
$msgbg    = '#FFFFE0';      #メッセージ画面の背景色(ライトイエロー)
$tblhead  = '#99CC99';      #予約状況表のヘッダーの色(グリーン)
$tbltime  = '#CCFFCC';      #予約状況表の時間セルの色(薄いグリーン)
$sun      = '#FFCCFF';      #日曜日と休日の色(ピンク)
$sat      = '#CCFFFF';      #土曜日の色(水色)
$hei      = '#FFFFF0';      #平日の色(ベージュ)
$off      = '#FFF0F5';      #受け付けしない時間帯の色(薄いラベンダー)
$on       = '#FAFAD2';      #予約済みの色(淡い茶色)
$alert    = '#FF0000';      #警告メッセージ(赤)
$schbg    = '#FFFFFF';      #予約状況表の背景色(白)

(7)過去ログを残そう

$remainを1にしておくと、過去ログを残すことができます。$remLimitは記録を残しておく日数で、0の場合は記録を一切消しません。サーバー側にファイルがあふれないように適当な期限を付けておくことを推奨します。$cookieDaysは利用者がフォームに入力した情報をブラウザに記憶させておく日数です。

#記録保持
$remain = 1;          #過去の記録を残すときは1、要らないときは0。
$remLimit = 100;      #記録を残す日数。0なら全然消さない。
$cookieDays = 100;    #クッキーの保持期間