protected virtual void AddChildIDsForContactFacetItem(IDList ids, ItemDefinition itemDefinition, CallContext context)
        {
            var facetName = IDTableHelper.GetFacetName(itemDefinition.ID);
            var contractType = ContactFacetHelper.GetContractTypeForFacet(facetName);
            
            foreach (string memberName in FacetReflectionUtil.NonFacetMemberNames(contractType))
            {
                var id = IDTableHelper.GenerateIdForFacetMember(memberName, itemDefinition.ID,
                            Sitecore.Strategy.Contacts.DataProviders.TemplateIDs.ContactFacetMemberTemplate);

                ids.Add(id);
            }

            foreach (string memberName in FacetReflectionUtil.FacetMemberNames(contractType))
            {
                foreach (
                    string subMemberName in
                        FacetReflectionUtil.NonFacetMemberNames(contractType.GetProperty(memberName).PropertyType))
                {
                    string key = $"{memberName}{NestedFacets.Delimeter}{subMemberName}";

                    var id = IDTableHelper.GenerateIdForFacetMember(key, itemDefinition.ID,
                        Sitecore.Strategy.Contacts.DataProviders.TemplateIDs.ContactFacetMemberTemplate);

                    ids.Add(id);
                }
            }
        }
Esempio n. 2
0
        public override Collections.IDList GetChildIDs(Data.ItemDefinition itemDefinition, CallContext context)
        {
            IDList currentChildIDs = context.CurrentResult as IDList;
            IDList idList = new IDList();
            XPathNavigator element = (XPathNavigator)courseCache[itemDefinition.ID];// CourseData.SelectSingleNode(string.Format("//course[@id='{0}']", itemDefinition.ID.ToString()));
            if (element != null)
            {
                context.Abort();
                XPathNodeIterator childCourses = element.Select("./courses/course");
                foreach (XPathNavigator childCourse in childCourses)
                {
                    ID id = ID.Parse(childCourse.GetAttribute("id", string.Empty));
                    idList.Add(id);
                }
            }
            else if (itemDefinition.ID.ToString() == ParentItemID)
            {
                context.Abort();
                XPathNodeIterator childCourses = CourseData.Select("/courses/course");
                foreach (XPathNavigator childCourse in childCourses)
                {
                    ID id = ID.Parse(childCourse.GetAttribute("id", string.Empty));
                    idList.Add(id);
                }
            }

            return idList;
        }
 protected virtual void AddChildIDsForContactFacetsRootItem(IDList ids, ItemDefinition itemDefinition, CallContext context)
 {
     var facetNames = ContactFacetHelper.GetFacetNames();
     foreach (var name in facetNames)
     {
         var id = IDTableHelper.GenerateIdForFacet(name, itemDefinition.ID, Sitecore.Strategy.Contacts.DataProviders.TemplateIDs.ContactFacetTemplate);
         ids.Add(id);
     }
 }
Esempio n. 4
0
        protected virtual void AddChildIDsForContactFacetsRootItem(IDList ids, ItemDefinition itemDefinition, CallContext context)
        {
            var facetNames = ContactFacetHelper.GetFacetNames();

            foreach (var name in facetNames)
            {
                var id = IDTableHelper.GenerateIdForFacet(name, itemDefinition.ID, Sitecore.Strategy.Contacts.DataProviders.TemplateIDs.ContactFacetTemplate);
                ids.Add(id);
            }
        }
 void AddAllActions(IDList list, ControllerType controllerType, IDList existingList)
 {
     foreach (var action in ControllerAction.GetAllActions(controllerType.Id))
     {
         if (!existingList.Contains(new ID(action.Id)))
         {
             list.Add(new ID(action.Id));
         }
     }
 }
        void AddAllNamespaces(IDList list, CallContext context)
        {
            var sqlProvider = GetSqlProvider(Database);

            foreach (var nspace in ControllerType.GetAllNamespaces().Where(s =>
            {
                return(GetSqlVersion(new ID(s.Key), context, sqlProvider) == null);
            }))
            {
                list.Add(new ID(nspace.Key));
            }
        }
Esempio n. 7
0
        public static IDList <NameableObject> getSqlObjectsFromDataTable(Type clazz, DataTable dataTable)
        {
            IDList <NameableObject> list = new IDList <NameableObject>();

            foreach (DataRow row in dataTable.Rows)
            {
                NameableObject sqlObject = (NameableObject)Activator.CreateInstance(clazz);
                sqlObject.loadFormDataRow(row);
                list.Add(sqlObject);
            }
            return(list);
        }
        public ProductsDataProvider(ILoggingService log, ProductNodeSitecoreItemFactory itemFactory, IList <ITemplateFieldValueProvider> valueProviders)
        {
            _log         = log;
            _itemFactory = itemFactory;
            _firstLevelIds.Add(FieldIds.Product.ProductsRootFolderId);

            _sitecoreItems = new ConcurrentDictionary <ID, ISitecoreItem>();

            _productValueProvider = valueProviders.OfType <ProductTemplatesBuilder>().First();
            _variantValueProvider = valueProviders.OfType <ProductVariantTemplatesBuilder>().First();

            WeAreReady = false;
        }
 public override IDList GetChildIDs(ItemDefinition itemDefinition, CallContext context)
 {
     if (itemDefinition != null && itemDefinition.ID == JoinParentId)
     {
         IDList childIDs = new IDList();
         foreach (ID id in Items.Keys)
         {
             childIDs.Add(id);
         }
         return(childIDs);
     }
     return(null);
 }
        private void AddItemsToDictionary(ISitecoreItem sitecoreItem)
        {
            _sitecoreItems[sitecoreItem.Id] = sitecoreItem;

            if (sitecoreItem.IsTemplate())
            {
                _idList.Add(sitecoreItem.Id);
            }

            foreach (var child in sitecoreItem.Children)
            {
                AddItemsToDictionary(child);
            }
        }
