summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Pott2014-08-06 08:23:17 (GMT)
committerAlex Pott2014-08-06 08:23:17 (GMT)
commit5afbef95918e2ddbf1d1242e069578b880352d1c (patch)
treef2a4a2cb3dd7a71f9be8ddcca78298645f8524e0
parent627a719a7feeef0a849e41addffa9d954ef02abf (diff)
Issue #749748 by Bès, penyaskito, sun, hefox, Dave Reid, mavimo | c960657: Fixed Contact, register and comment forms do not prefill with user info from browser.
-rw-r--r--core/misc/form.js30
-rw-r--r--core/modules/comment/src/CommentForm.php12
-rw-r--r--core/modules/contact/src/MessageForm.php8
-rw-r--r--core/modules/user/src/RegisterForm.php4
4 files changed, 29 insertions, 25 deletions
diff --git a/core/misc/form.js b/core/misc/form.js
index 8421210..4f74127 100644
--- a/core/misc/form.js
+++ b/core/misc/form.js
@@ -170,21 +170,29 @@
};
/**
- * Prepopulate form fields with information from the visitor cookie.
+ * Prepopulate form fields with information from the visitor browser.
*/
- Drupal.behaviors.fillUserInfoFromCookie = {
+ Drupal.behaviors.fillUserInfoFromBrowser = {
attach: function (context, settings) {
var userInfo = ['name', 'mail', 'homepage'];
- $('form.user-info-from-cookie').once('user-info-from-cookie', function () {
- var $formContext = $(this);
- var i, il, $element, cookie;
- for (i = 0, il = userInfo.length; i < il; i += 1) {
- $element = $formContext.find('[name=' + userInfo[i] + ']');
- cookie = $.cookie('Drupal.visitor.' + userInfo[i]);
- if ($element.length && cookie) {
- $element.val(cookie);
+ var $forms = $('[data-user-info-from-browser]').once('user-info-from-browser');
+ if ($forms.length) {
+ userInfo.map(function (info) {
+ var $element = $forms.find('[name=' + info + ']');
+ var browserData = localStorage.getItem('Drupal.visitor.' + info);
+ var emptyOrDefault = ($element.val() === '' || ($element.attr('data-drupal-default-value') === $element.val()));
+ if ($element.length && emptyOrDefault && browserData) {
+ $element.val(browserData);
}
- }
+ });
+ }
+ $forms.on('submit', function () {
+ userInfo.map(function (info) {
+ var $element = $forms.find('[name=' + info + ']');
+ if ($element.length) {
+ localStorage.setItem('Drupal.visitor.' + info, $element.val());
+ }
+ });
});
}
};
diff --git a/core/modules/comment/src/CommentForm.php b/core/modules/comment/src/CommentForm.php
index 7b2eee8..2819a56 100644
--- a/core/modules/comment/src/CommentForm.php
+++ b/core/modules/comment/src/CommentForm.php
@@ -88,8 +88,8 @@ class CommentForm extends ContentEntityForm {
$is_admin = $comment->id() && $this->currentUser->hasPermission('administer comments');
if (!$this->currentUser->isAuthenticated() && $anonymous_contact != COMMENT_ANONYMOUS_MAYNOT_CONTACT) {
- $form['#attached']['library'][] = 'core/jquery.cookie';
- $form['#attributes']['class'][] = 'user-info-from-cookie';
+ $form['#attached']['library'][] = 'core/drupal.form';
+ $form['#attributes']['data-user-info-from-browser'] = TRUE;
}
// If not replying to a comment, use our dedicated page callback for new
@@ -156,6 +156,9 @@ class CommentForm extends ContentEntityForm {
$form['author']['name']['#theme'] = 'username';
$form['author']['name']['#account'] = $this->currentUser;
}
+ elseif($this->currentUser->isAnonymous()) {
+ $form['author']['name']['#attributes']['data-drupal-default-value'] = $this->config('user.settings')->get('anonymous');
+ }
$language_configuration = \Drupal::moduleHandler()->invoke('language', 'get_default_configuration', array('comment', $comment->getTypeId()));
$form['langcode'] = array(
@@ -367,11 +370,6 @@ class CommentForm extends ContentEntityForm {
$logger = $this->logger('content');
if ($this->currentUser->hasPermission('post comments') && ($this->currentUser->hasPermission('administer comments') || $entity->{$field_name}->status == CommentItemInterface::OPEN)) {
- // Save the anonymous user information to a cookie for reuse.
- if ($this->currentUser->isAnonymous()) {
- user_cookie_save(array_intersect_key($form_state['values'], array_flip(array('name', 'mail', 'homepage'))));
- }
-
$comment->save();
$form_state['values']['cid'] = $comment->id();
diff --git a/core/modules/contact/src/MessageForm.php b/core/modules/contact/src/MessageForm.php
index 2e7bd71..83066a3 100644
--- a/core/modules/contact/src/MessageForm.php
+++ b/core/modules/contact/src/MessageForm.php
@@ -108,8 +108,8 @@ class MessageForm extends ContentEntityForm {
'#required' => TRUE,
);
if ($user->isAnonymous()) {
- $form['#attached']['library'][] = 'core/jquery.cookie';
- $form['#attributes']['class'][] = 'user-info-from-cookie';
+ $form['#attached']['library'][] = 'core/drupal.form';
+ $form['#attributes']['data-user-info-from-browser'] = TRUE;
}
// Do not allow authenticated users to alter the name or email values to
// prevent the impersonation of other users.
@@ -191,9 +191,7 @@ class MessageForm extends ContentEntityForm {
// over the submitted form values.
$sender->name = $message->getSenderName();
$sender->mail = $message->getSenderMail();
- // Save the anonymous user information to a cookie for reuse.
- // @todo remove when https://www.drupal.org/node/749748 is in.
- user_cookie_save(array('name' => $message->getSenderName(), 'mail' => $message->getSenderMail()));
+
// For the email message, clarify that the sender name is not verified; it
// could potentially clash with a username on this site.
$sender->name = $this->t('!name (not verified)', array('!name' => $message->getSenderName()));
diff --git a/core/modules/user/src/RegisterForm.php b/core/modules/user/src/RegisterForm.php
index 5b9fcd6..f5c3176 100644
--- a/core/modules/user/src/RegisterForm.php
+++ b/core/modules/user/src/RegisterForm.php
@@ -46,8 +46,8 @@ class RegisterForm extends AccountForm {
return new RedirectResponse(url('user/' . \Drupal::currentUser()->id(), array('absolute' => TRUE)));
}
- $form['#attached']['library'][] = 'core/jquery.cookie';
- $form['#attributes']['class'][] = 'user-info-from-cookie';
+ $form['#attached']['library'][] = 'core/drupal.form';
+ $form['#attributes']['data-user-info-from-browser'] = TRUE;
// Because the user status has security implications, users are blocked by
// default when created programmatically and need to be actively activated