Beispiel #1
0
        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());
        }
Beispiel #2
0
        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());
        }
Beispiel #3
0
        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>

		&nbsp; &nbsp; &nbsp;
		<button class=""btn"" type=""button"" onclick=""history.go(-1)"">
			<i class=""icon-undo bigger-110""></i>
			Cancel
		</button>
	</div>
</div>

</form>");

            return(sb.ToString());
        }
Beispiel #4
0
        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());
        }
Beispiel #5
0
 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();
 }
Beispiel #6
0
        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", "&nbsp;");
            }
            if (this.Deletable)
            {
                sb.AppendFormat("<td>{0}</td>\n", "&nbsp;");
            }
            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("")) ? "&nbsp;" : 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>&nbsp;&nbsp;", uriParser.Uri.ToString(), Provider.GetModuleResource("Previous Page"));
            }
            if (dt.Rows.Count == HowManyItems)
            {
                uriParser.QueryPart["pageNo"] = (pageNo + 1).ToString();
                nextPageLink = String.Format("&nbsp;&nbsp;<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());
        }