public override void SetData(object data) { _data = data as 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 SetTitleAndDescription(); 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 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 <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 <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); }