Skip to content
This repository was archived by the owner on Feb 12, 2018. It is now read-only.

Commit 82b5472

Browse files
committed
Added support for role membership approval.
...and also changed display of user grid from userinfo to useroleinfo once not in the registered role
1 parent 6a31b71 commit 82b5472

File tree

6 files changed

+239
-14
lines changed

6 files changed

+239
-14
lines changed

.gitattributes

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
###############################################################################
2+
# Set default behavior to automatically normalize line endings.
3+
###############################################################################
4+
* text=auto
5+
6+
###############################################################################
7+
# Set default behavior for command prompt diff.
8+
#
9+
# This is need for earlier builds of msysgit that does not have it on by
10+
# default for csharp files.
11+
# Note: This is only used by command line
12+
###############################################################################
13+
#*.cs diff=csharp
14+
15+
###############################################################################
16+
# Set the merge driver for project and solution files
17+
#
18+
# Merging from the command prompt will add diff markers to the files if there
19+
# are conflicts (Merging from VS is not affected by the settings below, in VS
20+
# the diff markers are never inserted). Diff markers may cause the following
21+
# file extensions to fail to load in VS. An alternative would be to treat
22+
# these files as binary and thus will always conflict and require user
23+
# intervention with every merge. To do so, just uncomment the entries below
24+
###############################################################################
25+
#*.sln merge=binary
26+
#*.csproj merge=binary
27+
#*.vbproj merge=binary
28+
#*.vcxproj merge=binary
29+
#*.vcproj merge=binary
30+
#*.dbproj merge=binary
31+
#*.fsproj merge=binary
32+
#*.lsproj merge=binary
33+
#*.wixproj merge=binary
34+
#*.modelproj merge=binary
35+
#*.sqlproj merge=binary
36+
#*.wwaproj merge=binary
37+
38+
###############################################################################
39+
# behavior for image files
40+
#
41+
# image files are treated as binary by default.
42+
###############################################################################
43+
#*.jpg binary
44+
#*.png binary
45+
#*.gif binary
46+
47+
###############################################################################
48+
# diff behavior for common document formats
49+
#
50+
# Convert binary document formats to text before diffing them. This feature
51+
# is only available from the command line. Turn it on by uncommenting the
52+
# entries below.
53+
###############################################################################
54+
#*.doc diff=astextplain
55+
#*.DOC diff=astextplain
56+
#*.docx diff=astextplain
57+
#*.DOCX diff=astextplain
58+
#*.dot diff=astextplain
59+
#*.DOT diff=astextplain
60+
#*.pdf diff=astextplain
61+
#*.PDF diff=astextplain
62+
#*.rtf diff=astextplain
63+
#*.RTF diff=astextplain

AssemblyInfo.vb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices
3131
' by using the '*' as shown below:
3232
' <Assembly: AssemblyVersion("1.0.*")>
3333

34-
<Assembly: AssemblyVersion("01.01.00")>
35-
<Assembly: AssemblyFileVersion("01.01.00")>
34+
<Assembly: AssemblyVersion("01.02.00")>
35+
<Assembly: AssemblyFileVersion("01.02.00")>

