第 6 章 システムの実現方法
6.5 追加または編集したプログラムファイル
6.5.3 renderables.php
6.5.3.1attendance_manage_dataクラスへの追加
attendance_manage_dataクラスへ上の2つのメソッドを追加した。
図 6-21と図 6-22のメソッドは返り値として、それぞれshowseat.phpと
decideroom.phpへのリンクを返す。
図 6-21と図 6-22のメソッドが所属するattendance_manage_dataクラスのインスタン
スはmanage.php内で生成され、manage.phpのページを描画するメソッドへ渡される。
manage.phpの画面からは、take.phpとshowseat.phpとdecideroom.phpと
sessions.phpの画面へ遷移することが可能。図 6-21と図 6-22のメソッドはこれらのペー
ジに遷移するためのリンクを生成するために存在している。よって、この2つのメソッド
に加えてtake.phpへのリンクを生成するためのurl_takeメソッドやsessions.phpへのリン
クを生成するためのurl_sessionsメソッドも同クラス内に存在している。
それぞれのメソッドのreturn文で呼び出しているメソッドはどうrenderables.phpの
url_helpersクラスで定義されているstaticなメソッドである。このメソッドについては
6.5.3.4を参照。このメソッドに渡す第1引数にattendanceクラスのインスタンスを渡す
のはこのメソッド内でattendanceクラスのメソッドを呼び出すためである。このメソッド に第2引数として渡す変数$sessionidはどのセッションであるかを表す値が入っている。
$sessionidの値はtake.phpとshowseat.phpとdecideroom.phpにアクセスする際のurlク エリパラメータのsessionidの値として使われる。
public function url_showseat($sessionid, $grouptype) {
return url_helpers::url_showseat($this->att, $sessionid, $grouptype);
}
public function url_decideroom($sessionid, $grouptype) {
return url_helpers::url_decideroom($this->att, $sessionid, $grouptype);
}
図 6-21 url_showseatメソッド
図 6-22 url_decideroomメソッド
83 6.5.3.2 attendance_decideroom_dataクラスを追加
(a) 前半部分
class attendance_decideroom_data implements renderable { public $users;
public $pageparams;
public $perm;
public $groupmode;
public $cm;
public $statuses;
public $sessioninfo;
public $sessionlog;
public $sessions4copy;
public $updatemode;
private $urlpath;
private $urlparams;
private $att;
public function __construct(attendance $att) { if ($att->pageparams->grouptype) {
$this->users = >get_users(>pageparams->grouptype,
$att->pageparams->page);
} else {
$this->users = >get_users(>pageparams->group,
$att->pageparams->page);
}
$this->pageparams = $att->pageparams;
$this->perm = $att->perm;
$this->groupmode = $att->get_group_mode();
$this->cm = $att->cm;
$this->statuses = $att->get_statuses();
84 (b) 中間部分
$this->sessioninfo = $att->get_session_info($att->pageparams->sessionid);
$this->updatemode = $this->sessioninfo->lasttaken > 0;
if (isset($att->pageparams->copyfrom)) {
$this->sessionlog =
$att->get_session_log($att->pageparams->copyfrom);
} else if ($this->updatemode) {
$this->sessionlog =
$att->get_session_log($att->pageparams->sessionid);
} else {
$this->sessionlog = array();
}
if (!$this->updatemode) {
$this->sessions4copy =
$att->get_today_sessions_for_copy($this->sessioninfo);
}
$this->urlpath = $att->url_decideroom()->out_omit_querystring();
$params = $att->pageparams->get_significant_params();
$params['id'] = $att->cm->id;
$this->urlparams = $params;
$this->att = $att;
}
public function url($params=array(), $excludeparams=array()) { $params = array_merge($this->urlparams, $params);
foreach ($excludeparams as $paramkey) { unset($params[$paramkey]);
}
85
attendance_decideroom_dataクラスのインスタンスはdecideroom.phpの中で生成さ
れ、decideroom.phpのページを描画するメソッドへ渡される。
decideroom.phpのページはチェックボックスの表があり、教室の机の配置と同じように
チェックボックスをチェックし送信する。送信したフォームデータはdecideroom.phpへ 送信される。また、ページ右上にある数字を選ぶ2つのセレクトボックスで教室の並びを 表現するチェックボックスの行数と列数を変更することができる。これらのセレクトボッ クスから行数や列数の数字を選択した際には、選んだ行数または列数をページのチェック ボックスの行数または列数に反映するために、decideroom.phpへセレクトボックスで選ん だ数字が送信される。このため、図 6-23のクラスには自身へのurlを格納するメソッドや それを格納する変数が存在する。
url_pathメソッドは、選んだチェックボックスのフォームデータを送信する
decideroom.phpへのurlを返すメソッドである。return文で返している変数$this->
url_pathには図 6-23のクラスのコンストラクタの内部でattendanceクラスの
url_decideroomメソッドを用いてdecideroom.phpへのurlが格納されている。
urlメソッドはセレクトボックスで選んだ行数または列数をurlクエリパラメータとして
持ったdecideroom.phpへのurlを返すメソッドである。メソッド内1行目の変数$params
にはurlクエリパラメータとするセレクトボックスで選んだ行数または列数が格納されて いる。
return new moodle_url($this->urlpath, $params);
}
public function url_view($params=array()) {
return url_helpers::url_view($this->att, $params);
}
public function url_path() { return $this->urlpath;
} }
(c) 後半部分
図 6-23 attendance_decideroom_dataクラス
86 6.5.3.3 attendance_showseat_dataクラスを追加
(a)前半部分
class attendance_showseat_data implements renderable { public $users;
public $pageparams;
public $perm;
public $groupmode;
public $cm;
public $statuses;
public $sessioninfo;
public $sessionlog;
public $sessions4copy;
public $updatemode;
public $seatexistlog;
public $seatlog;
private $urlpath;
private $urlparams;
private $att;
public function __construct(attendance $att) { if ($att->pageparams->grouptype) {
$this->users = >get_users(>pageparams->grouptype,
$att->pageparams->page);
} else {
$this->users = >get_users(>pageparams->group,
$att->pageparams->page);
}
$this->pageparams = $att->pageparams;
$this->perm = $att->perm;
$this->groupmode = $att->get_group_mode();
$this->cm = $att->cm;
87 (b)中間部分 $this->statuses = $att->get_statuses();
$this->sessioninfo = $att->get_session_info($att->pageparams->sessionid);
$this->updatemode = $this->sessioninfo->lasttaken > 0;
$this->seatexistlog = $att->get_seatexist_log();
$this->seatlog = $att->get_seat_log();
if (isset($att->pageparams->copyfrom)) {
$this->sessionlog =
$att->get_session_log($att->pageparams->copyfrom);
} else if ($this->updatemode) {
$this->sessionlog =
$att->get_session_log($att->pageparams->sessionid);
} else {
$this->sessionlog = array();
}
if (!$this->updatemode) {
$this->sessions4copy =
$att->get_today_sessions_for_copy($this->sessioninfo);
}
$this->urlpath = $att->url_showseat()->out_omit_querystring();
$params = $att->pageparams->get_significant_params();
$params['id'] = $att->cm->id;
$this->urlparams = $params;
$this->att = $att;
}
88
attendance_showseat_dataクラスのインスタンスはshowseat.phpの中で生成され、
showseat.phpのページを描画するメソッドへ渡される。
showseat.phpのページは座席表を模したページで学生の名前が学生の送信した座席の位
置に表示する。この時の学生の名前はその学生の出席情報を表示するview.phpのページへ のリンクとなっている。座席表を表示するためには、「誰がどこに座っているか」という 学生の着生した座席位置の情報と「教室に座席がどのように配置されているか」という教 室データが必要となる。教室に座席がどのように配置されているか」というデータをデー タベースから取り出してくるメソッドがget_seatexist_logであり、取り出したデータは変 数$seatexistlogに格納される。同様に「誰がどこに座っているか」というデータをデータ ベースから取り出してくるメソッドがget_seat_logであり、取り出したデータは変数
$seatlogに格納される。しかし、get_seat_logメソッドから取り出した「誰がどこに座っ
public function url($params=array(), $excludeparams=array()) { $params = array_merge($this->urlparams, $params);
foreach ($excludeparams as $paramkey) { unset($params[$paramkey]);
}
return new moodle_url($this->urlpath, $params);
}
public function url_showseat($sessionid, $grouptype) {
return url_helpers::url_showseat($this->att, $sessionid, $grouptype);
}
public function url_view($params=array()) {
return url_helpers::url_view($this->att, $params);
}
public function url_path() { return $this->urlpath;
} }
(c)後半部分
図 6-24 attendance_showseat_dataクラス
89
ているか」というデータの内の「誰が」というデータに関してはユーザーのidしか取り出 して来ていない。showseat.phpの画面で学生の名前を表示するためにはユーザーid以外の ユーザーに関する情報が必要となるので、図 6-24のクラスではget_usersメソッドを用い てそのデータを取り出して変数$usersへ格納している。
showseat.phpのページはチェックボックス付き座席表があり、教室にあるだれも座って
いない座席のチェックボックスをチェックし送信する。送信したフォームデータは
showseat.phpへ送信される。また、座席表に表示された学生の名前をクリックすることで
その学生の出席情報閲覧画面へも移動することができる。出席情報閲覧画面はview.phpの 画面である。このため、このクラスにはshowseat.phpとview.phpへのurlを返すメソッ ドが存在する。
url_pathメソッドは、選んだチェックボックスのフォームデータを送信する先である
showseat.phpへのurlを返すメソッドである。return文で返している変数$this->url_path
には図 6-24のクラスのコンストラクタの内部でattendanceクラスのurl_showseatメソッ ドを用いてshowseat.phpへのurlが格納されている。
図 6-24のクラスのurl_viewメソッドは、座席表の学生の名前をクリックして出席情報 閲覧画面へ移動するためのurlを返すメソッドである。このメソッドのreturn文で呼び出 しているメソッドは同renderables.phpのurl_helpersクラスで定義されているstaticなメ ソッドである。このメソッドに渡す第1引数にattendanceクラスのインスタンスを渡すの はこのメソッド内でattendanceクラスのメソッドを呼び出すためである。このメソッドに 第2引数として渡す変数$paramsにはview.phpへのurlのurlクエリパラメータを表す値 が入っている。
90 6.5.3.4 url_helpersクラスに追加
url_helpersクラスにあるurl_***メソッドはrenderables.phpのattendance_***_dataク ラスにあるurl_***メソッドから呼び出される。また、url_helperクラスにあるurl_***メソ
ッドではlocallib.phpのattendanceクラスにあるurl_***メソッドが呼び出される。
url_helpersクラスのurl_decideroomメソッドは第1引数で$attを、第2引数で
$sessionidを、第3引数で$grouptypeを受け取っている。$attにはattendanceクラスのイ
ンスタンを渡される。それはattendanceクラスのurl_dicideroomメソッドを図 6-25のメ ソッドの中で呼び出すためである。$attにはどのセッションであるかあらわす値が渡され る。教室データの作成はセッションごとに行うのでセッションを特定するためには必要な 情報である。
url_helpersクラスのurl_showseatメソッドは第1引数で$attを、第2引数で$sessionid
を、第3引数で$grouptypeを受け取っている。$attにはattendanceクラスのインスタン を渡される。それはattendanceクラスのurl_showseatメソッドを図 6-26のメソッドの中 で呼び出すためである。$attにはどのセッションであるかあらわす値が渡される。教室デ ータの作成はセッションごとに行うのでセッションを特定するために必要な情報である。
public static function url_decideroom($att, $sessionid, $grouptype) { $params = array('sessionid' => $sessionid);
if (isset($grouptype)) {
$params['grouptype'] = $grouptype;
}
return $att->url_decideroom($params);
}
public static function url_showseat($att, $sessionid, $grouptype) { $params = array('sessionid' => $sessionid);
if (isset($grouptype)) {
$params['grouptype'] = $grouptype;
}
return $att->url_showseat($params);
}
図 6-25 url_decideroomメソッド
図 6-26 url_showseatメソッド
91