canRenderEntity($this->getContextValue('entity'));
}
/**
* {@inheritdoc}
*/
public function defaultConfiguration() {
return array(
'field' => '',
'settings' => array(),
);
}
/**
* {@inheritdoc}
*/
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
$form = parent::buildConfigurationForm($form, $form_state);
$field_options = array();
$definitions = $this->getFieldDefinitions();
foreach ($definitions as $key => $definition) {
$field_options[$key] = $definition->getLabel();
}
//$options = $this->getPluginOptions($field_definition);
debug($form);
$form['field'] = array(
'#type' => 'select',
'#title' => t('Field'),
'#options' => $field_options,
'#default_value' => $this->getConfigurationValue('field'),
'#required' => TRUE,
'#ajax' => array(
'callback' => array($this, 'updateFieldSettingsForm'),
'wrapper' => 'data-entity-embed-field-settings-wrapper',
'effect' => 'fade',
),
);
$form['type'] = array(
'#prefix' => '
',
'#suffix' => '
',
'#type' => 'select',
);
$form['settings']['data-entity-embed-settings'] = array(
'#type' => 'container',
'#prefix' => '',
'#suffix' => '
',
);
return $form;
}
/**
* {@inheritdoc}
*/
public function build() {
$entity = $this->getContextValue('entity');
$field = $this->getConfigurationValue('field');
//$formatter = $this->getConfigurationValue('formatter');
//$settings = $this->getConfigurationValue('settings');
//if ($formatter == 'view-mode') {
//}
return $entity->{$field}->view();
}
/**
* Collects the definitions of fields whose display is configurable.
*
* @return \Drupal\Core\Field\FieldDefinitionInterface[]
* The array of field definitions
*/
protected function getFieldDefinitions() {
$entity = $this->getContextValue('entity');
return array_filter($this->entityManager()->getFieldDefinitions($entity->getEntityTypeId(), $entity->bundle()), function ($field_definition) {
return $field_definition->isDisplayConfigurable('view');
});
}
/**
* Returns the extra fields of the entity type and bundle used by this form.
*
* @return array
* An array of extra field info.
*
* @see \Drupal\Core\Entity\EntityManagerInterface::getExtraFields()
*/
protected function getExtraFields() {
$entity = $this->getContextValue('entity');
$extra_fields = $this->entityManager()->getExtraFields($entity->getEntityTypeId(), $entity->bundle());
return isset($extra_fields['display']) ? $extra_fields['display'] : array();
}
/**
* Returns an array of widget or formatter options for a field.
*
* @param \Drupal\Core\Field\FieldDefinitionInterface $field_definition
* The field definition.
*
* @return array
* An array of widget or formatter options.
*/
protected function getPluginOptions(FieldDefinitionInterface $field_definition) {
$options = $this->pluginManager->getOptions($field_definition->getType());
$applicable_options = array();
foreach ($options as $option => $label) {
$plugin_class = DefaultFactory::getPluginClass($option, $this->pluginManager->getDefinition($option));
if ($plugin_class::isApplicable($field_definition)) {
$applicable_options[$option] = $label;
}
}
return $applicable_options;
}
}