Esempio n. 11
0
        /// <summary>
        /// Gets the child I ds section.
        /// </summary>
        /// <param name="section">The section.</param>
        /// <param name="context">The context.</param>
        /// <param name="sqlProvider">The SQL provider.</param>
        /// <returns>
        /// IDList.
        /// </returns>
        private IDList GetChildIDsSection(SectionInfo section, CallContext context, DataProvider sqlProvider)
        {
            var cls      = TypeConfigurations.First(x => x.Value.TemplateId == section.TemplateId).Value;
            var fields   = cls.Properties.OfType <SitecoreFieldConfiguration>();
            var fieldIds = new IDList();

            foreach (var field in fields)
            {
                if (field.PropertyInfo.DeclaringType != cls.Type)
                {
                    continue;
                }

                if (field.CodeFirst && field.SectionName == section.Name && !ID.IsNullOrEmpty(field.FieldId))
                {
                    var record = FieldTable.FirstOrDefault(x => x.FieldId == field.FieldId);
                    //test if the fields exists in the database: if so, we're using codefirst now, so remove it.
                    var existing = sqlProvider.GetItemDefinition(field.FieldId, context);
                    if (existing != null)
                    {
                        using (new SecurityDisabler())
                            sqlProvider.DeleteItem(existing, context);
                    }

                    if (record == null)
                    {
                        string fieldName = field.FieldName.IsNullOrEmpty() ? field.PropertyInfo.Name : field.FieldName;

                        record = new FieldInfo(field.FieldId, section.SectionId, fieldName, field.FieldType, field.CustomFieldType,
                                               field.FieldSource, field.FieldTitle, field.IsShared, field.IsUnversioned,
                                               field.FieldSortOrder, field.ValidationRegularExpression,
                                               field.ValidationErrorText, field.IsRequired);

                        if (field.FieldValueConfigs != null && field.FieldValueConfigs.Any())
                        {
                            foreach (var ffv in field.FieldValueConfigs)
                            {
                                record.FieldFieldValues.Add(ffv.FieldId, ffv.FieldValue);
                            }
                        }
                    }

                    fieldIds.Add(record.FieldId);
                    FieldTable.Add(record);
                }
            }

            return(fieldIds);
        }
        void AddAllActions(IDList list, ControllerType controllerType, CallContext context)
        {
            var sqlProvider = GetSqlProvider(Database);

            foreach (var action in ControllerAction.GetAllActions(controllerType.Id).Where(a =>
            {
                return(GetSqlVersion(new ID(a.Id), context, sqlProvider) == null);
            }))
            {
                if (!list.Contains(new ID(action.Id)))
                {
                    list.Add(new ID(action.Id));
                }
            }
        }
        private IDList GetChildIDsTemplate(SitecoreClassConfig template, ItemDefinition itemDefinition, CallContext context)
        {
            IDList fields = new IDList();

            List <string> processed = new List <string>();
            var           sections  = template.Properties
                                      .Where(x => x.Property.DeclaringType == template.Type)
                                      .Select(x => x.Attribute).OfType <SitecoreFieldAttribute>()
                                      .Select(x => new { x.SectionName, x.SectionSortOrder });

            var providers     = Database.GetDataProviders();
            var otherProvider = providers.FirstOrDefault(x => !(x is GlassDataProvider));
            //If sitecore contains a section with the same name in the database, use that one instead of creating a new one
            var existing = otherProvider.GetChildIDs(itemDefinition, context).OfType <ID>().Select(id => otherProvider.GetItemDefinition(id, context)).ToList();

            foreach (var section in sections)
            {
                if (processed.Contains(section.SectionName) || section.SectionName.IsNullOrEmpty())
                {
                    continue;
                }

                var record = SectionTable.FirstOrDefault(x => x.TemplateId == itemDefinition.ID && x.Name == section.SectionName);

                if (record == null)
                {
                    var exists = existing.FirstOrDefault(def => def.Name.Equals(section));
                    if (exists != null)
                    {
                        record = new SectionInfo(section.SectionName, exists.ID, itemDefinition.ID, section.SectionSortOrder)
                        {
                            Existing = true
                        };
                    }
                    else
                    {
                        record = new SectionInfo(section.SectionName, new ID(Guid.NewGuid()), itemDefinition.ID, section.SectionSortOrder);
                    }
                    SectionTable.Add(record);
                }
                processed.Add(section.SectionName);
                if (!record.Existing)
                {
                    fields.Add(record.SectionId);
                }
            }
            return(fields);
        }
        void AddControllers(IDList list, Guid parentId, CallContext context)
        {
            var sqlProvider = GetSqlProvider(Database);

            foreach (var controller in ControllerType.GetAllControllers().Values.Where(c =>
            {
                if (c.ParentId != parentId)
                {
                    return(false);
                }
                return(GetSqlVersion(new ID(c.Id), context, sqlProvider) == null);
            }))
            {
                list.Add(new ID(controller.Id));
            }
        }
 protected virtual void AddChildIDsForContactFacetMemberItem(IDList ids, ItemDefinition itemDefinition, CallContext context)
 {
     var itemId = itemDefinition.ID;
     var facetName = IDTableHelper.GetFacetMemberFacetName(itemId);
     var memberName = IDTableHelper.GetFacetMemberName(itemId);
     var args = new GetFacetMemberValuesArgs(facetName, memberName);
     CorePipeline.Run("getFacetMemberValues", args);
     if (!args.Values.Any())
     {
         return;
     }
     foreach (var pair in args.Values)
     {
         var id = IDTableHelper.GenerateIdForFacetMemberValue(pair.Key, pair.Value, itemId, Sitecore.Strategy.Contacts.DataProviders.TemplateIDs.ContactFacetMemberValueTemplate);
         ids.Add(id);
     }
 }
Esempio n. 16
0
        protected internal override string GenerateValue()
        {
            if (_IDRef)
            {
                _IDRef = false;

                return(IDList[IDList.Count - 1]);
            }
            else
            {
                string id = base.GenerateValue();

                IDList.Add(id);                 // Add so that you can retrieve it from there for IDREF

                return(id);
            }
        }
        public override IDList GetChildIDs(ItemDefinition itemDefinition, CallContext context)
        {
#if DEBUG
            var timer = Stopwatch.StartNew();
#endif

            var list = new IDList();

            DoGetChildIDs(itemDefinition, context)
            .ForEach(x => list.Add(ID.Parse(x)));

#if DEBUG
            this.Trace(list, timer, itemDefinition, context);
#endif

            return(list);
        }
        public override IDList GetChildIDs(ItemDefinition itemDefinition, CallContext context)
        {
            var database = GetDatabase(context);
            var children = database.GetChildren(itemDefinition.ID.ToString());
            var ids      = new IDList();

            if (children == null)
            {
                return(ids);
            }

            foreach (var syncItem in children)
            {
                ids.Add(ID.Parse(syncItem.ID));
            }

            return(ids);
        }
 protected virtual void AddChildIDsForContactFacetItem(IDList ids, ItemDefinition itemDefinition, CallContext context)
 {
     var facetName = IDTableHelper.GetFacetName(itemDefinition.ID);
     var contractType = ContactFacetHelper.GetContractTypeForFacet(facetName);
     if (contractType == null)
     {
         return;
     }
     var members = contractType.GetMembers();
     foreach (var member in members)
     {
         if (member.MemberType == MemberTypes.Field || member.MemberType == MemberTypes.Property)
         {
             var id = IDTableHelper.GenerateIdForFacetMember(member, itemDefinition.ID, Sitecore.Strategy.Contacts.DataProviders.TemplateIDs.ContactFacetMemberTemplate);
             ids.Add(id);
         }
     }
 }
Esempio n. 20
0
        protected virtual void AddChildIDsForContactFacetMemberItem(IDList ids, ItemDefinition itemDefinition, CallContext context)
        {
            var itemId     = itemDefinition.ID;
            var facetName  = IDTableHelper.GetFacetMemberFacetName(itemId);
            var memberName = IDTableHelper.GetFacetMemberName(itemId);
            var args       = new GetFacetMemberValuesArgs(facetName, memberName);

            CorePipeline.Run("getFacetMemberValues", args);
            if (!args.Values.Any())
            {
                return;
            }
            foreach (var pair in args.Values)
            {
                var id = IDTableHelper.GenerateIdForFacetMemberValue(pair.Key, pair.Value, itemId, Sitecore.Strategy.Contacts.DataProviders.TemplateIDs.ContactFacetMemberValueTemplate);
                ids.Add(id);
            }
        }
