summaryrefslogtreecommitdiff
path: root/db/migrations
diff options
context:
space:
mode:
authormsquare <msquare@notrademark.de>2019-12-08 11:48:58 +0100
committerGitHub <noreply@github.com>2019-12-08 11:48:58 +0100
commita3a938a1210f1bfb2680c25b2bcf53e47444bdba (patch)
treefd4c13fd9b714c0d8c60b6d3fe3e2fc88b82b717 /db/migrations
parentb540ac93856065ce6e145930b6611e0a0946d646 (diff)
parent064a1750279be244f86cf24f29749b391b11f1dd (diff)
Merge pull request #685 from MyIgel/schedule-import
Rebuild Schedule import
Diffstat (limited to 'db/migrations')
-rw-r--r--db/migrations/2019_09_07_000000_migrate_admin_schedule_permissions.php48
-rw-r--r--db/migrations/2019_09_07_000001_create_schedule_shift_table.php90
-rw-r--r--db/migrations/Reference.php22
3 files changed, 152 insertions, 8 deletions
diff --git a/db/migrations/2019_09_07_000000_migrate_admin_schedule_permissions.php b/db/migrations/2019_09_07_000000_migrate_admin_schedule_permissions.php
new file mode 100644
index 00000000..e39e22d8
--- /dev/null
+++ b/db/migrations/2019_09_07_000000_migrate_admin_schedule_permissions.php
@@ -0,0 +1,48 @@
+<?php
+
+namespace Engelsystem\Migrations;
+
+use Engelsystem\Database\Migration\Migration;
+
+class MigrateAdminSchedulePermissions extends Migration
+{
+ /**
+ * Run the migration
+ */
+ public function up()
+ {
+ if (!$this->schema->hasTable('Privileges')) {
+ return;
+ }
+
+ $this->schema->getConnection()
+ ->table('Privileges')
+ ->where('name', 'admin_import')
+ ->update(
+ [
+ 'name' => 'schedule.import',
+ 'desc' => 'Import rooms and shifts from schedule.xml',
+ ]
+ );
+ }
+
+ /**
+ * Reverse the migration
+ */
+ public function down()
+ {
+ if (!$this->schema->hasTable('Privileges')) {
+ return;
+ }
+
+ $this->schema->getConnection()
+ ->table('Privileges')
+ ->where('name', 'schedule.import')
+ ->update(
+ [
+ 'name' => 'admin_import',
+ 'desc' => 'Import rooms and shifts from schedule.xcs/schedule.xcal',
+ ]
+ );
+ }
+}
diff --git a/db/migrations/2019_09_07_000001_create_schedule_shift_table.php b/db/migrations/2019_09_07_000001_create_schedule_shift_table.php
new file mode 100644
index 00000000..c9cd7cfe
--- /dev/null
+++ b/db/migrations/2019_09_07_000001_create_schedule_shift_table.php
@@ -0,0 +1,90 @@
+<?php
+
+namespace Engelsystem\Migrations;
+
+use Engelsystem\Database\Migration\Migration;
+use Illuminate\Database\Schema\Blueprint;
+
+class CreateScheduleShiftTable extends Migration
+{
+ use Reference;
+
+ /**
+ * Run the migration
+ */
+ public function up()
+ {
+ $this->schema->create(
+ 'schedules',
+ function (Blueprint $table) {
+ $table->increments('id');
+ $table->string('url');
+ }
+ );
+
+ $this->schema->create(
+ 'schedule_shift',
+ function (Blueprint $table) {
+ $table->integer('shift_id')->index()->unique();
+ if ($this->schema->hasTable('Shifts')) {
+ // Legacy table access
+ $table->foreign('shift_id')
+ ->references('SID')->on('Shifts')
+ ->onUpdate('cascade')
+ ->onDelete('cascade');
+ }
+
+ $this->references($table, 'schedules');
+ $table->uuid('guid');
+ }
+ );
+
+ if ($this->schema->hasTable('Shifts')) {
+ $this->schema->table(
+ 'Shifts',
+ function (Blueprint $table) {
+ $table->dropColumn('PSID');
+ }
+ );
+ }
+
+ if ($this->schema->hasTable('Room')) {
+ $this->schema->table(
+ 'Room',
+ function (Blueprint $table) {
+ $table->dropColumn('from_frab');
+ }
+ );
+ }
+ }
+
+ /**
+ * Reverse the migration
+ */
+ public function down()
+ {
+ if ($this->schema->hasTable('Room')) {
+ $this->schema->table(
+ 'Room',
+ function (Blueprint $table) {
+ $table->boolean('from_frab')
+ ->default(false);
+ }
+ );
+ }
+
+ if ($this->schema->hasTable('Shifts')) {
+ $this->schema->table(
+ 'Shifts',
+ function (Blueprint $table) {
+ $table->integer('PSID')
+ ->nullable()->default(null)
+ ->unique();
+ }
+ );
+ }
+
+ $this->schema->drop('schedule_shift');
+ $this->schema->drop('schedules');
+ }
+}
diff --git a/db/migrations/Reference.php b/db/migrations/Reference.php
index 49a1f9ea..d0550686 100644
--- a/db/migrations/Reference.php
+++ b/db/migrations/Reference.php
@@ -4,6 +4,7 @@ namespace Engelsystem\Migrations;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Schema\ColumnDefinition;
+use Illuminate\Support\Str;
trait Reference
{
@@ -11,20 +12,25 @@ trait Reference
* @param Blueprint $table
* @param bool $setPrimary
*/
- protected function referencesUser(Blueprint $table, $setPrimary = false)
+ protected function referencesUser(Blueprint $table, bool $setPrimary = false)
{
- $this->references($table, 'users', 'user_id', $setPrimary);
+ $this->references($table, 'users', null, $setPrimary);
}
/**
- * @param Blueprint $table
- * @param string $targetTable
- * @param string $fromColumn
- * @param bool $setPrimary
+ * @param Blueprint $table
+ * @param string $targetTable
+ * @param string|null $fromColumn
+ * @param bool $setPrimary
* @return ColumnDefinition
*/
- protected function references(Blueprint $table, $targetTable, $fromColumn, $setPrimary = false): ColumnDefinition
- {
+ protected function references(
+ Blueprint $table,
+ string $targetTable,
+ ?string $fromColumn = null,
+ bool $setPrimary = false
+ ): ColumnDefinition {
+ $fromColumn = $fromColumn ?? Str::singular($targetTable) . '_id';
$col = $table->unsignedInteger($fromColumn);
if ($setPrimary) {