Connect_AccountManagement.vbproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@
161161
<Content Include="Reports.ascx" />
162162
<Content Include="Templates.ascx" />
163163
<Content Include="Connect_AccountManagement.dnn" />
164+
<Content Include="Providers\DataProviders\SqlDataProvider\01.02.00.SqlDataProvider" />
164165
<None Include="Providers\DataProviders\SqlDataProvider\01.00.00.SqlDataProvider" />
165166
<None Include="Providers\DataProviders\SqlDataProvider\Uninstall.SqlDataProvider" />
166167
</ItemGroup>
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
-- no longer needed
2+
3+
if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Connect_Accounts_GetUsers]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
4+
drop procedure {databaseOwner}[{objectQualifier}Connect_Accounts_GetUsers]
5+
GO
6+
7+
if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Connect_Accounts_GetRoleMembers]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
8+
drop procedure {databaseOwner}[{objectQualifier}Connect_Accounts_GetRoleMembers]
9+
GO
10+
11+
CREATE PROCEDURE {databaseOwner}[{objectQualifier}Connect_Accounts_GetUsers]
12+
@RoleId int,
13+
@PortalId int,
14+
@SearchText nvarchar(256),
15+
@SearchCols nvarchar(256),
16+
@ShowDeleted bit
17+
as
18+
19+
SELECT DISTINCT
20+
U.[UserID],
21+
U.[Username],
22+
U.[FirstName],
23+
U.[LastName],
24+
U.[DisplayName],
25+
UP.[CreatedDate],
26+
U.[Email],
27+
UP.[PortalId],
28+
(Select Top 1 [PropertyValue] From {databaseOwner}[{objectQualifier}UserProfile] Inner Join {databaseOwner}[{objectQualifier}ProfilePropertyDefinition] On {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyDefinitionID] = {databaseOwner}[{objectQualifier}UserProfile].[PropertyDefinitionID] Where {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyName] = 'PostalCode' and {databaseOwner}[{objectQualifier}UserProfile].[UserID] = U.[UserID]) as [PostalCode],
29+
(Select Top 1 [PropertyValue] From {databaseOwner}[{objectQualifier}UserProfile] Inner Join {databaseOwner}[{objectQualifier}ProfilePropertyDefinition] On {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyDefinitionID] = {databaseOwner}[{objectQualifier}UserProfile].[PropertyDefinitionID] Where {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyName] = 'City' and {databaseOwner}[{objectQualifier}UserProfile].[UserID] = U.[UserID]) as [City],
30+
(Select Top 1 [PropertyValue] From {databaseOwner}[{objectQualifier}UserProfile] Inner Join {databaseOwner}[{objectQualifier}ProfilePropertyDefinition] On {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyDefinitionID] = {databaseOwner}[{objectQualifier}UserProfile].[PropertyDefinitionID] Where {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyName] = 'Country' and {databaseOwner}[{objectQualifier}UserProfile].[UserID] = U.[UserID]) as [Country],
31+
(Select Top 1 [PropertyValue] From {databaseOwner}[{objectQualifier}UserProfile] Inner Join {databaseOwner}[{objectQualifier}ProfilePropertyDefinition] On {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyDefinitionID] = {databaseOwner}[{objectQualifier}UserProfile].[PropertyDefinitionID] Where {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyName] = 'Telephone' and {databaseOwner}[{objectQualifier}UserProfile].[UserID] = U.[UserID]) as [Telephone],
32+
(Select Top 1 [PropertyValue] From {databaseOwner}[{objectQualifier}UserProfile] Inner Join {databaseOwner}[{objectQualifier}ProfilePropertyDefinition] On {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyDefinitionID] = {databaseOwner}[{objectQualifier}UserProfile].[PropertyDefinitionID] Where {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyName] = 'Cell' and {databaseOwner}[{objectQualifier}UserProfile].[UserID] = U.[UserID]) as [Cell],
33+
(Select Top 1 [PropertyValue] From {databaseOwner}[{objectQualifier}UserProfile] Inner Join {databaseOwner}[{objectQualifier}ProfilePropertyDefinition] On {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyDefinitionID] = {databaseOwner}[{objectQualifier}UserProfile].[PropertyDefinitionID] Where {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyName] = 'PreferredLocale' and {databaseOwner}[{objectQualifier}UserProfile].[UserID] = U.[UserID]) as [PreferredLocale]
34+
FROM
35+
{databaseOwner}[{objectQualifier}Users] U
36+
INNER JOIN {databaseOwner}[{objectQualifier}UserPortals] UP on UP.[UserId] = U.[UserID]
37+
INNER JOIN {databaseOwner}[{objectQualifier}UserProfile] P on p.[UserID] = U.[UserID]
38+
INNER JOIN {databaseOwner}[{objectQualifier}ProfilePropertyDefinition] PD on PD.[PropertyDefinitionID] = p.[PropertyDefinitionID]
39+
WHERE
40+
UP.[PortalId] = @PortalId
41+
AND
42+
((UP.[IsDeleted] = 0 and @ShowDeleted = 0) or (UP.[IsDeleted] = 1 and @ShowDeleted = 1))
43+
AND
44+
(
45+
(
46+
(P.[PropertyValue] Like '%' + @SearchText + '%' And (PatIndex('%' + Pd.[PropertyName] + ',%' , @SearchCols) > 0))
47+
or
48+
(
49+
(U.[FirstName] Like '%' + @SearchText + '%' and PATINDEX('%FirstName%', @SearchCols) > 0)
50+
OR
51+
(U.[LastName] Like '%' + @SearchText + '%' and PATINDEX('%LastName%', @SearchCols) > 0)
52+
OR
53+
(U.[DisplayName] Like '%' + @SearchText + '%' and PATINDEX('%DisplayName%', @SearchCols) > 0)
54+
OR
55+
(U.[Email] Like '%' + @SearchText + '%' and PATINDEX('%Email%', @SearchCols) > 0)
56+
OR
57+
(U.[Username] Like '%' + @SearchText + '%' and PATINDEX('%Username%', @SearchCols) > 0)
58+
)
59+
)
60+
or @SearchText is Null
61+
)
62+
AND
63+
(
64+
(U.[UserID] in(Select [UserId] from {databaseOwner}[{objectQualifier}UserRoles] where [RoleID] = @RoleId))
65+
or
66+
(@ShowDeleted = 1)
67+
)
68+
Order By
69+
UP.[CreatedDate] desc
70+
GO
71+
72+
CREATE PROCEDURE {databaseOwner}[{objectQualifier}Connect_Accounts_GetRoleMembers]
73+
@RoleId int,
74+
@PortalId int
75+
as
76+
77+
SELECT DISTINCT
78+
U.[UserID],
79+
U.[Username],
80+
U.[FirstName],
81+
U.[LastName],
82+
U.[DisplayName],
83+
UP.[CreatedDate],
84+
U.[Email],
85+
UP.[PortalId],
86+
(Select Top 1 [PropertyValue] From {databaseOwner}[{objectQualifier}UserProfile] Inner Join {databaseOwner}[{objectQualifier}ProfilePropertyDefinition] On {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyDefinitionID] = {databaseOwner}[{objectQualifier}UserProfile].[PropertyDefinitionID] Where {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyName] = 'PostalCode' and {databaseOwner}[{objectQualifier}UserProfile].[UserID] = U.[UserID]) as [PostalCode],
87+
(Select Top 1 [PropertyValue] From {databaseOwner}[{objectQualifier}UserProfile] Inner Join {databaseOwner}[{objectQualifier}ProfilePropertyDefinition] On {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyDefinitionID] = {databaseOwner}[{objectQualifier}UserProfile].[PropertyDefinitionID] Where {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyName] = 'City' and {databaseOwner}[{objectQualifier}UserProfile].[UserID] = U.[UserID]) as [City],
88+
(Select Top 1 [PropertyValue] From {databaseOwner}[{objectQualifier}UserProfile] Inner Join {databaseOwner}[{objectQualifier}ProfilePropertyDefinition] On {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyDefinitionID] = {databaseOwner}[{objectQualifier}UserProfile].[PropertyDefinitionID] Where {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyName] = 'Country' and {databaseOwner}[{objectQualifier}UserProfile].[UserID] = U.[UserID]) as [Country],
89+
(Select Top 1 [PropertyValue] From {databaseOwner}[{objectQualifier}UserProfile] Inner Join {databaseOwner}[{objectQualifier}ProfilePropertyDefinition] On {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyDefinitionID] = {databaseOwner}[{objectQualifier}UserProfile].[PropertyDefinitionID] Where {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyName] = 'Telephone' and {databaseOwner}[{objectQualifier}UserProfile].[UserID] = U.[UserID]) as [Telephone],
90+
(Select Top 1 [PropertyValue] From {databaseOwner}[{objectQualifier}UserProfile] Inner Join {databaseOwner}[{objectQualifier}ProfilePropertyDefinition] On {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyDefinitionID] = {databaseOwner}[{objectQualifier}UserProfile].[PropertyDefinitionID] Where {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyName] = 'Cell' and {databaseOwner}[{objectQualifier}UserProfile].[UserID] = U.[UserID]) as [Cell],
91+
(Select Top 1 [PropertyValue] From {databaseOwner}[{objectQualifier}UserProfile] Inner Join {databaseOwner}[{objectQualifier}ProfilePropertyDefinition] On {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyDefinitionID] = {databaseOwner}[{objectQualifier}UserProfile].[PropertyDefinitionID] Where {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyName] = 'PreferredLocale' and {databaseOwner}[{objectQualifier}UserProfile].[UserID] = U.[UserID]) as [PreferredLocale],
92+
UR.[Status],
93+
UR.[CreatedOnDate]
94+
FROM
95+
{databaseOwner}[{objectQualifier}Users] U
96+
INNER JOIN {databaseOwner}[{objectQualifier}UserPortals] UP on UP.[UserId] = U.[UserID]
97+
INNER JOIN {databaseOwner}[{objectQualifier}UserProfile] P on p.[UserID] = U.[UserID]
98+
INNER JOIN {databaseOwner}[{objectQualifier}ProfilePropertyDefinition] PD on PD.[PropertyDefinitionID] = p.[PropertyDefinitionID]
99+
INNER JOIN {databaseOwner}[{objectQualifier}UserRoles] UR on UR.[UserId] = U.[UserId]
100+
WHERE
101+
UP.[PortalId] = @PortalId
102+
AND
103+
UP.[IsDeleted] = 0
104+
AND
105+
(U.[UserID] in(Select [UserId] from {databaseOwner}[{objectQualifier}UserRoles] where [RoleID] = @RoleId))
106+
Order By
107+
UR.[CreatedOnDate] desc
108+
GO

