Index: branches/5.2.x/core/admin_templates/users/user_blocks.tpl =================================================================== diff -u -N --- branches/5.2.x/core/admin_templates/users/user_blocks.tpl (revision 0) +++ branches/5.2.x/core/admin_templates/users/user_blocks.tpl (revision 14468) @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + style="display: none" id="email_password"> + + onchange="update_checkbox(this, document.getElementById(''));"/> + + + + + + + + + + var $field_mask = ''; + var $email_phrase = ''; + + $( get_control($field_mask, 'Password') ).change( + function ($e) { + var $password = $(this).val(); + + if ($password) { + $('label', '#email_password').html( $email_phrase.replace('{password}', $password) ); + $('#email_password').show(); + } + } + ); + + $('#generate_password').click( + function ($e) { + $.get( + '', + function ($password) { + $( get_control($field_mask, 'Password') ).val($password).change(); + $( get_control($field_mask, 'VerifyPassword') ).val($password); + } + ) + } + ); + + $('label', '#email_password').html( $email_phrase.replace('{password}', '') ); + \ No newline at end of file Index: branches/5.2.x/core/install/install_data.sql =================================================================== diff -u -N -r14437 -r14468 --- branches/5.2.x/core/install/install_data.sql (.../install_data.sql) (revision 14437) +++ branches/5.2.x/core/install/install_data.sql (.../install_data.sql) (revision 14468) @@ -167,6 +167,8 @@ INSERT INTO Events (EventId, Event, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'FORM.SUBMISSION.REPLY.TO.USER', NULL, 1, 0, 'Core', 'Admin Reply to User Form Submission', 1, 1, 1); INSERT INTO Events (EventId, Event, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'FORM.SUBMISSION.REPLY.FROM.USER', NULL, 1, 0, 'Core', 'User Replied to It\'s Form Submission', 1, 1, 1); INSERT INTO Events (EventId, Event, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'FORM.SUBMISSION.REPLY.FROM.USER.BOUNCED', NULL, 1, 0, 'Core', 'Form Submission Admin Reply Delivery Failure', 1, 1, 1); +INSERT INTO Events (EventId, Event, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'USER.NEW.PASSWORD', NULL, 1, 0, 'Core', 'Sends new password to an existing user', 0, 1, 0); +INSERT INTO Events (EventId, Event, ReplacementTags, Enabled, FrontEndOnly, Module, Description, Type, AllowChangingSender, AllowChangingRecipient) VALUES(DEFAULT, 'USER.ADD.BYADMIN', NULL, 1, 0, 'Core', 'Sends password to a new user', 0, 1, 0); INSERT INTO IdGenerator VALUES ('100'); Index: branches/5.2.x/core/units/users/users_event_handler.php =================================================================== diff -u -N -r14447 -r14468 --- branches/5.2.x/core/units/users/users_event_handler.php (.../users_event_handler.php) (revision 14447) +++ branches/5.2.x/core/units/users/users_event_handler.php (.../users_event_handler.php) (revision 14468) @@ -1,6 +1,6 @@ Array('self' => true), 'OnUpdatePassword' => Array('self' => true), 'OnSaveSelected' => Array ('self' => 'view'), + 'OnGeneratePassword' => Array ('self' => 'view'), // front 'OnRefreshForm' => Array('self' => true), @@ -297,7 +298,7 @@ */ function OnAfterItemCreate(&$event) { - $this->saveUserImages($event); + $this->afterItemChanged($event); $object =& $event->getObject(); /* @var $object kDBItem */ @@ -1285,7 +1286,7 @@ */ function OnAfterItemUpdate(&$event) { - $this->saveUserImages($event); + $this->afterItemChanged($event); $object =& $event->getObject(); /* @var $object UsersItem */ @@ -1298,6 +1299,27 @@ } /** + * Occurs, after item is changed + * + * @param kEvent $event + */ + function afterItemChanged(&$event) + { + $this->saveUserImages($event); + + $object =& $event->getObject(); + /* @var $object kDBItem */ + + if ( $object->GetDBField('EmailPassword') && $object->GetDBField('Password_plain') ) { + $email_passwords = $this->Application->RecallVar('email_passwords'); + $email_passwords = $email_passwords ? unserialize($email_passwords) : Array (); + + $email_passwords[ $object->GetID() ] = $object->GetDBField('Password_plain'); + $this->Application->StoreVar('email_passwords', serialize($email_passwords)); + } + } + + /** * Stores user's original Status before overwriting with data from temp table * * @param kEvent $event @@ -1324,15 +1346,34 @@ function OnAfterCopyToLive(&$event) { $temp_id = $event->getEventParam('temp_id'); - if ($temp_id == 0) { - // this is new user create, don't send email events - return ; + $email_passwords = $this->Application->RecallVar('email_passwords'); + + if ( $email_passwords ) { + $email_passwords = unserialize($email_passwords); + + if ( isset($email_passwords[$temp_id]) ) { + $object =& $event->getObject(); + /* @var $object kDBItem */ + + $object->SwitchToLive(); + $object->Load( $event->getEventParam('id') ); + $object->SetField('Password', $email_passwords[$temp_id]); + $object->SetField('VerifyPassword', $email_passwords[$temp_id]); + + $this->Application->EmailEventUser($temp_id > 0 ? 'USER.NEW.PASSWORD': 'USER.ADD.BYADMIN', $object->GetID()); + + unset($email_passwords[$temp_id]); + $this->Application->StoreVar('email_passwords', serialize($email_passwords)); + } } - $new_status = $this->getUserStatus($temp_id); - $user_status = $this->Application->GetVar('user_status'); + if ( $temp_id > 0 ) { + // only send status change e-mail on user update + $new_status = $this->getUserStatus($temp_id); + $user_status = $this->Application->GetVar('user_status'); - $this->sendStatusChangeEvent($temp_id, $user_status[$temp_id], $new_status); + $this->sendStatusChangeEvent($temp_id, $user_status[$temp_id], $new_status); + } } /** @@ -1601,22 +1642,28 @@ { parent::OnPreCreate($event); - if ($event->status == kEvent::erSUCCESS) { - $user_type = $this->Application->GetVar('user_type'); + if ($event->status != kEvent::erSUCCESS) { + return ; + } - if ($user_type) { - $object =& $event->getObject(); - /* @var $object kDBItem */ + $object =& $event->getObject(); + /* @var $object kDBItem */ - $object->SetDBField('UserType', $user_type); + $user_type = $this->Application->GetVar('user_type'); - if ( $user_type == UserType::ADMIN ) { - $object->SetDBField('PrimaryGroupId', $this->Application->ConfigValue('User_AdminGroup')); - } + if ($user_type) { + $object->SetDBField('UserType', $user_type); + + if ( $user_type == UserType::ADMIN ) { + $object->SetDBField('PrimaryGroupId', $this->Application->ConfigValue('User_AdminGroup')); } + } - $this->_makePasswordRequired($event); + if ( $this->Application->ConfigValue('User_Password_Auto') ) { + $object->SetDBField('EmailPassword', 1); } + + $this->_makePasswordRequired($event); } /** @@ -1670,4 +1717,18 @@ parent::LoadItem($event); } + + /** + * Generates password + * + * @param kEvent $event + */ + function OnGeneratePassword(&$event) + { + $event->status = kEvent::erSTOP; + + if ( $this->Application->isAdminUser ) { + echo kUtil::generatePassword(); + } + } } Index: branches/5.2.x/core/units/users/users_config.php =================================================================== diff -u -N -r14447 -r14468 --- branches/5.2.x/core/units/users/users_config.php (.../users_config.php) (revision 14447) +++ branches/5.2.x/core/units/users/users_config.php (.../users_config.php) (revision 14468) @@ -1,6 +1,6 @@ Array('type'=>'string','default'=>''), 'PrimaryGroup' => Array('type' => 'string', 'default' => ''), 'RootPassword' => Array('type' => 'string', 'formatter' => 'kPasswordFormatter', 'encryption_method' => 'md5', 'verify_field' => 'VerifyRootPassword', 'skip_empty' => 1, 'default' => md5('') ), - + 'EmailPassword' => Array ('type' => 'string', 'default' => ''), 'FullName' => Array ('type' => 'string', 'default' => ''), ), Index: branches/5.2.x/core/admin_templates/users/admins_edit.tpl =================================================================== diff -u -N -r14437 -r14468 --- branches/5.2.x/core/admin_templates/users/admins_edit.tpl (.../admins_edit.tpl) (revision 14437) +++ branches/5.2.x/core/admin_templates/users/admins_edit.tpl (.../admins_edit.tpl) (revision 14468) @@ -59,6 +59,7 @@ + @@ -67,13 +68,21 @@ - - + +
+ + \ No newline at end of file Index: branches/5.2.x/core/admin_templates/incs/form_blocks.tpl =================================================================== diff -u -N -r14244 -r14468 --- branches/5.2.x/core/admin_templates/incs/form_blocks.tpl (.../form_blocks.tpl) (revision 14244) +++ branches/5.2.x/core/admin_templates/incs/form_blocks.tpl (.../form_blocks.tpl) (revision 14468) @@ -638,7 +638,6 @@ - class="" onchange="update_checkbox(this, document.getElementById(''));" onclick=""> Index: branches/5.2.x/core/admin_templates/users/users_edit.tpl =================================================================== diff -u -N -r14244 -r14468 --- branches/5.2.x/core/admin_templates/users/users_edit.tpl (.../users_edit.tpl) (revision 14244) +++ branches/5.2.x/core/admin_templates/users/users_edit.tpl (.../users_edit.tpl) (revision 14468) @@ -58,14 +58,14 @@ +
- - + @@ -98,4 +98,12 @@
+ + \ No newline at end of file Index: branches/5.2.x/core/install/english.lang =================================================================== diff -u -N -r14437 -r14468 --- branches/5.2.x/core/install/english.lang (.../english.lang) (revision 14437) +++ branches/5.2.x/core/install/english.lang (.../english.lang) (revision 14468) @@ -30,6 +30,7 @@ RWRpdCBCbG9jaw== RWRpdCBDb250ZW50 RWRpdCBEZXNpZ24= + R2VuZXJhdGU= R2V0IFZhbHVl TG9jYXRl TW92ZSBEb3du @@ -428,6 +429,7 @@ RWxhcHNlZCBUaW1l RS1tYWls RS1tYWlsIENvbW11bmljYXRpb24gUm9sZQ== + RS1tYWlsICI8c3Ryb25nPntwYXNzd29yZH08L3N0cm9uZz4iIHBhc3N3b3JkIHRvIHVzZXI= RW1haWxzIGluIFF1ZXVl RW1haWxzIFNlbnQ= RW1haWxzIFRvdGFs @@ -1575,6 +1577,7 @@ U3ViamVjdDogTmV3IGZvcm0gc3VibWlzc2lvbgoKPHA+Rm9ybSBoYXMgYmVlbiBzdWJtaXR0ZWQuIFBsZWFzZSBwcm9jZWVkIHRvIHRoZSBBZG1pbiBDb25zb2xlIHRvIHJldmlldyB0aGUgc3VibWlzc2lvbiE8L3A+ U3ViamVjdDogSW4tcG9ydGFsIHJlZ2lzdHJhdGlvbgoKRGVhciA8aW5wMjp1X0ZpZWxkIG5hbWU9IkZpcnN0TmFtZSIgLz4gPGlucDI6dV9GaWVsZCBuYW1lPSJMYXN0TmFtZSIgLz4sDQoNClRoYW5rIHlvdSBmb3IgcmVnaXN0ZXJpbmcgb24gPGlucDI6bV9CYXNlVXJsLz4uIFlvdXIgcmVnaXN0cmF0aW9uIGlzIG5vdyBhY3RpdmUu U3ViamVjdDogTmV3IFVzZXIgUmVnaXN0cmF0aW9uICg8aW5wMjp1X0ZpZWxkIG5hbWU9IkxvZ2luIi8+KQoKQSBuZXcgdXNlciAiPGlucDI6dV9GaWVsZCBuYW1lPSJMb2dpbiIvPiIgaGFzIGJlZW4gYWRkZWQu + U3ViamVjdDogTmV3IHVzZXIgaGFzIGJlZW4gY3JlYXRlZAoKRGVhciA8aW5wMjp1X0ZpZWxkIG5hbWU9IkZpcnN0TmFtZSIvPiwNCg0KQSBuZXcgdXNlciBoYXMgYmVlbiBjcmVhdGVkIGFuZCBhc3NpZ25lZCB0byB5b3UNCg0KTm93IHlvdSBjYW4gbG9naW4gdXNpbmcgdGhlIGZvbGxvd2luZyBjcmVkZW50aWFsczoNCg0KPGlucDI6bV9pZiBjaGVjaz0idV9GaWVsZCIgbmFtZT0iTG9naW4iPlVzZXJuYW1lOiA8aW5wMjp1X0ZpZWxkIG5hbWU9IkxvZ2luIi8+PGlucDI6bV9lbHNlLz5FLW1haWw6IDxpbnAyOnVfRmllbGQgbmFtZT0iRW1haWwiLz48L2lucDI6bV9pZj4gDQpQYXNzd29yZDogPGlucDI6dV9GaWVsZCBuYW1lPSJQYXNzd29yZF9wbGFpbiIvPiANCg== U3ViamVjdDogTmV3IFVzZXIgUmVnaXN0cmF0aW9uICg8aW5wMjptX2lmIGNoZWNrPSJtX0dldENvbmZpZyIgbmFtZT0iVXNlcl9BbGxvd19OZXciIGVxdWFsc190bz0iNCI+IC0gQWN0aXZhdGlvbiBFbWFpbDwvaW5wMjptX2lmPikKCkRlYXIgPGlucDI6dV9GaWVsZCBuYW1lPSJGaXJzdE5hbWUiIC8+IDxpbnAyOnVfRmllbGQgbmFtZT0iTGFzdE5hbWUiIC8+LDxici8+PGJyLz4NCg0KPGlucDI6bV9pZiBjaGVjaz0ibV9HZXRDb25maWciIG5hbWU9IlVzZXJfQWxsb3dfTmV3IiBlcXVhbHNfdG89IjQiPg0KVGhhbmsgeW91IGZvciByZWdpc3RlcmluZyBvbiA8aW5wMjptX0xpbmsgdGVtcGxhdGU9ImluZGV4Ii8+IHdlYnNpdGUuIFRvIGFjdGl2YXRlIHlvdXIgcmVnaXN0cmF0aW9uIHBsZWFzZSBmb2xsb3cgbGluayBiZWxvdy4NCjxpbnAyOnVfQWN0aXZhdGlvbkxpbmsgdGVtcGxhdGU9InBsYXRmb3JtL2xvZ2luL2FjdGl2YXRlX2NvbmZpcm0iLz4NCjxpbnAyOm1fZWxzZS8+DQpUaGFuayB5b3UgZm9yIHJlZ2lzdGVyaW5nIG9uIDxpbnAyOm1fTGluayB0ZW1wbGF0ZT0iaW5kZXgiLz4gd2Vic2l0ZS4gWW91ciByZWdpc3RyYXRpb24gd2lsbCBiZSBhY3RpdmUgYWZ0ZXIgYXBwcm92YWwuDQo8L2lucDI6bV9pZj4= U3ViamVjdDogTmV3IFVzZXIgUmVnaXN0ZXJlZAoKQSBuZXcgdXNlciAiPGlucDI6dV9GaWVsZCBuYW1lPSJMb2dpbiIvPiIgaGFzIHJlZ2lzdGVyZWQgYW5kIGlzIHBlbmRpbmcgYWRtaW5pc3RyYXRpdmUgYXBwcm92YWwu U3ViamVjdDogWW91ciBBY2NvdW50IGlzIEFjdGl2ZQoKV2VsY29tZSB0byA8aW5wMjptX0Jhc2VVcmwvPiENCg0KWW91ciB1c2VyIHJlZ2lzdHJhdGlvbiBoYXMgYmVlbiBhcHByb3ZlZC4gWW91ciB1c2VyIG5hbWUgaXM6ICI8aW5wMjp1X0ZpZWxkIG5hbWU9IkxvZ2luIi8+Ii4= @@ -1585,6 +1588,7 @@ U3ViamVjdDogTWVtYmVyc2hpcCBFeHBpcmF0aW9uIE5vdGljZSBmb3IgIjxpbnAyOnVfRmllbGQgbmFtZT0iTG9naW4iLz4iIFNlbnQKClVzZXIgPGlucDI6dV9GaWVsZCBuYW1lPSJMb2dpbiIvPiBtZW1iZXJzaGlwIHdpbGwgZXhwaXJlIHNvb24u U3ViamVjdDogWW91ciBNZW1iZXJzaGlwIEV4cGlyZWQKCllvdXIgbWVtYmVyc2hpcCBvbiA8aW5wMjptX0Jhc2VVcmwvPiB3ZWJzaXRlIGhhcyBleHBpcmVkLg== U3ViamVjdDogVXNlcidzIE1lbWJlcnNoaXAgRXhwaXJlZCAgKCA8aW5wMjp1X0ZpZWxkIG5hbWU9IkxvZ2luIi8+KQoKVXNlcidzICg8aW5wMjp1X0ZpZWxkIG5hbWU9IkxvZ2luIi8+KSBtZW1iZXJzaGlwIG9uIDxpbnAyOm1fQmFzZVVybC8+IHdlYnNpdGUgaGFzIGV4cGlyZWQu + U3ViamVjdDogTmV3IHBhc3N3b3JkIGdlbmVyYXRlZAoKRGVhciA8aW5wMjp1X0ZpZWxkIG5hbWU9IkZpcnN0TmFtZSIvPiwNCg0KQSBuZXcgcGFzc3dvcmQgaGFzIGJlZW4gZ2VuZXJhdGVkIGZvciB5b3VyIHVzZXIuDQoNCk5vdyB5b3UgY2FuIGxvZ2luIHVzaW5nIHRoZSBmb2xsb3dpbmcgY3JlZGVudGlhbHM6DQoNCjxpbnAyOm1faWYgY2hlY2s9InVfRmllbGQiIG5hbWU9IkxvZ2luIj5Vc2VybmFtZTogPGlucDI6dV9GaWVsZCBuYW1lPSJMb2dpbiIvPjxpbnAyOm1fZWxzZS8+RS1tYWlsOiA8aW5wMjp1X0ZpZWxkIG5hbWU9IkVtYWlsIi8+PC9pbnAyOm1faWY+IA0KUGFzc3dvcmQ6IDxpbnAyOnVfRmllbGQgbmFtZT0iUGFzc3dvcmRfcGxhaW4iLz4g U3ViamVjdDogUGFzc3dvcmQgUmVjb3ZlcnkKCllvdXIgbG9zdCBwYXNzd29yZCBoYXMgYmVlbiByZXNldC4gPGJyLz48YnIvPg0KWW91ciBuZXcgcGFzc3dvcmQgaXM6ICI8aW5wMjp1X0ZvcmdvdHRlblBhc3N3b3JkIC8+Ii4= U3ViamVjdDogUGFzc3dvcmQgUmVjb3ZlcnkgZm9yICI8aW5wMjp1X0ZpZWxkIG5hbWU9IkxvZ2luIiAvPiIKCkxvc3QgcGFzc3dvcmQgaGFzIGJlZW4gcmVzZXQgZm9yICI8aW5wMjp1X0ZpZWxkIG5hbWU9IkxvZ2luIiAvPiIgdXNlci4gPGJyLz48YnIvPg0KTmV3IHBhc3N3b3JkIGlzOiAiPGlucDI6dV9Gb3Jnb3R0ZW5QYXNzd29yZCAvPiIu U3ViamVjdDogUmVzZXQgUGFzc3dvcmQgQ29uZmlybWF0aW9uCgpIZWxsbyw8YnIvPjxici8+DQoNCkl0IHNlZW1zIHRoYXQgeW91IGhhdmUgcmVxdWVzdGVkIGEgcGFzc3dvcmQgcmVzZXQgZm9yIHlvdXIgSW4tcG9ydGFsIGFjY291bnQuIElmIHlvdSB3b3VsZCBsaWtlIHRvIHByb2NlZWQgYW5kIGNoYW5nZSB0aGUgcGFzc3dvcmQsIHBsZWFzZSBjbGljayBvbiB0aGUgbGluayBiZWxvdzo8YnIvPjxici8+DQoNCjxhIGhyZWY9IjxpbnAyOnVfQ29uZmlybVBhc3N3b3JkTGluayBub19hbXA9IjEiLz4iPjxpbnAyOnVfQ29uZmlybVBhc3N3b3JkTGluayBub19hbXA9IjEiLz48L2E+PGJyLz48YnIvPg0KDQpZb3Ugd2lsbCByZWNlaXZlIGEgc2Vjb25kIGVtYWlsIHdpdGggeW91ciBuZXcgcGFzc3dvcmQgc2hvcnRseS48YnIvPjxici8+DQoNCklmIHlvdSBiZWxpZXZlIHlvdSBoYXZlIHJlY2VpdmVkIHRoaXMgZW1haWwgaW4gZXJyb3IsIHBsZWFzZSBpZ25vcmUgdGhpcyBlbWFpbC4gWW91ciBwYXNzd29yZCB3aWxsIG5vdCBiZSBjaGFuZ2VkIHVubGVzcyB5b3UgaGF2ZSBjbGlja2VkIG9uIHRoZSBhYm92ZSBsaW5rLg0K