core-bundle/src/Resources/contao/drivers/DC_Folder.php
protected function save($varValue)
	{
		if (Input::post('FORM_SUBMIT') != $this->strTable)
		{
			return;
		}

		$arrData = $GLOBALS['TL_DCA'][$this->strTable]['fields'][$this->strField];

		// File names
		if ($this->strField == 'name')
		{
			if (!file_exists($this->strRootDir . '/' . $this->strPath . '/' . $this->varValue . $this->strExtension) || !$this->isMounted($this->strPath . '/' . $this->varValue . $this->strExtension) || $this->varValue === $varValue)
			{
				return;
			}

			$this->import(Files::class, 'Files');

			// Trigger the save_callback
			if (\is_array($arrData['save_callback']))
			{
				foreach ($arrData['save_callback'] as $callback)
				{
					if (\is_array($callback))
					{
						$this->import($callback[0]);
						$varValue = $this->{$callback[0]}->{$callback[1]}($varValue, $this);
					}
					elseif (\is_callable($callback))
					{
						$varValue = $callback($varValue, $this);
					}
				}
			}

			// The target exists
			if (strcasecmp($this->strPath . '/' . $this->varValue . $this->strExtension, $this->strPath . '/' . $varValue . $this->strExtension) !== 0 && file_exists($this->strRootDir . '/' . $this->strPath . '/' . $varValue . $this->strExtension))
			{
				throw new \Exception(sprintf($GLOBALS['TL_LANG']['ERR']['fileExists'], $varValue));
			}

			$arrImageTypes = StringUtil::trimsplit(',', strtolower(Config::get('validImageTypes')));

			// Remove potentially existing thumbnails (see #6641)
			if (\in_array(substr($this->strExtension, 1), $arrImageTypes))
			{
				foreach (glob(System::getContainer()->getParameter('contao.image.target_dir') . '/*/' . $this->varValue . '-*' . $this->strExtension) as $strThumbnail)
				{
					$this->Files->delete(StringUtil::stripRootDir($strThumbnail));
				}
			}

			// Rename the file
			$this->Files->rename($this->strPath . '/' . $this->varValue . $this->strExtension, $this->strPath . '/' . $varValue . $this->strExtension);

			// New folders
			if (stripos($this->intId, '__new__') !== false)
			{
				// Update the database
				if ($this->blnIsDbAssisted && Dbafs::shouldBeSynchronized($this->strPath . '/' . $varValue . $this->strExtension))
				{
					$this->objActiveRecord = Dbafs::addResource($this->strPath . '/' . $varValue . $this->strExtension);
				}

				$this->log('Folder "'.$this->strPath.'/'.$varValue.$this->strExtension.'" has been created', __METHOD__, TL_FILES);
			}
			else
			{
				// Update the database
				if ($this->blnIsDbAssisted)
				{
					$syncSource = Dbafs::shouldBeSynchronized($this->strPath . '/' . $this->varValue . $this->strExtension);
					$syncTarget = Dbafs::shouldBeSynchronized($this->strPath . '/' . $varValue . $this->strExtension);

					if ($syncSource && $syncTarget)
					{
						Dbafs::moveResource($this->strPath . '/' . $this->varValue . $this->strExtension, $this->strPath . '/' . $varValue . $this->strExtension);
					}
					elseif ($syncSource)
					{
						Dbafs::deleteResource($this->strPath . '/' . $this->varValue . $this->strExtension);
					}
					elseif ($syncTarget)
					{
						Dbafs::addResource($this->strPath . '/' . $varValue . $this->strExtension);
					}

					$this->blnCreateNewVersion = true;
				}

				$this->log('File or folder "'.$this->strPath.'/'.$this->varValue.$this->strExtension.'" has been renamed to "'.$this->strPath.'/'.$varValue.$this->strExtension.'"', __METHOD__, TL_FILES);
			}

			$strWebDir = StringUtil::stripRootDir(System::getContainer()->getParameter('contao.web_dir'));

			// Update the symlinks
			if (is_link($this->strRootDir . '/' . $strWebDir . '/' . $this->strPath . '/' . $this->varValue . $this->strExtension))
			{
				$this->Files->delete($strWebDir . '/' . $this->strPath . '/' . $this->varValue . $this->strExtension);
				SymlinkUtil::symlink($this->strPath . '/' . $varValue . $this->strExtension, $strWebDir . '/' . $this->strPath . '/' . $varValue . $this->strExtension, $this->strRootDir);
			}

			// Set the new value so the input field can show it
			if (Input::get('act') == 'editAll')
			{
				/** @var Session $objSession */
				$objSession = System::getContainer()->get('session');

				$session = $objSession->all();

				if (($index = array_search($this->strPath.'/'.$this->varValue.$this->strExtension, $session['CURRENT']['IDS'])) !== false)
				{
					$session['CURRENT']['IDS'][$index] = $this->strPath.'/'.$varValue.$this->strExtension;
					$objSession->replace($session);
				}
			}

			$this->varValue = $varValue;
		}
		elseif ($this->blnIsDbAssisted && $this->objActiveRecord !== null)
		{
			// Convert date formats into timestamps
			if ($varValue !== null && $varValue !== '' && \in_array($arrData['eval']['rgxp'], array('date', 'time', 'datim')))
			{
				$objDate = new Date($varValue, Date::getFormatFromRgxp($arrData['eval']['rgxp']));
				$varValue = $objDate->tstamp;
			}

			// Make sure unique fields are unique
			if ($arrData['eval']['unique'] && $varValue != '' && !$this->Database->isUniqueValue($this->strTable, $this->strField, $varValue, $this->objActiveRecord->id))
			{
				throw new \Exception(sprintf($GLOBALS['TL_LANG']['ERR']['unique'], $arrData['label'][0] ?: $this->strField));
			}

			// Handle multi-select fields in "override all" mode
			if (Input::get('act') == 'overrideAll' && ($arrData['inputType'] == 'checkbox' || $arrData['inputType'] == 'checkboxWizard') && $arrData['eval']['multiple'])
			{
				if ($this->objActiveRecord !== null)
				{
					$new = StringUtil::deserialize($varValue, true);
					$old = StringUtil::deserialize($this->objActiveRecord->{$this->strField}, true);

					switch (Input::post($this->strInputName . '_update'))
					{
						case 'add':
							$varValue = array_values(array_unique(array_merge($old, $new)));
							break;

						case 'remove':
							$varValue = array_values(array_diff($old, $new));
							break;

						case 'replace':
							$varValue = $new;
							break;
					}

					if (empty($varValue) || !\is_array($varValue))
					{
						$varValue = '';
					}
					elseif (isset($arrData['eval']['csv']))
					{
						$varValue = implode($arrData['eval']['csv'], $varValue); // see #2890
					}
					else
					{
						$varValue = serialize($varValue);
					}
				}
			}

			// Convert arrays (see #2890)
			if ($arrData['eval']['multiple'] && isset($arrData['eval']['csv']))
			{
				$varValue = implode($arrData['eval']['csv'], StringUtil::deserialize($varValue, true));
			}

			// Trigger the save_callback
			if (\is_array($arrData['save_callback']))
			{
				foreach ($arrData['save_callback'] as $callback)
				{
					if (\is_array($callback))
					{
						$this->import($callback[0]);
						$varValue = $this->{$callback[0]}->{$callback[1]}($varValue, $this);
					}
					elseif (\is_callable($callback))
					{
						$varValue = $callback($varValue, $this);
					}
				}
			}

			// Save the value if there was no error
			if (($varValue != '' || !$arrData['eval']['doNotSaveEmpty']) && ($this->varValue != $varValue || $arrData['eval']['alwaysSave']))
			{
				// If the field is a fallback field, empty all other columns
				if ($arrData['eval']['fallback'] && $varValue != '')
				{
					$this->Database->execute("UPDATE " . $this->strTable . " SET " . $this->strField . "=''");
				}

				// Set the correct empty value (see #6284, #6373)
				if ($varValue === '')
				{
					$varValue = Widget::getEmptyValueByFieldType($GLOBALS['TL_DCA'][$this->strTable]['fields'][$this->strField]['sql']);
				}

				$this->objActiveRecord->{$this->strField} = $varValue;
				$this->objActiveRecord->save();

				$this->blnCreateNewVersion = true;
				$this->varValue = StringUtil::deserialize($varValue);
			}
		}
	}
