public override void SetData(object data) { _data = data as SenseNet.ContentRepository.Fields.ImageField.ImageFieldData; if (!IsTemplated) { _cbxImageRef.Checked = (this.ImageField.ImageMode != ImageRequestMode.BinaryData) && (this.Field.Content.Id != 0); if (!string.IsNullOrEmpty(this.ImageUrl)) { _imageControl.ImageUrl = this.ImageUrl; } _imageControl.Width = this.Width; _imageControl.Height = this.Height; } else { // synchronize data with controls are given in the template var title = GetLabelForTitleControl() as Label; var desc = GetLabelForDescription() as Label; if (title != null) { title.Text = this.Field.DisplayName; } if (desc != null) { desc.Text = this.Field.Description; } var imageIsRefControl = GetImageIsRefControl(); if (imageIsRefControl != null) { imageIsRefControl.Checked = (this.ImageField.ImageMode != ImageRequestMode.BinaryData) && (this.Field.Content.Id != 0); } var imageControl = GetImageControl(); if (imageControl != null) { if (!string.IsNullOrEmpty(this.ImageUrl)) { imageControl.ImageUrl = this.ImageUrl; } } } }
/* ============================================================================= Methods */ public override object GetData() { if (_data == null) { _data = new SenseNet.ContentRepository.Fields.ImageField.ImageFieldData(this.Field); } var innerControl = _fileUploadControl; var imageIsRefControl = _cbxImageRef; // templates if (IsTemplated) { innerControl = GetInnerControl() as FileUpload; imageIsRefControl = GetImageIsRefControl() as CheckBox; } _binaryData = null; // newly posted filestream bool newStream = false; if (innerControl != null && innerControl.HasFile) { var fileStream = innerControl.PostedFile.InputStream; var contentType = innerControl.PostedFile.ContentType; var fileName = innerControl.PostedFile.FileName; _binaryData = new BinaryData(); _binaryData.ContentType = contentType; _binaryData.FileName = fileName; _binaryData.SetStream(fileStream); newStream = true; } // if there is no new stream and the reference control is not on the page, // it means the data could not be changed, so return the original data if (!newStream && imageIsRefControl == null) { return(_data); } // new image mode var newImageMode = (imageIsRefControl != null && imageIsRefControl.Checked) ? ImageRequestMode.Reference : ImageRequestMode.BinaryData; if (!newStream) { switch (this.ImageField.ImageMode) { case ImageRequestMode.BinaryData: _binaryData = _data.ImgData; break; case ImageRequestMode.Reference: if (_data.ImgRef != null) { _binaryData = _data.ImgRef.Binary; } break; } } // no uploads and no original data, so return with empty data if (_binaryData == null) { return(_data); } // if mode is not changed, proceed only if new uploaded stream is available if ((newImageMode == this.ImageField.ImageMode) && (!newStream)) { return(_data); } // from here either mode is changed or new stream is available // 2 possibilities: new mode is reference or new mode is binary // - reference // - former binarydata is cleared // - the referenced node is created or updated // - binary // - binarydata property is set // - referenced node is deleted if (newImageMode == ImageRequestMode.Reference) { // clear binarydata _data.ImgData = null; if (this.Content.Id != 0) { CreateImageReference(this.ContentHandler); } else { this.ContentHandler.Created += new EventHandler <SenseNet.ContentRepository.Storage.Events.NodeEventArgs>(ContentHandler_Created); } } else { // set binarydata _data.ImgData = new BinaryData(); _data.ImgData.CopyFrom(_binaryData); // if copied from referenced node -> node name should be filename, not node's binary's filename (latter could contain '\'-s) if (!newStream) { _data.ImgData.FileName = new BinaryFileName(_data.ImgRef.Name); } // clear referencedata (also delete the file but only after this node is saved!) this.ContentHandler.Modified += new EventHandler <SenseNet.ContentRepository.Storage.Events.NodeEventArgs>(ContentHandler_Modified); } // reset image url after new image is saved var imageControl = GetImageControl(); if (imageControl != null) { if (!string.IsNullOrEmpty(this.ImageUrl)) { imageControl.ImageUrl = this.ImageUrl; } } return(_data); }
public override void SetData(object data) { _data = data as SenseNet.ContentRepository.Fields.ImageField.ImageFieldData; if (!IsTemplated) { _cbxImageRef.Checked = (this.ImageField.ImageMode != ImageRequestMode.BinaryData) && (this.Field.Content.Id != 0); if (!string.IsNullOrEmpty(this.ImageUrl)) _imageControl.ImageUrl = this.ImageUrl; _imageControl.Width = this.Width; _imageControl.Height = this.Height; } else { // synchronize data with controls are given in the template var title = GetLabelForTitleControl() as Label; var desc = GetLabelForDescription() as Label; if (title != null) title.Text = this.Field.DisplayName; if (desc != null) desc.Text = this.Field.Description; var imageIsRefControl = GetImageIsRefControl(); if (imageIsRefControl != null) imageIsRefControl.Checked = (this.ImageField.ImageMode != ImageRequestMode.BinaryData) && (this.Field.Content.Id != 0); var imageControl = GetImageControl(); if (imageControl != null) { if (!string.IsNullOrEmpty(this.ImageUrl)) imageControl.ImageUrl = this.ImageUrl; } } }
/* ============================================================================= Methods */ public override object GetData() { if (_data == null) _data = new SenseNet.ContentRepository.Fields.ImageField.ImageFieldData(); var innerControl = _fileUploadControl; var imageIsRefControl = _cbxImageRef; // templates if (IsTemplated) { innerControl = GetInnerControl() as FileUpload; imageIsRefControl = GetImageIsRefControl() as CheckBox; } _binaryData = null; // newly posted filestream bool newStream = false; if (innerControl != null && innerControl.HasFile) { var fileStream = innerControl.PostedFile.InputStream; var contentType = innerControl.PostedFile.ContentType; var fileName = innerControl.PostedFile.FileName; _binaryData = new BinaryData(); _binaryData.ContentType = contentType; _binaryData.FileName = fileName; _binaryData.SetStream(fileStream); newStream = true; } // new image mode var originalImageMode = this.ImageField.ImageMode; var newImageMode = imageIsRefControl.Checked ? ImageRequestMode.Reference : ImageRequestMode.BinaryData; if (!newStream) { switch (this.ImageField.ImageMode) { case ImageRequestMode.BinaryData: _binaryData = _data.ImgData; break; case ImageRequestMode.Reference: if (_data.ImgRef != null) _binaryData = _data.ImgRef.Binary; break; } } // no uploads and no original data, so return with empty data if (_binaryData == null) return _data; // if mode is not changed, proceed only if new uploaded stream is available if ((newImageMode == this.ImageField.ImageMode) && (!newStream)) return _data; // from here either mode is changed or new stream is available // 2 possibilities: new mode is reference or new mode is binary // - reference // - former binarydata is cleared // - the referenced node is created or updated // - binary // - binarydata property is set // - referenced node is deleted if (newImageMode == ImageRequestMode.Reference) { // clear binarydata _data.ImgData = null; if (this.Content.Id != 0) CreateImageReference(this.ContentHandler); else this.ContentHandler.Created += new EventHandler<SenseNet.ContentRepository.Storage.Events.NodeEventArgs>(ContentHandler_Created); } else { // set binarydata _data.ImgData = new BinaryData(); _data.ImgData.CopyFrom(_binaryData); // if copied from referenced node -> node name should be filename, not node's binary's filename (latter could contain '\'-s) if (!newStream) _data.ImgData.FileName = new BinaryFileName(_data.ImgRef.Name); // clear referencedata (also delete the file but only after this node is saved!) this.ContentHandler.Modified += new EventHandler<SenseNet.ContentRepository.Storage.Events.NodeEventArgs>(ContentHandler_Modified); } // reset image url after new image is saved var imageControl = GetImageControl(); if (imageControl != null) { if (!string.IsNullOrEmpty(this.ImageUrl)) imageControl.ImageUrl = this.ImageUrl; } return _data; }