/** * Generate the widget and return it as string * @return string */ public function generate() { $helper = MetafieldsHelper::getInstance(); $metafieldsPlus = $helper->getFields($this->activeRecord); if ($metafieldsPlus === null) { return parent::generate(); } // Make sure there is at least an empty array if (!is_array($this->varValue) || empty($this->varValue)) { $this->import('Contao\\BackendUser', 'User'); $this->varValue = array($this->User->language => array()); // see #4188 } $count = 0; $languages = $this->getLanguages(); $taken = array(); // Add the existing entries if (!empty($this->varValue)) { $return = '<ul id="ctrl_' . $this->strId . '" class="tl_metawizard tl_metawizard_plus">'; // Add the input fields foreach ($this->varValue as $lang => $meta) { $return .= '<li class="' . ($count % 2 == 0 ? 'even' : 'odd') . '" data-language="' . $lang . '">'; $return .= '<span class="lang">' . $languages[$lang] . ' ' . \Image::getHtml('delete.gif', '', 'class="tl_metawizard_img" onclick="Backend.metaDelete(this)" title="' . specialchars($GLOBALS['TL_LANG']['MSC']['aw_delete']) . '"') . '</span>'; $return .= '<label for="ctrl_title_' . $count . '">' . $GLOBALS['TL_LANG']['MSC']['aw_title'] . '</label> <input type="text" name="' . $this->strId . '[' . $lang . '][title]" id="ctrl_title_' . $count . '" class="tl_text" value="' . specialchars($meta['title']) . '"><br>'; $return .= '<label for="ctrl_link_' . $count . '">' . $GLOBALS['TL_LANG']['MSC']['aw_link'] . '</label> <input type="text" name="' . $this->strId . '[' . $lang . '][link]" id="ctrl_link_' . $count . '" class="tl_text" value="' . specialchars($meta['link']) . '"><br>'; $return .= '<label for="ctrl_caption_' . $count . '">' . $GLOBALS['TL_LANG']['MSC']['aw_caption'] . '</label> <input type="text" name="' . $this->strId . '[' . $lang . '][caption]" id="ctrl_caption_' . $count . '" class="tl_text" value="' . specialchars($meta['caption']) . '">'; // PlusFields foreach ($metafieldsPlus as $fieldname => $label) { $return .= '<label class="tl_metafields" for="ctrl_' . $fieldname . '_' . $count . '">' . $label . '</label> <input type="text" name="' . $this->strId . '[' . $lang . '][' . $fieldname . ']" id="ctrl_' . $fieldname . '_' . $count . '" class="tl_text tl_metafields" value="' . specialchars($meta[$fieldname]) . '"><br>'; } $return .= '</li>'; $taken[] = $lang; ++$count; } $return .= '</ul>'; } $options = array('<option value="">-</option>'); // Add the remaining languages foreach ($languages as $k => $v) { $options[] = '<option value="' . $k . '"' . (in_array($k, $taken) ? ' disabled' : '') . '>' . $v . '</option>'; } $return .= ' <div class="tl_metawizard_new"> <select name="' . $this->strId . '[language]" class="tl_select tl_chosen" onchange="Backend.toggleAddLanguageButton(this)">' . implode('', $options) . '</select> <input type="button" class="tl_submit" disabled value="' . specialchars($GLOBALS['TL_LANG']['MSC']['aw_new']) . '" onclick="Backend.metaWizard(this,\'ctrl_' . $this->strId . '\')"> </div>'; return $return; }
/** * Generate file i18nl10n meta wizard * * @return string */ public function generate() { $strForm = parent::generate(); $arrAvailableLanguages = I18nl10n::getInstance()->getAvailableLanguages(true, true); $arrLanguages = array_intersect_key($this->getLanguages(), array_flip($arrAvailableLanguages)); preg_match_all('@data-language="(.*?)"@', $strForm, $arrMatchTaken); $options = array('<option value="">-</option>'); $taken = array(); // Parse used languages foreach ($arrMatchTaken as $k => $v) { if ($k) { $taken[] = $v[0]; } } // Set language options foreach ($arrLanguages as $k => $v) { $options[] = '<option value="' . $k . '"' . (in_array($k, $taken) ? ' disabled' : '') . '>' . $v . '</option>'; } // Replace language select options $strForm = preg_replace('@(<select.*?>)(.*?)(<\\/select>)@', '${1}' . implode('', $options) . '${3}', $strForm); return $strForm; }