public string GetHtml() { StringBuilder sb = new StringBuilder(); if (String.IsNullOrEmpty(FieldName)) { return(Provider.DesignMode ? Provider.GetResource("Select field name") : String.Empty); } Type entityType = Provider.GetEntityType(EntityName); Type fieldType = entityType.GetProperty(FieldName).PropertyType; PropertyInfo pi = entityType.GetProperty(FieldName); ColumnDetailAttribute attrField = (ColumnDetailAttribute)CMSUtility.GetAttribute(pi, typeof(ColumnDetailAttribute)); EditFormFieldPropsAttribute attrEdit = (EditFormFieldPropsAttribute)CMSUtility.GetAttribute(pi, typeof(EditFormFieldPropsAttribute)); ControlType ct = attrEdit.ControlType; if (ct == ControlType.Undefined) { ct = Provider.GetDefaultControlType(attrField.ColumnType, pi, attrField); } string label = FieldName.HumanReadable(); sb.AppendFormat(@" <div class=""form-group""> <label for=""{0}"" class=""col-sm-4 control-label no-padding-right""> {1} </label> <div class=""{3}""> {2} </div> </div>", FieldName, label, GetControlHtml(fieldType, attrField, attrEdit, ct), ct == ControlType.DateTimeEdit ? "col-sm-4 col-xs-6 input-group" : "col-sm-8"); return(sb.ToString()); }
private List <string> getColumnCategories() { List <string> res = new List <string>(); foreach (Column field in Provider.Database.Tables[EntityName].Columns) { EditFormFieldPropsAttribute attrEdit = (EditFormFieldPropsAttribute)CMSUtility.GetAttribute(Provider.GetEntityType(EntityName).GetProperty(field.Name), typeof(EditFormFieldPropsAttribute)); if (field.IsPrimaryKey || !attrEdit.Visible) { continue; //*** } res.Add(attrEdit.Category); } return(res.Distinct().ToList()); }
private string generateFormHtml() { StringBuilder sb = new StringBuilder(); sb.AppendFormat(@"$ var e = new {0}(); var id = int.Parse(Provider.Request.eId ?? ""0""); if(id>0) e = Provider.Database.Read(typeof({0}), id); if(Provider.Request.cmdName){{ if(Provider.Request.cmdName==""save"") {{ e.SetFieldsByPostData(Provider.Request.Form); e.Save(); Provider.Response.Redirect(""/{0}View.aspx?eId=""+e.Id); }} }} $ <script> \$(function(){{ loadForm('#form', $=Utility.ToJSON(e)$, '$=Provider.Request.mode$'); }}); </script> <div class=""page-header""> <h1> {0} <small> <i class=""icon-double-angle-right""></i> $=e.Id > 0 ? 'Edit details' : 'Add new'$ </small> </h1> </div> <form id=""form"" method=""post"" action=""$=Provider.Request.RawUrl$"" enctype=""multipart/form-data"" class=""form-horizontal"" role=""form"" autocomplete=""off""> <input type=""hidden"" name=""cmdName"" value=""save""/> <input type=""hidden"" name=""Id"" value=""$=e.Id$""/>", EntityName); sb.AppendLine(); int i = 0; foreach (var category in getColumnCategories()) { if (i == 0) { sb.AppendLine("<div class=\"row\">\r\n<div class=\"col-sm-9\">"); } else if (i == 1) { sb.AppendLine( "<div class=\"row\">\r\n<div class=\"col-xs-12 col-sm-6\">\r\n<h3 class=\"header smaller lighter blue\">" + category + "</h3>"); } else { sb.AppendLine("<div class=\"col-xs-12 col-sm-6\">\r\n<h3 class=\"header smaller lighter blue\">" + category + "</h3>"); } foreach (Column field in Provider.Database.Tables[EntityName].Columns) { EditFormFieldPropsAttribute attrEdit = (EditFormFieldPropsAttribute)CMSUtility.GetAttribute(Provider.GetEntityType(EntityName).GetProperty(field.Name), typeof(EditFormFieldPropsAttribute)); if (field.IsPrimaryKey || !attrEdit.Visible || attrEdit.Category != category) { continue; //*** } var ff = new FormField { EntityName = this.EntityName, FieldName = field.Name }; sb.AppendLine(ff.GetHtml()); } if (i == 0) { sb.AppendLine(@" </div> <div class=""col-sm-3""> <img name=""Picture"" class=""img-responsive"" src=""/UserFiles/contact.png"" /> <input type=""file"" id=""Picture"" name=""Picture"" /><br/> $ if(e.Id>0){ $ <em><i class=""icon-ok green""></i>Added by $=e.InsertUser.FullName$ on $=e.InsertDate.ToString(""dd-MM-yyyy"")$</em> $ } $ </div> </div>"); } else { sb.AppendLine("</div>"); } i++; } sb.AppendLine(@" <div class=""clearfix form-actions""> <div class=""text-right""> <button class=""btn btn-info"" type=""submit""> <i class=""icon-ok bigger-110""></i> Save </button> <button class=""btn"" type=""button"" onclick=""history.go(-1)""> <i class=""icon-undo bigger-110""></i> Cancel </button> </div> </div> </form>"); return(sb.ToString()); }
private string GetControlHtml(Type fieldType, ColumnDetailAttribute attrField, EditFormFieldPropsAttribute attrEdit, ControlType ct) { StringBuilder sb = new StringBuilder(); switch (ct) { case ControlType.TagEdit: if (attrField.References != null) { sb.AppendFormat(@"<select multiple="""" class=""width-80 chosen-select form-control"" id=""{0}"" name=""{0}"" data-placeholder=""Select tags""> $ foreach(var e in Provider.Database.ReadList(typeof({1}), ""select Id, Name from {1} order by Name"")) {{ $ <option>$=e.Name$</option> $ }} $ </select>", FieldName, attrField.References.Name); } else { sb.AppendFormat(@"<select multiple="""" class=""width-80 chosen-select form-control"" id=""{0}"" name=""{0}"" data-placeholder=""Select tags""> <option>Tag1</option> <option>Tag2</option> <option>Tag3</option> </select>", FieldName); } break; case ControlType.StringEdit: if (attrField.Length > 100 || attrField.ColumnType == DbType.Text) { sb.AppendFormat("<textarea name=\"{0}\" id=\"{0}\" rows=\"3\" class=\"col-sm-8 form-control\"></textarea>", FieldName); } else { sb.AppendFormat("<input type=\"text\" name=\"{0}\" id=\"{0}\" placeholder=\"\" class=\"col-sm-6 form-control\"/>", FieldName); } break; case ControlType.IntegerEdit: case ControlType.DecimalEdit: sb.AppendFormat("<input class=\"input-mini bkspinner form-control\" type=\"text\" name=\"{0}\" id=\"{0}\"/>", FieldName); break; case ControlType.DateTimeEdit: sb.AppendFormat("<input class=\"date-picker form-control\" type=\"text\" name=\"{0}\" id=\"{0}\" data-date-format=\"dd-mm-yyyy\"/><span class=\"input-group-addon\"><i class=\"icon-calendar bigger-110\"></i></span>", FieldName); break; case ControlType.PictureEdit: sb.AppendFormat("<img name=\"{0}\" class=\"img-responsive\" src=\"/UserFiles/contact.png\" /><input class=\"form-control\" type=\"file\" name=\"{0}\" id=\"{0}\"/>", FieldName); break; case ControlType.ComboBox: if (fieldType == typeof(bool)) { sb.AppendFormat("<input type=\"checkbox\" name=\"{0}\" id=\"{0}\" class=\"ace ace-switch ace-switch-5 form-control\" value=\"1\"/><span class=\"lbl\"></span>", FieldName); } if (attrField.References != null) { sb.AppendFormat(@"<select id=""{0}"" name=""{0}"" class=""form-control""> $ foreach(var e in Provider.Database.ReadList(typeof({1}), ""select Id, Name from {1} order by Name"")) {{ $ <option value=""$=e.Id$"">$=e.Name$</option> $ }} $ </select>", FieldName, attrField.References.Name); } if (fieldType.IsEnum) { sb.AppendFormat(@"<select id=""{0}"" name=""{0}"" class=""form-control""> $ foreach(var ev in Enum.GetNames(typeof({1}))) {{ $ <option>$=ev$</option> $ }} $ </select>", FieldName, fieldType.Name); } break; case ControlType.LookUp: sb.AppendFormat(@"<input type=""hidden"" name=""{0}"" id=""{0}""/><input type=""text"" placeholder=""Search..."" class=""cinarChooser form-control"" entityName=""{1}"" id=""{0}Chooser"" selectedCallback=""on{0}ChooserSelected"" autocomplete=""off"" /> <div id=""{0}ChooserTemplate"" style=""display:none""><img height=""40"" src=""{{Picture}}""/> {{Name}}</div> <script> function on{0}ChooserSelected(id, name){{ \$('{0}').val(id); }} </script>", FieldName, attrField.References.Name); break; case ControlType.CSSEdit: case ControlType.MemoEdit: sb.AppendFormat("<textarea name=\"{0}\" id=\"{0}\" rows=\"3\" class=\"col-sm-8 form-control\"></textarea>", FieldName); break; case ControlType.Undefined: case ControlType.FilterEdit: default: throw new Exception(Provider.GetResource("This kind of form field is not supported: {0}", ct)); } return(sb.ToString()); }
private string GetControlHtml(Type fieldType, ColumnDetailAttribute attrField, EditFormFieldPropsAttribute attrEdit, ControlType ct) { StringBuilder sb = new StringBuilder(); switch (ct) { case ControlType.TagEdit: if (attrField.References != null) sb.AppendFormat(@"<select multiple="""" class=""width-80 chosen-select form-control"" id=""{0}"" name=""{0}"" data-placeholder=""Select tags""> $ foreach(var e in Provider.Database.ReadList(typeof({1}), ""select Id, Name from {1} order by Name"")) {{ $ <option>$=e.Name$</option> $ }} $ </select>", FieldName, attrField.References.Name); else sb.AppendFormat(@"<select multiple="""" class=""width-80 chosen-select form-control"" id=""{0}"" name=""{0}"" data-placeholder=""Select tags""> <option>Tag1</option> <option>Tag2</option> <option>Tag3</option> </select>", FieldName); break; case ControlType.StringEdit: if (attrField.Length>100 || attrField.ColumnType== DbType.Text) sb.AppendFormat("<textarea name=\"{0}\" id=\"{0}\" rows=\"3\" class=\"col-sm-8 form-control\"></textarea>", FieldName); else sb.AppendFormat("<input type=\"text\" name=\"{0}\" id=\"{0}\" placeholder=\"\" class=\"col-sm-6 form-control\"/>", FieldName); break; case ControlType.IntegerEdit: case ControlType.DecimalEdit: sb.AppendFormat("<input class=\"input-mini bkspinner form-control\" type=\"text\" name=\"{0}\" id=\"{0}\"/>", FieldName); break; case ControlType.DateTimeEdit: sb.AppendFormat("<input class=\"date-picker form-control\" type=\"text\" name=\"{0}\" id=\"{0}\" data-date-format=\"dd-mm-yyyy\"/><span class=\"input-group-addon\"><i class=\"icon-calendar bigger-110\"></i></span>", FieldName); break; case ControlType.PictureEdit: sb.AppendFormat("<img name=\"{0}\" class=\"img-responsive\" src=\"/UserFiles/contact.png\" /><input class=\"form-control\" type=\"file\" name=\"{0}\" id=\"{0}\"/>", FieldName); break; case ControlType.ComboBox: if (fieldType == typeof(bool)) sb.AppendFormat("<input type=\"checkbox\" name=\"{0}\" id=\"{0}\" class=\"ace ace-switch ace-switch-5 form-control\" value=\"1\"/><span class=\"lbl\"></span>", FieldName); if(attrField.References!=null) sb.AppendFormat(@"<select id=""{0}"" name=""{0}"" class=""form-control""> $ foreach(var e in Provider.Database.ReadList(typeof({1}), ""select Id, Name from {1} order by Name"")) {{ $ <option value=""$=e.Id$"">$=e.Name$</option> $ }} $ </select>", FieldName, attrField.References.Name); if(fieldType.IsEnum) sb.AppendFormat(@"<select id=""{0}"" name=""{0}"" class=""form-control""> $ foreach(var ev in Enum.GetNames(typeof({1}))) {{ $ <option>$=ev$</option> $ }} $ </select>", FieldName, fieldType.Name); break; case ControlType.LookUp: sb.AppendFormat(@"<input type=""hidden"" name=""{0}"" id=""{0}""/><input type=""text"" placeholder=""Search..."" class=""cinarChooser form-control"" entityName=""{1}"" id=""{0}Chooser"" selectedCallback=""on{0}ChooserSelected"" autocomplete=""off"" /> <div id=""{0}ChooserTemplate"" style=""display:none""><img height=""40"" src=""{{Picture}}""/> {{Name}}</div> <script> function on{0}ChooserSelected(id, name){{ \$('{0}').val(id); }} </script>", FieldName, attrField.References.Name); break; case ControlType.CSSEdit: case ControlType.MemoEdit: sb.AppendFormat("<textarea name=\"{0}\" id=\"{0}\" rows=\"3\" class=\"col-sm-8 form-control\"></textarea>", FieldName); break; case ControlType.Undefined: case ControlType.FilterEdit: default: throw new Exception(Provider.GetResource("This kind of form field is not supported: {0}", ct)); } return sb.ToString(); }
internal override string show() { StringBuilder sb = new StringBuilder(); if (String.IsNullOrEmpty(EntityName)) { return(Provider.GetResource("Select entity")); } Cinar.Database.Table tbl = Provider.Database.Tables[EntityName]; if (tbl == null) { return(Provider.GetResource("The table [entityName] coulnd't be found").Replace("[entityName]", EntityName)); } string pageUrl = Provider.Request.Url.Scheme + "://" + Provider.Request.Url.Authority + Provider.Request.RawUrl; CinarUriParser uriParser = new CinarUriParser(pageUrl); if (!String.IsNullOrEmpty(Provider.Request["delete"])) { deleteEntity(); uriParser.QueryPart.Remove("delete"); pageUrl = uriParser.ToString(); } BaseEntity testEntity = Provider.CreateEntity(EntityName); if (String.IsNullOrEmpty(ShowFields)) { ShowFields = String.Format("{0},Visible", testEntity.GetNameColumn()); } StringBuilder sbFrom = new StringBuilder(); sbFrom.AppendFormat("[{0}]\n", EntityName); // generate SQL string[] showFieldsArr = ShowFields.Split(','); string[] showFieldsArrWithAs = new string[showFieldsArr.Length]; for (int i = 0; i < showFieldsArr.Length; i++) { string field = showFieldsArr[i]; PropertyInfo pi = testEntity.GetType().GetProperty(field); EditFormFieldPropsAttribute attrib = (EditFormFieldPropsAttribute)CMSUtility.GetAttribute(pi, typeof(EditFormFieldPropsAttribute)); ColumnDetailAttribute fieldProps = (ColumnDetailAttribute)CMSUtility.GetAttribute(pi, typeof(ColumnDetailAttribute)); string caption = Provider.GetResource(pi.DeclaringType.Name + "." + pi.Name); if (fieldProps.References != null) { BaseEntity testRefEntity = Provider.CreateEntity(fieldProps.References.Name); showFieldsArrWithAs[i] = "T" + field + "." + testRefEntity.GetNameColumn() + " as [" + caption + "]"; sbFrom.AppendFormat("\tleft join [{0}] as {1} ON {1}.{2} = [{3}].{4}\n", fieldProps.References.Name, "T" + field, "Id", EntityName, field); } else { showFieldsArrWithAs[i] = EntityName + "." + field + " as [" + caption + "]"; } } ShowFields = String.Join(",", showFieldsArrWithAs); ShowFields = EntityName + ".Id," + ShowFields; FilterParser filterParser = new FilterParser(this.Filter, EntityName); string where = filterParser.GetWhere(); int pageNo = 0; Int32.TryParse(Provider.Request["pageNo"], out pageNo); string sql = Provider.Database.AddPagingToSQL(String.Format(@" select {0} from {1} where 1=1 {2} order by {3} {4} ", ShowFields, sbFrom.ToString(), String.IsNullOrEmpty(where) ? "" : ("and " + where), EntityName + "." + this.OrderBy, this.Ascending ? "asc" : "desc"), HowManyItems, pageNo); DataTable dt = Provider.Database.GetDataTable(sql, filterParser.GetParams()); sb.Append("<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n"); // header sb.Append("<tr class=\"header\">\n"); for (int i = 0; i < dt.Columns.Count; i++) { if (i == 0) { continue; } string colName = dt.Columns[i].ColumnName; string img = ""; uriParser.QueryPart["orderBy"] = showFieldsArr[i - 1]; if (this.OrderBy == showFieldsArr[i - 1]) { uriParser.QueryPart["ascending"] = (!this.Ascending).ToString(); img = this.Ascending ? " (asc)" : " (desc)"; } else { uriParser.QueryPart["ascending"] = "True"; } sb.AppendFormat("<td><a href=\"{0}\">{1}</a>{2}</td>\n", uriParser.ToString(), colName, img); } if (this.Editable) { sb.AppendFormat("<td>{0}</td>\n", " "); } if (this.Deletable) { sb.AppendFormat("<td>{0}</td>\n", " "); } sb.Append("</tr>\n"); string nameField = testEntity.GetNameColumn(); // data uriParser = new CinarUriParser(pageUrl); foreach (DataRow dr in dt.Rows) { sb.Append("<tr class=\"data\">\n"); string editUrl = this.EditPage + "?item=" + dr[0] + "&returnUrl=" + Provider.Server.UrlEncode(Provider.Request.RawUrl); for (int i = 0; i < dt.Columns.Count; i++) { if (i == 0) { continue; } object data = (dr.IsNull(i) || dr[i].Equals("")) ? " " : dr[i]; if (showFieldsArr[i - 1] == nameField && this.Editable) { data = "<a href=\"" + editUrl + "\">" + data + "</a>"; } if (dr.Table.Columns[i].DataType == typeof(bool)) { data = ((bool)data) ? Provider.GetResource("Yes") : Provider.GetResource("No"); } sb.AppendFormat("<td>{0}</td>\n", data); } if (this.Deletable) { uriParser.QueryPart["delete"] = dr[0].ToString(); sb.AppendFormat("<td><span class=\"cbtn cdelete\" onclick=\"if(confirm('Kayýt silinecek!')) location.href='{0}'\"></span></td>\n", uriParser.ToString()); } if (this.Editable) { sb.AppendFormat("<td><span class=\"cbtn cedit\" onclick=\"location.href='{0}'\"></span></td>\n", editUrl); } sb.Append("</tr>\n"); } // paging string prevPageLink = "", nextPageLink = ""; uriParser = new CinarUriParser(pageUrl); if (pageNo > 0) { uriParser.QueryPart["pageNo"] = (pageNo - 1).ToString(); prevPageLink = String.Format("<a href=\"{0}\"><< {1}</a> ", uriParser.Uri.ToString(), Provider.GetModuleResource("Previous Page")); } if (dt.Rows.Count == HowManyItems) { uriParser.QueryPart["pageNo"] = (pageNo + 1).ToString(); nextPageLink = String.Format(" <a href=\"{0}\">{1} >></a>", uriParser.Uri.ToString(), Provider.GetModuleResource("Next Page")); } sb.AppendFormat("<tr class=\"footer\"><td colspan=\"100\">{0} {1}</td></tr>\n", prevPageLink, nextPageLink); sb.Append("</table>\n"); if (!String.IsNullOrEmpty(NewRecordLink)) { sb.AppendFormat("<p class=\"newRec\"><a href=\"{0}\">{1}</a></p>\n", this.EditPage + "?returnUrl=" + Provider.Server.UrlEncode(Provider.Request.RawUrl), NewRecordLink); } return(sb.ToString()); }