public ActionResult Create(Client client, bool? populateThemes, bool? populatePageTemplates, bool? populateSampleWebForms)
        {
            //check if client name or folder is already taken
            ValidateClientName(client);
            ValidateClientFolder(client);

            if (ModelState.IsValid)
            {
                IGstoreDb db = GStoreDb;
                client = db.Clients.Create(client);
                client.UpdateAuditFields(CurrentUserProfileOrThrow);
                client = db.Clients.Add(client);
                AddUserMessage("Client Added", "Client '" + client.Name.ToHtml() + "' [" + client.ClientId + "] created successfully!", UserMessageType.Success);
                db.SaveChanges();

                string clientFolderVirtualPath = client.ClientVirtualDirectoryToMap(Request.ApplicationPath);
                try
                {
                    client.CreateClientFolders(Request.ApplicationPath, Server);
                    AddUserMessage("Client Folders Created", "Client Folders were created in '" + clientFolderVirtualPath.ToHtml(), UserMessageType.Success);
                }
                catch (Exception ex)
                {
                    AddUserMessage("Error Creating Client Folders!", "There was an error creating client folders in '" + clientFolderVirtualPath.ToHtml() + "'. You will need to create the folder manually. Error: " + ex.Message.ToHtml(), UserMessageType.Warning);
                }

                if (populateThemes.HasValue && populateThemes.Value)
                {
                    List<Theme> newThemes = db.CreateSeedThemes(client);
                    AddUserMessage("Populated Themes", "New Themes added: " + newThemes.Count, UserMessageType.Success);
                }
                if (populatePageTemplates.HasValue && populatePageTemplates.Value)
                {
                    List<PageTemplate> newPageTemplates = db.CreateSeedPageTemplates(client);
                    AddUserMessage("Populated Page Templates", "New Page Templates added: " + newPageTemplates.Count, UserMessageType.Success);
                }
                if (populateSampleWebForms.HasValue && populateSampleWebForms.Value)
                {
                    List<WebForm> newWebForms = db.CreateSeedWebForms(client);
                    AddUserMessage("Populated Simple Web Forms", "New Forms added: " + newWebForms.Count, UserMessageType.Success);
                }

                return RedirectToAction("Index");
            }
            this.BreadCrumbsFunc = html => this.ClientBreadcrumb(html, 0, false, "New");
            return View(client);
        }
        public ActionResult Edit(Client client, bool? populateThemes, bool? populatePageTemplates, bool? populateSampleWebForms)
        {
            ValidateClientName(client);
            ValidateClientFolder(client);

            if (ModelState.IsValid)
            {
                IGstoreDb db = GStoreDb;
                Client originalValues = db.Clients.Single(c => c.ClientId == client.ClientId);
                string originalFolderName = originalValues.Folder;
                string originalFolderToMap = originalValues.ClientVirtualDirectoryToMap(Request.ApplicationPath);

                client.UpdateAuditFields(CurrentUserProfileOrThrow);
                client = db.Clients.Update(client);
                AddUserMessage("Client Updated", "Client '" + client.Name.ToHtml() + "' [" + client.ClientId + "] updated!", UserMessageType.Success);
                db.SaveChanges();

                if (populateThemes.HasValue && populateThemes.Value)
                {
                    List<Theme> newThemes = db.CreateSeedThemes(client);
                    AddUserMessage("Populated Themes", "New Themes added: " + newThemes.Count, UserMessageType.Success);
                }
                if (populatePageTemplates.HasValue && populatePageTemplates.Value)
                {
                    List<PageTemplate> newPageTemplates = db.CreateSeedPageTemplates(client);
                    AddUserMessage("Populated Page Templates", "New Page Templates added: " + newPageTemplates.Count, UserMessageType.Success);
                }
                if (populateSampleWebForms.HasValue && populateSampleWebForms.Value)
                {
                    List<WebForm> newWebForms = db.CreateSeedWebForms(client);
                    AddUserMessage("Populated Simple Web Forms", "New Forms added: " + newWebForms.Count, UserMessageType.Success);
                }
                string originalClientFolder = Server.MapPath(originalFolderToMap);
                string newClientFolder = Server.MapPath(client.ClientVirtualDirectoryToMap(Request.ApplicationPath));

                if (client.Folder == originalFolderName && !System.IO.Directory.Exists(newClientFolder))
                {
                    client.CreateClientFolders(Request.ApplicationPath, Server);
                    AddUserMessage("Folders Created", "Client folders were not found, so they were created in '" + client.ClientVirtualDirectoryToMap(Request.ApplicationPath).ToHtml() + "'", UserMessageType.Info);
                }
                else if (client.Folder != originalFolderName)
                {
                    //detect if folder name has changed

                    //default behavior is to move the old folder to the new name
                    if (System.IO.Directory.Exists(originalClientFolder))
                    {
                        try
                        {
                            System.IO.Directory.Move(originalClientFolder, newClientFolder);
                            AddUserMessage("Folder Moved", "Client folder name was changed, so the client folder was moved from '" + originalFolderToMap.ToHtml() + "' to '" + client.ClientVirtualDirectoryToMap(Request.ApplicationPath).ToHtml() + "'", UserMessageType.Success);
                        }
                        catch (Exception ex)
                        {
                            AddUserMessage("Error Moving Client Folder!", "There was an error moving the client folder from '" + originalFolderToMap.ToHtml() + "' to '" + client.ClientVirtualDirectoryToMap(Request.ApplicationPath).ToHtml() + "'. You will need to move the folder manually. Error: " + ex.Message, UserMessageType.Warning);
                        }
                    }
                    else
                    {
                        try
                        {
                            client.CreateClientFolders(Request.ApplicationPath, Server);
                            AddUserMessage("Folders Created", "Client folders were created: " + client.ClientVirtualDirectoryToMap(Request.ApplicationPath).ToHtml(), UserMessageType.Info);
                        }
                        catch (Exception ex)
                        {
                            AddUserMessage("Error Creating Client Folders!", "There was an error creating the client folders in '" + client.ClientVirtualDirectoryToMap(Request.ApplicationPath).ToHtml() + "'. You will need to create the folders manually. Error: " + ex.Message, UserMessageType.Warning);
                        }
                    }
                }
                else
                {
                    client.CreateClientFolders(Request.ApplicationPath, Server);
                }

                return RedirectToAction("Index");
            }
            this.BreadCrumbsFunc = html => this.ClientBreadcrumb(html, client.ClientId, false);
            return View(client);
        }