private function updateFormPaginators() { // As of Contao 3 tl_form_field.singleSRC and tl_form_field.efgBackSingleSRC use database assisted fileTree // .. these fields normally should have been transformed already by the Contao install routine if (!$this->Database->fieldExists('efgBackSingleSRC', 'tl_form_field')) { return; } $blnTransform = false; $arrTransformFields = array(); $arrFilesDone = array(); $sql = "SELECT singleSRC, efgBackSingleSRC FROM tl_form_field WHERE `type`='efgFormPaginator' AND ((singleSRC != '' AND singleSRC != '0') OR (efgBackSingleSRC != '' AND efgBackSingleSRC != '0'))"; $objResult = $this->Database->prepare($sql)->execute(); if ($objResult->numRows) { while ($objResult->next()) { if ($objResult->singleSRC != '' && !is_numeric($objResult->singleSRC)) { $arrTransformFields['singleSRC'][$objResult->singleSRC] = $objResult->singleSRC; $blnTransform = true; } if ($objResult->efgBackSingleSRC != '' && !is_numeric($objResult->efgBackSingleSRC)) { $arrTransformFields['efgBackSingleSRC'][$objResult->efgBackSingleSRC] = $objResult->efgBackSingleSRC; $blnTransform = true; } } } if (!$blnTransform) { return; } if (!empty($arrTransformFields)) { foreach ($arrTransformFields as $strField => $arrFiles) { if (!empty($arrFiles)) { foreach ($arrFiles as $strFileOld => $strFile) { if (!isset($arrFilesDone[$strFileOld])) { $objFileModel = \FilesModel::findOneBy('path', $strFileOld); if ($objFileModel !== null) { $arrTransformFields[$strField][$strFileOld] = $objFileModel->id; } } else { $arrTransformFields[$strField][$strFileOld] = $arrFilesDone[$strFileOld]; } $arrFilesDone[$strFileOld] = $arrTransformFields[$strField][$strFileOld]; } } } // Update tl_form_field foreach ($arrTransformFields as $strField => $arrFiles) { if (!empty($arrFiles)) { foreach ($arrFiles as $strFileOld => $strFile) { if (is_numeric($strFile)) { $objResult = $this->Database->prepare("UPDATE tl_form_field %s WHERE `type`='efgFormPaginator' AND " . $strField . "=?")->set(array($strField => (string) $strFile))->execute((string) $strFileOld); } } } } } }
/** * Prepare database value from tl_formdata / tl_formdata_details for widget * @param mixed $varValue Stored value * @param array|boolean $arrField Form field properties (NOTE: set from dca or from tl_form_field, with differences in the structure) * @param mixed $varFile File * @return mixed */ public function prepareDatabaseValueForWidget($varValue = '', $arrField = false, $varFile = false) { if (!is_array($arrField)) { return false; } $strType = $arrField['type']; if (TL_MODE == 'FE' && !empty($arrField['formfieldType'])) { $strType = $arrField['formfieldType']; } elseif (TL_MODE == 'BE' && !empty($arrField['inputType'])) { $strType = $arrField['inputType']; } $varVal = $varValue; if (in_array($strType, $this->arrFFstorable)) { switch ($strType) { case 'efgLookupCheckbox': case 'checkbox': case 'condition': // conditionalforms // conditionalforms // conditionalforms // conditionalforms case 'efgLookupRadio': case 'radio': case 'efgLookupSelect': case 'conditionalselect': case 'countryselect': case 'fp_preSelectMenu': case 'select': $strSep = isset($arrField['eval']['csv']) ? $arrField['eval']['csv'] : '|'; if ($arrField['options']) { $arrOptions = deserialize($arrField['options']); } else { $arrOptions = $this->prepareWidgetOptions($arrField); } if (is_string($varVal)) { $varVal = explode($strSep, $varVal); } if (is_array($arrOptions)) { $arrTempOptions = array(); foreach ($arrOptions as $sK => $mxVal) { $arrTempOptions[$mxVal['value']] = $mxVal['label']; } } if (is_array($varVal)) { foreach ($varVal as $k => $v) { $sNewVal = array_search($v, $arrTempOptions); if ($sNewVal) { $varVal[$k] = $sNewVal; } } } break; case 'efgImageSelect': case 'fileTree': $strSep = isset($arrField['eval']['csv']) ? $arrField['eval']['csv'] : '|'; if (is_string($varVal) && strpos($varVal, $strSep) !== false) { $varVal = explode($strSep, $varVal); } elseif (is_array($varVal)) { $varVal = array_filter($varVal); } elseif (strlen($varVal)) { $varVal = deserialize($varValue); } if (!empty($varVal)) { if (is_array($varVal)) { foreach ($varVal as $key => $varFile) { $objFileModel = null; if (\Validator::isUuid($varFile) || is_numeric($varFile)) { $objFileModel = \FilesModel::findById($varFile); } else { $objFileModel = \FilesModel::findOneBy('path', $varFile); } if ($objFileModel !== null) { $varVal[$key] = TL_MODE == 'FE' ? $objFileModel->path : $objFileModel->uuid; } } } elseif (is_string($varVal)) { $objFileModel = null; if (\Validator::isUuid($varVal) || is_numeric($varVal)) { $objFileModel = \FilesModel::findById($varVal); } else { $objFileModel = \FilesModel::findOneBy('path', $varVal); } if ($objFileModel !== null) { $varVal = TL_MODE == 'FE' ? $objFileModel->path : $objFileModel->uuid; } } } break; case 'cm_alternative': // cm_alternativeforms if ($arrField['options']) { $arrOptions = deserialize($arrField['options']); } else { $arrOptions = $this->prepareWidgetOptions($arrField); } foreach ($arrOptions as $sK => $mxVal) { if (is_array($mxVal) && $mxVal['label'] == $varVal) { $varVal = $mxVal['value']; break; } elseif ($mxVal == $varVal) { $varVal = $sK; break; } } break; case 'upload': $varVal = ''; if (strlen($varValue)) { if ($arrField['storeFile']) { $strVal = $varValue; } else { $strVal = $varValue; } $varVal = $strVal; } break; case 'text': case 'calendar': case 'xdependentcalendarfields': // NOTE: different array structure in Backend (set by dca) and Frontend (set from tl_form_field) // .. in Frontend: one-dimensional array like $arrField['rgxp'], $arrField['dateFormat'] // .. in Backend: multidimensional array like $arrField['eval']['rgxp'] if ($arrField['rgxp'] && in_array($arrField['rgxp'], array('date', 'datim', 'time'))) { if ($varVal) { if ($arrField['rgxp'] == 'date') { $varVal = \Date::parse(!empty($arrField['dateFormat']) ? $arrField['dateFormat'] : $GLOBALS['TL_CONFIG']['dateFormat'], $varVal); } elseif ($arrField['rgxp'] == 'datim') { $varVal = \Date::parse(!empty($arrField['dateFormat']) ? $arrField['dateFormat'] : $GLOBALS['TL_CONFIG']['datimFormat'], $varVal); } elseif ($arrField['rgxp'] == 'time') { $varVal = \Date::parse(!empty($arrField['dateFormat']) ? $arrField['dateFormat'] : $GLOBALS['TL_CONFIG']['timeFormat'], $varVal); } } } else { $varVal = $varValue; } break; default: $varVal = $varValue; break; } return $varVal; } else { return $varVal; } }
/** * {@inheritDoc} */ public function getMetadata($pathOrUuid) { $path = $this->convertToPath($pathOrUuid); $this->guardNoInvalidUuid($pathOrUuid, $path); $this->guardInUploadPath($path); $metadata = $this->adapter->getMetadata($path); if ($metadata) { if (\Validator::isUuid($pathOrUuid)) { $model = \FilesModel::findByUuid($pathOrUuid); } else { $model = \FilesModel::findOneBy('path', $path); } if ($model) { $metadata['id'] = (int) $model->id; $metadata['uuid'] = \String::binToUuid($model->uuid); $metadata['hash'] = $model->hash; $metadata['meta'] = deserialize($model->meta, true); $metadata['importantPart'] = array('x' => $model->importantPartX, 'y' => $model->importantPartY, 'width' => $model->importantPartWidth, 'height' => $model->importantPartHeight); } } return $metadata; }