protected override void PersistUpdatedItem(IDataTypeDefinition entity) { //Updates Modified date and Version Guid ((DataTypeDefinition)entity).UpdatingEntity(); //Look up parent to get and set the correct Path if ParentId has changed if (((ICanBeDirty)entity).IsPropertyDirty("ParentId")) { var parent = Database.First <NodeDto>("WHERE id = @ParentId", new { ParentId = entity.ParentId }); entity.Path = string.Concat(parent.Path, ",", entity.Id); entity.Level = parent.Level + 1; var maxSortOrder = Database.ExecuteScalar <int>( "SELECT coalesce(max(sortOrder),0) FROM umbracoNode WHERE parentid = @ParentId AND nodeObjectType = @NodeObjectType", new { ParentId = entity.ParentId, NodeObjectType = NodeObjectTypeId }); entity.SortOrder = maxSortOrder + 1; } var factory = new DataTypeDefinitionFactory(NodeObjectTypeId); //Look up DataTypeDefinition entry to get Primary for updating the DTO var dataTypeDto = Database.SingleOrDefault <DataTypeDto>("WHERE nodeId = @Id", new { Id = entity.Id }); factory.SetPrimaryKey(dataTypeDto.PrimaryKey); var dto = factory.BuildDto(entity); //Updates the (base) node data - umbracoNode var nodeDto = dto.NodeDto; Database.Update(nodeDto); Database.Update(dto); ((ICanBeDirty)entity).ResetDirtyProperties(); }
protected override IEnumerable <IDataTypeDefinition> PerformGetByQuery(IQuery <IDataTypeDefinition> query) { var factory = new DataTypeDefinitionFactory(NodeObjectTypeId); var sqlClause = GetBaseQuery(false); var translator = new SqlTranslator <IDataTypeDefinition>(sqlClause, query); var sql = translator.Translate(); var dtos = Database.Fetch <DataTypeDto, NodeDto>(sql); return(dtos.Select(factory.BuildEntity).ToArray()); }
protected override void PersistUpdatedItem(IDataTypeDefinition entity) { entity.Name = EnsureUniqueNodeName(entity.Name, entity.Id); //Cannot change to a duplicate alias var exists = Database.ExecuteScalar <int>(@"SELECT COUNT(*) FROM cmsDataType INNER JOIN umbracoNode ON cmsDataType.nodeId = umbracoNode.id WHERE umbracoNode." + SqlSyntax.GetQuotedColumnName("text") + @"= @name AND umbracoNode.id <> @id", new { id = entity.Id, name = entity.Name }); if (exists > 0) { throw new DuplicateNameException("A data type with the name " + entity.Name + " already exists"); } //Updates Modified date ((DataTypeDefinition)entity).UpdatingEntity(); //Look up parent to get and set the correct Path if ParentId has changed if (entity.IsPropertyDirty("ParentId")) { var parent = Database.First <NodeDto>("WHERE id = @ParentId", new { ParentId = entity.ParentId }); entity.Path = string.Concat(parent.Path, ",", entity.Id); entity.Level = parent.Level + 1; var maxSortOrder = Database.ExecuteScalar <int>( "SELECT coalesce(max(sortOrder),0) FROM umbracoNode WHERE parentid = @ParentId AND nodeObjectType = @NodeObjectType", new { ParentId = entity.ParentId, NodeObjectType = NodeObjectTypeId }); entity.SortOrder = maxSortOrder + 1; } var factory = new DataTypeDefinitionFactory(NodeObjectTypeId); //Look up DataTypeDefinition entry to get Primary for updating the DTO var dataTypeDto = Database.SingleOrDefault <DataTypeDto>("WHERE nodeId = @Id", new { Id = entity.Id }); factory.SetPrimaryKey(dataTypeDto.PrimaryKey); var dto = factory.BuildDto(entity); //Updates the (base) node data - umbracoNode var nodeDto = dto.NodeDto; Database.Update(nodeDto); Database.Update(dto); //NOTE: This is a special case, we need to clear the custom cache for pre-values here so they are not stale if devs // are querying for them in the Saved event (before the distributed call cache is clearing it) IsolatedCache.ClearCacheItem(GetPrefixedCacheKey(entity.Id)); entity.ResetDirtyProperties(); }
protected override void PersistNewItem(IDataTypeDefinition entity) { ((DataTypeDefinition)entity).AddingEntity(); //ensure a datatype has a unique name before creating it entity.Name = EnsureUniqueNodeName(entity.Name); //TODO: should the below be removed? //Cannot add a duplicate data type var exists = Database.ExecuteScalar <int>(@"SELECT COUNT(*) FROM cmsDataType INNER JOIN umbracoNode ON cmsDataType.nodeId = umbracoNode.id WHERE umbracoNode." + SqlSyntax.GetQuotedColumnName("text") + "= @name", new { name = entity.Name }); if (exists > 0) { throw new DuplicateNameException("A data type with the name " + entity.Name + " already exists"); } var factory = new DataTypeDefinitionFactory(NodeObjectTypeId); var dto = factory.BuildDto(entity); //Logic for setting Path, Level and SortOrder var parent = Database.First <NodeDto>("WHERE id = @ParentId", new { ParentId = entity.ParentId }); int level = parent.Level + 1; int sortOrder = Database.ExecuteScalar <int>("SELECT COUNT(*) FROM umbracoNode WHERE parentID = @ParentId AND nodeObjectType = @NodeObjectType", new { ParentId = entity.ParentId, NodeObjectType = NodeObjectTypeId }); //Create the (base) node data - umbracoNode var nodeDto = dto.NodeDto; nodeDto.Path = parent.Path; nodeDto.Level = short.Parse(level.ToString(CultureInfo.InvariantCulture)); nodeDto.SortOrder = sortOrder; var o = Database.IsNew(nodeDto) ? Convert.ToInt32(Database.Insert(nodeDto)) : Database.Update(nodeDto); //Update with new correct path nodeDto.Path = string.Concat(parent.Path, ",", nodeDto.NodeId); Database.Update(nodeDto); //Update entity with correct values entity.Id = nodeDto.NodeId; //Set Id on entity to ensure an Id is set entity.Path = nodeDto.Path; entity.SortOrder = sortOrder; entity.Level = level; dto.DataTypeId = nodeDto.NodeId; Database.Insert(dto); entity.ResetDirtyProperties(); }
protected override IEnumerable <IDataTypeDefinition> PerformGetAll(params int[] ids) { var factory = new DataTypeDefinitionFactory(NodeObjectTypeId); var dataTypeSql = GetBaseQuery(false); if (ids.Any()) { dataTypeSql.Where("umbracoNode.id in (@ids)", new { ids = ids }); } else { dataTypeSql.Where <NodeDto>(x => x.NodeObjectType == NodeObjectTypeId); } var dtos = Database.Fetch <DataTypeDto, NodeDto>(dataTypeSql); return(dtos.Select(factory.BuildEntity).ToArray()); }
protected override IDataTypeDefinition PerformGet(int id) { var dataTypeSql = GetBaseQuery(false); dataTypeSql.Where(GetBaseWhereClause(), new { Id = id }); var dataTypeDto = Database.Fetch <DataTypeDto, NodeDto>(dataTypeSql).FirstOrDefault(); if (dataTypeDto == null) { return(null); } var factory = new DataTypeDefinitionFactory(NodeObjectTypeId); var definition = factory.BuildEntity(dataTypeDto); ((ICanBeDirty)definition).ResetDirtyProperties(); return(definition); }
protected override IDataTypeDefinition PerformGet(int id) { var dataTypeSql = GetBaseQuery(false); dataTypeSql.Where(GetBaseWhereClause(), new { Id = id }); var dataTypeDto = Database.Fetch <DataTypeDto, NodeDto>(dataTypeSql).FirstOrDefault(); if (dataTypeDto == null) { return(null); } var factory = new DataTypeDefinitionFactory(NodeObjectTypeId); var definition = factory.BuildEntity(dataTypeDto); //on initial construction we don't want to have dirty properties tracked // http://issues.umbraco.org/issue/U4-1946 ((Entity)definition).ResetDirtyProperties(false); return(definition); }
protected override void PersistNewItem(IDataTypeDefinition entity) { ((DataTypeDefinition)entity).AddingEntity(); var factory = new DataTypeDefinitionFactory(NodeObjectTypeId); var dto = factory.BuildDto(entity); //Logic for setting Path, Level and SortOrder var parent = Database.First <NodeDto>("WHERE id = @ParentId", new { ParentId = entity.ParentId }); int level = parent.Level + 1; int sortOrder = Database.ExecuteScalar <int>("SELECT COUNT(*) FROM umbracoNode WHERE parentID = @ParentId AND nodeObjectType = @NodeObjectType", new { ParentId = entity.ParentId, NodeObjectType = NodeObjectTypeId }); //Create the (base) node data - umbracoNode var nodeDto = dto.NodeDto; nodeDto.Path = parent.Path; nodeDto.Level = short.Parse(level.ToString(CultureInfo.InvariantCulture)); nodeDto.SortOrder = sortOrder; var o = Database.IsNew(nodeDto) ? Convert.ToInt32(Database.Insert(nodeDto)) : Database.Update(nodeDto); //Update with new correct path nodeDto.Path = string.Concat(parent.Path, ",", nodeDto.NodeId); Database.Update(nodeDto); //Update entity with correct values entity.Id = nodeDto.NodeId; //Set Id on entity to ensure an Id is set entity.Path = nodeDto.Path; entity.SortOrder = sortOrder; entity.Level = level; dto.DataTypeId = nodeDto.NodeId; Database.Insert(dto); ((ICanBeDirty)entity).ResetDirtyProperties(); }