第 6 章 システムの実現方法
6.5 追加または編集したプログラムファイル
6.5.12 sessions.php
144
145 (b) 中間部分 $dinfo = usergetdate($sdate);
if (isset($formdata->sdays) &&
array_key_exists($wdaydesc[$dinfo['wday']], $formdata->sdays)) { $sess = new stdClass();
$sess->sessdate = usergetmidnight($sdate) + $starttime;
$sess->duration = $duration;
$sess->descriptionitemid = $formdata->sdescription['itemid'];
$sess->description = $formdata->sdescription['text'];
$sess->descriptionformat =
$formdata->sdescription['format'];
$sess->timemodified = $now;
if (isset($formdata->studentscanmark)) { // Students will be able to mark their own attendance.
$sess->studentscanmark = 1;
}
if (isset($formdata->studentsmarkmyseat)) {//ここ行を追加 $sess->studentsmarkmyseat = 1; //この行を追加 } //ここ行を追加
fill_groupid($formdata, $sessions, $sess);
}
$sdate += DAYSECS;
} else {
$startweek += WEEKSECS * $formdata->period;
$sdate = $startweek;
} } } else {
$sess = new stdClass();
$sess->sessdate = $formdata->sessiondate;
$sess->duration = $duration;
$sess->descriptionitemid = $formdata->sdescription['itemid'];
$sess->description = $formdata->sdescription['text'];
$sess->descriptionformat = $formdata->sdescription['format'];
$sess->timemodified = $now;
146
construct_sessions_data_for_add メソッドはsessions.phpの中で定義されている。ま た、呼び出される箇所もsessions.php内にしか存在しない。sessions.phpは複数の役割を 持つ。session.phpファイルの56行目付近のswitchで「セッションを追加する機能」、「セ ッションを変更する機能」、「セッションを削除する(manage.phpの画面の操作フィール ドの削除ボタンを押してセッションを削除する場合の)機能」「セッションを削除する
(manage.phpの画面のセレクトボックスから削除を選んでセッションを削除する場合 の)機能」、「セッションの継続時間を変更する。」の5つの機能を使い分けている。
construct_sessions_data_for_add メソッドはそれら複数のsessions.phpの役割の中でも
「セッションを追加する」機能を実現するために存在する。
sessions.phpの「セッションを追加する機能」の画面はフォーム画面になっておりセッ
ションを作成するのに幾つかのオプションがある。画面からのフォームデータは再度
sessions.phpに送信されてくる。construct_sessions_data_for_add メソッドはその送信さ
れたフォームデータの中からセッションに関するデータを取り出しまとめてから呼び出し 元に返すメソッドである。そのため、sessions.phpでconstruct_sessions_data_for_add メ ソッドを呼びだす際に渡す引数はフォームデータがまるごと入っている変数$formdataと なっている。
また、construct_sessions_data_for_add メソッドからsessions.phpに返された値は
attendanceクラスのadd_sessionsメソッドへ渡される。add_sessionsメソッドでデータベ
ースのattendance_sessionsテーブルへ追加するセッションの分だけレコードを挿入する。
この際、改造前にはなかったstudentsmarkmyseatのフィールドにもデータを入れるよう にするために、construct_sessions_data_for_add メソッドへ変更を行った。追加した行は
if (isset($formdata->studentscanmark)) { // Students will be able to mark their own attendance.
$sess->studentscanmark = 1;
}
if (isset($formdata->studentsmarkmyseat)) { //この行を追加 $sess->studentsmarkmyseat = 1; //この行を追加
} //この行を追加
fill_groupid($formdata, $sessions, $sess);
}
return $sessions;
}
(c) 後半部分
図 6-64 construct_sessions_data_for_addメソッド
147
3行ずつ2箇所に追加するので6行となる。図 6-64のメソッドの7行目付近のif文では 変数$formdata->addmultipy(「複数セッションを作成する」というチェックボックスが選 ばれてセッションを作成するとここに値が入る)によって条件分岐されているが、これは
「複数セッションを作成するかどうか」というだけで両方の分岐にstudentsmarkmyseatの フィールドにもデータを入れる文を追加してある。よってこの2箇所には同じ文が追加し てある。
追加した3行の文ではif文によって変数$formdata->studentsmarkmyseatにNULL以外 の値が入っているかどうかで条件分岐させ、NULL以外の値が入っていた場合は変数
$sess->studentsmarkmyseatへ1をセットする。変数$sessを直接sessions.phpへ返すわけ ではないが、図 6-64のメソッドが返す変数$sessionsは変数$sessを元に作成されてい る。
148