/**
  * @param array $arrValues
  * @param int $intFid
  * @return int
  */
 public static function saveValuesAndReturnFid(array $arrValues, $intFid = 0)
 {
     /* @var $objLanguages Languages */
     $objLanguages = \System::getContainer()->get('craffft.translation_fields.service.languages');
     $arrLanguageKeys = $objLanguages->getLanguageKeys();
     // Check if translation fields should not be empty saved
     if (!$GLOBALS['TL_CONFIG']['dontfillEmptyTranslationFields']) {
         // Add fallback text to empty values
         $arrValues = WidgetUtil::addFallbackValueToEmptyField($arrValues);
     }
     if (is_array($arrLanguageKeys) && count($arrLanguageKeys)) {
         foreach ($arrLanguageKeys as $strLanguageKey) {
             // If current fid is correct
             if (is_numeric($intFid) && $intFid > 0) {
                 // Get existing translation object by fid
                 $objTranslation = self::findOneByFidAndLanguage($intFid, $strLanguageKey);
                 // Get new translation object by fid
                 if ($objTranslation === null) {
                     // Create translation object
                     $objTranslation = new self();
                     $objTranslation->language = $strLanguageKey;
                     $objTranslation->fid = $intFid;
                 }
             }
             // Get new translation object with new fid
             if ($objTranslation === null) {
                 // Get next fid
                 $intFid = self::getNextFid();
                 // Create translation object
                 $objTranslation = new self();
                 $objTranslation->language = $strLanguageKey;
                 $objTranslation->fid = $intFid;
             }
             // Set content value
             if (isset($arrValues[$strLanguageKey])) {
                 $objTranslation->content = $arrValues[$strLanguageKey];
             }
             // Set current timestamp
             $objTranslation->tstamp = time();
             // Save
             $objTranslation->save();
         }
     }
     return $intFid;
 }
 /**
  * @param mixed $varInput
  * @return mixed
  */
 protected function validator($varInput)
 {
     // Get language id
     $intId = $this->activeRecord ? $this->activeRecord->{$this->strName} : $GLOBALS['TL_CONFIG'][$this->strName];
     // Check if translation fields should not be empty saved
     if (!$GLOBALS['TL_CONFIG']['dontfillEmptyTranslationFields']) {
         // Fill all empty fields with the content of the fallback field
         $varInput = WidgetUtil::addFallbackValueToEmptyField($varInput);
         parent::validator($varInput);
     } else {
         // Check only the first field
         parent::validator($varInput[key($varInput)]);
     }
     // Check if array
     if (is_array($varInput)) {
         if (!parent::hasErrors()) {
             // Save values and return fid
             return TranslationFieldsModel::saveValuesAndReturnFid($varInput, $intId);
         }
     }
     return $intId;
 }
 /**
  * @param mixed $varInput
  * @return mixed
  */
 protected function validator($varInput)
 {
     // Get array with language id
     $arrData = $this->activeRecord ? $this->activeRecord->{$this->strName} : $GLOBALS['TL_CONFIG'][$this->strName];
     if (is_array($varInput['value'])) {
         // Check if translation fields should not be empty saved
         if (!$GLOBALS['TL_CONFIG']['dontfillEmptyTranslationFields']) {
             // Fill all empty fields with the content of the fallback field
             $varInput['value'] = WidgetUtil::addFallbackValueToEmptyField($varInput['value']);
             parent::validator($varInput['value']);
         } else {
             // Check only the first field
             parent::validator($varInput['value'][key($varInput['value'])]);
         }
     }
     $arrData = deserialize($arrData);
     if (!is_array($arrData) || empty($arrData)) {
         $arrData = array();
     }
     // Save values and return fid
     $varInput['value'] = TranslationFieldsModel::saveValuesAndReturnFid($varInput['value'], isset($arrData['value']) ? $arrData['value'] : 0);
     return $varInput;
 }