| 61 | } |
| 62 | |
| 63 | void UserDbObject::OnConfigUpdateHeavy() |
| 64 | { |
| 65 | User::Ptr user = static_pointer_cast<User>(GetObject()); |
| 66 | |
| 67 | /* groups */ |
| 68 | Array::Ptr groups = user->GetGroups(); |
| 69 | |
| 70 | std::vector<DbQuery> queries; |
| 71 | |
| 72 | DbQuery query1; |
| 73 | query1.Table = DbType::GetByName("UserGroup")->GetTable() + "_members"; |
| 74 | query1.Type = DbQueryDelete; |
| 75 | query1.Category = DbCatConfig; |
| 76 | query1.WhereCriteria = new Dictionary({ |
| 77 | { "contact_object_id", user } |
| 78 | }); |
| 79 | queries.emplace_back(std::move(query1)); |
| 80 | |
| 81 | if (groups) { |
| 82 | ObjectLock olock(groups); |
| 83 | for (String groupName : groups) { |
| 84 | UserGroup::Ptr group = UserGroup::GetByName(groupName); |
| 85 | |
| 86 | DbQuery query2; |
| 87 | query2.Table = DbType::GetByName("UserGroup")->GetTable() + "_members"; |
| 88 | query2.Type = DbQueryInsert | DbQueryUpdate; |
| 89 | query2.Category = DbCatConfig; |
| 90 | query2.Fields = new Dictionary({ |
| 91 | { "instance_id", 0 }, /* DbConnection class fills in real ID */ |
| 92 | { "contactgroup_id", DbValue::FromObjectInsertID(group) }, |
| 93 | { "contact_object_id", user } |
| 94 | }); |
| 95 | query2.WhereCriteria = new Dictionary({ |
| 96 | { "instance_id", 0 }, /* DbConnection class fills in real ID */ |
| 97 | { "contactgroup_id", DbValue::FromObjectInsertID(group) }, |
| 98 | { "contact_object_id", user } |
| 99 | }); |
| 100 | queries.emplace_back(std::move(query2)); |
| 101 | } |
| 102 | } |
| 103 | |
| 104 | DbObject::OnMultipleQueries(queries); |
| 105 | |
| 106 | queries.clear(); |
| 107 | |
| 108 | DbQuery query2; |
| 109 | query2.Table = "contact_addresses"; |
| 110 | query2.Type = DbQueryDelete; |
| 111 | query2.Category = DbCatConfig; |
| 112 | query2.WhereCriteria = new Dictionary({ |
| 113 | { "contact_id", DbValue::FromObjectInsertID(user) } |
| 114 | }); |
| 115 | queries.emplace_back(std::move(query2)); |
| 116 | |
| 117 | Dictionary::Ptr vars = user->GetVars(); |
| 118 | |
| 119 | if (vars) { /* This is sparta. */ |
| 120 | for (int i = 1; i <= 6; i++) { |