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