core-bundle/src/Resources/contao/widgets/MetaWizard.php
public function generate()
	{
		$count = 0;
		$return = '';

		$this->import(Database::class, 'Database');
		$this->import(BackendUser::class, 'User');

		// Only show the root page languages (see #7112, #7667)
		$objRootLangs = $this->Database->query("SELECT REPLACE(language, '-', '_') AS language FROM tl_page WHERE type='root'");
		$existing = $objRootLangs->fetchEach('language');

		foreach ($existing as $lang)
		{
			if (!isset($this->varValue[$lang]))
			{
				$this->varValue[$lang] = array();
			}
		}

		// No languages defined in the site structure
		if (empty($this->varValue) || !\is_array($this->varValue))
		{
			return '<p class="tl_info">' . $GLOBALS['TL_LANG']['MSC']['metaNoLanguages'] . '</p>';
		}

		$languages = $this->getLanguages(true);

		// Add the existing entries
		if (!empty($this->varValue))
		{
			$return = '<ul id="ctrl_' . $this->strId . '" class="tl_metawizard dcapicker">';

			// 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] ?? $lang) . ' ' . Image::getHtml('delete.svg', '', 'class="tl_metawizard_img" title="' . $GLOBALS['TL_LANG']['MSC']['delete'] . '" onclick="Backend.metaDelete(this)"') . '</span>';

				// Take the fields from the DCA (see #4327)
				foreach ($this->metaFields as $field=>$fieldConfig)
				{
					$return .= '<label for="ctrl_' . $field . '_' . $count . '">' . $GLOBALS['TL_LANG']['MSC']['aw_' . $field] . '</label> <input type="text" name="' . $this->strId . '[' . $lang . '][' . $field . ']" id="ctrl_' . $field . '_' . $count . '" class="tl_text" value="' . StringUtil::specialchars($meta[$field]) . '"' . (!empty($fieldConfig['attributes']) ? ' ' . $fieldConfig['attributes'] : '') . '>';

					// DCA picker
					if (isset($fieldConfig['dcaPicker']) && (\is_array($fieldConfig['dcaPicker']) || $fieldConfig['dcaPicker'] === true))
					{
						$return .= Backend::getDcaPickerWizard($fieldConfig['dcaPicker'], $this->strTable, $this->strField, $field . '_' . $count);
					}

					$return .= '<br>';
				}

				$return .= '
    </li>';

				unset($languages[$lang]);
				++$count;
			}

			$return .= '
  </ul>';
		}

		$options = array('<option value="">-</option>');

		// Add the remaining languages
		foreach ($languages as $k=>$v)
		{
			$options[] = '<option value="' . $k . '">' . $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="' . StringUtil::specialchars($GLOBALS['TL_LANG']['MSC']['aw_new']) . '" onclick="Backend.metaWizard(this,\'ctrl_' . $this->strId . '\')">
  </div>';

		return $return;
	}
public function generate()
	{
		$count = 0;
		$return = '';

		$this->import(Database::class, 'Database');
		$this->import(BackendUser::class, 'User');

		// Only show the root page languages (see #7112, #7667)
		$objRootLangs = $this->Database->query("SELECT REPLACE(language, '-', '_') AS language FROM tl_page WHERE type='root'");
		$existing = $objRootLangs->fetchEach('language');

		foreach ($existing as $lang)
		{
			if (!isset($this->varValue[$lang]))
			{
				$this->varValue[$lang] = array();
			}
		}

		// No languages defined in the site structure
		if (empty($this->varValue) || !\is_array($this->varValue))
		{
			return '<p class="tl_info">' . $GLOBALS['TL_LANG']['MSC']['metaNoLanguages'] . '</p>';
		}

		$languages = $this->getLanguages(true);

		// Add the existing entries
		if (!empty($this->varValue))
		{
			$return = '<ul id="ctrl_' . $this->strId . '" class="tl_metawizard dcapicker">';

			// 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] ?? $lang) . ' ' . Image::getHtml('delete.svg', '', 'class="tl_metawizard_img" title="' . $GLOBALS['TL_LANG']['MSC']['delete'] . '" onclick="Backend.metaDelete(this)"') . '</span>';

				// Take the fields from the DCA (see #4327)
				foreach ($this->metaFields as $field=>$fieldConfig)
				{
					$return .= '<label for="ctrl_' . $field . '_' . $count . '">' . $GLOBALS['TL_LANG']['MSC']['aw_' . $field] . '</label> <input type="text" name="' . $this->strId . '[' . $lang . '][' . $field . ']" id="ctrl_' . $field . '_' . $count . '" class="tl_text" value="' . StringUtil::specialchars($meta[$field]) . '"' . (!empty($fieldConfig['attributes']) ? ' ' . $fieldConfig['attributes'] : '') . '>';

					// DCA picker
					if (isset($fieldConfig['dcaPicker']) && (\is_array($fieldConfig['dcaPicker']) || $fieldConfig['dcaPicker'] === true))
					{
						$return .= Backend::getDcaPickerWizard($fieldConfig['dcaPicker'], $this->strTable, $this->strField, $field . '_' . $count);
					}

					$return .= '<br>';
				}

				$return .= '
    </li>';

				unset($languages[$lang]);
				++$count;
			}

			$return .= '
  </ul>';
		}

		$options = array('<option value="">-</option>');

		// Add the remaining languages
		foreach ($languages as $k=>$v)
		{
			$options[] = '<option value="' . $k . '">' . $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="' . StringUtil::specialchars($GLOBALS['TL_LANG']['MSC']['aw_new']) . '" onclick="Backend.metaWizard(this,\'ctrl_' . $this->strId . '\')">
  </div>';

		return $return;
	}