protected function save($varValue)
	{
		if (Input::post('FORM_SUBMIT') != $this->strTable)
		{
			return;
		}

		$arrData = $GLOBALS['TL_DCA'][$this->strTable]['fields'][$this->strField];

		// File names
		if ($this->strField == 'name')
		{
			if (!file_exists($this->strRootDir . '/' . $this->strPath . '/' . $this->varValue . $this->strExtension) || !$this->isMounted($this->strPath . '/' . $this->varValue . $this->strExtension) || $this->varValue === $varValue)
			{
				return;
			}

			$this->import(Files::class, 'Files');

			// Trigger the save_callback
			if (\is_array($arrData['save_callback']))
			{
				foreach ($arrData['save_callback'] as $callback)
				{
					if (\is_array($callback))
					{
						$this->import($callback[0]);
						$varValue = $this->{$callback[0]}->{$callback[1]}($varValue, $this);
					}
					elseif (\is_callable($callback))
					{
						$varValue = $callback($varValue, $this);
					}
				}
			}

			// The target exists
			if (strcasecmp($this->strPath . '/' . $this->varValue . $this->strExtension, $this->strPath . '/' . $varValue . $this->strExtension) !== 0 && file_exists($this->strRootDir . '/' . $this->strPath . '/' . $varValue . $this->strExtension))
			{
				throw new \Exception(sprintf($GLOBALS['TL_LANG']['ERR']['fileExists'], $varValue));
			}

			$arrImageTypes = StringUtil::trimsplit(',', strtolower(Config::get('validImageTypes')));

			// Remove potentially existing thumbnails (see #6641)
			if (\in_array(substr($this->strExtension, 1), $arrImageTypes))
			{
				foreach (glob(System::getContainer()->getParameter('contao.image.target_dir') . '/*/' . $this->varValue . '-*' . $this->strExtension) as $strThumbnail)
				{
					$this->Files->delete(StringUtil::stripRootDir($strThumbnail));
				}
			}

			// Rename the file
			$this->Files->rename($this->strPath . '/' . $this->varValue . $this->strExtension, $this->strPath . '/' . $varValue . $this->strExtension);

			// New folders
			if (stripos($this->intId, '__new__') !== false)
			{
				// Update the database
				if ($this->blnIsDbAssisted && Dbafs::shouldBeSynchronized($this->strPath . '/' . $varValue . $this->strExtension))
				{
					$this->objActiveRecord = Dbafs::addResource($this->strPath . '/' . $varValue . $this->strExtension);
				}

				$this->log('Folder "'.$this->strPath.'/'.$varValue.$this->strExtension.'" has been created', __METHOD__, TL_FILES);
			}
			else
			{
				// Update the database
				if ($this->blnIsDbAssisted)
				{
					$syncSource = Dbafs::shouldBeSynchronized($this->strPath . '/' . $this->varValue . $this->strExtension);
					$syncTarget = Dbafs::shouldBeSynchronized($this->strPath . '/' . $varValue . $this->strExtension);

					if ($syncSource && $syncTarget)
					{
						Dbafs::moveResource($this->strPath . '/' . $this->varValue . $this->strExtension, $this->strPath . '/' . $varValue . $this->strExtension);
					}
					elseif ($syncSource)
					{
						Dbafs::deleteResource($this->strPath . '/' . $this->varValue . $this->strExtension);
					}
					elseif ($syncTarget)
					{
						Dbafs::addResource($this->strPath . '/' . $varValue . $this->strExtension);
					}

					$this->blnCreateNewVersion = true;
				}

				$this->log('File or folder "'.$this->strPath.'/'.$this->varValue.$this->strExtension.'" has been renamed to "'.$this->strPath.'/'.$varValue.$this->strExtension.'"', __METHOD__, TL_FILES);
			}

			$strWebDir = StringUtil::stripRootDir(System::getContainer()->getParameter('contao.web_dir'));

			// Update the symlinks
			if (is_link($this->strRootDir . '/' . $strWebDir . '/' . $this->strPath . '/' . $this->varValue . $this->strExtension))
			{
				$this->Files->delete($strWebDir . '/' . $this->strPath . '/' . $this->varValue . $this->strExtension);
				SymlinkUtil::symlink($this->strPath . '/' . $varValue . $this->strExtension, $strWebDir . '/' . $this->strPath . '/' . $varValue . $this->strExtension, $this->strRootDir);
			}

			// Set the new value so the input field can show it
			if (Input::get('act') == 'editAll')
			{
				/** @var Session $objSession */
				$objSession = System::getContainer()->get('session');

				$session = $objSession->all();

				if (($index = array_search($this->strPath.'/'.$this->varValue.$this->strExtension, $session['CURRENT']['IDS'])) !== false)
				{
					$session['CURRENT']['IDS'][$index] = $this->strPath.'/'.$varValue.$this->strExtension;
					$objSession->replace($session);
				}
			}

			$this->varValue = $varValue;
		}
		elseif ($this->blnIsDbAssisted && $this->objActiveRecord !== null)
		{
			// Convert date formats into timestamps
			if ($varValue !== null && $varValue !== '' && \in_array($arrData['eval']['rgxp'], array('date', 'time', 'datim')))
			{
				$objDate = new Date($varValue, Date::getFormatFromRgxp($arrData['eval']['rgxp']));
				$varValue = $objDate->tstamp;
			}

			// Make sure unique fields are unique
			if ($arrData['eval']['unique'] && $varValue != '' && !$this->Database->isUniqueValue($this->strTable, $this->strField, $varValue, $this->objActiveRecord->id))
			{
				throw new \Exception(sprintf($GLOBALS['TL_LANG']['ERR']['unique'], $arrData['label'][0] ?: $this->strField));
			}

			// Handle multi-select fields in "override all" mode
			if (Input::get('act') == 'overrideAll' && ($arrData['inputType'] == 'checkbox' || $arrData['inputType'] == 'checkboxWizard') && $arrData['eval']['multiple'])
			{
				if ($this->objActiveRecord !== null)
				{
					$new = StringUtil::deserialize($varValue, true);
					$old = StringUtil::deserialize($this->objActiveRecord->{$this->strField}, true);

					switch (Input::post($this->strInputName . '_update'))
					{
						case 'add':
							$varValue = array_values(array_unique(array_merge($old, $new)));
							break;

						case 'remove':
							$varValue = array_values(array_diff($old, $new));
							break;

						case 'replace':
							$varValue = $new;
							break;
					}

					if (empty($varValue) || !\is_array($varValue))
					{
						$varValue = '';
					}
					elseif (isset($arrData['eval']['csv']))
					{
						$varValue = implode($arrData['eval']['csv'], $varValue); // see #2890
					}
					else
					{
						$varValue = serialize($varValue);
					}
				}
			}

			// Convert arrays (see #2890)
			if ($arrData['eval']['multiple'] && isset($arrData['eval']['csv']))
			{
				$varValue = implode($arrData['eval']['csv'], StringUtil::deserialize($varValue, true));
			}

			// Trigger the save_callback
			if (\is_array($arrData['save_callback']))
			{
				foreach ($arrData['save_callback'] as $callback)
				{
					if (\is_array($callback))
					{
						$this->import($callback[0]);
						$varValue = $this->{$callback[0]}->{$callback[1]}($varValue, $this);
					}
					elseif (\is_callable($callback))
					{
						$varValue = $callback($varValue, $this);
					}
				}
			}

			// Save the value if there was no error
			if (($varValue != '' || !$arrData['eval']['doNotSaveEmpty']) && ($this->varValue != $varValue || $arrData['eval']['alwaysSave']))
			{
				// If the field is a fallback field, empty all other columns
				if ($arrData['eval']['fallback'] && $varValue != '')
				{
					$this->Database->execute("UPDATE " . $this->strTable . " SET " . $this->strField . "=''");
				}

				// Set the correct empty value (see #6284, #6373)
				if ($varValue === '')
				{
					$varValue = Widget::getEmptyValueByFieldType($GLOBALS['TL_DCA'][$this->strTable]['fields'][$this->strField]['sql']);
				}

				$this->objActiveRecord->{$this->strField} = $varValue;
				$this->objActiveRecord->save();

				$this->blnCreateNewVersion = true;
				$this->varValue = StringUtil::deserialize($varValue);
			}
		}
	}
