using System; using System.Configuration; using System.Drawing; 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; using umbraco.IO; using System.Collections.Generic; using umbraco.cms.businesslogic.datatype; namespace umbraco.editorControls.userControlGrapper { public class usercontrolPrevalueEditor : System.Web.UI.WebControls.PlaceHolder, umbraco.interfaces.IDataPrevalue { public ISqlHelper SqlHelper { get { return Application.SqlHelper; } } #region IDataPrevalue Members // referenced datatype private umbraco.cms.businesslogic.datatype.BaseDataType _datatype; private DropDownList _dropdownlist; private DropDownList _dropdownlistUserControl; private PlaceHolder _phSettings; private Dictionary dtSettings = new Dictionary(); public usercontrolPrevalueEditor(umbraco.cms.businesslogic.datatype.BaseDataType DataType) { // state it knows its datatypedefinitionid _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()); _dropdownlistUserControl = new DropDownList(); _dropdownlistUserControl.ID = "usercontrol"; _phSettings = new PlaceHolder(); _phSettings.ID = "settings"; // put the childcontrols in context - ensuring that // the viewstate is persisted etc. Controls.Add(_dropdownlist); Controls.Add(_dropdownlistUserControl); Controls.Add(_phSettings); // populate the usercontrol dropdown _dropdownlistUserControl.Items.Add(new ListItem(ui.Text("choose"), "")); populateUserControls( IOHelper.MapPath( SystemDirectories.Usercontrols) ); } private void populateUserControls(string path) { DirectoryInfo di = new DirectoryInfo(path); foreach (FileInfo uc in di.GetFiles("*.ascx")) { string root = IOHelper.MapPath(SystemDirectories.Root); _dropdownlistUserControl.Items.Add( new ListItem( uc.FullName.Substring(root.Length).Replace(IOHelper.DirSepChar, '/')) /* new ListItem( uc.FullName.Substring( uc.FullName.IndexOf(root), uc.FullName.Length - uc.FullName.IndexOf(root)).Replace(IOHelper.DirSepChar, '/')) */ ); } foreach (DirectoryInfo dir in di.GetDirectories()) populateUserControls(dir.FullName); } public Control Editor { get { return this; } } protected override void OnLoad(EventArgs e) { base.OnLoad(e); if (!Page.IsPostBack) { string config = Configuration; if (config != "") { _dropdownlistUserControl.SelectedValue = config; } _dropdownlist.SelectedValue = _datatype.DBType.ToString(); } //check for settings if (!string.IsNullOrEmpty(Configuration)) LoadSetttings(Configuration); } private Dictionary GetSettings(Type t) { Dictionary settings = new Dictionary(); foreach (System.Reflection.PropertyInfo p in t.GetProperties()) { object[] o = p.GetCustomAttributes(typeof(DataEditorSetting), true); if (o.Length > 0) settings.Add(p.Name, (DataEditorSetting)o[0]); } return settings; } private bool HasSettings(Type t) { bool hasSettings = false; foreach (System.Reflection.PropertyInfo p in t.GetProperties()) { object[] o = p.GetCustomAttributes(typeof(DataEditorSetting), true); if (o.Length > 0) { hasSettings = true; break; } } return hasSettings; } private void LoadSetttings(string fileName) { if (System.IO.File.Exists(IOHelper.MapPath("~/" + fileName))) { UserControl oControl = (UserControl)this.Page.LoadControl(@"~/" + fileName); Type type = oControl.GetType(); Dictionary settings = GetSettings(type); foreach (KeyValuePair kv in settings) { DataEditorSettingType dst = kv.Value.GetDataEditorSettingType(); dtSettings.Add(kv.Key, dst); DataEditorPropertyPanel panel = new DataEditorPropertyPanel(); panel.Text = kv.Value.GetName(); panel.Text += "
" + kv.Value.description + ""; if (HasSettings(type)) { DataEditorSettingsStorage ss = new DataEditorSettingsStorage(); List> s = ss.GetSettings(_datatype.DataTypeDefinitionId); ss.Dispose(); if (s.Find(set => set.Key == kv.Key).Value != null) dst.Value = s.Find(set => set.Key == kv.Key).Value; } panel.Controls.Add(dst.RenderControl(kv.Value)); Label invalid = new Label(); invalid.Attributes.Add("style", "color:#8A1F11"); invalid.ID = "lbl" + kv.Key; panel.Controls.Add(invalid); _phSettings.Controls.Add(panel); } } } public void Save() { bool hasErrors = false; foreach (KeyValuePair k in dtSettings) { var result = k.Value.Validate(); Label lbl = FindControlRecursive