From d2d7f725525dcb92b5ff08732645da27c8d80c3d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 29 Oct 2025 14:19:02 +0000 Subject: [PATCH 1/7] Initial plan From 704291e4605c5cc516dd835cd4a1c1993e6c081c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 29 Oct 2025 14:25:44 +0000 Subject: [PATCH 2/7] Add field exclusion functionality to YORM dataset Co-authored-by: skerbis <791247+skerbis@users.noreply.github.com> --- lib/manager/dataset.php | 30 ++++++++++++++++++++++++++++++ tests/rex_yform_yorm_test.php | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/lib/manager/dataset.php b/lib/manager/dataset.php index aca1e6233..fd92e6344 100644 --- a/lib/manager/dataset.php +++ b/lib/manager/dataset.php @@ -37,6 +37,9 @@ class rex_yform_manager_dataset /** @var bool */ private $historyEnabled = true; + /** @var string[] */ + private array $excludedFields = []; + final private function __construct(string $table, ?int $id = null) { $this->table = $table; @@ -651,6 +654,28 @@ public function setHistoryEnabled(bool $historyEnabled): void $this->historyEnabled = $historyEnabled; } + /** + * Set fields to exclude from the form. + * + * @param string[] $fields Array of field names to exclude + * @return $this + */ + public function setExcludeFields(array $fields): self + { + $this->excludedFields = $fields; + return $this; + } + + /** + * Get fields to exclude from the form. + * + * @return string[] + */ + public function getExcludedFields(): array + { + return $this->excludedFields; + } + public function __isset(string $key): bool { return $this->hasValue($key); @@ -692,6 +717,11 @@ private function createForm(): rex_yform $yform->setDebug(self::$debug); foreach ($fields as $field) { + // Skip excluded fields + if (in_array($field->getName(), $this->excludedFields, true)) { + continue; + } + /** @var class-string $class */ $class = 'rex_yform_' . $field->getType() . '_' . $field->getTypeName(); diff --git a/tests/rex_yform_yorm_test.php b/tests/rex_yform_yorm_test.php index 3e26951eb..99aa15edf 100644 --- a/tests/rex_yform_yorm_test.php +++ b/tests/rex_yform_yorm_test.php @@ -210,6 +210,39 @@ public function testTableAPI() $cat2->getId(), ]) ->save(); + + // Test exclude fields functionality + $testDataset = rex_yform_manager_dataset::create($tableName) + ->setValue($fieldName, 'Test Exclude Fields'); + $testDataset->save(); + + // Get dataset and test field exclusion + $datasetWithExclude = rex_yform_manager_dataset::get($testDataset->getId(), $tableName); + + // Set fields to exclude + $datasetWithExclude->setExcludeFields([$fieldName]); + + // Verify excluded fields are stored + static::assertEquals( + [$fieldName], + $datasetWithExclude->getExcludedFields(), + 'excluded fields should be stored correctly', + ); + + // Get form and verify excluded field is not in the form + $yform = $datasetWithExclude->getForm(); + $formFields = []; + foreach ($yform->objparams['values'] as $valueField) { + if (isset($valueField->params['name'])) { + $formFields[] = $valueField->params['name']; + } + } + + static::assertNotContains( + $fieldName, + $formFields, + 'excluded field should not be in form values', + ); } } From 9c282627b77a59fffbff7d2cedeea3bf283fbce5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 29 Oct 2025 14:27:25 +0000 Subject: [PATCH 3/7] Add documentation for field exclusion feature Co-authored-by: skerbis <791247+skerbis@users.noreply.github.com> --- docs/04_yorm.md | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/docs/04_yorm.md b/docs/04_yorm.md index 48367279a..7bcf0e758 100644 --- a/docs/04_yorm.md +++ b/docs/04_yorm.md @@ -395,6 +395,43 @@ $yform = $post->getForm(); echo $post->executeForm($yform) ``` + + +#### Felder vom Formular ausschließen + +Mit `setExcludeFields()` können bestimmte Felder vom generierten Formular ausgeschlossen werden. Dies ist nützlich, wenn z.B. bei einem User-Profil der Name und Vorname nicht mehr angezeigt oder bearbeitet werden sollen, oder wenn das Formular mit weniger Details benötigt wird. + +```php +setExcludeFields(['name', 'vorname']); + +$yform = $dataset->getForm(); + +// Optional: Ausgeschlossene Felder als Hidden-Felder setzen, +// um deren Werte beim Speichern beizubehalten +$yform->setValueField('hidden', ['name', $dataset->getValue('name'), 'REQUEST']); +$yform->setValueField('hidden', ['vorname', $dataset->getValue('vorname'), 'REQUEST']); + +echo $dataset->executeForm($yform); +``` + +Das gleiche Prinzip funktioniert auch für neue Datensätze: + +```php +setExcludeFields(['status', 'created_at', 'updated_at']); + +$yform = $dataset->getForm(); +echo $dataset->executeForm($yform); +``` + + ## Methoden-Referenz @@ -535,6 +572,7 @@ $dataset = rex_yform_manager_query::get('rex_yf_example') - get - getAll - getData (liefert Felder als Array zurück) +- getExcludedFields (liefert ausgeschlossene Felder als Array zurück) - getForm (liefert Formular zurück - EXPERIMENTELL!) - getId - getMessages @@ -546,6 +584,7 @@ $dataset = rex_yform_manager_query::get('rex_yf_example') - getValue - hasValue - isValid +- setExcludeFields (schließt Felder vom generierten Formular aus, siehe [Felder vom Formular ausschließen](#felder-excluden)) - loadData From e52a6926c9036d7bbdb631311b1e2e4ce81ac1c9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 29 Oct 2025 14:28:10 +0000 Subject: [PATCH 4/7] Update CHANGELOG for field exclusion feature Co-authored-by: skerbis <791247+skerbis@users.noreply.github.com> --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index eef68ea3a..e2928fe26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,14 @@ Changelog ========= +Version 5.0.2 - TBD +-------------------------- + +### Neu + +* YORM: `setExcludeFields()` Methode hinzugefügt, um Felder vom generierten Formular auszuschließen + + Version 5.0.1 - 25.06.2025 -------------------------- From 5efdf1ffd5a87ca642ac529bcbea513003771306 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 29 Oct 2025 14:31:17 +0000 Subject: [PATCH 5/7] Improve CHANGELOG entry with more context Co-authored-by: skerbis <791247+skerbis@users.noreply.github.com> --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e2928fe26..9220bf9b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ Version 5.0.2 - TBD ### Neu -* YORM: `setExcludeFields()` Methode hinzugefügt, um Felder vom generierten Formular auszuschließen +* YORM: `setExcludeFields()` Methode hinzugefügt, um Felder vom generierten Formular auszuschließen - nützlich für die Erstellung von Formularen mit weniger Feldern, wie z.B. bei User-Profilen, wo bestimmte Felder nicht bearbeitet werden sollen Version 5.0.1 - 25.06.2025 From e3641291bd03fb2237ca7ed809b8bf1c8a56facd Mon Sep 17 00:00:00 2001 From: Thomas Skerbis Date: Wed, 29 Oct 2025 16:36:43 +0100 Subject: [PATCH 6/7] Delete tests/rex_yform_yorm_test.php --- tests/rex_yform_yorm_test.php | 332 ---------------------------------- 1 file changed, 332 deletions(-) delete mode 100644 tests/rex_yform_yorm_test.php diff --git a/tests/rex_yform_yorm_test.php b/tests/rex_yform_yorm_test.php deleted file mode 100644 index 99aa15edf..000000000 --- a/tests/rex_yform_yorm_test.php +++ /dev/null @@ -1,332 +0,0 @@ - $tableName, - 'name' => 'Name of Table - ' . $tableName, - 'description' => 'Description of Table - ' . $tableName, - 'status' => 1, - 'list_amount' => 10, - 'list_sortfield' => 'id', - 'list_sortorder' => 'asc', - 'prio' => 9999, - 'hidden' => 1, - 'export' => 1, - 'import' => 1, - 'schema_overwrite' => 1, - ], - ); - return $table; - } - - public static function setUpTableField(rex_yform_manager_table $table, $field) - { - $field['type_id'] ??= 'value'; - $field['type_name'] ??= 'text'; - $field['name'] ??= 'default'; - $field['label'] ??= 'Titel:'; - $field['list_hidden'] ??= 0; - $field['search'] = $field['list_hidden'] ?? 0; - $field['prio'] = $field['list_hidden'] ?? 99999; - - rex_yform_manager_table_api::setTableField($table->getTableName(), $field); - rex_yform_manager_table_api::generateTableAndFields($table); - } - - public function testTableAPI() - { - $prefix = 'unittest_yform_table_' . date('YmdHis') . '_'; - $tableName = $prefix . 'base'; - $tableNameCategories = $prefix . 'category'; - $tableNameRelation = $prefix . 'related'; - - $table = self::setUpTable($tableName); - static::assertEquals( - $table::class, - 'rex_yform_manager_table', - 'table creation failed. (rex_yform_manager_table_api::setTable)', - ); - - if ($table) { - $fieldName = 'field_title'; - $fieldValue = 'My first Titel'; - - // Text Feld erstellen - self::setUpTableField($table, [ - 'name' => $fieldName, - ]); - - // prüfen ob es angelegt ist. - - $fields = rex_yform_manager_table::get($tableName)->getFields(); - static::assertEquals( - count($fields), - 1, - 'field creation failed (rex_yform_manager_table_api::setTableField)', - ); - - if (1 == count($fields)) { - static::assertEquals($fields[0]->getName(), $fieldName, 'fieldname validation failed'); - } - - // TODO: prüfen ob field gelöscht werden kann - - // YORM - Datensatz anlegen - $dataset = rex_yform_manager_dataset::create($tableName); - $dataset->setValue($fieldName, $fieldValue); - - static::assertTrue($dataset->save(), 'dataset creation failed (rex_yform_manager_dataset::create)'); - static::assertEquals( - count($dataset->getMessages()), - 0, - 'dataset creation failed with Messages: ' . implode(',', $dataset->getMessages()), - ); - - if (0 == count($dataset->getMessages())) { - $SQLDatasets = rex_sql::factory()->getArray( - 'select * from ' . $tableName, - ); - static::assertEquals(count($SQLDatasets), 1, 'dataset not found - creation failed (SQL Test)'); - - // YORM - Datensatz auslesen - $datasetId = $dataset->getId(); - $dataset = rex_yform_manager_dataset::get($datasetId, $tableName); - static::assertNotNull($dataset, 'dataset not found - get via ID failed'); - - // YORM - Datensatz bearbeiten - $fieldValueEdit = $fieldValue . ' overwrite'; - $dataset - ->setValue($fieldName, $fieldValueEdit) - ->save(); - $dataset = rex_yform_manager_dataset::get($datasetId, $tableName); - static::assertEquals( - $dataset->getValue($fieldName), - $fieldValueEdit, - 'dataset update failes - YOrm update failed', - ); - - // YORM - Datensatz löschen - if ($dataset) { - static::assertTrue($dataset->delete(), 'dataset delete failed (rex_yform_manager_dataset::delete)'); - - $dataset = rex_yform_manager_dataset::get($datasetId, $tableName); - static::assertFalse($dataset->exists(), 'dataset delete failed - YOrm delete failed'); - } - - // TODO - YORM - Relationen mit Relationstabelle prüfen - - // Tabelle erstellen - // Bezugstabelle - // Verknüpfungstabelle - - $tableCategories = self::setUpTable($tableNameCategories); - $tableRelation = self::setUpTable($tableNameRelation); - - // Categories get an name - self::setUpTableField($tableCategories, [ - 'name' => $fieldName, - ]); - - // Related Table - self::setUpTableField($tableRelation, [ - 'type_name' => 'be_manager_relation', - 'db_type' => 'int', - 'name' => 'base_id', - 'label' => 'Base Item', - 'table' => $tableName, - 'field' => 'id', - 'type' => 2, - 'empty_value' => 'is empty', - 'empty_option' => 0, - ]); - - self::setUpTableField($tableRelation, [ - 'type_name' => 'be_manager_relation', - 'db_type' => 'int', - 'name' => 'category_id', - 'label' => 'Category:', - 'table' => $tableNameCategories, - 'field' => 'id', - 'type' => 2, - 'empty_value' => 'is empty', - 'empty_option' => 0, - ]); - - // Base - self::setUpTableField($table, [ - 'type_name' => 'be_manager_relation', - 'db_type' => 'int', - 'name' => 'categories', - 'label' => 'Categories:', - 'table' => $tableNameCategories, - 'field' => $fieldName, - 'relation_table' => $tableNameRelation, - 'type' => 3, - 'empty_value' => 'is empty', - 'empty_option' => 1, - 'size' => 10, - ]); - - $cat1 = rex_yform_manager_dataset::create($tableNameCategories) - ->setValue($fieldName, 'Category 1'); - $cat1->save(); - - $cat2 = rex_yform_manager_dataset::create($tableNameCategories) - ->setValue($fieldName, 'Category 2'); - $cat2->save(); - - $cat3 = rex_yform_manager_dataset::create($tableNameCategories) - ->setValue($fieldName, 'Category 3'); - $cat3->save(); - - rex_yform_manager_dataset::create($tableName) - ->setValue($fieldName, 'Mein Neuer Wert') - ->save(); - - rex_yform_manager_dataset::create($tableName) - ->setValue($fieldName, 'Mein Neuer Wert mit 2 Kategorien') - ->setValue('categories', [ - $cat1->getId(), - $cat2->getId(), - ]) - ->save(); - - // Test exclude fields functionality - $testDataset = rex_yform_manager_dataset::create($tableName) - ->setValue($fieldName, 'Test Exclude Fields'); - $testDataset->save(); - - // Get dataset and test field exclusion - $datasetWithExclude = rex_yform_manager_dataset::get($testDataset->getId(), $tableName); - - // Set fields to exclude - $datasetWithExclude->setExcludeFields([$fieldName]); - - // Verify excluded fields are stored - static::assertEquals( - [$fieldName], - $datasetWithExclude->getExcludedFields(), - 'excluded fields should be stored correctly', - ); - - // Get form and verify excluded field is not in the form - $yform = $datasetWithExclude->getForm(); - $formFields = []; - foreach ($yform->objparams['values'] as $valueField) { - if (isset($valueField->params['name'])) { - $formFields[] = $valueField->params['name']; - } - } - - static::assertNotContains( - $fieldName, - $formFields, - 'excluded field should not be in form values', - ); - } - } - - rex_yform_manager_table_api::removeTable($tableName); - - $table = rex_yform_manager_table::get($tableName); - - static::assertNull($table, 'table schema removing failed'); - - // Cleanup - try { - rex_sql::factory()->setQuery( - 'DROP Table ' . $tableName, - ); - rex_sql::factory()->setQuery( - 'DROP Table ' . $tableNameCategories, - ); - rex_sql::factory()->setQuery( - 'DROP Table ' . $tableNameRelation, - ); - rex_sql::factory()->setQuery( - 'delete from ' . rex_yform_manager_table::table() . ' where table_name LIKE :table_name ', - [ - ':table_name' => $prefix . '%', - ], - ); - rex_sql::factory()->setQuery( - 'delete from ' . rex_yform_manager_field::table() . ' where table_name LIKE :table_name ', - [ - ':table_name' => $prefix . '%', - ], - ); - - rex_yform_manager_table::deleteCache(); - } catch (Exception $e) { - } - } - - public function t2estHasValue() - { - // Folgende Tests sind möglich - - // PHP Formular - // .. erstellen - // .. update - // .. delete - - // Tabelle erstellen - // schemaupdate - // Tabelle export - // Tabelle löschen - // tabelle import - - // E-Mail Versand Template - - // $media = $this->createMediaWithoutConstructor(); - // - // /** @psalm-suppress UndefinedPropertyAssignment */ - // $media->med_foo = 'teststring'; - // - // static::assertTrue($media->hasValue('med_foo')); - // static::assertTrue($media->hasValue('foo')); - // - // static::assertFalse($media->hasValue('bar')); - // static::assertFalse($media->hasValue('med_bar')); - } - - public function t2estGetValue() - { - // $media = $this->createMediaWithoutConstructor(); - // - // /** @psalm-suppress UndefinedPropertyAssignment */ - // $media->med_foo = 'teststring'; - // - // static::assertEquals('teststring', $media->getValue('med_foo')); - // static::assertEquals('teststring', $media->getValue('foo')); - // - // static::assertNull($media->getValue('bar')); - // static::assertNull($media->getValue('med_bar')); - } - - // private function createMediaWithoutConstructor(): rex_media - // { - // /** @noinspection PhpIncompatibleReturnTypeInspection */ - // return (new ReflectionClass(rex_media::class))->newInstanceWithoutConstructor(); - // } -} From f0044db36be028fe5bcdb97ebf97ce7e99adafff Mon Sep 17 00:00:00 2001 From: Thomas Skerbis Date: Wed, 29 Oct 2025 22:25:12 +0100 Subject: [PATCH 7/7] Add unit tests for YForm manager functionality This test class provides unit tests for the YForm manager's table and dataset functionalities, including setup, creation, updating, and deletion of tables and datasets. --- tests/rex_yform_yorm_test.php | 299 ++++++++++++++++++++++++++++++++++ 1 file changed, 299 insertions(+) create mode 100644 tests/rex_yform_yorm_test.php diff --git a/tests/rex_yform_yorm_test.php b/tests/rex_yform_yorm_test.php new file mode 100644 index 000000000..3e26951eb --- /dev/null +++ b/tests/rex_yform_yorm_test.php @@ -0,0 +1,299 @@ + $tableName, + 'name' => 'Name of Table - ' . $tableName, + 'description' => 'Description of Table - ' . $tableName, + 'status' => 1, + 'list_amount' => 10, + 'list_sortfield' => 'id', + 'list_sortorder' => 'asc', + 'prio' => 9999, + 'hidden' => 1, + 'export' => 1, + 'import' => 1, + 'schema_overwrite' => 1, + ], + ); + return $table; + } + + public static function setUpTableField(rex_yform_manager_table $table, $field) + { + $field['type_id'] ??= 'value'; + $field['type_name'] ??= 'text'; + $field['name'] ??= 'default'; + $field['label'] ??= 'Titel:'; + $field['list_hidden'] ??= 0; + $field['search'] = $field['list_hidden'] ?? 0; + $field['prio'] = $field['list_hidden'] ?? 99999; + + rex_yform_manager_table_api::setTableField($table->getTableName(), $field); + rex_yform_manager_table_api::generateTableAndFields($table); + } + + public function testTableAPI() + { + $prefix = 'unittest_yform_table_' . date('YmdHis') . '_'; + $tableName = $prefix . 'base'; + $tableNameCategories = $prefix . 'category'; + $tableNameRelation = $prefix . 'related'; + + $table = self::setUpTable($tableName); + static::assertEquals( + $table::class, + 'rex_yform_manager_table', + 'table creation failed. (rex_yform_manager_table_api::setTable)', + ); + + if ($table) { + $fieldName = 'field_title'; + $fieldValue = 'My first Titel'; + + // Text Feld erstellen + self::setUpTableField($table, [ + 'name' => $fieldName, + ]); + + // prüfen ob es angelegt ist. + + $fields = rex_yform_manager_table::get($tableName)->getFields(); + static::assertEquals( + count($fields), + 1, + 'field creation failed (rex_yform_manager_table_api::setTableField)', + ); + + if (1 == count($fields)) { + static::assertEquals($fields[0]->getName(), $fieldName, 'fieldname validation failed'); + } + + // TODO: prüfen ob field gelöscht werden kann + + // YORM - Datensatz anlegen + $dataset = rex_yform_manager_dataset::create($tableName); + $dataset->setValue($fieldName, $fieldValue); + + static::assertTrue($dataset->save(), 'dataset creation failed (rex_yform_manager_dataset::create)'); + static::assertEquals( + count($dataset->getMessages()), + 0, + 'dataset creation failed with Messages: ' . implode(',', $dataset->getMessages()), + ); + + if (0 == count($dataset->getMessages())) { + $SQLDatasets = rex_sql::factory()->getArray( + 'select * from ' . $tableName, + ); + static::assertEquals(count($SQLDatasets), 1, 'dataset not found - creation failed (SQL Test)'); + + // YORM - Datensatz auslesen + $datasetId = $dataset->getId(); + $dataset = rex_yform_manager_dataset::get($datasetId, $tableName); + static::assertNotNull($dataset, 'dataset not found - get via ID failed'); + + // YORM - Datensatz bearbeiten + $fieldValueEdit = $fieldValue . ' overwrite'; + $dataset + ->setValue($fieldName, $fieldValueEdit) + ->save(); + $dataset = rex_yform_manager_dataset::get($datasetId, $tableName); + static::assertEquals( + $dataset->getValue($fieldName), + $fieldValueEdit, + 'dataset update failes - YOrm update failed', + ); + + // YORM - Datensatz löschen + if ($dataset) { + static::assertTrue($dataset->delete(), 'dataset delete failed (rex_yform_manager_dataset::delete)'); + + $dataset = rex_yform_manager_dataset::get($datasetId, $tableName); + static::assertFalse($dataset->exists(), 'dataset delete failed - YOrm delete failed'); + } + + // TODO - YORM - Relationen mit Relationstabelle prüfen + + // Tabelle erstellen + // Bezugstabelle + // Verknüpfungstabelle + + $tableCategories = self::setUpTable($tableNameCategories); + $tableRelation = self::setUpTable($tableNameRelation); + + // Categories get an name + self::setUpTableField($tableCategories, [ + 'name' => $fieldName, + ]); + + // Related Table + self::setUpTableField($tableRelation, [ + 'type_name' => 'be_manager_relation', + 'db_type' => 'int', + 'name' => 'base_id', + 'label' => 'Base Item', + 'table' => $tableName, + 'field' => 'id', + 'type' => 2, + 'empty_value' => 'is empty', + 'empty_option' => 0, + ]); + + self::setUpTableField($tableRelation, [ + 'type_name' => 'be_manager_relation', + 'db_type' => 'int', + 'name' => 'category_id', + 'label' => 'Category:', + 'table' => $tableNameCategories, + 'field' => 'id', + 'type' => 2, + 'empty_value' => 'is empty', + 'empty_option' => 0, + ]); + + // Base + self::setUpTableField($table, [ + 'type_name' => 'be_manager_relation', + 'db_type' => 'int', + 'name' => 'categories', + 'label' => 'Categories:', + 'table' => $tableNameCategories, + 'field' => $fieldName, + 'relation_table' => $tableNameRelation, + 'type' => 3, + 'empty_value' => 'is empty', + 'empty_option' => 1, + 'size' => 10, + ]); + + $cat1 = rex_yform_manager_dataset::create($tableNameCategories) + ->setValue($fieldName, 'Category 1'); + $cat1->save(); + + $cat2 = rex_yform_manager_dataset::create($tableNameCategories) + ->setValue($fieldName, 'Category 2'); + $cat2->save(); + + $cat3 = rex_yform_manager_dataset::create($tableNameCategories) + ->setValue($fieldName, 'Category 3'); + $cat3->save(); + + rex_yform_manager_dataset::create($tableName) + ->setValue($fieldName, 'Mein Neuer Wert') + ->save(); + + rex_yform_manager_dataset::create($tableName) + ->setValue($fieldName, 'Mein Neuer Wert mit 2 Kategorien') + ->setValue('categories', [ + $cat1->getId(), + $cat2->getId(), + ]) + ->save(); + } + } + + rex_yform_manager_table_api::removeTable($tableName); + + $table = rex_yform_manager_table::get($tableName); + + static::assertNull($table, 'table schema removing failed'); + + // Cleanup + try { + rex_sql::factory()->setQuery( + 'DROP Table ' . $tableName, + ); + rex_sql::factory()->setQuery( + 'DROP Table ' . $tableNameCategories, + ); + rex_sql::factory()->setQuery( + 'DROP Table ' . $tableNameRelation, + ); + rex_sql::factory()->setQuery( + 'delete from ' . rex_yform_manager_table::table() . ' where table_name LIKE :table_name ', + [ + ':table_name' => $prefix . '%', + ], + ); + rex_sql::factory()->setQuery( + 'delete from ' . rex_yform_manager_field::table() . ' where table_name LIKE :table_name ', + [ + ':table_name' => $prefix . '%', + ], + ); + + rex_yform_manager_table::deleteCache(); + } catch (Exception $e) { + } + } + + public function t2estHasValue() + { + // Folgende Tests sind möglich + + // PHP Formular + // .. erstellen + // .. update + // .. delete + + // Tabelle erstellen + // schemaupdate + // Tabelle export + // Tabelle löschen + // tabelle import + + // E-Mail Versand Template + + // $media = $this->createMediaWithoutConstructor(); + // + // /** @psalm-suppress UndefinedPropertyAssignment */ + // $media->med_foo = 'teststring'; + // + // static::assertTrue($media->hasValue('med_foo')); + // static::assertTrue($media->hasValue('foo')); + // + // static::assertFalse($media->hasValue('bar')); + // static::assertFalse($media->hasValue('med_bar')); + } + + public function t2estGetValue() + { + // $media = $this->createMediaWithoutConstructor(); + // + // /** @psalm-suppress UndefinedPropertyAssignment */ + // $media->med_foo = 'teststring'; + // + // static::assertEquals('teststring', $media->getValue('med_foo')); + // static::assertEquals('teststring', $media->getValue('foo')); + // + // static::assertNull($media->getValue('bar')); + // static::assertNull($media->getValue('med_bar')); + } + + // private function createMediaWithoutConstructor(): rex_media + // { + // /** @noinspection PhpIncompatibleReturnTypeInspection */ + // return (new ReflectionClass(rex_media::class))->newInstanceWithoutConstructor(); + // } +}