/** * {@inheritdoc} */ public function formElement(EntityInterface $entity) { $form = []; if ($this->entityTypeManager->getDefinition($entity->getEntityTypeId())->getKey('label')) { $form['label'] = array( '#type' => 'textfield', '#title' => $this->translationManager->translate('New Label'), '#maxlength' => 255, '#required' => TRUE, ); } $form['id'] = array( '#type' => 'machine_name', '#title' => $this->translationManager->translate('New Id'), '#maxlength' => 255, '#required' => TRUE, ); // If entity must have a prefix // (e.g. entity_form_mode, entity_view_mode, ...). if (method_exists($entity, 'getTargetType')) { $form['id']['#field_prefix'] = $entity->getTargetType() . '.'; } if (method_exists($entity, 'load')) { $form['id']['#machine_name'] = [ 'exists' => get_class($entity) . '::load', ]; } return $form; }
/** * Returns an array of entity_clone permissions. * * @return array * The permission list. */ public function permissions() { $permissions = []; foreach ($this->entityTypeManager->getDefinitions() as $entity_type_id => $entity_type) { $permissions['clone ' . $entity_type_id . ' entity'] = $this->translationManager->translate('Clone all <em>@label</em> entities', [ '@label' => $entity_type->getLabel(), ]); } return $permissions; }
/** * Dynamically set permissions for entity browsers with routes. */ public function permissions() { $permissions = []; /** @var \Drupal\entity_browser\EntityBrowserInterface[] $browsers */ $browsers = $this->browserStorage->loadMultiple(); foreach ($browsers as $browser) { if ($browser->route()) { $permissions['access ' . $browser->id() . ' entity browser pages'] = array('title' => $this->translationManager->translate('Access @name pages', array('@name' => $browser->label())), 'description' => $this->translationManager->translate('Access pages that %browser uses to operate.', array('%browser' => $browser->label()))); } } return $permissions; }
/** * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { /** @var \Drupal\entity_clone\EntityClone\EntityCloneInterface $entity_clone_handler */ $entity_clone_handler = $this->entityTypeManager->getHandler($this->entityTypeDefinition->id(), 'entity_clone'); if ($this->entityTypeManager->hasHandler($this->entityTypeDefinition->id(), 'entity_clone_form')) { $entity_clone_form_handler = $this->entityTypeManager->getHandler($this->entityTypeDefinition->id(), 'entity_clone_form'); } $properties = []; if (isset($entity_clone_form_handler) && $entity_clone_form_handler) { $properties = $entity_clone_form_handler->getNewValues($form_state); } $cloned_entity = $entity_clone_handler->cloneEntity($this->entity, $this->entity->createDuplicate(), $properties); drupal_set_message($this->stringTranslationManager->translate('The entity <em>@entity (@entity_id)</em> of type <em>@type</em> was cloned', [ '@entity' => $this->entity->label(), '@entity_id' => $this->entity->id(), '@type' => $this->entity->getEntityTypeId(), ])); if ($cloned_entity && $cloned_entity->hasLinkTemplate('canonical')) { $form_state->setRedirect($cloned_entity->toUrl() ->getRouteName(), $cloned_entity->toUrl()->getRouteParameters()); } $form_state->setRedirect('<front>'); }
/** * {@inheritdoc} */ public function getDerivativeDefinitions($base_plugin_definition) { $this->derivatives = []; /** @var \Drupal\Core\Entity\EntityTypeInterface $entity_type */ foreach ($this->entityTypeManager->getDefinitions() as $entity_type_id => $entity_type) { $has_clone_path = $entity_type->hasLinkTemplate('clone-form'); $has_canonical_path = $entity_type->hasLinkTemplate('canonical'); if ($has_clone_path) { $this->derivatives["$entity_type_id.clone_tab"] = array( 'route_name' => "entity.$entity_type_id.clone_form", 'title' => $this->translationManager->translate('Clone'), 'base_route' => "entity.$entity_type_id." . ($has_canonical_path ? "canonical" : "edit_form"), 'weight' => 100, ); } } return $this->derivatives; }
/** * Tests translation using placeholders. * * @param string $string * A string containing the English text to translate. * @param array $args * An associative array of replacements to make after translation. * @param string $expected_string * The expected translated string value. * * @dataProvider providerTestTranslatePlaceholder */ public function testTranslatePlaceholder($string, array $args = array(), $expected_string) { $actual = $this->translationManager->translate($string, $args); $this->assertInstanceOf(MarkupInterface::class, $actual); $this->assertEquals($expected_string, (string) $actual); }