• 検索結果がありません。

第 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