19declare(strict_types=1);
26use Psr\Http\Message\ServerRequestInterface;
60 ViewControl\
Factory $view_control_factory,
61 ViewControlContainer\
Factory $view_control_container_factory,
62 protected DataFactory $data_factory,
66 protected T\DataRetrieval $data_retrieval,
71 $view_control_factory,
72 $view_control_container_factory,
84 return $this->data_retrieval;
90 $clone->filter = $filter;
101 $clone = clone $this;
102 $clone->additional_parameters = $additional_parameters;
108 return $this->additional_parameters;
114 $clone = clone $this;
115 $clone->additional_viewcontrol_data = $additional_viewcontrol_data;
121 return $this->additional_viewcontrol_data;
126 return $this->data_row_builder
137 mixed $additional_parameters = []
140 if ($request ===
null) {
147 $additional_viewcontrol_data = array_filter(
148 $this->applyValuesToViewcontrols($this->
getViewControls(
null), $request)->getData(),
149 fn($key) => !in_array($key, [self::VIEWCONTROL_KEY_PAGINATION, self::VIEWCONTROL_KEY_ORDERING, self::VIEWCONTROL_KEY_FIELDSELECTION]),
153 $total_count = $this->getDataRetrieval()->getTotalRowCount($additional_viewcontrol_data, $filter_data, $additional_parameters);
156 $data = $this->applyValuesToViewcontrols($view_controls, $request)->getData();
159 $order =
$data[self::VIEWCONTROL_KEY_ORDERING];
160 $order = ($order instanceof
Order) ? $order :
null;
170 ->withSelectedOptionalColumns(
$data[self::VIEWCONTROL_KEY_FIELDSELECTION] ??
null)
171 ->withAdditionalViewControlData($additional_viewcontrol_data);
173 # This retrieves the view controls that should be displayed
174 $view_controls = $table->applyValuesToViewcontrols($table->getViewControls($total_count), $request);
182 protected function getViewControls(?
int $total_count =
null): ViewControlContainer\ViewControl
188 $this->additional_view_control
190 $view_controls = array_filter($view_controls);
191 $vc = $this->view_control_container_factory->standard($view_controls);
192 if ($this->
getId() !==
null) {
193 $vc = $vc->withDedicatedName(
'vc' . $this->
getId());
201 $clone = clone $this;
202 $clone->additional_view_control = $view_control
203 ->withDedicatedName(self::VIEWCONTROL_KEY_ADDITIONAL);
Both the subject and the direction need to be specified when expressing an order.
A simple class to express a naive range of whole positive numbers.
croppedTo(int $max)
This will create a range that is guaranteed to not exceed $max.
ServerRequestInterface $request
withFilter(mixed $filter)
getAdditionalParameters()
applyViewControls(mixed $filter_data, mixed $additional_parameters=[])
mixed $additional_viewcontrol_data
withAdditionalParameters(mixed $additional_parameters)
ViewControlContainer ViewControlInput $additional_view_control
getViewControls(?int $total_count=null)
const VIEWCONTROL_KEY_ADDITIONAL
const VIEWCONTROL_KEY_FIELDSELECTION
getAdditionalViewControlData()
const VIEWCONTROL_KEY_PAGINATION
withAdditionalViewControlData(mixed $additional_viewcontrol_data)
mixed $additional_parameters
withAdditionalViewControl(ViewControlContainer\ViewControlInput $view_control)
__construct(SignalGeneratorInterface $signal_generator, ViewControl\Factory $view_control_factory, ViewControlContainer\Factory $view_control_container_factory, protected DataFactory $data_factory, protected DataRowBuilder $data_row_builder, string $title, array $columns, protected T\DataRetrieval $data_retrieval, \ArrayAccess $storage)
const VIEWCONTROL_KEY_ORDERING
Interface to be extended by components that have the possibility to bind to Javascript.
A Column describes the form of presentation for a certain aspect of data, i.e.
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
trait TableViewControlPagination
getViewControlPagination(?int $total_count=null)
trait TableViewControlOrdering
getViewControlFieldSelection()
getViewControlOrdering(int|null $total_count)
initViewControlFieldSelection(array $columns)
initViewControlOrdering()
initViewControlpagination()
trait TableViewControlFieldSelection
getViewControls()
@inheritDoc
trait JavaScriptBindable
Trait for components implementing JavaScriptBindable providing standard implementation.