diff --git a/includes/entity.wrapper.inc b/includes/entity.wrapper.inc index 2d1df6d..319108c 100644 --- a/includes/entity.wrapper.inc +++ b/includes/entity.wrapper.inc @@ -133,6 +133,10 @@ abstract class EntityMetadataWrapper { if (isset($value) && !entity_property_verify_data_type($value, $this->type)) { return FALSE; } + elseif (!isset($value) && !empty($this->info['required'])) { + // Do not allow NULL values if the property is required. + return FALSE; + } return !isset($this->info['validation callback']) || call_user_func($this->info['validation callback'], $value, $this->info); } @@ -976,6 +980,10 @@ class EntityListWrapper extends EntityMetadataWrapper implements IteratorAggrega * list items. */ public function validate($value) { + // Required lists may not be empty or unset. + if (!empty($this->info['required']) && empty($value)) { + return FALSE; + } return !isset($value) || entity_property_verify_data_type($value, $this->type); } diff --git a/modules/callbacks.inc b/modules/callbacks.inc index aac7c2e..22edd57 100644 --- a/modules/callbacks.inc +++ b/modules/callbacks.inc @@ -390,7 +390,7 @@ function entity_metadata_field_property_set($entity, $name, $value, $langcode, $ $field = field_info_field($name); $columns = array_keys($field['columns']); $langcode = isset($langcode) ? $langcode : LANGUAGE_NONE; - $values = $field['cardinality'] == 1 ? array($value) : $value; + $values = $field['cardinality'] == 1 ? array($value) : (array) $value; $items = array(); foreach ($values as $delta => $value) { @@ -441,7 +441,7 @@ function entity_metadata_field_verbatim_get($entity, array $options, $name, $ent function entity_metadata_field_verbatim_set($entity, $name, $items, $langcode) { $field = field_info_field($name); $langcode = isset($langcode) ? $langcode : LANGUAGE_NONE; - $value = $field['cardinality'] == 1 ? array($items) : $items; + $value = $field['cardinality'] == 1 ? array($items) : (array) $items; // Filter out any items set to NULL. $entity->{$name}[$langcode] = array_filter($value);