diff --git a/src/Umbraco.Core/Services/DataTypeService.cs b/src/Umbraco.Core/Services/DataTypeService.cs index 3f42a441d8..9eef58a607 100644 --- a/src/Umbraco.Core/Services/DataTypeService.cs +++ b/src/Umbraco.Core/Services/DataTypeService.cs @@ -46,15 +46,16 @@ namespace Umbraco.Core.Services if (SavingContainer.IsRaisedEventCancelled( new SaveEventArgs(container, evtMsgs), - this)) + this, uow.EventManager)) { + uow.Commit(); return Attempt.Fail(new OperationStatus(container, OperationStatusType.FailedCancelledByEvent, evtMsgs)); } repo.AddOrUpdate(container); uow.Commit(); - SavedContainer.RaiseEvent(new SaveEventArgs(container, evtMsgs), this); + SavedContainer.RaiseEvent(new SaveEventArgs(container, evtMsgs), this, uow.EventManager); //TODO: Audit trail ? return Attempt.Succeed(new OperationStatus(container, OperationStatusType.Success, evtMsgs)); @@ -68,7 +69,7 @@ namespace Umbraco.Core.Services public EntityContainer GetContainer(int containerId) { - var uow = UowProvider.GetUnitOfWork(); + var uow = UowProvider.GetReadOnlyUnitOfWork(); using (var repo = RepositoryFactory.CreateEntityContainerRepository(uow, Constants.ObjectTypes.DataTypeContainerGuid)) { var container = repo.Get(containerId); @@ -78,7 +79,7 @@ namespace Umbraco.Core.Services public EntityContainer GetContainer(Guid containerId) { - var uow = UowProvider.GetUnitOfWork(); + var uow = UowProvider.GetReadOnlyUnitOfWork(); using (var repo = RepositoryFactory.CreateEntityContainerRepository(uow, Constants.ObjectTypes.DataTypeContainerGuid)) { var container = repo.Get(containerId); @@ -88,7 +89,7 @@ namespace Umbraco.Core.Services public IEnumerable GetContainers(string name, int level) { - var uow = UowProvider.GetUnitOfWork(); + var uow = UowProvider.GetReadOnlyUnitOfWork(); using (var repo = RepositoryFactory.CreateEntityContainerRepository(uow, Constants.ObjectTypes.DataTypeContainerGuid)) { return repo.Get(name, level); @@ -112,7 +113,7 @@ namespace Umbraco.Core.Services public IEnumerable GetContainers(int[] containerIds) { - var uow = UowProvider.GetUnitOfWork(); + var uow = UowProvider.GetReadOnlyUnitOfWork(); using (var repo = RepositoryFactory.CreateEntityContainerRepository(uow, Constants.ObjectTypes.DataTypeContainerGuid)) { return repo.GetAll(containerIds); @@ -137,7 +138,7 @@ namespace Umbraco.Core.Services if (SavingContainer.IsRaisedEventCancelled( new SaveEventArgs(container, evtMsgs), - this)) + this, UowProvider)) { return OperationStatus.Cancelled(evtMsgs); } @@ -147,10 +148,9 @@ namespace Umbraco.Core.Services { repo.AddOrUpdate(container); uow.Commit(); + SavedContainer.RaiseEvent(new SaveEventArgs(container, evtMsgs), this, uow.EventManager); } - SavedContainer.RaiseEvent(new SaveEventArgs(container, evtMsgs), this); - //TODO: Audit trail ? return OperationStatus.Success(evtMsgs); @@ -167,15 +167,16 @@ namespace Umbraco.Core.Services if (DeletingContainer.IsRaisedEventCancelled( new DeleteEventArgs(container, evtMsgs), - this)) + this, uow.EventManager)) { + uow.Commit(); return Attempt.Fail(new OperationStatus(OperationStatusType.FailedCancelledByEvent, evtMsgs)); } repo.Delete(container); uow.Commit(); - DeletedContainer.RaiseEvent(new DeleteEventArgs(container, evtMsgs), this); + DeletedContainer.RaiseEvent(new DeleteEventArgs(container, evtMsgs), this, uow.EventManager); return OperationStatus.Success(evtMsgs); //TODO: Audit trail ? @@ -191,7 +192,7 @@ namespace Umbraco.Core.Services /// public IDataTypeDefinition GetDataTypeDefinitionByName(string name) { - using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetUnitOfWork())) + using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetReadOnlyUnitOfWork())) { return repository.GetByQuery(new Query().Where(x => x.Name == name)).FirstOrDefault(); } @@ -204,7 +205,7 @@ namespace Umbraco.Core.Services /// public IDataTypeDefinition GetDataTypeDefinitionById(int id) { - using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetUnitOfWork())) + using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetReadOnlyUnitOfWork())) { return repository.Get(id); } @@ -217,7 +218,7 @@ namespace Umbraco.Core.Services /// public IDataTypeDefinition GetDataTypeDefinitionById(Guid id) { - using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetUnitOfWork())) + using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetReadOnlyUnitOfWork())) { var query = Query.Builder.Where(x => x.Key == id); var definitions = repository.GetByQuery(query); @@ -245,7 +246,7 @@ namespace Umbraco.Core.Services /// Collection of objects with a matching contorl id public IEnumerable GetDataTypeDefinitionByPropertyEditorAlias(string propertyEditorAlias) { - using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetUnitOfWork())) + using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetReadOnlyUnitOfWork())) { var query = Query.Builder.Where(x => x.PropertyEditorAlias == propertyEditorAlias); var definitions = repository.GetByQuery(query); @@ -261,7 +262,7 @@ namespace Umbraco.Core.Services /// An enumerable list of objects public IEnumerable GetAllDataTypeDefinitions(params int[] ids) { - using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetUnitOfWork())) + using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetReadOnlyUnitOfWork())) { return repository.GetAll(ids); } @@ -274,7 +275,7 @@ namespace Umbraco.Core.Services /// An enumerable list of string values public IEnumerable GetPreValuesByDataTypeId(int id) { - using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetUnitOfWork())) + using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetReadOnlyUnitOfWork())) { var collection = repository.GetPreValuesCollectionByDataTypeId(id); //now convert the collection to a string list @@ -292,7 +293,7 @@ namespace Umbraco.Core.Services /// public PreValueCollection GetPreValuesCollectionByDataTypeId(int id) { - using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetUnitOfWork())) + using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetReadOnlyUnitOfWork())) { return repository.GetPreValuesCollectionByDataTypeId(id); } @@ -305,7 +306,7 @@ namespace Umbraco.Core.Services /// PreValue as a string public string GetPreValueAsString(int id) { - using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetUnitOfWork())) + using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(UowProvider.GetReadOnlyUnitOfWork())) { return repository.GetPreValueAsString(id); } @@ -317,7 +318,7 @@ namespace Umbraco.Core.Services if (Moving.IsRaisedEventCancelled( new MoveEventArgs(evtMsgs, new MoveEventInfo(toMove, toMove.Path, parentId)), - this)) + this, UowProvider)) { return Attempt.Fail( new OperationStatus( @@ -346,10 +347,9 @@ namespace Umbraco.Core.Services new OperationStatus(ex.Operation, evtMsgs)); } uow.Commit(); + Moved.RaiseEvent(new MoveEventArgs(false, evtMsgs, moveInfo.ToArray()), this, uow.EventManager); } - Moved.RaiseEvent(new MoveEventArgs(false, evtMsgs, moveInfo.ToArray()), this); - return Attempt.Succeed( new OperationStatus(MoveOperationStatusType.Success, evtMsgs)); } @@ -362,17 +362,18 @@ namespace Umbraco.Core.Services public void Save(IDataTypeDefinition dataTypeDefinition, int userId = 0) { var uow = UowProvider.GetUnitOfWork(); - - if (Saving.IsRaisedEventCancelled(new SaveEventArgs(dataTypeDefinition), this, uow.EventManager)) - return; - using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(uow)) { + if (Saving.IsRaisedEventCancelled(new SaveEventArgs(dataTypeDefinition), this, uow.EventManager)) + { + uow.Commit(); + return; + } dataTypeDefinition.CreatorId = userId; repository.AddOrUpdate(dataTypeDefinition); uow.Commit(); - Saved.RaiseEvent(new SaveEventArgs(dataTypeDefinition, false), this); + Saved.RaiseEvent(new SaveEventArgs(dataTypeDefinition, false), this, uow.EventManager); } Audit(AuditType.Save, string.Format("Save DataTypeDefinition performed by user"), userId, dataTypeDefinition.Id); @@ -396,29 +397,29 @@ namespace Umbraco.Core.Services /// Boolean indicating whether or not to raise events public void Save(IEnumerable dataTypeDefinitions, int userId, bool raiseEvents) { - using (var uow = UowProvider.GetUnitOfWork()) + var uow = UowProvider.GetUnitOfWork(); + using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(uow)) { if (raiseEvents) { if (Saving.IsRaisedEventCancelled(new SaveEventArgs(dataTypeDefinitions), this, uow.EventManager)) - return; - } - - using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(uow)) - { - foreach (var dataTypeDefinition in dataTypeDefinitions) { - dataTypeDefinition.CreatorId = userId; - repository.AddOrUpdate(dataTypeDefinition); + uow.Commit(); + return; } - uow.Commit(); - - if (raiseEvents) - Saved.RaiseEvent(new SaveEventArgs(dataTypeDefinitions, false), this); } + foreach (var dataTypeDefinition in dataTypeDefinitions) + { + dataTypeDefinition.CreatorId = userId; + repository.AddOrUpdate(dataTypeDefinition); + } + uow.Commit(); - Audit(AuditType.Save, string.Format("Save DataTypeDefinition performed by user"), userId, -1); - } + if (raiseEvents) + Saved.RaiseEvent(new SaveEventArgs(dataTypeDefinitions, false), this, uow.EventManager); + } + + Audit(AuditType.Save, string.Format("Save DataTypeDefinition performed by user"), userId, -1); } /// @@ -433,25 +434,20 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.GetUnitOfWork()) { - using (var transaction = uow.Database.GetTransaction()) - { - var sortOrderObj = + var sortOrderObj = uow.Database.ExecuteScalar( "SELECT max(sortorder) FROM cmsDataTypePreValues WHERE datatypeNodeId = @DataTypeId", new { DataTypeId = dataTypeId }); - int sortOrder; - if (sortOrderObj == null || int.TryParse(sortOrderObj.ToString(), out sortOrder) == false) - { - sortOrder = 1; - } + int sortOrder; + if (sortOrderObj == null || int.TryParse(sortOrderObj.ToString(), out sortOrder) == false) + { + sortOrder = 1; + } - foreach (var value in values) - { - var dto = new DataTypePreValueDto { DataTypeNodeId = dataTypeId, Value = value, SortOrder = sortOrder }; - uow.Database.Insert(dto); - sortOrder++; - } - - transaction.Complete(); + foreach (var value in values) + { + var dto = new DataTypePreValueDto { DataTypeNodeId = dataTypeId, Value = value, SortOrder = sortOrder }; + uow.Database.Insert(dto); + sortOrder++; } } } @@ -504,32 +500,30 @@ namespace Umbraco.Core.Services /// public void SaveDataTypeAndPreValues(IDataTypeDefinition dataTypeDefinition, IDictionary values, int userId = 0) { - using (var uow = UowProvider.GetUnitOfWork()) + if (Saving.IsRaisedEventCancelled(new SaveEventArgs(dataTypeDefinition), this, UowProvider)) + return; + + // if preValues contain the data type, override the data type definition accordingly + if (values != null && values.ContainsKey(Constants.PropertyEditors.PreValueKeys.DataValueType)) + dataTypeDefinition.DatabaseType = PropertyValueEditor.GetDatabaseType(values[Constants.PropertyEditors.PreValueKeys.DataValueType].Value); + + var uow = UowProvider.GetUnitOfWork(); + using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(uow)) { - if (Saving.IsRaisedEventCancelled(new SaveEventArgs(dataTypeDefinition), this, uow.EventManager)) - return; + dataTypeDefinition.CreatorId = userId; - // if preValues contain the data type, override the data type definition accordingly - if (values != null && values.ContainsKey(Constants.PropertyEditors.PreValueKeys.DataValueType)) - dataTypeDefinition.DatabaseType = PropertyValueEditor.GetDatabaseType(values[Constants.PropertyEditors.PreValueKeys.DataValueType].Value); + //add/update the dtd + repository.AddOrUpdate(dataTypeDefinition); - using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(uow)) - { - dataTypeDefinition.CreatorId = userId; + //add/update the prevalues + repository.AddOrUpdatePreValues(dataTypeDefinition, values); - //add/update the dtd - repository.AddOrUpdate(dataTypeDefinition); + uow.Commit(); - //add/update the prevalues - repository.AddOrUpdatePreValues(dataTypeDefinition, values); - - uow.Commit(); - - Saved.RaiseEvent(new SaveEventArgs(dataTypeDefinition, false), this); - } - - Audit(AuditType.Save, string.Format("Save DataTypeDefinition performed by user"), userId, dataTypeDefinition.Id); + Saved.RaiseEvent(new SaveEventArgs(dataTypeDefinition, false), this, uow.EventManager); } + + Audit(AuditType.Save, string.Format("Save DataTypeDefinition performed by user"), userId, dataTypeDefinition.Id); } /// @@ -543,22 +537,20 @@ namespace Umbraco.Core.Services /// Optional Id of the user issueing the deletion public void Delete(IDataTypeDefinition dataTypeDefinition, int userId = 0) { - using (var uow = UowProvider.GetUnitOfWork()) + if (Deleting.IsRaisedEventCancelled(new DeleteEventArgs(dataTypeDefinition), this, UowProvider)) + return; + + var uow = UowProvider.GetUnitOfWork(); + using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(uow)) { - if (Deleting.IsRaisedEventCancelled(new DeleteEventArgs(dataTypeDefinition), this, uow.EventManager)) - return; + repository.Delete(dataTypeDefinition); - using (var repository = RepositoryFactory.CreateDataTypeDefinitionRepository(uow)) - { - repository.Delete(dataTypeDefinition); + uow.Commit(); - uow.Commit(); - - Deleted.RaiseEvent(new DeleteEventArgs(dataTypeDefinition, false), this); - } - - Audit(AuditType.Delete, string.Format("Delete DataTypeDefinition performed by user"), userId, dataTypeDefinition.Id); + Deleted.RaiseEvent(new DeleteEventArgs(dataTypeDefinition, false), this, uow.EventManager); } + + Audit(AuditType.Delete, string.Format("Delete DataTypeDefinition performed by user"), userId, dataTypeDefinition.Id); } ///