View.ascx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262

6363
<div id="dvGrid">
6464

65-
<dnn:dnngrid id="grdUsers" runat="server">
65+
<dnn:dnngrid id="grdUsers" runat="server" ScreenRowNumber="2000">
6666
<MasterTableView AutoGenerateColumns="false" DataKeyNames="UserId" AllowSorting="true">
6767
<Columns>
6868
<dnn:dnnGridBoundColumn DataField="UserId" HeaderText="UserID" Visible="false"></dnn:dnnGridBoundColumn>
@@ -324,6 +324,12 @@
324324
<dnn:dnnGridBoundColumn HeaderText="RoleName" DataField="RoleName" UniqueName="col_RoleName"></dnn:dnnGridBoundColumn>
325325
<dnn:dnnGridBoundColumn HeaderText="EffectiveDate" DataField="EffectiveDate" UniqueName="col_EffectiveDate"></dnn:dnnGridBoundColumn>
326326
<dnn:dnnGridBoundColumn HeaderText="ExpiryDate" DataField="ExpiryDate" UniqueName="col_ExpiryDate"></dnn:dnnGridBoundColumn>
327+
<dnn:dnnGridTemplateColumn UniqueName="statusCol">
328+
<ItemTemplate>
329+
<asp:Literal id="lblStatus" runat="server" Text='<%# Databinder.Eval(Container.DataItem, "Status") %>'></asp:Literal>
330+
<asp:ImageButton ID="btnApproveUserRole" runat="server" OnClick="btnApproveUserRole_Click" CommandArgument='<%# Databinder.Eval(Container.DataItem, "RoleId") %>' />
331+
</ItemTemplate>
332+
</dnn:dnnGridTemplateColumn>
327333
<dnn:dnnGridTemplateColumn UniqueName="removeCol">
328334
<ItemTemplate>
329335
<asp:ImageButton ID="btnDeleteUserRole" runat="server" OnClick="btnDeleteUserRole_Click" CommandArgument='<%# Databinder.Eval(Container.DataItem, "RoleId") %>' />

