diff --git a/BedBrigade.Client/Components/FileManager.razor.cs b/BedBrigade.Client/Components/FileManager.razor.cs index 361e2d85..186cfbd8 100644 --- a/BedBrigade.Client/Components/FileManager.razor.cs +++ b/BedBrigade.Client/Components/FileManager.razor.cs @@ -135,7 +135,7 @@ public void objectSelected(FileSelectEventArgs args bool isFile = false; if (args.FileDetails != null && args.FileDetails.Name != null) { - if (args.FileDetails.Name.ToString().ToLower() == "pages") + if (args.FileDetails.Name.ToString().ToLower() == Defaults.PagesDirectory.ToLower()) { isPagesFolder = true; } @@ -155,7 +155,7 @@ public void OnMenuOpen(MenuOpenEventArgs args) if (args.FileDetails != null) { isFile = args.FileDetails[0].IsFile; - if (args.FileDetails[0].Name.ToString() == "pages") + if (args.FileDetails[0].Name.ToString().ToLower() == Defaults.PagesDirectory.ToLower()) { isPagesFolder = true; } diff --git a/BedBrigade.Client/Components/LocationGrid.razor.cs b/BedBrigade.Client/Components/LocationGrid.razor.cs index 30020f93..0f8049c1 100644 --- a/BedBrigade.Client/Components/LocationGrid.razor.cs +++ b/BedBrigade.Client/Components/LocationGrid.razor.cs @@ -246,9 +246,6 @@ private async Task Save(ActionEventArgs args) await AddNewLocationAsync(Location); } - // validate location folders - var bLocationFolderStatus = FileUtil.CreateOrValidateLocationFolders(Location.Route); // VS 8/25/2023 - await Grid.CallStateHasChangedAsync(); await Grid.Refresh(); } diff --git a/BedBrigade.Client/Components/Pages/Index.razor.cs b/BedBrigade.Client/Components/Pages/Index.razor.cs index 8d6aac58..23532843 100644 --- a/BedBrigade.Client/Components/Pages/Index.razor.cs +++ b/BedBrigade.Client/Components/Pages/Index.razor.cs @@ -77,13 +77,13 @@ private async Task LoadLocationPage(string location, string pageName) } else { - _navigationManager.NavigateTo("/Sorry", true); + _navigationManager.NavigateTo($"/Sorry/{location}/{pageName}", true); return false; } } else { - _navigationManager.NavigateTo("/Sorry", true); + _navigationManager.NavigateTo($"/Sorry/{location}", true); return false; } } diff --git a/BedBrigade.Client/Components/Pages/Sorry.razor b/BedBrigade.Client/Components/Pages/Sorry.razor index c95815dc..fa97d295 100644 --- a/BedBrigade.Client/Components/Pages/Sorry.razor +++ b/BedBrigade.Client/Components/Pages/Sorry.razor @@ -1,7 +1,39 @@ @page "/sorry" +@page "/sorry/{mylocation}" +@page "/sorry/{mylocation}/{mypageName}" +@using Serilog Sorry -

Sorry - the page associated with this link was not found.

+

Sorry - the page associated with this link was not found.

+@if (mylocation != null && mypageName != null) +{ +

You were trying to access the page: /@mylocation/@mypageName

+} +else if (mylocation != null) +{ +

You were trying to access the page: /@mylocation

+} + + @code { - //TODO: Add notification code. + [Parameter] public string? mylocation { get; set; } + [Parameter] public string? mypageName { get; set; } + + protected override void OnInitialized() + { + if (mylocation != null && mypageName != null) + { + Log.Logger.Warning($"404 for Page: /{mylocation}/{mypageName}"); + } + else if (mylocation != null) + { + Log.Logger.Warning($"404 for Page: /{mylocation}"); + } + else + { + Log.Logger.Warning($"404 for Page: /sorry"); + } + } } diff --git a/BedBrigade.Client/Components/PagesGrid.razor.cs b/BedBrigade.Client/Components/PagesGrid.razor.cs index baf1dc98..8c967036 100644 --- a/BedBrigade.Client/Components/PagesGrid.razor.cs +++ b/BedBrigade.Client/Components/PagesGrid.razor.cs @@ -309,7 +309,7 @@ protected async Task PdfExport() { PdfExportProperties ExportProperties = new PdfExportProperties { - FileName = "Pages" + DateTime.Now.ToShortDateString() + ".pdf", + FileName = Defaults.PagesDirectory + DateTime.Now.ToShortDateString() + ".pdf", PageOrientation = Syncfusion.Blazor.Grids.PageOrientation.Landscape }; await Grid.PdfExport(ExportProperties); @@ -318,7 +318,7 @@ protected async Task ExcelExport() { ExcelExportProperties ExportProperties = new ExcelExportProperties { - FileName = "Pages " + DateTime.Now.ToShortDateString() + ".xlsx", + FileName = Defaults.PagesDirectory + DateTime.Now.ToShortDateString() + ".xlsx", }; @@ -328,7 +328,7 @@ protected async Task CsvExportAsync() { ExcelExportProperties ExportProperties = new ExcelExportProperties { - FileName = "Pages " + DateTime.Now.ToShortDateString() + ".csv", + FileName = Defaults.PagesDirectory + DateTime.Now.ToShortDateString() + ".csv", }; diff --git a/BedBrigade.Client/Services/LoadImagesService.cs b/BedBrigade.Client/Services/LoadImagesService.cs index 4eb906bf..1f59e863 100644 --- a/BedBrigade.Client/Services/LoadImagesService.cs +++ b/BedBrigade.Client/Services/LoadImagesService.cs @@ -129,6 +129,12 @@ public string SetImagesForHtml(string path, string originalHtml) var doc = new HtmlDocument(); doc.LoadHtml(originalHtml); var nodes = doc.DocumentNode.SelectNodes("//img"); + + if (nodes == null) + { + return originalHtml; + } + foreach (var node in nodes) { if (node.Attributes[Id] != null) diff --git a/BedBrigade.Common/Constants/Defaults.cs b/BedBrigade.Common/Constants/Defaults.cs index e146b2a6..d62bf7ee 100644 --- a/BedBrigade.Common/Constants/Defaults.cs +++ b/BedBrigade.Common/Constants/Defaults.cs @@ -11,5 +11,6 @@ public static class Defaults public const string DefaultUserNameAndEmail = "Anonymous"; public const string GetFilesCacheKey = "Directory.GetFiles"; public const int MetroAreaNoneId = 1; + public const string PagesDirectory = "pages"; } } diff --git a/BedBrigade.Common/Logic/FileUtil.cs b/BedBrigade.Common/Logic/FileUtil.cs index 8195311a..4761d15a 100644 --- a/BedBrigade.Common/Logic/FileUtil.cs +++ b/BedBrigade.Common/Logic/FileUtil.cs @@ -1,4 +1,5 @@ -using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; +using BedBrigade.Common.Models; +using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; using System; using System.Collections.Generic; using System.Diagnostics; @@ -6,6 +7,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using BedBrigade.Common.Constants; namespace BedBrigade.Common.Logic { @@ -37,164 +39,6 @@ private static string GetPathBeforeBin(string filePath) } } - /// - /// Returns the path to the file contained in the specified foldername - /// - /// The name of the file to find - /// A string terminating in a folder to be searched (Note this may be a path of folders) - /// A string containing where the file was found - public static string ToApplicationPath(string fileName, string folderName = "") - { - string appRoot = GetMediaDirectory(folderName); - return Path.Combine(appRoot, fileName); - } - - - - public static bool CreateOrValidateLocationFolders(string locationRoute) - { - - // LocationRoute = LocationRoute.Replace("/", String.Empty); - - string templateLocationRoot = Path.Combine(GetMediaDirectory("grove-city"),"pages"); // temporary - should be replaced by configuration variable - // default pages List - string[] defaultPageFolders = Directory.GetDirectories(templateLocationRoot); - // Clear page List - remove path - - - try - { - // Step 1 - Location Root Folder & pages folder - string locationRoot = GetMediaDirectory(locationRoute); - string locationPagesPath = Path.Combine(locationRoot, "pages"); // location top default sub-folder - CreateFolderIfNotExists(locationRoot); // check location folder - CreateFolderIfNotExists(locationPagesPath); // check "pages" sub-folder - - // step 2 - loop in default pages list - //foreach (string pageFolderName in defaultPageFolders) - Parallel.ForEach(defaultPageFolders, pageFolderName => - { // create location page folder - string pageName = Path.GetFileName(pageFolderName); - string pageFolderPath = Path.Combine(locationPagesPath, pageName); - CreateFolderIfNotExists(pageFolderPath); - if (pageName == "Home") // special structure - { - string homeRotatorPath = Path.Combine(pageFolderPath, "headerImageRotator"); - CreateFolderIfNotExists(homeRotatorPath); - if (Directory.GetFiles(homeRotatorPath).Length == 0) - { - CopyRotatorImages(homeRotatorPath, true); - } - } - else - { - // Rotator Images Folder - CreatePageRotatorFolders(pageFolderPath); - - } // Loop in default pages - - } // end page loop - ); // end Parallel process - - return (true); - - } - catch (Exception ex) - { - // Debug.WriteLine(ex.Message); - return(false); - } - - } // Validate Location Folders - - - private static void CreatePageRotatorFolders(string pageFolderPath) - { - string[] RotatorFolders = ["leftImageRotator", "middleImageRotator", "rightImageRotator"]; - // Rotator Images Folder - foreach (var rotatorFolderName in RotatorFolders) - { - string rotatorFolderPath = Path.Combine(pageFolderPath, rotatorFolderName); - CreateFolderIfNotExists(rotatorFolderPath); - if (Directory.GetFiles(rotatorFolderPath).Length == 0) - { - CopyRotatorImages(rotatorFolderPath); - } - } // loop in rotator folders - } // Create Page Rotator Folders - - private static void CreateFolderIfNotExists(string folderPath) - { - try - { - if (!Directory.Exists(folderPath)) - { - Directory.CreateDirectory(folderPath); - //Debug.WriteLine($"Created folder: {folderPath}"); - } - else - { - //Debug.WriteLine($"Folder already exists: {folderPath}"); - } - } - catch (Exception ex) - { - //Debug.WriteLine($"Failed to create folder: {folderPath}. Error: {ex.Message}"); - } - } // Create Folder if Not Exists - - private static void CopyRotatorImages(string targetFolderPath, bool bHomePage = false) - { - string imagesFolderPath = Path.Combine(GetSeedingDirectory(), "SeedImages"); // seeding path - List imagesToCopy = new List { "middleHomeImage.jpg", "rightHomeImage.jpg" }; // for home paqe - - if (!bHomePage) // Rotator Single Image in Folder - { - imagesToCopy.Clear(); - imagesToCopy = new List { "Default.jpg" }; - } - - foreach (string imageName in imagesToCopy) - { - - var imageFileName = imageName; - - if (imagesToCopy.Count == 1) - { - string rotatorFolderName = Path.GetFileName(targetFolderPath); // image rotator name without path - imageFileName = rotatorFolderName + imageFileName; // default rotator image - } - - string sourceImagePath = Path.Combine(imagesFolderPath, imageFileName); - string destinationImagePath = Path.Combine(targetFolderPath, imageFileName); - - try - { - if (File.Exists(sourceImagePath) && !File.Exists(destinationImagePath)) - { - File.Copy(sourceImagePath, destinationImagePath); - //Debug.WriteLine($"Copied image: {imageFileName} to {targetFolderPath}"); - } - else - { - //Debug.WriteLine($"Cannot copy image: {imageFileName} to {targetFolderPath}"); - } - } - catch (Exception ex) - { - //Debug.WriteLine($"Failed to copy image: {imageFileName} to {targetFolderPath}. Error: {ex.Message}"); - } - } - - }//CopyRotatorImages - - - - public static bool MediaSubDirectoryExists(string directoryName) - { - var appRoot = GetMediaDirectory(directoryName); - return Directory.Exists(appRoot); - } public static DirectoryInfo CreateMediaSubDirectory(string directoryName) { @@ -208,22 +52,7 @@ public static void DeleteMediaSubDirectory(string directoryName, bool recursiveD if (Directory.Exists(appRoot)) { Directory.Delete(appRoot, recursiveDelete); } - } // Delete Media SubDirectory - - public static void DeleteMediaFiles(string directoryName) - { - var appRoot = GetMediaDirectory(directoryName); - string[] files = Directory.GetFiles(appRoot); - foreach (string file in files) - { - File.Delete(file); - } - } - public static void CreateDirectory(string targetDir) - { - Directory.CreateDirectory(targetDir); - } - + } public static void DeleteDirectory(string targetDir) { @@ -256,7 +85,10 @@ public static void CopyDirectory(string sourceDirectory, string targetDirectory) private static void CopyAll(DirectoryInfo source, DirectoryInfo target) { - Directory.CreateDirectory(target.FullName); + if (!Directory.Exists(target.FullName)) + { + Directory.CreateDirectory(target.FullName); + } // Copy each file into the new directory. foreach (FileInfo fi in source.GetFiles()) @@ -296,5 +128,35 @@ public static string GetSeedingDirectory() throw new DirectoryNotFoundException("Seeding directory not found. Current directory is : " + AppDomain.CurrentDomain.BaseDirectory); } + + public static void CreateLocationMediaDirectory(Location location) + { + var locationMediaDirectory = FileUtil.GetMediaDirectory(location.Route); + + if (!Directory.Exists(locationMediaDirectory)) + { + Directory.CreateDirectory(locationMediaDirectory); + } + + var locationMediaPagesDirectory = Path.Combine(locationMediaDirectory, Defaults.PagesDirectory); + + if (!Directory.Exists(locationMediaPagesDirectory)) + { + Directory.CreateDirectory(locationMediaPagesDirectory); + } + } + + public static void CopyMediaFromLocation(Location sourceLocation, Location destLocation, string directory) + { + var sourceDirectory = Path.Combine(FileUtil.GetMediaDirectory(sourceLocation.Route), Defaults.PagesDirectory, directory); + var destinationDirectory = Path.Combine(FileUtil.GetMediaDirectory(destLocation.Route), Defaults.PagesDirectory, directory); + + if (!Directory.Exists(sourceDirectory)) + { + throw new DirectoryNotFoundException($"Directory {sourceDirectory} does not exist"); + } + + FileUtil.CopyDirectory(sourceDirectory, destinationDirectory); + } } } diff --git a/BedBrigade.Data/BedBrigade.Data.csproj b/BedBrigade.Data/BedBrigade.Data.csproj index 34245f6e..5234f9ed 100644 --- a/BedBrigade.Data/BedBrigade.Data.csproj +++ b/BedBrigade.Data/BedBrigade.Data.csproj @@ -5,53 +5,6 @@ enable enable - - - - - - - - - - - - - - - - - - - - - - PreserveNewest - true - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - - @@ -85,41 +38,6 @@ - - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - + diff --git a/BedBrigade.Data/Data/Seeding/SeedContentsLogic.cs b/BedBrigade.Data/Data/Seeding/SeedContentsLogic.cs index c7af6864..36ee44a8 100644 --- a/BedBrigade.Data/Data/Seeding/SeedContentsLogic.cs +++ b/BedBrigade.Data/Data/Seeding/SeedContentsLogic.cs @@ -5,8 +5,8 @@ using Microsoft.EntityFrameworkCore; using Serilog; -namespace BedBrigade.Data.Data.Seeding -{ +namespace BedBrigade.Data.Data.Seeding; + public static class SeedContentsLogic { public static async Task SeedContents(IDbContextFactory _contextFactory) @@ -23,16 +23,75 @@ public static async Task SeedContents(IDbContextFactory _contextFac await SeedFooter(context, locations); await SeedAboutPage(context, locations); await SeedHomePage(context, locations); - await SeedDonatePage(context, locations); + await SeedDonationsPage(context, locations); await SeedNationalHistoryPage(context); await SeedNationalLocations(context); - await SeedGroveCityPartners(context); await SeedAssemblyInstructions(context, locations); await SeedThreeRotatorPageTemplate(context); + await SeedGroveCity(context); } } - private static async Task SeedImages(DataContext context) + private static async Task SeedGroveCity(DataContext context) + { + Log.Logger.Information("SeedGroveCity Started"); + var location = await context.Locations.FirstOrDefaultAsync(l => l.LocationId == (int)LocationNumber.GroveCity); + + if (location == null) + { + Console.WriteLine($"Error cannot find location with id: " + LocationNumber.GroveCity); + return; + } + + await SeedContentItem(context, ContentType.Header, location, "Header", "GroveCityHeader.html"); + await SeedContentItem(context, ContentType.Home, location, "Home", "GroveCityHome.html"); + await SeedContentItem(context, ContentType.Body, location, "AboutUs", "GroveCityAboutUs.html"); + await SeedContentItem(context, ContentType.Body, location, "Donations", "GroveCityDonations.html"); + await SeedContentItem(context, ContentType.Body, location, "Assembly-Instructions", "GroveCityAssemblyInstructions.html"); + await SeedContentItem(context, ContentType.Body, location, "Partners", "GroveCityPartners.html"); + await SeedContentItem(context, ContentType.Body, location, "Calendar", "GroveCityCalendar.html"); + await SeedContentItem(context, ContentType.Body, location, "Inventory", "GroveCityInventory.html"); + } + + private static async Task SeedContentItem(DataContext context, + ContentType contentType, + Location location, + string name, string seedHtmlName) + { + if (await context.Content.AnyAsync(c => c.LocationId == location.LocationId && c.Name == name)) + { + return; + } + + string seedHtml = WebHelper.GetHtml(seedHtmlName); + + seedHtml = seedHtml.Replace("%%LocationRoute%%", location.Route.TrimStart('/')); + seedHtml = seedHtml.Replace("%%LocationName%%", location.Name); + + var content = new Content + { + LocationId = location.LocationId, + ContentType = contentType, + Name = name, + ContentHtml = seedHtml, + Title = StringUtil.InsertSpaces(name.Replace("-", " ")) + }; + + SeedRoutines.SetMaintFields(content); + context.Content.Add(content); + + try + { + await context.SaveChangesAsync(); + } + catch (Exception ex) + { + Console.WriteLine($"Error in content {name} for location {location.Name}: {ex.Message}"); + } + } + + + private static async Task SeedImages(DataContext context) { Log.Logger.Information("SeedImages Started"); @@ -57,7 +116,12 @@ private static async Task SeedHeader(DataContext context, List locatio foreach (var location in locations) { - bool alreadyAdded = + if (location.LocationId == (int)LocationNumber.GroveCity) + { + continue; + } + + bool alreadyAdded = await context.Content.AnyAsync(c => c.Name == name && c.LocationId == location.LocationId); if (alreadyAdded) continue; @@ -154,6 +218,11 @@ private static async Task SeedHomePage(DataContext context, List locat { foreach (var location in locations) { + if (location.LocationId == (int)LocationNumber.GroveCity) + { + continue; + } + string seedHtml; switch (location.LocationId) @@ -269,76 +338,23 @@ private static async Task SeedNationalLocations(DataContext context) - private static async Task SeedGroveCityPartners(DataContext context) - { - Log.Logger.Information("SeedGroveCityPartners Started"); - - var name = "Partners"; - if (!await context.Content.AnyAsync(c => c.Name == name)) - { - - var seedHtml = WebHelper.GetHtml("Partners.html"); - var content = new Content - { - LocationId = (int)LocationNumber.GroveCity, - ContentType = ContentType.Body, - Name = name, - ContentHtml = seedHtml, - Title = "Partners" - }; - - SeedRoutines.SetMaintFields(content); - context.Content.Add(content); - try - { - await context.SaveChangesAsync(); - } - catch (Exception ex) - { - Console.WriteLine($"Error in content {ex.Message}"); - } - } - } private static async Task SeedAssemblyInstructions(DataContext context, List locations) { Log.Logger.Information("SeedAssemblyInstructions Started"); - var name = "Assembly"; - if (!await context.Content.AnyAsync(c => c.Name == name)) - { - foreach (var location in locations) - { - //Assembly instructions are location specific - if (location.LocationId == (int)LocationNumber.National) - { - continue; - } - - var seedHtml = WebHelper.GetHtml("LocationAssembly.html"); - - var content = new Content - { - LocationId = location.LocationId!, - ContentType = ContentType.Body, - Name = name, - ContentHtml = seedHtml, - Title = "Assembly Instructions" - }; - SeedRoutines.SetMaintFields(content); - - context.Content.Add(content); - } + var name = "Assembly-Instructions"; - try - { - await context.SaveChangesAsync(); - } - catch (Exception ex) + foreach (var location in locations) + { + //Do not seed National. Grove City has it's own + if (location.LocationId == (int)LocationNumber.National + || location.LocationId == (int) LocationNumber.GroveCity) { - Console.WriteLine($"Error in content {ex.Message}"); + continue; } + await SeedContentItem(context, ContentType.Body, location, name, "LocationAssemblyInstructions.html"); } } @@ -353,7 +369,12 @@ private static async Task SeedAboutPage(DataContext context, List loca foreach (var location in locations) { - if (location.LocationId == (int)LocationNumber.National) + if (location.LocationId == (int)LocationNumber.GroveCity) + { + continue; + } + + if (location.LocationId == (int)LocationNumber.National) { seedHtml = WebHelper.GetHtml("AboutUs.html"); } @@ -389,45 +410,20 @@ private static async Task SeedAboutPage(DataContext context, List loca } } - private static async Task SeedDonatePage(DataContext context, List locations) + private static async Task SeedDonationsPage(DataContext context, List locations) { Log.Logger.Information("SeedDonatePage Started"); var name = "Donations"; - if (!await context.Content.AnyAsync(c => c.Name == name)) - { - foreach (var location in locations) - { - //We don't take donations at the national level - if (location.LocationId == (int)LocationNumber.National) - continue; - - var seedHtml = WebHelper.GetHtml("LocationDonate.html"); - - var content = new Content - { - LocationId = location.LocationId!, - ContentType = ContentType.Body, - Name = name, - ContentHtml = seedHtml, - Title = "Donate To Bed Brigade" - }; - - content.ContentHtml = content.ContentHtml.Replace("%%LocationRoute%%", location.Route.TrimStart('/')); - content.ContentHtml = content.ContentHtml.Replace("%%LocationName%%", location.Name); - SeedRoutines.SetMaintFields(content); - context.Content.Add(content); - } + foreach (var location in locations) + { + //We don't take donations at the national level + if (location.LocationId == (int)LocationNumber.National + || location.LocationId == (int)LocationNumber.GroveCity) + continue; - try - { - await context.SaveChangesAsync(); - } - catch (Exception ex) - { - Console.WriteLine($"Error in content {ex.Message}"); - } + await SeedContentItem(context, ContentType.Body, location, name, "LocationDonations.html"); } } @@ -460,4 +456,4 @@ private static async Task SeedThreeRotatorPageTemplate(DataContext context) } } } -} + diff --git a/BedBrigade.Data/Data/Seeding/SeedHtml/Footer.html b/BedBrigade.Data/Data/Seeding/SeedHtml/Footer.html index 83703a12..e9e5272e 100644 --- a/BedBrigade.Data/Data/Seeding/SeedHtml/Footer.html +++ b/BedBrigade.Data/Data/Seeding/SeedHtml/Footer.html @@ -40,41 +40,25 @@

QUICK LINKS

- diff --git a/BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityAboutUs.html b/BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityAboutUs.html new file mode 100644 index 00000000..bec98384 --- /dev/null +++ b/BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityAboutUs.html @@ -0,0 +1,80 @@ +
+
+
+
+ + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +
+ +
+

About Us

+

%%LocationName%%

+
+ +
+
+ +
+
+ + +
+
+ + +
+ +
+ +
+

We Build and Deliver Beds for people who need them, all over the Columbus area. Bed Brigade Columbus began in Grove City, Ohio with a Church camp experience for teenagers (see History). Today, there are people all over the Columbus area who are sleeping on the floor, on broken air mattresses, on a couch, or sharing a bed with siblings or parents. 

We want to give them each their own personal, safe place to sleep. But, more than wood, more than just a mattress, we want to come alongside families and let them know that God sees them and cares for them, and so do we. You can make a difference by partnering with us. We want to use our talents and resources to follow Jesus, to serve God and our community, and to see God’s Kingdom come in Columbus, Ohio.

Many volunteers who come are amazed at how simple it is to Build a Bed and lift someone off the ground. We have thought this bed building process through, and volunteers with a desire to serve can successfully Build a Bed even if they’ve never previously used a cordless drill! 

We Build Beds on the first or second Saturdays of each month. It takes about 2 1/2 hours to Build 40 Beds on a Saturday morning. You can help assemble legs, attach them to side rails, attach hinge plates to side rails, headboards and footboards, help inspect and assemble Beds, and/or decorate footboards. You can sign up by clicking on the “Volunteer” button.

You can also help by Volunteering to help with Bed Delivery. We Deliver Beds on almost all non-holiday Saturdays. It takes about 2 1/2 hours to gather materials, pray, Deliver and Assemble Beds. Besides giving the dignity of a Bed, you will make a lasting impact for Jesus!

If you have a Delivery vehicle, that is super helpful. A mini-van with the middle seats removed and a back seat that folds down is ideal to Deliver 4-5 Beds. Larger SUVs also work very well (Suburban, Expedition, Escalade, Navigator, etc). A full size pickup with tie down straps or a Cap can carry 4-5 Beds. 

You can also help by donating. We always have a use for Beginner Bibles and pre-reader Bibles. Youth groups, Churches and families have hosted Bedding drives (Twin XL sheet sets), pillow drives, Bibles drives, and blanket-tying parties. Youth groups, athletic teams and home Bible studies have decorated footboards. 

We always appreciate cash donations to help purchase lumber to Build Beds, and to purchase bedding. There are no paid staff at Bed Brigade Columbus. We are all volunteers. Please let us know how you would like to get involved.

+ +
+ +
+
+ +
+
+
+ + +
\ No newline at end of file diff --git a/BedBrigade.Data/Data/Seeding/SeedHtml/LocationAssembly.html b/BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityAssemblyInstructions.html similarity index 78% rename from BedBrigade.Data/Data/Seeding/SeedHtml/LocationAssembly.html rename to BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityAssemblyInstructions.html index 20a1cc11..1e8bdb41 100644 --- a/BedBrigade.Data/Data/Seeding/SeedHtml/LocationAssembly.html +++ b/BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityAssemblyInstructions.html @@ -12,7 +12,7 @@
- OSB + OSB
@@ -24,7 +24,7 @@
- Hinge + Hinge
@@ -36,7 +36,7 @@
- Bed + Bed
@@ -46,7 +46,7 @@

Assembly Instructions

- +

%%LocationName%%

@@ -68,7 +68,7 @@

Assembly Instructions

- +
@@ -80,7 +80,7 @@

Assembly Instructions

- +
@@ -100,7 +100,7 @@

Assembly Instructions

- +
@@ -112,7 +112,7 @@

Assembly Instructions

- +
@@ -122,7 +122,7 @@

Assembly Instructions

 

-

  1. Remove Plastic Wrap from Bed Frame Package
  2. Unfold the Hinged Ends of the Frame
  3. Remove pins from the 2 unmatched hinges, leave the assembled pair, as – is
  4. Align, and assemble the 2 corner hinges, insert pins, drive down but not quite flush
  5. Insert 2” x 3” Slats on each END of Frame
  6. Insert 2” x 4” Center Slat, Middle of Frame, Align with Nails and Holes and insert
  7. Insert /Place  Partial Board Flat Boards over Slats… Equally Spaced
  8. Place Mattress - Centered in Frame
  9. Bedding, Pillow, Sheets, and Blanket… Enjoy !!!!!!

Download Assembly Instructions

+

  1. Remove Plastic Wrap from Bed Frame Package
  2. Unfold the Hinged Ends of the Frame
  3. Remove pins from the 2 unmatched hinges, leave the assembled pair, as – is
  4. Align, and assemble the 2 corner hinges, insert pins, drive down but not quite flush
  5. Insert 2” x 3” Slats on each END of Frame
  6. Insert 2” x 4” Center Slat, Middle of Frame, Align with Nails and Holes and insert
  7. Insert /Place  Partial Board Flat Boards over Slats… Equally Spaced
  8. Place Mattress - Centered in Frame
  9. Bedding, Pillow, Sheets, and Blanket… Enjoy !!!!!!

Download Assembly Instructions

 

diff --git a/BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityCalendar.html b/BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityCalendar.html new file mode 100644 index 00000000..d30bd57c --- /dev/null +++ b/BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityCalendar.html @@ -0,0 +1,21 @@ + + +

Bed Brigade Grove City Calendar

+ +
Turn your phone sideways for a better view
+ +
+ +
\ No newline at end of file diff --git a/BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityDonations.html b/BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityDonations.html new file mode 100644 index 00000000..209dfc05 --- /dev/null +++ b/BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityDonations.html @@ -0,0 +1,88 @@ +
+ +
+ + +
+
+ + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +
+ +
+

Donate to %%LocationName%%

+
+ +
+
+ +
+
+ + +
+
+ + +
+ +
+ +
+

Monetary Donations

It takes around $100 of materials to build and dress a bed.  Make a donation today to make a difference in the life of someone in need right here in our city.  

+

+

Donate

+ +


Physical Donations

Bed Brigade also needs these physical items to complete a bed.

  • New Pillows
  • New Twin XL Sheet Sets
  • New Twin XL Blankets
  • Stuffed Animals
  • Bibles or Bible Stories for Children

If you would like to purchase or donate any of these items please contact us and we will make arrangements to drop off your donation.

+ +

Contact Us

+ +
+ +
+
+ +
+
+
+ + +
\ No newline at end of file diff --git a/BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityFooter.html b/BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityFooter.html new file mode 100644 index 00000000..83703a12 --- /dev/null +++ b/BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityFooter.html @@ -0,0 +1,113 @@ + diff --git a/BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityHeader.html b/BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityHeader.html new file mode 100644 index 00000000..2bf85cbe --- /dev/null +++ b/BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityHeader.html @@ -0,0 +1,90 @@ +
+ +
+ +
+
\ No newline at end of file diff --git a/BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityHistory.html b/BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityHistory.html new file mode 100644 index 00000000..2f90906c --- /dev/null +++ b/BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityHistory.html @@ -0,0 +1,82 @@ +
+
+ + +
+
+ + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +
+ +
+

History of Bed Brigade

+

%%LocationName%%

+
+ +
+
+ +
+
+ + +
+
+ + +
+ +
+ +
+

In 2012, St. John's Lutheran (Grove City, Ohio) teenagers went to Church Summer Camp and had a life changing experience. St John’s Lutheran Church participated in Transformation Zone, a consortium of churches who learned about Jesus and served God together.

Some of the teens were assigned to Build and Deliver Beds through Bed Brigade Circleville, with their chaperone, Jeff Stenerson. They loved the work and the impact this ministry had. They asked if Bed Brigade received calls from Columbus. Several times that summer, Jeff drove down to Circleville to learn more about their ministry. The Circleville Vineyard (Bed Brigade) met each Wednesday to Build and deliver beds. 

By the time Fall rolled around, their pastor, Ron Van Horn was talking with Jeff about starting a chapter of Bed Brigade in Grove City to serve the greater Columbus area. Circleville Bed Brigade came to St Johns and helped us plant a new chapter. They even provided mattresses to help us get off to a good start.

With a small team of about 5 men the vision to Build and Deliver Beds had gained significant traction. After prayer and deliberation, they addressed the congregation at St. John's and raised money to Build and Deliver 40 Beds.

Early on, a significant problem was obtaining mattresses. This became quite a concern. We partnered with Bed Brigade out of  Upper Arlington Lutheran Church. Since about 2014, Dale Cory has made sure that we always have mattresses to pair with our frames.

Bed Brigade established a strong connection with Franklin County Children’s Services and referrals began to stream in. So we Built more Beds. Support for this ministry grew with significant material donations from Hager Hinge Co. They donate roughly 2000 hinges each year. ODW - Dis Trans donated semi trailers to store mattresses. Dis-Trans will send a driver to local colleges and universities to pick up mattresses. With partners like this, and the generous support of St John’s Evangelical Lutheran Church, we are able to ensure that roughly $0.95 of every dollar donated goes to Build or Dress a Bed.

Bed Brigade Columbus was born and established. Since 2012, we have Built and Delivered more than 4000 beds. Today, we Build and Deliver roughly 500 Beds every year. 

If you’ve paid attention, you already know it’s not just about a Bed. We want to come alongside families and let them know that they are not in this struggle on their own. We are here to help them because God sees them. He loves them and He cares for them. As Christians, we are called to help the least and the lost. As Jesus has shown love to us, we are to share that love with others. Bed Brigade is a perfect fit.

We could not do this on our own. Bed Brigade partners with a variety of Churches and Civic groups in the Columbus area. Youth groups get together to tie blankets, decorate footboards, collect Bibles and bedding, they Build and Deliver Beds. There is no paid staff at Bed Brigade Columbus. Our Builds are staffed by volunteers. Deliveries are staffed by volunteers. You can learn more about friends who help us under our ‘Partners’ heading.

If you are interested in helping us see God’s Kingdom come in the Columbus area, click on the ‘Volunteer’ button. Beds cost roughly $100 to Build and Deliver. You can make a one time donation to sponsor a Bed, or an ongoing donation to help children each month. We hope to see you soon!

+ +
+ +
+
+ +
+
+
+ + +
\ No newline at end of file diff --git a/BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityHome.html b/BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityHome.html new file mode 100644 index 00000000..615df8e1 --- /dev/null +++ b/BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityHome.html @@ -0,0 +1,184 @@ +
+
+
+
+
+
+
+
+
+
+

The Bed Brigade of Grove City

+

We Provide a Safe Place to Sleep for All People

+
+
+
+
+
+ +
+
+
+ sliderRotator +
+
+
+
+
+
+ +
+
+
+
+
+

+ ALL Children Deserve an Equal Opportunity to Succeed in Life +

+
+
+ +
+
+
+
+
+

We are ready to Build a Bed for you.

+ Request A Bed +
+
+
+
+

+ We need delivery teams each week and build teams each + month. +

+ Volunteer +
+
+
+
+

+ We appreciate your partnership in creating a safe place to + sleep. +

+

Donate

+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ Image + work-img1.jpg +
+ +
+
+
+
+
+

Building and Delivering Beds Since 2012

+

+ Bed Brigade is a non-profit charity that Builds and Delivers + Beds for those that need them.  If you are in need of a + Bed, Bed Brigade is ready to serve you.   +

+ +

About Us

+
+
+
+
+
+ +
+
+
+
+
+
+ Ministry +
+ +
+
+
+
+
+

+ A Ministry Started by St. Johns Lutheran Church Grove City +

+

+ Bed Brigade Columbus was started in 2012 by St. Johns Lutheran + Church in Grove City, Ohio.  Since its inception we have + Built and Delivered thousands of Beds. Our chapter of Bed + Brigade was planted by the original Bed Brigade in Circleville, + Ohio +

+

History of Bed Brigade

+
+
+
+
+
+
+
diff --git a/BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityInventory.html b/BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityInventory.html new file mode 100644 index 00000000..fdd5f79b --- /dev/null +++ b/BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityInventory.html @@ -0,0 +1,21 @@ + + +

Bed Brigade Grove City Inventory

+ +
Turn your phone sideways for a better view
+ +
+ +
diff --git a/BedBrigade.Data/Data/Seeding/SeedHtml/Partners.html b/BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityPartners.html similarity index 96% rename from BedBrigade.Data/Data/Seeding/SeedHtml/Partners.html rename to BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityPartners.html index 2b96e2bd..27061320 100644 --- a/BedBrigade.Data/Data/Seeding/SeedHtml/Partners.html +++ b/BedBrigade.Data/Data/Seeding/SeedHtml/GroveCityPartners.html @@ -15,7 +15,7 @@
- Teamwork + Teamwork
@@ -27,7 +27,7 @@
- Heart + Heart
@@ -39,7 +39,7 @@
- Hope + Hope
@@ -49,7 +49,7 @@

Partners

- +

%%LocationName%%

diff --git a/BedBrigade.Data/Data/Seeding/SeedHtml/Header.html b/BedBrigade.Data/Data/Seeding/SeedHtml/Header.html index 9390930f..be989554 100644 --- a/BedBrigade.Data/Data/Seeding/SeedHtml/Header.html +++ b/BedBrigade.Data/Data/Seeding/SeedHtml/Header.html @@ -18,11 +18,14 @@ +