heimrichhannot / contao-multi-column-editor-bundle

This module offers an input type for editing one or more records in frontend and backend.
GNU General Public License v3.0
6 stars 7 forks source link

FileTree (Multiple) Widget: Values gehen bei Add/Delete/Sort verloren #19

Open derMatze82 opened 3 years ago

derMatze82 commented 3 years ago

Context Contao version: 4.12.* Bundle version: 2.13.0 PHP version: 7.4.22

Benutzt man ein FileTree Widget, z.B. mit folgender Config:

 'image' => [
    'label'     => &$GLOBALS['TL_LANG']['tl_content']['securityelements_image'],
    'exclude'   => true,
    'inputType' => 'fileTree',
    'eval'      => ['groupStyle' => 'width:100%; box-sizing:border-box;', 'path' => 'files/img', 'files'=>true, 'fieldType'=>'checkbox', 'mandatory'=>true, 'multiple' => true, 'tl_class'=>'w50 clr', 'extensions' => Config::get('validImageTypes')]
]

gehen die bereits ausgewählten Files verloren bei allen Aktionen (addRow, deleteRow, sortRows). Problem ist, dass die Uuids (String) vor dem Rendern des Widget wieder in ein Array mit Binaries umgewandelt werden müssen. Mein (unsauberer) Workaround:

// HeimrichHannot\MultiColumnEditorBundle\Widget\MultiColumnEditor ab Zeile 402

if (Environment::get('isAjaxRequest')) {
    foreach($rows as $rowKey => $ro) {
        foreach ($ro as $key => $val)  {
            if (is_a($val, 'Contao\FileTree') && isset($val->arrConfiguration['multiple']) && $val->arrConfiguration['multiple'] === true) {
                $el = $ro[$key];
                $curVal = $el->varValue;
                $arrNew = array_map('StringUtil::uuidToBin', explode(',', $curVal));
                $el->varValue = $arrNew;
                $rows[$rowKey][$key] = $el;
            }
        }
    }
}