New isPopulated method to allow StringField subclasses to check existence without RAW

This commit is contained in:
Aaron Carlino 2018-06-06 23:26:07 +12:00
parent aecac871cf
commit c639ffa9ce
3 changed files with 18 additions and 9 deletions

View File

@ -258,13 +258,12 @@ class HTMLText extends Text {
* @return boolean * @return boolean
*/ */
public function exists() { public function exists() {
// If it's blank, it's blank $value = $this->value;
if(!parent::exists()) {
if (!$this->isPopulated($value)) {
return false; return false;
} }
$value = $this->RAW();
// If it's got a content tag // If it's got a content tag
if(preg_match('/<(img|embed|object|iframe|meta|source|link)[^>]*>/i', $value)) { if(preg_match('/<(img|embed|object|iframe|meta|source|link)[^>]*>/i', $value)) {
return true; return true;

View File

@ -35,7 +35,7 @@ class HTMLVarchar extends Varchar {
} }
public function exists() { public function exists() {
return parent::exists() && $this->RAW() != '<p></p>'; return $this->isPopulated($this->value) && $this->value != '<p></p>';
} }
public function scaffoldFormField($title = null, $params = null) { public function scaffoldFormField($title = null, $params = null) {

View File

@ -85,9 +85,7 @@ abstract class StringField extends DBField {
*/ */
public function exists() { public function exists() {
$value = $this->RAW(); $value = $this->RAW();
return $value // All truthy values exist return $this->isPopulated($value);
|| (is_string($value) && strlen($value)) // non-empty strings exist ('0' but not (int)0)
|| (!$this->getNullifyEmpty() && $value === ''); // Remove this stupid exemption in 4.0
} }
/** /**
@ -229,4 +227,16 @@ abstract class StringField extends DBField {
public function NoHTML() { public function NoHTML() {
return strip_tags($this->RAW()); return strip_tags($this->RAW());
} }
/**
* Returns true if the value meets all the criteria of not being empty, as defined by
* the class
* @param $value
* @return bool
*/
protected function isPopulated($value) {
return $value // All truthy values exist
|| (is_string($value) && strlen($value)) // non-empty strings exist ('0' but not (int)0)
|| (!$this->getNullifyEmpty() && $value === ''); // Remove this stupid exemption in 4.0
}
} }