Forms/src/FuzeWorks/Forms/Fields/CheckboxField.php

104 lines
3.1 KiB
PHP
Executable File

<?php
/**
* FuzeWorks Forms Library
*
* The FuzeWorks PHP FrameWork
*
* Copyright (C) 2013-${YEAR} i15
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* @author i15
* @copyright Copyright (c) 2013 - ${YEAR}, i15. (http://i15.nl)
* @license https://opensource.org/licenses/MIT MIT License
*
* @link https://i15.nl
* @since Version 1.3.0
*
* @version Version 1.3.0
*/
namespace FuzeWorks\Forms\Fields;
use FuzeWorks\Forms\Field;
class CheckboxField extends Field
{
// Marked as optional so that a different error message can be displayed
protected bool $optional = true;
protected mixed $value = false;
/**
* Check the checkbox by default.
*
* @return $this
*/
public function checked(): static
{
$this->value = true;
return $this;
}
public function setValue(mixed $value): static
{
if (!is_bool($value) && !is_null($value))
$value = true;
return parent::setValue($value);
}
/**
* Require this field for validation.
*
* If an errorMessage is provided, it shall be displayed instead of the standard 'checkbox is required'.
*
* @param string|null $errorMessage
* @return $this
*/
public function required(string $errorMessage = null): static
{
$this->optional = false;
if (!is_null($errorMessage))
$this->emptyErrorString = $errorMessage;
return $this;
}
/**
* @inheritDoc
*/
protected function validateField(): bool
{
return true;
}
/**
* @inheritDoc
*/
public function generateHtml(): string
{
$id = "id='".$this->getId()."'";
$name = "name='".$this->getName()."'";
$class = "class='".implode(" ", $this->classNames)."'";
$value = $this->value ? "checked" : "";
$lock = $this->lock ? "disabled" : "";
return "<input $class type='checkbox' $id $name $value $lock>";
}
}