Esempio n. 21
0
		public override IDList GetChildIDs(ItemDefinition itemDefinition, CallContext context)
		{
			Assert.ArgumentNotNull(itemDefinition, "itemDefinition");

			if (itemDefinition == ItemDefinition.Empty) return null;

			var children = SerializedDatabase.GetChildren(itemDefinition.ID);
			
			if (children == null) return null;

			var ids = new IDList();
			foreach (var syncItem in children)
			{
				ids.Add(syncItem.GetSitecoreId());
			}

			return ids;
		}
        public override IDList GetChildIDs(ItemDefinition itemDefinition, CallContext context)
        {
            var database = GetDatabase(context);
            var children = database.GetChildren(itemDefinition.ID.ToString());
            var ids = new IDList();

            if (children == null)
            {
                return ids;
            }

            foreach (var syncItem in children)
            {
                ids.Add(ID.Parse(syncItem.ID));
            }

            return ids;
        }
        // Here we check if the item implements our container template. If it does,
        // we create an association between what Sitecore will store the item as
        // and what our repository is storing the item as (SitecoreID<->EntityID).
        // This is the purpose of the IDTable.
        public override IDList GetChildIDs(ItemDefinition itemDefinition, CallContext context)
        {
            if (this.canProcessParent(itemDefinition.ID))
            {
                Trace.WriteLine(String.Format("GetChildIDs({0}, {1})", itemDefinition, context), "ProductDataProvider");
                context.Abort();

                var idList = new IDList();
                var products = this.productRepository.GetAll();
                foreach (var product in products)
                {
                    var tableEntry = this.getSitecoreId(product.Id, itemDefinition.ID, true);
                    idList.Add(tableEntry);
                }
                context.DataManager.Database.Caches.DataCache.Clear();
                return idList;
            }
            return base.GetChildIDs(itemDefinition, context);
        }
        private void ButtonAddBook_Click(object sender, EventArgs e)
        {
            if (inputAddBook.Text.Length == 0)
            {
                Messaging.showInputMissingMessage("Mã sách");
                return;
            }
            int id = Convert.ToInt32(inputAddBook.Text);

            if (!main.bookManager.isBookExist(id))
            {
                Messaging.showWarning("Sách không tồn tại");
                return;
            }
            if (newBooks.getByID(id) != null)
            {
                Messaging.showWarning("Bạn đã thêm sách này");
                return;
            }
            if (!isAdd)
            {
                if (!isOldBook(id))
                {
                    if (!main.bookManager.isBookAvailable(id))
                    {
                        Messaging.showWarning("Sách không khả dụng");
                        return;
                    }
                }
            }
            else
            {
                if (!main.bookManager.isBookAvailable(id))
                {
                    Messaging.showWarning("Sách không khả dụng");
                    return;
                }
            }
            BookPhieuMuon book = main.bookManager.getBookByID(id);

            newBooks.Add(book);
            bookBinding.ResetBindings(true);
        }
Esempio n. 25
0
        // Here we check if the item implements our container template. If it does,
        // we create an association between what Sitecore will store the item as
        // and what our repository is storing the item as (SitecoreID<->EntityID).
        // This is the purpose of the IDTable.
        public override IDList GetChildIDs(ItemDefinition itemDefinition, CallContext context)
        {
            if (this.canProcessParent(itemDefinition.ID))
            {
                Trace.WriteLine(String.Format("GetChildIDs({0}, {1})", itemDefinition, context), "ProductDataProvider");
                context.Abort();

                var idList   = new IDList();
                var products = this.productRepository.GetAll();
                foreach (var product in products)
                {
                    var tableEntry = this.getSitecoreId(product.Id, itemDefinition.ID, true);
                    idList.Add(tableEntry);
                }
                context.DataManager.Database.Caches.DataCache.Clear();
                return(idList);
            }
            return(base.GetChildIDs(itemDefinition, context));
        }
        public override IDList GetChildIDs(ItemDefinition itemDefinition, CallContext context)
        {
            Assert.ArgumentNotNull(itemDefinition, "itemDefinition");

            var childIds = new IDList();
            var item     = this.DataStorage.GetFakeItem(itemDefinition.ID);

            if (item == null)
            {
                return(childIds);
            }

            foreach (var child in item.Children)
            {
                childIds.Add(child.ID);
            }

            return(childIds);
        }
Esempio n. 27
0
        protected virtual void AddChildIDsForContactFacetItem(IDList ids, ItemDefinition itemDefinition, CallContext context)
        {
            var facetName    = IDTableHelper.GetFacetName(itemDefinition.ID);
            var contractType = ContactFacetHelper.GetContractTypeForFacet(facetName);

            if (contractType == null)
            {
                return;
            }
            var members = contractType.GetMembers();

            foreach (var member in members)
            {
                if (member.MemberType == MemberTypes.Field || member.MemberType == MemberTypes.Property)
                {
                    var id = IDTableHelper.GenerateIdForFacetMember(member, itemDefinition.ID, Sitecore.Strategy.Contacts.DataProviders.TemplateIDs.ContactFacetMemberTemplate);
                    ids.Add(id);
                }
            }
        }
Esempio n. 28
0
        public ActionResult Delete(IDList idlist)
        {
            Result result = new Result();

            result.message = "删除角色失败";


            if (idlist == null || idlist.Count == 0)
            {
                result.message = "您提交的数据为空,请重新选择!";
                return(Json(result));
            }
            IDList ids = new IDList();

            idlist.Where(f => !string.IsNullOrEmpty(f)).ToList().ForEach(s =>
            {
                Guid temp = Guid.Empty;
                s.Split(',').ToList().ForEach(g =>
                {
                    if (Guid.TryParse(g, out temp))
                    {
                        ids.Add(g);
                    }
                }
                                              );
            });
            using (ServiceProxy <IUserService> proxy = new ServiceProxy <IUserService>())
            {
                try
                {
                    proxy.Channel.DeleteRole(ids);
                    result.success = true;
                    result.message = "删除成功";
                }
                catch (Exception ex)
                {
                    result.message = ex.Message;
                }
            }
            return(Json(result));
        }
Esempio n. 29
0
        /// <summary>
        /// Basically call the standard data provider.
        /// Queries the fast.
        /// </summary>
        /// <param name="query">The query.</param>
        /// <param name="context">The context.</param>
        /// <returns>A list of IDs.</returns>
        protected override IDList QueryFast(string query, CallContext context)
        {
            var baseIdList = this.SelectIDs(query, context);

            if (baseIdList != null && baseIdList.Count > 0)
            {
                return(baseIdList);
            }

            if (!this.IsTraceEnabled(query))
            {
                return(base.QueryFast(query, context));
            }

            var parameters = new ParametersList();
            var sql        = this.Translator.TranslateQuery(query, context, parameters);

            Log.Debug(string.Format("FastQuery: {0}", query), this);
            Log.Debug(string.Format("SQL Query: {0}", this.FormatSqlQuery(sql, parameters)), this);

            if (sql == null)
            {
                return(null);
            }

            var stopwatch = Stopwatch.StartNew();

            using (var reader = this.Api.CreateReader(sql, parameters.ToArray()))
            {
                var idList = new IDList();
                while (reader.Read())
                {
                    idList.Add(this.Api.GetId(0, reader));
                }

                context.CurrentResult = idList;
            }

            Log.Debug(string.Format("Query Time: {0}ms", stopwatch.ElapsedMilliseconds), this);
            return(null);
        }
