Example #1
0
        /// <summary>
        /// Populates the tag list.
        /// </summary>
        private void PopulateTagList()
        {
            int entityTypePersonId = EntityTypeCache.GetId( typeof( Rock.Model.Person ) ) ?? 0;
            var tagQry = new TagService( new RockContext() ).Queryable( "OwnerPersonAlias" ).Where( a => a.EntityTypeId == entityTypePersonId );
            RockPage rockPage = _rblTagType.Page as RockPage;

            if ( _rblTagType.SelectedValueAsInt() == 1 )
            {
                // Personal tags - tags where the ownerid is the current person id
                tagQry = tagQry.Where( a => a.OwnerPersonAlias.PersonId == rockPage.CurrentPersonId ).OrderBy( a => a.Name );
            }
            else
            {
                // Organizational tags - tags where the ownerid is null
                tagQry = tagQry.Where( a => a.OwnerPersonAlias == null ).OrderBy( a => a.Name );
            }

            _ddlTagList.Items.Clear();
            var tempTagList = tagQry.ToList();

            foreach ( var tag in tagQry.Select( a => new { a.Guid, a.Name } ) )
            {
                _ddlTagList.Items.Add( new ListItem( tag.Name, tag.Guid.ToString() ) );
            }
        }
Example #2
0
        private void DisplayTags(int? ownerId, int entityId)
        {
            // get tags
            var qry = new TagService( new RockContext() )
                .Queryable()
                .Where(t =>
                    t.EntityTypeId == entityId &&
                    (
                        ( t.OwnerPersonAlias == null && !ownerId.HasValue ) ||
                        ( t.OwnerPersonAlias != null && ownerId.HasValue && t.OwnerPersonAlias.PersonId == ownerId.Value )
                    ) )
                .Select(t => new
                {
                    Id = t.Id,
                    Name = t.Name,
                    Count = t.TaggedItems.Count()
                })
                .OrderBy(t => t.Name);

            // create dictionary to group by first letter of name
            Dictionary<char, List<TagSummary>> tagAlphabit = new Dictionary<char, List<TagSummary>>();

            // load alphabit into dictionary
            for (char c = 'A'; c <= 'Z'; c++)
            {
                tagAlphabit.Add(c, new List<TagSummary>());
            }

            tagAlphabit.Add('#', new List<TagSummary>());
            tagAlphabit.Add( '*', new List<TagSummary>() );

            // load tags
            var tags = qry.ToList();

            foreach ( var tag in tags )
            {
                var tagSummary = new TagSummary { Id = tag.Id, Name = tag.Name, Count = tag.Count };
                char key = (char)tag.Name.Substring( 0, 1 ).ToUpper()[0];

                if ( Char.IsNumber( key ) )
                {
                    key = '#';
                }
                else
                {
                    if ( !Char.IsLetter( key ) )
                    {
                        key = '*';
                    }
                }

                tagAlphabit[key].Add(tagSummary);
            }

            // display tags
            StringBuilder tagOutput = new StringBuilder();
            StringBuilder letterOutput = new StringBuilder();

            letterOutput.Append("<ul class='list-inline tag-letterlist'>");
            tagOutput.Append("<ul class='list-unstyled taglist'>");
            foreach (var letterItem in tagAlphabit)
            {
                if (letterItem.Value.Count > 0)
                {
                    letterOutput.Append(String.Format("<li><a href='#{0}'>{0}</a></li>", letterItem.Key.ToString()));

                    // add tags to display
                    tagOutput.Append(String.Format("<li class='clearfix'><h3><a name='{0}'></a>{1}</h3><ul class='list-inline'>", letterItem.Key.ToString(), letterItem.Key.ToString()));

                    foreach (TagSummary tag in letterItem.Value)
                    {
                        Dictionary<string, string> queryString = new Dictionary<string, string>();
                        queryString.Add("tagId", tag.Id.ToString());
                        var detailPageUrl = LinkedPageUrl("DetailPage", queryString);

                        tagOutput.Append(string.Format("<a href='{0}'><span class='tag'>{1} <small>({2})</small></span></a>", detailPageUrl, tag.Name, tag.Count));
                    }

                    tagOutput.Append("</ul></li>");
                }
                else
                {
                    letterOutput.Append(String.Format("<li>{0}</li>", letterItem.Key.ToString()));
                }

            }

            tagOutput.Append("</ul>");
            letterOutput.Append("</ul>");

            // if no tags add message instead
            if ( tags.Count() == 0 )
            {
                tagOutput.Clear();
                tagOutput.Append("<div class='alert alert-info'><h4>Note</h4>No personal tags exist.</div>");
            }

            lTagList.Text = tagOutput.ToString();
            lLetters.Text = letterOutput.ToString();
        }