/// <summary> /// Determines if relationship to the source entity already exists. /// </summary> /// <typeparam name="TT">The type of the t.</typeparam> /// <param name="entityId">The entity identifier.</param> /// <param name="relatedEntity">The related entity.</param> /// <param name="purposeKey">The purpose key.</param> /// <param name="qualifierValue">The qualifier value.</param> /// <returns></returns> public bool RelatedToSourceEntityAlreadyExists <TT>(int entityId, TT relatedEntity, string purposeKey, string qualifierValue) where TT : IEntity { if (entityId == 0 || relatedEntity.Id == 0) { return(false); } var relatedEntityTypeId = EntityTypeCache.GetId <TT>(); var sourceEntityTypeId = EntityTypeCache.GetId <T>(); var relatedEntityService = new Rock.Model.RelatedEntityService(this.Context as RockContext); if (relatedEntityService.Queryable().Any(a => a.SourceEntityTypeId == sourceEntityTypeId.Value && a.SourceEntityId == entityId && a.TargetEntityTypeId == relatedEntityTypeId.Value && a.TargetEntityId == relatedEntity.Id && a.PurposeKey == purposeKey && a.QualifierValue == qualifierValue ) ) { return(true); } return(false); }
/// <summary> /// Returns a queryable collection of <see cref="Rock.Data.IEntity"/> entities of the given entity type that (optionally) also have a matching purpose key. /// </summary> /// <param name="entityId">The Id of the entity you want to get the list of related entities for</param> /// <param name="relatedEntityTypeId">A <see cref="System.Int32"/> representing the related entity type identifier.</param> /// <param name="purposeKey">A <see cref="System.String"/> representing the purpose key.</param> /// <returns> /// Returns a queryable collection of <see cref="Rock.Data.IEntity"/> entities. /// </returns> public IQueryable <IEntity> GetRelatedSourceOrTargetEntities(int entityId, int relatedEntityTypeId, string purposeKey) { var rockContext = this.Context as RockContext; var entityType = EntityTypeCache.Get(typeof(T), false, rockContext); var srcQuery = new Rock.Model.RelatedEntityService(rockContext).GetRelatedToSource(entityId, entityType.Id, relatedEntityTypeId, purposeKey); var tgtQuery = new Rock.Model.RelatedEntityService(rockContext).GetRelatedToTarget(entityId, entityType.Id, relatedEntityTypeId, purposeKey); if (srcQuery != null && tgtQuery != null) { return(srcQuery.Union(tgtQuery)); } else if (srcQuery != null && tgtQuery == null) { return(srcQuery); } else if (srcQuery == null && tgtQuery != null) { return(tgtQuery); } return(null); }
/// <summary> /// Returns a queryable collection of <see cref="Rock.Data.IEntity" /> source entities (related to the given target entity) for the given entity type and (optionally) also have a matching purpose key. /// </summary> /// <param name="targetEntityId">The target entity identifier.</param> /// <param name="relatedEntityTypeId">A <see cref="System.Int32" /> representing the related entity type identifier.</param> /// <param name="purposeKey">A <see cref="System.String" /> representing the purpose key.</param> /// <returns> /// Returns a queryable collection of <see cref="Rock.Data.IEntity" /> entities. /// </returns> public IQueryable <IEntity> GetRelatedToTargetEntity(int targetEntityId, int relatedEntityTypeId, string purposeKey) { var rockContext = this.Context as RockContext; var entityType = EntityTypeCache.Get(typeof(T), false, rockContext); var tgtQuery = new Rock.Model.RelatedEntityService(rockContext).GetRelatedToTarget(targetEntityId, entityType.Id, relatedEntityTypeId, purposeKey); return(tgtQuery); }
/// <summary> /// Deletes the relationship between the relatedEntity and the entity for the given QualifierValue. /// </summary> /// <typeparam name="TT">The type of the t.</typeparam> /// <param name="entityId">The entity identifier.</param> /// <param name="relatedEntity">The related entity.</param> /// <param name="purposeKey">The purpose key.</param> /// <param name="qualifierValue">The qualifier value.</param> public void DeleteRelatedToSourceEntity <TT>(int entityId, TT relatedEntity, string purposeKey, string qualifierValue) where TT : IEntity { var relatedEntityTypeId = EntityTypeCache.GetId <TT>(); var sourceEntityTypeId = EntityTypeCache.GetId <T>(); var relatedEntityService = new Rock.Model.RelatedEntityService(this.Context as RockContext); var relatedEntityRecords = relatedEntityService.GetRelatedEntityRecordsToSource(entityId, sourceEntityTypeId.Value, relatedEntityTypeId.Value, purposeKey, qualifierValue); relatedEntityService.DeleteRange(relatedEntityRecords); }
/// <summary> /// Deletes a RelatedEntity for the given source entity, target entity, purpose key, and qualifier value. /// </summary> /// <typeparam name="TT">The type of the t.</typeparam> /// <param name="entityId">The entity identifier.</param> /// <param name="targetEntity">The target entity.</param> /// <param name="purposeKey">The purpose key.</param> /// <param name="qualifierValue">The qualifier value.</param> public void DeleteTargetEntityFromSourceEntity <TT>(int entityId, TT targetEntity, string purposeKey, string qualifierValue = null) where TT : IEntity { var relatedEntityTypeId = EntityTypeCache.GetId <TT>(); var sourceEntityTypeId = EntityTypeCache.GetId <T>(); var relatedEntityService = new Rock.Model.RelatedEntityService(this.Context as RockContext); var relatedEntity = relatedEntityService.GetRelatedEntityRecordToSource(entityId, sourceEntityTypeId.Value, relatedEntityTypeId.Value, targetEntity.Id, purposeKey, qualifierValue); if (relatedEntity != null) { relatedEntityService.Delete(relatedEntity); } }
/// <summary> /// Adds a relationship between the relatedEntity and the entity /// </summary> /// <typeparam name="TT">The type of the t.</typeparam> /// <param name="entityId">The entity identifier.</param> /// <param name="relatedEntity">The related entity.</param> /// <param name="purposeKey">The purpose key.</param> /// <param name="qualifierValue">The qualifier value.</param> public void AddRelatedToSourceEntity <TT>(int entityId, TT relatedEntity, string purposeKey, string qualifierValue) where TT : IEntity { var relatedEntityService = new Rock.Model.RelatedEntityService(this.Context as RockContext); var relatedEntityTypeId = EntityTypeCache.GetId <TT>(); var sourceEntityTypeId = EntityTypeCache.GetId <T>(); relatedEntityService.Add( new RelatedEntity { SourceEntityTypeId = sourceEntityTypeId.Value, SourceEntityId = entityId, TargetEntityTypeId = relatedEntityTypeId.Value, TargetEntityId = relatedEntity.Id, PurposeKey = purposeKey, QualifierValue = qualifierValue } ); }
/// <summary> /// Adds a relationship between the relatedEntity and the entity /// </summary> /// <typeparam name="TT">The type of the t.</typeparam> /// <param name="entityId">The entity identifier.</param> /// <param name="relatedEntity">The related entity.</param> /// <param name="purposeKey">The purpose key.</param> public void AddRelatedToSourceEntity <TT>(int entityId, TT relatedEntity, string purposeKey) where TT : IEntity { var relatedEntityTypeId = EntityTypeCache.GetId <TT>(); var sourceEntityTypeId = EntityTypeCache.GetId <T>(); var relatedEntityRecord = new RelatedEntity(); relatedEntityRecord.SourceEntityTypeId = sourceEntityTypeId.Value; relatedEntityRecord.SourceEntityId = entityId; relatedEntityRecord.TargetEntityTypeId = relatedEntityTypeId.Value; relatedEntityRecord.TargetEntityId = relatedEntity.Id; relatedEntityRecord.PurposeKey = purposeKey; var relatedEntityService = new Rock.Model.RelatedEntityService(this.Context as RockContext); relatedEntityService.Add(relatedEntityRecord); }
/// <summary> /// Sets the related target entities for the given source entity type, purpose key, and qualifier value. /// </summary> /// <typeparam name="TT">The type of the t.</typeparam> /// <param name="entityId">The entity identifier.</param> /// <param name="relatedEntities">The related entities.</param> /// <param name="purposeKey">The purpose key.</param> /// <param name="qualifierValue">The qualifier value.</param> public void SetRelatedToSourceEntity <TT>(int entityId, List <TT> relatedEntities, string purposeKey, string qualifierValue) where TT : IEntity { var relatedEntityTypeId = EntityTypeCache.GetId <TT>(); var sourceEntityTypeId = EntityTypeCache.GetId <T>(); var currentRelatedEntities = GetRelatedToSourceEntityQualifier <TT>(entityId, purposeKey, qualifierValue).ToList(); var relatedEntityService = new Rock.Model.RelatedEntityService(this.Context as RockContext); var relatedEntityIds = relatedEntities.Select(a => a.Id).ToList(); // delete related entities that are no longer in the list foreach (var currentRelatedEntity in currentRelatedEntities.Where(a => !relatedEntityIds.Contains(a.Id))) { // get related entity record(s) that need to be deleted since the relatedEntity is no longer in the list var relatedEntityToDelete = relatedEntityService .Queryable() .Where(a => a.SourceEntityTypeId == sourceEntityTypeId.Value && a.TargetEntityTypeId == relatedEntityTypeId.Value && a.SourceEntityId == entityId && a.TargetEntityId == currentRelatedEntity.Id && a.PurposeKey == purposeKey && a.QualifierValue == qualifierValue) .ToList(); relatedEntityService.DeleteRange(relatedEntityToDelete); } // add related entity record for related entities that that don't have a related entity record foreach (var relatedEntityId in relatedEntityIds.Where(a => !currentRelatedEntities.Any(r => r.Id == a))) { var relatedEntityRecord = new RelatedEntity { SourceEntityTypeId = sourceEntityTypeId.Value, SourceEntityId = entityId, TargetEntityTypeId = relatedEntityTypeId.Value, TargetEntityId = relatedEntityId, PurposeKey = purposeKey, QualifierValue = qualifierValue }; relatedEntityService.Add(relatedEntityRecord); } }