/// <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() ) ); } }
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(); }