public static convertMultiField ( string $table, string $field ) | ||
$table | string | The table name |
$field | string | The field name |
public static function convertMultiField($table, $field)
{
$objDatabase = \Database::getInstance();
// Get the non-empty rows
$objRow = $objDatabase->query("SELECT id, {$field} FROM {$table} WHERE {$field}!=''");
// Check the column type
$objDesc = $objDatabase->query("DESC {$table} {$field}");
// Change the column type
if ($objDesc->Type != 'blob') {
$objDatabase->query("ALTER TABLE `{$table}` CHANGE `{$field}` `{$field}` blob NULL");
$objDatabase->query("UPDATE `{$table}` SET `{$field}`=NULL WHERE `{$field}`=''");
}
while ($objRow->next()) {
$arrValues = \StringUtil::deserialize($objRow->{$field}, true);
if (empty($arrValues)) {
continue;
}
$objHelper = static::generateHelperObject($arrValues);
// UUID already
if ($objHelper->isUuid) {
continue;
}
foreach ($arrValues as $k => $v) {
// Numeric ID to UUID
if ($objHelper->isNumeric) {
$objFile = \FilesModel::findByPk($objHelper->value[$k]);
$arrValues[$k] = $objFile->uuid;
} else {
$objFile = \FilesModel::findByPath($objHelper->value[$k]);
$arrValues[$k] = $objFile->uuid;
}
}
$objDatabase->prepare("UPDATE {$table} SET {$field}=? WHERE id=?")->execute(serialize($arrValues), $objRow->id);
}
}
private function updateDbafsUuid() { // As of Contao 3.2 assisted fileTree widgets store tl_files.uuid instead of tl_files.id $arrConvertFields = array('single' => array('tl_form' => array('confirmationMailTemplate', 'formattedMailTemplate'), 'tl_form_field' => array('efgBackSingleSRC')), 'multiple' => array('tl_form' => array('confirmationMailAttachments', 'formattedMailAttachments'), 'tl_form_field' => array('efgMultiSRC'))); foreach ($arrConvertFields['single'] as $strTable => $arrFields) { foreach ($arrFields as $strField) { \Contao\Database\Updater::convertSingleField($strTable, $strField); } } foreach ($arrConvertFields['multiple'] as $strTable => $arrFields) { foreach ($arrFields as $strField) { \Contao\Database\Updater::convertMultiField($strTable, $strField); } } }