--- /dev/null
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Utils\Generate\Base.
+ */
+
+namespace Drupal\Console\Utils\Create;
+
+use Drupal\Component\Utility\Random;
+use Drupal\Core\Field\FieldStorageDefinitionInterface;
+use Drupal\field\FieldConfigInterface;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Entity\EntityFieldManagerInterface;
+use Drupal\Core\Datetime\DateFormatterInterface;
+
+/**
+ * Class ContentNode
+ *
+ * @package Drupal\Console\Utils
+ */
+abstract class Base
+{
+ /* @var EntityTypeManagerInterface */
+ protected $entityTypeManager = null;
+
+ /* @var EntityFieldManagerInterface */
+ protected $entityFieldManager = null;
+
+ /* @var DateFormatterInterface */
+ protected $dateFormatter = null;
+
+ /* @var array */
+ protected $users = [];
+
+ /* @var Random $random */
+ protected $random = null;
+
+ /**
+ * ContentNode constructor.
+ *
+ * @param EntityTypeManagerInterface $entityTypeManager
+ * @param EntityFieldManagerInterface $entityFieldManager
+ * @param DateFormatterInterface $dateFormatter
+ */
+ public function __construct(
+ EntityTypeManagerInterface $entityTypeManager,
+ EntityFieldManagerInterface $entityFieldManager,
+ DateFormatterInterface $dateFormatter
+ ) {
+ $this->entityTypeManager = $entityTypeManager;
+ $this->entityFieldManager = $entityFieldManager;
+ $this->dateFormatter = $dateFormatter;
+ }
+
+ /**
+ * @param $entity
+ * @return array
+ */
+ private function getFields($entity)
+ {
+ $entityTypeId = $entity->getEntityType()->id();
+ $bundle = $entity->bundle();
+
+ $fields = array_filter(
+ $this->entityFieldManager->getFieldDefinitions($entityTypeId, $bundle), function ($fieldDefinition) {
+ return $fieldDefinition instanceof FieldConfigInterface;
+ }
+ );
+
+ return $fields;
+ }
+
+ /**
+ * @param
+ * @param $entity
+ */
+ protected function generateFieldSampleData($entity)
+ {
+ $fields = $this->getFields($entity);
+
+ /* @var \Drupal\field\FieldConfigInterface[] $fields */
+ foreach ($fields as $field) {
+ $fieldName = $field->getFieldStorageDefinition()->getName();
+ $cardinality = $field->getFieldStorageDefinition()->getCardinality(
+ );
+ if ($cardinality == FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED) {
+ $cardinality = rand(1, 5);
+ }
+
+ $entity->$fieldName->generateSampleItems($cardinality);
+ }
+ }
+
+ /**
+ * Returns the random data generator.
+ *
+ * @return \Drupal\Component\Utility\Random
+ * The random data generator.
+ */
+ protected function getRandom()
+ {
+ if (!$this->random) {
+ $this->random = new Random();
+ }
+
+ return $this->random;
+ }
+
+ /**
+ * Retrieve a random Uid of enabled users.
+ *
+ * @return array
+ */
+ protected function getUserId()
+ {
+ if (!$this->users) {
+ $userStorage = $this->entityTypeManager->getStorage('user');
+
+ $this->users = $userStorage->loadByProperties(['status' => true]);
+ }
+
+ return array_rand($this->users);
+ }
+}