mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-12-27 23:20:28 +01:00
68 lines
2.2 KiB
PHP
68 lines
2.2 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace Xentral\Widgets\DataTable\Feature;
|
||
|
|
||
|
use Xentral\Widgets\DataTable\Column\Column;
|
||
|
use Xentral\Widgets\DataTable\Column\ColumnFormatter;
|
||
|
use Xentral\Widgets\DataTable\DataTableInterface;
|
||
|
use Xentral\Widgets\DataTable\Exception\DataTableExceptionInterface;
|
||
|
use Xentral\Widgets\DataTable\Exception\InvalidArgumentException;
|
||
|
|
||
|
final class RowDetailsFeature implements DataTableFeatureInterface
|
||
|
{
|
||
|
/** @var string $ajaxUrl */
|
||
|
private $ajaxUrl;
|
||
|
|
||
|
/** @var string $ajaxMethod */
|
||
|
private $ajaxMethod;
|
||
|
|
||
|
/** @var array $ajaxParams @todo Additional AJAX parameter */
|
||
|
private $ajaxParams = [];
|
||
|
|
||
|
/**
|
||
|
* Der Wert aus der id-Spalte wird als POST-Parameter `id` übergeben
|
||
|
*
|
||
|
* @param string $ajaxUrl `./index.php?module=foo&action=bar`
|
||
|
* @param string $ajaxMethod [GET|POST]
|
||
|
* @param callable|null $customFormatter @todo
|
||
|
*/
|
||
|
public function __construct($ajaxUrl, $ajaxMethod = 'POST', $customFormatter = null)
|
||
|
{
|
||
|
$ajaxMethod = strtoupper($ajaxMethod);
|
||
|
if (!in_array($ajaxMethod, ['GET', 'POST'])) {
|
||
|
throw new InvalidArgumentException(sprintf('Invalid method "%s".', $ajaxMethod));
|
||
|
}
|
||
|
|
||
|
$this->ajaxUrl = $ajaxUrl;
|
||
|
$this->ajaxMethod = $ajaxMethod;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param DataTableInterface $table
|
||
|
*
|
||
|
* @throws DataTableExceptionInterface
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public function modifyTable(DataTableInterface $table)
|
||
|
{
|
||
|
$table->getOptions()->setOption('rowDetails', [
|
||
|
'ajax' => [
|
||
|
'url' => $this->ajaxUrl,
|
||
|
'method' => $this->ajaxMethod,
|
||
|
'data' => $this->ajaxParams,
|
||
|
],
|
||
|
]);
|
||
|
|
||
|
// Detail-Spalte erzeugen
|
||
|
$newCol = Column::fixed('details', '', 'center', '20px');
|
||
|
$newCol->setFormatter(ColumnFormatter::template('<span class="details" data-id="{ID}"></span>'));
|
||
|
$newCol->addCssClass('dt-details');
|
||
|
|
||
|
// Detail-Spalte vor erste Spalte einfügen
|
||
|
/** @var Column $firstCol */
|
||
|
$firstCol = $table->getColumns()->getByIndex(0);
|
||
|
$table->getColumns()->addBefore($newCol, $firstCol->getName());
|
||
|
}
|
||
|
}
|