/// <summary> /// Builds content for internal fields /// </summary> /// <param name="subitem"></param> /// <param name="resultText"></param> private void InternalFieldContentBuilder(Item subitem, StringBuilder resultText) { //Get all the fields for an item var fields = subitem.Fields; fields.ReadAll(); fields.Sort(); foreach (Field field in fields) { if (!field.Name.StartsWith("__")) { string fieldSource = DetermineFieldSource(field); switch (field.Type) { case "Droptree": var treeCtrl = new Tree(); treeCtrl.ItemID = subitem.ID.ToString(); treeCtrl.ID = string.Format("ExpressSubitem_{0:N}{1:N}", field.ID.Guid, subitem.ID.Guid); treeCtrl.Source = field.Source; treeCtrl.Disabled = Disabled; var sources = GetSources(subitem, field); var sourceId = Guid.Empty; if (sources.Any()) { sourceId = sources[0].ID.Guid; } Sitecore.Context.ClientPage.AddControl(this, treeCtrl); treeCtrl.Value = field.Value; resultText.AppendFormat(Prototypes.Tree, field.DisplayName, treeCtrl.RenderAsText(), treeCtrl.ID, field.ID, sourceId, fieldSource); break; case "File": var fileCtrl = new File(); fileCtrl.ID = string.Format("ExpressSubitem_{0:N}{1:N}", field.ID.Guid, subitem.ID.Guid); Sitecore.Context.ClientPage.AddControl(this, fileCtrl); fileCtrl.SetValue(field.Value); fileCtrl.Disabled = Disabled; resultText.AppendFormat(Prototypes.StandardWrapper, field.DisplayName, fileCtrl.RenderAsText(), fileCtrl.ID, field.ID, RenderMenuButtons(fileCtrl.ID, field, ReadOnly), "file", fieldSource); break; case "Image": var imageCtrl = new Sitecore.Shell.Applications.ContentEditor.Image(); imageCtrl.ID = string.Format("ExpressSubitem_{0:N}{1:N}", field.ID.Guid, subitem.ID.Guid); Sitecore.Context.ClientPage.AddControl(this, imageCtrl); imageCtrl.ItemLanguage = ItemLanguage; imageCtrl.ItemVersion = ItemVersion; imageCtrl.SetValue(field.Value); imageCtrl.Disabled = Disabled; resultText.AppendFormat(Prototypes.StandardWrapper, field.DisplayName, imageCtrl.RenderAsText(), imageCtrl.ID, field.ID, RenderMenuButtons(imageCtrl.ID, field, ReadOnly), "image", fieldSource); break; case "Multilist": var multiListCtrl = new MultilistEx(); multiListCtrl.ItemID = subitem.ID.ToString(); multiListCtrl.ID = string.Format("ExpressSubitem_{0:N}{1:N}", field.ID.Guid, subitem.ID.Guid); multiListCtrl.SetValue(field.Value); multiListCtrl.Source = field.Source; Sitecore.Context.ClientPage.AddControl(this, multiListCtrl); multiListCtrl.Disabled = Disabled; multiListCtrl.ItemLanguage = subitem.Language.Name; resultText.AppendFormat(Prototypes.StandardWrapper, field.DisplayName, multiListCtrl.RenderAsText(), multiListCtrl.ID, field.ID, RenderMenuButtons(multiListCtrl.ID, field, ReadOnly), "multilist", fieldSource); break; case "Treelist": var treelistCtrl = new TreeList(); treelistCtrl.ItemID = subitem.ID.ToString(); treelistCtrl.ID = string.Format("ExpressSubitem_{0:N}{1:N}", field.ID.Guid, subitem.ID.Guid); treelistCtrl.ItemLanguage = ItemLanguage; treelistCtrl.SetValue(field.Value); treelistCtrl.Source = field.Source; treelistCtrl.Disabled = Disabled; Sitecore.Context.ClientPage.AddControl(this, treelistCtrl); resultText.AppendFormat(Prototypes.StandardWrapper, field.DisplayName, treelistCtrl.RenderAsText(), treelistCtrl.ID, field.ID, RenderMenuButtons(treelistCtrl.ID, field, ReadOnly), "treelist", fieldSource); break; case "Datetime": case "Date": var dateCtrl = field.Type == "Date" ? new Date() : new Sitecore.Shell.Applications.ContentEditor.DateTime(); dateCtrl.ItemID = subitem.ID.ToString(); dateCtrl.ID = string.Format("ExpressSubitem_{0:N}{1:N}", field.ID.Guid, subitem.ID.Guid); dateCtrl.Disabled = Disabled; Sitecore.Context.ClientPage.AddControl(this, dateCtrl); dateCtrl.SetValue(field.Value); resultText.AppendFormat(Prototypes.Date, field.DisplayName, dateCtrl.RenderAsText(), dateCtrl.ID, field.ID, RenderMenuButtons(dateCtrl.ID, field, ReadOnly), fieldSource); break; case "Rich Text": var richTextCtrl = new RichText(); richTextCtrl.ItemID = subitem.ID.ToString(); richTextCtrl.ItemLanguage = ItemLanguage; richTextCtrl.ItemVersion = subitem.Version.ToString(); richTextCtrl.FieldID = field.ID.ToString(); richTextCtrl.ID = string.Format("ExpressSubitem_{0:N}{1:N}", field.ID.Guid, subitem.ID.Guid); richTextCtrl.Disabled = Disabled; Sitecore.Context.ClientPage.AddControl(this, richTextCtrl); // Fixing Sitecore bug for no value field if (field.Value == "__#!$No value$!#__") { using (new SecurityDisabler()) { using (new EditContext(subitem)) { field.Value = ""; } } } richTextCtrl.Value = field.Value; resultText.AppendFormat(Prototypes.RichText, field.DisplayName, richTextCtrl.RenderAsText(), richTextCtrl.ID, field.ID, RenderMenuButtons(richTextCtrl.ID, field, ReadOnly), fieldSource); break; case "Single-Line Text": case "Integer": resultText.AppendFormat(Prototypes.TextBox, field.DisplayName, field.ID, field.Value, Disabled ? "disabled='disabled'" : "", fieldSource); break; case "Droplink": bool selectionInList; string options = BuildDropdownOptions(subitem, field, out selectionInList); string errorMessage = ""; if (!selectionInList) { errorMessage = @"<DIV style=""PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: #999999; PADDING-TOP: 2px"">The field contains a value that is not in the selection list.</DIV>"; } resultText.AppendFormat(Prototypes.Dropdown, field.DisplayName, field.ID, options, Disabled ? "disabled='disabled'" : "", errorMessage, fieldSource); break; case "Checkbox": var @checked = ((CheckboxField)field).Checked; resultText.AppendFormat(Prototypes.Checkbox, field.DisplayName, field.ID, @checked ? "checked" : "", Disabled ? "disabled='disabled'" : "", fieldSource); break; default: resultText.AppendFormat("<div class=\"unknown-field\">Unknown field type of \"{0}\" for field \"{1}\"</div>", field.Type, field.Name); break; } } } }