diff --git a/components/editorControls/mediapicker/MediaPickerDataType.cs b/components/editorControls/mediapicker/MediaPickerDataType.cs index f746d6fe7b..fac8134eb0 100644 --- a/components/editorControls/mediapicker/MediaPickerDataType.cs +++ b/components/editorControls/mediapicker/MediaPickerDataType.cs @@ -16,7 +16,9 @@ namespace umbraco.editorControls.mediapicker get { if (_Editor == null) - _Editor = new mediaChooser(Data); + _Editor = new mediaChooser(Data, + ((MediaPickerPrevalueEditor)PrevalueEditor).ShowPreview, + ((MediaPickerPrevalueEditor)PrevalueEditor).ShowAdvancedDialog); return _Editor; } } @@ -51,7 +53,7 @@ namespace umbraco.editorControls.mediapicker get { if (_prevalueeditor == null) - _prevalueeditor = new DefaultPrevalueEditor(this,false); + _prevalueeditor = new MediaPickerPrevalueEditor(this); return _prevalueeditor; } } diff --git a/components/editorControls/mediapicker/MediaPickerPrevalueEditor.cs b/components/editorControls/mediapicker/MediaPickerPrevalueEditor.cs new file mode 100644 index 0000000000..d5ea4800aa --- /dev/null +++ b/components/editorControls/mediapicker/MediaPickerPrevalueEditor.cs @@ -0,0 +1,160 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Web; +using System.Web.Security; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Web.UI.WebControls.WebParts; +using System.Web.UI.HtmlControls; +using System.IO; +using umbraco.DataLayer; +using umbraco.BusinessLogic; +using umbraco.editorControls; + +namespace umbraco.editorControls.mediapicker +{ + public class MediaPickerPrevalueEditor : System.Web.UI.WebControls.PlaceHolder, umbraco.interfaces.IDataPrevalue + { + + public ISqlHelper SqlHelper + { + get { return Application.SqlHelper; } + } + + //private DropDownList _dropdownlist; + private CheckBox _checkboxShowPreview; + private CheckBox _checkboxShowAdvancedDialog; + + private umbraco.cms.businesslogic.datatype.BaseDataType _datatype; + + public MediaPickerPrevalueEditor(umbraco.cms.businesslogic.datatype.BaseDataType DataType) + { + _datatype = DataType; + setupChildControls(); + } + + private void setupChildControls() + { + //_dropdownlist = new DropDownList(); + //_dropdownlist.ID = "dbtype"; + //_dropdownlist.Items.Add(DBTypes.Date.ToString()); + //_dropdownlist.Items.Add(DBTypes.Integer.ToString()); + //_dropdownlist.Items.Add(DBTypes.Ntext.ToString()); + //_dropdownlist.Items.Add(DBTypes.Nvarchar.ToString()); + + _checkboxShowPreview = new CheckBox(); + _checkboxShowPreview.ID = "showpreview"; + + _checkboxShowAdvancedDialog = new CheckBox(); + _checkboxShowAdvancedDialog.ID = "showadvanceddialog"; + + //Controls.Add(_dropdownlist); + + Controls.Add(_checkboxShowPreview); + Controls.Add(_checkboxShowAdvancedDialog); + + } + + public Control Editor + { + get + { + return this; + } + } + + protected override void OnLoad(EventArgs e) + { + base.OnLoad(e); + if (!Page.IsPostBack) + { + + _checkboxShowPreview.Checked = ShowPreview; + _checkboxShowAdvancedDialog.Checked = ShowAdvancedDialog; + + } + + + } + + public void Save() + { + _datatype.DBType = umbraco.cms.businesslogic.datatype.DBTypes.Integer; + + // Generate data-string + string data = _checkboxShowPreview.Checked.ToString() + "|" + _checkboxShowAdvancedDialog.Checked.ToString(); + + // If the add new prevalue textbox is filled out - add the value to the collection. + IParameter[] SqlParams = new IParameter[] { + SqlHelper.CreateParameter("@value",data), + SqlHelper.CreateParameter("@dtdefid",_datatype.DataTypeDefinitionId)}; + SqlHelper.ExecuteNonQuery("delete from cmsDataTypePreValues where datatypenodeid = @dtdefid", SqlParams); + SqlHelper.ExecuteNonQuery("insert into cmsDataTypePreValues (datatypenodeid,[value],sortorder,alias) values (@dtdefid,@value,0,'')", SqlParams); + } + + public string Configuration + { + get + { + object conf = + SqlHelper.ExecuteScalar("select value from cmsDataTypePreValues where datatypenodeid = @datatypenodeid", + SqlHelper.CreateParameter("@datatypenodeid", _datatype.DataTypeDefinitionId)); + if (conf != null) + return conf.ToString(); + else + return ""; + + } + } + + public bool ShowPreview + { + get + { + string[] config = Configuration.Split("|".ToCharArray()); + if (config.Length > 1) + { + return Convert.ToBoolean(config[0]); + } + else + { + return false; + } + + } + } + + public bool ShowAdvancedDialog + { + get + { + string[] config = Configuration.Split("|".ToCharArray()); + if (config.Length > 1) + { + return Convert.ToBoolean(config[1]); + } + else + { + return false; + } + + } + } + + protected override void Render(HtmlTextWriter writer) + { + writer.WriteLine(""); + //writer.WriteLine(""); + writer.Write(""); + writer.Write(""); + writer.Write("
Database datatype:"); + //_dropdownlist.RenderControl(writer); + //writer.Write("
Show preview:"); + _checkboxShowPreview.RenderControl(writer); + writer.Write("
Show advanced dialog:"); + _checkboxShowAdvancedDialog.RenderControl(writer); + writer.Write("
"); + } + } +} diff --git a/components/editorControls/mediapicker/mediaChooser.cs b/components/editorControls/mediapicker/mediaChooser.cs index bcdeafe997..c388531f77 100644 --- a/components/editorControls/mediapicker/mediaChooser.cs +++ b/components/editorControls/mediapicker/mediaChooser.cs @@ -15,11 +15,21 @@ namespace umbraco.editorControls public class mediaChooser : System.Web.UI.WebControls.HiddenField, interfaces.IDataEditor { interfaces.IData _data; + bool _showpreview; + bool _showadvanced; + public mediaChooser(interfaces.IData Data) { _data = Data; } + public mediaChooser(interfaces.IData Data, bool ShowPreview, bool ShowAdvanced) + { + _data = Data; + _showpreview = ShowPreview; + _showadvanced = ShowAdvanced; + } + public System.Web.UI.Control Editor { get { return this; } } #region IDataField Members @@ -62,25 +72,45 @@ namespace umbraco.editorControls // We need to make sure we have a reference to the legacy ajax calls in the scriptmanager presentation.webservices.ajaxHelpers.EnsureLegacyCalls(base.Page); + // And a reference to the media picker calls + ScriptManager sm = ScriptManager.GetCurrent(base.Page); + ServiceReference webservicePath = new ServiceReference(GlobalSettings.Path + "/webservices/MediaPickerService.asmx"); + + if (!sm.Services.Contains(webservicePath)) + sm.Services.Add(webservicePath); } protected override void Render(System.Web.UI.HtmlTextWriter writer) { string tempTitle = ""; + int mediaId = -1; string deleteLink = "   " + ui.Text("delete") + "   "; try { if (base.Value != "") { + mediaId = int.Parse(base.Value); tempTitle = new cms.businesslogic.CMSNode(int.Parse(base.Value)).Text; } } catch { } + string dialog = "\nshowPopWin('" + TreeService.GetPickerUrl(true, "media", "media") + "', 300, 400, " + ClientID + "_saveId)"; + if (_showadvanced) + dialog = "\nshowPopWin('" + GlobalSettings.Path + "/dialogs/mediaPicker.aspx" + "', 500, 530, " + ClientID + "_saveId)"; + + string preview = string.Empty; + if (_showpreview) + preview = "\numbraco.presentation.webservices.MediaPickerService.GetThumbNail(treePicker, " + this.ClientID + "_UpdateThumbNail);" + + "\numbraco.presentation.webservices.MediaPickerService.GetFile(treePicker, " + this.ClientID + "_UpdateLink);"; + + string strScript = "function " + this.ClientID + "_chooseId() {" + - "\nshowPopWin('" + TreeService.GetPickerUrl(true,"media","media") + "', 300, 400, " + ClientID + "_saveId)" + + //"\nshowPopWin('" + TreeService.GetPickerUrl(true, "media", "media") + "', 300, 400, " + ClientID + "_saveId)" + + //"\nshowPopWin('" + GlobalSettings.Path + "/dialogs/mediaPicker.aspx" + "', 500, 530, " + ClientID + "_saveId)" + // "\nvar treePicker = window.showModalDialog(, 'treePicker', 'dialogWidth=350px;dialogHeight=300px;scrollbars=no;center=yes;border=thin;help=no;status=no') " + + dialog + "\n}" + "\nfunction " + ClientID + "_saveId(treePicker) {" + "\nsetTimeout('" + ClientID + "_saveIdDo(' + treePicker + ')', 200);" + @@ -90,6 +120,7 @@ namespace umbraco.editorControls "\ndocument.getElementById(\"" + this.ClientID + "\").value = treePicker;" + "\nif (treePicker > 0) {" + "\numbraco.presentation.webservices.legacyAjaxCalls.GetNodeName(treePicker, " + this.ClientID + "_updateContentTitle" + ");" + + preview+ "\n} " + "\n}" + "\n} " + @@ -99,6 +130,16 @@ namespace umbraco.editorControls "\nfunction " + this.ClientID + "_clear() {" + "\ndocument.getElementById(\"" + this.ClientID + "_title\").innerHTML = \"\";" + "\ndocument.getElementById(\"" + this.ClientID + "\").value = \"\";" + + "\ndocument.getElementById(\"" + this.ClientID + "_preview\").style.display = 'none';" + + "\n}" + + "\nfunction " + this.ClientID + "_UpdateThumbNail(retVal){" + + "\nif(retVal != \"\"){" + + "\ndocument.getElementById(\"" + this.ClientID + "_thumbnail\").src = retVal;" + + "\ndocument.getElementById(\"" + this.ClientID + "_preview\").style.display = 'block';}" + + "\nelse{document.getElementById(\"" + this.ClientID + "_preview\").style.display = 'none';}" + + "\n}"+ + "\nfunction " + this.ClientID + "_UpdateLink(retVal){" + + "\ndocument.getElementById(\"" + this.ClientID + "_thumbnaillink\").href = retVal;" + "\n}"; try @@ -116,6 +157,28 @@ namespace umbraco.editorControls if (base.Value == "") deleteLink = ""; writer.WriteLine("" + tempTitle + "" + deleteLink + "" + ui.Text("choose") + "...   ");//   "); + + + + //Thumbnail preview + if (_showpreview) + { + string thumb = string.Empty; + string link = string.Empty; + string style = "display:none;"; + if (mediaId != -1) + { + style = string.Empty; + thumb = string.Format(" src=\"{0}\" ", presentation.webservices.MediaPickerServiceHelpers.GetThumbNail(mediaId)); + link = string.Format(" href=\"{0}\" ", presentation.webservices.MediaPickerServiceHelpers.GetFile(mediaId)); + } + + writer.WriteLine("
"); + } + + + + base.Render(writer); } #endregion diff --git a/components/editorControls/umbraco.editorControls.csproj b/components/editorControls/umbraco.editorControls.csproj index 11ea979294..17f353be2b 100644 --- a/components/editorControls/umbraco.editorControls.csproj +++ b/components/editorControls/umbraco.editorControls.csproj @@ -258,6 +258,7 @@ Code + Code diff --git a/umbraco/presentation/umbraco.presentation.csproj b/umbraco/presentation/umbraco.presentation.csproj index be8bed533e..5a2f1f0aaf 100644 --- a/umbraco/presentation/umbraco.presentation.csproj +++ b/umbraco/presentation/umbraco.presentation.csproj @@ -486,6 +486,13 @@ insertMasterpagePlaceholder.aspx + + mediaPicker.aspx + ASPXCodeBehind + + + mediaPicker.aspx + republish.aspx ASPXCodeBehind @@ -1090,13 +1097,6 @@ tinymce3tinymceCompress.aspx - - insertMacro.aspx - ASPXCodeBehind - - - insertMacro.aspx - insertImage.aspx ASPXCodeBehind @@ -1111,6 +1111,13 @@ insertLink.aspx + + insertMacro.aspx + ASPXCodeBehind + + + insertMacro.aspx + paste.aspx ASPXCodeBehind @@ -1206,6 +1213,11 @@ sort.aspx + + MediaPickerService.asmx + Component + + TreeClientService.asmx Component @@ -1491,7 +1503,19 @@ + + + + + + + + + + + + @@ -1570,8 +1594,6 @@ - - @@ -1887,10 +1909,6 @@ - - - - SettingsSingleFileGenerator Settings.Designer.cs @@ -1928,8 +1946,6 @@ - - @@ -2298,9 +2314,6 @@ Form - - - Designer diff --git a/umbraco/presentation/umbraco/dialogs/mediaPicker.aspx b/umbraco/presentation/umbraco/dialogs/mediaPicker.aspx new file mode 100644 index 0000000000..6e94e180fb --- /dev/null +++ b/umbraco/presentation/umbraco/dialogs/mediaPicker.aspx @@ -0,0 +1,101 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="mediaPicker.aspx.cs" Inherits="umbraco.presentation.umbraco.dialogs.mediaPicker" %> +<%@ Register TagPrefix="ui" Namespace="umbraco.uicontrols" Assembly="controls" %> +<%@ Register TagPrefix="umb" Namespace="ClientDependency.Core.Controls" Assembly="ClientDependency.Core" %> + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+
+ + +
+ + +
+
+ + + + +
+

+ or + {#cancel} +

+ + + + + + diff --git a/umbraco/presentation/umbraco/dialogs/mediaPicker.aspx.cs b/umbraco/presentation/umbraco/dialogs/mediaPicker.aspx.cs new file mode 100644 index 0000000000..2e70346438 --- /dev/null +++ b/umbraco/presentation/umbraco/dialogs/mediaPicker.aspx.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; + +namespace umbraco.presentation.umbraco.dialogs +{ + public partial class mediaPicker : System.Web.UI.Page + { + protected void Page_Load(object sender, EventArgs e) + { + + + + } + + protected override void OnInit(EventArgs e) + { + uicontrols.TabPage tp = tv_options.NewTabPage(ui.Text("choose")); + tp.HasMenu = false; + tp.Controls.Add(pane_select); + + uicontrols.TabPage tp2 = tv_options.NewTabPage(ui.Text("create") + " " + ui.Text("new")); + tp2.HasMenu = false; + tp2.Controls.Add(pane_upload); + + base.OnInit(e); + } + } +} diff --git a/umbraco/presentation/umbraco/dialogs/mediaPicker.aspx.designer.cs b/umbraco/presentation/umbraco/dialogs/mediaPicker.aspx.designer.cs new file mode 100644 index 0000000000..411be9c340 --- /dev/null +++ b/umbraco/presentation/umbraco/dialogs/mediaPicker.aspx.designer.cs @@ -0,0 +1,124 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3074 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace umbraco.presentation.umbraco.dialogs { + + + public partial class mediaPicker { + + /// + /// Head1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlHead Head1; + + /// + /// CssInclude1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::ClientDependency.Core.Controls.CssInclude CssInclude1; + + /// + /// JsInclude1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::ClientDependency.Core.Controls.JsInclude JsInclude1; + + /// + /// JsInclude3 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::ClientDependency.Core.Controls.JsInclude JsInclude3; + + /// + /// JsInclude4 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::ClientDependency.Core.Controls.JsInclude JsInclude4; + + /// + /// JsInclude2 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::ClientDependency.Core.Controls.JsInclude JsInclude2; + + /// + /// ClientLoader control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::umbraco.uicontrols.UmbracoClientDependencyLoader ClientLoader; + + /// + /// Form1 control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.HtmlControls.HtmlForm Form1; + + /// + /// pane_src control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::umbraco.uicontrols.Pane pane_src; + + /// + /// tv_options control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::umbraco.uicontrols.TabView tv_options; + + /// + /// pane_select control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::umbraco.uicontrols.Pane pane_select; + + /// + /// pane_upload control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Panel pane_upload; + } +} diff --git a/umbraco/presentation/umbraco/dialogs/uploadImage.aspx.cs b/umbraco/presentation/umbraco/dialogs/uploadImage.aspx.cs index 8f9170aa06..cfcf9d1289 100644 --- a/umbraco/presentation/umbraco/dialogs/uploadImage.aspx.cs +++ b/umbraco/presentation/umbraco/dialogs/uploadImage.aspx.cs @@ -69,7 +69,7 @@ namespace umbraco.dialogs feedback.Text += ""; - feedback.Text += ""; + feedback.Text += ""; } // Put user code to initialize the page here diff --git a/umbraco/presentation/umbraco/webservices/MediaPickerService.asmx b/umbraco/presentation/umbraco/webservices/MediaPickerService.asmx new file mode 100644 index 0000000000..5138b2dac1 --- /dev/null +++ b/umbraco/presentation/umbraco/webservices/MediaPickerService.asmx @@ -0,0 +1 @@ +<%@ WebService Language="C#" CodeBehind="MediaPickerService.asmx.cs" Class="umbraco.presentation.webservices.MediaPickerService" %> diff --git a/umbraco/presentation/umbraco/webservices/MediaPickerService.asmx.cs b/umbraco/presentation/umbraco/webservices/MediaPickerService.asmx.cs new file mode 100644 index 0000000000..6d2f591615 --- /dev/null +++ b/umbraco/presentation/umbraco/webservices/MediaPickerService.asmx.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.Services; +using System.Web.Script.Services; +using umbraco.cms.businesslogic.media; + +namespace umbraco.presentation.webservices +{ + /// + /// Summary description for Media + /// + [WebService(Namespace = "http://umbraco.org/webservices")] + [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] + [System.ComponentModel.ToolboxItem(false)] + [ScriptService] + + public class MediaPickerService : System.Web.Services.WebService + { + + [WebMethod] + [ScriptMethod] + public string GetThumbNail(int mediaId) + { + return MediaPickerServiceHelpers.GetThumbNail(mediaId); + + } + + [WebMethod] + [ScriptMethod] + public string GetFile(int mediaId) + { + return MediaPickerServiceHelpers.GetFile(mediaId); + + } + } +} diff --git a/umbraco/presentation/umbraco/webservices/MediaPickerServiceHelpers.cs b/umbraco/presentation/umbraco/webservices/MediaPickerServiceHelpers.cs new file mode 100644 index 0000000000..92b3b18233 --- /dev/null +++ b/umbraco/presentation/umbraco/webservices/MediaPickerServiceHelpers.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using umbraco.cms.businesslogic.media; + +namespace umbraco.presentation.webservices +{ + public class MediaPickerServiceHelpers + { + + public static string GetThumbNail(int mediaId) + { + + + string fileName; + string thumbnail = string.Empty; + try + { + + Media m = new Media(mediaId); + + fileName = m.getProperty("umbracoFile").Value.ToString(); + string ext = fileName.Substring(fileName.LastIndexOf('.') + 1, fileName.Length - (fileName.LastIndexOf('.') + 1)); + + + if (",jpeg,jpg,gif,bmp,png,tiff,tif,".IndexOf("," + ext.ToLower() + ",") > -1) + { + thumbnail = fileName.Substring(0, fileName.LastIndexOf('.')) + "_thumb.jpg"; + } + else + { + return ""; + //switch (ext.ToLower()) + //{ + // case "pdf": + // thumbnail = ""; + // break; + // case "doc": + // thumbnail = ""; + // break; + // default: + // thumbnail = ""; + // break; + //} + } + + } + catch { } + + return thumbnail; + } + + public static string GetFile(int mediaId) + { + string fileName = string.Empty; + + try + { + + + Media m = new Media(mediaId); + + fileName = m.getProperty("umbracoFile").Value.ToString(); + + + } + catch { } + + return fileName; + + } + } +}