/** * Checks that workflows have the expected behaviors for the given user. * * @param \Drupal\user\UserInterface $user * The user to test the workflow behavior against. * @param array $expected_status * The an associative array with the operation name as key and the expected * status as value. */ protected function assertWorkflows(UserInterface $user, $expected_status) { $default_langcode = $this->langcodes[0]; $languages = $this->container->get('language_manager')->getLanguages(); $args = array('@user_label' => $user->getUsername()); $this->drupalLogin($user); // Check whether the user is allowed to access the entity form in edit mode. $options = array('language' => $languages[$default_langcode], 'absolute' => TRUE); $edit_url = $this->entity->urlInfo('edit-form', $options); $this->drupalGet($edit_url, $options); $this->assertResponse($expected_status['edit'], format_string('The @user_label has the expected edit access.', $args)); // Check whether the user is allowed to access the translation overview. $langcode = $this->langcodes[1]; $options = array('language' => $languages[$langcode], 'absolute' => TRUE); $translations_url = $this->entity->url('drupal:content-translation-overview', $options); $this->drupalGet($translations_url); $this->assertResponse($expected_status['overview'], format_string('The @user_label has the expected translation overview access.', $args)); // Check whether the user is allowed to create a translation. $add_translation_url = Url::fromRoute('content_translation.translation_add_' . $this->entityTypeId, [$this->entityTypeId => $this->entity->id(), 'source' => $default_langcode, 'target' => $langcode], $options); if ($expected_status['add_translation'] == 200) { $this->clickLink('Add'); $this->assertUrl($add_translation_url->toString(), array(), 'The translation overview points to the translation form when creating translations.'); // Check that the translation form does not contain shared elements for // translators. if ($expected_status['edit'] == 403) { $this->assertNoSharedElements(); } } else { $this->drupalGet($add_translation_url); } $this->assertResponse($expected_status['add_translation'], format_string('The @user_label has the expected translation creation access.', $args)); // Check whether the user is allowed to edit a translation. $langcode = $this->langcodes[2]; $options['language'] = $languages[$langcode]; $edit_translation_url = Url::fromRoute('content_translation.translation_edit_' . $this->entityTypeId, [$this->entityTypeId => $this->entity->id(), 'language' => $langcode], $options); $options = ['language' => $languages[$langcode], 'absolute' => TRUE]; if ($expected_status['edit_translation'] == 200) { $this->drupalGet($translations_url); $editor = $expected_status['edit'] == 200; if ($editor) { $this->clickLink('Edit', 2); // An editor should be pointed to the entity form in multilingual mode. // We need a new expected edit path with a new language. $expected_edit_path = $this->entity->url('edit-form', $options); $this->assertUrl($expected_edit_path, [], 'The translation overview points to the edit form for editors when editing translations.'); } else { $this->clickLink('Edit'); // While a translator should be pointed to the translation form. $this->assertUrl($edit_translation_url->toString(), array(), 'The translation overview points to the translation form for translators when editing translations.'); // Check that the translation form does not contain shared elements. $this->assertNoSharedElements(); } } else { $this->drupalGet($edit_translation_url); } $this->assertResponse($expected_status['edit_translation'], format_string('The @user_label has the expected translation creation access.', $args)); }
public function create(EntityInterface $entity) { if (!isset($entity->xmlsitemap)) { $entity->xmlsitemap = array(); if ($entity->id() && ($link = $this->load($entity->getEntityTypeId(), $entity->id()))) { $entity->xmlsitemap = $link; } } $settings = xmlsitemap_link_bundle_load($entity->getEntityTypeId(), $entity->bundle()); $uri = $entity->url(); $entity->xmlsitemap += array('type' => $entity->getEntityTypeId(), 'id' => (string) $entity->id(), 'subtype' => $entity->bundle(), 'status' => $settings['status'], 'status_default' => $settings['status'], 'status_override' => 0, 'priority' => $settings['priority'], 'priority_default' => $settings['priority'], 'priority_override' => 0, 'changefreq' => isset($settings['changefreq']) ? $settings['changefreq'] : 0); $url = $entity->url(); // The following values must always be checked because they are volatile. $entity->xmlsitemap['loc'] = $uri; $entity->xmlsitemap['access'] = isset($url) && $entity->access('view', $this->anonymousUser); $language = $entity->language(); $entity->xmlsitemap['language'] = !empty($language) ? $language->getId() : LanguageInterface::LANGCODE_NOT_SPECIFIED; return $entity->xmlsitemap; }
public function doGlobalFlagOwnershipAccessTest() { // Create a global flag. $flag = $this->createGlobalFlag(); // Grant the flag permissions to the authenticated role, so that both // users have the same roles and share the render cache. $this->grantFlagPermissions($flag); // Create and login a new user. $user_1 = $this->drupalCreateUser(); $this->drupalLogin($user_1); // Flag the node with user 1. $this->drupalGet($this->node->url()); $this->clickLink($flag->getFlagShortText()); $this->assertResponse(200); $this->assertLink($flag->getUnflagShortText()); // Switch to user 2. They should see the unflag link too. $user_2 = $this->drupalCreateUser(); $this->drupalLogin($user_2); $this->drupalGet($this->node->url()); $this->assertLink($flag->getUnflagShortText(), 0, "The unflag link is found on the page for user 2."); }
/** * Constructs the entity URI. * * @param \Drupal\Core\Entity\EntityInterface * The entity. * @return string * The entity URI. */ protected function getEntityUri(EntityInterface $entity) { // Some entity types don't provide a canonical link template, at least call // out to ->url(). if ($entity->isNew() || !$entity->hasLinkTemplate('canonical')) { return $entity->url('canonical', []); } $url = $entity->urlInfo('canonical', ['absolute' => TRUE]); return $url->setRouteParameter('_format', 'hal_json')->toString(); }
/** * {@inheritdoc} */ public function forbiddenMessage(EntityInterface $entity, $field_name) { if (!isset($this->authenticatedCanPostComments)) { // We only output a link if we are certain that users will get the // permission to post comments by logging in. $this->authenticatedCanPostComments = $this->entityManager->getStorage('user_role')->load(RoleInterface::AUTHENTICATED_ID)->hasPermission('post comments'); } if ($this->authenticatedCanPostComments) { // We cannot use drupal_get_destination() because these links // sometimes appear on /node and taxonomy listing pages. if ($entity->get($field_name)->getFieldDefinition()->getSetting('form_location') == CommentItemInterface::FORM_SEPARATE_PAGE) { $comment_reply_parameters = ['entity_type' => $entity->getEntityTypeId(), 'entity' => $entity->id(), 'field_name' => $field_name]; $destination = array('destination' => $this->url('comment.reply', $comment_reply_parameters, array('fragment' => 'comment-form'))); } else { $destination = array('destination' => $entity->url('canonical', array('fragment' => 'comment-form'))); } if ($this->userConfig->get('register') != USER_REGISTER_ADMINISTRATORS_ONLY) { // Users can register themselves. return $this->t('<a href="@login">Log in</a> or <a href="@register">register</a> to post comments', array('@login' => $this->urlGenerator->generateFromRoute('user.login', array(), array('query' => $destination)), '@register' => $this->urlGenerator->generateFromRoute('user.register', array(), array('query' => $destination)))); } else { // Only admins can add new users, no public registration. return $this->t('<a href="@login">Log in</a> to post comments', array('@login' => $this->urlGenerator->generateFromRoute('user.login', array(), array('query' => $destination)))); } } return ''; }