/// <summary> /// Handles the Click event of the btnSave control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> protected void btnSave_Click(object sender, EventArgs e) { var rockContext = new RockContext(); var tagService = new Rock.Model.TagService(rockContext); Tag tag = null; int tagId = int.Parse(hfId.Value); if (tagId != 0) { tag = tagService.Get(tagId); } if (tag == null) { tag = new Tag(); tag.IsSystem = false; tagService.Add(tag); } string name = tbName.Text; int? ownerId = ppOwner.PersonId; int entityTypeId = ddlEntityType.SelectedValueAsId().Value; string qualifierCol = tbEntityTypeQualifierColumn.Text; string qualifierVal = tbEntityTypeQualifierValue.Text; // Verify tag with same name does not already exist if (tagService.Queryable() .Where(t => t.Id != tagId && t.Name == name && t.OwnerId.Equals(ownerId) && t.EntityTypeId == entityTypeId && t.EntityTypeQualifierColumn == qualifierCol && t.EntityTypeQualifierValue == qualifierVal) .Any()) { nbEditError.Heading = "Tag Already Exists"; nbEditError.Text = string.Format("A '{0}' tag already exists for the selected scope, owner, and entity type.", name); nbEditError.Visible = true; } else { tag.Name = name; tag.Description = tbDescription.Text; tag.OwnerId = ownerId; tag.EntityTypeId = entityTypeId; tag.EntityTypeQualifierColumn = qualifierCol; tag.EntityTypeQualifierValue = qualifierVal; rockContext.SaveChanges(); var qryParams = new Dictionary <string, string>(); qryParams["tagId"] = tag.Id.ToString(); NavigateToPage(RockPage.Guid, qryParams); } }
public HttpResponseMessage Post( int entityTypeId, int ownerId, Guid entityGuid, string name, string entityQualifier, string entityQualifierValue ) { var user = CurrentUser(); if ( user != null ) { using ( new Rock.Data.UnitOfWorkScope() ) { var tagService = new TagService(); var taggedItemService = new TaggedItemService(); var tag = tagService.Get( entityTypeId, entityQualifier, entityQualifierValue, ownerId, name ); if ( tag == null ) { tag = new Tag(); tag.EntityTypeId = entityTypeId; tag.EntityTypeQualifierColumn = entityQualifier; tag.EntityTypeQualifierValue = entityQualifierValue; tag.OwnerId = ownerId; tag.Name = name; tagService.Add( tag, user.PersonId ); tagService.Save( tag, user.PersonId ); } var taggedItem = taggedItemService.Get( tag.Id, entityGuid ); if ( taggedItem == null ) { taggedItem = new TaggedItem(); taggedItem.TagId = tag.Id; taggedItem.EntityGuid = entityGuid; taggedItemService.Add( taggedItem, user.PersonId ); taggedItemService.Save( taggedItem, user.PersonId ); } } return ControllerContext.Request.CreateResponse( HttpStatusCode.Created ); } throw new HttpResponseException( HttpStatusCode.Unauthorized ); }
/// <summary> /// Handles the Click event of the btnSave control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> protected void btnSave_Click(object sender, EventArgs e) { Tag tag; using (new Rock.Data.UnitOfWorkScope()) { var tagService = new Rock.Model.TagService(); int tagId = int.Parse(hfId.Value); if (tagId == 0) { tag = new Tag(); tag.IsSystem = false; tagService.Add(tag, CurrentPersonId); } else { tag = tagService.Get(tagId); } tag.Name = tbName.Text; tag.OwnerId = ppOwner.PersonId; tag.EntityTypeId = ddlEntityType.SelectedValueAsId().Value; tag.EntityTypeQualifierColumn = tbEntityTypeQualifierColumn.Text; tag.EntityTypeQualifierValue = tbEntityTypeQualifierValue.Text; tagService.Save(tag, CurrentPersonId); } var qryParams = new Dictionary <string, string>(); qryParams["tagId"] = tag.Id.ToString(); NavigateToPage(this.CurrentPage.Guid, qryParams); }
public HttpResponseMessage Post( int entityTypeId, int ownerId, Guid entityGuid, string name, string entityQualifier, string entityQualifierValue ) { SetProxyCreation( true ); var personAlias = GetPersonAlias(); var tagService = new TagService( (Rock.Data.RockContext)Service.Context ); var tag = tagService.Get( entityTypeId, entityQualifier, entityQualifierValue, ownerId, name ); if ( tag == null ) { tag = new Tag(); tag.EntityTypeId = entityTypeId; tag.EntityTypeQualifierColumn = entityQualifier; tag.EntityTypeQualifierValue = entityQualifierValue; tag.OwnerPersonAliasId = new PersonAliasService( (Rock.Data.RockContext)Service.Context ).GetPrimaryAliasId( ownerId ); tag.Name = name; tagService.Add( tag ); } tag.TaggedItems = tag.TaggedItems ?? new Collection<TaggedItem>(); var taggedItem = tag.TaggedItems.FirstOrDefault( i => i.EntityGuid.Equals( entityGuid ) ); if ( taggedItem == null ) { taggedItem = new TaggedItem(); taggedItem.Tag = tag; taggedItem.EntityGuid = entityGuid; tag.TaggedItems.Add( taggedItem ); } System.Web.HttpContext.Current.Items.Add( "CurrentPerson", GetPerson() ); Service.Context.SaveChanges(); return ControllerContext.Request.CreateResponse( HttpStatusCode.Created ); }
/// <summary> /// Handles the Click event of the btnSave control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> protected void btnSave_Click(object sender, EventArgs e) { var rockContext = new RockContext(); var tagService = new Rock.Model.TagService(rockContext); Tag tag = null; int tagId = int.Parse(hfId.Value); if (tagId != 0) { tag = tagService.Get(tagId); } if (tag == null) { tag = new Tag(); tag.IsSystem = false; tagService.Add(tag); } string name = tbName.Text; int? ownerId = ppOwner.PersonId; int? entityTypeId = ddlEntityType.SelectedValueAsId(); string qualifierCol = tbEntityTypeQualifierColumn.Text; string qualifierVal = tbEntityTypeQualifierValue.Text; // Verify tag with same name does not already exist if (tagService.Queryable() .Where(t => t.Id != tagId && t.Name == name && ( (t.OwnerPersonAlias == null && !ownerId.HasValue) || (t.OwnerPersonAlias != null && ownerId.HasValue && t.OwnerPersonAlias.PersonId == ownerId.Value) ) && (!t.EntityTypeId.HasValue || ( t.EntityTypeId.Value == entityTypeId && t.EntityTypeQualifierColumn == qualifierCol && t.EntityTypeQualifierValue == qualifierVal) )) .Any()) { nbEditError.Heading = "Tag Already Exists"; nbEditError.Text = string.Format("A '{0}' tag already exists for the selected scope, owner, and entity type.", name); nbEditError.Visible = true; } else { int?ownerPersonAliasId = null; if (ownerId.HasValue) { ownerPersonAliasId = new PersonAliasService(rockContext).GetPrimaryAliasId(ownerId.Value); } tag.Name = name; tag.Description = tbDescription.Text; tag.IsActive = cbIsActive.Checked; tag.IconCssClass = tbIconCssClass.Text; tag.BackgroundColor = cpBackground.Value; if (_canConfigure) { tag.CategoryId = cpCategory.SelectedValueAsInt(); tag.OwnerPersonAliasId = ownerPersonAliasId; tag.EntityTypeId = entityTypeId; tag.EntityTypeQualifierColumn = qualifierCol; tag.EntityTypeQualifierValue = qualifierVal; } avcAttributes.GetEditValues(tag); // only save if everything saves: rockContext.WrapTransaction(() => { rockContext.SaveChanges(); tag.SaveAttributeValues(); }); var qryParams = new Dictionary <string, string>(); qryParams["TagId"] = tag.Id.ToString(); NavigateToPage(RockPage.Guid, qryParams); } }
/// <summary> /// Handles the Click event of the btnSave control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> protected void btnSave_Click( object sender, EventArgs e ) { var rockContext = new RockContext(); var tagService = new Rock.Model.TagService( rockContext ); Tag tag = null; int tagId = int.Parse( hfId.Value ); if ( tagId != 0 ) { tag = tagService.Get( tagId ); } if ( tag == null ) { tag = new Tag(); tag.IsSystem = false; tagService.Add( tag ); } string name = tbName.Text; int? ownerId = ppOwner.PersonId; int entityTypeId = ddlEntityType.SelectedValueAsId().Value; string qualifierCol = tbEntityTypeQualifierColumn.Text; string qualifierVal = tbEntityTypeQualifierValue.Text; // Verify tag with same name does not already exist if (tagService.Queryable() .Where( t => t.Id != tagId && t.Name == name && ( ( t.OwnerPersonAlias == null && !ownerId.HasValue ) || ( t.OwnerPersonAlias != null && ownerId.HasValue && t.OwnerPersonAlias.PersonId == ownerId.Value ) ) && t.EntityTypeId == entityTypeId && t.EntityTypeQualifierColumn == qualifierCol && t.EntityTypeQualifierValue == qualifierVal ) .Any()) { nbEditError.Heading = "Tag Already Exists"; nbEditError.Text = string.Format("A '{0}' tag already exists for the selected scope, owner, and entity type.", name); nbEditError.Visible = true; } else { int? ownerPersonAliasId = null; if (ownerId.HasValue) { ownerPersonAliasId = new PersonAliasService( rockContext ).GetPrimaryAliasId( ownerId.Value ); } tag.Name = name; tag.Description = tbDescription.Text; tag.OwnerPersonAliasId = ownerPersonAliasId; tag.EntityTypeId = entityTypeId; tag.EntityTypeQualifierColumn = qualifierCol; tag.EntityTypeQualifierValue = qualifierVal; rockContext.SaveChanges(); var qryParams = new Dictionary<string, string>(); qryParams["tagId"] = tag.Id.ToString(); NavigateToPage( RockPage.Guid, qryParams ); } }
/// <summary> /// Executes the specified workflow. /// </summary> /// <param name="rockContext">The rock context.</param> /// <param name="action">The action.</param> /// <param name="entity">The entity.</param> /// <param name="errorMessages">The error messages.</param> /// <returns></returns> public override bool Execute( RockContext rockContext, WorkflowAction action, Object entity, out List<string> errorMessages ) { errorMessages = new List<string>(); // get the tag string tagName = GetAttributeValue( action, "OrganizationTag" ).ResolveMergeFields( GetMergeFields( action ) ); ; if (!string.IsNullOrEmpty(tagName)) { // get person entity type var personEntityType = Rock.Web.Cache.EntityTypeCache.Read("Rock.Model.Person"); // get tag TagService tagService = new TagService( rockContext ); Tag orgTag = tagService.Queryable().Where( t => t.Name == tagName && t.EntityTypeId == personEntityType.Id && t.OwnerPersonAlias == null ).FirstOrDefault(); if ( orgTag == null ) { // add tag first orgTag = new Tag(); orgTag.Name = tagName; orgTag.EntityTypeQualifierColumn = string.Empty; orgTag.EntityTypeQualifierValue = string.Empty; orgTag.EntityTypeId = personEntityType.Id; tagService.Add( orgTag ); rockContext.SaveChanges(); // new up a list of items for later count orgTag.TaggedItems = new List<TaggedItem>(); } // get the person and add them to the tag string value = GetAttributeValue( action, "Person" ); Guid guidPersonAttribute = value.AsGuid(); if ( !guidPersonAttribute.IsEmpty() ) { var attributePerson = AttributeCache.Read( guidPersonAttribute, rockContext ); if ( attributePerson != null ) { string attributePersonValue = action.GetWorklowAttributeValue( guidPersonAttribute ); if ( !string.IsNullOrWhiteSpace( attributePersonValue ) ) { if ( attributePerson.FieldType.Class == "Rock.Field.Types.PersonFieldType" ) { Guid personAliasGuid = attributePersonValue.AsGuid(); if ( !personAliasGuid.IsEmpty() ) { var person = new PersonAliasService( rockContext ).Queryable() .Where( a => a.Guid.Equals( personAliasGuid ) ) .Select( a => a.Person ) .FirstOrDefault(); if ( person != null ) { // add person to tag if they are not already in it if ( orgTag.TaggedItems.Where( i => i.EntityGuid == person.PrimaryAlias.AliasPersonGuid && i.TagId == orgTag.Id ).Count() == 0 ) { TaggedItem taggedPerson = new TaggedItem(); taggedPerson.Tag = orgTag; taggedPerson.EntityGuid = person.PrimaryAlias.AliasPersonGuid; orgTag.TaggedItems.Add( taggedPerson ); rockContext.SaveChanges(); } else { action.AddLogEntry( string.Format( "{0} already tagged with {1}", person.FullName, orgTag.Name ) ); } return true; } else { errorMessages.Add( string.Format( "Person could not be found for selected value ('{0}')!", guidPersonAttribute.ToString() ) ); } } } else { errorMessages.Add( "The attribute used to provide the person was not of type 'Person'." ); } } } } } else { errorMessages.Add("No organization tag was provided"); } errorMessages.ForEach( m => action.AddLogEntry( m, true ) ); return true; }
/// <summary> /// Saves the tag values that user entered for the entity ( /// </summary> /// <param name="currentPersonId">The current person identifier.</param> public void SaveTagValues(int? currentPersonId) { if ( EntityGuid != Guid.Empty ) { var tagService = new TagService(); var taggedItemService = new TaggedItemService(); // Get the existing tags for this entity type var existingTags = tagService.Get( EntityTypeId, EntityQualifierColumn, EntityQualifierValue, currentPersonId ).ToList(); // Get the existing tagged items for this entity var existingTaggedItems = taggedItemService.Get( EntityTypeId, EntityQualifierColumn, EntityQualifierValue, currentPersonId, EntityGuid ); // Get tag values after user edit var currentTags = new List<Tag>(); foreach ( var value in this.Text.Split( new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries ) ) { string tagName = value; if ( tagName.Contains( '^' ) ) { tagName = tagName.Split( new char[] { '^' }, StringSplitOptions.RemoveEmptyEntries )[0]; } // If this is a new tag, create it Tag tag = existingTags.FirstOrDefault( t => t.Name.Equals( tagName, StringComparison.OrdinalIgnoreCase ) ); if ( tag == null && currentPersonId != null ) { tag = new Tag(); tag.EntityTypeId = EntityTypeId; tag.EntityTypeQualifierColumn = EntityQualifierColumn; tag.EntityTypeQualifierValue = EntityQualifierValue; tag.OwnerId = currentPersonId.Value; tag.Name = tagName; tagService.Add( tag, currentPersonId ); tagService.Save( tag, currentPersonId ); } if ( tag != null ) { currentTags.Add( tag ); } } // Delete any tagged items that user removed var names = currentTags.Select( t => t.Name ).ToList(); foreach ( var taggedItem in existingTaggedItems) { if ( !names.Contains( taggedItem.Tag.Name, StringComparer.OrdinalIgnoreCase ) ) { taggedItemService.Delete( taggedItem, currentPersonId ); taggedItemService.Save( taggedItem, currentPersonId ); } } // Add any tagged items that user added names = existingTaggedItems.Select( t => t.Tag.Name ).ToList(); foreach ( var tag in currentTags) { if ( !names.Contains( tag.Name, StringComparer.OrdinalIgnoreCase ) ) { var taggedItem = new TaggedItem(); taggedItem.TagId = tag.Id; taggedItem.EntityGuid = EntityGuid; taggedItemService.Add( taggedItem, currentPersonId ); taggedItemService.Save( taggedItem, currentPersonId ); } } } }
/// <summary> /// Handles the Click event of the btnSave control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> protected void btnSave_Click( object sender, EventArgs e ) { Tag tag; using ( new Rock.Data.UnitOfWorkScope() ) { var tagService = new Rock.Model.TagService(); int tagId = int.Parse( hfId.Value ); if ( tagId == 0 ) { tag = new Tag(); tag.IsSystem = false; tagService.Add( tag, CurrentPersonId ); } else { tag = tagService.Get( tagId ); } tag.Name = tbName.Text; tag.OwnerId = ppOwner.PersonId; tag.EntityTypeId = ddlEntityType.SelectedValueAsId().Value; tag.EntityTypeQualifierColumn = tbEntityTypeQualifierColumn.Text; tag.EntityTypeQualifierValue = tbEntityTypeQualifierValue.Text; tagService.Save( tag, CurrentPersonId ); } var qryParams = new Dictionary<string, string>(); qryParams["tagId"] = tag.Id.ToString(); NavigateToPage( RockPage.Guid, qryParams ); }