repository = $repository; } public function setReferenceResolver(ReferenceResolverInterface $referenceResolver) { $this->referenceResolver = $referenceResolver; } public function execute(MigrationStep $step) { // base checks parent::execute($step); if (!isset($step->dsl['mode'])) { throw new \Exception("Invalid step definition: missing 'mode'"); } $action = $step->dsl['mode']; if (!in_array($action, $this->supportedActions)) { throw new \Exception("Invalid step definition: value '$action' is not allowed for 'mode'"); } $this->dsl = $step->dsl; $this->context = $step->context; if (isset($this->dsl['lang'])) { $this->setLanguageCode($this->dsl['lang']); } if (method_exists($this, $action)) { $previousUserId = $this->loginUser(self::ADMIN_USER_ID); try { $output = $this->$action(); } catch (\Exception $e) { $this->loginUser($previousUserId); throw $e; } // reset the environment as much as possible as we had found it before the migration $this->loginUser($previousUserId); return $output; } else { throw new \Exception("Invalid step definition: value '$action' is not a method of " . get_class($this)); } } /** * Method that each executor (subclass) has to implement. * * It is used to set references based on the DSL instructions executed in the current step, for later steps to reuse. * * @throws \InvalidArgumentException when trying to set a reference to an unsupported attribute. * @param $object * @return boolean */ abstract protected function setReferences($object); public function setLanguageCode($languageCode) { $this->languageCode = $languageCode; } public function getLanguageCode() { return $this->languageCode ?: $this->getDefaultLanguageCode(); } public function setDefaultLanguageCode($languageCode) { $this->defaultLanguageCode = $languageCode; } public function getDefaultLanguageCode() { return $this->defaultLanguageCode ?: self::DEFAULT_LANGUAGE_CODE; } }