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);
        }
示例#2
0
        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);
            }
        }
示例#7
0
        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);
        }
示例#9
0
        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>*/);
        }
示例#10
0
        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);
            }
        }
示例#11
0
        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);
            }
        }