mirror of
https://github.com/processwire/processwire.git
synced 2025-08-22 14:23:05 +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:
@@ -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 */
|
||||
|
@@ -130,6 +130,7 @@ $reno-green: #3eb998 // RJC
|
||||
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
|
||||
|
||||
|
@@ -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;
|
||||
});
|
||||
});
|
@@ -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})});
|
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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`');
|
||||
|
Reference in New Issue
Block a user