From 04651826c9932985a25d693465f09c3967e3b5c9 Mon Sep 17 00:00:00 2001 From: "Andrew Crook (Somersoft)" Date: Wed, 25 Oct 2023 04:17:46 +0100 Subject: [PATCH 1/2] GitHub: Issue 258 Add support for Devel Generate Add the class with basic working functionality. Devel Generate will pick it up and display it in the menu of entities it knows how to generate. --- .../DevelGenerate/MessageDevelGenerate.php | 216 ++++++++++++++++++ 1 file changed, 216 insertions(+) create mode 100644 src/Plugin/DevelGenerate/MessageDevelGenerate.php diff --git a/src/Plugin/DevelGenerate/MessageDevelGenerate.php b/src/Plugin/DevelGenerate/MessageDevelGenerate.php new file mode 100644 index 0000000..490105f --- /dev/null +++ b/src/Plugin/DevelGenerate/MessageDevelGenerate.php @@ -0,0 +1,216 @@ +messageStorage = $entity_storage; + $this->messageTypeStorage = $message_type_storage; + $this->urlGenerator = $url_generator; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { + return new static( + $configuration, $plugin_id, $plugin_definition, + $container->get('entity_type.manager')->getStorage('message'), + $container->get('entity_type.manager')->getStorage('message_template'), + $container->get('url_generator') + ); + } + + /** + * {@inheritdoc} + */ + public function settingsForm(array $form, FormStateInterface $form_state) { + $types = $this->messageTypeStorage->loadMultiple(); + + if (empty($types)) { + $create_url = $this->urlGenerator->generateFromRoute('message.type_add'); + $this->setMessage($this->t('You do not have any content types that can be generated. Go create a new content type', [':create-type' => $create_url]), 'error', FALSE); + return; + } + + $options = []; + + foreach ($types as $type) { + $options[$type->id()] = [ + 'type' => ['#markup' => $type->label()], + ]; + } + $header = [ + 'type' => $this->t('Message type'), + ]; + + $form['template'] = [ + '#type' => 'tableselect', + '#header' => $header, + '#options' => $options, + ]; + + $form['num'] = [ + '#type' => 'number', + '#title' => $this->t('Number of messages?'), + '#default_value' => $this->getSetting('num'), + '#required' => TRUE, + '#min' => 0, + ]; + $form['kill'] = [ + '#type' => 'checkbox', + '#title' => $this->t('Delete existing messages before generating new ones.'), + '#default_value' => $this->getSetting('kill'), + ]; + + return $form; + } + + /** + * {@inheritdoc} + */ + public function generateElements(array $values) { + if ($values['kill']) { + $this->deleteMessages(); + $this->setMessage($this->t('Deleted existing messages.')); + } + + $new_messages = $this->generateMessages($values['num'], $values['template']); + if (!empty($new_messages)) { + $this->setMessage($this->t('Created the following new messages: @mess', ['@mess' => implode(', ', $new_messages)])); + } + } + + /** + * Deletes all messages. + */ + protected function deleteMessages() { + $messages = $this->messageStorage->loadMultiple(); + $this->messageStorage->delete($messages); + } + + /** + * Generates messages. + * + * @param int $records + * Number of messages to create. + * @param array $message_template + * List of message templates to use. + * + * @return array + * Array containing the generated messages id. + */ + protected function generateMessages($records, $message_template) { + $messages = []; + + $message_template = array_filter($message_template); + + // Insert new data: + for ($i = 1; $i <= $records; $i++) { + $template = array_rand($message_template); + $message = $this->messageStorage->create([ + 'template' => $template, + 'langcode' => Language::LANGCODE_NOT_SPECIFIED, + ]); + + // Populate all fields with sample values. + $this->populateFields($message); + $message->save(); + + $messages[] = $message->id(); + unset($message); + } + + return $messages; + } + + /** + * {@inheritdoc} + */ + public function validateDrushParams(array $args, array $options = []) { + $values = [ + 'num' => array_shift($args), + 'kill' => $options['kill'], + ]; + + if ($this->isNumber($values['num']) == FALSE) { + throw new \Exception(dt('Invalid number of messages: @num.', ['@num' => $values['num']])); + } + + return $values; + } + +} From 959b1ed299d1f5081f05e0823762538117b9cadf Mon Sep 17 00:00:00 2001 From: Andrew Crook Date: Wed, 25 Oct 2023 10:08:05 +0100 Subject: [PATCH 2/2] Make Message Type requied. --- src/Plugin/DevelGenerate/MessageDevelGenerate.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Plugin/DevelGenerate/MessageDevelGenerate.php b/src/Plugin/DevelGenerate/MessageDevelGenerate.php index 490105f..4cfc13f 100644 --- a/src/Plugin/DevelGenerate/MessageDevelGenerate.php +++ b/src/Plugin/DevelGenerate/MessageDevelGenerate.php @@ -121,6 +121,7 @@ public function settingsForm(array $form, FormStateInterface $form_state) { '#type' => 'tableselect', '#header' => $header, '#options' => $options, + '#required' => TRUE, ]; $form['num'] = [