File: D:/HostingSpaces/Neopoints/momsecurity.be/vendor/komma/kms/src/Core/Attributes/Checkboxes.php
<?php
namespace Komma\KMS\Core\Attributes;
use Komma\KMS\Core\Attributes\Interfaces\HasLabelInterface;
use Komma\KMS\Core\Attributes\Interfaces\ManyToManyRelatableInterface;
use Komma\KMS\Core\Attributes\Traits\ExplanationTrait;
use Komma\KMS\Core\Attributes\Traits\LabelTrait;
use Komma\KMS\Core\Attributes\Models\SelectOptionInterface;
use Komma\KMS\Core\Attributes\Traits\ManyToManyRelatableTrait;
use Komma\KMS\Core\Attributes\Traits\ReadOnlyTrait;
use Illuminate\Database\Eloquent\Model;
class Checkboxes extends Attribute implements ManyToManyRelatableInterface, HasLabelInterface
{
use LabelTrait;
use ReadOnlyTrait;
use ExplanationTrait;
use ManyToManyRelatableTrait;
/** @var SelectOptionInterface[] $items */
private array $items = [];
/**
* Sets the items you can select
*
* @param SelectOptionInterface[] $items
* @return $this
*/
public function setItems(array $items)
{
$items = array_filter($items, function($item) {
return is_a($item, SelectOptionInterface::class);
});
$this->items = $items;
return $this;
}
/**
* Returns the items that you can select.
* Normally as an array unless you specify the parameter as true.
* In that latter case it will return a json string.
*
* @param bool $asJson
* @return SelectOptionInterface[]|string
*/
public function getItems(bool $asJson = false)
{
if(!$asJson) return $this->items;
$jsonPreparementArray = [];
/** @var SelectOptionInterface $item */
foreach($this->items as $item)
{
//Make sure that these keys match the ones in select.blade.php and ???
$jsonPreparementArray[] = $this->buildJsonRepresentation($item);
}
$jsonItems = implode(",", $jsonPreparementArray);
$json = "[".$jsonItems."]";
return $json;
}
/**
* Sets the id of the model that needs to be displayed
*
* @param string $value
* @return $this
*/
public function setValue(string $value)
{
$this->value = $value;
return $this;
}
/**
* Return the value as a string or as a json object for the javascript code.
*
* @param bool $asJson
* @return string
*/
public function getValue($asJson = false): string
{
if($asJson == false) {
if(!empty($this->value)) return $this->value;
return '';
} else {
//Return an object
$jsonItemPreparementArray = [];
$selectedItemId = $this->value;
if($selectedItemId) {
$jsonItemPreparementArray['id'] = $selectedItemId;
}
$json = json_encode($jsonItemPreparementArray);
return $json;
}
}
/**
* Builds a json representation of a SelectOptionsInterface implementation.
* You should use these representation in the javascript code.
* @param SelectOptionInterface $selectOption
* @return string
*/
private function buildJsonRepresentation(SelectOptionInterface $selectOption): string
{
$optionJsonPreparementData = [];
$optionJsonPreparementData['value'] = $selectOption->getValue();
$optionJsonPreparementData['content'] = $selectOption->getContent();
$optionJsonPreparementData['htmlContent'] = $selectOption->getHtmlContent();
$json = json_encode($optionJsonPreparementData);
return $json;
}
/**
* Returns a view that visually represents this attribute
*
* @return string
*/
public function render(): string
{
//get id from model
$currentId = null;
foreach(request()->route()->parameters as $parameter)
{
if(is_a($parameter, Model::class))
{
$currentId = $parameter->id;
}
}
return view('KMS::attributes.checkboxes', [
'attribute' => $this,
'currentId' => $currentId,
])->render();
}
/**
* @return Checkboxes|void
* @deprecated
*/
public function enableSortable()
{
throw new \BadMethodCallException(self::class.': The UI of the checkboxes does not support the sort features of the ManyToManyRelatableInterface. Swap the attribute to MultiSelect if you want to enableSortable.');
}
}