arch-8.x-1.x-dev/modules/order/src/OrderMail/Controller/ViewController.php
modules/order/src/OrderMail/Controller/ViewController.php
<?php
namespace Drupal\arch_order\OrderMail\Controller;
use Drupal\arch_order\OrderMail\OrderMailManagerInterface;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\Core\Language\LanguageManagerInterface;
use Drupal\Core\Messenger\MessengerInterface;
use Drupal\Core\Url;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
/**
* Returns responses for order routes.
*/
class ViewController extends ControllerBase implements ContainerInjectionInterface {
/**
* Mail manager service.
*
* @var \Drupal\arch_order\OrderMail\OrderMailManagerInterface
*/
protected $mailManager;
/**
* Language manager.
*
* @var \Drupal\Core\Language\LanguageManagerInterface
*/
protected $languageManager;
/**
* The messenger.
*
* @var \Drupal\Core\Messenger\MessengerInterface
*/
protected $messenger;
/**
* Plugin ID.
*
* @var string
*/
private $pluginId;
/**
* Constructs an MailController object.
*
* @param \Drupal\arch_order\OrderMail\OrderMailManagerInterface $mail_manager
* Mail manager service.
* @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
* Language manager.
* @param \Drupal\Core\Messenger\MessengerInterface $messenger
* The messenger.
*/
public function __construct(
OrderMailManagerInterface $mail_manager,
LanguageManagerInterface $language_manager,
MessengerInterface $messenger,
) {
$this->mailManager = $mail_manager;
$this->languageManager = $language_manager;
$this->messenger = $messenger;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static(
$container->get('arch_order_mail'),
$container->get('language_manager'),
$container->get('messenger')
);
}
/**
* Details view.
*
* @param string $plugin_id
* Plugin ID.
*
* @return array
* Page render array.
*/
public function main($plugin_id = NULL) {
$mail = $this->mailManager->get($plugin_id);
if (!$mail) {
throw new NotFoundHttpException();
}
$this->pluginId = $plugin_id;
$content = [
'label' => ['#markup' => '<h3>' . $mail->getPluginDefinition()['label'] . '</h3>'],
'addressee' => [
'#type' => 'container',
'label' => [
'#prefix' => '<b>',
'#markup' => $this->t('Addressee'),
'#suffix' => ':</b> ',
],
'value' => ['#markup' => $mail->getPluginDefinition()['sendTo']],
],
'status' => [
'text' => [
'#type' => 'container',
'label' => [
'#prefix' => '<b>',
'#markup' => $this->t('Status'),
'#suffix' => ':</b> ',
],
'value' => ['#markup' => $mail->isEnabled() ? $this->t('Enabled') : $this->t('Disabled')],
'button' => [
'#type' => 'link',
'#title' => $mail->isEnabled() ? $this->t('Disable') : $this->t('Enable'),
'#url' => Url::fromRoute('arch_order_mail.change_status', ['plugin_id' => $plugin_id]),
'#attributes' => [
'class' => 'button button--danger',
],
],
],
],
'description' => ['#markup' => $mail->getPluginDefinition()['description']],
'table' => [],
];
$content['table'] = [
'#type' => 'table',
'#header' => $this->buildTableHeader(),
'#empty' => $this->t(
'There are no translation for the "@mail_label" mail yet.',
['@mail_label' => $mail->getPluginDefinition()['label']],
['context' => 'arch_order_mail']
),
];
foreach ($mail->getLanguageList() as $langcode) {
$content['table'][] = $this->buildTableRow($langcode);
}
return $content;
}
/**
* Change mail status (enabled/disabled).
*
* @param string $plugin_id
* Plugin ID.
*
* @return \Symfony\Component\HttpFoundation\RedirectResponse
* Redirect back.
*/
public function changeStatus($plugin_id) {
$mail = $this->mailManager->get($plugin_id);
if (!$mail) {
throw new NotFoundHttpException();
}
$mail->setStatus(!$mail->isEnabled());
if ($mail->isEnabled()) {
$message = $this->t(
'The mail has been successfully enabled.',
[],
['context' => 'arch_order_mail']
);
}
else {
$message = $this->t(
'The mail has been successfully disabled.',
[],
['context' => 'arch_order_mail']
);
}
$this->messenger->addMessage($message);
return $this->redirect('arch_order_mail.view', ['plugin_id' => $plugin_id]);
}
/**
* Build table header.
*
* @return array
* Render array.
*/
private function buildTableHeader() {
$header = [
'label' => $this->t('Language'),
'operations' => $this->t('Operations'),
];
return $header;
}
/**
* Build table row.
*
* @param string $langcode
* Language code.
*
* @return array
* Render array.
*/
private function buildTableRow($langcode) {
$row = [];
$row['label'] = [
'#markup' => $this->languageManager->getLanguage($langcode)->getName(),
];
$row['operations'] = [
'#type' => 'operations',
'#links' => $this->getOperations($langcode),
];
return $row;
}
/**
* Builds a renderable list of operation links for the mail translation.
*
* @param string $langcode
* Language code.
*
* @return array
* A renderable array of operation links.
*/
private function getOperations($langcode) {
$operations = [];
$edit_url = Url::fromRoute(
'arch_order_mail.edit_translation',
[
'plugin_id' => $this->pluginId,
'lang_code' => $langcode,
]
);
$delete_url = Url::fromRoute(
'arch_order_mail.delete_translation',
[
'plugin_id' => $this->pluginId,
'lang_code' => $langcode,
]
);
$operations['edit'] = [
'title' => $this->t('Edit'),
'url' => $edit_url,
];
$operations['delete'] = [
'title' => $this->t('Delete'),
'url' => $delete_url,
];
return $operations;
}
}
