/
PersonaBarRepository.cs
137 lines (117 loc) · 4.65 KB
/
PersonaBarRepository.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information
namespace Dnn.PersonaBar.Library.Repository
{
using System;
using System.Collections.Generic;
using System.Linq;
using Dnn.PersonaBar.Library.Data;
using Dnn.PersonaBar.Library.Model;
using DotNetNuke.Common.Utilities;
using DotNetNuke.Entities.Users;
using DotNetNuke.Framework;
public class PersonaBarRepository : ServiceLocator<IPersonaBarRepository, PersonaBarRepository>,
IPersonaBarRepository
{
private const string PersonaBarMenuCacheKey = "PersonaBarMenu";
private static readonly object ThreadLocker = new object();
private readonly IDataService dataService = new DataService();
/// <inheritdoc/>
public PersonaBarMenu GetMenu()
{
var menu = DataCache.GetCache<PersonaBarMenu>(PersonaBarMenuCacheKey);
if (menu == null)
{
lock (ThreadLocker)
{
menu = DataCache.GetCache<PersonaBarMenu>(PersonaBarMenuCacheKey);
if (menu == null)
{
menu = new PersonaBarMenu();
var menuItems = CBO.FillCollection<MenuItem>(this.dataService.GetPersonaBarMenu())
.OrderBy(m => m.Order).ToList();
foreach (var menuItem in menuItems.Where(m => m.ParentId == Null.NullInteger))
{
menu.MenuItems.Add(menuItem);
this.InjectMenuItems(menuItem, menuItems);
}
DataCache.SetCache(PersonaBarMenuCacheKey, menu);
}
}
}
return menu;
}
/// <inheritdoc/>
public MenuItem GetMenuItem(string identifier)
{
return this.GetMenu().AllItems.ToList().FirstOrDefault(m => m.Identifier.Equals(identifier, StringComparison.InvariantCultureIgnoreCase));
}
/// <inheritdoc/>
public MenuItem GetMenuItem(int menuId)
{
return this.GetMenu().AllItems.ToList().FirstOrDefault(m => m.MenuId == menuId);
}
/// <inheritdoc/>
public void SaveMenuItem(MenuItem item)
{
var user = UserController.Instance.GetCurrentUserInfo();
item.MenuId = this.dataService.SavePersonaBarMenu(
item.Identifier,
item.ModuleName,
item.FolderName,
item.Controller,
item.ResourceKey,
item.Path,
item.Link,
item.CssClass,
item.IconFile,
item.ParentId,
item.Order,
item.AllowHost,
item.Enabled,
user.UserID);
this.ClearCache();
}
/// <inheritdoc/>
public void DeleteMenuItem(string identifier)
{
this.dataService.DeletePersonaBarMenuByIdentifier(identifier);
this.ClearCache();
}
/// <inheritdoc/>
public string GetMenuDefaultPermissions(int menuId)
{
return this.dataService.GetPersonaBarMenuDefaultPermissions(menuId);
}
/// <inheritdoc/>
public void SaveMenuDefaultPermissions(MenuItem menuItem, string roleNames)
{
this.dataService.SavePersonaBarMenuDefaultPermissions(menuItem.MenuId, roleNames);
}
/// <inheritdoc/>
public void UpdateMenuController(string identifier, string controller)
{
var user = UserController.Instance.GetCurrentUserInfo();
this.dataService.UpdateMenuController(identifier, controller, user.UserID);
this.ClearCache();
}
/// <inheritdoc/>
protected override Func<IPersonaBarRepository> GetFactory()
{
return () => new PersonaBarRepository();
}
private void InjectMenuItems(MenuItem parent, IList<MenuItem> menuItems)
{
foreach (var menuItem in menuItems.Where(m => m.ParentId == parent.MenuId))
{
parent.Children.Add(menuItem);
this.InjectMenuItems(menuItem, menuItems);
}
}
private void ClearCache()
{
DataCache.RemoveCache(PersonaBarMenuCacheKey);
}
}
}