diff --git a/src/bundle/Resources/config/services/ui_config/common.yaml b/src/bundle/Resources/config/services/ui_config/common.yaml index 12885f3a6d..67e1f482b3 100644 --- a/src/bundle/Resources/config/services/ui_config/common.yaml +++ b/src/bundle/Resources/config/services/ui_config/common.yaml @@ -104,6 +104,8 @@ services: Ibexa\Bundle\AdminUi\Templating\Twig\EmbeddedItemEditFormExtension: ~ + Ibexa\Bundle\AdminUi\Templating\Twig\TableExtension: ~ + Ibexa\AdminUi\UI\Config\Provider\UserContentTypes: tags: - { name: ibexa.admin_ui.config.provider, key: 'userContentTypes' } diff --git a/src/bundle/Templating/Twig/TableExtension.php b/src/bundle/Templating/Twig/TableExtension.php new file mode 100644 index 0000000000..a63e662482 --- /dev/null +++ b/src/bundle/Templating/Twig/TableExtension.php @@ -0,0 +1,60 @@ +eventDispatcher = $eventDispatcher; + } + + public function getFunctions(): array + { + return [ + new TwigFunction('ibexa_add_custom_table_headers', [$this, 'addCustomHeaders']), + new TwigFunction('ibexa_add_custom_table_columns', [$this, 'addCustomColumns']), + ]; + } + + /** + * @param array> $existingHeaders + * + * @return array> + */ + public function addCustomHeaders(string $tableIdentifier, array $existingHeaders): array + { + $event = new CollectCustomTableHeadersEvent($tableIdentifier, $existingHeaders); + $this->eventDispatcher->dispatch($event); + + return $event->getHeaders(); + } + + /** + * @param array> $existingColumns + * @param mixed $row + * + * @return array> + */ + public function addCustomColumns(string $tableIdentifier, array $existingColumns, $row): array + { + $event = new CollectCustomTableColumnsEvent($tableIdentifier, $existingColumns, $row); + $this->eventDispatcher->dispatch($event); + + return $event->getColumns(); + } +} diff --git a/src/lib/Tab/Event/CollectCustomTableColumnsEvent.php b/src/lib/Tab/Event/CollectCustomTableColumnsEvent.php new file mode 100644 index 0000000000..f04d541c63 --- /dev/null +++ b/src/lib/Tab/Event/CollectCustomTableColumnsEvent.php @@ -0,0 +1,68 @@ +> */ + private array $columns; + + /** @var mixed */ + private $row; + + /** + * @param array> $columns + * @param mixed $row + */ + public function __construct(string $tableIdentifier, array $columns, $row) + { + $this->tableIdentifier = $tableIdentifier; + $this->columns = $columns; + $this->row = $row; + } + + public function getTableIdentifier(): string + { + return $this->tableIdentifier; + } + + /** + * @return mixed + */ + public function getRow() + { + return $this->row; + } + + /** + * @return array> + */ + public function getColumns(): array + { + return $this->columns; + } + + /** + * @param array $column + */ + public function addColumn(array $column): void + { + $this->columns[] = $column; + } + + /** + * @param array $column + */ + public function addColumnAt(int $index, array $column): void + { + array_splice($this->columns, $index, 0, [$column]); + } +} diff --git a/src/lib/Tab/Event/CollectCustomTableHeadersEvent.php b/src/lib/Tab/Event/CollectCustomTableHeadersEvent.php new file mode 100644 index 0000000000..8adc1da350 --- /dev/null +++ b/src/lib/Tab/Event/CollectCustomTableHeadersEvent.php @@ -0,0 +1,57 @@ +> */ + private array $headers; + + /** + * @param array> $headers + */ + public function __construct(string $tableIdentifier, array $headers) + { + $this->tableIdentifier = $tableIdentifier; + $this->headers = $headers; + } + + public function getTableIdentifier(): string + { + return $this->tableIdentifier; + } + + /** + * @return array> + */ + public function getHeaders(): array + { + return $this->headers; + } + + /** + * @param array $column + */ + public function addHeader(array $column): void + { + $this->headers[] = $column; + } + + /** + * @param array $header + */ + public function addHeaderAt(int $index, array $header): void + { + array_splice($this->headers, $index, 0, [$header]); + } +}