public CustomItemBase GetImportToTemplate() { CustomItemBase template = null; //check field value string templateID = ImportItem.GetItemField("Import To What Template", Logger); if (string.IsNullOrEmpty(templateID)) { Logger.Log("the 'To What Template' field is not set", ImportItem.Paths.FullPath, LogType.ImportDefinitionError, "Import To What Template"); return(null); } //check template item Item templateItem = ToDB.Items[templateID]; if (templateItem.IsNull()) { Logger.Log("the 'To What Template' item is null", ImportItem.Paths.FullPath, LogType.ImportDefinitionError, "Import To What Template"); return(null); } //determine template item type if ((BranchItem)templateItem != null) { template = (BranchItem)templateItem; } else { template = (TemplateItem)templateItem; } return(template); }
private Item HandleDelete(Item newItem, string newItemName, CustomItemBase nItemTemplate, Item parent, object importRow) { if (PreserveChildren) { var temp = parent.Add("temp", new TemplateID(TemplateIDs.StandardTemplate)); foreach (Item child in newItem.Children.Where(x => x.TemplateID != ComponentsFolderTemplateId)) { child.MoveTo(temp); } newItem.Delete(); newItem = ItemManager.AddFromTemplate(newItemName, nItemTemplate.ID, parent, ((Item)importRow).ID); foreach (Item child in temp.Children) { child.MoveTo(newItem); } temp.Delete(); } else { newItem.Delete(); newItem = null; } return(newItem); }
public void CreateNewItem(Item parent, object importRow, string newItemName) { CustomItemBase nItemTemplate = GetNewItemTemplate(importRow); using (new LanguageSwitcher(ImportToLanguage)) { //get the parent in the specific language parent = SitecoreDB.GetItem(parent.ID); Item newItem; //search for the child by name newItem = parent.GetChildren()[newItemName]; if (newItem != null) //add version for lang { newItem = newItem.Versions.AddVersion(); } //if not found then create one if (newItem == null) { if (nItemTemplate is BranchItem) { newItem = parent.Add(newItemName, (BranchItem)nItemTemplate); } else { newItem = parent.Add(newItemName, (TemplateItem)nItemTemplate); } } if (newItem == null) { throw new NullReferenceException("the new item created was null"); } using (new EditContext(newItem, true, false)) { //add in the field mappings foreach (IBaseField d in this.FieldDefinitions) { try { IEnumerable <string> values = GetFieldValues(d.GetExistingFieldNames(), importRow); string importValue = String.Join(d.GetFieldValueDelimiter(), values); if (!string.IsNullOrEmpty(importValue)) { d.FillField(this, ref newItem, importValue); } } catch (Exception ex) { Log("Field Level Error", $"item '{newItem.DisplayName}', field '{d.ItemName()}'"); } } //calls the subclass method to handle custom fields and properties ProcessCustomData(ref newItem, importRow); } } }
public bool IsDescendantOf(IStandardTemplateItem item) { CustomItemBase itemBase = item as CustomItemBase; if (itemBase == null) throw new ArgumentException("Can't get the item from the passed template. Make sure it derives from CustomItemBase."); return _axes.IsDescendantOf(itemBase.InnerItem); }
/// <summary> /// Gets the friendly URL of the item. /// </summary> /// <param name="item">The context item.</param> /// <returns>The url of the current item.</returns> public static string GetUrl(this CustomItemBase item) { if (item?.InnerItem != null) { return(GetUrl(item.InnerItem)); } return(string.Empty); }
public virtual Item CreateNewItem(Item parent, object importRow, string newItemName) { CustomItemBase nItemTemplate = GetNewItemTemplate(importRow); using (new LanguageSwitcher(ImportToLanguage)) { //get the parent in the specific language parent = ToDB.GetItem(parent.ID); Item newItem; //search for the child by name newItem = GetChild(parent, newItemName); if (newItem != null) //add version for lang { newItem = newItem.Versions.AddVersion(); } //if not found then create one if (newItem == null) { if (nItemTemplate is BranchItem) { newItem = parent.Add(newItemName, (BranchItem)nItemTemplate); } else { newItem = parent.Add(newItemName, (TemplateItem)nItemTemplate); } } if (newItem == null) { throw new NullReferenceException("the new item created was null"); } using (new EditContext(newItem, true, false)) { //add in the field mappings List <IBaseField> fieldDefs = GetFieldDefinitionsByRow(importRow); foreach (IBaseField d in fieldDefs) { string importValue = string.Empty; try { IEnumerable <string> values = GetFieldValues(d.GetExistingFieldNames(), importRow); importValue = String.Join(d.GetFieldValueDelimiter(), values); d.FillField(this, ref newItem, importValue); } catch (Exception ex) { Logger.Log(newItem.Paths.FullPath, "the FillField failed", ProcessStatus.FieldError, d.ItemName(), importValue); } } //calls the subclass method to handle custom fields and properties ProcessCustomData(ref newItem, importRow); } return(newItem); } }
private static void LoadAssetsAndInit(CustomItemBase item, AssetBundle bundle, Dictionary <string, string> loreText) { GameObject prefab = bundle.LoadAsset <GameObject>(item.PrefabPath); Sprite pickupSprite = bundle.LoadAsset <Sprite>(item.IconPath); if (prefab == null) { NModMain.Log.LogError($"NModLoader Found no Prefab at {item.PrefabPath}"); } if (pickupSprite == null) { NModMain.Log.LogError($"NModLoader Found no Sprite at {item.IconPath}"); } var itemDef = ScriptableObject.CreateInstance <ItemDef>(); itemDef.name = item.InternalName; itemDef.pickupModelPrefab = prefab; itemDef.pickupIconSprite = pickupSprite; itemDef.nameToken = item.NameToken; itemDef.pickupToken = item.PickupToken; itemDef.descriptionToken = item.DescriptionToken; itemDef.loreToken = item.LoreToken; itemDef.canRemove = item.CanRemove; itemDef.hidden = item.Hidden; itemDef.tier = item.Tier; itemDef.tags = item.Tags; var displayRules = item.GetItemDisplayRules(prefab); var ci = new CustomItem(itemDef, displayRules); if (!ItemAPI.Add(ci)) { NModMain.Log.LogError($"ItemAPI.Add returned false for {item.InternalName}"); } var attrib = item.GetType().GetCustomAttribute <NModItemAttribute>(); LanguageAPI.Add(item.NameToken, attrib.FriendlyName); LanguageAPI.Add(item.PickupToken, attrib.PickupText); LanguageAPI.Add(item.DescriptionToken, attrib.Description); LanguageAPI.Add(item.LoreToken, attrib.LoreText ?? (loreText.ContainsKey(item.InternalName) ? loreText[item.InternalName] : DEFAULT_LORE)); }
public virtual Item CreateNewItem(Item parent, object importRow, string newItemName) { CustomItemBase nItemTemplate = GetNewItemTemplate(importRow); Item newItem; using (new LanguageSwitcher(ImportToLanguage)) { //get the parent in the specific language parent = ToDB.GetItem(parent.ID); //search for the child by name newItem = GetChild(parent, newItemName); if (newItem?.Versions.Count == 0) //add version for lang { newItem = newItem.Versions.AddVersion(); } //if not found then create one if (newItem == null) { if (nItemTemplate is BranchItem) { newItem = parent.Add(newItemName, (BranchItem)nItemTemplate); } else { newItem = parent.Add(newItemName, (TemplateItem)nItemTemplate); } } if (newItem == null) { throw new NullReferenceException("the new item created was null"); } } return(newItem); }
internal void WriteCustomItem(CustomItemBase item) { var newline = item as CustomItemNewline; if (newline != null) { for (int i = 0; i < newline.Count; i++) { _writer.WriteElementString("NewLine", ""); } return; } var text = item as CustomItemText; if (text != null) { _writer.WriteElementString("Text", text.Text); return; } var expr = item as CustomItemExpression; if (expr != null) { _writer.WriteStartElement("ExpressionBinding"); if (expr.EnumerateCollection) { _writer.WriteElementString("EnumerateCollection", ""); } if (expr.ItemSelectionCondition != null) { _writer.WriteStartElement("ItemSelectionCondition"); WriteDisplayEntry(expr.ItemSelectionCondition); _writer.WriteEndElement(/*</ItemSelectionCondition>*/); } if (expr.Expression != null) { WriteDisplayEntry(expr.Expression); } if (expr.CustomControl != null) { WriteCustomControl(expr.CustomControl); } _writer.WriteEndElement(/*</ExpressionBinding>*/); return; } var frame = (CustomItemFrame)item; _writer.WriteStartElement("Frame"); if (frame.LeftIndent != 0) { _writer.WriteElementString("LeftIndent", frame.LeftIndent.ToString(CultureInfo.InvariantCulture)); } if (frame.RightIndent != 0) { _writer.WriteElementString("RightIndent", frame.RightIndent.ToString(CultureInfo.InvariantCulture)); } if (frame.FirstLineHanging != 0) { _writer.WriteElementString("FirstLineHanging", frame.FirstLineHanging.ToString(CultureInfo.InvariantCulture)); } if (frame.FirstLineIndent != 0) { _writer.WriteElementString("FirstLineIndent", frame.FirstLineIndent.ToString(CultureInfo.InvariantCulture)); } _writer.WriteStartElement("CustomItem"); foreach (var frameItem in frame.CustomItems) { WriteCustomItem(frameItem); } _writer.WriteEndElement(/*</CustomItem>*/); _writer.WriteEndElement(/*</Frame>*/); }
public override Item CreateNewItem(Item parent, object importRow, string newItemName) { CustomItemBase nItemTemplate = GetNewItemTemplate(importRow); newItemName = RewritePath(newItemName); using (new LanguageSwitcher(ImportToLanguage)) { //get the parent in the specific language parent = ToDB.GetItem(parent.ID); Item newItem; //search for the child by name if (AllowItemNameMatch) { newItem = GetChild(parent, newItemName); } else { newItem = ToDB.GetItem(((Item)importRow).ID); } if (newItem != null) //add version for lang { if (DeleteOnOverwrite) { newItem = HandleDelete(newItem, newItemName, nItemTemplate, parent, importRow); } else { if (newItem.ParentID != parent.ID) { newItem.MoveTo(parent); } newItem = newItem.Versions.AddVersion(); } } //if not found then create one if (newItem == null) { newItem = ItemManager.AddFromTemplate(newItemName, nItemTemplate.ID, parent, GetItemID(((Item)importRow))); } if (newItem == null) { throw new NullReferenceException("the new item created was null"); } //if found and is default template, change it to the correct one if (newItem.TemplateID == ImportToWhatTemplate.ID && nItemTemplate.ID != ImportToWhatTemplate.ID) { using (new EditContext(newItem, true, false)) { newItem.ChangeTemplate(new TemplateItem(nItemTemplate.InnerItem)); } } using (new EditContext(newItem, true, false)) { ProcessFields(importRow, newItem); } using (new EditContext(newItem, true, false)) { ProcessReferenceFields(ref newItem, importRow); } using (new EditContext(newItem, true, false)) { ProcessComponents(newItem, importRow); } using (new EditContext(newItem, true, false)) { //calls the subclass method to handle custom fields and properties ProcessCustomData(ref newItem, importRow); } Logger.Log("SitecoreDataMap.CreateNewItem", $"Import ID:{((Item) importRow).ID.Guid}, Import Path:{((Item)importRow).Paths.FullPath}, New ID:{newItem.ID.Guid}, New Path:{newItem.Paths.FullPath}"); return(newItem); } }
public Item CreateNewItem(Item parent, object importRow, string newItemName) { CustomItemBase nItemTemplate = GetNewItemTemplate(importRow); using (new LanguageSwitcher(ImportToLanguage)) { //get the parent in the specific language parent = ToDB.GetItem(parent.ID); Item newItem; //search for the child by name newItem = GetChild(parent, newItemName); var dict = new Dictionary <string, bool>(); // Check if item exists, flag article number field as not to update if (newItem != null) { if (newItem.Fields["Legacy Sitecore ID"]?.Value == (importRow as Item)?.ID.ToString()) { dict.Add("Article Number", false); } } //if not found then create one if (newItem == null) { if (nItemTemplate is BranchItem) { newItem = parent.Add(newItemName, (BranchItem)nItemTemplate); } else { newItem = parent.Add(newItemName, (TemplateItem)nItemTemplate); } } if (newItem == null) { throw new NullReferenceException("the new item created was null"); } using (new EditContext(newItem, true, false)) { //add in the field mappings List <IBaseField> fieldDefs = GetFieldDefinitionsByRow(importRow); SetFieldUpdateFlags(fieldDefs, dict); fieldDefs = fieldDefs.Where(i => i.DoUpdate).ToList(); foreach (IBaseField d in fieldDefs) { string importValue = string.Empty; try { IEnumerable <string> values = GetFieldValues(d.GetExistingFieldNames(), importRow); importValue = String.Join(d.GetFieldValueDelimiter(), values); string id = string.Empty; if (importRow is Item) { id = (importRow as Item).ID.ToString(); } d.FillField(this, ref newItem, importValue, id); } catch (Exception ex) { Logger.Log(newItem.Paths.FullPath, "the FillField failed", ProcessStatus.FieldError, d.ItemName(), importValue); } } //calls the subclass method to handle custom fields and fields ProcessCustomData(ref newItem, importRow); } return(newItem); } }