View.ascx.vb

Lines changed: 58 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ Namespace Connect.Modules.UserManagement.AccountManagement
4242

4343
If Not Page.IsPostBack Then
4444

45+
'make sure txtSearch is empty on non-postback requests
46+
txtSearch.Text = ""
47+
4548
BindRoles()
4649
BindSearchColOptions()
4750
PersonalizeOptions()
@@ -294,6 +297,19 @@ Namespace Connect.Modules.UserManagement.AccountManagement
294297
dataBoundItem("col_EffectiveDate").Text = effectiveDate.ToShortDateString
295298
End If
296299

300+
Dim btnApprove As ImageButton = CType(dataBoundItem("statusCol").FindControl("btnApproveUserRole"), ImageButton)
301+
btnApprove.ImageUrl = ResolveUrl("~/images/grant.gif")
302+
Dim currentRoleId As Integer = CType(btnApprove.CommandArgument, Integer)
303+
Dim roleController As New RoleController
304+
Dim userRoles As IList = roleController.GetUserRoles(PortalId, User.Username, "")
305+
For Each userRole As UserRoleInfo In userRoles
306+
If userRole.RoleID = currentRoleId Then
307+
If userRole.Status = RoleStatus.Approved Then
308+
btnApprove.Visible = False
309+
End If
310+
End If
311+
Next
312+
297313
Dim btn As ImageButton = CType(dataBoundItem("removeCol").FindControl("btnDeleteUserRole"), ImageButton)
298314
btn.ImageUrl = ResolveUrl("~/images/delete.gif")
299315

