├── version.txt
├── Documentation
├── ReleaseNotes.htm
└── License.htm
├── install
├── InspectorIT.FileWatcher_1.0.0.0_Install.zip
└── InspectorIT.FileWatcher_1.0.0.0_Source.zip
├── Resources.zip.manifest
├── Components
├── Common
│ └── Utils.cs
├── CustomFolderManager.cs
└── FileMonitor.cs
├── README.md
├── Properties
└── AssemblyInfo.cs
├── InspectorIT.FileWatcher.dnn
├── .gitignore
├── FileWatcher.csproj
└── BuildScripts
├── MSBuild.Community.Tasks.Targets
└── ModulePackage.targets
/version.txt:
--------------------------------------------------------------------------------
1 | 1.0.0.0
--------------------------------------------------------------------------------
/Documentation/ReleaseNotes.htm:
--------------------------------------------------------------------------------
1 |
Version 1.0.0.0
2 |
--------------------------------------------------------------------------------
/install/InspectorIT.FileWatcher_1.0.0.0_Install.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maxiomtech/DotNetNuke-FileWatcher/HEAD/install/InspectorIT.FileWatcher_1.0.0.0_Install.zip
--------------------------------------------------------------------------------
/install/InspectorIT.FileWatcher_1.0.0.0_Source.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maxiomtech/DotNetNuke-FileWatcher/HEAD/install/InspectorIT.FileWatcher_1.0.0.0_Source.zip
--------------------------------------------------------------------------------
/Resources.zip.manifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Documentation/
5 | License.htm
6 |
7 |
8 | Documentation/
9 | ReleaseNotes.htm
10 |
11 |
12 |
--------------------------------------------------------------------------------
/Components/Common/Utils.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Web;
5 |
6 | namespace InspectorIT.FileWatcher.Components.Common
7 | {
8 | public class Utils
9 | {
10 | public static string GetRelativePath(string portalRoot, string filePath)
11 | {
12 | return filePath.Replace(portalRoot, "").Replace("\\","/");
13 | }
14 |
15 | }
16 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | DotNetNuke-FileWatcher
2 | ======================
3 |
4 | Monitors the files in your portals folder and instantly adds or removes them from the database. This is useful if you FTP or use explorer to copy files to your website.
5 |
6 | ## How it works
7 |
8 | Utilizes .NET FileSystemWatcher in order to monitor the portals folder for any changes in order to keep the database in sync.
9 |
10 | ## What it solves
11 |
12 | - If you add a file to your portals directory through any means except though the DotNetNuke interface that file won't be picked up by DotNetNuke until the scheduler system runs. *Assuming you have the auto sync enabled*
13 | - You no longer have the performance hit of running the fully recursive auto sync on every file in your portal.
14 | - Instantly have access to any file that is in your portal no matter how it got there.
15 |
16 | ## Fun Facts
17 |
18 | - Utilizes the IServiceRouteMapper interface in order to have DotNetNuke enable the file system watcher code at application start.
19 | - Is a DotNetNuke library project.
20 |
21 | ## Requirements
22 |
23 | - DotNetNuke 7.0.6
24 | - Full Trust Environment. *Will not work on shared hosting like GoDaddy*
25 |
26 |
--------------------------------------------------------------------------------
/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("FileWatcher")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("FileWatcher")]
13 | [assembly: AssemblyCopyright("Copyright ? 2013")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("0d9fbdc6-f041-42b2-aad9-3b99ee9d61f9")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Revision and Build Numbers
33 | // by using the '*' as shown below:
34 | [assembly: AssemblyVersion("1.0.0.0")]
35 | [assembly: AssemblyFileVersion("1.0.0.0")]
36 |
--------------------------------------------------------------------------------
/Documentation/License.htm:
--------------------------------------------------------------------------------
1 | New BSD License (BSD)
2 | Copyright (c) 2013, Jonathan Sheely
All rights reserved.
3 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
4 | * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
5 | * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
6 | * Neither the name of Jonathan Sheely nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
7 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
8 |
--------------------------------------------------------------------------------
/InspectorIT.FileWatcher.dnn:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | File Watcher
6 | Monitors the files in your portals folder and instantly adds or removes them from the database. This is useful if you FTP or use explorer to copy files to your website.
7 | DesktopModules/InspectorIT/FileWatcher/images/icon.png
8 |
9 | Jonathan Sheely
10 | InspectorIT
11 | http://inspectorit.com
12 | jsheely@inspectorit.com
13 |
14 |
15 |
16 |
17 |
18 |
19 | bin
20 |
21 | InspectorIT.FileWatcher.dll
22 |
23 |
24 |
25 |
26 |
27 | DesktopModules\InspectorIT\FileWatcher
28 |
29 | Resources.zip
30 | Resources.zip
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/Components/CustomFolderManager.cs:
--------------------------------------------------------------------------------
1 | using System.Linq;
2 | using DotNetNuke.Common;
3 | using DotNetNuke.Common.Utilities;
4 | using DotNetNuke.Services.FileSystem;
5 |
6 | namespace InspectorIT.FileWatcher.Components
7 | {
8 | public class CustomFolderManager
9 | {
10 | public IFolderInfo MoveFolder(IFolderInfo folder, string newFolderPath)
11 | {
12 | Requires.NotNull("folder", folder);
13 | Requires.NotNullOrEmpty("newFolderPath", newFolderPath);
14 |
15 | newFolderPath = PathUtils.Instance.FormatFolderPath(newFolderPath);
16 |
17 | if (folder.FolderPath == newFolderPath) return folder;
18 |
19 | MoveFolders(folder, newFolderPath);
20 |
21 | return FolderManager.Instance.GetFolder(folder.FolderID);
22 | }
23 |
24 |
25 | private void MoveFolders(IFolderInfo folder, string newFolderPath)
26 | {
27 | var folderInfos = FolderManager.Instance.GetFolders(folder.PortalID).Where(f => f.FolderPath != string.Empty && f.FolderPath.StartsWith(folder.FolderPath)).ToList();
28 | foreach (var folderInfo in folderInfos)
29 | {
30 | var folderPath = newFolderPath + folderInfo.FolderPath.Substring(folder.FolderPath.Length);
31 | MoveFolder(folderPath, folderInfo);
32 | }
33 | }
34 |
35 |
36 | private void MoveFolder(string folderPath, IFolderInfo folderInfo)
37 | {
38 | RenameFiles(folderInfo, folderPath);
39 | folderInfo.FolderPath = folderPath;
40 | FolderManager.Instance.UpdateFolder(folderInfo);
41 | }
42 |
43 | private void RenameFiles(IFolderInfo folder, string newFolderPath)
44 | {
45 | var files = FolderManager.Instance.GetFiles(folder);
46 | foreach (var file in files)
47 | {
48 | file.Folder = newFolderPath;
49 | FileManager.Instance.UpdateFile(file);
50 | }
51 | }
52 |
53 | }
54 | }
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Build Folders (you can keep bin if you'd like, to store dlls and pdbs)
2 | [Bb]in/
3 | [Oo]bj/
4 |
5 | # mstest test results
6 | TestResults
7 |
8 | ## Ignore Visual Studio temporary files, build results, and
9 | ## files generated by popular Visual Studio add-ons.
10 |
11 | # User-specific files
12 | *.suo
13 | *.user
14 | *.sln.docstates
15 |
16 | # Build results
17 | [Dd]ebug/
18 | [Rr]elease/
19 | x64/
20 | *_i.c
21 | *_p.c
22 | *.ilk
23 | *.meta
24 | *.obj
25 | *.pch
26 | *.pdb
27 | *.pgc
28 | *.pgd
29 | *.rsp
30 | *.sbr
31 | *.tlb
32 | *.tli
33 | *.tlh
34 | *.tmp
35 | *.log
36 | *.vspscc
37 | *.vssscc
38 | .builds
39 |
40 | # Visual C++ cache files
41 | ipch/
42 | *.aps
43 | *.ncb
44 | *.opensdf
45 | *.sdf
46 |
47 | # Visual Studio profiler
48 | *.psess
49 | *.vsp
50 | *.vspx
51 |
52 | # Guidance Automation Toolkit
53 | *.gpState
54 |
55 | # ReSharper is a .NET coding add-in
56 | _ReSharper*
57 |
58 | # NCrunch
59 | *.ncrunch*
60 | .*crunch*.local.xml
61 |
62 | # Installshield output folder
63 | [Ee]xpress
64 |
65 | # DocProject is a documentation generator add-in
66 | DocProject/buildhelp/
67 | DocProject/Help/*.HxT
68 | DocProject/Help/*.HxC
69 | DocProject/Help/*.hhc
70 | DocProject/Help/*.hhk
71 | DocProject/Help/*.hhp
72 | DocProject/Help/Html2
73 | DocProject/Help/html
74 |
75 | # Click-Once directory
76 | publish
77 |
78 | # Publish Web Output
79 | *.Publish.xml
80 |
81 | # NuGet Packages Directory
82 | packages
83 |
84 | # Windows Azure Build Output
85 | csx
86 | *.build.csdef
87 |
88 | # Windows Store app package directory
89 | AppPackages/
90 |
91 | # Others
92 | [Bb]in
93 | [Oo]bj
94 | sql
95 | TestResults
96 | [Tt]est[Rr]esult*
97 | *.Cache
98 | ClientBin
99 | [Ss]tyle[Cc]op.*
100 | ~$*
101 | *.dbmdl
102 | Generated_Code #added for RIA/Silverlight projects
103 |
104 | # Backup & report files from converting an old project file to a newer
105 | # Visual Studio version. Backup files are not needed, because we have git ;-)
106 | _UpgradeReport_Files/
107 | Backup*/
108 | UpgradeLog*.XML
109 |
--------------------------------------------------------------------------------
/FileWatcher.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 |
8 |
9 | 2.0
10 | {D302CF97-1C02-406E-9C39-F3B1838B9674}
11 | {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}
12 | Library
13 | Properties
14 | InspectorIT.FileWatcher
15 | InspectorIT.FileWatcher
16 | v4.5
17 | true
18 |
19 |
20 |
21 |
22 |
23 |
24 | true
25 | full
26 | false
27 | ..\..\..\..\Website\bin\
28 | DEBUG;TRACE
29 | prompt
30 | 4
31 |
32 |
33 | pdbonly
34 | true
35 | ..\..\..\..\Website\bin\
36 | TRACE
37 | prompt
38 | 4
39 |
40 |
41 |
42 | ..\..\..\..\Website\bin\ClientDependency.Core.dll
43 |
44 |
45 | ..\..\..\..\Website\bin\DotNetNuke.dll
46 |
47 |
48 | ..\..\..\..\Website\bin\DotNetNuke.Instrumentation.dll
49 |
50 |
51 | ..\..\..\..\Website\bin\DotNetNuke.Web.Client.dll
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 | {8DA31B98-5E8E-4243-8967-D4CF7DC622CB}
89 | DotNetNuke.Web
90 |
91 |
92 |
93 |
94 |
95 |
96 | 10.0
97 | $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | True
107 | True
108 | 64171
109 | /
110 | http://localhost:51123/
111 | False
112 | False
113 |
114 |
115 | False
116 |
117 |
118 |
119 |
120 |
121 |
122 |
--------------------------------------------------------------------------------
/BuildScripts/MSBuild.Community.Tasks.Targets:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | $(MSBuildProjectDirectory)\BuildScripts
7 | $(MSBuildProjectDirectory)\..\..\..\bin
8 | $(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.dll
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 |
--------------------------------------------------------------------------------
/Components/FileMonitor.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.IO;
3 | using System.Linq;
4 | using DotNetNuke.Common.Utilities;
5 | using DotNetNuke.Entities.Portals;
6 | using DotNetNuke.Instrumentation;
7 | using DotNetNuke.Services.FileSystem;
8 | using DotNetNuke.Web.Api;
9 | using InspectorIT.FileWatcher.Components.Common;
10 |
11 | namespace InspectorIT.FileWatcher.Components
12 | {
13 | public class FileMonitor : IServiceRouteMapper
14 | {
15 |
16 | private readonly ILog Logger = LoggerSource.Instance.GetLogger(typeof(FileMonitor));
17 |
18 | public void RegisterRoutes(IMapRoute mapRouteManager)
19 | {
20 | foreach (PortalInfo portal in new PortalController().GetPortals().OfType())
21 | {
22 | Start(portal);
23 | }
24 | }
25 |
26 | public void Start(PortalInfo portalInfo)
27 | {
28 | var cache = DataCache.GetCache("InspectorIT.FileMonitor." + portalInfo.PortalID);
29 |
30 | if (cache == null)
31 | {
32 |
33 | FileSystemWatcher fileWatcher = new FileSystemWatcher();
34 | fileWatcher.Path = portalInfo.HomeDirectoryMapPath;
35 | fileWatcher.IncludeSubdirectories = true;
36 | fileWatcher.EnableRaisingEvents = true;
37 | fileWatcher.NotifyFilter = NotifyFilters.FileName;
38 | fileWatcher.Created += (s, e) => onFileChanged(s, e, portalInfo);
39 | fileWatcher.Deleted += (s, e) => onFileDeleted(s, e, portalInfo);
40 | fileWatcher.Renamed += (s, e) => onFileRenamed(s, e, portalInfo);
41 |
42 | FileSystemWatcher folderWatcher = new FileSystemWatcher();
43 | folderWatcher.Path = portalInfo.HomeDirectoryMapPath;
44 | folderWatcher.IncludeSubdirectories = true;
45 | folderWatcher.EnableRaisingEvents = true;
46 | folderWatcher.NotifyFilter = NotifyFilters.DirectoryName;
47 | folderWatcher.Created += (s, e) => onFolderChanged(s, e, portalInfo);
48 | folderWatcher.Deleted += (s, e) => onFolderDeleted(s, e, portalInfo);
49 | folderWatcher.Renamed += (s, e) => onFolderRenamed(s, e, portalInfo);
50 |
51 |
52 | DataCache.SetCache("InspectorIT.FileMonitor." + portalInfo.PortalID, true);
53 | }
54 | }
55 |
56 |
57 | #region Files
58 |
59 | private void onFileRenamed(object sender, RenamedEventArgs e, PortalInfo portalInfo)
60 | {
61 | try
62 | {
63 | var oldRelativeFilePath = Utils.GetRelativePath(portalInfo.HomeDirectoryMapPath, e.OldFullPath);
64 | var oldFileInfo = FileManager.Instance.GetFile(portalInfo.PortalID, oldRelativeFilePath);
65 | if (oldFileInfo != null)
66 | {
67 | var newRelativeFilePath = Utils.GetRelativePath(portalInfo.HomeDirectoryMapPath, e.FullPath);
68 | var newFileInfo = FileManager.Instance.GetFile(portalInfo.PortalID, newRelativeFilePath);
69 | if (newFileInfo == null)
70 | {
71 | oldFileInfo.FileName = Path.GetFileName(e.Name);
72 | FileManager.Instance.UpdateFile(oldFileInfo);
73 | }
74 | }
75 | }
76 | catch (Exception ex)
77 | {
78 |
79 | DotNetNuke.Services.Exceptions.Exceptions.LogException(ex);
80 | }
81 |
82 | }
83 |
84 | private void onFileDeleted(object sender, FileSystemEventArgs e, PortalInfo portalInfo)
85 | {
86 | try
87 | {
88 | var relativeFilePath = Utils.GetRelativePath(portalInfo.HomeDirectoryMapPath, e.FullPath);
89 | var fileInfo = FileManager.Instance.GetFile(portalInfo.PortalID, relativeFilePath);
90 | if (fileInfo != null)
91 | {
92 | FileManager.Instance.DeleteFile(fileInfo);
93 | }
94 | }
95 | catch (Exception ex)
96 | {
97 | DotNetNuke.Services.Exceptions.Exceptions.LogException(ex);
98 | }
99 | }
100 |
101 | private void onFileChanged(object sender, FileSystemEventArgs e, PortalInfo portalInfo)
102 | {
103 | try
104 | {
105 | var relativeFilePath = Utils.GetRelativePath(portalInfo.HomeDirectoryMapPath, e.FullPath);
106 | string fileName = Path.GetFileName(e.Name);
107 | var fileInfo = FileManager.Instance.GetFile(0, relativeFilePath);
108 | if (fileInfo == null)
109 | {
110 | //Get Folder
111 | string folderPath = relativeFilePath.Replace(fileName, "");
112 | var folderInfo = FolderManager.Instance.GetFolder(portalInfo.PortalID, folderPath);
113 | if (folderInfo == null)
114 | {
115 | folderInfo = FolderManager.Instance.AddFolder(portalInfo.PortalID, folderPath);
116 | }
117 | FileManager.Instance.AddFile(folderInfo, fileName, null, false);
118 | }
119 | }
120 | catch (Exception ex)
121 | {
122 | DotNetNuke.Services.Exceptions.Exceptions.LogException(ex);
123 | }
124 | }
125 |
126 | #endregion
127 |
128 | #region Folders
129 |
130 | private void onFolderRenamed(object sender, RenamedEventArgs e, PortalInfo portalInfo)
131 | {
132 | try
133 | {
134 | string relativeFolderPath = Utils.GetRelativePath(portalInfo.HomeDirectoryMapPath, e.OldFullPath);
135 | var oldFolderInfo = FolderManager.Instance.GetFolder(portalInfo.PortalID, relativeFolderPath);
136 | if (oldFolderInfo != null || e.OldFullPath.Contains("New folder"))
137 | {
138 | var newFolderInfo = FolderManager.Instance.GetFolder(portalInfo.PortalID, e.FullPath);
139 | if (newFolderInfo == null)
140 | {
141 | if (e.OldFullPath.Contains("New folder"))
142 | {
143 | FolderManager.Instance.AddFolder(portalInfo.PortalID, Utils.GetRelativePath(portalInfo.HomeDirectoryMapPath, e.FullPath));
144 | }
145 | else
146 | {
147 | new CustomFolderManager().MoveFolder(oldFolderInfo, Utils.GetRelativePath(portalInfo.HomeDirectoryMapPath, e.FullPath));
148 | }
149 |
150 |
151 | }
152 | }
153 | }
154 | catch (Exception ex)
155 | {
156 |
157 | DotNetNuke.Services.Exceptions.Exceptions.LogException(ex);
158 | }
159 | }
160 |
161 | private void onFolderDeleted(object sender, FileSystemEventArgs e, PortalInfo portalInfo)
162 | {
163 | try
164 | {
165 | string relativeFolderPath = Utils.GetRelativePath(portalInfo.HomeDirectoryMapPath, e.FullPath);
166 | var folderInfo = FolderManager.Instance.GetFolder(portalInfo.PortalID, relativeFolderPath);
167 | if (folderInfo != null)
168 | {
169 | var folderInfos = FolderManager.Instance.GetFolders(folderInfo.PortalID).Where(f => f.FolderPath != string.Empty && f.FolderPath.StartsWith(folderInfo.FolderPath)).ToList();
170 | foreach (IFolderInfo folder in folderInfos)
171 | {
172 | FolderManager.Instance.DeleteFolder(folder);
173 | }
174 | }
175 | }
176 | catch (Exception ex)
177 | {
178 | DotNetNuke.Services.Exceptions.Exceptions.LogException(ex);
179 | }
180 | }
181 |
182 | private void onFolderChanged(object sender, FileSystemEventArgs e, PortalInfo portalInfo)
183 | {
184 | try
185 | {
186 | string relativeFolderPath = Utils.GetRelativePath(portalInfo.HomeDirectoryMapPath, e.FullPath);
187 | var folderInfo = FolderManager.Instance.GetFolder(portalInfo.PortalID, relativeFolderPath);
188 | if (folderInfo == null && !e.Name.Contains("New folder"))
189 | {
190 | FolderManager.Instance.AddFolder(portalInfo.PortalID, relativeFolderPath);
191 | }
192 | }
193 | catch (Exception ex)
194 | {
195 | DotNetNuke.Services.Exceptions.Exceptions.LogException(ex);
196 | }
197 | }
198 |
199 | #endregion
200 | }
201 | }
--------------------------------------------------------------------------------
/BuildScripts/ModulePackage.targets:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | $(AssemblyName)
9 | $(AssemblyName)
10 | $(MSBuildProjectDirectory)\..\..\..\bin
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
30 |
31 |
32 |
36 |
37 |
38 |
39 |
40 |
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 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
--------------------------------------------------------------------------------