/** * Initialize the form elements * * @access protected * @author Bertrand Chevrier, <*****@*****.**> * @return mixed */ protected function initElements() { $chainingElt = tao_helpers_form_FormFactory::getElement('chaining', 'Radiobox'); $chainingElt->setDescription(__('Filtering mode')); $chainingElt->setOptions(array('or' => __('Exclusive (OR)'), 'and' => __('Inclusive (AND)'))); $chainingElt->setValue('or'); $this->form->addElement($chainingElt); $recursiveElt = tao_helpers_form_FormFactory::getElement('recursive', 'Radiobox'); $recursiveElt->setDescription(__('Recursive')); $recursiveElt->setOptions(array('0' => __('Current class only'), '10' => __('Current class + Subclasses'))); $recursiveElt->setValue('current'); $this->form->addElement($recursiveElt); $langElt = tao_helpers_form_FormFactory::getElement('lang', 'Combobox'); $langElt->setDescription(__('Language')); $languages = array_merge(array(' '), tao_helpers_I18n::getAvailableLangsByUsage(new core_kernel_classes_Resource(INSTANCE_LANGUAGE_USAGE_DATA))); $langElt->setOptions($languages); $langElt->setValue(0); $this->form->addElement($langElt); $this->form->createGroup('params', __('Options'), array('chaining', 'recursive', 'lang')); $filters = array(); $descElt = tao_helpers_form_FormFactory::getElement('desc', 'Label'); $descElt->setValue(__('Use the * character to replace any string')); $this->form->addElement($descElt); $filters[] = 'desc'; $defaultProperties = tao_helpers_form_GenerisFormFactory::getDefaultProperties(); $classProperties = tao_helpers_form_GenerisFormFactory::getClassProperties($this->clazz, $this->getTopClazz()); $properties = array_merge($defaultProperties, $classProperties); isset($this->options['recursive']) ? $recursive = $this->options['recursive'] : ($recursive = false); if ($recursive) { foreach ($this->clazz->getSubClasses(true) as $subClass) { $properties = array_merge($subClass->getProperties(false), $properties); } } foreach ($properties as $property) { $element = tao_helpers_form_GenerisFormFactory::elementMap($property); if (!is_null($element) && !$element instanceof tao_helpers_form_elements_Authoring && !$element instanceof tao_helpers_form_elements_Hiddenbox && !$element instanceof tao_helpers_form_elements_Hidden) { if ($element instanceof tao_helpers_form_elements_MultipleElement) { $newElement = tao_helpers_form_FormFactory::getElement($element->getName(), 'Checkbox'); $newElement->setDescription($element->getDescription()); $newElement->setOptions($element->getOptions()); $element = $newElement; } if ($element instanceof tao_helpers_form_elements_Htmlarea) { $newElement = tao_helpers_form_FormFactory::getElement($element->getName(), 'Textarea'); $newElement->setDescription($element->getDescription()); $element = $newElement; } $this->form->addElement($element); $filters[] = $element->getName(); } } $this->form->createGroup('filters', __('Filters'), $filters); }
/** * Initialize the form elements * * @access protected * @author Bertrand Chevrier, <*****@*****.**> * @return mixed */ protected function initElements() { parent::initElements(); $elements = $this->form->getElements(); $this->form->setElements(array()); $currentLangElt = tao_helpers_form_FormFactory::getElement('current_lang', 'Textbox'); $currentLangElt->setDescription(__('Current language')); $currentLangElt->setAttributes(array('readonly' => 'true')); $currentLangElt->setValue(\common_session_SessionManager::getSession()->getDataLanguage()); //API lang /data lang $this->form->addElement($currentLangElt); $dataLangElement = tao_helpers_form_FormFactory::getElement('translate_lang', 'Combobox'); $dataLangElement->setDescription(__('Translate to')); $dataLangElement->setOptions(tao_helpers_I18n::getAvailableLangsByUsage(new core_kernel_classes_Resource(INSTANCE_LANGUAGE_USAGE_DATA))); $dataLangElement->setEmptyOption(__('Select a language')); $dataLangElement->addValidator(tao_helpers_form_FormFactory::getValidator('NotEmpty')); $this->form->addElement($dataLangElement); $this->form->createGroup('translation_info', __('Translation parameters'), array('current_lang', 'translate_lang')); $dataGroup = array(); foreach ($elements as $element) { if ($element instanceof tao_helpers_form_elements_Hidden || $element->getName() == 'uri' || $element->getName() == 'classUri') { $this->form->addElement($element); } else { $propertyUri = tao_helpers_Uri::decode($element->getName()); $property = new core_kernel_classes_Property($propertyUri); //translate only language dependent properties or Labels //supported widget are: Textbox, TextArea, HtmlArea //@todo support other widgets if ($property->isLgDependent() && ($element instanceof tao_helpers_form_elements_Textbox || $element instanceof tao_helpers_form_elements_TextArea || $element instanceof tao_helpers_form_elements_HtmlArea) || $propertyUri == RDFS_LABEL) { $translatedElt = clone $element; $viewElt = tao_helpers_form_FormFactory::getElement('view_' . $element->getName(), 'Label'); $viewElt->setDescription($element->getDescription()); $viewElt->setValue($element->getValue()); $viewElt->setAttribute('no-format', true); if ($element instanceof tao_helpers_form_elements_HtmlArea) { $viewElt->setAttribute('htmlentities', false); } $this->form->addElement($viewElt); $dataGroup[] = $viewElt->getName(); $translatedElt->setDescription(' '); $translatedElt->setValue(''); if ($propertyUri == RDFS_LABEL) { $translatedElt->setForcedValid(); } $this->form->addElement($translatedElt); $dataGroup[] = $translatedElt->getName(); } } } $this->form->createGroup('translation_form', __('Translate'), $dataGroup); }
/** * Render the form to translate a Resource instance * @return void * @requiresRight id WRITE */ public function translateInstance() { $instance = $this->getCurrentInstance(); $formContainer = new tao_actions_form_Translate($this->getCurrentClass(), $instance); $myForm = $formContainer->getForm(); if ($this->hasRequestParameter('target_lang')) { $targetLang = $this->getRequestParameter('target_lang'); if (in_array($targetLang, tao_helpers_I18n::getAvailableLangsByUsage(new core_kernel_classes_Resource(INSTANCE_LANGUAGE_USAGE_DATA)))) { $langElt = $myForm->getElement('translate_lang'); $langElt->setValue($targetLang); $langElt->setAttribute('readonly', 'true'); $trData = $this->getClassService()->getTranslatedProperties($instance, $targetLang); foreach ($trData as $key => $value) { $element = $myForm->getElement(tao_helpers_Uri::encode($key)); if (!is_null($element)) { $element->setValue($value); } } } } if ($myForm->isSubmited()) { if ($myForm->isValid()) { $values = $myForm->getValues(); if (isset($values['translate_lang'])) { $datalang = common_session_SessionManager::getSession()->getDataLanguage(); $lang = $values['translate_lang']; $translated = 0; foreach ($values as $key => $value) { if (preg_match("/^http/", $key)) { $value = trim($value); $property = new core_kernel_classes_Property($key); if (empty($value)) { if ($datalang != $lang && $lang != '') { $instance->removePropertyValueByLg($property, $lang); } } else { if ($instance->editPropertyValueByLg($property, $value, $lang)) { $translated++; } } } } if ($translated > 0) { $this->setData('message', __('Translation saved')); } } } } $this->setData('myForm', $myForm->render()); $this->setData('formTitle', __('Translate')); $this->setView('form.tpl', 'tao'); }