You are here

protected function FlagCreateTrait::createFlagFromArray in Flag 8.4

Creates a flag from an array.

Sensible key values pairs will be inserted into the input array if not provided.

Parameters

array $edit: The edit array to pass to Flag::create().

Return value

\Drupal\flag\FlagInterface A new flag entity with the given criteria.

6 calls to FlagCreateTrait::createFlagFromArray()
FlagCreateTrait::createFlag in tests/src/Traits/FlagCreateTrait.php
Create a basic flag programmatically.
FlagCreateTrait::createGlobalFlag in tests/src/Traits/FlagCreateTrait.php
Create a global flag programmatically.
LinkTypeConfirmFormTest::doCreateFlag in tests/src/Functional/LinkTypeConfirmFormTest.php
Create a flag.
LinkTypeFieldEntryTest::doCreateFlag in tests/src/Functional/LinkTypeFieldEntryTest.php
Create a node type and flag.
ShowOnEntityFormTest::testEntityForm in tests/src/Functional/ShowOnEntityFormTest.php
Tests if flags appear on the entity form.

... See full list

File

tests/src/Traits/FlagCreateTrait.php, line 82

Class

FlagCreateTrait
Trait for programmatically creating Flags.

Namespace

Drupal\Tests\flag\Traits

Code

protected function createFlagFromArray(array $edit) {
  $default = [
    'id' => strtolower($this
      ->randomMachineName()),
    'label' => $this
      ->randomString(),
    'entity_type' => 'node',
    'bundles' => array_keys(\Drupal::service('entity_type.bundle.info')
      ->getBundleInfo('node')),
    'flag_short' => $this
      ->randomHTMLString(),
    'unflag_short' => $this
      ->randomHTMLString(),
    'unflag_denied_text' => $this
      ->randomHTMLString(),
    'flag_long' => $this
      ->randomHTMLString(16),
    'unflag_long' => $this
      ->randomHTMLString(16),
    'flag_message' => $this
      ->randomHTMLString(32),
    'unflag_message' => $this
      ->randomHTMLString(32),
    'flag_type' => $this
      ->getFlagType('node'),
    'link_type' => 'reload',
    'flagTypeConfig' => [
      'show_as_field' => TRUE,
      'show_on_form' => FALSE,
      'show_contextual_link' => FALSE,
    ],
    'linkTypeConfig' => [],
    'global' => FALSE,
  ];
  $link_type = array_key_exists('link_type', $edit) ? $edit['link_type'] : 'reload';

  // To keep this up-to-date see flag.schema.yml.
  switch ($link_type) {
    case 'comment':
      $default = array_merge($default, [
        'flagTypeConfig' => [
          'access_author' => $this
            ->randomHTMLString(),
        ],
      ]);
      break;
    case 'confirm':
      $default = array_merge($default, [
        'linkTypeConfig' => [
          'flag_confirmation' => $this
            ->randomHTMLString(),
          'unflag_confirmation' => $this
            ->randomHTMLString(),
        ],
      ]);
      break;
    case 'field_entry':
      $default = array_merge($default, [
        'linkTypeConfig' => [
          'flag_confirmation' => $this
            ->randomHTMLString(),
          'unflag_confirmation' => $this
            ->randomHTMLString(),
          'edit_flagging' => $this
            ->randomHTMLString(),
        ],
      ]);
      break;
    default:
      break;
  }
  foreach ($default as $key => $value) {
    if (empty($edit[$key])) {
      $edit[$key] = $value;
    }
  }

  // Create the flag programmatically.
  $flag = Flag::create($edit);

  // Save the flag.
  $flag
    ->save();

  // Make sure that we actually did get a flag entity.
  $this
    ->assertTrue($flag instanceof Flag);
  return $flag;
}