/// <summary> /// Uses reflection to instantiate the IFieldGutter class /// </summary> /// <param name="nameSpace"></param> /// <param name="assemblyName"></param> /// <param name="validationNode"></param> /// <returns></returns> protected IMultiVariantMapping GetItem_FromReflection(string nameSpace, string assemblyName, XmlNode validationNode) { // load the assemly Assembly assembly = GetAssembly(assemblyName); // Walk through each type in the assembly looking for our class Type type = assembly.GetType(nameSpace); if (type == null || !type.IsClass) { return(null); } object[] parameters = new object[1]; parameters[0] = validationNode; //cast to class IMultiVariantMapping multiVariantMapping = (IMultiVariantMapping)Activator.CreateInstance(type, parameters); if (multiVariantMapping == null) { return(null); } return(multiVariantMapping); }
private IMultiVariantMapping GetItem_FromXmlNode(XmlNode validationNode) { if (validationNode.Name != "VariantMapping" || validationNode.Attributes["type"] == null || validationNode.Attributes["template"] == null || validationNode.Attributes["variantTemplate"] == null) { return(null); } string variantTemplate = validationNode.Attributes["variantTemplate"].Value; if (string.IsNullOrEmpty(variantTemplate)) { return(null); } //check to verify that xml was not malformed string fullNameSpace = validationNode.Attributes["type"].Value; if (string.IsNullOrEmpty(fullNameSpace)) { return(null); } //verify we can break up the type string into a namespace and assembly name string[] split = fullNameSpace.Split(','); if (split.Length == 0) { return(null); } string nameSpace = split[0]; string assemblyName = split[1]; IMultiVariantMapping multiVariantMapping = GetItem_FromReflection(nameSpace, assemblyName, validationNode); if (multiVariantMapping == null) { return(null); } return(multiVariantMapping); }
public void RunInsertPipeline(ClientPipelineArgs args) { if (!args.IsPostBack) { Sitecore.Context.ClientPage.ClientResponse.Input("Enter a name for the new variant: ", string.Empty); args.WaitForPostBack(); } else { if (!args.HasResult || args.Result == null) { return; } //verify valid name string nameError = ItemUtil.GetItemNameError(args.Result); if (!string.IsNullOrEmpty(nameError)) { SheerResponse.Alert(nameError, new string[0]); return; } string newItemName = args.Result; string currentItemId = args.Parameters["currentid"]; Item currentItem = Sitecore.Context.ContentDatabase.GetItem(currentItemId); if (currentItem.IsNull()) { return; } MultiVariantProcessor processor = new MultiVariantProcessor(); IMultiVariantMapping multiVariantMapping = processor.GetMapping(currentItem.TemplateID.ToString(), Sitecore.Context.ContentDatabase); if (multiVariantMapping == null) { return; } //create a new item to be used as variant multiVariantMapping.CreateVariantItem(currentItem, newItemName); } }
protected void SetContent(ClientPipelineArgs args) { Predicate <VariableValueItemStub> match = null; Predicate <VariableValueItemStub> predicate2 = null; ID id; string str = args.Parameters["variationid"]; if (string.IsNullOrEmpty(str)) { SheerResponse.Alert("Item not found.", new string[0]); } else { id = ShortID.DecodeID(str); if (args.IsPostBack) { if (args.HasResult) { List <VariableValueItemStub> variableValues = VariableValues; if (match == null) { match = v => v.Id == id; } VariableValueItemStub stub = variableValues.Find(match); if (stub != null) { stub.Datasource = args.Result; var output = new HtmlTextWriter(new StringWriter()); RenderContentControls(output, stub); SheerResponse.SetOuterHtml(str + "_content", output.InnerWriter.ToString()); VariableValues = variableValues; } } } else { if (predicate2 == null) { predicate2 = v => v.Id == id; } VariableValueItemStub stub2 = VariableValues.Find(predicate2); if ((stub2 != null) && ((Rendering != null) && !string.IsNullOrEmpty(Rendering.ItemID))) { Item renderingItem = Client.ContentDatabase.GetItem(Rendering.ItemID); if (renderingItem == null) { SheerResponse.Alert("Item not found.", new string[0]); } else { //get current content item Item variantSourceItem = (ContextItemUri == null) ? null : Client.ContentDatabase.GetItem(ContextItemUri.ToDataUri()); if (variantSourceItem.IsNotNull()) { //use variant mapping functionality to find proper source MultiVariantProcessor processor = new MultiVariantProcessor(); IMultiVariantMapping mapping = processor.GetMapping(variantSourceItem.TemplateID.ToString(), Client.ContentDatabase); if (mapping != null) { //set mapping variantSourceItem = mapping.VariantSource(variantSourceItem); } } var args3 = new GetRenderingDatasourceArgs(renderingItem); args3.FallbackDatasourceRoots = new List <Item> { variantSourceItem }; args3.ContentLanguage = ((variantSourceItem != null) ? variantSourceItem.Language : null); args3.ContextItemPath = (variantSourceItem != null) ? variantSourceItem.Paths.FullPath : string.Empty; args3.ShowDialogIfDatasourceSetOnRenderingItem = true; args3.CurrentDatasource = (string.IsNullOrEmpty(stub2.Datasource) ? Rendering.Datasource : stub2.Datasource); GetRenderingDatasourceArgs args2 = args3; CorePipeline.Run("getRenderingDatasource", args2); if (string.IsNullOrEmpty(args2.DialogUrl)) { SheerResponse.Alert("An error ocurred.", new string[0]); } else { SheerResponse.ShowModalDialog(args2.DialogUrl, "460px", "460px", string.Empty, true); args.WaitForPostBack(); } } } } } }