/**
  * {@inheritdoc}
  *
  * TODO: Use $langcode.
  */
 public function viewElements(FieldItemListInterface $items, $langcode)
 {
     $element = array();
     $settings = $this->getFieldSettings();
     $count = 0;
     // TODO: Is there a better way to get an accurate count of the
     // items from the FieldItemList that doesn't count blank items?
     // Possibly \Countable->count()?
     foreach ($items as $delta => $item) {
         if ($item->value !== NULL) {
             $count++;
             $field_collection_item = field_collection_item_revision_load($item->revision_id);
             if ($field_collection_item->isDefaultRevision()) {
                 $links = \Drupal::l($this->fieldDefinition->getName() . ' ' . $delta, Url::FromRoute('entity.field_collection_item.canonical', array('field_collection_item' => $item->value)));
                 $links .= ' ' . $this->getEditLinks($item);
             } else {
                 $links = \Drupal::l($this->fieldDefinition->getName() . ' ' . $delta, Url::FromRoute('field_collection_item.revision_show', array('field_collection_item' => $item->value, 'field_collection_item_revision' => $item->revision_id)));
             }
             $element[$delta] = array('#markup' => $links);
         }
     }
     $cardinality = $this->fieldDefinition->getFieldStorageDefinition()->getCardinality();
     if ($cardinality == -1 || $count < $cardinality) {
         $element['#suffix'] = '<ul class="action-links action-links-field-collection-add"><li>';
         $element['#suffix'] .= $this->getAddLink($items->getEntity());
         $element['#suffix'] .= '</li></ul>';
     }
     return $element;
 }
 /**
  * Checks operation access on the field collection item's host's revisions.
  *
  * @param \Drupal\Core\Session\AccountInterface $account
  *   The currently logged in account.
  *
  * TODO: Document params
  *
  * @return string
  *   A \Drupal\Core\Access\AccessInterface constant value.
  */
 public function access(Route $route, AccountInterface $account, $field_collection_item_revision = NULL, FieldCollectionItem $field_collection_item = NULL)
 {
     if ($field_collection_item_revision) {
         $field_collection_item = field_collection_item_revision_load($field_collection_item_revision);
     }
     $operation = $route->getRequirement('_access_field_collection_item_host_revisions');
     $host = $field_collection_item->getHost();
     if ($host->getEntityType()->id() == 'node') {
         return AccessResult::allowedIf($account->hasPermission($operation . ' ' . $host->getType() . ' revisions'));
     } else {
         if ($host->getEntityType()->id() == 'field_collection_item') {
             return $this->access($route, $account, $host->revision_id, $host);
         } else {
             return AccessResult::allowedIf($field_collection_item && $field_collection_item->getHost()->access($operation, $account))->cachePerPermissions();
         }
     }
 }
예제 #3
0
 public function getFieldCollectionItem($create = FALSE)
 {
     if (isset($this->field_collection_item)) {
         return $this->field_collection_item;
     } elseif (isset($this->value)) {
         // By default always load the default revision, so caches get used.
         $field_collection_item = field_collection_item_load($this->value);
         if ($field_collection_item !== NULL && $field_collection_item->getRevisionId() != $this->revision_id) {
             // A non-default revision is a referenced, so load this one.
             $field_collection_item = field_collection_item_revision_load($this->revision_id);
         }
         return $field_collection_item;
     } elseif ($create) {
         $field_collection_item = entity_create('field_collection_item', array('field_name' => $this->getFieldDefinition()->getName()));
         // TODO: Uncomment or delete
         /*
         $field_collection_item->setHostEntity($this->getEntity(), FALSE);
         */
         return $field_collection_item;
     }
     return FALSE;
 }