Beispiel #1
0
 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];
 }
Beispiel #2
0
 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);
 }
Beispiel #3
0
 /**
  * @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);
 }