/** * Reset the migration. * * @param Migration $migration */ public function reset(Migration $migration) { $this->input->read($migration); if (!($stream = $migration->getStream())) { return; } $assignments = $migration->getAssignments(); $stream = $this->streams->findBySlugAndNamespace(array_get($stream, 'slug'), array_get($stream, 'namespace')); if (!$stream) { return; } foreach ($assignments as $assignment) { /* * If there is no field to be * found then the assignment * needs to be cleaned out. * * @var FieldInterface */ if (!($field = $this->fields->findBySlugAndNamespace($assignment['field'], $stream->getNamespace()))) { continue; } $assignment['field'] = $field; $assignment['stream'] = $stream; /* * Check if the field is already * assigned to the stream and * then go ahead and delete. */ if ($assignment = $this->assignments->findByStreamAndField($stream, $field)) { $this->assignments->delete($assignment); } } }
/** * Handle the command. * * @param FieldRepositoryInterface $fields * @param StreamRepositoryInterface $streams * @param AssignmentRepositoryInterface $assignments */ public function handle(FieldRepositoryInterface $fields, StreamRepositoryInterface $streams, AssignmentRepositoryInterface $assignments) { $addon = $this->migration->getAddon(); $stream = $this->migration->getStream(); $namespace = array_get($stream, 'namespace', $this->migration->getNamespace()); $slug = array_get($stream, 'slug', $addon ? $addon->getSlug() : null); $stream = $streams->findBySlugAndNamespace($slug, $namespace); foreach ($this->migration->getAssignments() as $field => $assignment) { if (is_numeric($field)) { $field = $assignment; } if ($stream && ($field = $fields->findBySlugAndNamespace($field, $namespace))) { if ($assignment = $assignments->findByStreamAndField($stream, $field)) { $assignments->delete($assignment); } } } $assignments->cleanup(); }
/** * Handle the command. * * @param AssignmentRepositoryInterface $assignments */ public function handle(AssignmentRepositoryInterface $assignments) { foreach ($this->field->getAssignments() as $assignment) { $assignments->delete($assignment); } }
/** * Handle the command. * * @param UnassignField $command */ public function handle(UnassignField $command) { if ($assignment = $this->assignments->findByStreamAndField($command->getStream(), $command->getField())) { $this->assignments->delete($assignment); } }