diff --git a/wire/modules/Fieldtype/FieldtypeCheckbox.module b/wire/modules/Fieldtype/FieldtypeCheckbox.module index 7fe1f9b4..c4631b1b 100644 --- a/wire/modules/Fieldtype/FieldtypeCheckbox.module +++ b/wire/modules/Fieldtype/FieldtypeCheckbox.module @@ -8,7 +8,7 @@ * For documentation about the fields used in this class, please see: * /wire/core/Fieldtype.php * - * ProcessWire 3.x, Copyright 2016 by Ryan Cramer + * ProcessWire 3.x, Copyright 2020 by Ryan Cramer * https://processwire.com * */ @@ -21,17 +21,44 @@ class FieldtypeCheckbox extends Fieldtype { 'version' => 101, 'summary' => 'This Fieldtype stores an ON/OFF toggle via a single checkbox. The ON value is 1 and OFF value is 0.', 'permanent' => true, - ); + ); } + /** + * Get blank value for field + * + * @param Page $page + * @param Field $field + * @return int + * + */ public function getBlankValue(Page $page, Field $field) { return 0; } + /** + * Sanitize value for field + * + * @param Page $page + * @param Field $field + * @param mixed $value + * @return int + * + */ public function sanitizeValue(Page $page, Field $field, $value) { return $value ? 1 : 0; } + /** + * Get markup value for field + * + * @param Page $page + * @param Field $field + * @param int|null $value + * @param string $property + * @return MarkupFieldtype|string + * + */ public function ___markupValue(Page $page, Field $field, $value = null, $property = '') { if(is_null($value)) $value = $page->get($field->name); $checked = $value ? " checked='checked'" : ""; @@ -40,17 +67,32 @@ class FieldtypeCheckbox extends Fieldtype { return "$textValue"; } + /** + * Get Inputfield for field + * + * @param Page $page + * @param Field $field + * @return InputfieldCheckbox + * + */ public function getInputfield(Page $page, Field $field) { /** @var InputfieldCheckbox $inputfield */ - $inputfield = $this->modules->get('InputfieldCheckbox'); + $inputfield = $this->wire()->modules->get('InputfieldCheckbox'); $inputfield->set('checkedValue', 1); $inputfield->set('uncheckedValue', 0); $value = $page->get($field->name); if($value) $inputfield->attr('checked', 'checked'); - $inputfield->class = $this->className(); + $inputfield->addClass($this->className()); return $inputfield; } + /** + * Get database schema for field + * + * @param Field $field + * @return array + * + */ public function getDatabaseSchema(Field $field) { $schema = parent::getDatabaseSchema($field); $schema['data'] = "tinyint NOT NULL"; @@ -59,18 +101,18 @@ class FieldtypeCheckbox extends Fieldtype { } /** - * @param DatabaseQuerySelect $query + * Get match query for PageFinder + * + * @param PageFinderDatabaseQuerySelect|DatabaseQuerySelect $query * @param string $table * @param string $subfield * @param string $operator * @param mixed $value - * * @return DatabaseQuery|DatabaseQuerySelect - * @throws WireException * */ public function getMatchQuery($query, $table, $subfield, $operator, $value) { - if(!empty($value) && ($operator == '!=' || $operator == '<>')) { + if(!empty($value) && ($operator === '!=' || $operator === '<>')) { // allow for matching test_checkbox!=1 since non-checked rows don't appear in database static $n = 0; $_table = $table . '_ckbx' . (++$n); @@ -109,9 +151,9 @@ class FieldtypeCheckbox extends Fieldtype { if($field) {} $fieldtypes = $this->wire(new Fieldtypes()); $toggleClass = 'FieldtypeToggle'; - $allowToggle = $this->wire('modules')->isInstalled($toggleClass); + $allowToggle = $this->wire()->modules->isInstalled($toggleClass); - foreach($this->wire('fieldtypes') as $fieldtype) { + foreach($this->wire()->fieldtypes as $fieldtype) { if($fieldtype instanceof FieldtypeCheckbox) { $fieldtypes->add($fieldtype); } else if($allowToggle && wireInstanceOf($fieldtype, $toggleClass)) { diff --git a/wire/modules/Inputfield/InputfieldCheckbox.module b/wire/modules/Inputfield/InputfieldCheckbox.module index 68fe036b..cefe636b 100644 --- a/wire/modules/Inputfield/InputfieldCheckbox.module +++ b/wire/modules/Inputfield/InputfieldCheckbox.module @@ -2,11 +2,14 @@ /** * An Inputfield for handling a single checkbox + * + * ProcessWire 3.x, Copyright 2020 by Ryan Cramer + * https://processwire.com * * Note: if you want a checkbox already checked, you need to add a setAttribute('checked', 'checked'); * - * @property string $checkedValue - * @property string $uncheckedValue + * @property string $checkedValue Value when checked (default=1) + * @property string $uncheckedValue Value when not checked (default='', blank string) * @property string $label2 Alterate label to display next to checkbox (default=use regular label) * @property string $checkboxLabel Same as label2, but used as part of field config rather than API-only config. * @property bool $checkboxOnly Show only the checkbox without label text next to it? (default=false) @since 3.0.144 @@ -23,10 +26,19 @@ class InputfieldCheckbox extends Inputfield { 'summary' => __('Single checkbox toggle', __FILE__), // Module Summary 'version' => 106, 'permanent' => true, - ); + ); } - const checkedValueDefault = 1; + /** + * Default checked value + * + */ + const checkedValueDefault = 1; + + /** + * Default unchecked value + * + */ const uncheckedValueDefault = ''; /** @@ -66,8 +78,7 @@ class InputfieldCheckbox extends Inputfield { * */ public function wired() { - /** @var Languages $languages */ - $languages = $this->wire('languages'); + $languages = $this->wire()->languages; if($languages) { foreach($languages as $language) { if(!$language->isDefault()) $this->set("checkboxLabel$language", ""); @@ -93,8 +104,7 @@ class InputfieldCheckbox extends Inputfield { */ public function ___render() { - /** @var User $user */ - $user = $this->wire('user'); + $user = $this->wire()->user; // label placed to the right of the checkbox $checkboxLabel = ''; @@ -152,15 +162,15 @@ class InputfieldCheckbox extends Inputfield { * */ public function ___renderValue() { - $value = $this->attr('value'); + $value = $this->val(); if($value != self::uncheckedValueDefault && $value != $this->uncheckedValue) { - $value = $this->wire('sanitizer')->entities($this->checkedValue); + $value = $this->wire()->sanitizer->entities($this->checkedValue); $value = $value === "1" ? $this->_('Checked') : $value; - $value = " $value"; + $value = wireIconMarkup('check-square-o') . " $value"; } else { - $value = $this->wire('sanitizer')->entities($this->uncheckedValue); + $value = $this->wire()->sanitizer->entities($this->uncheckedValue); $value = empty($value) ? $this->_('Not checked') : $value; - $value = " $value"; + $value = wireIconMarkup('square-o') . " $value"; } return $value; } @@ -175,7 +185,7 @@ class InputfieldCheckbox extends Inputfield { */ public function setAttribute($key, $value) { - if($key == 'value' && $value && "$value" !== "$this->uncheckedValue") { + if($key === 'value' && $value && "$value" !== "$this->uncheckedValue") { if("$value" !== (string) self::checkedValueDefault) { $this->checkedValue = $value; $this->checkedValueIsLabel = false; @@ -187,8 +197,18 @@ class InputfieldCheckbox extends Inputfield { return parent::setAttribute($key, $value); } + /** + * Set property + * + * @param string $key + * @param mixed $value + * @return InputfieldCheckbox|Inputfield + * + */ public function set($key, $value) { - if($key == 'checkedValue' && $value != self::checkedValueDefault) $this->checkedValueIsLabel = true; + if($key === 'checkedValue' && $value != self::checkedValueDefault) { + $this->checkedValueIsLabel = true; + } return parent::set($key, $value); } @@ -282,10 +302,10 @@ class InputfieldCheckbox extends Inputfield { public function ___getConfigInputfields() { $inputfields = parent::___getConfigInputfields(); - /** @var Languages $languages */ - $languages = $this->wire('languages'); - - $f = $this->wire('modules')->get('InputfieldText'); + $languages = $this->wire()->languages; + + /** @var InputfieldText $f */ + $f = $this->wire()->modules->get('InputfieldText'); $f->attr('name', 'checkboxLabel'); $f->label = $this->_('Checkbox label'); $f->description = $this->_('If you want to have separate field and checkbox labels, specify the label that will appear next to the checkbox here.'); @@ -300,9 +320,10 @@ class InputfieldCheckbox extends Inputfield { } $inputfields->add($f); + // if working with fieldtype, no additional settings are applicable if($this->hasFieldtype) return $inputfields; - $f = $this->wire('modules')->get('InputfieldText'); + $f = $this->wire()->modules->get('InputfieldText'); $f->attr('name', 'checkedValue'); $f->attr('value', $this->checkedValue); $f->label = $this->_('Checked Value'); @@ -311,7 +332,7 @@ class InputfieldCheckbox extends Inputfield { $f->required = true; $inputfields->add($f); - $f = $this->wire('modules')->get('InputfieldText'); + $f = $this->wire()->modules->get('InputfieldText'); $f->attr('name', 'uncheckedValue'); $f->attr('value', "$this->uncheckedValue"); $f->label = $this->_('Unchecked Value');