diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..ec7d0d4
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,199 @@
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+
+# User-specific files
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+#GhostDoc
+*.[Gg]host[Dd]oc.xml
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+build/
+bld/
+[Bb]in/
+[Oo]bj/
+
+# Visual Studo 2015 cache/options directory
+.vs/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUNIT
+*.VisualState.xml
+TestResult.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+*_i.c
+*_p.c
+*_i.h
+*.ilk
+*.meta
+*.obj
+*.pch
+*.pdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opensdf
+*.sdf
+*.cachefile
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# JustCode is a .NET coding addin-in
+.JustCode
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# TODO: Comment the next line if you want to checkin your web deploy settings
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# NuGet Packages
+*.nupkg
+# The packages folder can be ignored because of Package Restore
+**/packages/*
+# except build/, which is used as an MSBuild target.
+!**/packages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/packages/repositories.config
+
+# Windows Azure Build Output
+csx/
+*.build.csdef
+
+# Windows Store app package directory
+AppPackages/
+
+# Others
+*.[Cc]ache
+ClientBin/
+[Ss]tyle[Cc]op.*
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.pfx
+*.publishsettings
+node_modules/
+bower_components/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+
+# SQL Server files
+*.mdf
+*.ldf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
diff --git a/ICGSimpleFileList.sln b/ICGSimpleFileList.sln
new file mode 100644
index 0000000..a477200
--- /dev/null
+++ b/ICGSimpleFileList.sln
@@ -0,0 +1,26 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.24720.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICGSimpleFileList", "SimpleFileList\ICGSimpleFileList.csproj", "{1C5104BC-DAD6-4889-84E2-1F1DFF06E5D8}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CI Support", "CI Support", "{483B1F47-981D-430E-8BB5-F630AB8D18D9}"
+ ProjectSection(SolutionItems) = preProject
+ appveyor.yml = appveyor.yml
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {1C5104BC-DAD6-4889-84E2-1F1DFF06E5D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1C5104BC-DAD6-4889-84E2-1F1DFF06E5D8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1C5104BC-DAD6-4889-84E2-1F1DFF06E5D8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1C5104BC-DAD6-4889-84E2-1F1DFF06E5D8}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..c7ad2d0
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 IowaComputerGurus, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/README.md b/README.md
index d5354b4..90af8ab 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,8 @@
# dnn.SimpleFileList
+
+[![Build status](https://ci.appveyor.com/api/projects/status/8yt8k15yfkepytvx?svg=true)](https://ci.appveyor.com/project/IowaComputerGurus/dnn-simplefilelist)
+
The Simple File List module is a Free DotNetNuke module that will list all files within a specific folder under the specific portal folder within DNN for users to be able to download. The initial release of this module has been targeted at simple functionality. Future releases of the module will include more functionality and security.
+
+## Minimum DNN Version
+Version 2.5.0 Requires DNN 7.0.0 and later
\ No newline at end of file
diff --git a/SimpleFileList/App_LocalResources/Settings.ascx.resx b/SimpleFileList/App_LocalResources/Settings.ascx.resx
new file mode 100644
index 0000000..2f8d664
--- /dev/null
+++ b/SimpleFileList/App_LocalResources/Settings.ascx.resx
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Simple File List Settings
+
+
+ A comma separated list of files that should NOT be rendered to the user.
+
+
+ Excluded File Extensions:
+
+
+ Which folder should files be displayed from?
+
+
+ Folder to List
+
+
\ No newline at end of file
diff --git a/SimpleFileList/App_LocalResources/View.ascx.resx b/SimpleFileList/App_LocalResources/View.ascx.resx
new file mode 100644
index 0000000..65ada75
--- /dev/null
+++ b/SimpleFileList/App_LocalResources/View.ascx.resx
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Download
+
+
+ File
+
+
+ Module not yet configured, please visit "Settings".
+
+
\ No newline at end of file
diff --git a/SimpleFileList/BuildScripts/MSBuild.Community.Tasks.Targets b/SimpleFileList/BuildScripts/MSBuild.Community.Tasks.Targets
new file mode 100644
index 0000000..9cf9b18
--- /dev/null
+++ b/SimpleFileList/BuildScripts/MSBuild.Community.Tasks.Targets
@@ -0,0 +1,105 @@
+
+
+
+
+
+ $(MSBuildProjectDirectory)\BuildScripts
+ $(MSBuildProjectDirectory)\bin
+ MSBuild.Community.Tasks.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SimpleFileList/BuildScripts/MSBuild.Community.Tasks.dll b/SimpleFileList/BuildScripts/MSBuild.Community.Tasks.dll
new file mode 100644
index 0000000..3d1dbd3
Binary files /dev/null and b/SimpleFileList/BuildScripts/MSBuild.Community.Tasks.dll differ
diff --git a/SimpleFileList/BuildScripts/ModulePackage.targets b/SimpleFileList/BuildScripts/ModulePackage.targets
new file mode 100644
index 0000000..e6ff556
--- /dev/null
+++ b/SimpleFileList/BuildScripts/ModulePackage.targets
@@ -0,0 +1,118 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SimpleFileList/Components/FileDisplay.cs b/SimpleFileList/Components/FileDisplay.cs
new file mode 100644
index 0000000..1b62a42
--- /dev/null
+++ b/SimpleFileList/Components/FileDisplay.cs
@@ -0,0 +1,29 @@
+using System;
+
+namespace ICG.Modules.SimpleFileList.Components
+{
+ ///
+ /// This class represents a single file that is available for
+ /// display within the module
+ ///
+ public class FileDisplay
+ {
+ ///
+ /// Gets or sets the full path.
+ ///
+ /// The full path.
+ public string FullPath { get; set; }
+
+ ///
+ /// Gets or sets the name of the file.
+ ///
+ /// The name of the file.
+ public string FileName { get; set; }
+
+ ///
+ /// Gets or sets the last modified date.
+ ///
+ /// The last modified date.
+ public DateTime LastModifiedDate { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/SimpleFileList/Components/FileUtility.cs b/SimpleFileList/Components/FileUtility.cs
new file mode 100644
index 0000000..f10f0d5
--- /dev/null
+++ b/SimpleFileList/Components/FileUtility.cs
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2006 - 2011 IowaComputerGurus Inc, All rights reserved.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+ * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+
+namespace ICG.Modules.SimpleFileList.Components
+{
+ ///
+ /// This class is responsible for all of the IO activies to the file system.
+ ///
+ public static class FileUtility
+ {
+ ///
+ /// Gets the available directories for the user to actually filter.
+ ///
+ /// The root directory.
+ /// A collection of available directories
+ public static IEnumerable GetAvailableDirectories(string rootDirectory)
+ {
+ var rootInfo = new DirectoryInfo(rootDirectory);
+ var subDirectoryInfo = rootInfo.GetDirectories("*.*", SearchOption.AllDirectories);
+ var returnList = new List();
+ Array.ForEach(subDirectoryInfo, x => returnList.Add(x.FullName.Replace(rootDirectory, string.Empty)));
+ return returnList;
+ }
+
+ ///
+ /// Gets a listing of all files in a folder, filtering out a list of excluded file types
+ ///
+ /// The folder to search.
+ /// The extensions that should be skipped.
+ ///
+ public static IEnumerable GetSafeFileList(string folder, IEnumerable excludeExtensions, string sortOrder)
+ {
+ var folderInfo = new DirectoryInfo(folder);
+ var fileInfo = folderInfo.GetFiles();
+ var filteredList = from x in fileInfo
+ where !excludeExtensions.Contains(Path.GetExtension(x.FullName).ToLower())
+ select new FileDisplay { FileName = Path.GetFileName(x.FullName), FullPath = x.FullName, LastModifiedDate = x.LastWriteTime};
+
+ //Sort as needed
+ switch (sortOrder)
+ {
+ case "FA":
+ return filteredList.OrderBy(x => x.FileName);
+ case "FD":
+ return filteredList.OrderByDescending(x => x.FileName);
+ case "DA":
+ return filteredList.OrderBy(x => x.LastModifiedDate);
+ case "DD":
+ return filteredList.OrderByDescending(x => x.LastModifiedDate);
+ }
+
+ //Otherwise go through as is
+ return filteredList;
+ }
+ }
+}
\ No newline at end of file
diff --git a/SimpleFileList/Documentation/Simple File List Admin Guide.docx b/SimpleFileList/Documentation/Simple File List Admin Guide.docx
new file mode 100644
index 0000000..7ac7848
Binary files /dev/null and b/SimpleFileList/Documentation/Simple File List Admin Guide.docx differ
diff --git a/SimpleFileList/ICG.Modules.SimpleFileList.dnn b/SimpleFileList/ICG.Modules.SimpleFileList.dnn
new file mode 100644
index 0000000..3a8710f
--- /dev/null
+++ b/SimpleFileList/ICG.Modules.SimpleFileList.dnn
@@ -0,0 +1,109 @@
+
+
+
+ Simple File List Module
+ A simple file listing module for DotNetNuke installations. Select a folder path and see all files.
+
+ Mitchel Sellers
+ IowaComputerGurus Inc.
+ http://www.iowacomputergurus.com
+ webmaster@iowacomputergurus.com
+
+
+
+ Copyright (c) 2006 - 2016 IowaComputerGurus Inc
+ All rights reserved.
+
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+ TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+
]]>
+
+
+ Version 02.05.00 - August 26th, 2014
+
+
The following items were included in this release.
+
+
+ - 9418 - Ability to sort results
+ - 9419/9420 - Cleanup development side of code
+
+
+ Version 02.00.00 - July 2nd, 2011
+
+ The following items were included in this release.
+
+
+ - FDM-126 - Added ability for users to specify the "Exclude" file filter.
+ - FDM-133 - Localize all static text
+ - FDM-134 - Addition of .resources to default excluded file types
+
+
+
+ For information on previous releases please visit the
+ Simple File List
+ Information Page
+ ]]>
+
+
+ 07.00.00
+
+
+
+
+ DesktopModules\ICGSimpleFileList
+
+ Resources.zip
+
+
+
+
+
+
+ Simple File List
+ ICGSimpleFileList
+
+
+
+ Simple File List
+ 0
+
+
+
+ DesktopModules/ICGSimpleFileList/View.ascx
+ true
+
+ View
+
+
+ 0
+
+
+ Settings
+ DesktopModules/ICGSimpleFileList/Settings.ascx
+ Simple File List Settings
+ Edit
+
+
+
+
+
+
+
+
+ bin
+
+ bin
+ ICG.Modules.SimpleFileList.dll
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SimpleFileList/ICGSimpleFileList.csproj b/SimpleFileList/ICGSimpleFileList.csproj
new file mode 100644
index 0000000..b5b4dc9
--- /dev/null
+++ b/SimpleFileList/ICGSimpleFileList.csproj
@@ -0,0 +1,155 @@
+
+
+
+
+ Debug
+ AnyCPU
+ 9.0.21022
+ 2.0
+ {1C5104BC-DAD6-4889-84E2-1F1DFF06E5D8}
+ {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}
+ Library
+ Properties
+ ICG.Modules.SimpleFileList
+ ICG.Modules.SimpleFileList
+ v4.0
+
+
+ 4.0
+
+
+
+ false
+
+
+
+
+
+
+
+ true
+ full
+ false
+ Bin\
+ DEBUG;TRACE
+ prompt
+ 4
+ AllRules.ruleset
+
+
+ pdbonly
+ true
+ bin\
+ TRACE
+ prompt
+ 4
+ AllRules.ruleset
+
+
+
+ ..\packages\DotNetNuke.Core.7.0.0\lib\DotNetNuke.dll
+ True
+
+
+ ..\packages\DotNetNuke.Core.7.0.0\lib\Microsoft.ApplicationBlocks.Data.dll
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Settings.ascx
+ ASPXCodeBehind
+
+
+ Settings.ascx
+
+
+ View.ascx
+ ASPXCodeBehind
+
+
+ View.ascx
+
+
+
+
+
+
+
+
+
+
+
+ web.config
+
+
+ web.config
+
+
+
+
+ Designer
+
+
+ Designer
+
+
+
+
+
+
+
+
+ 10.0
+ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
+
+
+
+
+
+ zip
+ ICG.Modules.SimpleFileList
+ BuildScripts
+
+
+
+
+
+
+
+
+
+ False
+ True
+ 1193
+ /
+
+
+ False
+ False
+
+
+ False
+
+
+
+
+
\ No newline at end of file
diff --git a/SimpleFileList/Module.css b/SimpleFileList/Module.css
new file mode 100644
index 0000000..9ce95a3
--- /dev/null
+++ b/SimpleFileList/Module.css
@@ -0,0 +1,44 @@
+.ICGDataGrid
+{
+ color: #666;
+ border: solid 1px #515e6a;
+}
+
+.ICGDataGrid td
+{
+ padding: 3px;
+}
+
+.ICGDataGridHeader td
+{
+ color: #000;
+ background-color: #f4f5f7;
+ border: solid 1px #d5d5d5;
+ height: 22px;
+ font-weight: bold;
+ padding-left: 5px;
+}
+tr.ICGDataGridHeader
+{
+ height: 22px;
+}
+
+.ICGDataGridAltItem td
+{
+ background-color: #f6f6f6;
+ border-left: solid 1px #ededed;
+ border-right: solid 1px #ededed;
+ height: 15px;
+ border-top: solid 1px #fff;
+ font-weight: normal;
+}
+
+.ICGDataGridItem td
+{
+ background-color: #fff;
+ border-left: solid 1px #ededed;
+ border-right: solid 1px #ededed;
+ height: 15px;
+ border-top: solid 1px #fff;
+ font-weight: normal;
+}
\ No newline at end of file
diff --git a/SimpleFileList/Properties/AssemblyInfo.cs b/SimpleFileList/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..ca43eaa
--- /dev/null
+++ b/SimpleFileList/Properties/AssemblyInfo.cs
@@ -0,0 +1,33 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("ICGSimpleFileList")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ICGSimpleFileList")]
+[assembly: AssemblyCopyright("")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/SimpleFileList/Settings.ascx b/SimpleFileList/Settings.ascx
new file mode 100644
index 0000000..cfa57f4
--- /dev/null
+++ b/SimpleFileList/Settings.ascx
@@ -0,0 +1,22 @@
+<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Settings.ascx.cs" Inherits="ICG.Modules.SimpleFileList.Settings" %>
+<%@ Register TagPrefix="dnn" TagName="Label" Src="~/controls/LabelControl.ascx" %>
+
+
diff --git a/SimpleFileList/Settings.ascx.cs b/SimpleFileList/Settings.ascx.cs
new file mode 100644
index 0000000..9e29a27
--- /dev/null
+++ b/SimpleFileList/Settings.ascx.cs
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2006 - 2011 IowaComputerGurus Inc, All rights reserved.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+ * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+using System;
+using DotNetNuke.Entities.Modules;
+using DotNetNuke.Services.Exceptions;
+using ICG.Modules.SimpleFileList.Components;
+
+namespace ICG.Modules.SimpleFileList
+{
+ public partial class Settings : ModuleSettingsBase
+ {
+
+ ///
+ /// handles the loading of the module setting for this
+ /// control
+ ///
+ public override void LoadSettings()
+ {
+ try
+ {
+ if (!IsPostBack)
+ {
+ ddlFolder.DataSource = FileUtility.GetAvailableDirectories(Server.MapPath("~/Portals/" + this.PortalId.ToString()));
+ ddlFolder.DataBind();
+
+ object existing = ModuleSettings["ICG.Modules.SimpleFileList"];
+ if (existing != null)
+ {
+ var item = ddlFolder.Items.FindByText(existing.ToString());
+ if (item != null)
+ item.Selected = true;
+ }
+
+ object existingExclude = ModuleSettings["ICG.Modules.SimpleFileList.ExcludeFilter"];
+ if (existingExclude != null)
+ {
+ txtExcludeFiles.Text = existingExclude.ToString();
+ }
+ else
+ txtExcludeFiles.Text = ".cs,.vb,.template,.htmtemplate,.resources";
+
+ object existingSort = ModuleSettings["ICG.Modules.SimpleFIleList.SortOrder"];
+ if (existingSort != null)
+ {
+ ddlSortOrder.SelectedValue = existingSort.ToString();
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ Exceptions.ProcessModuleLoadException(this, ex);
+ }
+ }
+
+ ///
+ /// handles updating the module settings for this control
+ ///
+ public override void UpdateSettings()
+ {
+ try
+ {
+ var oController = new ModuleController();
+ oController.UpdateModuleSetting(this.ModuleId, "ICG.Modules.SimpleFileList", ddlFolder.SelectedItem.Text);
+ oController.UpdateModuleSetting(this.ModuleId, "ICG.Modules.SimpleFileList.ExcludeFilter", txtExcludeFiles.Text);
+ oController.UpdateModuleSetting(this.ModuleId, "ICG.Modules.SimpleFIleList.SortOrder",
+ ddlSortOrder.SelectedValue);
+ }
+ catch (Exception ex)
+ {
+ Exceptions.ProcessModuleLoadException(this, ex);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/SimpleFileList/Settings.ascx.designer.cs b/SimpleFileList/Settings.ascx.designer.cs
new file mode 100644
index 0000000..905a83c
--- /dev/null
+++ b/SimpleFileList/Settings.ascx.designer.cs
@@ -0,0 +1,69 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace ICG.Modules.SimpleFileList {
+
+
+ public partial class Settings {
+
+ ///
+ /// lblFolderToList control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.UserControl lblFolderToList;
+
+ ///
+ /// ddlFolder control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.DropDownList ddlFolder;
+
+ ///
+ /// lblExcludeFiles control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.UserControl lblExcludeFiles;
+
+ ///
+ /// txtExcludeFiles control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.TextBox txtExcludeFiles;
+
+ ///
+ /// lblSortOrder control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.UserControl lblSortOrder;
+
+ ///
+ /// ddlSortOrder control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.DropDownList ddlSortOrder;
+ }
+}
diff --git a/SimpleFileList/View.ascx b/SimpleFileList/View.ascx
new file mode 100644
index 0000000..57d3dff
--- /dev/null
+++ b/SimpleFileList/View.ascx
@@ -0,0 +1,16 @@
+<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="View.ascx.cs" Inherits="ICG.Modules.SimpleFileList.View" %>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SimpleFileList/View.ascx.cs b/SimpleFileList/View.ascx.cs
new file mode 100644
index 0000000..e5709fd
--- /dev/null
+++ b/SimpleFileList/View.ascx.cs
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2006 - 2011 IowaComputerGurus Inc, All rights reserved.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+ * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Web.UI.WebControls;
+using DotNetNuke.Entities.Modules;
+using DotNetNuke.Services.Exceptions;
+using DotNetNuke.Services.Localization;
+using DotNetNuke.UI.Skins;
+using DotNetNuke.UI.Skins.Controls;
+using ICG.Modules.SimpleFileList.Components;
+
+namespace ICG.Modules.SimpleFileList
+{
+ public partial class View : PortalModuleBase
+ {
+ ///
+ /// Holds the root folder path, used for binding operations
+ ///
+ private string _rootPath;
+
+ ///
+ /// Handles the Load event of the Page control.
+ ///
+ /// The source of the event.
+ /// The instance containing the event data.
+ protected void Page_Load(object sender, EventArgs e)
+ {
+ try
+ {
+ if (!IsPostBack)
+ {
+ _rootPath = Server.MapPath("~/");
+ var settingValue = Settings["ICG.Modules.SimpleFileList"];
+ if (settingValue != null)
+ {
+ var portalPath = Server.MapPath("~/Portals/" + this.PortalId);
+
+ dgrFileList.Columns[0].HeaderText = Localization.GetString("FileHeader", this.LocalResourceFile);
+ dgrFileList.DataSource = FileUtility.GetSafeFileList(string.Concat(portalPath, settingValue.ToString()), GetExcludedFiles(), GetSortOrder());
+ dgrFileList.DataBind();
+ }
+ else
+ {
+ Skin.AddModuleMessage(this, Localization.GetString("NotConfigured", this.LocalResourceFile), ModuleMessage.ModuleMessageType.BlueInfo);
+ }
+
+ }
+ }
+ catch (Exception ex)
+ {
+ Exceptions.ProcessModuleLoadException(this, ex);
+ }
+ }
+
+ #region Display Binding Values
+ ///
+ /// Handles the ItemDataBound event of the dgrFileList control.
+ ///
+ /// The source of the event.
+ /// The instance containing the event data.
+ protected void dgrFileList_ItemDataBound(object sender, DataGridItemEventArgs e)
+ {
+ if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
+ {
+ var hlDownload = (HyperLink)e.Item.FindControl("hlDownload");
+ var oItem = (FileDisplay)e.Item.DataItem;
+ string filePath = oItem.FullPath.Replace(_rootPath, @"\");
+ hlDownload.NavigateUrl = filePath.Replace(@"\", "/");
+ hlDownload.Text = Localization.GetString("DownloadLink", this.LocalResourceFile);
+ hlDownload.Target = "_blank";
+ }
+ }
+ #endregion
+
+ #region Settings Helpers
+ ///
+ /// Gets the excluded files.
+ ///
+ ///
+ private IEnumerable GetExcludedFiles()
+ {
+ var settingValue = Settings["ICG.Modules.SimpleFileList.ExcludeFilter"];
+ if (settingValue == null)
+ {
+ //Force default value in
+ var modController = new ModuleController();
+ var defaultFilter = ".cs,.vb,.template,.htmtemplate,.resources";
+ modController.UpdateModuleSetting(this.ModuleId, "ICG.Modules.SimpleFileList.ExcludeFilter", defaultFilter);
+ settingValue = defaultFilter;
+ }
+ var finalSetting = settingValue.ToString();
+ return finalSetting.Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries);
+ }
+
+ ///
+ /// Gets the sort order.
+ ///
+ /// System.String.
+ private string GetSortOrder()
+ {
+ var value = Settings["ICG.Modules.SimpleFIleList.SortOrder"];
+ return value != null ? value.ToString() : "FA";
+ }
+
+ #endregion
+
+ }
+}
\ No newline at end of file
diff --git a/SimpleFileList/View.ascx.designer.cs b/SimpleFileList/View.ascx.designer.cs
new file mode 100644
index 0000000..c44173f
--- /dev/null
+++ b/SimpleFileList/View.ascx.designer.cs
@@ -0,0 +1,24 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace ICG.Modules.SimpleFileList {
+
+
+ public partial class View {
+
+ ///
+ /// dgrFileList control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.DataGrid dgrFileList;
+ }
+}
diff --git a/SimpleFileList/packages.config b/SimpleFileList/packages.config
new file mode 100644
index 0000000..24dd4d9
--- /dev/null
+++ b/SimpleFileList/packages.config
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/appveyor.yml b/appveyor.yml
new file mode 100644
index 0000000..ffe2b83
--- /dev/null
+++ b/appveyor.yml
@@ -0,0 +1,9 @@
+version: 2.5.{build}
+image: Visual Studio 2015
+configuration: Release
+before_build:
+- cmd: nuget restore
+build:
+ verbosity: minimal
+artifacts:
+- path: '**\*_Install.zip'
\ No newline at end of file