コード例 #1
0
        /// <summary>
        /// This is called to merge in the prevalue crops with the value that is saved - similar to the property value converter for the front-end
        /// </summary>

        public override object ToEditor(Property property, IDataTypeService dataTypeService, string culture = null, string segment = null)
        {
            var val = property.GetValue(culture, segment);

            if (val == null)
            {
                return(null);
            }

            ImageCropperValue value;

            try
            {
                value = JsonConvert.DeserializeObject <ImageCropperValue>(val.ToString());
            }
            catch
            {
                value = new ImageCropperValue {
                    Src = val.ToString()
                };
            }

            var dataType = dataTypeService.GetDataType(property.PropertyType.DataTypeId);

            if (dataType?.Configuration != null)
            {
                value.ApplyConfiguration(dataType.ConfigurationAs <ImageCropperConfiguration>());
            }

            return(value);
        }
コード例 #2
0
    public override object?ConvertIntermediateToObject(IPublishedElement owner, IPublishedPropertyType propertyType, PropertyCacheLevel referenceCacheLevel, object?inter, bool preview)
    {
        var isMultiple = IsMultipleDataType(propertyType.DataType);

        if (string.IsNullOrEmpty(inter?.ToString()))
        {
            // Short-circuit on empty value
            return(isMultiple ? Enumerable.Empty <MediaWithCrops>() : null);
        }

        var mediaItems = new List <MediaWithCrops>();
        IEnumerable <MediaPicker3PropertyEditor.MediaPicker3PropertyValueEditor.MediaWithCropsDto> dtos =
            MediaPicker3PropertyEditor.MediaPicker3PropertyValueEditor.Deserialize(_jsonSerializer, inter);
        MediaPicker3Configuration?configuration     = propertyType.DataType.ConfigurationAs <MediaPicker3Configuration>();
        IPublishedSnapshot        publishedSnapshot = _publishedSnapshotAccessor.GetRequiredPublishedSnapshot();

        foreach (MediaPicker3PropertyEditor.MediaPicker3PropertyValueEditor.MediaWithCropsDto dto in dtos)
        {
            IPublishedContent?mediaItem = publishedSnapshot.Media?.GetById(preview, dto.MediaKey);
            if (mediaItem != null)
            {
                var localCrops = new ImageCropperValue
                {
                    Crops      = dto.Crops,
                    FocalPoint = dto.FocalPoint,
                    Src        = mediaItem.Url(_publishedUrlProvider),
                };

                localCrops.ApplyConfiguration(configuration);

                // TODO: This should be optimized/cached, as calling Activator.CreateInstance is slow
                Type mediaWithCropsType = typeof(MediaWithCrops <>).MakeGenericType(mediaItem.GetType());
                var  mediaWithCrops     = (MediaWithCrops)Activator.CreateInstance(mediaWithCropsType, mediaItem, _publishedValueFallback, localCrops) !;

                mediaItems.Add(mediaWithCrops);

                if (!isMultiple)
                {
                    // Short-circuit on single item
                    break;
                }
            }
        }

        return(isMultiple ? mediaItems : mediaItems.FirstOrDefault());
    }