第 6 章 システムの実現方法
6.5 追加または編集したプログラムファイル
6.5.4 renderer.php
91
92
上のプログラムはそのヘッダーに何の文字を入れるか指定する部分である。本システム には座席表確認機能と空席記録機能を同じページで行うようになっており、そのページへ のリンクをmanage.phpのテーブルの中でも「説明」フィールドと操作フィールドの中に 配置するためにヘッダーに「’’」で空きを作った。
図 6-29のプログラムの5行目まででmanage.phpのテーブルの中に座席表確認機能と 空席機能のページへのリンクを配置している。
また、manage.phpのテーブルには座席を用いて出欠確認をするセッションと座席を 用いて出欠確認をしないセッションが混在することもあるため、図 6-29のプログラムの if文でリンクを配置するかしないか条件分岐させている。
図 6-29のプログラムの6行目では、manage.phpのテーブルの中の操作欄にボタン群を 配置している。
このリンクとボタン群の配置はrender_sess_manage_tableメソッドの中で行っている が、リンクとボタン群の作成はrender_sess_manage_table メソッドの中で呼び出される construct_date_time_actionsメソッドで行う。
if(!empty($sess->studentsmarkmyseat)){
$table->data[$sess->id][] = $dta[seattable];
}else{
$table->data[$sess->id][] = '';
}
$table->data[$sess->id][] = $dta['actions'];
図 6-29 render_sess_manage_tableの追加した部分2
93
6.5.4.2 construct_date_time_actionsメソッドへの追加
manage.phpのテーブルの中の「日付」「時間」「操作」は改造前のattendanceモジュー
ルでもconstruct_date_time_actionsメソッド内で作成されていたが、改造後はそれら3つ
に加えて「座席表」を表示するリンクの作成もこのメソッド内で行う。
変数$urlには座席表確認機能と空席機能のページのurlが格納される。その際に用いら
れるのはattendance_manage_dataクラスのurl_showseatメソッドである。
変数$seattableには上のurlのリンク付きの「座席表」という文字列が格納される。
操作欄のボタン群へ、教室データを作成する画面へ移動するボタンを追加するプログラ ムである。
座席を用いて出欠確認をするセッションと座席を用いて出欠確認をしないセッションが 混在することもあるため、図 6-31のプログラムのif文でボタンを作成するかしないか条 件分岐させている。
図 6-31のプログラムでは変数$sess->studentsmarkmyseatに値が入っていればif文の 中のプログラムが動作し、教室データ作成画面への移動するボタンが作成される。
construct_date_time_actionsメソッドで作成されたテーブルの部品は
render_sess_manage_tableメソッドに返される。改造前のattendanceモジュールと違い、
座席表確認機能のページへのリンクもrender_sess_manage_tableメソッドへ返す必要があ るので、の図 6-32return文に変数$seattableも返すように付け加えている。
$url = $sessdata->url_showseat($sess->id, $sess->groupid);
$seattable = html_writer::link($url, "座席表");
if(!empty($sess->studentsmarkmyseat)){
$url = $sessdata->url_decideroom($sess->id, $sess->groupid);
$title = 教室を設定;
$actions .= $this->output->action_icon($url, new pix_icon('t/more', $title));
}
return array('date' => $date, 'time' => $time, 'actions' => $actions, 'seattable' => $seattable);
図 6-30 construct_date_time_actionsメソッドの追加した部分
図 6-31 construct_date_time_actionsメソッドの追加した部分2
図 6-32 construct_date_time_actionsメソッドの追加した部分3
94
6.5.4.3 render_attendance_decideroom_dataメソッドを追加
教室データ作成画面を作成する際に最初に動くメソッドである。図 6-33のメソッドか らは2つのメソッドを呼び出している。1つはrender_attendance_decideroom_controlsメ ソッドで、render_attendance_decideroom_tableメソッドである。
render_attendance_decideroom_controlsメソッドからは返り値として教室データ作成画
面の上部にあるセッションの年月日時刻を表す部分と作成する教室データが何行何列なの かを指定するセレクトボックスの部分を構成するパーツが返ってくる。
render_attendance_decideroom_tableメソッドからは返り値として、上記のセレクトボ
ックスで選択した行数列数のチェックボックスの表が返ってくる。
9行目ではチェックボックスの表の下に中央揃えの「教室を保存する」という送信ボタ ンを追加し、変数$tableに格納している。
変数$tableに入ったチェックボックスの表と送信ボタンはMoodleのhtml_writer(14)
によって作成されている。それぞれhtmlのinputタグのtype属性がcheckboxとsubmit のものである。
10行目では、変数$tableに入ったチェックボックスの表と送信ボタンを一つのフォーム タグの中に挟み込んだものを再度変数$tableに格納している。
protected function render_attendance_decideroom_data(attendance_decideroom_da ta $roomdata) {
$controls = $this->render_attendance_decideroom_controls($roomdata);
$table = $this->render_attendance_decideroom_table($roomdata);
$table .= html_writer::input_hidden_params($roomdata->url(array('sesskey' =>
sesskey(), 'page' => $roomdata->pageparams->page)));
$params = array(
'type' => 'submit', 'name' => 'room',
'value' => '教室を保存する');
$table .= html_writer::tag('center', html_writer::empty_tag('input', $params));
$table = html_writer::tag('form', $table, array('method' => 'post', 'action' =>
$roomdata->url_path()));
return $controls.$table;
}
図 6-33 render_attendance_decideroom_dataメソッド
95
6.5.4.4 render_attendance_decideroom_controlsメソッドを追加
render_attendance_decideroom_dataメソッドに呼び出され、教室データ作成画面の上部
にあるセッションの年月日時刻を表す部分と作成する教室データが何行何列なのかを指定 するセレクトボックスの部分を構成するパーツを返す。
図 6-34のメソッドの中で、construct_decideroom_session_infoメソッドと
construct_decideroom_controlsメソッドの2つのメソッドを呼び出している。
construct_decideroom_session_infoメソッドからは返り値として、教室データ作成画面
の上部にあるセッションの年月日時刻を表す部分を、construct_decideroom_controlsメソ ッドからは返り値として、作成する教室データが何行何列なのかを指定するセレクトボッ クスの部分を構成するパーツが返ってくる。
protected function
render_attendance_decideroom_controls(attendance_decideroom_data $roomdata) { $table = new html_table();
$table->attributes['class'] = ' ';
$table->data[0][] = $this->construct_decideroom_session_info($roomdata);
$table->data[0][] = $this->construct_decideroom_controls($roomdata);
return $this->output->container(html_writer::table($table), 'generalbox takecontrols');
}
図 6-34 render_attendance_decideroom_controlsメソッド
96
6.5.4.5 construct_decideroom_session_infoメソッドを追加
render_attendance_decideroom_controlsメソッドから呼び出される。教室データ作成画
面の上部にあるセッションの年月日時刻を表す部分を作成しそれを
render_attendance_decideroom_controlsメソッドへ返すメソッドである。
メソッド内2行目で変数$dateにはセッションの日付が、5行目で変数$timeにはセッシ ョンの開始時刻が格納される。「継続時間」を設定しているセッションである場合は$time にはセッションの開始時間と終了時間が格納される。6行目では$dateと$timeを文字列結 合させ、$sessinfoへ格納している。$sessinfoへは7行目と8行目で改行が追加され、9行 目ではセッションを追加する際に入力する説明の文字列が結合される。
private function construct_decideroom_session_info(attendance_decideroom_data
$roomdata) {
$sess = $roomdata->sessioninfo;
$date = userdate($sess->sessdate, get_string('strftimedate'));
$starttime = userdate($sess->sessdate, get_string('strftimehm', 'attendance'));
$endtime = userdate($sess->sessdate + $sess->duration, get_string('strftimehm', 'attendance'));
$time = html_writer::tag('nobr', $starttime . ($sess->duration > 0 ? ' - ' .
$endtime : ''));
$sessinfo = $date.' '.$time;
$sessinfo .= html_writer::empty_tag('br');
$sessinfo .= html_writer::empty_tag('br');
$sessinfo .= $sess->description;
return $sessinfo;
}
図 6-35 construct_decideroom_session_infoメソッド
97
6.5.4.6 construct_decideroom_controlsメソッドを追加
render_attendance_decideroom_controlsメソッドから呼び出されるメソッドである。作
成する教室データが何行何列なのかを指定するセレクトボックスの部分を構成するパーツ を作成しそれをrender_attendance_decideroom_controlsメソッドへ返すメソッドである。
3行目の$optionsにはキーが1から始まり要素に「キー番号」と「行」を結合する文字 列が入る配列が格納されている。
8行目のsingle_selectクラスのコンストラクタに渡す引数で作成されるセレクトボック
スが決定する。第1引数ではセレクトボックスから項目を選んだ際に移動するページを指 定する。$roomdata->url()メソッドからはdecideroom.phpへのurlが返ってくるので、セ レクトボックスから項目を選択すると、decideroom.phpへ移動する。第2引数にはセレク
private function construct_decideroom_controls(attendance_decideroom_data $roomd ata) {
~中略~
$options = array (1 => '1 '.行, '2 '.行, '3 '.行, '4 '.行, '5 '.行, '6 '.行, '7 '.行, '8 '.行, '9 '.行, '10 '.行);
$select1 = new single_select(>url(), 'roomrows', $options,
$roomdata->pageparams->roomrows, null);
$select1->class = 'singleselect inline';
$controls .= $this->output->render($select1);
$options = array (1 => '1 '.列, '2 '.列, '3 '.列, '4 '.列, '5 '.列, '6 '.列, '7 '.列, '8 '.列, '9 '.列, '10 '.列);
$select = new single_select(>url(), 'roomcols', $options,
$roomdata->pageparams->roomcols, null);
$select->class = 'singleselect inline';
$controls .= $this->output->render($select);
~中略~
return $controls;
}
図 6-36 construct_decideroom_controlsメソッド
98
トボックスのname属性の値を渡す。ここでは「roomrows」に指定している。第3引数で はセレクトボックス内の選択肢を指定する。第3引数には3行目で定義した配列$options を渡す。第3引数に渡された配列のキーがoptionタグのvalue属性の値として入り、配列 の要素が選択肢に表示される文字列となる。
11行目の$optionsにはキーが1から始まり要素に「キー番号」と「列」を結合する文 字列が入る配列が格納されている。
16行目のsingle_selectクラスのコンストラクタに渡す第1引数ではセレクトボックス から項目を選んだ際に移動するページを指定する。$roomdata->url()メソッドからは
decideroom.phpへのurlが返ってくるので、セレクトボックスから項目を選択すると、
decideroom.phpへ移動する。第2引数にはセレクトボックスのname属性の値を渡す。こ
こでは「roomcols」に指定している。第3引数ではセレクトボックス内の選択肢を指定す る。第3引数には11行目で定義した配列$optionsを渡す。第3引数に渡された配列のキ
ーがoptionタグのvalue属性の値として入り、配列の要素が選択肢に表示される文字列と
なる。
99
6.5.4.7 render_attendance_decideroom_tableメソッドを追加
render_attendance_decideroom_dataメソッドから呼び出され、セレクトボックスで選択
した行数列数のチェックボックスの表を作成しそれを返すメソッドである。
2行目の$roomdata->pageparams->roomrowsにはセレクトボックスで選択された行数 の値が格納されており、3行目の$roomdata->pageparams->roomcolsにはセレクトボック スで選択された列数が入っている。
4行目のfor文の中で配列$testが作成される。配列$testはキーが教室の前から何列目 かを表し、要素がキーの値の列に何席の座席があるかを表している。
9行目のforeach文の中では2つのセレクトボックスで選ばれた行数と列数のチェック
ボックスのテーブルを作成している。
protected function render_attendance_decideroom_table(attendance_decideroom_data
$roomdata) {
$tate = $roomdata->pageparams->roomrows;
$yoko = $roomdata->pageparams->roomcols;
for($i=$tate; $i > 0; $i--){
$test[] = $yoko;
~中略~
$row = new html_table_row();
$i = $tate;
foreach($test as $tes){
for($j=1; $j <= $tes; $j++){
$row->cells[] = html_writer::checkbox('seat'.$i.':'.$j, $i, true);//false =>
true }
$table->data[] = $row;
$row = new html_table_row();
$i--;
}
return html_writer::table($table);
}
図 6-37 render_attendance_decideroom_tableメソッド