Example #1
0
 /**
  * Update ancestry field of any child that has this as its first parent.
  *
  * @var \Drupal\Core\Entity\EntityInterface $discussion
  *    A discussion node that may have had its ancestry updating.
  */
 public function updateChildrensAncestry(ContentEntityInterface $discussion)
 {
     if ($discussion->hasField('field_parents') && $discussion->hasField('field_ancestry') && $discussion->hasField('field_ancestry_plain')) {
         // If own ancestry has changed, update children's ancestry.
         $newAncestry = $discussion->field_ancestry->getValue();
         $oldAncestry = empty($discussion->original) ? NULL : $discussion->original->field_ancestry->getValue();
         if ($newAncestry !== $oldAncestry) {
             $children = $discussion->field_children->referencedEntities();
             $childAncestry = $newAncestry;
             $childAncestry[] = ["target_id" => $discussion->id()];
             foreach ($children as $child) {
                 // Only update children's ancestry if they are a discussion.
                 if ($child->bundle() == 'discussion') {
                     // Only update children's ancestry if this is their first parent.
                     if ($child->field_parents->entity->id() === $discussion->id()) {
                         // Only update children's ancestry if child is not already included.
                         if (!$this->withinAncestry($child, $childAncestry)) {
                             $child->field_ancestry = $childAncestry;
                             $child->field_ancestry_plain = $this->makePlain($child->field_ancestry);
                             $child->save();
                         }
                     }
                 }
             }
         }
     }
 }
Example #2
0
  /**
   * {@inheritdoc}
   */
  public function getEntityReferenceTargetIds(ContentEntityInterface $entity, $field_name, $sort = FALSE) {
    $target_ids = [];
    if ($entity->hasField($field_name)) {
      $field_values = $entity->get($field_name)->getValue();

      foreach ($field_values as $field_value) {
        $target_ids[] = $field_value['target_id'];
      }
    }
    if ($sort) {
      asort($target_ids);
    }
    return $target_ids;
  }
 /**
  * {@inheritdoc}
  */
 public function create(ContentEntityInterface $entity, $fields)
 {
     $query = $this->database->insert('comment_entity_statistics')->fields(array('entity_id', 'entity_type', 'field_name', 'cid', 'last_comment_timestamp', 'last_comment_name', 'last_comment_uid', 'comment_count'));
     foreach ($fields as $field_name => $detail) {
         // Skip fields that entity does not have.
         if (!$entity->hasField($field_name)) {
             continue;
         }
         // Get the user ID from the entity if it's set, or default to the
         // currently logged in user.
         $last_comment_uid = 0;
         if ($entity instanceof EntityOwnerInterface) {
             $last_comment_uid = $entity->getOwnerId();
         }
         if (!isset($last_comment_uid)) {
             // Default to current user when entity does not implement
             // EntityOwnerInterface or author is not set.
             $last_comment_uid = $this->currentUser->id();
         }
         // Default to REQUEST_TIME when entity does not have a changed property.
         $last_comment_timestamp = REQUEST_TIME;
         if ($entity instanceof EntityChangedInterface) {
             $last_comment_timestamp = $entity->getChangedTime();
         }
         $query->values(array('entity_id' => $entity->id(), 'entity_type' => $entity->getEntityTypeId(), 'field_name' => $field_name, 'cid' => 0, 'last_comment_timestamp' => $last_comment_timestamp, 'last_comment_name' => NULL, 'last_comment_uid' => $last_comment_uid, 'comment_count' => 0));
     }
     $query->execute();
 }
 /**
  * Evaluate if the user has access to the field of an entity.
  *
  * @param \Drupal\Core\Entity\ContentEntityInterface $entity
  *   The entity to check access on.
  * @param string $field
  *   The name of the field to check access on.
  * @param string $operation
  *   The operation access should be checked for. Usually one of "view" or
  *   "edit".
  * @param \Drupal\Core\Session\AccountInterface $user
  *   The user account to test access against.
  *
  * @return bool
  *   TRUE if the user has access to the field on the entity, FALSE otherwise.
  */
 protected function doEvaluate(ContentEntityInterface $entity, $field, $operation, AccountInterface $user)
 {
     if (!$entity->hasField($field)) {
         return FALSE;
     }
     $access = $this->entityTypeManager->getAccessControlHandler($entity->getEntityTypeId());
     if (!$access->access($entity, $operation, $user)) {
         return FALSE;
     }
     $definition = $entity->getFieldDefinition($field);
     $items = $entity->get($field);
     return $access->fieldAccess($operation, $definition, $user, $items);
 }