materio_simplenews & materio_graphql fix
This commit is contained in:
-26
@@ -4,7 +4,6 @@ namespace Drupal\materio_graphql\Plugin\GraphQL\SchemaExtension;
|
||||
|
||||
use Drupal\graphql\GraphQL\ResolverBuilder;
|
||||
use Drupal\graphql\GraphQL\ResolverRegistryInterface;
|
||||
use Drupal\graphql\GraphQL\Response\ResponseInterface;
|
||||
use Drupal\graphql\Plugin\GraphQL\SchemaExtension\SdlSchemaExtensionPluginBase;
|
||||
use Drupal\Core\Url;
|
||||
// use CommerceGuys\Addressing\Country\CountryRepository;
|
||||
@@ -103,12 +102,6 @@ class MaterioSchemaExtension extends SdlSchemaExtensionPluginBase {
|
||||
$this->addVideolink($registry, $builder);
|
||||
|
||||
$this->addImage($registry, $builder);
|
||||
|
||||
// Response type resolver.
|
||||
$registry->addTypeResolver('Response', [
|
||||
__CLASS__,
|
||||
'resolveResponse',
|
||||
]);
|
||||
}
|
||||
|
||||
// ___ _
|
||||
@@ -1617,24 +1610,5 @@ class MaterioSchemaExtension extends SdlSchemaExtensionPluginBase {
|
||||
})
|
||||
));
|
||||
}
|
||||
/**
|
||||
* Resolves the response type.
|
||||
*
|
||||
* @param \Drupal\graphql\GraphQL\Response\ResponseInterface $response
|
||||
* Response object.
|
||||
*
|
||||
* @return string
|
||||
* Response type.
|
||||
*
|
||||
* @throws \Exception
|
||||
* Invalid response type.
|
||||
*/
|
||||
public static function resolveResponse(ResponseInterface $response): string {
|
||||
// Resolve content response.
|
||||
if ($response instanceof MateriauResponse) {
|
||||
return 'MateriauResponse';
|
||||
}
|
||||
throw new \Exception('Invalid response type.');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
-9
@@ -1,9 +0,0 @@
|
||||
langcode: en
|
||||
status: true
|
||||
dependencies:
|
||||
module:
|
||||
- simplenews
|
||||
id: simplenews_subscriber.materio_block
|
||||
label: Materio Block
|
||||
targetEntityType: simplenews_subscriber
|
||||
cache: true
|
||||
@@ -2,10 +2,6 @@
|
||||
|
||||
use Drupal\Core\Form\FormStateInterface;
|
||||
|
||||
function materio_simplenews_entity_type_alter(array &$entity_types) {
|
||||
$entity_types['simplenews_subscriber']->setFormClass('materio_block', '\Drupal\materio_simplenews\Form\MaterioSubscriptionsBlockForm');
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_form_alter().
|
||||
*
|
||||
|
||||
@@ -1,242 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\materio_simplenews\Form;
|
||||
|
||||
use Drupal\Core\Form\FormStateInterface;
|
||||
use Drupal\Core\Url;
|
||||
use Drupal\simplenews\Form\SubscriptionsFormBase;
|
||||
|
||||
// ! NOT USED ANY MORE
|
||||
|
||||
/**
|
||||
* Configure simplenews subscriptions of the logged user.
|
||||
*/
|
||||
class MaterioSubscriptionsBlockForm extends SubscriptionsFormBase {
|
||||
|
||||
protected $uniqueId;
|
||||
|
||||
/**
|
||||
* A message to use as description for the block.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $message;
|
||||
|
||||
/**
|
||||
* The newsletters available to select from.
|
||||
*
|
||||
* @var string[]
|
||||
*/
|
||||
protected $newsletterIds = [];
|
||||
|
||||
/**
|
||||
* The default newsletters.
|
||||
*
|
||||
* @var string[]
|
||||
*/
|
||||
protected $defaultNewsletterIds = [];
|
||||
|
||||
/**
|
||||
* Whether to show "Manage existing" link.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
protected $showManage = FALSE;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getFormId() {
|
||||
if (empty($this->uniqueId)) {
|
||||
throw new \Exception('Unique ID must be set with setUniqueId.');
|
||||
}
|
||||
return 'materio_simplenews_subscriptions_block_' . $this->uniqueId;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function setUniqueId($id) {
|
||||
$this->uniqueId = $id;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set message.
|
||||
*
|
||||
* @param string $message
|
||||
* Message to use as description for the block.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setMessage($message) {
|
||||
$this->message = $message;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the newsletters available to select from.
|
||||
*
|
||||
* @param string[] $newsletters
|
||||
* Newsletter IDs available to select from.
|
||||
* @param string[] $defaults
|
||||
* (optional) Newsletter IDs selected by default.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setNewsletterIds(array $newsletters, array $defaults = []) {
|
||||
$visible = array_keys(simplenews_newsletter_get_visible());
|
||||
// Exclude newsletters already subscribed.
|
||||
$subscribed = $this->entity->getSubscribedNewsletterIds();
|
||||
$this->newsletterIds = array_diff(array_intersect($newsletters, $visible), $subscribed);
|
||||
$this->defaultNewsletterIds = array_diff(array_intersect($defaults, $visible), $subscribed);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the newsletters available to select from.
|
||||
*
|
||||
* @return string[]
|
||||
* The newsletter IDs available to select from, as an indexed array.
|
||||
*/
|
||||
public function getNewsletterIds() {
|
||||
return $this->newsletterIds;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set whether to show "Manage existing" link.
|
||||
*
|
||||
* @param bool $show
|
||||
* TRUE to show "Manage existing" link, FALSE to hide.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setShowManage($show) {
|
||||
$this->showManage = $show;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function form(array $form, FormStateInterface $form_state) {
|
||||
$this->getSubscriptionWidget($form_state)->setAvailableNewsletterIds($this->newsletterIds);
|
||||
|
||||
if (!$form_state->getUserInput()) {
|
||||
// Set defaults.
|
||||
foreach ($this->defaultNewsletterIds as $newsletter_id) {
|
||||
$this->entity->subscribe($newsletter_id, SIMPLENEWS_SUBSCRIPTION_STATUS_SUBSCRIBED, 'website');
|
||||
}
|
||||
}
|
||||
|
||||
$form = parent::form($form, $form_state);
|
||||
$form['subscriptions']['widget']['#title'] = $this->t('Manage your newsletter subscriptions');
|
||||
$form['subscriptions']['widget']['#description'] = $this->t('Select the newsletter(s) to which you want to subscribe.');
|
||||
$hidden_default_ids = array_diff($this->defaultNewsletterIds, $this->getNewsletterIds());
|
||||
$form['subscriptions']['widget']['#required'] = empty($hidden_default_ids);
|
||||
$form['subscriptions']['widget']['#access'] = !empty($this->newsletterIds);
|
||||
|
||||
|
||||
if (!$this->newsletterIds && !$this->defaultNewsletterIds) {
|
||||
$this->message = $this->t('You are already subscribed');
|
||||
}
|
||||
|
||||
if ($this->message) {
|
||||
$form['message'] = [
|
||||
'#type' => 'item',
|
||||
'#markup' => $this->message,
|
||||
];
|
||||
}
|
||||
|
||||
unset($form['subscriptions']['widget']['#title']);
|
||||
unset($form['subscriptions']['widget']['#description']);
|
||||
unset($form['mail']['widget']['#title']);
|
||||
unset($form['mail']['widget']['#description']);
|
||||
unset($form['mail']['widget'][0]['#title']);
|
||||
unset($form['mail']['widget'][0]['#title_display']);
|
||||
unset($form['mail']['widget'][0]['#description']);
|
||||
$form['mail']['widget'][0]['value']['#placeholder'] = t('email');
|
||||
unset($form['mail']['widget'][0]['value']['#title']);
|
||||
unset($form['mail']['widget'][0]['value']['#description']);
|
||||
|
||||
return $form;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function actions(array $form, FormStateInterface $form_state) {
|
||||
$actions = parent::actions($form, $form_state);
|
||||
|
||||
$actions['submit']['#value'] = $this->t('Subscribe');
|
||||
if (!$this->newsletterIds && !$this->defaultNewsletterIds) {
|
||||
$actions['submit']['#attributes']['disabled'] = TRUE;
|
||||
}
|
||||
|
||||
if ($this->showManage) {
|
||||
$user = \Drupal::currentUser();
|
||||
$link = $user->isAuthenticated() ? Url::fromRoute('simplenews.newsletter_subscriptions_user', ['user' => $user->id()]) : Url::fromRoute('simplenews.newsletter_validate');
|
||||
$actions['manage'] = [
|
||||
'#title' => $this->t('Manage existing'),
|
||||
'#type' => 'link',
|
||||
'#url' => $link,
|
||||
];
|
||||
}
|
||||
|
||||
return $actions;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function validateForm(array &$form, FormStateInterface $form_state) {
|
||||
$mail = $form_state->getValue(['mail', 0, 'value']);
|
||||
if ($this->entity->isNew() && $subscriber = Subscriber::loadByMail($mail)) {
|
||||
$this->setEntity($subscriber);
|
||||
}
|
||||
|
||||
parent::validateForm($form, $form_state);
|
||||
|
||||
$mail = $form_state->getValue(['mail', 0, 'value']);
|
||||
// Cannot subscribe blocked users.
|
||||
if (($user = user_load_by_mail($mail)) && $user->isBlocked()) {
|
||||
$message = $this->t('The email address %mail belongs to a blocked user.', ['%mail' => $mail]);
|
||||
$form_state->setErrorByName('mail', $message);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Submit callback that subscribes to selected newsletters.
|
||||
*
|
||||
* @param array $form
|
||||
* The form structure.
|
||||
* @param \Drupal\Core\Form\FormStateInterface $form_state
|
||||
* The form state object.
|
||||
*/
|
||||
public function submitExtra(array $form, FormStateInterface $form_state) {
|
||||
/** @var \Drupal\simplenews\Subscription\SubscriptionManagerInterface $subscription_manager */
|
||||
$subscription_manager = \Drupal::service('simplenews.subscription_manager');
|
||||
|
||||
// Subscribe the selected newsletters and any defaults that are hidden.
|
||||
$selected_ids = $this->extractNewsletterIds($form_state, TRUE);
|
||||
$hidden_default_ids = array_diff($this->defaultNewsletterIds, $this->getNewsletterIds());
|
||||
|
||||
foreach (array_unique(array_merge($selected_ids, $hidden_default_ids)) as $newsletter_id) {
|
||||
$subscription_manager->subscribe($this->entity->getMail(), $newsletter_id, NULL, 'website');
|
||||
}
|
||||
$sent = $subscription_manager->sendConfirmations();
|
||||
$this->messenger()->addMessage($this->getSubmitMessage($form_state, $sent));
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function getSubmitMessage(FormStateInterface $form_state, $confirm) {
|
||||
if ($confirm) {
|
||||
return $this->t('You will receive a confirmation e-mail shortly containing further instructions on how to complete your subscription.');
|
||||
}
|
||||
return $this->t('You have been subscribed.');
|
||||
}
|
||||
|
||||
}
|
||||
-178
@@ -1,178 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\materio_simplenews\Plugin\Block;
|
||||
|
||||
use Drupal\Core\Access\AccessResult;
|
||||
use Drupal\Core\Block\BlockBase;
|
||||
use Drupal\Core\Entity\EntityTypeManagerInterface;
|
||||
use Drupal\Core\Form\FormBuilderInterface;
|
||||
use Drupal\Core\Form\FormStateInterface;
|
||||
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
|
||||
use Drupal\Core\Session\AccountInterface;
|
||||
use Drupal\simplenews\Entity\Subscriber;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
|
||||
// ! NOT USED ANY MORE
|
||||
|
||||
/**
|
||||
* Provides an 'Simplenews subscription' block with all available newsletters and an email field.
|
||||
*
|
||||
* @Block(
|
||||
* id = "materio_simplenews_subscription_block",
|
||||
* admin_label = @Translation("Materio Simplenews subscription"),
|
||||
* category = @Translation("Simplenews")
|
||||
* )
|
||||
*/
|
||||
class MaterioSimplenewsSubscriptionBlock extends BlockBase implements ContainerFactoryPluginInterface {
|
||||
|
||||
/**
|
||||
* The entity type manager.
|
||||
*
|
||||
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
|
||||
*/
|
||||
protected $entityTypeManager;
|
||||
|
||||
/**
|
||||
* The form builder.
|
||||
*
|
||||
* @var \Drupal\Core\Form\FormBuilderInterface
|
||||
*/
|
||||
protected $formBuilder;
|
||||
|
||||
/**
|
||||
* Constructs an SimplenewsSubscriptionBlock object.
|
||||
*
|
||||
* @param array $configuration
|
||||
* A configuration array containing information about the plugin instance.
|
||||
* @param string $plugin_id
|
||||
* The plugin_id for the plugin instance.
|
||||
* @param mixed $plugin_definition
|
||||
* The plugin implementation definition.
|
||||
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
|
||||
* The entity type manager.
|
||||
* @param \Drupal\Core\Form\FormBuilderInterface $formBuilder
|
||||
* The form builder object.
|
||||
*/
|
||||
public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, FormBuilderInterface $formBuilder) {
|
||||
parent::__construct($configuration, $plugin_id, $plugin_definition);
|
||||
$this->entityTypeManager = $entity_type_manager;
|
||||
$this->formBuilder = $formBuilder;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* {@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'),
|
||||
$container->get('form_builder')
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function defaultConfiguration() {
|
||||
// By default, the block will contain 1 newsletter.
|
||||
return array(
|
||||
'newsletters' => array(),
|
||||
'message' => t('Stay informed - subscribe to our newsletter.'),
|
||||
'unique_id' => '',
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function blockAccess(AccountInterface $account) {
|
||||
// Only grant access to users with the 'subscribe to newsletters' permission.
|
||||
return AccessResult::allowedIfHasPermission($account, 'subscribe to newsletters');
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function blockForm($form, FormStateInterface $form_state) {
|
||||
$newsletters = simplenews_newsletter_get_visible();
|
||||
foreach ($newsletters as $newsletter) {
|
||||
$options[$newsletter->id()] = $newsletter->name;
|
||||
}
|
||||
|
||||
$form['newsletters'] = array(
|
||||
'#type' => 'checkboxes',
|
||||
'#title' => t('Newsletters'),
|
||||
'#options' => $options,
|
||||
'#required' => TRUE,
|
||||
'#default_value' => $this->configuration['newsletters'],
|
||||
);
|
||||
$form['message'] = array(
|
||||
'#type' => 'textfield',
|
||||
'#title' => t('Block message'),
|
||||
'#size' => 60,
|
||||
'#maxlength' => 255,
|
||||
'#default_value' => $this->configuration['message'],
|
||||
);
|
||||
$form['unique_id'] = array(
|
||||
'#type' => 'textfield',
|
||||
'#title' => t('Unique ID'),
|
||||
'#size' => 60,
|
||||
'#maxlength' => 255,
|
||||
'#description' => t('Each subscription block must have a unique form ID. If no value is provided, a random ID will be generated. Use this to have a predictable, short ID, e.g. to configure this form use a CAPTCHA.'),
|
||||
'#default_value' => $this->configuration['unique_id'],
|
||||
);
|
||||
/*if (\Drupal::moduleHandler()->moduleExists('views')) {
|
||||
$form['link_previous'] = array(
|
||||
'#type' => 'checkbox',
|
||||
'#title' => t('Display link to previous issues'),
|
||||
'#return_value' => 1,
|
||||
'#default_value' => variable_get('simplenews_block_l_' . $delta, 1),
|
||||
'#description' => t('Link points to newsletter/newsletter_id, which is provided by the newsletter issue list default view.'),
|
||||
);
|
||||
}*/
|
||||
/*if (\Drupal::moduleHandler()->moduleExists('views')) {
|
||||
$form['rss_feed'] = array(
|
||||
'#type' => 'checkbox',
|
||||
'#title' => t('Display RSS-feed icon'),
|
||||
'#return_value' => 1,
|
||||
'#default_value' => variable_get('simplenews_block_r_' . $delta, 1),
|
||||
'#description' => t('Link points to newsletter/feed/newsletter_id, which is provided by the newsletter issue list default view.'),
|
||||
);
|
||||
}*/
|
||||
return $form;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function blockSubmit($form, FormStateInterface $form_state) {
|
||||
$this->configuration['newsletters'] = array_filter($form_state->getValue('newsletters'));
|
||||
$this->configuration['message'] = $form_state->getValue('message');
|
||||
//$this->configuration['link_previous'] = $form_state->getValue('link_previous');
|
||||
//$this->configuration['rss_feed'] = $form_state->getValue('rss_feed');
|
||||
$this->configuration['unique_id'] = empty($form_state->getValue('unique_id')) ? \Drupal::service('uuid')->generate() : $form_state->getValue('unique_id');
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function build() {
|
||||
/** @var \Drupal\materio_simplenews\Form\MaterioSubscriptionsBlockForm $form_object */
|
||||
$form_object = $this->entityTypeManager->getFormObject('simplenews_subscriber', 'materio_block');
|
||||
$form_object->setUniqueId($this->configuration['unique_id']);
|
||||
$form_object->setNewsletterIds($this->configuration['newsletters']);
|
||||
$form_object->message = t($this->configuration['message']);
|
||||
|
||||
// Set the entity on the form.
|
||||
$user = \Drupal::currentUser();
|
||||
$form_object->setEntity(Subscriber::loadByUid($user->id(), 'create'));
|
||||
|
||||
|
||||
return $this->formBuilder->getForm($form_object);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user