public function initialAction() { $serviceLocator = $this->getServiceLocator(); $entityManager = $serviceLocator->get('entity-manager'); $user = $serviceLocator->get('user-entity'); //check if user already exists $numberUsers = $entityManager->getRepository(get_class($user))->countAdminUsers(); if ($numberUsers) { return $this->redir()->toRoute('admin/default', array('controller' => 'log', 'action' => 'in')); } $form = new \Admin\Form\User($user, $entityManager); $form->get('submit')->setValue('Submit'); //region add language name + select flag $languageForm = new Language($this->getServiceLocator()); $form->add($languageForm->get('isoCode')); $languageName = $languageForm->get('name'); $languageName->setName('language_name'); $form->add($languageName); $form->getInputFilter()->add($languageForm->getInputFilter()->get('isoCode')); $languageNameInputFilter = $languageForm->getInputFilter()->get('name'); $languageNameInputFilter->setName($languageName->getName()); $form->getInputFilter()->add($languageNameInputFilter); //endregion $request = $this->getRequest(); if ($request->isPost()) { $form->setData($request->getPost()); //set the role field to not required $form->getInputFilter()->get('role')->setRequired(false); if ($form->isValid()) { $newPassword = $form->getInputFilter()->get('password_fields')->get('password')->getValue(); if ($newPassword) { $user->setUpass($form->getInputFilter()->get('password_fields')->get('password')->getValue()); } $user->setRegDate(); $user->setRole(User::USER_SUPER_ADMIN); $entityManager->persist($user); $lang = new Lang(); $lang->setIsoCode($form->getInputFilter()->getInputs()['isoCode']->getValue()); $lang->setName($form->getInputFilter()->getInputs()['language_name']->getValue()); $lang->setStatus($lang::STATUS_DEFAULT); $entityManager->persist($lang); $entityManager->flush(); $langCode = $lang->getIsoCode(); $locale = $locale = $langCode != 'en' ? $langCode . '_' . strtoupper($langCode) : 'en_US'; $this->flashMessenger()->addSuccessMessage($this->translator->translate("The user has been added successfully. Please log below.", 'default', $locale)); return $this->redir()->toRoute('admin/default', ['controller' => 'log', 'action' => 'in']); } } return ['form' => $form, 'flagCode' => $this->getRequest()->isPost() ? $this->params()->fromPost('isoCode') : null]; }
public function handleCreateUpdate($data, $id = null) { $action = $id ? 'edit' : 'add'; $entityManager = $this->getServiceLocator()->get('entity-manager'); if ($id) { $languageEntity = new Lang(); $language = $entityManager->find(get_class($languageEntity), $id); if (!$language) { return new JsonModel(['message' => ['type' => 'error', 'text' => $this->translator->translate('There was missing/wrong parameter in the request')]]); } } else { $language = new Lang(); } $oldDefaultLanguage = $entityManager->getRepository(get_class($language))->findOneByStatus(Lang::STATUS_DEFAULT); $oldStatus = null; if ($language->getId()) { $oldStatus = $language->getStatus(); } $form = new LanguageForm($this->getServiceLocator()); $form->bind($language); if ($language->isDefault()) { unset($data['status']); } //ensures no status can be changed if lang is default $form->setData($data); if ($form->isValid($language->isDefault($oldStatus))) { //if this is the new default language, change the old default to status active, and populate the missing content in the new default lang if (isset($data['status']) && $language->isDefault($data['status']) && $oldDefaultLanguage) { //region fill missing content in categories $oldDefaultLanguageId = $oldDefaultLanguage->getId(); $editedLanguageId = $language->getId(); //note! this is null if new language $getMissingData = function ($contentCollection) use($entityManager, $language, $oldDefaultLanguageId, $editedLanguageId) { $defaultContent = null; $editedContent = null; foreach ($contentCollection as $content) { $contentLangId = $content->getLang()->getId(); if ($contentLangId == $oldDefaultLanguageId) { $defaultContent = $content; continue; } if ($editedLanguageId && $contentLangId == $editedLanguageId) { //if($editedLanguageId) = do this only in case of action == edit $editedContent = $content; continue; } if ($defaultContent && $editedContent) { break; } //job done } return ['default_content' => $defaultContent, 'edited_content' => $editedContent]; }; //parse through all the categories $categories = $entityManager->getRepository(get_class(new Category()))->findByType(1); foreach ($categories as $category) { //region copy category content $categoryContents = $getMissingData($category->getContent()); if (!$categoryContents['edited_content'] && $categoryContents['default_content']) { $newContent = clone $categoryContents['default_content']; $newContent->setLang($language); $category->addCategoryContent($newContent); $entityManager->persist($category); } //endregion //region copy listings content foreach ($category->getListings() as $listing) { //deal with content $listingContents = $getMissingData($listing->getContent()); if (!$listingContents['edited_content'] && $listingContents['default_content']) { $newListingContent = clone $listingContents['default_content']; $newListingContent->setLang($language); $listing->addContent($newListingContent); $entityManager->persist($listing); } } //endregion } //endregion if ($oldDefaultLanguage instanceof Lang) { $oldDefaultLanguage->setStatus(Lang::STATUS_ACTIVE); $entityManager->persist($oldDefaultLanguage); } } $entityManager->persist($language); $entityManager->flush(); if ($this->getRequest()->isPost()) { $this->getResponse()->setStatusCode(201); } return new JsonModel(['message' => ['type' => 'success', 'text' => $this->translator->translate('The language has been ' . $action . 'ed successfully')]]); } return $this->renderData($action, $language, $form); }
/** * @depends testGetLanguage * @param int $id */ public function testEditMissingTitle($id) { $form = new Language($this->controller->getServiceLocator()); try { $this->mockLogin(); $this->dispatch('/admin/language/' . $id, Request::METHOD_PUT, ['isoCode' => 'au', 'name' => '', 'language_csrf' => $form->get('language_csrf')->getValue()]); } catch (\Exception $e) { var_dump(__FILE__ . ':' . __LINE__ . ' Message: ' . $e->getMessage()); } $this->assertEquals(200, $this->getResponse()->getStatusCode()); $content = json_decode($this->getResponse()->getContent()); $this->assertObjectHasAttribute('form', $content); }