/** * Adds a new Language object from the given params * * @param array $values * @throws \Exception * @return boolean * @api */ protected function add(array $values) { $values = $this->dispatchBeforeOperationEvent('\\RedKiteLabs\\RedKiteCms\\RedKiteCmsBundle\\Core\\Event\\Content\\Language\\BeforeLanguageAddingEvent', LanguageEvents::BEFORE_ADD_LANGUAGE, $values, array('message' => 'exception_language_adding_aborted', 'domain' => 'exceptions')); try { $this->validator->checkEmptyParams($values); $this->validator->checkRequiredParamsExists(array('LanguageName' => ''), $values); if ($this->validator->languageExists($values['LanguageName'])) { throw new LanguageException\LanguageExistsException('exception_language_already_exists'); } if (empty($values['LanguageName'])) { throw new General\ArgumentIsEmptyException('exception_null_language_name'); } $result = true; $this->languageRepository->startTransaction(); $hasLanguages = $this->validator->hasLanguages(); $values['MainLanguage'] = $hasLanguages ? isset($values['MainLanguage']) ? $values['MainLanguage'] : 0 : 1; if ($values['MainLanguage'] == 1 && $hasLanguages) { $result = $this->resetMain(); } if ($result) { // Saves the language if (null === $this->alLanguage) { $className = $this->languageRepository->getRepositoryObjectClassName(); $this->alLanguage = new $className(); } $values = $this->checkCreatedAt($values); $result = $this->languageRepository->setRepositoryObject($this->alLanguage)->save($values); if (false !== $result) { $eventName = LanguageEvents::BEFORE_ADD_LANGUAGE_COMMIT; $result = !$this->eventsHandler->createEvent($eventName, '\\RedKiteLabs\\RedKiteCms\\RedKiteCmsBundle\\Core\\Event\\Content\\Language\\BeforeAddLanguageCommitEvent', array($this, $values))->dispatch()->getEvent($eventName)->isAborted(); } } if (false !== $result) { $this->languageRepository->commit(); $this->eventsHandler->createEvent(LanguageEvents::AFTER_ADD_LANGUAGE, '\\RedKiteLabs\\RedKiteCms\\RedKiteCmsBundle\\Core\\Event\\Content\\Language\\AfterLanguageAddedEvent', array($this))->dispatch(); return $result; } $this->languageRepository->rollBack(); return $result; } catch (\Exception $e) { if (isset($this->languageRepository) && $this->languageRepository !== null) { $this->languageRepository->rollBack(); } throw $e; } }