/** * {@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(); } } }
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; }