Skip to content

Instantly share code, notes, and snippets.

@jonathanread
Created December 1, 2014 15:51
Show Gist options
  • Save jonathanread/7d10a8fd72b0e68c0a65 to your computer and use it in GitHub Desktop.
Save jonathanread/7d10a8fd72b0e68c0a65 to your computer and use it in GitHub Desktop.
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