/** * Build errormessages and add rules * * @param $modelName * @return $this */ public function getFormFieldValidation($modelName) { $formField = $this->formField->setClassName($modelName); $errorMessages = []; $defaultLocale = $this->locale->getDefaultLocale(); foreach ($formField->getFields() as $field => $annotation) { if (isset($annotation['validation'])) { foreach ($annotation['validation'] as $validationRule) { $value = isset($this->fieldsArray[$field]) ? $this->fieldsArray[$field] : ''; $formFieldAnnotationTranslation = $formField->getAnnotation($annotation['annotations'], 'Gedmo\\Mapping\\Annotation\\Translatable'); if (false !== $formFieldAnnotationTranslation && is_array($value)) { $translation = isset($value[$defaultLocale->locale]) ? $value[$defaultLocale->locale] : ''; $this->fieldsArray[$field] = $translation; // set default translation $errorMessages[$field][$validationRule] = $formField->getErrorMessage($field, $translation, $modelName, $validationRule); } elseif (is_array($value)) { $errorMessages[$field][$validationRule] = $formField->getErrorMessage($field, implode(',', $value), $modelName, $validationRule); } elseif (is_string($value)) { $errorMessages[$field][$validationRule] = $formField->getErrorMessage($field, $value, $modelName, $validationRule); } if ($validationRule === 'unique' && !isset($this->fieldsArray['id'])) { $this->addRule($field, [$this->formField, 'uniqueEntityCheck'], [$modelName, $field]); } elseif ($validationRule !== 'unique') { $this->addRule($field, $validationRule); } } } } $this->setErrorMessages($errorMessages); return $this; }
/** * @param $xml * @return mixed */ public function execBlock($xml) { $languageMenu = array(); $currentLocale = $this->locale->getLocale()->id; $defaultLocale = $this->locale->getDefaultLocale(); $currentMenuItem = $this->route->getCurrentMenuItem(); $locales = $this->db->getRepository('\\Fraym\\Locale\\Entity\\Locale')->findAll(); foreach ($currentMenuItem->translations as $translation) { $url = $translation->url === '' ? '/' : $translation->url; $languageMenu[$translation->locale->id] = array('url' => $url, 'active' => $translation->locale->id === $currentLocale, 'name' => $translation->locale->name); } foreach ($locales as $locale) { if (!isset($languageMenu[$locale->id])) { $menuItem = $currentMenuItem; do { $m = $menuItem->parent; if ($m) { $menuItem = $m; } } while ($m); foreach ($menuItem->translations as $mTranslation) { if ($mTranslation->locale->id === $locale->id) { $url = $mTranslation->url; break; } elseif ($mTranslation->locale->id === $defaultLocale->id) { $url = $mTranslation->url; } } $languageMenu[$locale->id] = array('url' => $url === '' ? '/' : $url, 'active' => $locale->id === $currentLocale, 'name' => $locale->name); } } $this->languageMenuController->renderHtml($languageMenu); }
/** * @return $this * @throws \Exception */ public function setUpTranslateable() { $defaultLocale = $this->locale->getDefaultLocale(); if ($defaultLocale === null) { throw new \Exception('Default locale not found! Fraym is not correctly installed, please reinstall Fraym.'); } $this->translatableListener = new \Gedmo\Translatable\TranslatableListener(); $this->translatableListener->setDefaultLocale($defaultLocale->locale); $this->translatableListener->setAnnotationReader($this->cachedAnnotationReader); $this->translatableListener->setTranslationFallback(true); $this->translatableListener->setPersistDefaultLocaleTranslation(true); $this->eventManager->addEventSubscriber($this->translatableListener); return $this; }