protected function save ( $ varValue ) { if ( Input :: post ( 'FORM_SUBMIT' ) != $ this -> strTable ) { return ; } $ arrData = $ GLOBALS [ 'TL_DCA' ] [ $ this -> strTable ] [ 'fields' ] [ $ this -> strField ] ; // File names if ( $ this -> strField == 'name' ) { if ( ! file_exists ( $ this -> strRootDir . '/' . $ this -> strPath . '/' . $ this -> varValue . $ this -> strExtension ) || ! $ this -> isMounted ( $ this -> strPath . '/' . $ this -> varValue . $ this -> strExtension ) || $ this -> varValue === $ varValue ) { return ; } $ this -> import ( Files :: class , 'Files' ) ; // Trigger the save_callback if ( \ is_array ( $ arrData [ 'save_callback' ] ) ) { foreach ( $ arrData [ 'save_callback' ] as $ callback ) { if ( \ is_array ( $ callback ) ) { $ this -> import ( $ callback [ 0 ] ) ; $ varValue = $ this -> { $ callback [ 0 ] } -> { $ callback [ 1 ] } ( $ varValue , $ this ) ; } elseif ( \ is_callable ( $ callback ) ) { $ varValue = $ callback ( $ varValue , $ this ) ; } } } // The target exists if ( strcasecmp ( $ this -> strPath . '/' . $ this -> varValue . $ this -> strExtension , $ this -> strPath . '/' . $ varValue . $ this -> strExtension ) !== 0 && file_exists ( $ this -> strRootDir . '/' . $ this -> strPath . '/' . $ varValue . $ this -> strExtension ) ) { throw new \ Exception ( sprintf ( $ GLOBALS [ 'TL_LANG' ] [ 'ERR' ] [ 'fileExists' ] , $ varValue ) ) ; } $ arrImageTypes = StringUtil :: trimsplit ( ',' , strtolower ( Config :: get ( 'validImageTypes' ) ) ) ; // Remove potentially existing thumbnails (see #6641) if ( \ in_array ( substr ( $ this -> strExtension , 1 ) , $ arrImageTypes ) ) { foreach ( glob ( System :: getContainer ( ) -> getParameter ( 'contao.image.target_dir' ) . '/*/' . $ this -> varValue . '-*' . $ this -> strExtension ) as $ strThumbnail ) { $ this -> Files -> delete ( StringUtil :: stripRootDir ( $ strThumbnail ) ) ; } } // Rename the file $ this -> Files -> rename ( $ this -> strPath . '/' . $ this -> varValue . $ this -> strExtension , $ this -> strPath . '/' . $ varValue . $ this -> strExtension ) ; // New folders if ( stripos ( $ this -> intId , '__new__' ) !== false ) { // Update the database if ( $ this -> blnIsDbAssisted && Dbafs :: shouldBeSynchronized ( $ this -> strPath . '/' . $ varValue . $ this -> strExtension ) ) { $ this -> objActiveRecord = Dbafs :: addResource ( $ this -> strPath . '/' . $ varValue . $ this -> strExtension ) ; } $ this -> log ( 'Folder "' . $ this -> strPath . '/' . $ varValue . $ this -> strExtension . '" has been created' , __METHOD__ , TL_FILES ) ; } else { // Update the database if ( $ this -> blnIsDbAssisted ) { $ syncSource = Dbafs :: shouldBeSynchronized ( $ this -> strPath . '/' . $ this -> varValue . $ this -> strExtension ) ; $ syncTarget = Dbafs :: shouldBeSynchronized ( $ this -> strPath . '/' . $ varValue . $ this -> strExtension ) ; if ( $ syncSource && $ syncTarget ) { Dbafs :: moveResource ( $ this -> strPath . '/' . $ this -> varValue . $ this -> strExtension , $ this -> strPath . '/' . $ varValue . $ this -> strExtension ) ; } elseif ( $ syncSource ) { Dbafs :: deleteResource ( $ this -> strPath . '/' . $ this -> varValue . $ this -> strExtension ) ; } elseif ( $ syncTarget ) { Dbafs :: addResource ( $ this -> strPath . '/' . $ varValue . $ this -> strExtension ) ; } $ this -> blnCreateNewVersion = true ; } $ this -> log ( 'File or folder "' . $ this -> strPath . '/' . $ this -> varValue . $ this -> strExtension . '" has been renamed to "' . $ this -> strPath . '/' . $ varValue . $ this -> strExtension . '"' , __METHOD__ , TL_FILES ) ; } $ strWebDir = StringUtil :: stripRootDir ( System :: getContainer ( ) -> getParameter ( 'contao.web_dir' ) ) ; // Update the symlinks if ( is_link ( $ this -> strRootDir . '/' . $ strWebDir . '/' . $ this -> strPath . '/' . $ this -> varValue . $ this -> strExtension ) ) { $ this -> Files -> delete ( $ strWebDir . '/' . $ this -> strPath . '/' . $ this -> varValue . $ this -> strExtension ) ; SymlinkUtil :: symlink ( $ this -> strPath . '/' . $ varValue . $ this -> strExtension , $ strWebDir . '/' . $ this -> strPath . '/' . $ varValue . $ this -> strExtension , $ this -> strRootDir ) ; } // Set the new value so the input field can show it if ( Input :: get ( 'act' ) == 'editAll' ) { /** @var Session $objSession */ $ objSession = System :: getContainer ( ) -> get ( 'session' ) ; $ session = $ objSession -> all ( ) ; if ( ( $ index = array_search ( $ this -> strPath . '/' . $ this -> varValue . $ this -> strExtension , $ session [ 'CURRENT' ] [ 'IDS' ] ) ) !== false ) { $ session [ 'CURRENT' ] [ 'IDS' ] [ $ index ] = $ this -> strPath . '/' . $ varValue . $ this -> strExtension ; $ objSession -> replace ( $ session ) ; } } $ this -> varValue = $ varValue ; } elseif ( $ this -> blnIsDbAssisted && $ this -> objActiveRecord !== null ) { // Convert date formats into timestamps if ( $ varValue !== null && $ varValue !== '' && \ in_array ( $ arrData [ 'eval' ] [ 'rgxp' ] , array ( 'date' , 'time' , 'datim' ) ) ) { $ objDate = new Date ( $ varValue , Date :: getFormatFromRgxp ( $ arrData [ 'eval' ] [ 'rgxp' ] ) ) ; $ varValue = $ objDate -> tstamp ; } // Make sure unique fields are unique if ( $ arrData [ 'eval' ] [ 'unique' ] && $ varValue != '' && ! $ this -> Database -> isUniqueValue ( $ this -> strTable , $ this -> strField , $ varValue , $ this -> objActiveRecord -> id ) ) { throw new \ Exception ( sprintf ( $ GLOBALS [ 'TL_LANG' ] [ 'ERR' ] [ 'unique' ] , $ arrData [ 'label' ] [ 0 ] ? : $ this -> strField ) ) ; } // Handle multi-select fields in "override all" mode if ( Input :: get ( 'act' ) == 'overrideAll' && ( $ arrData [ 'inputType' ] == 'checkbox' || $ arrData [ 'inputType' ] == 'checkboxWizard' ) && $ arrData [ 'eval' ] [ 'multiple' ] ) { if ( $ this -> objActiveRecord !== null ) { $ new = StringUtil :: deserialize ( $ varValue , true ) ; $ old = StringUtil :: deserialize ( $ this -> objActiveRecord -> { $ this -> strField } , true ) ; switch ( Input :: post ( $ this -> strInputName . '_update' ) ) { case 'add' : $ varValue = array_values ( array_unique ( array_merge ( $ old , $ new ) ) ) ; break ; case 'remove' : $ varValue = array_values ( array_diff ( $ old , $ new ) ) ; break ; case 'replace' : $ varValue = $ new ; break ; } if ( empty ( $ varValue ) || ! \ is_array ( $ varValue ) ) { $ varValue = '' ; } elseif ( isset ( $ arrData [ 'eval' ] [ 'csv' ] ) ) { $ varValue = implode ( $ arrData [ 'eval' ] [ 'csv' ] , $ varValue ) ; // see #2890 } else { $ varValue = serialize ( $ varValue ) ; } } } // Convert arrays (see #2890) if ( $ arrData [ 'eval' ] [ 'multiple' ] && isset ( $ arrData [ 'eval' ] [ 'csv' ] ) ) { $ varValue = implode ( $ arrData [ 'eval' ] [ 'csv' ] , StringUtil :: deserialize ( $ varValue , true ) ) ; } // Trigger the save_callback if ( \ is_array ( $ arrData [ 'save_callback' ] ) ) { foreach ( $ arrData [ 'save_callback' ] as $ callback ) { if ( \ is_array ( $ callback ) ) { $ this -> import ( $ callback [ 0 ] ) ; $ varValue = $ this -> { $ callback [ 0 ] } -> { $ callback [ 1 ] } ( $ varValue , $ this ) ; } elseif ( \ is_callable ( $ callback ) ) { $ varValue = $ callback ( $ varValue , $ this ) ; } } } // Save the value if there was no error if ( ( $ varValue != '' || ! $ arrData [ 'eval' ] [ 'doNotSaveEmpty' ] ) && ( $ this -> varValue != $ varValue || $ arrData [ 'eval' ] [ 'alwaysSave' ] ) ) { // If the field is a fallback field, empty all other columns if ( $ arrData [ 'eval' ] [ 'fallback' ] && $ varValue != '' ) { $ this -> Database -> execute ( "UPDATE " . $ this -> strTable . " SET " . $ this -> strField . "=''" ) ; } // Set the correct empty value (see #6284, #6373) if ( $ varValue === '' ) { $ varValue = Widget :: getEmptyValueByFieldType ( $ GLOBALS [ 'TL_DCA' ] [ $ this -> strTable ] [ 'fields' ] [ $ this -> strField ] [ 'sql' ] ) ; } $ this -> objActiveRecord -> { $ this -> strField } = $ varValue ; $ this -> objActiveRecord -> save ( ) ; $ this -> blnCreateNewVersion = true ; $ this -> varValue = StringUtil :: deserialize ( $ varValue ) ; } } }
Save the current value

@param mixed $varValue

@throws \Exception
Save the current value