1
0
mirror of https://github.com/processwire/processwire.git synced 2025-08-09 08:17:12 +02:00

Add Fieldtype::isDeleteValue() method to isolate that particular logic outside of savePageField() method so it can more easily be overridden

This commit is contained in:
Ryan Cramer
2020-01-29 06:00:00 -05:00
parent 2adf4b0707
commit b7dfe9da1e

View File

@@ -494,6 +494,23 @@ abstract class Fieldtype extends WireData implements Module {
return '';
}
/**
* Is given value one that should cause the DB row(s) to be deleted rather than saved?
*
* Not applicable to Fieldtypes that override the savePageField() method with their own
* implementation, unless they also use this method.
*
* @param Page $page
* @param Field $field
* @param mixed $value
* @return bool
* @since 3.0.150
*
*/
public function isDeleteValue(Page $page, Field $field, $value) {
return $value === $this->getBlankValue($page, $field);
}
/**
* Return whether the given value is considered empty or not.
*
@@ -1132,8 +1149,10 @@ abstract class Fieldtype extends WireData implements Module {
$database = $this->wire('database');
$value = $page->get($field->name);
// if the value is the same as the default, then remove the field from the database because it's redundant
if($value === $this->getBlankValue($page, $field)) return $this->deletePageField($page, $field);
// if the value is one that should be deleted, then remove the field from the database because it's redundant
if($this->isDeleteValue($page, $field, $value)) {
return $this->deletePageField($page, $field);
}
$value = $this->sleepValue($page, $field, $value);