public void SavePreValues(int dataTypeId, IEnumerable <string> values)
        {
            //TODO: Should we raise an event here since we are really saving values for the data type?

            using (var uow = UowProvider.GetUnitOfWork())
            {
                var sortOrderObj =
                    uow.Database.ExecuteScalar <object>(
                        "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;
                }

                foreach (var value in values)
                {
                    var dto = new DataTypePreValueDto {
                        DataTypeNodeId = dataTypeId, Value = value, SortOrder = sortOrder
                    };
                    uow.Database.Insert(dto);
                    sortOrder++;
                }

                uow.Commit();
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Saves a list of PreValues for a given DataTypeDefinition
        /// </summary>
        /// <param name="id">Id of the DataTypeDefinition to save PreValues for</param>
        /// <param name="values">List of string values to save</param>
        public void SavePreValues(int id, IEnumerable <string> values)
        {
            using (new WriteLock(Locker))
            {
                using (var uow = _uowProvider.GetUnitOfWork())
                {
                    var sortOrderObj =
                        uow.Database.ExecuteScalar <object>(
                            "SELECT max(sortorder) FROM cmsDataTypePreValues WHERE datatypeNodeId = @DataTypeId", new { DataTypeId = id });
                    int sortOrder;
                    if (sortOrderObj == null || int.TryParse(sortOrderObj.ToString(), out sortOrder) == false)
                    {
                        sortOrder = 1;
                    }

                    using (var transaction = uow.Database.GetTransaction())
                    {
                        foreach (var value in values)
                        {
                            var dto = new DataTypePreValueDto {
                                DataTypeNodeId = id, Value = value, SortOrder = sortOrder
                            };
                            uow.Database.Insert(dto);
                            sortOrder++;
                        }

                        transaction.Complete();
                    }
                }
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Creates a PreValue for a <see cref="IDataTypeDefinition"/>
        /// </summary>
        /// <param name="dataTypeDefinitionId"></param>
        /// <param name="value"></param>
        /// <param name="sortOrder"></param>
        /// <param name="alias"></param>
        public static void CreatePrevalueForDataTypeDefinition(int dataTypeDefinitionId, string value, int sortOrder, string alias)
        {
            var poco = new DataTypePreValueDto
            {
                Alias          = alias,
                DataTypeNodeId = dataTypeDefinitionId,
                SortOrder      = sortOrder,
                Value          = value
            };

            ApplicationContext.Current.DatabaseContext.Database.Insert(poco);
        }
Ejemplo n.º 4
0
        public IDataType AddPreValueJson(object value, int sortOrder = 0, string alias = "")
        {
            var dtpv = new DataTypePreValueDto
            {
                Alias          = alias,
                Value          = JsonConvert.SerializeObject(value),
                DataTypeNodeId = DataTypeDefinition.Id,
                SortOrder      = sortOrder
            };

            UmbracoDatabase.Insert(dtpv);

            return(this);
        }
Ejemplo n.º 5
0
        public IDataType AddPreValue(string value, int sortOrder = 0, string alias = "")
        {
            var dtpv = new DataTypePreValueDto
            {
                Alias          = alias,
                Value          = value,
                DataTypeNodeId = DataTypeDefinition.Id,
                SortOrder      = sortOrder
            };

            UmbracoDatabase.Insert(dtpv);

            return(this);
        }
            protected override void PersistNewItem(PreValueEntity entity)
            {
                if (entity.DataType.HasIdentity == false)
                {
                    throw new InvalidOperationException("Cannot insert a pre value for a data type that has no identity");
                }

                //NOTE: We used to check that the Alias was unique for the given DataTypeNodeId prevalues list, BUT
                // in reality there is no need to check the uniqueness of this alias because the only way that this code executes is
                // based on an IDictionary<string, PreValue> dictionary being passed to this repository and a dictionary
                // must have unique aliases by definition, so there is no need for this additional check

                var dto = new DataTypePreValueDto
                {
                    DataTypeNodeId = entity.DataType.Id,
                    Value          = entity.Value,
                    SortOrder      = entity.SortOrder,
                    Alias          = entity.Alias
                };

                Database.Insert(dto);
            }
        public void AddOrUpdatePreValues(IDataTypeDefinition dataType, IDictionary <string, PreValue> values)
        {
            var currentVals = new DataTypePreValueDto[] { };

            if (dataType.HasIdentity)
            {
                //first just get all pre-values for this data type so we can compare them to see if we need to insert or update or replace
                var sql = new Sql().Select("*")
                          .From <DataTypePreValueDto>(SqlSyntax)
                          .Where <DataTypePreValueDto>(dto => dto.DataTypeNodeId == dataType.Id)
                          .OrderBy <DataTypePreValueDto>(dto => dto.SortOrder, SqlSyntax);
                currentVals = Database.Fetch <DataTypePreValueDto>(sql).ToArray();
            }

            //already existing, need to be updated
            var valueIds      = values.Where(x => x.Value.Id > 0).Select(x => x.Value.Id).ToArray();
            var existingByIds = currentVals.Where(x => valueIds.Contains(x.Id)).ToArray();

            //These ones need to be removed from the db, they no longer exist in the new values
            var deleteById = currentVals.Where(x => valueIds.Contains(x.Id) == false);

            foreach (var d in deleteById)
            {
                _preValRepository.Delete(new PreValueEntity
                {
                    Alias     = d.Alias,
                    Id        = d.Id,
                    Value     = d.Value,
                    DataType  = dataType,
                    SortOrder = d.SortOrder
                });
            }

            var sortOrder = 1;

            foreach (var pre in values)
            {
                var existing = existingByIds.FirstOrDefault(valueDto => valueDto.Id == pre.Value.Id);
                if (existing != null)
                {
                    _preValRepository.AddOrUpdate(new PreValueEntity
                    {
                        //setting an id will update it
                        Id       = existing.Id,
                        DataType = dataType,
                        //These are the new values to update
                        Alias     = pre.Key,
                        SortOrder = sortOrder,
                        Value     = pre.Value.Value
                    });
                }
                else
                {
                    _preValRepository.AddOrUpdate(new PreValueEntity
                    {
                        Alias     = pre.Key,
                        SortOrder = sortOrder,
                        Value     = pre.Value.Value,
                        DataType  = dataType,
                    });
                }

                sortOrder++;
            }
        }