IT-MÜCKE

Xataface: actions mit mehreren Bedingungen aufbauen

Beitragsdatum 09.08.2023
Letzte Aktualisierung -
Betrifft xataface

Xataface ist ein Framework, um schnell und einfach komplexe Datenbankanwendungen bauen zu können.

Problem

In sogenannten actions kann beliebige Programmlogik ausgeführt werden. Actions werden im Xataface-Manual näher beschrieben.

Meine Anforderung war nun:
die Delete-Action (in all ihren Ausprägungen) sollte nur auf bestimmten Tabellen vorhanden sein bzw. auf bestimmten Tabellen nicht vorhanden sein.


Lösung

Die richtigen Actions finden

Die „fest eingebauten“ Actions werden im Installationsverzeichnis von Xataface ebenfalls in der action.ini verfügbar gemacht.

Dort suchte ich mit die gewünschten Actions heraus.

Die Actions rund ums Löschen von Datensätzen sind z.B.:

  • [delete]
  • [delete_found]
  • [delete_selected]

Die richtigen Actions selbst verwalten

Wenn diese Actions in die lokale actions.ini (also innerhalb des Dataface-Verzeichnisses) kopiert werden, dann „überschreiben“ diese Actions die Actions aus der Installations-Action-Datei. Soll heißen: die Einstellungen sind anwendungsbezogen änderbar. Und das ist gut so.

Die Actions nur unter bestimmten Bedingungen ausführbar machen

Bei einer Action wird unter anderem angegeben, welche Bedingungen erfüllt sein müssen, damit diese Action ausführbar ist:

;; Delete the current record
[delete]
        label = Delete
        description = Delete current record
        url = "{$this->url('-action=delete&-delete-one=1')}"
        materialIcon="delete"
        category = record_actions
        accessKey = d
        mode = browse
        condition = "$query['-mode']=='browse'"
        condition = "($query['-table'] != 'table_a' && $query['-table'] != 'table_b' && $query['-table'] != 't_settings' )"
        permission = delete
        order=5
    rel=child

Mehrere conditions untereinander geschrieben, werden anscheinend (ich habe dazu keine offizielle Aussage gefunden) UND-verknüpft. Hier gilt also: mode == browse UND table != table_a UND table != table_b.

Innerhalb einer condition können Bedingungen ebenfalls logisch verknüpft werden:
table != table_a && table != table_b
bedeutet: diese action soll nicht auf table_a und nicht auf table_b erscheinen und kann somit auf allen anderen Tabellen ausgeführt werden.

Eine Alternative:
table == table_c || table == table_d bedeutet: diese action kann nur auf table_c oder table_d ausgeführt werden. Auf allen anderen nicht.

Und somit kann man Standard-Actions gezielt anzeigen und ausführbar machen oder eben nicht.


Ähnliche Themen im blog:
xataface


zurück