Esempio n. 30
0
 public override IDList GetChildIDs(ItemDefinition itemDefinition, CallContext context)
 {
     if (itemDefinition.ID == ID.Parse(_parentItem))
     {
         context.Abort();
         XmlNodeList videos   = VideoData.SelectNodes("/response/videos/video");
         IDList      videoIDs = new IDList();
         foreach (XmlNode video in videos)
         {
             string       videoKey = video.Attributes["key"].Value;
             IDTableEntry mappedID = IDTable.GetID(ID_TABLE_PREFIX, videoKey);
             if (mappedID == null)
             {
                 mappedID = IDTable.GetNewID(ID_TABLE_PREFIX, videoKey, ID.Parse(_parentItem));
             }
             videoIDs.Add(mappedID.ID);
         }
         return(videoIDs);
     }
     return(base.GetChildIDs(itemDefinition, context));
 }
        public override IDList SelectIDs(string query, CallContext context)
        {
#if DEBUG
            var timer = Stopwatch.StartNew();
#endif

            var list = new IDList();

            ReadOnlyProviders
            .SelectMany(x => x
                        .SelectIDs(query)?
                        .Select(ID.Parse) ?? EmptyIds)

            .GroupBy(x => x).Select(x => x.First()) // .Distinct()
            .ForEach(x => list.Add(x));

#if DEBUG
            this.Trace(list, timer, query, context);
#endif

            return(list);
        }
Esempio n. 32
0
        public override IDList GetChildIDs(ItemDefinition parentItem, CallContext context)
        {
            if (CanProcessParent(parentItem.ID))
            {
                context.Abort();

                var itemIdList = new IDList();

                foreach (
                    var externalItem in LoadChildren(parentItem).Where(a => a != null && !String.IsNullOrEmpty(a.Id)))
                {
                    var externalItemId = externalItem.Id;

                    IDTableEntry mappedId = InMemoryIdTable.GetID(IdTablePrefix, externalItemId);

                    if (mappedId == null)
                    {
                        Guid generatedGuid = GenerateId(externalItem);

                        if (generatedGuid == Guid.Empty)
                        {
                            mappedId = InMemoryIdTable.GetNewID(IdTablePrefix, externalItemId, parentItem.ID);
                        }
                        else
                        {
                            mappedId = InMemoryIdTable.Add(IdTablePrefix, externalItemId, new ID(generatedGuid), parentItem.ID);
                        }
                    }

                    itemIdList.Add(mappedId.ID);
                }

                context.DataManager.Database.Caches.DataCache.Clear();

                return(itemIdList);
            }

            return(base.GetChildIDs(parentItem, context));
        }
Esempio n. 33
0
        private IDList GetChildIDsSection(ItemDefinition itemDefinition, SectionInfo section)
        {
            var cls = Classes.First(x => x.Value.TemplateId == section.TemplateId.Guid).Value;

            var fields = cls.Properties.Where(x => x.Attribute is SitecoreFieldAttribute);

            IDList fieldIds = new IDList();


            foreach (var field in fields)
            {
                if (field.Property.DeclaringType != cls.Type)
                {
                    continue;
                }

                var attr = field.Attribute as SitecoreFieldAttribute;
                if (attr != null && attr.CodeFirst && attr.SectionName == itemDefinition.Name)
                {
                    Guid guidId;
                    if (Guid.TryParse(attr.FieldId, out guidId))
                    {
                        var record = FieldTable.FirstOrDefault(x => x.FieldId.Guid == guidId);

                        if (record == null)
                        {
                            string fieldName = attr.FieldName.IsNullOrEmpty() ? field.Property.Name : attr.FieldName;
                            record = new FieldInfo(new ID(guidId), itemDefinition.ID, fieldName, attr.FieldType, attr.FieldSource, attr.FieldTitle, attr.IsShared, attr.IsUnversioned);
                        }

                        fieldIds.Add(record.FieldId);
                        FieldTable.Add(record);
                    }
                }
            }

            return(fieldIds);
        }
        public DataProviderAggregator(Guid entryPoint, IEnumerable <ISitecoreDataProvider> providers, ContentNodeSitecoreItemFactory factory)
        {
            _factory    = factory;
            _entryPoint = new ID(entryPoint);
            _providers  = providers.ToList();

            _root = CreateRoot();

            _firstLevelIds = new IDList {
                _root.Id
            };

            _secondLevelIds = new IDList();
            foreach (var provider in _providers)
            {
                provider.SetEntryIdInSitecoreTree(_root.Id);
                var ids = provider.GetFirstLevelIds();
                foreach (ID id in ids)
                {
                    _secondLevelIds.Add(id);
                }
            }
        }
		public override IDList GetChildIDs(ItemDefinition itemDefinition, CallContext context)
		{
			Assert.ArgumentNotNull(itemDefinition, "itemDefinition");
			Assert.ArgumentNotNull(context, "context");

			if (!ShouldExecuteProvider(itemDefinition.ID)) return null;

			context.Abort();
			var childIds = base.GetChildIDs(itemDefinition, context);

			var filteredChildren = new IDList();

			foreach (ID child in childIds)
			{
				if (ShouldExecuteProvider(child)) filteredChildren.Add(child);
			}

			// invoke the other data providers, if any, and *unique* the child IDs
			// this allows us to merge serialized items on top of an existing database item
			// (without this uniquing we'd get two identical children for items that were both
			// serialized AND in the other providers)
			var providers = Database.GetDataProviders();
			for (int i = context.Index + 1; i < context.ProviderCount; i++)
			{
				var otherChildIds = providers[i].GetChildIDs(itemDefinition, context);

				if (otherChildIds == null) continue;

				foreach (ID child in otherChildIds)
				{
					if (!filteredChildren.Contains(child)) filteredChildren.Add(child);
				}
			}

			return filteredChildren;
		}
        public override IDList GetChildIDs(ItemDefinition itemDefinition, CallContext context)
        {
            ControllerType controllerType;
            var            list         = new IDList();
            var            existingList = context.CurrentResult as IDList ?? new IDList();

            if (itemDefinition.ID == ParentId)
            {
                if (!existingList.Contains(FolderId))
                {
                    list.Add(FolderId);
                }
            }
            else if (itemDefinition.ID == FolderId)
            {
                AddAllNamespaces(list, existingList);
            }
            else if (ControllerType.GetAllNamespaces().ContainsKey(itemDefinition.ID.ToGuid()))
            {
                AddControllers(list, itemDefinition.ID.ToGuid(), existingList);
            }
            else if ((controllerType = ControllerType.GetControllerType(itemDefinition.ID)) != null)
            {
                AddAllActions(list, controllerType, existingList);
            }
            else
            {
                return(null);
            }

            if (list.Count == 0)
            {
                return(null);
            }
            return(list);
        }
