Example #1
0
        /// <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 );
        }
Example #3
0
        /// <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 );
        }
Example #5
0
        /// <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;
        }
Example #8
0
        /// <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 );
                    }
                }
            }
        }
Example #9
0
        /// <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 );
        }