Example #1
0
 private void UpdateModifiedInformation(SitemapTag mediaTag)
 {
     UpdateModifiedInformation(mediaTag.Sitemap);
 }
Example #2
0
        /// <summary>
        /// Saves the tags.
        /// </summary>
        /// <param name="sitemap">The sitemap.</param>
        /// <param name="tags">The tags.</param>
        /// <param name="newCreatedTags">The new created tags.</param>
        public void SaveTags(Sitemap sitemap, IList<string> tags, out IList<Tag> newCreatedTags)
        {
            var trimmedTags = new List<string>();
            if (tags != null)
            {
                foreach (var tag in tags)
                {
                    trimmedTags.Add(tag.Trim());
                }
            }

            newCreatedTags = new List<Tag>();

            Tag tagAlias = null;

            // Tags merge:
            var sitemapTags = unitOfWork.Session
                .QueryOver<SitemapTag>()
                .Where(t => !t.IsDeleted && t.Sitemap.Id == sitemap.Id)
                .JoinQueryOver(t => t.Tag, JoinType.InnerJoin)
                .Where(t => !t.IsDeleted)
                .List<SitemapTag>();

            // Remove deleted tags:
            for (var i = sitemapTags.Count - 1; i >= 0; i--)
            {
                var tag = trimmedTags.FirstOrDefault(s => s.ToLower() == sitemapTags[i].Tag.Name.ToLower());
                if (tag == null)
                {
                    unitOfWork.Session.Delete(sitemapTags[i]);
                }
            }

            // Add new tags:
            List<string> tagsInsert = new List<string>();
            foreach (var tag in trimmedTags)
            {
                var existSitemapTag = sitemapTags.FirstOrDefault(sitemapTag => sitemapTag.Tag.Name.ToLower() == tag.ToLower());
                if (existSitemapTag == null)
                {
                    tagsInsert.Add(tag);
                }
            }

            if (tagsInsert.Count <= 0)
            {
                return;
            }

            // Get existing tags:
            var existingTags = unitOfWork.Session.QueryOver(() => tagAlias)
                                                .Where(t => !t.IsDeleted)
                                                .Where(Restrictions.In(Projections.Property(() => tagAlias.Name), tagsInsert))
                                                .List<Tag>();

            foreach (var tag in tagsInsert)
            {
                var sitemapTag = new SitemapTag { Sitemap = sitemap };

                var existTag = existingTags.FirstOrDefault(t => t.Name.ToLower() == tag.ToLower());
                if (existTag != null)
                {
                    sitemapTag.Tag = existTag;
                }
                else
                {
                    var newTag = new Tag { Name = tag };
                    unitOfWork.Session.SaveOrUpdate(newTag);
                    newCreatedTags.Add(newTag);
                    sitemapTag.Tag = newTag;
                }

                unitOfWork.Session.SaveOrUpdate(sitemapTag);
            }
        }
Example #3
0
        /// <summary>
        /// Saves the tags.
        /// </summary>
        /// <param name="sitemap">The sitemap.</param>
        /// <param name="tags">The tags.</param>
        /// <param name="newCreatedTags">The new created tags.</param>
        public void SaveTags(Sitemap sitemap, IList <string> tags, out IList <Tag> newCreatedTags)
        {
            var trimmedTags = new List <string>();

            if (tags != null)
            {
                foreach (var tag in tags)
                {
                    trimmedTags.Add(tag.Trim());
                }
            }

            // remove tags who are equal (tags are case insensitive)
            for (int i = 0; i < trimmedTags.Count; i++)
            {
                for (int j = i + 1; j < trimmedTags.Count; j++)
                {
                    if (i != j && trimmedTags[i].ToLowerInvariant() == trimmedTags[j].ToLowerInvariant())
                    {
                        trimmedTags.RemoveAt(j);
                        --j;
                    }
                }
            }

            newCreatedTags = new List <Tag>();

            Tag tagAlias = null;

            // Tags merge:
            var sitemapTags = unitOfWork.Session
                              .QueryOver <SitemapTag>()
                              .Where(t => !t.IsDeleted && t.Sitemap.Id == sitemap.Id)
                              .JoinQueryOver(t => t.Tag, JoinType.InnerJoin)
                              .Where(t => !t.IsDeleted)
                              .List <SitemapTag>();

            // Remove deleted tags:
            for (var i = sitemapTags.Count - 1; i >= 0; i--)
            {
                var tag = trimmedTags.FirstOrDefault(s => s.ToLower() == sitemapTags[i].Tag.Name.ToLower());
                if (tag == null)
                {
                    UpdateModifiedInformation(sitemapTags[i]);
                    unitOfWork.Session.Delete(sitemapTags[i]);
                }
            }

            // Add new tags:
            List <string> tagsInsert = new List <string>();

            foreach (var tag in trimmedTags)
            {
                var existSitemapTag = sitemapTags.FirstOrDefault(sitemapTag => sitemapTag.Tag.Name.ToLower() == tag.ToLower());
                if (existSitemapTag == null)
                {
                    tagsInsert.Add(tag);
                }
            }

            if (tagsInsert.Count <= 0)
            {
                return;
            }

            // Get existing tags:
            var existingTags = unitOfWork.Session.QueryOver(() => tagAlias)
                               .Where(t => !t.IsDeleted)
                               .Where(Restrictions.In(Projections.Property(() => tagAlias.Name), tagsInsert))
                               .List <Tag>();

            foreach (var tag in tagsInsert)
            {
                var sitemapTag = new SitemapTag {
                    Sitemap = sitemap
                };

                var existTag = existingTags.FirstOrDefault(t => t.Name.ToLower() == tag.ToLower());
                if (existTag != null)
                {
                    sitemapTag.Tag = existTag;
                }
                else
                {
                    var newTag = new Tag {
                        Name = tag
                    };
                    unitOfWork.Session.SaveOrUpdate(newTag);
                    newCreatedTags.Add(newTag);
                    sitemapTag.Tag = newTag;
                }

                UpdateModifiedInformation(sitemapTag);
                unitOfWork.Session.SaveOrUpdate(sitemapTag);
            }
        }
 private void UpdateModifiedInformation(SitemapTag mediaTag)
 {
     UpdateModifiedInformation(mediaTag.Sitemap);
 }