Esempio n. 37
0
        /// <summary>
        /// Gets the child I ds section.
        /// </summary>
        /// <param name="section">The section.</param>
        /// <param name="context">The context.</param>
        /// <param name="sqlProvider">The SQL provider.</param>
        /// <returns>
        /// IDList.
        /// </returns>
        private IDList GetChildIDsSection(SectionInfo section, CallContext context, DataProvider sqlProvider)
        {
            var config = TypeConfigurations.First(x => x.Value.TemplateId == section.TemplateId);
            var cls    = config.Value;

            var fields = cls.Properties.OfType <SitecoreFieldConfiguration>();

            IDList fieldIds = new IDList();

            var interfaces = cls.Type.GetInterfaces();

            foreach (var field in fields)
            {
                //fix: added check on interfaces, if field resides on interface then skip here
                var propertyFromInterface = interfaces.FirstOrDefault(inter => inter.GetProperty(field.PropertyInfo.Name) != null &&
                                                                      inter.GetProperty(field.PropertyInfo.Name).GetCustomAttributes(typeof(SitecoreFieldAttribute), false).Any());
                if (field.PropertyInfo.DeclaringType != cls.Type || propertyFromInterface != null)
                {
                    continue;
                }

                if (field.CodeFirst && field.SectionName == section.Name && !ID.IsNullOrEmpty(field.FieldId))
                {
                    var record = FieldTable.FirstOrDefault(x => x.FieldId == field.FieldId);
                    //test if the fields exists in the database: if so, we're using codefirst now, so remove it.
                    var existing = sqlProvider.GetItemDefinition(field.FieldId, context);
                    if (existing != null)
                    {
                        using (new SecurityDisabler())
                        {
                            if (DisableItemHandlerWhenDeletingFields)
                            {
                                using (new DisableItemHandler())
                                    sqlProvider.DeleteItem(existing, context);
                            }
                            else
                            {
                                sqlProvider.DeleteItem(existing, context);
                            }
                        }
                    }

                    if (record == null)
                    {
                        string fieldName = field.FieldName.IsNullOrEmpty() ? field.PropertyInfo.Name : field.FieldName;

                        record = new FieldInfo(field.FieldId, section.SectionId, fieldName, field.FieldType, field.CustomFieldType,
                                               field.FieldSource, field.FieldTitle, field.IsShared, field.IsUnversioned,
                                               field.FieldSortOrder, field.ValidationRegularExpression,
                                               field.ValidationErrorText, field.IsRequired);

                        if (field.FieldValueConfigs != null && field.FieldValueConfigs.Any())
                        {
                            foreach (var ffv in field.FieldValueConfigs)
                            {
                                record.FieldFieldValues.Add(ffv.FieldId, ffv.FieldValue);
                            }
                        }
                    }

                    fieldIds.Add(record.FieldId);
                    FieldTable.Add(record);
                }
            }

            return(fieldIds);
        }
 public override IDList GetChildIDs(ItemDefinition itemDefinition, CallContext context)
 {
     if (itemDefinition != null && itemDefinition.ID == JoinParentId)
     {
         IDList childIDs = new IDList();
         foreach (ID id in Items.Keys)
         {
             childIDs.Add(id);
         }
         return childIDs;
     }
     return null;
 }
        private IDList GetChildIDsSection(SectionInfo section, CallContext context)
        {
            var cls = Classes.First(x => x.Value.TemplateId == section.TemplateId.Guid).Value;

            var fields = cls.Properties.Where(x=>x.Attribute is SitecoreFieldAttribute);

            IDList fieldIds = new IDList();

            var providers = Database.GetDataProviders();
            var otherProvider = providers.FirstOrDefault(x => !(x is GlassDataProvider));

            foreach (var field in fields)
            {
                if (field.Property.DeclaringType != cls.Type)
                    continue;


                var attr = field.Attribute as SitecoreFieldAttribute;
                if (attr != null && attr.CodeFirst && attr.SectionName == section.Name)
                {

                    Guid guidId = Guid.Empty;
                    if (Utility.GuidTryParse(attr.FieldId, out guidId))
                    {
                        var record = FieldTable.FirstOrDefault(x => x.FieldId.Guid == guidId);
                        //test if the fields exists in the database: if so, we're using codefirst now, so remove it.
                        var existing = otherProvider.GetItemDefinition(new ID(guidId), context);
                        if (existing != null)
                        {
                            ID nullId = null; //hmm, there is a bug in sitecore ID's equality operator
                            //ONLY delete fields belonging directly to this template!!! if the parent is not in the database OR if it is a codefirst class/section, we can safely delete it to prevent duplicates
                            var existingParent = otherProvider.GetParentID(existing, context);
                            if (existingParent == nullId || existingParent == ID.Null ||
                                this.SectionTable.Any(s => s.SectionId == existing.ID) ||
                                this.Classes.Any(c => c.Value.TemplateId == existing.ID.ToGuid()))
                            {
                                using (new SecurityDisabler())
                                    otherProvider.DeleteItem(existing, context);
                            }
                        }
                        if (record == null)
                        {
                            string fieldName = attr.FieldName.IsNullOrEmpty() ? field.Property.Name : attr.FieldName;
                           

                            record = new FieldInfo(new ID(guidId), section.SectionId, fieldName, attr.FieldType, attr.FieldSource, attr.FieldTitle, attr.IsShared, attr.IsUnversioned, attr.FieldSortOrder, attr.ValidationRegularExpression, attr.ValidationErrorText, attr.IsRequired);
                            var fieldfieldInfoAttributes = field.Property.GetCustomAttributes(typeof (SitecoreFieldFieldValueAttribute), true);
                            if (fieldfieldInfoAttributes != null && fieldfieldInfoAttributes.Any())
                            {
                                foreach (var ffv in fieldfieldInfoAttributes.Cast<SitecoreFieldFieldValueAttribute>())
                                {
                                    record.FieldFieldValues.Add(ffv.FieldId, ffv.FieldValue);
                                }
                            }
                          
                        }

                        fieldIds.Add(record.FieldId);
                        FieldTable.Add(record);
                    }
                }


            }

            return fieldIds;
        }
        private IDList GetChildIDsTemplate(SitecoreClassConfig template, ItemDefinition itemDefinition, CallContext context)
        {
            IDList fields = new IDList();

            List<string> processed = new List<string>();
            var sections = template.Properties
                .Where(x=>x.Property.DeclaringType == template.Type)
                .Select(x=>x.Attribute).OfType<SitecoreFieldAttribute>()
                .Select(x => new { x.SectionName, x.SectionSortOrder });

            var providers = Database.GetDataProviders();
            var otherProvider = providers.FirstOrDefault(x => !(x is GlassDataProvider));
            //If sitecore contains a section with the same name in the database, use that one instead of creating a new one
            var otherChildIds = otherProvider.GetChildIDs(itemDefinition, context);
            var existing = (otherChildIds ?? new IDList()).OfType<ID>().Select(id => otherProvider.GetItemDefinition(id, context)).ToList();

            foreach (var section in sections)
            {
                if (processed.Contains(section.SectionName) || section.SectionName.IsNullOrEmpty())
                    continue;

                var record = SectionTable.FirstOrDefault(x => x.TemplateId == itemDefinition.ID && x.Name == section.SectionName);

                if (record == null)
                {
                    var exists = existing.FirstOrDefault(def => def.Name.Equals(section));
                    if (exists != null)
                    {
                        record = new SectionInfo(section.SectionName, exists.ID, itemDefinition.ID, section.SectionSortOrder) { Existing = true };
                    }
                    else
                    {
                        record = new SectionInfo(section.SectionName, new ID(Guid.NewGuid()), itemDefinition.ID, section.SectionSortOrder);
                    }
                    SectionTable.Add(record);
                }
                processed.Add(section.SectionName);
                if (!record.Existing)
                    fields.Add(record.SectionId);
            }
            return fields;
        }
