yakamara / redaxo_yform_docs

Dokumentation für YForm
31 stars 30 forks source link

Export - gespeicherte Ids in Labels umwandeln #139

Closed tbaddade closed 3 years ago

tbaddade commented 5 years ago

Falls von Interesse:

Folgenden Code in /src/addons/project/boot.phpablegen

if (\rex::isBackend() && rex::getUser()) {
    rex_extension::register('YFORM_DATA_TABLE_EXPORT', function (\rex_extension_point $ep) {

        $dataset = $ep->getSubject();
        if (!count($dataset)) {
            return;
        }

        /** @var rex_yform_manager_table $table */
        $table = $ep->getParam('table');
        $values = [];

        // Values der Relationen holen
        $relationFields = $table->getRelations();
        if (count($relationFields)) {
            foreach ($relationFields as $column => $field) {
                $values[$column] = rex_yform_value_be_manager_relation::getListValues($field->getElement('table'), $field->getElement('field'));
            }
        }

        // Values der Choices holen
        $choiceFields = $table->getValueFields(['type_name' => 'choice']);
        if (count($choiceFields)) {
            foreach ($choiceFields as $column => $field) {
                $values[$column] = rex_yform_value_choice::getListValues([
                    'field' => $column,
                    'choices' => $field->getElement('choices'),
                    'params' => [
                        'field' => $field->toArray(),
                        'fields' => $table->getFields(),
                    ],
                ]);

            }
        }

        foreach ($dataset as $index => $data) {
            // Gespeicherte Ids in Labels umwandeln
            foreach ($data as $column => $value) {
                if (trim($value) != '' && isset($values[$column])) {
                    $ids = explode(',', $value);
                    $labels = [];
                    foreach ($ids as $id) {
                        if (!isset($values[$column][$id])) {
                            continue;
                        }
                        $labels[] = $values[$column][$id];
                    }

                    $dataset[$index][$column] = implode(' :+++: ', $labels);
                }
            }

            /*
             * @Todo
             * wird von YForm noch nicht unterstützt

            // Feldnamen der ersten Zeile mit den eigentlichen Labels ersetzen
            foreach ($table->getFields() as $field) {
                if(isset($data[$field->getName()])) {
                    $keys = array_keys($data);
                    $keys[array_search($field->getName(), $keys)] = $field->getLabel();
                    $data = array_combine($keys, $data);
                }
            }
            $dataset[$index] = $data;
            */

        }

        return $dataset;
    });
}
alxndr-w commented 5 years ago

Verstehe den Titel nicht. Wann/wozu ist der Code?

tbaddade commented 5 years ago

Verstehe den Titel nicht. Wann/wozu ist der Code?

Wenn man sich die Datensätze exportiert, dann enthält normalerweise der Export die Ids Komma separiert. Mit denen kann der Kunde nur wenig anfangen. Im Skript werden die Ids nun mit den Labels, die man auch im Editmode oder in der Übersichtsliste sieht, ersetzt.

alxndr-w commented 5 years ago

Von welchen Feldtypen? Checkbox, choice, be-managet-relation? Alle?

tbaddade commented 5 years ago

Von welchen Feldtypen?

...
// Values der Relationen holen
...
// Values der Choices holen
...
alxndr-w commented 5 years ago

Kannst du das evtl. in einen PR zur Doku packen? Ist ja auch ein klasse Anwendungsbeispiel für den EP YFORM_DATA_TABLE_EXPORT, auf die EPs in YForm gehen wir hier sowieso nicht genug ein.