shell bypass 403
<?php
namespace Rappasoft\LaravelLivewireTables\Views;
use Illuminate\Support\HtmlString;
use Illuminate\Support\Str;
/**
* Class Column.
*/
class Column
{
/**
* @var string|null
*/
public ?string $column = null;
/**
* @var string|null
*/
public ?string $text = null;
/**
* @var array
*/
public array $attributes = [];
/**
* @var bool
*/
public bool $sortable = false;
/**
* @var
*/
public $sortCallback;
/**
* @var bool
*/
public bool $searchable = false;
/**
* @var callable
*/
public $searchCallback;
/**
* @var string|null
*/
public ?string $class = null;
/**
* @var bool
*/
public bool $blank = false;
/**
* @var
*/
public $formatCallback;
/**
* @var bool
*/
public bool $asHtml = false;
/**
* @var bool
*/
public bool $hidden = false;
/**
* @var bool
*/
public bool $selectable = true;
/**
* @var bool
*/
public bool $selected = false;
/**
* @var bool
*/
public bool $secondaryHeader = false;
/**
* @var
*/
public $secondaryHeaderCallback;
/**
* @var bool
*/
public bool $footer = false;
/**
* @var
*/
public $footerCallback;
/**
* @var
*/
public $linkCallback;
/**
* @var ?string
*/
public ?string $linkTarget;
/**
* Column constructor.
*
* @param string|null $column
* @param string|null $text
*/
public function __construct(string $text = null, string $column = null)
{
$this->text = $text;
if (! $column && $text) {
$this->column = Str::snake($text);
} else {
$this->column = $column;
}
if (! $this->column && ! $this->text) {
$this->blank = true;
}
}
/**
* @param string|null $column
* @param string|null $text
*
* @return Column
*/
public static function make(string $text = null, string $column = null): Column
{
return new static($text, $column);
}
/**
* @return Column
*/
public static function blank(): Column
{
return new static(null, null);
}
/**
* @return bool
*/
public function isSortable(): bool
{
return $this->sortable === true;
}
/**
* @return bool
*/
public function isSearchable(): bool
{
return $this->searchable === true;
}
/**
* @return bool
*/
public function isBlank(): bool
{
return $this->blank === true;
}
/**
* @return $this
*/
public function sortable($callback = null): self
{
$this->sortable = true;
$this->sortCallback = $callback;
return $this;
}
/**
* @param callable|null $callback
* @return $this
*/
public function searchable(callable $callback = null): self
{
$this->searchable = true;
$this->searchCallback = $callback;
return $this;
}
/**
* @param string $class
*
* @return $this
*/
public function addClass(string $class): self
{
$this->class = $class;
return $this;
}
/**
* @param array $attributes
*
* @return $this
*/
public function addAttributes(array $attributes): self
{
$this->attributes = $attributes;
return $this;
}
/**
* @return Column
*/
public function asHtml(): Column
{
$this->asHtml = true;
return $this;
}
/**
* @return bool
*/
public function isHtml(): bool
{
return $this->asHtml === true;
}
/**
* @return string|null
*/
public function class(): ?string
{
return $this->class;
}
/**
* @return string|null
*/
public function column(): ?string
{
return $this->column;
}
/**
* @return string|null
*/
public function text(): ?string
{
return $this->text;
}
/**
* @return array
*/
public function attributes(): array
{
return $this->attributes;
}
/**
* @param callable $callable
*
* @return $this
*/
public function format(callable $callable): Column
{
$this->formatCallback = $callable;
return $this;
}
/**
* @param $row
* @param null $column
*
* @return array|mixed|null
*/
public function formatted($row, $column = null)
{
if ($column instanceof self) {
$columnName = $column->column();
} elseif (is_string($column)) {
$columnName = $column;
} else {
$columnName = $this->column();
}
$value = data_get($row, $columnName);
if ($this->formatCallback) {
$value = call_user_func($this->formatCallback, $value, $column, $row);
}
if ($this->linkCallback) {
$url = call_user_func($this->linkCallback, $value, $column, $row);
if ($url) {
$linkTarget = $this->linkTarget ? "target='$this->linkTarget'" : '';
$value = new HtmlString("<a href='$url' $linkTarget>$value</a>");
}
}
return $value;
}
/**
* @return bool
*/
public function hasSortCallback(): bool
{
return $this->sortCallback !== null;
}
/**
* @return callable|null
*/
public function getSortCallback(): ?callable
{
return $this->sortCallback;
}
/**
* @return bool
*/
public function hasSearchCallback(): bool
{
return $this->searchCallback !== null;
}
/**
* @return callable|null
*/
public function getSearchCallback(): ?callable
{
return $this->searchCallback;
}
/**
* @param $condition
*
* @return $this
*/
public function hideIf($condition): self
{
$this->hidden = $condition;
return $this;
}
/**
* @return bool
*/
public function isVisible(): bool
{
return $this->hidden !== true;
}
/**
* @return $this
*/
public function excludeFromSelectable(): self
{
$this->selectable = false;
return $this;
}
/**
* @return bool
*/
public function isSelectable(): bool
{
return $this->selectable === true;
}
/**
* @return $this
*/
public function selected(): self
{
$this->selected = true;
return $this;
}
/**
* @return bool
*/
public function isSelected(): bool
{
return $this->selected;
}
/**
* @return bool
*/
public function hasSecondaryHeader(): bool
{
return $this->secondaryHeader === true;
}
/**
* @return $this
*/
public function secondaryHeader($callback = null): self
{
$this->secondaryHeader = true;
$this->secondaryHeaderCallback = $callback;
return $this;
}
/**
* @param $rows
*
* @return false|mixed|null
*/
public function secondaryHeaderFormatted($rows)
{
$value = null;
if ($this->secondaryHeaderCallback) {
$value = call_user_func($this->secondaryHeaderCallback, $rows);
}
return $value;
}
/**
* @return bool
*/
public function hasFooter(): bool
{
return $this->footer === true;
}
/**
* @return $this
*/
public function footer($callback = null): self
{
$this->footer = true;
$this->footerCallback = $callback;
return $this;
}
/**
* @param $rows
*
* @return false|mixed|null
*/
public function footerFormatted($rows)
{
$value = null;
if ($this->footerCallback) {
$value = call_user_func($this->footerCallback, $rows);
}
return $value;
}
/**
* @param callable $callable
* @param string|null $target
*
* @return $this
*/
public function linkTo(callable $callable, string $target = null): self
{
$this->linkCallback = $callable;
$this->linkTarget = $target;
return $this;
}
}