Esempio n. 41
0
        /// <summary>
        /// Basically call the standard data provider.
        /// Queries the fast.
        /// </summary>
        /// <param name="query">The query.</param>
        /// <param name="context">The context.</param>
        /// <returns>A list of IDs.</returns>
        protected override IDList QueryFast(string query, CallContext context)
        {
            var baseIdList = this.SelectIDs(query, context);
            if (baseIdList != null && baseIdList.Count > 0) return baseIdList;

            if (!this.IsTraceEnabled(query)) return base.QueryFast(query, context);

            var parameters = new ParametersList();
            var sql = this.Translator.TranslateQuery(query, context, parameters);

            Log.Debug(string.Format("FastQuery: {0}", query), this);
            Log.Debug(string.Format("SQL Query: {0}", this.FormatSqlQuery(sql, parameters)), this);

            if (sql == null) return null;

            var stopwatch = Stopwatch.StartNew();
            using (var reader = this.Api.CreateReader(sql, parameters.ToArray()))
            {
                var idList = new IDList();
                while (reader.Read())
                {
                    idList.Add(this.Api.GetId(0, reader));
                }

                context.CurrentResult = idList;
            }

            Log.Debug(string.Format("Query Time: {0}ms", stopwatch.ElapsedMilliseconds), this);
            return null;
        }
		void AddAllActions(IDList list, ControllerType controllerType)
		{
			foreach (var action in ControllerAction.GetAllActions(ParentId.ToGuid()).Where(a => a.ControllerType.Type == controllerType.Type))
			{
				list.Add(new ID(action.Id));
			}
		}
		void AddAllControllers(IDList list)
		{
			foreach (var controller in ControllerType.GetControllerIds(ParentId.ToGuid()))
			{
				list.Add(new ID(controller.Key));
			}
		}
 void AddAllNamespaces(IDList list, CallContext context)
 {
     var sqlProvider = GetSqlProvider(Database);
     foreach (var nspace in ControllerType.GetAllNamespaces().Where(s =>
     {
         return GetSqlVersion(new ID(s.Key), context, sqlProvider) == null;
     }))
     {
         list.Add(new ID(nspace.Key));
     }
 }
 void AddControllers(IDList list, Guid parentId, CallContext context)
 {
     var sqlProvider = GetSqlProvider(Database);
     foreach (var controller in ControllerType.GetAllControllers().Values.Where(c =>
     {
         if (c.ParentId != parentId)
             return false;
         return GetSqlVersion(new ID(c.Id), context, sqlProvider) == null;
     }))
     {
         list.Add(new ID(controller.Id));
     }
 }
    public override IDList GetChildIDs([NotNull] ItemDefinition itemDefinition, [NotNull] CallContext context)
    {
      Assert.ArgumentNotNull(itemDefinition, "itemDefinition");
      Assert.ArgumentNotNull(context, "context");

      var itemId = itemDefinition.ID;
      Assert.IsNotNull(itemId, "itemId");

      var childIDs = new IDList();

      // several segments can point to same root so let's collect items from all of them
      foreach (var segment in this.Segments)
      {
        Assert.IsNotNull(segment, "segment");

        var segmentChildIDs = segment.GetChildIDs(itemId);
        if (segmentChildIDs == null)
        {
          continue;
        }

        foreach (var childID in segmentChildIDs)
        {
          Assert.IsNotNull(childID, "childID");

          childIDs.Add(childID);
        }
      }

      // check if SQL has items too
      var sqlChildIDs = base.GetChildIDs(itemDefinition, context);
      if (sqlChildIDs == null)
      {
        return childIDs;
      }

      // merge segments' items with ones from SQL
      foreach (var id in sqlChildIDs.Cast<ID>())
      {
        childIDs.Add(id);
      }

      return childIDs;
    }
 void AddAllActions(IDList list, ControllerType controllerType, CallContext context)
 {
     var sqlProvider = GetSqlProvider(Database);
     foreach (var action in ControllerAction.GetAllActions(controllerType.Id).Where(a =>
     {
         return GetSqlVersion(new ID(a.Id), context, sqlProvider) == null;
     }))
     {
         if (!list.Contains(new ID(action.Id)))
             list.Add(new ID(action.Id));
     }
 }
 // Gets YouTube items for publishing. It happens all the time.
 public override IDList GetPublishQueue(DateTime from, DateTime to, CallContext context)
 {
     IDList list = new IDList();
      foreach (DictionaryEntry item in _items)
      {
     YTItemInfo ytItemInfo = (YTItemInfo) item.Value;
     list.Add(ytItemInfo.ItemID);
      }
      return list;
 }
        public override IDList GetChildIDs(ItemDefinition itemDefinition, CallContext context)
        {
            ControllerType controllerType;
            var list = new IDList();

            if (itemDefinition.ID == ParentId)
            {
                if (GetSqlVersion(FolderId, context, GetSqlProvider(Database)) == null)
                    list.Add(FolderId);
            }
            else if (itemDefinition.ID == FolderId)
            {
                AddAllNamespaces(list, context);
            }
            else if (ControllerType.GetAllNamespaces().ContainsKey(itemDefinition.ID.ToGuid()))
            {
                AddControllers(list, itemDefinition.ID.ToGuid(), context);
            }
            else if ((controllerType = ControllerType.GetControllerType(itemDefinition.ID)) != null)
            {
                AddAllActions(list, controllerType, context);
            }
            else
            {
                return null;
            }

            if (list.Count == 0)
                return null;
            return list;
        }
