/** Datei: plugins/rest/library/ARUNOX/Plugins/REST/Generator/Data/Table/Helpers/TableHelpers.php **/ * @copyright 2025 ARUNOX * @version 1.0.0 * @since 1.0.0 File is created */ namespace ARUNOX\Plugins\REST\Generator\Data\Table\Helpers; use ARUNOX\Plugins\REST\Generator\Data\Table; trait TableHelpers { /* ### TRAIT INIT FUNCTIONS ##################################### # */ public function TableHelpersInit() { $this->addAllowedContent( "table", [ "generator" => Table::class, "args" => [], ]); } /* ### PUBLIC FUNCTIONS ######################################### # */ } /** Datei: plugins/rest/library/ARUNOX/Plugins/REST/Generator/Data/Table/Column/Type.php **/ * @copyright 2025 ARUNOX * @version 1.0.0 * @since 1.0.0 File is created */ namespace ARUNOX\Plugins\REST\Generator\Data\Table\Column; /* ### ENUMS ######################################################## # */ enum Type : string { case Date = "date"; case Tel = "tel"; case URL = "url"; case Text = "text"; case Icon = "icon"; case Small = "small"; case Time = "time"; case Email = "email"; case Amount = "amount"; case Status = "status"; case Actions = "actions"; case DateTime = "datetime"; /* ### MAGIC FUNCTIONS ########################################## # */ } /** Datei: plugins/rest/library/ARUNOX/Plugins/REST/Generator/Data/Table/Column/Column.php **/ * @copyright 2025 ARUNOX * @version 1.0.0 * @since 1.0.0 File is created */ namespace ARUNOX\Plugins\REST\Generator\Data\Table; use ARUNOX\Plugins\REST\Generator; use ARUNOX\Plugins\REST\Generator\Config; use ARUNOX\Plugins\REST\Generator\Base\BaseGenerator; use ARUNOX\Plugins\REST\Generator\Helpers\ActionHelpers; use ARUNOX\Plugins\REST\Generator\Helpers\ButtonHelpers; use ARUNOX\Plugins\REST\Generator\Data\Table\Column\Type; class Column extends BaseGenerator { /* ### TRAITS ################################################### # */ use ActionHelpers, ButtonHelpers; /* ### VARIABLES ################################################ # */ protected static ?string $PRIMARYKEY = "key"; protected array $ALLOWED_CONFIG = [ "key" => Config\Type::String, "label" => Config\Type::String, "title" => Config\Type::String, "icon" => Config\Type::String, "emoji" => Config\Type::String, "visible" => Config\Type::Bool, "sortable" => Config\Type::Bool, "searchable" => Config\Type::Bool, "type" => Type::class, "color" => Config\Color::class, "options" => Config\Type::Array, ]; /* ### PUBLIC FUNCTIONS ######################################### # */ public function beforeColumn( ...$args ) { if( isset( $args["type"] ) ) { $class = "ARUNOX\\Plugins\\REST\\Generator\\Data\\Table\\Column\\" . $args["type"]->name; if( class_exists( $class ) ) { $field = Generator::create( $class, ...$args ); $this->before( "columns", $field ); return $this; } } $this->before( "columns", ...$args ); return $this; } public function afterColumn( ...$args ) { if( isset( $args["type"] ) ) { $class = "ARUNOX\\Plugins\\REST\\Generator\\Data\\Table\\Column\\" . $args["type"]->name; if( class_exists( $class ) ) { $field = Generator::create( $class, ...$args ); $this->after( "columns", $field ); return $this; } } $this->after( "columns", ...$args ); return $this; } /* ### MAGIC FUNCTIONS ########################################## # */ } /** Datei: plugins/rest/library/ARUNOX/Plugins/REST/Generator/Data/Table/Column/Status.php **/ * @copyright 2025 ARUNOX * @version 1.0.0 * @since 1.0.0 File is created */ namespace ARUNOX\Plugins\REST\Generator\Data\Table\Column; use ARUNOX\Plugins\REST\Generator; use ARUNOX\Plugins\REST\Generator\Config; use ARUNOX\Plugins\REST\Generator\Helpers\ActionHelpers; class Status extends Generator\Data\Table\Column { /* ### TRAITS ################################################### # */ use ActionHelpers; /* ### VARIABLES ################################################ # */ protected array $ALLOWED_CONTENT = []; protected array $ALLOWED_CONFIG = [ "options" => Config\Type::Array, ]; /* ### PUBLIC FUNCTIONS ######################################### # */ /* ### MAGIC FUNCTIONS ########################################## # */ } /** Datei: plugins/rest/library/ARUNOX/Plugins/REST/Generator/Data/Table/Column/Actions.php **/ * @copyright 2025 ARUNOX * @version 1.0.0 * @since 1.0.0 File is created */ namespace ARUNOX\Plugins\REST\Generator\Data\Table\Column; use ARUNOX\Plugins\REST\Generator; use ARUNOX\Plugins\REST\Generator\Helpers\ButtonHelpers; class Actions extends Generator\Data\Table\Column { /* ### TRAITS ################################################### # */ use ButtonHelpers; /* ### VARIABLES ################################################ # */ protected static array $CONFIGS = []; /* ### PUBLIC FUNCTIONS ######################################### # */ /* ### MAGIC FUNCTIONS ########################################## # */ } /** Datei: plugins/rest/library/ARUNOX/Plugins/REST/Generator/Data/Table/Table.php **/ * @copyright 2025 ARUNOX * @version 1.0.0 * @since 1.0.0 File is created */ namespace ARUNOX\Plugins\REST\Generator\Data; use ARUNOX\Database\BaseEntity; use ARUNOX\Plugins\REST\Generator; use ARUNOX\Plugins\REST\Generator\Config; use ARUNOX\Plugins\REST\Generator\Base\BaseWrapper; use ARUNOX\Plugins\REST\Generator\Data\Table\Column; use ARUNOX\Plugins\REST\Generator\Helpers\ActionHelpers; use ARUNOX\Plugins\REST\Generator\Helpers\ButtonHelpers; class Table extends BaseWrapper { /* ### TRAITS ################################################### # */ use ActionHelpers, ButtonHelpers; /* ### VARIABLES ################################################ # */ protected ?string $GENERATOR = "table"; protected string $CHILDREN_NAME = "columns"; protected array $ALLOWED_CONTENT = []; protected array $ALLOWED_DATA = [ "data" => BaseEntity::class, ]; protected array $ALLOWED_CONFIG = [ "search" => Config\Type::Bool, "columns" => [ "generator" => Column::class, "args" => [], ] ]; /* ### PUBLIC FUNCTIONS ######################################### # */ public function setApi( ...$args ) { return $this->setNamedAction( "api", ...$args ); } public function getApi( ...$args ) { return $this->getNamedAction( "api", ...$args ); } public function setOrder( string $column, string $order = "asc", array $rules = [], array $buttons = [] ) : self { $this->config["order"] = [ "column" => strtolower( $column ), "order" => strtolower( $order ), "rules" => $rules, "buttons" => [], ]; foreach( $buttons as $button ) { $this->config["order"]["buttons"][] = Generator::create( 'ARUNOX\Plugins\REST\Generator\Components\Button', ...$button ); } return $this; } public function getOrder( ...$args ) { return parent::getConfig( "order", ...$args ); } public function addColumn( ...$args ) { if( isset( $args["type"] ) ) { $class = "ARUNOX\\Plugins\\REST\\Generator\\Data\\Table\\Column\\" . $args["type"]->name; if( class_exists( $class ) ) { $field = Generator::create( $class, ...$args ); $this->add( "columns", $field ); return $this; } } $this->add( "columns", ...$args ); return $this; } public function getColumn( ?string $name = NULL, ...$args ) { if( $name ) { foreach( $this->config["columns"] as $column ) { if( $column->getKey() == $name ) { return $column; } } } else return end( $this->config["columns"] ); } public function getColumns() { return $this->config["columns"] ?? []; } public function addColumns( ...$args ) { foreach( $args as $arg ) { $this->addColumn( ...$arg ); } } public function removeColumn( string $name ) { $column = $this->getColumn( $name ); return $column->removeColumns(); } /* ### JSON FUNCTIONS ########################################### # */ public function jsonSerialize() : array { if( $api = $this->getApi() ) { $routes = []; $columns = []; $routes[] = $api["route"]; $routes[] = $this->getAction("route"); foreach( $this->getColumns() as $column ) { if( $column->getConfig("type") == Column\Type::Actions ) continue; $columns[] = $column->getKey(); $routes[] = $column->getAction("route"); } foreach( $this->getOrder( "rules" ) as $name => $rule ) { if( !isset( $rule["replace" ] ) ) continue; $columns[] = $name; foreach( $rule["replace" ] as $column => $replace ) { $columns[] = $replace; } } $routes = array_filter( $routes ); $routes = array_unique( $routes ); foreach( $routes as $route ) { if( preg_match_all('/\{([^\}]+)\}/', $route, $matches ) ) { $columns = array_merge( $columns, $matches[1] ); } } // show( $routes, $this->getColumn() ); $columns = array_filter( $columns ); $columns = array_unique( $columns ); // show( $columns, $api ); $api["query"] ??= []; $api["query"]["columns"] = implode( ",", $columns ); // $api["route"] = http_build_url( $api["route"], [ // ]); // show( $columns, $api ); $this->setApi( ...$api ); } return parent::jsonSerialize(); } /* ### MAGIC FUNCTIONS ########################################## # */ }