diff --git a/modules/users/managers/user_manager.cpp b/modules/users/managers/user_manager.cpp index 74ebf3175..252a02755 100644 --- a/modules/users/managers/user_manager.cpp +++ b/modules/users/managers/user_manager.cpp @@ -69,11 +69,12 @@ Ref UserManager::_get_user_email(const String &user_email) { } void UserManager::_save_user(Ref user) { } -Ref UserManager::_create_user() { - Ref u; - u.instance(); +Ref UserManager::_create_user(Ref p_user) { + if (!p_user.is_valid()) { + p_user.instance(); + } - return u; + return p_user; } bool UserManager::_is_username_taken(const String &user_name) { return false; @@ -124,7 +125,7 @@ void UserManager::_bind_methods() { BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::OBJECT, "ret", PROPERTY_HINT_RESOURCE_TYPE, "User"), "_get_user_email", PropertyInfo(Variant::STRING, "user_email"))); BIND_VMETHOD(MethodInfo("_save_user", PropertyInfo(Variant::OBJECT, "user", PROPERTY_HINT_RESOURCE_TYPE, "User"))); - BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::OBJECT, "ret", PROPERTY_HINT_RESOURCE_TYPE, "User"), "_create_user")); + BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::OBJECT, "ret", PROPERTY_HINT_RESOURCE_TYPE, "User"), "_create_user", PropertyInfo(Variant::OBJECT, "user", PROPERTY_HINT_RESOURCE_TYPE, "User"))); BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::BOOL, "ret"), "_is_username_taken", PropertyInfo(Variant::STRING, "user_name"))); BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::BOOL, "ret"), "_is_email_taken", PropertyInfo(Variant::STRING, "email"))); @@ -146,7 +147,7 @@ void UserManager::_bind_methods() { ClassDB::bind_method(D_METHOD("_get_user_email", "user_email"), &UserManager::_get_user_email); ClassDB::bind_method(D_METHOD("_save_user", "user"), &UserManager::_save_user); - ClassDB::bind_method(D_METHOD("_create_user"), &UserManager::_create_user); + ClassDB::bind_method(D_METHOD("_create_user", "user"), &UserManager::_create_user); ClassDB::bind_method(D_METHOD("_is_username_taken", "user_name"), &UserManager::_is_username_taken); ClassDB::bind_method(D_METHOD("_is_email_taken", "email"), &UserManager::_is_email_taken); diff --git a/modules/users/managers/user_manager.h b/modules/users/managers/user_manager.h index bf9902b12..dfa551776 100644 --- a/modules/users/managers/user_manager.h +++ b/modules/users/managers/user_manager.h @@ -61,7 +61,7 @@ public: virtual void _save_user(Ref user); - virtual Ref _create_user(); + virtual Ref _create_user(Ref p_user); virtual bool _is_username_taken(const String &user_name); virtual bool _is_email_taken(const String &email); diff --git a/modules/users/managers/user_manager_db.cpp b/modules/users/managers/user_manager_db.cpp index 19a3f43e6..fc322078b 100644 --- a/modules/users/managers/user_manager_db.cpp +++ b/modules/users/managers/user_manager_db.cpp @@ -246,14 +246,15 @@ void UserManagerDB::_save_user(Ref user) { b->run_query(); } } -Ref UserManagerDB::_create_user() { - Ref u; - u.instance(); +Ref UserManagerDB::_create_user(Ref p_user) { + if (!p_user.is_valid()) { + p_user.instance(); + } //save_user(u); - u->connect("changed", this, "_save_user", varray(u)); + p_user->connect("changed", this, "_save_user", varray(p_user)); - return u; + return p_user; } bool UserManagerDB::_is_username_taken(const String &user_name) { Ref b = get_query_builder(); diff --git a/modules/users/managers/user_manager_db.h b/modules/users/managers/user_manager_db.h index d8629e498..36e8afbfb 100644 --- a/modules/users/managers/user_manager_db.h +++ b/modules/users/managers/user_manager_db.h @@ -65,7 +65,7 @@ public: void _save_user(Ref user); - Ref _create_user(); + Ref _create_user(Ref p_user); bool _is_username_taken(const String &user_name); bool _is_email_taken(const String &email); diff --git a/modules/users/managers/user_manager_file.cpp b/modules/users/managers/user_manager_file.cpp index e6d6a1749..0748823d1 100644 --- a/modules/users/managers/user_manager_file.cpp +++ b/modules/users/managers/user_manager_file.cpp @@ -150,13 +150,15 @@ void UserManagerFile::_save_user(Ref user) { memdelete(f); } -Ref UserManagerFile::_create_user() { - Ref u; - u.instance(); - u->set_user_id(-1); - u->connect("changed", this, "_save_user", varray(u)); +Ref UserManagerFile::_create_user(Ref p_user) { + if (!p_user.is_valid()) { + p_user.instance(); + p_user->set_user_id(-1); + } - return u; + p_user->connect("changed", this, "_save_user", varray(p_user)); + + return p_user; } bool UserManagerFile::_is_username_taken(const String &user_name) { // TODO check only the lowercase version, also strip it, so User and UsEr counts as the same diff --git a/modules/users/managers/user_manager_file.h b/modules/users/managers/user_manager_file.h index b0f488186..621939bda 100644 --- a/modules/users/managers/user_manager_file.h +++ b/modules/users/managers/user_manager_file.h @@ -54,7 +54,7 @@ public: virtual void _save_user(Ref user); - virtual Ref _create_user(); + virtual Ref _create_user(Ref p_user); virtual bool _is_username_taken(const String &user_name); virtual bool _is_email_taken(const String &email); diff --git a/modules/users/managers/user_manager_static.cpp b/modules/users/managers/user_manager_static.cpp index 17272ac8a..8b3632ac5 100644 --- a/modules/users/managers/user_manager_static.cpp +++ b/modules/users/managers/user_manager_static.cpp @@ -68,15 +68,15 @@ Ref UserManagerStatic::_get_user_email(const String &user_email) { void UserManagerStatic::_save_user(Ref user) { //With this class Users are serialized via editor properties, ignore } -Ref UserManagerStatic::_create_user() { - Ref u; - u.instance(); +Ref UserManagerStatic::_create_user(Ref p_user) { + if (!p_user.is_valid()) { + p_user.instance(); + } - u->set_user_id(_users.size()); + p_user->set_user_id(_users.size()); + _users.push_back(p_user); - _users.push_back(u); - - return u; + return p_user; } bool UserManagerStatic::_is_username_taken(const String &user_name) { for (int i = 0; i < _users.size(); ++i) { diff --git a/modules/users/managers/user_manager_static.h b/modules/users/managers/user_manager_static.h index c821d1839..d09ebd513 100644 --- a/modules/users/managers/user_manager_static.h +++ b/modules/users/managers/user_manager_static.h @@ -51,7 +51,7 @@ public: void _save_user(Ref user); - Ref _create_user(); + Ref _create_user(Ref p_user); bool _is_username_taken(const String &user_name); bool _is_email_taken(const String &email);