Esempio n. 50
0
        /// <summary>
        /// Gets the child I ds section.
        /// </summary>
        /// <param name="section">The section.</param>
        /// <param name="context">The context.</param>
        /// <param name="sqlProvider">The SQL provider.</param>
        /// <returns>
        /// IDList.
        /// </returns>
        private IDList GetChildIDsSection(SectionInfo section, CallContext context, DataProvider sqlProvider)
        {
            var config = TypeConfigurations.First(x => x.Value.TemplateId == section.TemplateId);
            var cls = config.Value;

            var fields = cls.Properties.OfType<SitecoreFieldConfiguration>();

            IDList fieldIds = new IDList();

            var interfaces = cls.Type.GetInterfaces();

            foreach (var field in fields)
            {
                //fix: added check on interfaces, if field resides on interface then skip here
                var propertyFromInterface = interfaces.FirstOrDefault(inter => inter.GetProperty(field.PropertyInfo.Name) != null 
                                                                            && inter.GetProperty(field.PropertyInfo.Name).GetCustomAttributes(typeof(SitecoreFieldAttribute), false).Any());
                if (field.PropertyInfo.DeclaringType != cls.Type || propertyFromInterface != null)
                    continue;

                if (field.CodeFirst && field.SectionName == section.Name && !ID.IsNullOrEmpty(field.FieldId))
                {
                    var record = FieldTable.FirstOrDefault(x => x.FieldId == field.FieldId);
                    //test if the fields exists in the database: if so, we're using codefirst now, so remove it.
                    var existing = sqlProvider.GetItemDefinition(field.FieldId, context);
                    if (existing != null)
                    {
                        using (new SecurityDisabler())
                        {
                            if (DisableItemHandlerWhenDeletingFields)
                            {
                                using (new DisableItemHandler())
                                    sqlProvider.DeleteItem(existing, context);
                            }
                            else
                            {
                                sqlProvider.DeleteItem(existing, context);
                            }
                        }
                    }

                    if (record == null)
                    {
                        string fieldName = field.FieldName.IsNullOrEmpty() ? field.PropertyInfo.Name : field.FieldName;

                        record = new FieldInfo(field.FieldId, section.SectionId, fieldName, field.FieldType, field.CustomFieldType,
                                               field.FieldSource, field.FieldTitle, field.IsShared, field.IsUnversioned,
                                               field.FieldSortOrder, field.ValidationRegularExpression,
                                               field.ValidationErrorText, field.IsRequired);

                        if (field.FieldValueConfigs != null && field.FieldValueConfigs.Any())
                        {
                            foreach (var ffv in field.FieldValueConfigs)
                            {
                                record.FieldFieldValues.Add(ffv.FieldId, ffv.FieldValue);
                            }
                        }
                    }

                    fieldIds.Add(record.FieldId);
                    FieldTable.Add(record);
                }
            }

            return fieldIds;
        }
        public override IDList GetPublishQueue(DateTime from, DateTime to, CallContext context)
        {
            var items = Provider.WritableProvider.GetPublishQueue(from, to);

            Hashtable hashtable = new Hashtable();
            IDList list = new IDList();

            foreach (var item in items)
            {
                if (hashtable.ContainsKey(item.Id))
                    continue;

                hashtable[item.Id] = string.Empty;

                list.Add(new ID(item.Id));
            }

            return list;
        }
        // Returns the IDs of the given item’s children.
        public override Sitecore.Collections.IDList GetChildIDs(ItemDefinition itemDefinition, CallContext context)
        {
            if (CanProcessParent(itemDefinition.ID, context))
             {

            ID parentID = itemDefinition.ID;
            IDictionary<string, string> ids = LoadDataID(parentID);
            IDList idList = new IDList();

            foreach (var itemId in ids)
            {
               IDTableEntry idEntry = IDTable.GetID(prefix, itemId.Key);
               ID newID;
               if (idEntry == null)
               {
                  newID = ID.NewID;
                  IDTable.Add(prefix, itemId.Key, newID, parentID, itemId.Value);
               }
               else
               {
                  newID = idEntry.ID;
               }
               idList.Add(newID);
            }
            context.DataManager.Database.Caches.DataCache.RemoveItemInformation(itemDefinition.ID);
            return idList;
             }
             return null;
        }
Esempio n. 53
0
        /// <summary>
        /// returns a string array of gene_ids associated with a strain (transgenes, gene genotypes, genomic segments)
        /// </summary>
        /// <param name="StrainID">ID Object</param>
        /// <returns>string array</returns>
        public virtual string[] GetGeneIDsFromStrain(ID StrainID)
        {
            if (StrainID.IsNull)
            {
                string[] no_genes = new string[1];
                no_genes[0] = "";
                return no_genes;
            }
            GenomeMgr gMgr = GenomeMgr.Instance;
            GeneGenotypeList genotypes;
            TransgeneList transgenes;
            GenomicSegmentList segments;
            genotypes = gMgr.GetGeneGenotypes(StrainID);
            transgenes = gMgr.GetTransgenes(StrainID);
            segments = gMgr.GetGenomicSegments(StrainID);

            IDList EntrezGeneIDs = new IDList();
            foreach (GeneGenotype g in genotypes)
            {
                if (g.Gene.EntrezGeneID.IsValid)
                    EntrezGeneIDs.Add(g.Gene.EntrezGeneID);
            }
            foreach (Transgene tg in transgenes)
            {
                if (tg.Gene.EntrezGeneID.IsValid)
                    EntrezGeneIDs.Add(tg.Gene.EntrezGeneID);

                if (tg.Enhancer.Gene.EntrezGeneID.IsValid)
                    EntrezGeneIDs.Add(tg.Enhancer.Gene.EntrezGeneID);

                if (tg.Promoter.Gene.EntrezGeneID.IsValid)
                    EntrezGeneIDs.Add(tg.Promoter.Gene.EntrezGeneID);
            }

            foreach (GenomicSegment gs in segments)
            {
                if (gs.DistalFlanking.EntrezGeneID.IsValid)
                    EntrezGeneIDs.Add(gs.DistalFlanking.EntrezGeneID);

                if (gs.DistalLocus.EntrezGeneID.IsValid)
                    EntrezGeneIDs.Add(gs.DistalLocus.EntrezGeneID);

                if (gs.ProximalFlanking.EntrezGeneID.IsValid)
                    EntrezGeneIDs.Add(gs.ProximalFlanking.EntrezGeneID);

                if (gs.ProximalLocus.EntrezGeneID.IsValid)
                    EntrezGeneIDs.Add(gs.ProximalLocus.EntrezGeneID);
            }

            int count = EntrezGeneIDs.Count;
            if (count > 0)
            {
                string[] gene_ids = new string[count];
                for (int i = 0; i < count; i++)
                    gene_ids[i] = EntrezGeneIDs[i].ToString();
                return gene_ids;
            }

            return null;
        }
Esempio n. 54
0
        public IDList SelectIds(string query, Sitecore.Data.DataProviders.CallContext callContext)
        {
            IDList returnList = new IDList();

            //fast query

            if (query.StartsWith("fast:"))
            {
                query = query.Substring(5);
                if (!query.Contains("*"))
                {
                    var id = GetItemFromSimplePath(query);
                    if (id != Guid.Empty)
                        returnList.Add(new ID(id));
                }
                else if(query.Contains("["))
                {
                    List<Guid> guids = GetItemsMatchingPredicate(query);
                    guids.ForEach(g => returnList.Add(new ID(g)));
                }
                else if (query.EndsWith(@"//*"))
                {
                    List<Guid> guids = GetMatchingItemsForDescendantPath(query);
                    guids.ForEach(g => returnList.Add(new ID(g)));
                }
                else if (query.EndsWith(@"/*") && !query.Contains(@"//"))
                {
                    List<Guid> guids = GetMatchingItemsForWildcardPath(query);
                    guids.ForEach(g => returnList.Add(new ID(g)));
                }

                return returnList;
            }

            return null;
        }
