Commit d0d5f6be authored by webchick's avatar webchick

Issue #2112759 by effulgentsia: Add ContentEntityInterface::hasField().

parent 59b3495a
...@@ -363,6 +363,13 @@ public function uuid() { ...@@ -363,6 +363,13 @@ public function uuid() {
return $this->get('uuid')->value; return $this->get('uuid')->value;
} }
/**
* {@inheritdoc}
*/
public function hasField($field_name) {
return (bool) $this->getPropertyDefinition($field_name);
}
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
...@@ -817,7 +824,7 @@ public function __set($name, $value) { ...@@ -817,7 +824,7 @@ public function __set($name, $value) {
if (isset($this->fields[$name][$this->activeLangcode])) { if (isset($this->fields[$name][$this->activeLangcode])) {
$this->fields[$name][$this->activeLangcode]->setValue($value); $this->fields[$name][$this->activeLangcode]->setValue($value);
} }
elseif ($this->getPropertyDefinition($name)) { elseif ($this->hasField($name)) {
$this->getTranslatedField($name, $this->activeLangcode)->setValue($value); $this->getTranslatedField($name, $this->activeLangcode)->setValue($value);
} }
// The translations array is unset when cloning the entity object, we just // The translations array is unset when cloning the entity object, we just
...@@ -836,7 +843,7 @@ public function __set($name, $value) { ...@@ -836,7 +843,7 @@ public function __set($name, $value) {
* Implements the magic method for isset(). * Implements the magic method for isset().
*/ */
public function __isset($name) { public function __isset($name) {
if ($this->getPropertyDefinition($name)) { if ($this->hasField($name)) {
return $this->get($name)->getValue() !== NULL; return $this->get($name)->getValue() !== NULL;
} }
else { else {
...@@ -848,7 +855,7 @@ public function __isset($name) { ...@@ -848,7 +855,7 @@ public function __isset($name) {
* Implements the magic method for unset. * Implements the magic method for unset.
*/ */
public function __unset($name) { public function __unset($name) {
if ($this->getPropertyDefinition($name)) { if ($this->hasField($name)) {
$this->get($name)->setValue(NULL); $this->get($name)->setValue(NULL);
} }
else { else {
......
...@@ -55,4 +55,15 @@ public function initTranslation($langcode); ...@@ -55,4 +55,15 @@ public function initTranslation($langcode);
*/ */
public static function baseFieldDefinitions($entity_type); public static function baseFieldDefinitions($entity_type);
/**
* Returns whether the entity has a field with the given name.
*
* @param string $field_name
* The field name.
*
* @return bool
* TRUE if the entity has a field with the given name. FALSE otherwise.
*/
public function hasField($field_name);
} }
...@@ -70,7 +70,7 @@ public function buildContent(array $entities, array $displays, $view_mode, $lang ...@@ -70,7 +70,7 @@ public function buildContent(array $entities, array $displays, $view_mode, $lang
// avoid the cost of calling $entity->getProperties() by iterating the // avoid the cost of calling $entity->getProperties() by iterating the
// intersection as follows. // intersection as follows.
foreach ($displays[$entity->bundle()]->getComponents() as $name => $options) { foreach ($displays[$entity->bundle()]->getComponents() as $name => $options) {
if ($entity->getPropertyDefinition($name)) { if ($entity->hasField($name)) {
foreach ($entity->get($name) as $item) { foreach ($entity->get($name) as $item) {
$item->_attributes = array(); $item->_attributes = array();
} }
......
...@@ -478,7 +478,7 @@ function comment_entity_view(EntityInterface $entity, EntityDisplay $display, $v ...@@ -478,7 +478,7 @@ function comment_entity_view(EntityInterface $entity, EntityDisplay $display, $v
$fields = \Drupal::service('comment.manager')->getFields('node'); $fields = \Drupal::service('comment.manager')->getFields('node');
foreach ($fields as $field_name => $detail) { foreach ($fields as $field_name => $detail) {
// Skip fields that entity does not have. // Skip fields that entity does not have.
if (!$entity->getPropertyDefinition($field_name)) { if (!$entity->hasField($field_name)) {
continue; continue;
} }
$links = array(); $links = array();
...@@ -1022,12 +1022,12 @@ function comment_entity_insert(EntityInterface $entity) { ...@@ -1022,12 +1022,12 @@ function comment_entity_insert(EntityInterface $entity) {
)); ));
foreach ($fields as $field_name => $detail) { foreach ($fields as $field_name => $detail) {
// Skip fields that entity does not have. // Skip fields that entity does not have.
if (!$entity->getPropertyDefinition($field_name)) { if (!$entity->hasField($field_name)) {
continue; continue;
} }
// There is at least one comment field, the query needs to be executed. // There is at least one comment field, the query needs to be executed.
// @todo Use $entity->getAuthorId() after https://drupal.org/node/2078387 // @todo Use $entity->getAuthorId() after https://drupal.org/node/2078387
if ($entity->getPropertyDefinition('uid')) { if ($entity->hasField('uid')) {
$last_comment_uid = $entity->get('uid')->value; $last_comment_uid = $entity->get('uid')->value;
} }
else { else {
...@@ -1105,7 +1105,7 @@ function comment_node_update_index(EntityInterface $node, $langcode) { ...@@ -1105,7 +1105,7 @@ function comment_node_update_index(EntityInterface $node, $langcode) {
if ($index_comments) { if ($index_comments) {
foreach (\Drupal::service('comment.manager')->getFields('node') as $field_name => $info) { foreach (\Drupal::service('comment.manager')->getFields('node') as $field_name => $info) {
// Skip fields that entity does not have. // Skip fields that entity does not have.
if (!$node->getPropertyDefinition($field_name)) { if (!$node->hasField($field_name)) {
continue; continue;
} }
$instance = \Drupal::service('field.info')->getInstance('node', $node->getType(), $field_name); $instance = \Drupal::service('field.info')->getInstance('node', $node->getType(), $field_name);
...@@ -1142,7 +1142,7 @@ function comment_node_search_result(EntityInterface $node) { ...@@ -1142,7 +1142,7 @@ function comment_node_search_result(EntityInterface $node) {
$open = FALSE; $open = FALSE;
foreach ($comment_fields as $field_name => $info) { foreach ($comment_fields as $field_name => $info) {
// Skip fields that entity does not have. // Skip fields that entity does not have.
if (!$node->getPropertyDefinition($field_name)) { if (!$node->hasField($field_name)) {
continue; continue;
} }
// Do not make a string if comments are hidden. // Do not make a string if comments are hidden.
...@@ -1570,7 +1570,7 @@ function template_preprocess_comment(&$variables) { ...@@ -1570,7 +1570,7 @@ function template_preprocess_comment(&$variables) {
} }
else { else {
// @todo Use $entity->getAuthorId() after https://drupal.org/node/2078387 // @todo Use $entity->getAuthorId() after https://drupal.org/node/2078387
if ($commented_entity->getPropertyDefinition('uid') && $comment->uid->target_id == $commented_entity->get('uid')->value) { if ($commented_entity->hasField('uid') && $comment->uid->target_id == $commented_entity->get('uid')->value) {
$variables['attributes']['class'][] = 'by-' . $commented_entity->entityType() . '-author'; $variables['attributes']['class'][] = 'by-' . $commented_entity->entityType() . '-author';
} }
} }
......
...@@ -108,7 +108,7 @@ public function updateEntityStatistics(CommentInterface $comment) { ...@@ -108,7 +108,7 @@ public function updateEntityStatistics(CommentInterface $comment) {
// @todo Use $entity->getAuthorId() after https://drupal.org/node/2078387 // @todo Use $entity->getAuthorId() after https://drupal.org/node/2078387
// Get the user ID from the entity if it's set, or default to the // Get the user ID from the entity if it's set, or default to the
// currently logged in user. // currently logged in user.
'last_comment_uid' => $entity->getPropertyDefinition('uid') ? $entity->get('uid')->value : \Drupal::currentUser()->id(), 'last_comment_uid' => $entity->hasField('uid') ? $entity->get('uid')->value : \Drupal::currentUser()->id(),
)) ))
->condition('entity_id', $comment->entity_id->value) ->condition('entity_id', $comment->entity_id->value)
->condition('entity_type', $comment->entity_type->value) ->condition('entity_type', $comment->entity_type->value)
......
...@@ -232,7 +232,7 @@ function path_entity_field_info($entity_type) { ...@@ -232,7 +232,7 @@ function path_entity_field_info($entity_type) {
* @todo: Move this to methods on the FieldItem class. * @todo: Move this to methods on the FieldItem class.
*/ */
function path_entity_insert(EntityInterface $entity) { function path_entity_insert(EntityInterface $entity) {
if ($entity instanceof ContentEntityInterface && $entity->getPropertyDefinition('path')) { if ($entity instanceof ContentEntityInterface && $entity->hasField('path')) {
$entity->path->alias = trim($entity->path->alias); $entity->path->alias = trim($entity->path->alias);
// Only save a non-empty alias. // Only save a non-empty alias.
if (!empty($entity->path->alias)) { if (!empty($entity->path->alias)) {
...@@ -248,7 +248,7 @@ function path_entity_insert(EntityInterface $entity) { ...@@ -248,7 +248,7 @@ function path_entity_insert(EntityInterface $entity) {
* Implements hook_entity_update(). * Implements hook_entity_update().
*/ */
function path_entity_update(EntityInterface $entity) { function path_entity_update(EntityInterface $entity) {
if ($entity instanceof ContentEntityInterface && $entity->getPropertyDefinition('path')) { if ($entity instanceof ContentEntityInterface && $entity->hasField('path')) {
$entity->path->alias = trim($entity->path->alias); $entity->path->alias = trim($entity->path->alias);
// Delete old alias if user erased it. // Delete old alias if user erased it.
if ($entity->path->pid && !$entity->path->alias) { if ($entity->path->pid && !$entity->path->alias) {
...@@ -269,7 +269,7 @@ function path_entity_update(EntityInterface $entity) { ...@@ -269,7 +269,7 @@ function path_entity_update(EntityInterface $entity) {
* Implements hook_entity_predelete(). * Implements hook_entity_predelete().
*/ */
function path_entity_predelete(EntityInterface $entity) { function path_entity_predelete(EntityInterface $entity) {
if ($entity instanceof ContentEntityInterface && $entity->getPropertyDefinition('path')) { if ($entity instanceof ContentEntityInterface && $entity->hasField('path')) {
// Delete all aliases associated with this term. // Delete all aliases associated with this term.
$uri = $entity->uri(); $uri = $entity->uri();
\Drupal::service('path.crud')->delete(array('source' => $uri['path'])); \Drupal::service('path.crud')->delete(array('source' => $uri['path']));
......
...@@ -554,7 +554,7 @@ function entity_test_entity_prepare_view($entity_type, array $entities, array $d ...@@ -554,7 +554,7 @@ function entity_test_entity_prepare_view($entity_type, array $entities, array $d
// Add a dummy field item attribute on field_test_text if it exists. // Add a dummy field item attribute on field_test_text if it exists.
if ($entity_type == 'entity_test_render') { if ($entity_type == 'entity_test_render') {
foreach ($entities as $entity) { foreach ($entities as $entity) {
if ($entity->getPropertyDefinition('field_test_text')) { if ($entity->hasField('field_test_text')) {
foreach ($entity->get('field_test_text') as $item) { foreach ($entity->get('field_test_text') as $item) {
$item->_attributes += array('data-field-item-attr' => 'foobar'); $item->_attributes += array('data-field-item-attr' => 'foobar');
} }
......
...@@ -537,7 +537,7 @@ function user_validate_current_pass(&$form, &$form_state) { ...@@ -537,7 +537,7 @@ function user_validate_current_pass(&$form, &$form_state) {
// This validation only works for required textfields (like mail) or // This validation only works for required textfields (like mail) or
// form values like password_confirm that have their own validation // form values like password_confirm that have their own validation
// that prevent them from being empty if they are changed. // that prevent them from being empty if they are changed.
$current_value = $account->getPropertyDefinition($key) ? $account->get($key)->value : $account->$key; $current_value = $account->hasField($key) ? $account->get($key)->value : $account->$key;
if ((strlen(trim($form_state['values'][$key])) > 0) && ($form_state['values'][$key] != $current_value)) { if ((strlen(trim($form_state['values'][$key])) > 0) && ($form_state['values'][$key] != $current_value)) {
$current_pass_failed = empty($form_state['values']['current_pass']) || !\Drupal::service('password')->check($form_state['values']['current_pass'], $account); $current_pass_failed = empty($form_state['values']['current_pass']) || !\Drupal::service('password')->check($form_state['values']['current_pass'], $account);
if ($current_pass_failed) { if ($current_pass_failed) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment