Mercurial > hg > cmmr2012-drupal-site
diff core/modules/comment/src/Tests/CommentTestTrait.php @ 0:c75dbcec494b
Initial commit from drush-created site
author | Chris Cannam |
---|---|
date | Thu, 05 Jul 2018 14:24:15 +0000 |
parents | |
children | 12f9dff5fda9 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/comment/src/Tests/CommentTestTrait.php Thu Jul 05 14:24:15 2018 +0000 @@ -0,0 +1,125 @@ +<?php + +namespace Drupal\comment\Tests; + +use Drupal\Component\Utility\Unicode; +use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface; + +/** + * Provides common functionality for the Comment test classes. + */ +trait CommentTestTrait { + + /** + * Adds the default comment field to an entity. + * + * Attaches a comment field named 'comment' to the given entity type and + * bundle. Largely replicates the default behavior in Drupal 7 and earlier. + * + * @param string $entity_type + * The entity type to attach the default comment field to. + * @param string $bundle + * The bundle to attach the default comment field to. + * @param string $field_name + * (optional) Field name to use for the comment field. Defaults to + * 'comment'. + * @param int $default_value + * (optional) Default value, one of CommentItemInterface::HIDDEN, + * CommentItemInterface::OPEN, CommentItemInterface::CLOSED. Defaults to + * CommentItemInterface::OPEN. + * @param string $comment_type_id + * (optional) ID of comment type to use. Defaults to 'comment'. + * @param string $comment_view_mode + * (optional) The comment view mode to be used in comment field formatter. + * Defaults to 'full'. + */ + public function addDefaultCommentField($entity_type, $bundle, $field_name = 'comment', $default_value = CommentItemInterface::OPEN, $comment_type_id = 'comment', $comment_view_mode = 'full') { + $entity_manager = \Drupal::entityManager(); + // Create the comment type if needed. + $comment_type_storage = $entity_manager->getStorage('comment_type'); + if ($comment_type = $comment_type_storage->load($comment_type_id)) { + if ($comment_type->getTargetEntityTypeId() !== $entity_type) { + throw new \InvalidArgumentException("The given comment type id $comment_type_id can only be used with the $entity_type entity type"); + } + } + else { + $comment_type_storage->create([ + 'id' => $comment_type_id, + 'label' => Unicode::ucfirst($comment_type_id), + 'target_entity_type_id' => $entity_type, + 'description' => 'Default comment field', + ])->save(); + } + // Add a body field to the comment type. + \Drupal::service('comment.manager')->addBodyField($comment_type_id); + + // Add a comment field to the host entity type. Create the field storage if + // needed. + if (!array_key_exists($field_name, $entity_manager->getFieldStorageDefinitions($entity_type))) { + $entity_manager->getStorage('field_storage_config')->create([ + 'entity_type' => $entity_type, + 'field_name' => $field_name, + 'type' => 'comment', + 'translatable' => TRUE, + 'settings' => [ + 'comment_type' => $comment_type_id, + ], + ])->save(); + } + // Create the field if needed, and configure its form and view displays. + if (!array_key_exists($field_name, $entity_manager->getFieldDefinitions($entity_type, $bundle))) { + $entity_manager->getStorage('field_config')->create([ + 'label' => 'Comments', + 'description' => '', + 'field_name' => $field_name, + 'entity_type' => $entity_type, + 'bundle' => $bundle, + 'required' => 1, + 'default_value' => [ + [ + 'status' => $default_value, + 'cid' => 0, + 'last_comment_name' => '', + 'last_comment_timestamp' => 0, + 'last_comment_uid' => 0, + ], + ], + ])->save(); + + // Entity form displays: assign widget settings for the 'default' form + // mode, and hide the field in all other form modes. + entity_get_form_display($entity_type, $bundle, 'default') + ->setComponent($field_name, [ + 'type' => 'comment_default', + 'weight' => 20, + ]) + ->save(); + foreach ($entity_manager->getFormModes($entity_type) as $id => $form_mode) { + $display = entity_get_form_display($entity_type, $bundle, $id); + // Only update existing displays. + if ($display && !$display->isNew()) { + $display->removeComponent($field_name)->save(); + } + } + + // Entity view displays: assign widget settings for the 'default' view + // mode, and hide the field in all other view modes. + entity_get_display($entity_type, $bundle, 'default') + ->setComponent($field_name, [ + 'label' => 'above', + 'type' => 'comment_default', + 'weight' => 20, + 'settings' => ['view_mode' => $comment_view_mode], + ]) + ->save(); + foreach ($entity_manager->getViewModes($entity_type) as $id => $view_mode) { + $display = entity_get_display($entity_type, $bundle, $id); + // Only update existing displays. + if ($display && !$display->isNew()) { + $display->removeComponent($field_name)->save(); + } + } + } + } + +}