diff --git a/modules/data/webadmin/tmpl/add_edit_user.tmpl b/modules/data/webadmin/tmpl/add_edit_user.tmpl
index 0c177bdb..762b4e63 100644
--- a/modules/data/webadmin/tmpl/add_edit_user.tmpl
+++ b/modules/data/webadmin/tmpl/add_edit_user.tmpl
@@ -199,14 +199,14 @@
ENDIF ?>
- IF LoadedByAllNetworks ?>
+ IF LoadedBySomeNetworks ?>
- ELSE IF LoadedBySomeNetworks ?>
-
-
+ IF !LoadedByAllNetworks ?>
+
+ ENDIF ?>
ENDIF ?>
|
diff --git a/modules/data/webadmin/tmpl/settings.tmpl b/modules/data/webadmin/tmpl/settings.tmpl
index b1f50c39..dcafecc9 100644
--- a/modules/data/webadmin/tmpl/settings.tmpl
+++ b/modules/data/webadmin/tmpl/settings.tmpl
@@ -189,25 +189,25 @@
VAR Description ?> |
- IF LoadedByAllNetworks ?>
+ IF LoadedBySomeNetworks ?>
- ELSE IF LoadedBySomeNetworks ?>
-
-
+ IF !LoadedByAllNetworks ?>
+
+ ENDIF ?>
ENDIF ?>
|
- IF LoadedByAllUsers ?>
+ IF LoadedBySomeUsers ?>
- ELSE IF LoadedBySomeUsers ?>
-
-
+ IF !LoadedByAllUsers ?>
+
+ ENDIF ?>
ENDIF ?>
|
diff --git a/modules/webadmin.cpp b/modules/webadmin.cpp
index e27a0d35..becf1853 100644
--- a/modules/webadmin.cpp
+++ b/modules/webadmin.cpp
@@ -749,7 +749,7 @@ public:
if (pModule) {
l["Checked"] = "true";
l["Args"] = pModule->GetArgs();
- }
+ }
}
// Check if module is loaded globally
@@ -1215,8 +1215,21 @@ public:
l["ArgsHelpText"] = Info.GetArgsHelpText();
CModule *pModule = NULL;
- if (pUser)
+ if (pUser) {
pModule = pUser->GetModules().FindModule(Info.GetName());
+ // Check if module is loaded by all or some networks
+ const vector& userNetworks = pUser->GetNetworks();
+ unsigned int networksWithRenderedModuleCount = 0;
+ for (unsigned int networkIndex = 0; networkIndex < userNetworks.size(); ++networkIndex) {
+ const CIRCNetwork* pCurrentNetwork = userNetworks[networkIndex];
+ const CModules& networkModules = pCurrentNetwork->GetModules();
+ if (networkModules.FindModule(Info.GetName())) {
+ networksWithRenderedModuleCount++;
+ }
+ }
+ l["LoadedByAllNetworks"] = CString(networksWithRenderedModuleCount == userNetworks.size());
+ l["LoadedBySomeNetworks"] = CString(networksWithRenderedModuleCount != 0);
+ }
if (pModule) {
l["Checked"] = "true";
l["Args"] = pModule->GetArgs();
@@ -1228,23 +1241,6 @@ public:
// Check if module is loaded globally
l["LoadedGlobally"] = CString(CZNC::Get().GetModules().FindModule(Info.GetName()) != NULL);
- // Check if module is loaded by all or some networks
- const vector& userNetworks = pUser->GetNetworks();
- unsigned int networksWithRenderedModuleCount = 0;
- for (unsigned int networkIndex = 0; networkIndex < userNetworks.size(); ++networkIndex) {
- const CIRCNetwork* pCurrentNetwork = userNetworks[networkIndex];
- const CModules& networkModules = pCurrentNetwork->GetModules();
- for (unsigned int networkModuleIndex = 0; networkModuleIndex < networkModules.size(); ++networkModuleIndex) {
- const CModule* pCurModule = networkModules[networkModuleIndex];
- if (Info.GetName() == pCurModule->GetModName()) {
- networksWithRenderedModuleCount++;
- }
- }
- }
- l["LoadedByAllNetworks"] = CString(networksWithRenderedModuleCount == userNetworks.size());
- const bool isLoadedBySomeNetworks = (networksWithRenderedModuleCount != 0) && (networksWithRenderedModuleCount < userNetworks.size());
- l["LoadedBySomeNetworks"] = CString(isLoadedBySomeNetworks);
-
if (!spSession->IsAdmin() && pUser && pUser->DenyLoadMod()) {
l["Disabled"] = "true";
}
@@ -1653,42 +1649,34 @@ public:
l["HasArgs"] = CString(Info.GetHasArgs());
l["ArgsHelpText"] = Info.GetArgsHelpText();
- // Check if the module is loaded by all or some users and collect all available networks for future processing
- vector allNetworks;
+ // Check if the module is loaded by all or some users, and/or by all or some networks
unsigned int usersWithRenderedModuleCount = 0;
- const map& allUsers = CZNC::Get().GetUserMap();
- allNetworks.reserve(allUsers.size()); // Reserve for at least one network per scene
- for (map::const_iterator usersIt = allUsers.begin(); usersIt != allUsers.end(); ++usersIt) {
- const CUser& User = *usersIt->second;
- const vector& userNetworks = User.GetNetworks();
- allNetworks.insert(allNetworks.end(), userNetworks.begin(), userNetworks.end());
- const CModules& userModules = User.GetModules();
- for (unsigned int userModuleIndex = 0; userModuleIndex < userModules.size(); ++userModuleIndex) {
- const CModule* pCurModule = userModules[userModuleIndex];
- if (Info.GetName() == pCurModule->GetModName()) {
- usersWithRenderedModuleCount++;
- }
- }
- }
- l["LoadedByAllUsers"] = CString(usersWithRenderedModuleCount == allUsers.size());
- const bool isLoadedBySomeUsers = (usersWithRenderedModuleCount != 0) && (usersWithRenderedModuleCount < allUsers.size());
- l["LoadedBySomeUsers"] = CString(isLoadedBySomeUsers);
-
- // Check if module is loaded by all or some networks
unsigned int networksWithRenderedModuleCount = 0;
- for (unsigned int networkIndex = 0; networkIndex < allNetworks.size(); ++networkIndex) {
- const CIRCNetwork* pCurrentNetwork = allNetworks[networkIndex];
- const CModules& networkModules = pCurrentNetwork->GetModules();
- for (unsigned int networkModuleIndex = 0; networkModuleIndex < networkModules.size(); ++networkModuleIndex) {
- const CModule* pCurModule = networkModules[networkModuleIndex];
- if (Info.GetName() == pCurModule->GetModName()) {
+ unsigned int networksCount = 0;
+ const map& allUsers = CZNC::Get().GetUserMap();
+ for (map::const_iterator usersIt = allUsers.begin(); usersIt != allUsers.end(); ++usersIt) {
+ const CUser& User = *usersIt->second;
+
+ // Count users which has loaded a render module
+ const CModules& userModules = User.GetModules();
+ if (userModules.FindModule(Info.GetName())) {
+ usersWithRenderedModuleCount++;
+ }
+ // Count networks which has loaded a render module
+ const vector& userNetworks = User.GetNetworks();
+ networksCount += userNetworks.size();
+ for (unsigned int networkIndex = 0; networkIndex < userNetworks.size(); ++networkIndex)
+ {
+ const CIRCNetwork *pCurrentNetwork = userNetworks[networkIndex];
+ if (pCurrentNetwork->GetModules().FindModule(Info.GetName())) {
networksWithRenderedModuleCount++;
}
}
}
- l["LoadedByAllNetworks"] = CString(networksWithRenderedModuleCount == allNetworks.size());
- const bool isLoadedBySomeNetworks = (networksWithRenderedModuleCount != 0) && (networksWithRenderedModuleCount < allNetworks.size());
- l["LoadedBySomeNetworks"] = CString(isLoadedBySomeNetworks);
+ l["LoadedByAllUsers"] = CString(usersWithRenderedModuleCount == allUsers.size());
+ l["LoadedBySomeUsers"] = CString(usersWithRenderedModuleCount != 0);
+ l["LoadedByAllNetworks"] = CString(networksWithRenderedModuleCount == networksCount);
+ l["LoadedBySomeNetworks"] = CString(networksWithRenderedModuleCount != 0);
}
return true;