class UserSettings in Notify 8
Same name and namespace in other branches
- 2.0.x src/Form/UserSettings.php \Drupal\notify\Form\UserSettings
- 1.0.x src/Form/UserSettings.php \Drupal\notify\Form\UserSettings
Defines a form that configures forms module settings.
Hierarchy
- class \Drupal\Core\Form\FormBase implements ContainerInjectionInterface, FormInterface uses DependencySerializationTrait, LoggerChannelTrait, MessengerTrait, LinkGeneratorTrait, RedirectDestinationTrait, UrlGeneratorTrait, StringTranslationTrait
- class \Drupal\Core\Form\ConfigFormBase uses ConfigFormBaseTrait
- class \Drupal\notify\Form\UserSettings
- class \Drupal\Core\Form\ConfigFormBase uses ConfigFormBaseTrait
Expanded class hierarchy of UserSettings
1 string reference to 'UserSettings'
File
- src/
Form/ UserSettings.php, line 19
Namespace
Drupal\notify\FormView source
class UserSettings extends ConfigFormBase {
/**
* Drupal\Core\Messenger\MessengerInterface definition.
*
* @var \Drupal\Core\Messenger\MessengerInterface
*/
protected $messenger;
/**
* Class constructor.
*
* @param ConfigFactoryInterface $config_factory
* The config factory.
* @param MessengerInterface $messenger
* The core messenger service.
*/
public function __construct(ConfigFactoryInterface $config_factory, MessengerInterface $messenger) {
parent::__construct($config_factory);
$this->messenger = $messenger;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static($container
->get('config.factory'), $container
->get('messenger'));
}
/**
* {@inheritdoc}
*/
public function getFormId() {
return 'notify_user_settings';
}
/**
* {@inheritdoc}
*/
protected function getEditableConfigNames() {
return [
'notify.settings',
];
}
/**
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state, Request $request = NULL) {
$config = $this
->config('notify.settings');
$userprofile = \Drupal::routeMatch()
->getParameter('user');
$account = \Drupal\user\Entity\User::load($userprofile);
if (!is_object($account)) {
return;
}
$result = \Drupal::database()
->select('users', 'u');
$result
->leftjoin('users_field_data', 'v', 'u.uid = v.uid');
$result
->leftjoin('notify', 'n', 'u.uid = n.uid');
$result
->fields('u', [
'uid',
]);
$result
->fields('v', [
'name',
'mail',
]);
$result
->fields('n', [
'node',
'teasers',
'comment',
'status',
]);
$result
->condition('u.uid', $userprofile);
$result->allowRowCount = TRUE;
$notify = $result
->execute()
->fetchObject();
// Internal error.
if (!is_object($notify)) {
$notify = NULL;
}
$form = [];
if (!$notify->mail) {
$url = '/user/' . $userprofile . '/edit';
$this->messenger
->addMessage($this
->t('Your e-mail address must be specified on your <a href="@url">my account</a> page.', [
'@url' => $url,
]), 'error');
}
$form['notify_page_master'] = [
'#type' => 'fieldset',
'#title' => $this
->t('Master switch'),
];
// If user existed before notify was enabled, these are not set in db.
if (!isset($notify->status)) {
$notify->status = 0;
$notify->node = 0;
$notify->teasers = 0;
$notify->comment = 0;
}
if (\Drupal::service('module_handler')
->moduleExists('advanced_help')) {
$output = theme('advanced_help_topic', [
'module' => 'notify',
'topic' => 'users',
]);
}
else {
$output = '';
}
$form['notify_page_master']['status'] = [
'#type' => 'radios',
'#title' => $this
->t('Notify status'),
'#default_value' => $notify->status,
'#options' => [
$this
->t('Disabled'),
$this
->t('Enabled'),
],
'#description' => $output . ' ' . $this
->t('The master switch overrides all other settings for Notify. You can use it to suspend notifications without having to disturb any of your settings under “Detailed settings” and “Subscriptions”.'),
];
$form['notify_page_detailed'] = [
'#type' => 'fieldset',
'#title' => $this
->t('Detailed settings'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
'#description' => $this
->t('These settings will only be effective if the master switch is set to “Enabled”.'),
];
$form['notify_page_detailed']['node'] = [
'#type' => 'radios',
'#title' => $this
->t('Notify new content'),
'#default_value' => $notify->node,
'#options' => [
$this
->t('Disabled'),
$this
->t('Enabled'),
],
'#description' => $this
->t('Include new posts in the notification mail.'),
];
$form['notify_page_detailed']['comment'] = [
'#type' => 'radios',
'#access' => \Drupal::service('module_handler')
->moduleExists('comment'),
'#title' => $this
->t('Notify new comments'),
'#default_value' => $notify->comment,
'#options' => [
$this
->t('Disabled'),
$this
->t('Enabled'),
],
'#description' => $this
->t('Include new comments in the notification mail.'),
];
$form['notify_page_detailed']['teasers'] = [
'#type' => 'radios',
'#title' => $this
->t('How much to include?'),
'#default_value' => $notify->teasers,
'#options' => [
$this
->t('Title only'),
$this
->t('Title + Teaser/Excerpt'),
$this
->t('Title + Body'),
$this
->t('Title + Body + Fields'),
],
'#description' => $this
->t('Select the amount of each item to include in the notification e-mail.'),
];
$set = 'notify_page_nodetype';
$form[$set] = [
'#type' => 'fieldset',
'#title' => $this
->t('Subscriptions'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#description' => $this
->t('Tick the content types you want to subscribe to.'),
];
$alltypes = \Drupal\node\Entity\NodeType::loadMultiple();
$enatypes = [];
foreach (\Drupal\node\Entity\NodeType::loadMultiple() as $type => $object) {
if ($config
->get(NOTIFY_NODE_TYPE . $type)) {
$enatypes[] = [
$type,
$object
->label(),
];
}
}
if (\Drupal::currentUser()
->hasPermission('administer notify queue') || empty($enatypes)) {
$enatypes = [];
foreach ($alltypes as $type => $obj) {
$enatypes[] = [
$type,
$obj
->label(),
];
}
}
//TODO: FIX '_notify_user_has_subscriptions' LATER ON
$exists = _notify_user_has_subscriptions($userprofile);
if ($exists) {
// Custom subscriptions exists, use those.
foreach ($enatypes as $type) {
$field = \Drupal::database()
->select('notify_subscriptions', 'n')
->fields('n', [
'uid',
'type',
])
->condition('uid', $userprofile)
->condition('type', $type[0])
->execute()
->fetchObject();
$default = $field ? TRUE : FALSE;
$form[$set][NOTIFY_NODE_TYPE . $type[0]] = [
'#type' => 'checkbox',
'#title' => $type[1],
'#return_value' => 1,
'#default_value' => $default,
];
}
}
else {
// No custom subscriptions, so inherit default.
foreach ($enatypes as $type) {
$form[$set][NOTIFY_NODE_TYPE . $type[0]] = [
'#type' => 'checkbox',
'#title' => $type[1],
'#return_value' => 1,
'#default_value' => TRUE,
];
}
}
$form['uid'] = [
'#type' => 'value',
'#value' => $userprofile,
];
return parent::buildForm($form, $form_state);
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
$values = $form_state
->getValues();
$uid = $values['uid'];
\Drupal::database()
->delete('notify')
->condition('uid', $uid)
->execute();
$id = \Drupal::database()
->insert('notify')
->fields([
'uid' => $uid,
'status' => $values['status'],
'node' => $values['node'],
'teasers' => $values['teasers'],
'comment' => $values['comment'],
])
->execute();
$subscriptions = [];
// Remember that this is a custom subscriber.
$subscriber = _notify_user_has_subscriptions($uid);
if (!$subscriber) {
\Drupal::database()
->insert('notify_subscriptions')
->fields([
'uid' => $uid,
'type' => 'magic custom subscription',
])
->execute();
}
foreach ($values as $key => $value) {
if (preg_match("/^" . NOTIFY_NODE_TYPE . "/", $key)) {
$key = substr($key, 17);
$id = \Drupal::database()
->select('notify_subscriptions', 'n')
->fields('n', [
'id',
'uid',
'type',
])
->condition('uid', $uid)
->condition('type', $key)
->execute()
->fetchObject();
if ($id) {
$id = $id->id;
if (!$value) {
\Drupal::database()
->delete('notify_subscriptions')
->condition('id', $id)
->execute();
}
}
else {
if ($value) {
\Drupal::database()
->insert('notify_subscriptions')
->fields([
'uid' => $uid,
'type' => $key,
])
->execute();
}
}
}
}
$this->messenger
->addMessage($this
->t('Notify settings saved.'));
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
ConfigFormBaseTrait:: |
protected | function | Retrieves a configuration object. | |
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
FormBase:: |
protected | property | The config factory. | 1 |
FormBase:: |
protected | property | The request stack. | 1 |
FormBase:: |
protected | property | The route match. | |
FormBase:: |
protected | function | Gets the config factory for this form. | 1 |
FormBase:: |
private | function | Returns the service container. | |
FormBase:: |
protected | function | Gets the current user. | |
FormBase:: |
protected | function | Gets the request object. | |
FormBase:: |
protected | function | Gets the route match. | |
FormBase:: |
protected | function | Gets the logger for a specific channel. | |
FormBase:: |
protected | function |
Returns a redirect response object for the specified route. Overrides UrlGeneratorTrait:: |
|
FormBase:: |
public | function | Resets the configuration factory. | |
FormBase:: |
public | function | Sets the config factory for this form. | |
FormBase:: |
public | function | Sets the request stack object to use. | |
FormBase:: |
public | function |
Form validation handler. Overrides FormInterface:: |
62 |
LinkGeneratorTrait:: |
protected | property | The link generator. | 1 |
LinkGeneratorTrait:: |
protected | function | Returns the link generator. | |
LinkGeneratorTrait:: |
protected | function | Renders a link to a route given a route name and its parameters. | |
LinkGeneratorTrait:: |
public | function | Sets the link generator service. | |
LoggerChannelTrait:: |
protected | property | The logger channel factory service. | |
LoggerChannelTrait:: |
protected | function | Gets the logger for a specific channel. | |
LoggerChannelTrait:: |
public | function | Injects the logger channel factory. | |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
RedirectDestinationTrait:: |
protected | property | The redirect destination service. | 1 |
RedirectDestinationTrait:: |
protected | function | Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url. | |
RedirectDestinationTrait:: |
protected | function | Returns the redirect destination service. | |
RedirectDestinationTrait:: |
public | function | Sets the redirect destination service. | |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
UrlGeneratorTrait:: |
protected | property | The url generator. | |
UrlGeneratorTrait:: |
protected | function | Returns the URL generator service. | |
UrlGeneratorTrait:: |
public | function | Sets the URL generator service. | |
UrlGeneratorTrait:: |
protected | function | Generates a URL or path for a specific route based on the given parameters. | |
UserSettings:: |
protected | property |
Drupal\Core\Messenger\MessengerInterface definition. Overrides MessengerTrait:: |
|
UserSettings:: |
public | function |
Form constructor. Overrides ConfigFormBase:: |
|
UserSettings:: |
public static | function |
Instantiates a new instance of this class. Overrides ConfigFormBase:: |
|
UserSettings:: |
protected | function |
Gets the configuration names that will be editable. Overrides ConfigFormBaseTrait:: |
|
UserSettings:: |
public | function |
Returns a unique string identifying the form. Overrides FormInterface:: |
|
UserSettings:: |
public | function |
Form submission handler. Overrides ConfigFormBase:: |
|
UserSettings:: |
public | function |
Class constructor. Overrides ConfigFormBase:: |