diff --git a/src/FilesFieldTypeSchema.php b/src/FilesFieldTypeSchema.php new file mode 100644 index 0000000..4901a08 --- /dev/null +++ b/src/FilesFieldTypeSchema.php @@ -0,0 +1,70 @@ + + * @author Ryan Thompson + * @package Anomaly\FilesFieldType + */ +class FilesFieldTypeSchema extends FieldTypeSchema +{ + + /** + * Add the field type's pivot table. + * + * @param Blueprint $table + * @param AssignmentInterface $assignment + */ + public function addColumn(Blueprint $table, AssignmentInterface $assignment) + { + $table = $table->getTable() . '_' . $this->fieldType->getField(); + + $this->schema->dropIfExists($table); + + $this->schema->create( + $table, + function (Blueprint $table) { + + $table->integer('entry_id'); + $table->integer('file_id'); + $table->integer('sort_order')->nullable(); + + $table->primary(['entry_id', 'file_id']); + } + ); + } + + /** + * Rename the pivot table. + * + * @param Blueprint $table + * @param FieldType $from + */ + public function renameColumn(Blueprint $table, FieldType $from) + { + $this->schema->rename( + $table->getTable() . '_' . $from->getField(), + $table->getTable() . '_' . $this->fieldType->getField() + ); + } + + /** + * Drop the pivot table. + * + * @param Blueprint $table + */ + public function dropColumn(Blueprint $table) + { + $this->schema->dropIfExists( + $table->getTable() . '_' . $this->fieldType->getField() + ); + } + +} diff --git a/src/FilesFieldTypeServiceProvider.php b/src/FilesFieldTypeServiceProvider.php index c8eb1db..c12bf85 100644 --- a/src/FilesFieldTypeServiceProvider.php +++ b/src/FilesFieldTypeServiceProvider.php @@ -26,19 +26,4 @@ class FilesFieldTypeServiceProvider extends AddonServiceProvider 'streams/files-field_type/handle' => 'Anomaly\FilesFieldType\Http\Controller\UploadController@upload', 'streams/files-field_type/recent' => 'Anomaly\FilesFieldType\Http\Controller\UploadController@recent', ]; - - /** - * The addon listeners. - * - * @var array - */ - protected $listeners = [ - 'Anomaly\Streams\Platform\Assignment\Event\AssignmentWasCreated' => [ - 'Anomaly\FilesFieldType\Listener\CreatePivotTable' - ], - 'Anomaly\Streams\Platform\Assignment\Event\AssignmentWasDeleted' => [ - 'Anomaly\FilesFieldType\Listener\DropPivotTable' - ] - ]; - } diff --git a/src/Listener/CreatePivotTable.php b/src/Listener/CreatePivotTable.php deleted file mode 100644 index 5d9c50e..0000000 --- a/src/Listener/CreatePivotTable.php +++ /dev/null @@ -1,65 +0,0 @@ - - * @author Ryan Thompson - * @package Anomaly\FilesFieldType\Listener - */ -class CreatePivotTable -{ - - /** - * The schema builder. - * - * @var Builder - */ - protected $schema; - - /** - * Create a new StreamSchema instance. - */ - public function __construct() - { - $this->schema = app('db')->connection()->getSchemaBuilder(); - } - - /** - * Handle the event. - * - * @param AssignmentWasCreated $event - */ - public function handle(AssignmentWasCreated $event) - { - $assignment = $event->getAssignment(); - - $fieldType = $assignment->getFieldType(); - - if (!$fieldType instanceof FilesFieldType) { - return; - } - - $table = $assignment->getStreamPrefix() . $assignment->getStreamSlug() . '_' . $fieldType->getField(); - - $this->schema->dropIfExists($table); - - $this->schema->create( - $table, - function (Blueprint $table) { - - $table->integer('entry_id'); - $table->integer('file_id'); - $table->integer('sort_order')->nullable(); - - $table->primary(['entry_id', 'file_id']); - } - ); - } -} diff --git a/src/Listener/DropPivotTable.php b/src/Listener/DropPivotTable.php deleted file mode 100644 index 54dc811..0000000 --- a/src/Listener/DropPivotTable.php +++ /dev/null @@ -1,52 +0,0 @@ - - * @author Ryan Thompson - * @package Anomaly\FilesFieldType\Listener - */ -class DropPivotTable -{ - - /** - * The schema builder. - * - * @var Builder - */ - protected $schema; - - /** - * Create a new StreamSchema instance. - */ - public function __construct() - { - $this->schema = app('db')->connection()->getSchemaBuilder(); - } - - /** - * Handle the event. - * - * @param AssignmentWasDeleted $event - */ - public function handle(AssignmentWasDeleted $event) - { - $assignment = $event->getAssignment(); - - $fieldType = $assignment->getFieldType(); - - if (!$fieldType instanceof FilesFieldType) { - return; - } - - $this->schema->dropIfExists( - $table = $assignment->getStreamPrefix() . $assignment->getStreamSlug() . '_' . $fieldType->getField() - ); - } -}