Created
December 1, 2014 15:51
-
-
Save jonathanread/7d10a8fd72b0e68c0a65 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.IO; | |
using System.Linq; | |
using System.Threading; | |
using System.Web.UI; | |
using Telerik.Sitefinity; | |
using Telerik.Sitefinity.Abstractions; | |
using Telerik.Sitefinity.Libraries.Model; | |
using Telerik.Sitefinity.Modules.GenericContent; | |
using Telerik.Sitefinity.Modules.GenericContent.Web.UI; | |
using Telerik.Sitefinity.Modules.Libraries; | |
using Telerik.Sitefinity.Modules.Pages; | |
using Telerik.Sitefinity.Pages.Model; | |
using Telerik.Sitefinity.Workflow; | |
using Telerik.Sitefinity.Model; | |
using Telerik.Sitefinity.Web.UI.PublicControls; | |
using Telerik.Sitefinity.Web.UI; | |
using Telerik.Sitefinity.Localization; | |
using Telerik.Sitefinity.DynamicModules; | |
using Telerik.Sitefinity.Utilities.TypeConverters; | |
using Telerik.Sitefinity.DynamicModules.Model; | |
using Telerik.Sitefinity.GeoLocations.Model; | |
using Telerik.Sitefinity.Security; | |
using Telerik.Sitefinity.GenericContent.Model; | |
using SitefinityWebApp; | |
using SitefinityWebApp.Custom; | |
namespace SitefinityWebApp.Custom | |
{ | |
public partial class CreatePartnerPages : System.Web.UI.Page | |
{ | |
private PageManager pageManager = PageManager.GetManager(); | |
private ContentManager contentManager = ContentManager.GetManager(); | |
private LibrariesManager librariesManager = LibrariesManager.GetManager(); | |
private DynamicModuleManager dynamicModuleManager = DynamicModuleManager.GetManager(); | |
private enum Columns | |
{ | |
Left, | |
Right, | |
Center | |
}; | |
protected void Page_Load(object sender, EventArgs e) | |
{ | |
string partnerName = "Jon's Bakery"; | |
Response.Write("Started at: " + DateTime.Now + "</br>"); | |
var partnersNode = pageManager.GetPageNodes().Where(p => p.Title.ToString() == "Partners" && p.NodeType == NodeType.Group).FirstOrDefault(); | |
var pageTemplate = pageManager.GetTemplates().Where(t => t.Title == "Partner").FirstOrDefault(); | |
if (partnersNode != null && pageTemplate != null) | |
{ | |
var parentPartnerNode = CreatePage(partnerName, false, partnersNode.Id, pageTemplate); | |
if (parentPartnerNode != null) | |
{ | |
var library = librariesManager.GetAlbums().Where(a => a.Title.ToString() == "Partner Images").FirstOrDefault(); | |
if (library != null) | |
{ | |
FileStream fileStream = new FileStream("C:\\Work\\TestProject\\main\\jb.png", FileMode.Open); | |
FileStream fileStream2 = new FileStream("C:\\Work\\TestProject\\main\\mainImg.jpg", FileMode.Open); | |
string imageTitle = (partnerName.ToUrlName() + "-Logo"); | |
Image image = CreateImageAndAlbum(library.Id, imageTitle, fileStream, partnerName); | |
Address address = new Address(); | |
address.City = "Fort Wayne"; | |
address.CountryCode = "US"; | |
address.StateCode = "IN"; | |
address.Street = "201 W. Main St."; | |
address.Zip = "46802"; | |
//var partner = CreatePartner(partnerName, "123-456-7890", "", "#0015FF", "", image.Id, false, address); | |
ContentBlock logoContentBlock = new ContentBlock() | |
{ | |
Html = string.Format("<a href='{0}'><img src='{1}' title='{2}' alt='{2}'/></a>", | |
parentPartnerNode.GetUrl(), | |
image.MediaUrl, | |
partnerName.Replace("'", "")) | |
}; | |
AddControlToPage(parentPartnerNode.Id, logoContentBlock, "LogoPlaceHolder", "Content Block"); | |
AddControlToPage(parentPartnerNode.Id, new LoginWidget(), "HeaderRightPlaceHolder", "Login"); | |
AddLayoutControlToPage(parentPartnerNode.Id, new LayoutControl(), "MainPlaceHolder", "2 Column"); | |
var resources = ResourceManager.GetManager(); | |
var partnerRegisterDefaultText = resources.GetResourceOrEmpty(Thread.CurrentThread.CurrentCulture, "PageResources", "PartnerRegisterDefaultText"); | |
if (!string.IsNullOrEmpty(partnerRegisterDefaultText.Value)) | |
{ | |
string html = string.Format(partnerRegisterDefaultText.Value, parentPartnerNode.GetUrl()); | |
AddControlToLayout(parentPartnerNode.Id, "2 Column", new ContentBlock() { Html = html }, Columns.Left); | |
} | |
var partnerNeedHelpDefaultText = resources.GetResourceOrEmpty(Thread.CurrentThread.CurrentCulture, "PageResources", "PartnerNeedHelpDefaultText"); | |
if (!string.IsNullOrEmpty(partnerNeedHelpDefaultText.Value)) | |
{ | |
AddControlToLayout(parentPartnerNode.Id, "2 Column", new ContentBlock() { Html = partnerNeedHelpDefaultText.Value }, Columns.Left); | |
} | |
string imageTitle2 = (partnerName.ToUrlName() + "-Main"); | |
Image image2 = CreateImageAndAlbum(library.Id, imageTitle2, fileStream2, partnerName); | |
ImageControl ic = new ImageControl() { ImageId = image2.Id }; | |
AddControlToLayout(parentPartnerNode.Id, "2 Column", ic, Columns.Right); | |
AddControlToLayout(parentPartnerNode.Id, "2 Column", new ContentBlock() { Html = "" }, Columns.Right); | |
} | |
var registerStudentnode = CreatePage("Register as a Student", true, parentPartnerNode.Id, pageTemplate); | |
var registerSubContractorNode = CreatePage("Register a Subcontractor Company", true, parentPartnerNode.Id, pageTemplate); | |
} | |
else | |
{ | |
Response.Write("Partner " + partnerName + " Already Exists!!!<br/>"); | |
} | |
} | |
Response.Write("Ended at: " + DateTime.Now); | |
} | |
/// <summary> | |
/// | |
/// </summary> | |
/// <param name="pageId"></param> | |
/// <param name="layoutName"></param> | |
/// <param name="content"></param> | |
/// <param name="column"></param> | |
private void AddControlToLayout(Guid pageId, string layoutName, Control control, Enum column) | |
{ | |
var page = pageManager.GetPageNodes().Where(p => p.Id == pageId).SingleOrDefault(); | |
if (page != null) | |
{ | |
var temp = pageManager.EditPage(page.Page.Id); | |
if (temp != null) | |
{ | |
var layoutControl = temp.Controls.Where(c => c.IsLayoutControl && c.Caption == layoutName).FirstOrDefault(); | |
if (column.Equals(Columns.Left)) | |
{ | |
AddControlToPage(pageId, control, layoutControl.PlaceHolders[0], "Content Block"); | |
} | |
else if (column.Equals(Columns.Right)) | |
{ | |
AddControlToPage(pageId, control, layoutControl.PlaceHolders[1], "Content Block"); | |
} | |
else | |
{ | |
AddControlToPage(pageId, control, layoutControl.PlaceHolders[0], "Content Block"); | |
} | |
} | |
} | |
} | |
/// <summary> | |
/// Creates image | |
/// </summary> | |
/// <param name="masterImageId"></param> | |
/// <param name="parentAlbumId"></param> | |
/// <param name="imageTitle"></param> | |
/// <param name="imageStream"></param> | |
/// <param name="imageExtension"></param> | |
/// <returns>returns live image</returns> | |
private Image CreateImageAndAlbum(Guid parentAlbumId, string imageTitle, FileStream imageStream, string partnerAlbumName) | |
{ | |
var image = librariesManager.GetImages().Where(i => i.Title == imageTitle).FirstOrDefault(); | |
if (image == null) | |
{ | |
image = librariesManager.CreateImage(); | |
//Set the parent album. | |
Album parentAlbum = librariesManager.GetAlbums().Where(i => i.Id == parentAlbumId).SingleOrDefault(); | |
IFolder companyFolder = CreateChildFolder(partnerAlbumName.Replace("'", ""), parentAlbum); | |
image.Parent = parentAlbum; | |
image.FolderId = companyFolder.Id; | |
//Set the properties of the album post. | |
image.Title = imageTitle; | |
image.AlternativeText = partnerAlbumName; | |
image.DateCreated = DateTime.UtcNow; | |
image.PublicationDate = DateTime.UtcNow; | |
image.LastModified = DateTime.UtcNow; | |
image.UrlName = imageTitle.ToUrlName(); | |
var ext = Path.GetExtension(imageStream.Name); | |
//Upload the image file. | |
librariesManager.Upload(image, imageStream, Path.GetExtension(imageStream.Name)); | |
//Save the changes. | |
librariesManager.SaveChanges(); | |
//Publish the Albums item. The live version acquires new ID. | |
var bag = new Dictionary<string, string>(); | |
bag.Add("ContentType", typeof(Image).FullName); | |
WorkflowManager.MessageWorkflow(image.Id, typeof(Image), null, "Publish", false, bag); | |
return librariesManager.GetImages().Where(i => i.OriginalContentId == image.Id).FirstOrDefault(); | |
} | |
else | |
{ | |
return image; | |
} | |
} | |
/// <summary> | |
/// | |
/// </summary> | |
/// <param name="companyAlbumTitle"></param> | |
/// <param name="parentAlbum"></param> | |
/// <returns></returns> | |
private IFolder CreateChildFolder(string companyAlbumTitle, Album parentAlbum) | |
{ | |
var folder = librariesManager.GetChildFolders(parentAlbum).Where(f => f.Title == companyAlbumTitle).FirstOrDefault(); | |
//var folder = librariesManager.CreateFolder(parentAlbum); | |
if (folder == null) | |
{ | |
folder = librariesManager.CreateFolder(parentAlbum); | |
folder.Title = companyAlbumTitle; | |
folder.UrlName = companyAlbumTitle.ToUrlName(); | |
librariesManager.SaveChanges(); | |
return folder; | |
} | |
return folder; | |
} | |
/// <summary> | |
/// | |
/// </summary> | |
/// <param name="pageName"></param> | |
/// <param name="showInNav"></param> | |
/// <param name="parentPageNodeId"></param> | |
/// <param name="pageTemplate"></param> | |
/// <returns></returns> | |
private PageNode CreatePage(string pageName, bool showInNav, Guid parentPageNodeId, PageTemplate pageTemplate) | |
{ | |
var pageDataId = Guid.NewGuid(); | |
Guid pageId = Guid.NewGuid(); | |
PageData pageData = null; | |
PageNode pageNode = null; | |
// Get the parent node Id | |
if (parentPageNodeId == Guid.Empty) | |
{ | |
parentPageNodeId = SiteInitializer.CurrentFrontendRootNodeId; | |
} | |
PageNode parent = pageManager.GetPageNode(parentPageNodeId); | |
// Check whether exists | |
var initialPageNode = pageManager.GetPageNodes().Where(n => n.Name == pageName && n.ParentId == parentPageNodeId).SingleOrDefault(); | |
if (initialPageNode != null) | |
{ | |
return null; | |
} | |
// Create the page | |
pageData = pageManager.CreatePageData(pageDataId); | |
pageData.HtmlTitle = pageName; | |
pageData.Title = pageName; | |
pageData.Description = pageName; | |
pageData.Culture = Thread.CurrentThread.CurrentCulture.ToString(); | |
pageData.UiCulture = Thread.CurrentThread.CurrentUICulture.ToString(); | |
pageData.Template = pageTemplate; | |
pageData.Theme = "TestProject"; | |
pageNode = pageManager.CreatePage(parent, pageId, NodeType.Standard); | |
pageNode.Page = pageData; | |
pageNode.Name = pageName; | |
pageNode.Description = pageName; | |
pageNode.Title = pageName; | |
pageNode.UrlName = pageName.ToUrlName(); | |
pageNode.ShowInNavigation = showInNav; | |
pageNode.DateCreated = DateTime.UtcNow; | |
pageNode.LastModified = DateTime.UtcNow; | |
pageNode.ApprovalWorkflowState = "Draft"; | |
pageManager.SaveChanges(); | |
return pageNode; | |
// Publish if using workflows | |
//var bag = new Dictionary<string, string>(); | |
//bag.Add("ContentType", typeof(PageNode).FullName); | |
//WorkflowManager.MessageWorkflow(pageId, typeof(PageNode), null, "Draft", false, bag); | |
} | |
/// <summary> | |
/// | |
/// </summary> | |
/// <param name="pageNodeId"></param> | |
/// <param name="control"></param> | |
/// <param name="placeHolder"></param> | |
/// <param name="caption"></param> | |
private void AddControlToPage(Guid pageNodeId, Control control, string placeHolder, string caption) | |
{ | |
var page = pageManager.GetPageNodes().Where(p => p.Id == pageNodeId).SingleOrDefault(); | |
if (page != null) | |
{ | |
var temp = pageManager.EditPage(page.Page.Id); | |
if (temp != null) | |
{ | |
if (string.IsNullOrEmpty(control.ID)) | |
{ | |
control.ID = GenerateUniqueControlIdForPage(temp); | |
} | |
var pageControl = pageManager.CreateControl<PageDraftControl>(control, placeHolder); | |
pageControl.Caption = caption; | |
pageControl.SiblingId = GetLastControlInPlaceHolderInPageId(temp, placeHolder); | |
pageManager.SetControlDefaultPermissions(pageControl); | |
temp.Controls.Add(pageControl); | |
pageManager.PagesLifecycle.CheckIn(temp); | |
pageManager.SaveChanges(); | |
// Publish if using workflows | |
//var bag = new Dictionary<string, string>(); | |
//bag.Add("ContentType", typeof(PageNode).FullName); | |
//WorkflowManager.MessageWorkflow(pageNodeId, typeof(PageNode), null, "Publish", false, bag); | |
} | |
} | |
} | |
private void AddLayoutControlToPage(Guid pageNodeId, Control control, string placeHolder, string caption) | |
{ | |
var page = pageManager.GetPageNodes().Where(p => p.Id == pageNodeId).SingleOrDefault(); | |
if (page != null) | |
{ | |
var temp = pageManager.EditPage(page.Page.Id); | |
if (temp != null) | |
{ | |
if (string.IsNullOrEmpty(control.ID)) | |
{ | |
control.ID = GenerateUniqueControlIdForPage(temp); | |
} | |
var pageControl = pageManager.CreateControl<PageDraftControl>(control, placeHolder); | |
pageControl.Caption = caption; | |
pageControl.SiblingId = GetLastControlInPlaceHolderInPageId(temp, placeHolder); | |
pageControl.IsLayoutControl = true; | |
pageControl.ObjectType = "Telerik.Sitefinity.Web.UI.LayoutControl, Telerik.Sitefinity"; | |
pageManager.SetControlDefaultPermissions(pageControl); | |
var prop = pageManager.CreateProperty(); | |
prop.Name = "Layout"; | |
prop.Value = "~/SFRes/Telerik.Sitefinity.Resources.Templates.Layouts.Column2Template1.ascx"; | |
pageControl.Properties.Add(prop); | |
var c = pageControl.PlaceHolders.Count(); | |
temp.Controls.Add(pageControl); | |
pageManager.PagesLifecycle.CheckIn(temp); | |
pageManager.SaveChanges(); | |
// Publish if using workflows | |
//var bag = new Dictionary<string, string>(); | |
//bag.Add("ContentType", typeof(PageNode).FullName); | |
//WorkflowManager.MessageWorkflow(pageNodeId, typeof(PageNode), null, "Publish", false, bag); | |
} | |
} | |
} | |
/// <summary> | |
/// | |
/// </summary> | |
/// <param name="pageDraft"></param> | |
/// <returns></returns> | |
private string GenerateUniqueControlIdForPage(PageDraft pageDraft) | |
{ | |
int controlsCount = 0; | |
if (pageDraft != null) | |
{ | |
controlsCount = pageDraft.Controls.Count; | |
} | |
return String.Format("C" + controlsCount.ToString().PadLeft(3, '0')); | |
} | |
/// <summary> | |
/// | |
/// </summary> | |
/// <param name="pageDraft"></param> | |
/// <param name="placeHolder"></param> | |
/// <returns></returns> | |
private Guid GetLastControlInPlaceHolderInPageId(PageDraft pageDraft, string placeHolder) | |
{ | |
var id = Guid.Empty; | |
PageDraftControl control; | |
var controls = new List<PageDraftControl>(pageDraft.Controls.Where(c => c.PlaceHolder == placeHolder)); | |
while (controls.Count > 0) | |
{ | |
control = controls.Where(c => c.SiblingId == id).SingleOrDefault(); | |
id = control.Id; | |
controls.Remove(control); | |
} | |
return id; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment