第 6 章 システムの実現方法
6.5 追加または編集したプログラムファイル
6.5.8 db/upgrade.php へ追加
upgrade.php(17)はMoodleのデータベースへテーブルを加えたりデータベースからテ
ーブルを削除したりする時や、テーブルにフィールドを加えたりテーブルからフィールド を削除したりする時などのようにデータベースに変更を加えたい時に利用するファイルで ある。
データベースに変更をしたい際には、upgrade.phpのファイルに決まった文章を追加記
述した後version.phpファイルの変数$plugin->versionの10桁の整数の値を変更する。
upgradeに追加記述したプログラムのifの条件文で$oldversionと比較する数字には新しく
変更した変数$plugin->versionの値を入れる。その後ブラウザによりMoodleへアクセス すると、アップデートを更新する通知が表示されモジュールをアップデートすることがで きる。
今回行ったデータベースへの変更は4回行った。行った変更は「attendance_sessionsテ
ーブルへstudentsmarkmyseatフィールドを追加。」「Moodleデータベースへ
attendance_seatテーブルを追加」「Moodleデータベースへattendance_seatvacantを追 加」「Moodleデータベースへattendance_seatexistテーブルを追加」の4つである。
以下では、4つの変更の詳細を一つずつ説明する。
図 6-57のプログラムを追加することで、既存のattendanceテーブルに新たなフィール
ドstudentsmarkmyseatを追加する。studentsmarkmyseatフィールドには整数型の値が入
り、not null制約が掛かる。このフィールドのデフォルトの値は0である。また、桁数は 1と指定されている。
変数$oldversionと2017120600を比較し、2017120600の方が大きい場合にif文の中の 処理を行う。アップグレードの際にはversion.php変数$plugin->versionの値を
2017120600に変更する。変数$oldversionにはその時の変更前の変数$plugin->versionの
値が入っている。
if ($oldversion < 2017120600) {
$table1 = new xmldb_table('attendance_sessions');
$field = new xmldb_field('studentsmarkmyseat');
$field->set_attributes(XMLDB_TYPE_INTEGER, '1', XMLDB_NOTNULL, null, '0');
if (!$dbman->field_exists($table1, $field)) { $dbman->add_field($table1, $field);
}
upgrade_mod_savepoint(true, 2017120600, 'attendance');
}
図 6-57 upgrade.phpの追加した部分1
130
2行目では変数$table1にattendance_sessionsテーブルのインスタンスを代入してい る。
3行目では変数$fieldにstudentsmarkmyseatフィールドのインスタンスを代入し、4行 目でそのインスタンスのset_attributesメソッドを呼び出しフィールドの属性の設定を行 う。6行目のadd_fieldメソッドには第1引数に追加先のテーブルのインスタンスを、第 2引数に追加するフィールドのインスタンスを渡す。Moodleにはadd_fieldメソッドなど のデータベース構造を変更するためのAPI(18)(19)が用意されている。
図 6-58のプログラムを追加することで、既存のmoodleデータベースに
attendance_seatテーブルを追加する。attendance_seatテーブルには「id」「sessionid」
「studentid」「seatrow」「seatcol」の5つのフィールドが存在する。idフィールドには整 数型の値が入り、not null制約が掛かる。sessionidフィールドには整数型の値が入り、not null制約が掛かる。このフィールドのデフォルトの値は0である。また、桁数は10と指 定されている。studentidフィールドには整数型の値が入り、not null制約が掛かる。この
if ($oldversion < 2017120601) {
$table = new xmldb_table('attendance_seat');
$table->add_field('id',XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
$table->add_field('sessionid',XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
$table->add_field('studentid',XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
$table->add_field('seatrow',XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
$table->add_field('seatcol',XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
if(!$dbman->table_exists($table)){
$dbman->create_table($table);
}
upgrade_mod_savepoint(true, 2017120601, 'attendance');
}
図 6-58 upgrade.phpの追加した部分2
131
フィールドのデフォルトの値は0である。また、桁数は10と指定されている。seatrow フィールドには整数型の値が入り、not null制約が掛かる。このフィールドのデフォルト の値は0である。また、桁数は10と指定されている。seatcolフィールドには整数型の値 が入り、not null制約が掛かる。このフィールドのデフォルトの値は0である。また、桁 数は10と指定されている。
変数$oldversionと2017120601を比較し、2017120601の方が大きい場合にif文の中の 処理を行う。アップグレードの際にはversion.php変数$plugin->versionの値を
2017120601に変更する。変数$oldversionにはその時の変更前の変数$plugin->versionの
値が入っている。
2行目では変数$table1にattendance_seatテーブルのインスタンスを代入している。3
~7行目でadd_fieldメソッドを用いてテーブルのインスタンスにフィールドの情報を追 加している。
13行目のcleate_tableメソッドには第1引数に追加するテーブルを渡し、データベー スにテーブルを追加する。
132
図 6-59のプログラムを追加することで、既存のmoodleデータベースに
attendance_seatvacantテーブルを追加する。attendance_seatvacantテーブルには「id」
「sessionid」「seatvacantrow」「seatvacantcol」の4つのフィールドが存在する。idフィー ルドには整数型の値が入り、not null制約が掛かる。また、桁数は10と指定されてい る。sessionidフィールドには整数型の値が入り、not null制約が掛かる。このフィールド のデフォルトの値は0である。また、桁数は10と指定されている。seatvacantrowフィー ルドには整数型の値が入り、not null制約が掛かる。このフィールドのデフォルトの値は 0である。また、桁数は10と指定されている。seatvacantcolフィールドには整数型の値 が入り、not null制約が掛かる。このフィールドのデフォルトの値は0である。また、桁 数は10と指定されている。
変数$oldversionと2017121700を比較し、2017121700の方が大きい場合にif文の中の 処理を行う。アップグレードの際にはversion.php変数$plugin->versionの値を
2017121700に変更する。変数$oldversionにはその時の変更前の変数$plugin->versionの
値が入っている。
if($oldversion < 2017121700) {
$table = new xmldb_table('attendance_seatvacant');
$table->add_field('id',XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
$table->add_field('sessionid',XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
$table->add_field('seatvacantrow',XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
$table->add_field('seatvacantcol',XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
if(!$dbman->table_exists($table)){
$dbman->create_table($table);
}
upgrade_mod_savepoint(true, 2017121700, 'attendance');
}
図 6-59 upgrade.phpの追加した部分3
133
2行目では変数$table1にattendance_seatvacantテーブルのインスタンスを代入してい る。4~7行目でadd_fieldメソッドを用いてテーブルのインスタンスにフィールドの情 報を追加している。
11行目のcleate_tableメソッドには第1引数に追加するテーブルを渡し、データベー スにテーブルを追加する。
図 6-60のプログラムを追加することで、既存のmoodleデータベースに
attendance_seatvacantテーブルを追加する。attendance_seatexistテーブルには「id」
「sessionid」「seatexistrow」「seatexistcol」の4つのフィールドが存在する。idフィールド には整数型の値が入り、not null制約が掛かる。また、桁数は10と指定されている。
sessionidフィールドには整数型の値が入り、not null制約が掛かる。このフィールドのデ
フォルトの値は0である。また、桁数は10と指定されている。seatexistrowフィールド には整数型の値が入り、not null制約が掛かる。このフィールドのデフォルトの値は0で ある。また、桁数は10と指定されている。seatexistcolフィールドには整数型の値が入
if($oldversion < 2017121701) {
$table = new xmldb_table('attendance_seatexist');
$table->add_field('id',XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
$table->add_field('sessionid',XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
$table->add_field('seatexistrow',XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
$table->add_field('seatexistcol',XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
if(!$dbman->table_exists($table)){
$dbman->create_table($table);
}
upgrade_mod_savepoint(true, 2017121701, 'attendance');
}
図 6-60 upgrade.phpの追加した部分4
134
り、not null制約が掛かる。このフィールドのデフォルトの値は0である。また、桁数は 10と指定されている。
変数$oldversionと2017121701を比較し、2017121701の方が大きい場合にif文の中の 処理を行う。アップグレードの際にはversion.php変数$plugin->versionの値を
2017121701に変更する。変数$oldversionにはその時の変更前の変数$plugin->versionの
値が入っている。
2行目では変数$table1にattendance_seatexistテーブルのインスタンスを代入してい る。4~7行目でadd_fieldメソッドを用いてテーブルのインスタンスにフィールドの情 報を追加している。
12行目のcleate_tableメソッドには第1引数に追加するテーブルを渡し、データベー スにテーブルを追加する。
135