Index: core/kernel/utility/formatters/password_formatter.php
===================================================================
--- core/kernel/utility/formatters/password_formatter.php (revision 12295)
+++ core/kernel/utility/formatters/password_formatter.php (revision 12296)
@@ -17,19 +17,17 @@
function PrepareOptions($field_name, &$field_options, &$object)
{
- if( isset( $field_options['verify_field'] ) )
- {
- $add_fields = Array();
- $options = Array('master_field' => $field_name, 'formatter' => 'kPasswordFormatter');
- if (isset($field_options['encryption_method'])) {
- $options['encryption_method'] = $field_options['encryption_method'];
+ if ( isset( $field_options['verify_field'] ) ) {
+ $add_fields = Array ();
+ $options = Array ('master_field' => $field_name, 'formatter' => 'kPasswordFormatter');
+
+ $copy_options = Array ('encryption_method', 'salt', 'required', 'skip_empty');
+ foreach ($copy_options as $copy_option) {
+ if (array_key_exists($copy_option, $field_options)) {
+ $options[$copy_option] = $field_options[$copy_option];
+ }
}
- if (isset($field_options['salt'])) {
- $options['salt'] = $field_options['salt'];
- }
- if (isset($field_options['required'])) {
- $options['required'] = $field_options['required'];
- }
+
$add_fields[ $field_options['verify_field'] ] = $options;
$add_fields[$field_name.'_plain'] = Array('type'=>'string', 'error_field'=>$field_name);
@@ -57,35 +55,36 @@
{
$options = $object->GetFieldOptions($field_name);
- $fields = Array('master_field','verify_field');
+ $flip_count = 0;
$fields_set = true;
- $flip_count = 0;
- while($flip_count < 2)
- {
- if( getArrayValue($options,$fields[0]) )
- {
+ $fields = Array ('master_field', 'verify_field');
+
+ // 1. collect values from both Password and VerifyPassword fields
+ while ($flip_count < 2) {
+ if ( getArrayValue($options, $fields[0]) ) {
$object->SetDBField($field_name.'_plain', $value);
- if( !getArrayValue($object->Fields[ $options[ $fields[0] ] ], $fields[1].'_set') )
- {
+
+ if ( !getArrayValue($object->Fields[ $options[ $fields[0] ] ], $fields[1].'_set') ) {
$object->Fields[ $options[ $fields[0] ] ][$fields[1].'_set'] = true;
}
$password_field = $options[ $fields[0] ];
$verify_field = $field_name;
}
+
$fields = array_reverse($fields);
$flip_count++;
}
$salt = isset($object->Fields[$password_field]['salt']) ? $object->Fields[$password_field]['salt'] : '';
- if( getArrayValue($object->Fields[$password_field], 'verify_field_set') && getArrayValue($object->Fields[$verify_field], 'master_field_set') )
- {
- $new_password = $object->GetDBField($password_field.'_plain');
- $verify_password = $object->GetDBField($verify_field.'_plain');
- if($new_password == '' && $verify_password == '')
- {
- if( $object->GetDBField($password_field) != $this->EncryptPassword('', $salt) ) {
+ if (getArrayValue($object->Fields[$password_field], 'verify_field_set') && getArrayValue($object->Fields[$verify_field], 'master_field_set')) {
+ $new_password = $object->GetDBField($password_field . '_plain');
+ $verify_password = $object->GetDBField($verify_field . '_plain');
+
+ if ($new_password == '' && $verify_password == '') {
+ // both passwords are empty -> keep old password
+ if ($object->GetDBField($password_field) != $this->EncryptPassword('', $salt)) {
if ($options['encryption_method'] == 'plain') {
return $value;
}
@@ -93,10 +92,7 @@
return $this->EncryptPassword($value);
}
else {
- $object->Fields[$password_field.'_plain']['required'] = true;
- $object->Fields[$verify_field.'_plain']['required'] = true;
-
- return null;
+ return $value;
}
}
@@ -112,9 +108,15 @@
$object->SetError($password_field, 'passwords_min_length', $error_msg);
}
}
- if($value == '') return $object->GetDBField($field_name);
- if ($options['encryption_method'] == 'plain') return $value;
+ if ($value == '') {
+ return $object->GetDBField($field_name);
+ }
+
+ if ($options['encryption_method'] == 'plain') {
+ return $value;
+ }
+
return $this->EncryptPassword($value, $salt);
}
Index: core/units/users/users_event_handler.php
===================================================================
--- core/units/users/users_event_handler.php (revision 12295)
+++ core/units/users/users_event_handler.php (revision 12296)
@@ -719,6 +719,8 @@
*/
function OnBeforeItemCreate(&$event)
{
+ $this->_makePasswordRequired($event);
+
$email_as_login = $this->Application->ConfigValue('Email_As_Login');
$object =& $event->getObject();
if (!$this->checkBanRules($object)) {
@@ -1816,6 +1818,50 @@
return !$found;
}
+
+ /**
+ * Makes password required for new users
+ *
+ * @param kEvent $event
+ */
+ function OnPreCreate(&$event)
+ {
+ parent::OnPreCreate($event);
+
+ if ($event->status == erSUCCESS) {
+ $this->_makePasswordRequired($event);
+ }
+ }
+
+ /**
+ * Makes password required for new users
+ *
+ * @param kEvent $event
+ */
+ function OnNew(&$event)
+ {
+ parent::OnNew($event);
+
+ if ($event->status == erSUCCESS) {
+ $this->_makePasswordRequired($event);
+ }
+ }
+
+ /**
+ * Makes password required for new users
+ *
+ * @param kEvent $event
+ */
+ function _makePasswordRequired(&$event)
+ {
+ $object =& $event->getObject();
+ /* @var $object kDBItem */
+
+ $required_fields = Array ('Password', 'Password_plain', 'VerifyPassword', 'VerifyPassword_plain');
+ foreach ($required_fields as $required_field) {
+ $object->setRequired($required_field);
+ }
+ }
}
?>
\ No newline at end of file
Index: core/admin_templates/users/users_edit.tpl
===================================================================
--- core/admin_templates/users/users_edit.tpl (revision 12295)
+++ core/admin_templates/users/users_edit.tpl (revision 12296)
@@ -50,13 +50,6 @@
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
-
- addLoadEvent(
- function() {
- // fixes Firefox 2.0+ bug will password autocomplete
- document.getElementById('<inp2:u_InputName field="Password"/>').value = '';
- }
- );
</script>
</td>
</tr>
Index: core/admin_templates/users/admins_edit.tpl
===================================================================
--- core/admin_templates/users/admins_edit.tpl (revision 12295)
+++ core/admin_templates/users/admins_edit.tpl (revision 12296)
@@ -51,13 +51,6 @@
a_toolbar.DisableButton('prev');
</inp2:m_if>
</inp2:m_if>
-
- addLoadEvent(
- function() {
- // fixes Firefox 2.0+ bug will password autocomplete
- document.getElementById('<inp2:u_InputName field="Password"/>').value = '';
- }
- );
</script>
</td>
</tr>
Index: core/admin_templates/incs/form_blocks.tpl
===================================================================
--- core/admin_templates/incs/form_blocks.tpl (revision 12295)
+++ core/admin_templates/incs/form_blocks.tpl (revision 12296)
@@ -171,8 +171,18 @@
<tr class="<inp2:m_odd_even odd='edit-form-odd' even='edit-form-even'/>">
<inp2:m_RenderElement name="inp_edit_field_caption" prefix="$prefix" field="$field" title="$title"/>
<td class="control-cell">
- <input style="<inp2:m_Param name='style'/>" type="password" name="<inp2:{$prefix}_InputName field='$field'/>" id="<inp2:{$prefix}_InputName field='$field'/>" value="" tabindex="<inp2:m_get param='tab_index'/>" size="<inp2:m_param name='size'/>" class="<inp2:m_param name='class'/>" />
+ <input style="<inp2:m_Param name='style'/>" type="password" name="<inp2:{$prefix}_InputName field='$field'/>" id="<inp2:{$prefix}_InputName field='$field'/>" value="<inp2:{$prefix}_Field name='{$field}_plain'/>" tabindex="<inp2:m_get param='tab_index'/>" size="<inp2:m_param name='size'/>" class="<inp2:m_param name='class'/>" />
<inp2:m_if check="{$prefix}_HasParam" name="hint_label"><span class="small"><inp2:m_phrase label="$hint_label"/></span></inp2:m_if>
+
+ <script type="text/javascript">
+ $(document).ready(
+ function() {
+ <inp2:m_ifnot check="{$prefix}_Field" name="{$field}_plain">
+ $('#' + jq('<inp2:{$prefix}_InputName field="$field"/>')).val('');
+ </inp2:m_ifnot>
+ }
+ );
+ </script>
</td>
<inp2:m_RenderElement name="inp_edit_error" pass_params="1"/>
<inp2:m_if check="{$prefix}_DisplayOriginal" pass_params="1">