@@ -368,6 +384,27 @@ Namespace Connect.Modules.UserManagement.AccountManagement
368384

369385
End Sub
370386

387+
Protected Sub btnApproveUserRole_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs)
388+
389+
Dim roleId As Integer = Convert.ToInt32(CType(sender, ImageButton).CommandArgument)
390+
Dim roleController As New RoleController
391+
Dim role As RoleInfo = roleController.GetRole(roleId, PortalId)
392+
393+
roleController.UpdateUserRole(PortalId, User.UserID, roleId, RoleStatus.Approved, False, False)
394+
395+
DataCache.RemoveCache("DNNWERK_USERLIST_ROLEID" & roleId.ToString)
396+
397+
Dim strRole As String = roleController.GetRole(roleId, PortalId).RoleName
398+
lblRolesNote.Text = Localization.GetString("lblNotificationNote_Roles", LocalResourceFile)
399+
BindRoleAddNotification(role.RoleName, Date.Now, Null.NullDate)
400+
401+
pnlRoleChange_Step1.Visible = False
402+
pnlRoleChange_Step2.Visible = True
403+
btnNotifyRole.CommandArgument = "add"
404+
btnNotifyRoleSkip.CommandArgument = "add"
405+
406+
End Sub
407+
371408
Private Sub btnNotifyRoleSkip_Click(sender As Object, e As EventArgs) Handles btnNotifyRoleSkip.Click
372409

373410
lblRolesNote.Text = Localization.GetString("lblRolesChanged", LocalResourceFile)
@@ -528,7 +565,7 @@ Namespace Connect.Modules.UserManagement.AccountManagement
528565

529566
If txtSearch.Text.Length > 0 Then
530567

531-
Session("Connect_UserSearchTerm") = txtSearch.Text
568+
'Session("Connect_UserSearchTerm") = txtSearch.Text
532569

533570
SaveSearchOptions()
534571
pnlGrid.Visible = True
@@ -2063,9 +2100,9 @@ Namespace Connect.Modules.UserManagement.AccountManagement
20632100

20642101
Else
20652102

2066-
If Not Session("Connect_UserSearchTerm") Is Nothing Then
2067-
txtSearch.Text = CType(Session("Connect_UserSearchTerm"), String)
2068-
End If
2103+
'If Not Session("Connect_UserSearchTerm") Is Nothing Then
2104+
' txtSearch.Text = CType(Session("Connect_UserSearchTerm"), String)
2105+
'End If
20692106

20702107
If txtSearch.Text.Length = 0 Then
20712108
grdUsers.MasterTableView.NoMasterRecordsText = "<p style='padding:10px;'>" & Localization.GetString("NoUsersFoundInRole", LocalResourceFile) & "</p>"
@@ -2134,14 +2171,24 @@ Namespace Connect.Modules.UserManagement.AccountManagement
21342171

21352172
ds = New DataSet
21362173

2137-
Dim strCols As String = ""
2138-
For Each item As ListItem In chkSearchCols.Items
2139-
If item.Selected = True Then
2140-
strCols += item.Value & ","
2141-
End If
2142-
Next
21432174

2144-
dr = DotNetNuke.Data.DataProvider.Instance().ExecuteReader("Connect_GetUserList", intRole, PortalId, DotNetNuke.Data.DataProvider.Instance().GetNull(strSearch), strCols, blnShowDeleted)
2175+
If intRole = PortalSettings.RegisteredRoleId Or intRole = -2 Then
2176+
2177+
Dim strCols As String = ""
2178+
For Each item As ListItem In chkSearchCols.Items
2179+
If item.Selected = True Then
2180+
strCols += item.Value & ","
2181+
End If
2182+
Next
2183+
2184+
dr = DotNetNuke.Data.DataProvider.Instance().ExecuteReader("Connect_Accounts_GetUsers", intRole, PortalId, DotNetNuke.Data.DataProvider.Instance().GetNull(strSearch), strCols, blnShowDeleted)
2185+
2186+
Else
2187+
2188+
dr = DotNetNuke.Data.DataProvider.Instance().ExecuteReader("Connect_Accounts_GetRoleMembers", intRole, PortalId)
2189+
2190+
End If
2191+
21452192
Dim dt As New DataTable
21462193
dt.Load(dr)
21472194
ds.Tables.Add(dt)

0 commit comments

Comments
 (0)