Open Preprint Systems  3.3.0
SubmissionsMigration.inc.php
1 <?php
2 
14 use Illuminate\Database\Migrations\Migration;
15 use Illuminate\Database\Schema\Builder;
16 use Illuminate\Database\Schema\Blueprint;
17 use Illuminate\Database\Capsule\Manager as Capsule;
18 
19 class SubmissionsMigration extends Migration {
24  public function up() {
25  // Submissions
26  Capsule::schema()->create('submissions', function (Blueprint $table) {
27  $table->bigInteger('submission_id')->autoIncrement();
28  $table->bigInteger('context_id');
29  $table->bigInteger('current_publication_id')->nullable();
30  $table->datetime('date_last_activity')->nullable();
31  $table->datetime('date_submitted')->nullable();
32  $table->datetime('last_modified')->nullable();
33  // WORKFLOW_STAGE_ID_SUBMISSION
34  $table->bigInteger('stage_id')->default(1);
35  // STATUS_QUEUED
36  $table->tinyInteger('status')->default(1);
37  $table->tinyInteger('submission_progress')->default(1);
38  // Used in OMP only; should not be null there
39  $table->tinyInteger('work_type')->default(0)->nullable();
40  $table->index(['context_id'], 'submissions_context_id');
41  });
42 
43  // Submission metadata
44  Capsule::schema()->create('submission_settings', function (Blueprint $table) {
45  $table->bigInteger('submission_id');
46  $table->string('locale', 14)->default('');
47  $table->string('setting_name', 255);
48  $table->mediumText('setting_value')->nullable();
49  $table->index(['submission_id'], 'submission_settings_submission_id');
50  $table->unique(['submission_id', 'locale', 'setting_name'], 'submission_settings_pkey');
51  });
52 
53  // publication metadata
54  Capsule::schema()->create('publication_settings', function (Blueprint $table) {
55  $table->bigInteger('publication_id');
56  $table->string('locale', 14)->default('');
57  $table->string('setting_name', 255);
58  $table->text('setting_value')->nullable();
59  $table->index(['publication_id'], 'publication_settings_publication_id');
60  $table->unique(['publication_id', 'locale', 'setting_name'], 'publication_settings_pkey');
61  });
62  // Add partial index (DBMS-specific)
63  switch (Capsule::connection()->getDriverName()) {
64  case 'mysql': Capsule::connection()->unprepared('CREATE INDEX publication_settings_name_value ON publication_settings (setting_name(50), setting_value(150))'); break;
65  case 'pgsql': Capsule::connection()->unprepared("CREATE INDEX publication_settings_name_value ON publication_settings (setting_name, setting_value) WHERE setting_name IN ('indexingState', 'medra::registeredDoi', 'datacite::registeredDoi', 'pub-id::publisher-id')"); break;
66  }
67 
68  // Authors for submissions.
69  Capsule::schema()->create('authors', function (Blueprint $table) {
70  $table->bigInteger('author_id')->autoIncrement();
71  $table->string('email', 90);
72  $table->tinyInteger('include_in_browse')->default(1);
73  $table->bigInteger('publication_id');
74  $table->float('seq', 8, 2)->default(0);
75  $table->bigInteger('user_group_id')->nullable();
76  $table->index(['publication_id'], 'authors_publication_id');
77  });
78 
79  // Language dependent author metadata.
80  Capsule::schema()->create('author_settings', function (Blueprint $table) {
81  $table->bigInteger('author_id');
82  $table->string('locale', 14)->default('');
83  $table->string('setting_name', 255);
84  $table->text('setting_value')->nullable();
85  $table->index(['author_id'], 'author_settings_author_id');
86  $table->unique(['author_id', 'locale', 'setting_name'], 'author_settings_pkey');
87  });
88 
89  // Editor decisions.
90  Capsule::schema()->create('edit_decisions', function (Blueprint $table) {
91  $table->bigInteger('edit_decision_id')->autoIncrement();
92  $table->bigInteger('submission_id');
93  $table->bigInteger('review_round_id');
94  $table->bigInteger('stage_id')->nullable();
95  $table->tinyInteger('round');
96  $table->bigInteger('editor_id');
97  $table->tinyInteger('decision');
98  $table->datetime('date_decided');
99  $table->index(['submission_id'], 'edit_decisions_submission_id');
100  $table->index(['editor_id'], 'edit_decisions_editor_id');
101  });
102 
103  // Comments posted on submissions
104  Capsule::schema()->create('submission_comments', function (Blueprint $table) {
105  $table->bigInteger('comment_id')->autoIncrement();
106  $table->bigInteger('comment_type')->nullable();
107  $table->bigInteger('role_id');
108  $table->bigInteger('submission_id');
109  $table->bigInteger('assoc_id');
110  $table->bigInteger('author_id');
111  $table->text('comment_title');
112  $table->text('comments')->nullable();
113  $table->datetime('date_posted')->nullable();
114  $table->datetime('date_modified')->nullable();
115  $table->tinyInteger('viewable')->nullable();
116  $table->index(['submission_id'], 'submission_comments_submission_id');
117  });
118 
119  // Assignments of sub editors to submission groups.
120  Capsule::schema()->create('subeditor_submission_group', function (Blueprint $table) {
121  $table->bigInteger('context_id');
122  $table->bigInteger('assoc_id');
123  $table->bigInteger('assoc_type');
124  $table->bigInteger('user_id');
125  $table->index(['context_id'], 'section_editors_context_id');
126  $table->index(['assoc_id', 'assoc_type'], 'subeditor_submission_group_assoc_id');
127  $table->index(['user_id'], 'subeditor_submission_group_user_id');
128  $table->unique(['context_id', 'assoc_id', 'assoc_type', 'user_id'], 'section_editors_pkey');
129  });
130 
131  // queries posted on submission workflow
132  Capsule::schema()->create('queries', function (Blueprint $table) {
133  $table->bigInteger('query_id')->autoIncrement();
134  $table->bigInteger('assoc_type');
135  $table->bigInteger('assoc_id');
136  $table->tinyInteger('stage_id')->default(1);
137  $table->float('seq', 8, 2)->default(0);
138  $table->datetime('date_posted')->nullable();
139  $table->datetime('date_modified')->nullable();
140  $table->smallInteger('closed')->default(0);
141  $table->index(['assoc_type', 'assoc_id'], 'queries_assoc_id');
142  });
143 
144  // queries posted on submission workflow
145  Capsule::schema()->create('query_participants', function (Blueprint $table) {
146  $table->bigInteger('query_id');
147  $table->bigInteger('user_id');
148  $table->unique(['query_id', 'user_id'], 'query_participants_pkey');
149  });
150 
151  // List of all keywords.
152  Capsule::schema()->create('submission_search_keyword_list', function (Blueprint $table) {
153  $table->bigInteger('keyword_id')->autoIncrement();
154  $table->string('keyword_text', 60);
155  $table->unique(['keyword_text'], 'submission_search_keyword_text');
156  });
157 
158  // Indexed objects.
159  Capsule::schema()->create('submission_search_objects', function (Blueprint $table) {
160  $table->bigInteger('object_id')->autoIncrement();
161  $table->bigInteger('submission_id');
162  $table->integer('type')->comment('Type of item. E.g., abstract, fulltext, etc.');
163  $table->bigInteger('assoc_id')->comment('Optional ID of an associated record (e.g., a file_id)')->nullable();
164  });
165 
166  // Keyword occurrences for each indexed object.
167  Capsule::schema()->create('submission_search_object_keywords', function (Blueprint $table) {
168  $table->bigInteger('object_id');
169  $table->bigInteger('keyword_id');
170  $table->integer('pos')->comment('Word position of the keyword in the object.');
171  $table->index(['keyword_id'], 'submission_search_object_keywords_keyword_id');
172  $table->unique(['object_id', 'pos'], 'submission_search_object_keywords_pkey');
173  });
174  }
175 
180  public function down() {
181  Capsule::schema()->drop('submission_search_object_keywords');
182  Capsule::schema()->drop('submission_search_objects');
183  Capsule::schema()->drop('submission_search_keyword_list');
184  Capsule::schema()->drop('query_participants');
185  Capsule::schema()->drop('queries');
186  Capsule::schema()->drop('subeditor_submission_group');
187  Capsule::schema()->drop('submission_comments');
188  Capsule::schema()->drop('edit_decisions');
189  Capsule::schema()->drop('author_settings');
190  Capsule::schema()->drop('authors');
191  Capsule::schema()->drop('publication_settings');
192  Capsule::schema()->drop('submission_settings');
193  Capsule::schema()->drop('submissions');
194  }
195 }
SubmissionsMigration\down
down()
Definition: SubmissionsMigration.inc.php:180
SubmissionsMigration\up
up()
Definition: SubmissionsMigration.inc.php:24
SubmissionsMigration
Describe database table structures.
Definition: SubmissionsMigration.inc.php:19