1
0
mirror of https://github.com/processwire/processwire.git synced 2025-08-22 06:13:57 +02:00

Update ProcessProfile to use a dialog window prompt (via vex) when saving changes to a field requires current password.

This commit is contained in:
Ryan Cramer
2018-09-28 10:31:50 -04:00
parent c55a547458
commit 2f2bb118b0
6 changed files with 55 additions and 15 deletions

View File

@@ -351,11 +351,26 @@
top: -1.1em;
bottom: auto; }
.AdminThemeReno .vex.vex-theme-default .vex-dialog-form .vex-dialog-input textarea:focus, .AdminThemeReno .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="date"]:focus, .AdminThemeReno .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="datetime"]:focus, .AdminThemeReno .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="datetime-local"]:focus, .AdminThemeReno .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="email"]:focus, .AdminThemeReno .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="month"]:focus, .AdminThemeReno .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="number"]:focus, .AdminThemeReno .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="password"]:focus, .AdminThemeReno .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="search"]:focus, .AdminThemeReno .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="tel"]:focus, .AdminThemeReno .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="text"]:focus, .AdminThemeReno .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="time"]:focus, .AdminThemeReno .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="url"]:focus, .AdminThemeReno .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="week"]:focus {
.AdminThemeUikit .vex.vex-theme-default .vex-dialog-form .vex-dialog-input textarea:focus, .AdminThemeUikit .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="date"]:focus, .AdminThemeUikit .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="datetime"]:focus, .AdminThemeUikit .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="datetime-local"]:focus, .AdminThemeUikit .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="email"]:focus, .AdminThemeUikit .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="month"]:focus, .AdminThemeUikit .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="number"]:focus, .AdminThemeUikit .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="password"]:focus, .AdminThemeUikit .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="search"]:focus, .AdminThemeUikit .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="tel"]:focus, .AdminThemeUikit .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="text"]:focus, .AdminThemeUikit .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="time"]:focus, .AdminThemeUikit .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="url"]:focus, .AdminThemeUikit .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="week"]:focus,
.AdminThemeReno .vex.vex-theme-default .vex-dialog-form .vex-dialog-input textarea:focus,
.AdminThemeReno .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="date"]:focus,
.AdminThemeReno .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="datetime"]:focus,
.AdminThemeReno .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="datetime-local"]:focus,
.AdminThemeReno .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="email"]:focus,
.AdminThemeReno .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="month"]:focus,
.AdminThemeReno .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="number"]:focus,
.AdminThemeReno .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="password"]:focus,
.AdminThemeReno .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="search"]:focus,
.AdminThemeReno .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="tel"]:focus,
.AdminThemeReno .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="text"]:focus,
.AdminThemeReno .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="time"]:focus,
.AdminThemeReno .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="url"]:focus,
.AdminThemeReno .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="week"]:focus {
-moz-box-shadow: inset 0 0 0 2px #86d7c1;
-webkit-box-shadow: inset 0 0 0 2px #86d7c1;
box-shadow: inset 0 0 0 2px #86d7c1; }
.AdminThemeUikit .vex.vex-theme-default .vex-dialog-button.vex-dialog-button-primary,
.AdminThemeReno .vex.vex-theme-default .vex-dialog-button.vex-dialog-button-primary {
background: #3eb998; }
background: #3eb998;
font-weight: normal; }
/*# sourceMappingURL=vex-theme-default.css.map */

View File

@@ -129,7 +129,8 @@ $reno-green: #3eb998 // RJC
border-top-color: #bbb
top: -1.1em
bottom: auto
.AdminThemeUikit,
.AdminThemeReno
.vex.vex-theme-default
.vex-dialog-form
@@ -141,4 +142,5 @@ $reno-green: #3eb998 // RJC
.vex-dialog-button
&.vex-dialog-button-primary
background: $reno-green // RJC
font-weight: normal // RJC

View File

@@ -12,17 +12,37 @@ $(document).ready(function() {
}
$("form#ProcessProfile").submit(function() {
var $form = $(this);
var $inputfields = $(".InputfieldStateChanged.InputfieldPassRequired");
if(!$inputfields.length) return;
var $pass = $('#_old_pass');
if($pass.val().length) return;
var $passWrap = $pass.closest('.InputfieldPassword');
if($passWrap.hasClass('InputfieldStateCollapsed')) {
setTimeout(function() {
$passWrap.find('.InputfieldHeader').click();
}, 200);
var pwAlert = ProcessWire.config.ProcessProfile.passRequiredAlert;
if(pwAlert.length && typeof vex != "undefined") {
// use vex to display dialog box where they can enter password
vex.dialog.open({
message: pwAlert,
input: "<input type='password' placeholder='" + $pass.attr('placeholder') + "' id='_old_pass_confirm' />",
callback: function(data) {
if(!data) return;
var val = $('#_old_pass_confirm').val();
if(val.length) {
$pass.val(val);
setTimeout(function() { $('#submit_save_profile').click(); }, 200);
}
}
});
} else {
// reveal the password field then focus it
var $passWrap = $pass.closest('.InputfieldPassword');
if($passWrap.hasClass('InputfieldStateCollapsed')) {
setTimeout(function() {
$passWrap.find('.InputfieldHeader').click();
}, 200);
}
setTimeout(function() { $pass.focus(); }, 400);
}
setTimeout(function() { $pass.focus(); }, 400);
return false;
});
});

View File

@@ -1 +1 @@
$(document).ready(function(){if($(".FieldtypePassword[autocomplete='off']").length){setTimeout(function(){$(".FieldtypePassword[autocomplete='off']").attr("value","").closest(".Inputfield").removeClass("InputfieldStateChanged")},1000)}$("form#ProcessProfile").submit(function(){var b=$(".InputfieldStateChanged.InputfieldPassRequired");if(!b.length){return}var a=$("#_old_pass");if(a.val().length){return}var c=a.closest(".InputfieldPassword");if(c.hasClass("InputfieldStateCollapsed")){setTimeout(function(){c.find(".InputfieldHeader").click()},200)}setTimeout(function(){a.focus()},400);return false})});
$(document).ready(function(){if($(".FieldtypePassword[autocomplete='off']").length){setTimeout(function(){$(".FieldtypePassword[autocomplete='off']").attr("value","").closest(".Inputfield").removeClass("InputfieldStateChanged")},1000)}$("form#ProcessProfile").submit(function(){var b=$(this);var c=$(".InputfieldStateChanged.InputfieldPassRequired");if(!c.length){return}var a=$("#_old_pass");if(a.val().length){return}var d=ProcessWire.config.ProcessProfile.passRequiredAlert;if(d.length&&typeof vex!="undefined"){vex.dialog.open({message:d,input:"<input type='password' placeholder='"+a.attr("placeholder")+"' id='_old_pass_confirm' />",callback:function(f){if(!f){return}var g=$("#_old_pass_confirm").val();if(g.length){a.val(g);setTimeout(function(){$("#submit_save_profile").click()},200)}}})}else{var e=a.closest(".InputfieldPassword");if(e.hasClass("InputfieldStateCollapsed")){setTimeout(function(){e.find(".InputfieldHeader").click()},200)}setTimeout(function(){a.focus()},400)}return false})});

View File

@@ -18,7 +18,7 @@ class ProcessProfile extends Process implements ConfigurableModule, WirePageEdit
return array(
'title' => __('User Profile', __FILE__), // getModuleInfo title
'summary' => __('Enables user to change their password, email address and other settings that you define.', __FILE__), // getModuleInfo summary
'version' => 103,
'version' => 104,
'permanent' => true,
'permission' => 'profile-edit',
);
@@ -118,7 +118,10 @@ class ProcessProfile extends Process implements ConfigurableModule, WirePageEdit
$passRequired = false;
// Inputfields where password is required to change
$passRequiredInputfields = array();
$passRequiredNote = $this->_('To change this field, you must also enter your current password in the “Set Password” field.');
$this->wire('config')->js('ProcessProfile', array(
'passRequiredAlert' => $this->_('For security, please enter your current password to save these changes:')
));
$this->wire('modules')->get('JqueryUI')->use('vex');
if(in_array('name', $this->profileFields) && empty($fieldName)) {
/** @var InputfieldText $f */
@@ -194,7 +197,7 @@ class ProcessProfile extends Process implements ConfigurableModule, WirePageEdit
foreach($passRequiredInputfields as $f) {
$f->addClass('InputfieldPassRequired', 'wrapClass');
$this->passRequiredNames[$f->name] = $f->name;
$f->notes = ($f->notes ? "$f->notes\n" : "") . $passRequiredNote;
// $f->notes = ($f->notes ? "$f->notes\n" : "") . $passRequiredNote;
}
}

View File

@@ -10,9 +10,9 @@ class SystemUpdate12 extends SystemUpdate {
$query = $this->wire('database')->prepare("SHOW columns FROM `pages` LIKE 'published'");
$query->execute();
$result = true;
if($query->rowCount() == 0) {
$result = true;
try {
$this->wire('database')->exec('ALTER TABLE pages ADD published datetime DEFAULT NULL AFTER `created_users_id`');