diff --git a/install.php b/install.php index d4bc525..0cac21e 100644 --- a/install.php +++ b/install.php @@ -9,11 +9,15 @@ use rex_yform_manager_table_api; use Tracks\🦖; -/* Tablesets aktualisieren */ $addon = rex_addon::get('blaupause'); +/* Tabellen anlegen, beschleunigt den späteren Import mit YForm und legt zusätzliche Einstellungen fest, bspw. Unique-Prüfung direkt an der DB */ +include __DIR__ . '/install/table-scheme.php'; + +/* Tablesets aktualisieren */ if (rex_addon::get('yform')->isAvailable() && !rex::isSafeMode()) { - rex_yform_manager_table_api::importTablesets(rex_file::get(__DIR__ . '/install/rex_blaupause.tableset.json')); + rex_yform_manager_table_api::importTablesets(rex_file::get(__DIR__ . '/install/rex_blaupause_entry.tableset.json')); + rex_yform_manager_table_api::importTablesets(rex_file::get(__DIR__ . '/install/rex_blaupause_category.tableset.json')); rex_yform_manager_table::deleteCache(); } diff --git a/install/rex_blaupause.tableset.json b/install/rex_blaupause.tableset.json deleted file mode 100644 index a84a4f0..0000000 --- a/install/rex_blaupause.tableset.json +++ /dev/null @@ -1 +0,0 @@ -{"rex_blaupause":{"table":{"status":1,"table_name":"rex_blaupause","name":"translate:blaupause_table","description":"","list_amount":50,"list_sortfield":"createdate","list_sortorder":"DESC","search":0,"hidden":1,"export":1,"import":1,"mass_deletion":0,"mass_edit":1,"schema_overwrite":1,"history":0,"createdate":"0000-00-00 00:00:00","updatedate":"0000-00-00 00:00:00","createuser":"","updateuser":""},"fields":[{"table_name":"rex_blaupause","prio":1,"type_id":"value","type_name":"text","db_type":"varchar(191)","list_hidden":0,"search":0,"name":"name","label":"translate:blaupause_name","not_required":"","attributes":"","default":"","no_db":"0","notice":"","append":"","prepend":""},{"table_name":"rex_blaupause","prio":2,"type_id":"value","type_name":"choice","db_type":"int","list_hidden":0,"search":1,"name":"status","label":"translate:blaupause_status","not_required":"","multiple":"0","expanded":"0","choices":"translate:blaupause_status-1=translate:blaupause_status0=0,translate:blaupause_status1=1","choice_attributes":"","attributes":"","default":"","no_db":"0","notice":"","preferred_choices":"","group_by":"","placeholder":"","group_attributes":"","choice_label":""},{"table_name":"rex_blaupause","prio":3,"type_id":"value","type_name":"datestamp","db_type":"datetime","list_hidden":0,"search":0,"name":"createdate","label":"translate:blaupause_createdate","not_required":"","no_db":"0","only_empty":"1","format":"Y-m-d H:i:s"},{"table_name":"rex_blaupause","prio":4,"type_id":"value","type_name":"be_user","db_type":"varchar(191)","list_hidden":0,"search":0,"name":"createuser","label":"translate:blaupause_createuser","not_required":"","only_empty":"1","show_value":"0"},{"table_name":"rex_blaupause","prio":5,"type_id":"value","type_name":"datestamp","db_type":"datetime","list_hidden":0,"search":0,"name":"updatedate","label":"translate:blaupause_updatedate","not_required":"","no_db":"0","only_empty":"0","format":"Y-m-d H:i:s"},{"table_name":"rex_blaupause","prio":6,"type_id":"value","type_name":"be_user","db_type":"varchar(191)","list_hidden":0,"search":0,"name":"updateuser","label":"translate:blaupause_updateuser","not_required":"","only_empty":"0","show_value":"0"}]}} diff --git a/install/rex_blaupause_cateogry.tableset.json b/install/rex_blaupause_cateogry.tableset.json new file mode 100644 index 0000000..67610ad --- /dev/null +++ b/install/rex_blaupause_cateogry.tableset.json @@ -0,0 +1,202 @@ +{ + "rex_blaupause_category": { + "table": { + "status": 1, + "table_name": "rex_blaupause_category", + "name": "translate:blaupause.category.table", + "description": "", + "list_amount": 50, + "list_sortfield": "createdate", + "list_sortorder": "DESC", + "search": 0, + "hidden": 1, + "export": 1, + "import": 1, + "mass_deletion": 0, + "mass_edit": 0, + "schema_overwrite": 1, + "history": 0, + "createdate": "0000-00-00 00:00:00", + "updatedate": "0000-00-00 00:00:00", + "createuser": "", + "updateuser": "" + }, + "fields": [ + { + "table_name": "rex_blaupause_category", + "prio": 1, + "type_id": "value", + "type_name": "text", + "db_type": "varchar(191)", + "list_hidden": 0, + "search": 0, + "name": "name", + "label": "translate:blaupause.category.name", + "not_required": "", + "attributes": "", + "default": "", + "no_db": "0", + "notice": "", + "append": "", + "prepend": "" + }, + { + "table_name": "rex_blaupause_category", + "prio": 2, + "type_id": "validate", + "type_name": "empty", + "db_type": "", + "list_hidden": 1, + "search": 0, + "name": "name", + "label": "", + "not_required": "", + "message": "translate:blaupause.category.name.validate.empty" + }, + { + "table_name": "rex_blaupause_category", + "prio": 3, + "type_id": "value", + "type_name": "be_manager_relation", + "db_type": "int(10) unsigned", + "list_hidden": 0, + "search": 0, + "name": "blaupause_entry_ids", + "label": "translate:blaupause.category.blaupause_entry_ids", + "not_required": "", + "attributes": "", + "notice": "", + "empty_option": "1", + "table": "rex_blaupause_entry", + "field": "blaupause_category_id", + "type": "3", + "relation_table": "rex_blaupause_entry" + }, + { + "table_name": "rex_blaupause_category", + "prio": 4, + "type_id": "value", + "type_name": "choice_status", + "db_type": "int", + "list_hidden": 0, + "search": 1, + "name": "status", + "label": "translate:blaupause.category.status", + "not_required": "", + "multiple": "0", + "expanded": "0", + "choices": "\\Alexplusde\\Blaupause\\Entry::getStatusOptions", + "choice_attributes": "", + "attributes": "", + "default": "", + "no_db": "0", + "notice": "", + "preferred_choices": "", + "group_by": "", + "placeholder": "", + "group_attributes": "", + "choice_label": "" + }, + { + "table_name": "rex_blaupause_category", + "prio": 5, + "type_id": "validate", + "type_name": "empty", + "db_type": "", + "list_hidden": 1, + "search": 0, + "name": "status", + "label": "", + "not_required": "", + "message": "translate:blaupause.category.status.validate.empty" + }, + { + "table_name": "rex_blaupause_category", + "prio": 6, + "type_id": "value", + "type_name": "datestamp", + "db_type": "datetime", + "list_hidden": 0, + "search": 0, + "name": "createdate", + "label": "translate:blaupause.category.createdate", + "not_required": "", + "no_db": "0", + "only_empty": "1", + "format": "Y-m-d H:i:s" + }, + { + "table_name": "rex_blaupause_category", + "prio": 7, + "type_id": "value", + "type_name": "be_user", + "db_type": "varchar(191)", + "list_hidden": 0, + "search": 0, + "name": "createuser", + "label": "translate:blaupause.category.createuser", + "not_required": "", + "only_empty": "1", + "show_value": "0" + }, + { + "table_name": "rex_blaupause_category", + "prio": 8, + "type_id": "value", + "type_name": "datestamp", + "db_type": "datetime", + "list_hidden": 0, + "search": 0, + "name": "updatedate", + "label": "translate:blaupause.category.updatedate", + "not_required": "", + "no_db": "0", + "only_empty": "0", + "format": "Y-m-d H:i:s" + }, + { + "table_name": "rex_blaupause_category", + "prio": 9, + "type_id": "value", + "type_name": "be_user", + "db_type": "varchar(191)", + "list_hidden": 0, + "search": 0, + "name": "updateuser", + "label": "translate:blaupause.category.updateuser", + "not_required": "", + "only_empty": "0", + "show_value": "0" + }, + { + "table_name": "rex_blaupause_category", + "prio": 10, + "type_id": "value", + "type_name": "uuid", + "db_type": "varchar(36)", + "list_hidden": 1, + "search": 0, + "name": "uuid", + "label": "translate:blaupause.category.uuid", + "not_required": "", + "no_db": "0", + "show_value": "0" + }, + { + "table_name": "rex_blaupause_category", + "prio": 11, + "type_id": "validate", + "type_name": "unique", + "db_type": "", + "list_hidden": 1, + "search": 0, + "name": "uuid", + "label": "", + "not_required": "", + "message": "translate:blaupause.category.uuid.validate.unique", + "empty_option": "0", + "table": "" + } + ] + } +} diff --git a/install/rex_blaupause_entry.tableset..json b/install/rex_blaupause_entry.tableset..json new file mode 100644 index 0000000..64bf531 --- /dev/null +++ b/install/rex_blaupause_entry.tableset..json @@ -0,0 +1,202 @@ +{ + "rex_blaupause_entry": { + "table": { + "status": 1, + "table_name": "rex_blaupause_entry", + "name": "translate:blaupause.entry.table", + "description": "", + "list_amount": 50, + "list_sortfield": "createdate", + "list_sortorder": "DESC", + "search": 0, + "hidden": 1, + "export": 1, + "import": 1, + "mass_deletion": 0, + "mass_edit": 0, + "schema_overwrite": 1, + "history": 0, + "createdate": "0000-00-00 00:00:00", + "updatedate": "0000-00-00 00:00:00", + "createuser": "", + "updateuser": "" + }, + "fields": [ + { + "table_name": "rex_blaupause_entry", + "prio": 1, + "type_id": "value", + "type_name": "text", + "db_type": "varchar(191)", + "list_hidden": 0, + "search": 0, + "name": "name", + "label": "translate:blaupause.entry.name", + "not_required": "", + "attributes": "", + "default": "", + "no_db": "0", + "notice": "", + "append": "", + "prepend": "" + }, + { + "table_name": "rex_blaupause_entry", + "prio": 2, + "type_id": "validate", + "type_name": "empty", + "db_type": "", + "list_hidden": 1, + "search": 0, + "name": "name", + "label": "", + "not_required": "", + "message": "translate:blaupause.entry.name.validate.empty" + }, + { + "table_name": "rex_blaupause_entry", + "prio": 3, + "type_id": "value", + "type_name": "be_manager_relation", + "db_type": "int(10) unsigned", + "list_hidden": 0, + "search": 0, + "name": "blaupause_category_id", + "label": "translate:blaupause.entry.blaupause_category_id", + "not_required": "", + "attributes": "", + "notice": "", + "empty_option": "1", + "table": "rex_blaupause_category", + "field": "name", + "type": "2", + "relation_table": "" + }, + { + "table_name": "rex_blaupause_entry", + "prio": 4, + "type_id": "value", + "type_name": "choice_status", + "db_type": "int", + "list_hidden": 0, + "search": 1, + "name": "status", + "label": "translate:blaupause.entry.status", + "not_required": "", + "multiple": "0", + "expanded": "0", + "choices": "\\Alexplusde\\Blaupause\\Entry::getStatusOptions", + "choice_attributes": "", + "attributes": "", + "default": "", + "no_db": "0", + "notice": "", + "preferred_choices": "", + "group_by": "", + "placeholder": "", + "group_attributes": "", + "choice_label": "" + }, + { + "table_name": "rex_blaupause_entry", + "prio": 5, + "type_id": "validate", + "type_name": "empty", + "db_type": "", + "list_hidden": 1, + "search": 0, + "name": "status", + "label": "", + "not_required": "", + "message": "translate:blaupause.entry.status.validate.empty" + }, + { + "table_name": "rex_blaupause_entry", + "prio": 6, + "type_id": "value", + "type_name": "datestamp", + "db_type": "datetime", + "list_hidden": 0, + "search": 0, + "name": "createdate", + "label": "translate:blaupause.entry.createdate", + "not_required": "", + "no_db": "0", + "only_empty": "1", + "format": "Y-m-d H:i:s" + }, + { + "table_name": "rex_blaupause_entry", + "prio": 7, + "type_id": "value", + "type_name": "be_user", + "db_type": "varchar(191)", + "list_hidden": 0, + "search": 0, + "name": "createuser", + "label": "translate:blaupause.entry.createuser", + "not_required": "", + "only_empty": "1", + "show_value": "0" + }, + { + "table_name": "rex_blaupause_entry", + "prio": 8, + "type_id": "value", + "type_name": "datestamp", + "db_type": "datetime", + "list_hidden": 0, + "search": 0, + "name": "updatedate", + "label": "translate:blaupause.entry.updatedate", + "not_required": "", + "no_db": "0", + "only_empty": "0", + "format": "Y-m-d H:i:s" + }, + { + "table_name": "rex_blaupause_entry", + "prio": 9, + "type_id": "value", + "type_name": "be_user", + "db_type": "varchar(191)", + "list_hidden": 0, + "search": 0, + "name": "updateuser", + "label": "translate:blaupause.entry.updateuser", + "not_required": "", + "only_empty": "0", + "show_value": "0" + }, + { + "table_name": "rex_blaupause_entry", + "prio": 10, + "type_id": "value", + "type_name": "uuid", + "db_type": "varchar(36)", + "list_hidden": 1, + "search": 0, + "name": "uuid", + "label": "translate:blaupause.entry.uuid", + "not_required": "", + "no_db": "0", + "show_value": "0" + }, + { + "table_name": "rex_blaupause_entry", + "prio": 11, + "type_id": "validate", + "type_name": "unique", + "db_type": "", + "list_hidden": 1, + "search": 0, + "name": "uuid", + "label": "", + "not_required": "", + "message": "translate:blaupause.entry.uuid.validate.unique", + "empty_option": "0", + "table": "" + } + ] + } +} diff --git a/install/table-scheme.php b/install/table-scheme.php index b3d9bbc..9355def 100644 --- a/install/table-scheme.php +++ b/install/table-scheme.php @@ -1 +1,28 @@ ensurePrimaryIdColumn() + ->ensureColumn(new rex_sql_column('name', 'varchar(191)', false, '')) + ->ensureColumn(new rex_sql_column('status', 'int(11)')) + ->ensureColumn(new rex_sql_column('createdate', 'datetime')) + ->ensureColumn(new rex_sql_column('createuser', 'varchar(191)')) + ->ensureColumn(new rex_sql_column('updatedate', 'datetime')) + ->ensureColumn(new rex_sql_column('updateuser', 'varchar(191)')) + ->ensureColumn(new rex_sql_column('uuid', 'varchar(36)')) + ->ensureColumn(new rex_sql_column('blaupause_entry_ids', 'int(10) unsigned')) + ->ensureIndex(new rex_sql_index('uuid', ['uuid'], rex_sql_index::UNIQUE)) + ->ensure(); + + +rex_sql_table::get(rex::getTable('blaupause_entry')) + ->ensurePrimaryIdColumn() + ->ensureColumn(new rex_sql_column('name', 'varchar(191)', false, '')) + ->ensureColumn(new rex_sql_column('status', 'int(11)')) + ->ensureColumn(new rex_sql_column('createdate', 'datetime')) + ->ensureColumn(new rex_sql_column('createuser', 'varchar(191)')) + ->ensureColumn(new rex_sql_column('updatedate', 'datetime')) + ->ensureColumn(new rex_sql_column('updateuser', 'varchar(191)')) + ->ensureColumn(new rex_sql_column('uuid', 'varchar(36)')) + ->ensureColumn(new rex_sql_column('blaupause_category_id', 'int(10) unsigned')) + ->ensureIndex(new rex_sql_index('uuid', ['uuid'], rex_sql_index::UNIQUE)) + ->ensure(); diff --git a/lang/de_de.lang b/lang/de_de.lang index f76097c..995772b 100644 --- a/lang/de_de.lang +++ b/lang/de_de.lang @@ -19,3 +19,26 @@ blaupause_config_mytextfield_notice = Notiz, die etwas erklärt und bspw. einen blaupause_table_name_label = Name blaupause_table_name_notice = Notiz, die etwas erklärt und auch einen Beispielwert nennen kann, z.B.: Mein Name + +blaupause.entry.table = Einträge +blaupause.category.table = Kategorien + +# Tabellen: Einträge + +blaupause.category.name = Name +blaupause.category.blaupause_entry_ids = Einträge +blaupause.category.status = Status +blaupause.category.createdate = Erstellt am +blaupause.category.createuser = Erstellt von +blaupause.category.updatedate = Aktualisiert am +blaupause.category.updateuser = Aktualisiert von +blaupause.category.uuid = UUID + +blaupause.entry.name = Name +blaupause.entry.blaupause_category_id = Kategorie +blaupause.entry.status = Status +blaupause.entry.createdate = Erstellt am +blaupause.entry.createuser = Erstellt von +blaupause.entry.updatedate = Aktualisiert am +blaupause.entry.updateuser = Aktualisiert von +blaupause.entry.uuid = UUID diff --git a/lib/Category.php b/lib/Category.php index 055027d..bb137ad 100644 --- a/lib/Category.php +++ b/lib/Category.php @@ -5,10 +5,16 @@ use rex_csrf_token; use rex_extension_point; use rex_url; +use rex_yform_manager_collection; use rex_yform_manager_dataset; class Entry extends rex_yform_manager_dataset { + + const STATUS_ACTIVE = 1; + const STATUS_DRAFT = 0; + const STATUS_INACTIVE = -1; + // https://github.com/yakamara/redaxo_yform/blob/master/docs/04_yorm.md#yorm-mit-eigener-model-class-verwenden // Lasse dir die Klasse anhand deines Tablesets selbst bauen: https://github.com/alexplusde/ymca // Nachfolgend ein Beispiel, um eigene Methoden zu erstellen @@ -53,4 +59,19 @@ static function ($a) { }, ); } + + public static function getStatusOptions(): array + { + return [ + self::STATUS_ACTIVE => 'Aktiv', + self::STATUS_DRAFT => 'Entwurf', + self::STATUS_INACTIVE => 'Inaktiv', + ]; + } + + public static function findOnline(): rex_yform_manager_collection + { + return self::query()->where('status', self::STATUS_ACTIVE)->find(); + } + } diff --git a/lib/Entry.php b/lib/Entry.php index 212e1a4..59b415d 100644 --- a/lib/Entry.php +++ b/lib/Entry.php @@ -6,9 +6,15 @@ use rex_extension_point; use rex_csrf_token; use rex_url; +use rex_yform_manager_collection; class Entry extends rex_yform_manager_dataset { + + const STATUS_ACTIVE = 1; + const STATUS_DRAFT = 0; + const STATUS_INACTIVE = -1; + // https://github.com/yakamara/redaxo_yform/blob/master/docs/04_yorm.md#yorm-mit-eigener-model-class-verwenden // Lasse dir die Klasse anhand deines Tablesets selbst bauen: https://github.com/alexplusde/ymca // Nachfolgend ein Beispiel, um eigene Methoden zu erstellen @@ -53,4 +59,18 @@ static function ($a) { }, ); } + + public static function getStatusOptions(): array + { + return [ + self::STATUS_ACTIVE => 'Aktiv', + self::STATUS_DRAFT => 'Entwurf', + self::STATUS_INACTIVE => 'Inaktiv', + ]; + } + + public static function findOnline(): rex_yform_manager_collection + { + return self::query()->where('status', self::STATUS_ACTIVE)->find(); + } } diff --git a/package.yml b/package.yml index 66f6749..c1acb55 100644 --- a/package.yml +++ b/package.yml @@ -31,13 +31,17 @@ pages: # main: true block: system # 'system', um ins Hauptmenü zu verschieben, oder 'blaupause', um eigenen blaupause-Abschnitt zu erstellen. Weglassen, um bei den Addons gelistet zu werden prio: 15 # Reihenfolge in Abhängigkeit anderer Addons - icon: rex-icon fa-calendar # Icon neben dem Menüpunkt + icon: rex-icon fa-document # Icon neben dem Menüpunkt perm: blaupause[] # Berechtigung, die einer Rolle zugewiesen werden kann. z.B. `admin` für Admin, oder `blaupause['xyz']` für dein eigenes Addon subpages: # Automatisches Untermenü unterhalb des Reisters von `blaupausepage` erzeugen - table: + entry: title: translate:blaupause_table - icon: rex-icon fa-gear - perm: blaupause[] + icon: rex-icon fa-document + perm: blaupause[entry] + category: + title: translate:blaupause_table + icon: rex-icon fa-folder + perm: blaupause[category] settings: title: translate:blaupause_settings icon: rex-icon fa-gear diff --git a/pages/entry.php b/pages/blaupause.category.php similarity index 100% rename from pages/entry.php rename to pages/blaupause.category.php diff --git a/pages/category.php b/pages/blaupause.entry.php similarity index 100% rename from pages/category.php rename to pages/blaupause.entry.php