Esempio n. 55
0
        public override IDList GetChildIDs(ItemDefinition itemDefinition, CallContext context)
        {
            if (this.CanProcessParent(itemDefinition.ID, context))
            {
                context.Abort();

                var idList   = new IDList();
                ID  parentId = itemDefinition.ID;

                var database   = context.DataManager.Database;
                var actualItem = database.GetItem(parentId);

                var values = this.DataProviderDamHelper.ProcessingParentFieldNames.ToDictionary(fieldName => fieldName, fieldName => actualItem[fieldName]);

                var keyList = this.DataProviderDamHelper.GetChildKeys(values);

                var keys = keyList as string[] ?? keyList.ToArray();
                if (!keys.Any())
                {
                    return(new IDList());
                }

                foreach (var key in keys)
                {
                    if (string.IsNullOrEmpty(key))
                    {
                        continue;
                    }

                    var keyString = key + "|" + parentId.ToShortID();

                    IDTableEntry idEntry = IDTable.GetID(this.IdTablePrefix,
                                                         keyString);
                    ID newID;
                    if (idEntry == null)
                    {
                        var itemName = this.DataProviderDamHelper.GetItemName(key);

                        if (itemName == "Undefined")
                        {
                            continue;
                        }

                        newID = ID.NewID;
                        IDTable.Add(this.IdTablePrefix,
                                    keyString,
                                    newID, parentId, ItemUtil.ProposeValidItemName(Path.GetFileNameWithoutExtension(itemName)));
                    }
                    else
                    {
                        newID = idEntry.ID;
                    }
                    idList.Add(newID);
                }

                context.DataManager.Database.Caches.DataCache.Clear();

                return(idList);
            }

            return(base.GetChildIDs(itemDefinition, context));
        }
Esempio n. 56
0
        /// <summary>
        /// Gets the child I ds template.
        /// </summary>
        /// <param name="template">The template.</param>
        /// <param name="itemDefinition">The item definition.</param>
        /// <param name="context">The context.</param>
        /// <param name="sqlProvider">The SQL provider.</param>
        /// <returns>
        /// IDList.
        /// </returns>
        private IDList GetChildIDsTemplate(SitecoreTypeConfiguration template, ItemDefinition itemDefinition, CallContext context, DataProvider sqlProvider)
        {
            var fields = new IDList();
            var processed = new List<string>();
            var sections = template.Properties
                .Where(x => x.PropertyInfo.DeclaringType == template.Type)
                .OfType<SitecoreFieldConfiguration>()
                .Select(x => new { x.SectionName, x.SectionSortOrder });

            //If sitecore contains a section with the same name in the database, use that one instead of creating a new one
            var existing = sqlProvider.GetChildIDs(itemDefinition, context).OfType<ID>().Select(id => sqlProvider.GetItemDefinition(id, context))
                .Where(item => item.TemplateID == SectionTemplateId).ToList();

            foreach (var section in sections)
            {
                if (processed.Contains(section.SectionName) || section.SectionName.IsNullOrEmpty())
                    continue;

                var record = SectionTable.FirstOrDefault(x => x.TemplateId == itemDefinition.ID && x.Name == section.SectionName);

                if (record == null)
                {
                    var exists = existing.FirstOrDefault(def => def.Name.Equals(section.SectionName, StringComparison.InvariantCultureIgnoreCase));
                    var newId = GetUniqueGuid(itemDefinition.ID + section.SectionName);
                    const int newSortOrder = 100;
                    
                    record = exists != null ?
                        new SectionInfo(section.SectionName, exists.ID, itemDefinition.ID, section.SectionSortOrder) { Existing = true } :
                        new SectionInfo(section.SectionName, new ID(newId), itemDefinition.ID, newSortOrder);

                    SectionTable.Add(record);
                }

                processed.Add(section.SectionName);

                if (!record.Existing)
                    fields.Add(record.SectionId);
            }

            //we need to add sections already in the db, 'cause we have to 
            foreach (var sqlOne in existing.Where(ex => SectionTable.All(s => s.SectionId != ex.ID)))
            {
                SectionTable.Add(new SectionInfo(sqlOne.Name, sqlOne.ID, itemDefinition.ID, 0) { Existing = true } );
            }

            return fields;
        }
 public virtual void AddItem(ISitecoreItem item)
 {
     item.ParentId = Id;
     _children.Add(item);
     _childIds.Add(item.Id);
 }
        /// <summary>
        /// Gets the child I ds section.
        /// </summary>
        /// <param name="section">The section.</param>
        /// <param name="context">The context.</param>
        /// <returns>IDList.</returns>
        private IDList GetChildIDsSection(SectionInfo section, CallContext context)
        {
            var cls = _typeConfigurations.First(x => x.Value.TemplateId == section.TemplateId).Value;

            var fields = cls.Properties.OfType<SitecoreFieldConfiguration>();

            IDList fieldIds = new IDList();

            var providers = context.DataManager.Database.GetDataProviders();
            var otherProvider = providers.FirstOrDefault(x => !(x is GlassDataProvider));

            foreach (var field in fields)
            {
                if (field.PropertyInfo.DeclaringType != cls.Type)
                    continue;



                if (field.CodeFirst && field.SectionName == section.Name && !ID.IsNullOrEmpty(field.FieldId))
                {
                    var record = FieldTable.FirstOrDefault(x => x.FieldId == field.FieldId);
                    //test if the fields exists in the database: if so, we're using codefirst now, so remove it.
                    var existing = otherProvider.GetItemDefinition(field.FieldId, context);
                    if (existing != null)
                    {
                        using (new SecurityDisabler())
                            otherProvider.DeleteItem(existing, context);
                    }
                    if (record == null)
                    {
                        string fieldName = field.FieldName.IsNullOrEmpty() ? field.PropertyInfo.Name : field.FieldName;


                        record = new FieldInfo(field.FieldId, section.SectionId, fieldName, field.FieldType,
                                               field.FieldSource, field.FieldTitle, field.IsShared, field.IsUnversioned,
                                               field.FieldSortOrder, field.ValidationRegularExpression,
                                               field.ValidationErrorText, field.IsRequired);

                        if (field.FieldValueConfigs != null && field.FieldValueConfigs.Any())
                        {
                            foreach (var ffv in field.FieldValueConfigs)
                            {
                                record.FieldFieldValues.Add(ffv.FieldId, ffv.FieldValue);
                            }
                        }

                    }

                    fieldIds.Add(record.FieldId);
                    FieldTable.Add(record);


                }
            }

            return fieldIds;
        }