21
21
namespace DotNetNuke . Modules . ActiveForums . Controllers
22
22
{
23
23
using System ;
24
+ using System . Collections ;
24
25
using System . Collections . Specialized ;
25
26
using System . Linq ;
26
27
using System . Linq . Expressions ;
28
+ using System . Xml ;
27
29
28
30
using DotNetNuke . Abstractions . Portals ;
29
31
@@ -61,6 +63,104 @@ internal class PermissionController : DotNetNuke.Modules.ActiveForums.Controller
61
63
return this . GetById ( permissionInfo . PermissionsId , permissionInfo . ModuleId ) ;
62
64
}
63
65
66
+ internal void UpdateSecurityForSocialGroupForum ( DotNetNuke . Modules . ActiveForums . Entities . ForumInfo forum )
67
+ {
68
+ var permissions = this . GetById ( forum . PermissionsId , forum . ModuleId ) ;
69
+ Hashtable htSettings = DotNetNuke . Entities . Modules . ModuleController . Instance . GetModule ( moduleId : forum . ModuleId , tabId : forum . TabId , ignoreCache : false ) . TabModuleSettings ;
70
+ if ( htSettings == null || htSettings . Count == 0 )
71
+ {
72
+ htSettings = DotNetNuke . Entities . Modules . ModuleController . Instance . GetModule ( moduleId : forum . ModuleId , tabId : forum . TabId , ignoreCache : false ) . ModuleSettings ;
73
+ }
74
+
75
+ if ( htSettings == null || htSettings . Count == 0 || ! htSettings . ContainsKey ( "ForumConfig" ) )
76
+ {
77
+ var ex = new Exception ( $ "Unable to configure forum security for Social Group: { forum . SocialGroupId } ") ;
78
+ DotNetNuke . Services . Exceptions . Exceptions . LogException ( ex ) ;
79
+ }
80
+ else
81
+ {
82
+ var xDoc = new XmlDocument ( ) ;
83
+ xDoc . LoadXml ( htSettings [ "ForumConfig" ] . ToString ( ) ) ;
84
+ XmlNode xRoot = xDoc . DocumentElement ;
85
+ var roleIdAnon = Convert . ToInt32 ( Common . Globals . glbRoleUnauthUser ) ;
86
+ var roleIdAdmin = GetAdministratorsRoleId ( forum . PortalId ) ;
87
+ var roleIdRegUsers = GetRegisteredRoleId ( forum . PortalId ) ;
88
+ var roleIdGroupMember = forum . SocialGroupId ;
89
+ foreach ( var sectype in new string [ ] { "groupadmin" , "groupmember" , "registereduser" , "anon" } )
90
+ {
91
+ var xNode = xRoot . SelectSingleNode ( "//defaultforums/forum/security[@type='" + sectype + "']" ) ;
92
+ foreach ( XmlNode sNode in xNode . ChildNodes )
93
+ {
94
+ var sPerm = sNode . Name ;
95
+ var roleId = - 1 ;
96
+ switch ( sectype )
97
+ {
98
+ case "groupadmin" :
99
+ roleId = roleIdAdmin ;
100
+ break ;
101
+ case "groupmember" :
102
+ roleId = roleIdGroupMember ;
103
+ break ;
104
+ case "registereduser" :
105
+ roleId = roleIdRegUsers ;
106
+ break ;
107
+ case "anon" :
108
+ roleId = roleIdAnon ;
109
+ break ;
110
+ }
111
+
112
+ if ( Convert . ToBoolean ( sNode . Attributes [ "value" ] . Value ) )
113
+ {
114
+ switch ( sPerm )
115
+ {
116
+ case "view" :
117
+ permissions . View = AddPermToSet ( roleId . ToString ( ) , 0 , permissions . View ) ;
118
+ break ;
119
+ case "read" :
120
+ permissions . Read = AddPermToSet ( roleId . ToString ( ) , 0 , permissions . Read ) ;
121
+ break ;
122
+ case "create" :
123
+ permissions . Create = AddPermToSet ( roleId . ToString ( ) , 0 , permissions . Create ) ;
124
+ break ;
125
+ case "reply" :
126
+ permissions . Reply = AddPermToSet ( roleId . ToString ( ) , 0 , permissions . Reply ) ;
127
+ break ;
128
+ case "edit" :
129
+ permissions . Edit = AddPermToSet ( roleId . ToString ( ) , 0 , permissions . Edit ) ;
130
+ break ;
131
+ case "delete" :
132
+ permissions . Delete = AddPermToSet ( roleId . ToString ( ) , 0 , permissions . Delete ) ;
133
+ break ;
134
+ case "lock" :
135
+ permissions . Lock = AddPermToSet ( roleId . ToString ( ) , 0 , permissions . Lock ) ;
136
+ break ;
137
+ case "pin" :
138
+ permissions . Pin = AddPermToSet ( roleId . ToString ( ) , 0 , permissions . Pin ) ;
139
+ break ;
140
+ case "attach" :
141
+ permissions . Attach = AddPermToSet ( roleId . ToString ( ) , 0 , permissions . Attach ) ;
142
+ break ;
143
+ case "subscribe" :
144
+ permissions . Subscribe = AddPermToSet ( roleId . ToString ( ) , 0 , permissions . Subscribe ) ;
145
+ break ;
146
+ case "moderate" :
147
+ permissions . Moderate = AddPermToSet ( roleId . ToString ( ) , 0 , permissions . Moderate ) ;
148
+ break ;
149
+ case "move" :
150
+ permissions . Move = AddPermToSet ( roleId . ToString ( ) , 0 , permissions . Move ) ;
151
+ break ;
152
+ case "ban" :
153
+ permissions . Ban = AddPermToSet ( roleId . ToString ( ) , 0 , permissions . Ban ) ;
154
+ break ;
155
+ }
156
+ }
157
+ }
158
+ }
159
+
160
+ this . Update ( permissions ) ;
161
+ }
162
+ }
163
+
64
164
internal DotNetNuke . Modules . ActiveForums . Entities . PermissionInfo GetById ( int permissionId , int moduleId )
65
165
{
66
166
var cachekey = this . GetCacheKey ( moduleId : moduleId , id : permissionId ) ;
@@ -69,9 +169,7 @@ internal DotNetNuke.Modules.ActiveForums.Entities.PermissionInfo GetById(int per
69
169
{
70
170
permissions = base . GetById ( permissionId , moduleId ) ;
71
171
DotNetNuke . Modules . ActiveForums . DataCache . SettingsCacheStore ( moduleId , cachekey , permissions ) ;
72
-
73
172
}
74
-
75
173
return permissions ;
76
174
}
77
175
@@ -637,6 +735,7 @@ public static string AddPermToSet(string objectId, int objectType, string permis
637
735
{
638
736
string newSet = RemovePermFromSet ( objectId , objectType , permissionSet ) ;
639
737
string [ ] permSet = newSet . Split ( '|' ) ;
738
+ permSet [ objectType ] += string . Concat ( objectId , ";" ) ;
640
739
newSet = string . Concat ( permSet [ 0 ] + "|" + ( permSet . Length > 1 ? permSet [ 1 ] : string . Empty ) + "|" + ( permSet . Length > 2 ? permSet [ 2 ] : string . Empty ) , "|" ) ;
641
740
return newSet ;
642
741
}
0 commit comments