xref: /webtrees/app/Schema/Migration42.php (revision 67992b6a3e78399bd33189954a5f08bb23b02503)
1<?php
2/**
3 * webtrees: online genealogy
4 * Copyright (C) 2019 webtrees development team
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16declare(strict_types=1);
17
18namespace Fisharebest\Webtrees\Schema;
19
20use Illuminate\Database\Capsule\Manager as DB;
21use Illuminate\Database\Schema\Blueprint;
22
23/**
24 * Upgrade the database schema from version 42 to version 43.
25 */
26class Migration42 implements MigrationInterface
27{
28    /**
29     * Upgrade to to the next version
30     *
31     * @return void
32     */
33    public function upgrade(): void
34    {
35        //apparently not possible to change enum column directly via laravel
36        $data = DB::table('module_privacy')->get();
37        DB::schema()->drop('module_privacy');
38
39        DB::schema()->create('module_privacy', function (Blueprint $table): void {
40            $table->string('module_name', 32);
41            $table->integer('gedcom_id');
42            $table->enum('component', ['block', 'chart', 'list', 'menu', 'report', 'sidebar', 'tab', 'theme']);
43            $table->tinyInteger('access_level');
44
45            $table->primary(['module_name', 'gedcom_id', 'component']);
46            $table->unique(['gedcom_id', 'module_name', 'component']);
47
48            $table->foreign('module_name')->references('module_name')->on('module');
49            $table->foreign('gedcom_id')->references('gedcom_id')->on('gedcom');
50        });
51
52        $rows = $data->toArray();
53        foreach ($rows as $row) {
54          DB::table('module_privacy')->insert([
55              'module_name' => $row->module_name,
56              'gedcom_id'   => $row->gedcom_id,
57              'component'   => $row->component,
58              'access_level'   => $row->access_level,
59          ]);
60        }
61    }
62}
63