public function UserSettings::buildForm in Notify 2.0.x
Same name and namespace in other branches
- 8 src/Form/UserSettings.php \Drupal\notify\Form\UserSettings::buildForm()
- 1.0.x src/Form/UserSettings.php \Drupal\notify\Form\UserSettings::buildForm()
Form constructor.
Parameters
array $form: An associative array containing the structure of the form.
\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.
Return value
array The form structure.
Overrides ConfigFormBase::buildForm
File
- src/
Form/ UserSettings.php, line 86
Class
- UserSettings
- Defines a form that configures forms module settings.
Namespace
Drupal\notify\FormCode
public function buildForm(array $form, FormStateInterface $form_state, Request $request = NULL) {
$config = $this
->config('notify.settings');
$db_connection = \Drupal::Database();
$entityManager = \Drupal::entityTypeManager();
$module_handler = \Drupal::service('module_handler');
$userprofile = \Drupal::routeMatch()
->getParameter('user');
$account = $entityManager
->getStorage('user')
->load($userprofile);
if (!is_object($account)) {
return;
}
$result = $db_connection
->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',
'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->comment = 0;
}
if ($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('Receive email notifications'),
'#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 disable email notifications without having to disturb any of your settings under “Detailed settings” and “Subscriptions”.'),
];
$form['notify_page_detailed'] = [
'#type' => 'details',
'#title' => $this
->t('Detailed settings'),
'#open' => TRUE,
'#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' => $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.'),
];
$set = 'notify_page_nodetype';
$form[$set] = [
'#type' => 'details',
'#title' => $this
->t('Subscriptions'),
'#open' => FALSE,
'#description' => $this
->t('Tick the node types you want to subscribe to.'),
];
$alltypes = $entityManager
->getStorage('node_type')
->loadMultiple();
$enatypes = [];
foreach ($alltypes as $type => $object) {
if ($config
->get(NOTIFY_NODE_TYPE . $type)) {
$enatypes[] = [
$type,
$object
->label(),
];
}
}
if ($account
->hasPermission('administer notify queue') || empty($enatypes)) {
$enatypes = [];
foreach ($alltypes as $type => $obj) {
$enatypes[] = [
$type,
$obj
->label(),
];
}
}
// Get the permitted subscriptions.
if (NULL !== $config
->get('notify_nodetypes')) {
$def_nodetypes = $config
->get('notify_nodetypes');
}
else {
$def_nodetypes = [];
}
// Get user's subscriptions.
foreach ($enatypes as $type) {
$field = $db_connection
->select('notify_subscriptions', 'n')
->fields('n', [
'uid',
'type',
])
->condition('uid', $userprofile)
->condition('type', $type[0])
->execute()
->fetchObject();
// Only show those permitted or already subscribed.
if (isset($def_nodetypes[$type[0]]) && $def_nodetypes[$type[0]] || $field) {
$default = $field ? TRUE : FALSE;
$form[$set][NOTIFY_NODE_TYPE . $type[0]] = [
'#type' => 'checkbox',
'#title' => $type[1],
'#return_value' => 1,
'#default_value' => $default,
];
}
}
$form['uid'] = [
'#type' => 'value',
'#value' => $userprofile,
];
return parent::buildForm($form, $form_state);
}