public function generate ( ) { $ count = 0 ; $ return = '' ; $ this -> import ( Database :: class , 'Database' ) ; $ this -> import ( BackendUser :: class , 'User' ) ; // Only show the root page languages (see #7112, #7667) $ objRootLangs = $ this -> Database -> query ( "SELECT REPLACE(language, '-', '_') AS language FROM tl_page WHERE type='root'" ) ; $ existing = $ objRootLangs -> fetchEach ( 'language' ) ; foreach ( $ existing as $ lang ) { if ( ! isset ( $ this -> varValue [ $ lang ] ) ) { $ this -> varValue [ $ lang ] = array ( ) ; } } // No languages defined in the site structure if ( empty ( $ this -> varValue ) || ! \ is_array ( $ this -> varValue ) ) { return '<p class="tl_info">' . $ GLOBALS [ 'TL_LANG' ] [ 'MSC' ] [ 'metaNoLanguages' ] . '</p>' ; } $ languages = $ this -> getLanguages ( true ) ; // Add the existing entries if ( ! empty ( $ this -> varValue ) ) { $ return = '<ul id="ctrl_' . $ this -> strId . '" class="tl_metawizard dcapicker">' ; // 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 ] ?? $ lang ) . ' ' . Image :: getHtml ( 'delete.svg' , '' , 'class="tl_metawizard_img" title="' . $ GLOBALS [ 'TL_LANG' ] [ 'MSC' ] [ 'delete' ] . '" onclick="Backend.metaDelete(this)"' ) . '</span>' ; // Take the fields from the DCA (see #4327) foreach ( $ this -> metaFields as $ field => $ fieldConfig ) { $ return .= '<label for="ctrl_' . $ field . '_' . $ count . '">' . $ GLOBALS [ 'TL_LANG' ] [ 'MSC' ] [ 'aw_' . $ field ] . '</label> <input type="text" name="' . $ this -> strId . '[' . $ lang . '][' . $ field . ']" id="ctrl_' . $ field . '_' . $ count . '" class="tl_text" value="' . StringUtil :: specialchars ( $ meta [ $ field ] ) . '"' . ( ! empty ( $ fieldConfig [ 'attributes' ] ) ? ' ' . $ fieldConfig [ 'attributes' ] : '' ) . '>' ; // DCA picker if ( isset ( $ fieldConfig [ 'dcaPicker' ] ) && ( \ is_array ( $ fieldConfig [ 'dcaPicker' ] ) || $ fieldConfig [ 'dcaPicker' ] === true ) ) { $ return .= Backend :: getDcaPickerWizard ( $ fieldConfig [ 'dcaPicker' ] , $ this -> strTable , $ this -> strField , $ field . '_' . $ count ) ; } $ return .= '<br>' ; } $ return .= '
    </li>' ; unset ( $ languages [ $ lang ] ) ; ++ $ count ; } $ return .= '
  </ul>' ; } $ options = array ( '<option value="">-</option>' ) ; // Add the remaining languages foreach ( $ languages as $ k => $ v ) { $ options [ ] = '<option value="' . $ k . '">' . $ 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="' . StringUtil :: specialchars ( $ GLOBALS [ 'TL_LANG' ] [ 'MSC' ] [ 'aw_new' ] ) . '" onclick="Backend.metaWizard(this,\'ctrl_' . $ this -> strId . '\')">
  </div>' ; return $ return ; }
Generate the widget and return it as string

@return string
Generate the widget and return it as string