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(); }
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(); }
private void DisplayTags() { int?ownerId = null; if (TagCloudTab == "organization") { publicTagsCss = "active"; personalTagsCss = ""; } else { ownerId = CurrentPersonId ?? 0; publicTagsCss = ""; personalTagsCss = "active"; } // get tags var tagQry = new TagService(new RockContext()).Queryable(); int?entityId = _showEntityType ? ddlEntityType.SelectedValueAsId() : EntityTypeId; if (entityId.HasValue && entityId.Value != 0) { tagQry = tagQry.Where(t => t.EntityTypeId.HasValue && t.EntityTypeId.Value == entityId.Value); } if (!tglStatus.Checked) { tagQry = tagQry.Where(t => t.IsActive); } if (ownerId.HasValue) { tagQry = tagQry.Where(t => t.OwnerPersonAlias != null && t.OwnerPersonAlias.PersonId == ownerId.Value); } var qry = tagQry.Select(t => new { Tag = t, Count = t.TaggedItems.Count() }) .OrderBy(t => t.Tag.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 tagInfo in tags) { bool canView = (tagInfo.Tag.OwnerPersonAlias != null && ownerId.HasValue && tagInfo.Tag.OwnerPersonAlias.PersonId == ownerId.Value) || (tagInfo.Tag.OwnerPersonAlias == null && tagInfo.Tag.IsAuthorized(Rock.Security.Authorization.VIEW, CurrentPerson)); if (canView) { var tagSummary = new TagSummary { Id = tagInfo.Tag.Id, Name = tagInfo.Tag.Name, Count = tagInfo.Count }; char key = (char)tagSummary.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(string.Format("<div class='alert alert-info'><h4>Note</h4>No {0} tags exist.</div>", TagCloudTab)); } lTagList.Text = tagOutput.ToString(); lLetters.Text = letterOutput.ToString(); }