コード例 #1
0
ファイル: FormField.cs プロジェクト: fizikci/Cinar
        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());
        }
コード例 #2
0
ファイル: FormField.cs プロジェクト: fizikci/Cinar
        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());
        }
コード例 #3
0
        private void getEntityDocs()
        {
            string entityName = context.Request["entityName"];
            Type   entityType = Provider.GetEntityType(entityName);
            object obj        = Provider.CreateEntity(entityType);

            StringBuilder sb = new StringBuilder();

            sb.Append("<h2>Database Properties</h2>");
            sb.Append("<table>\n");
            sb.AppendFormat("<tr class=\"header\"><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td><td>{4}</td></tr>\n",
                            "Name",
                            "Type",
                            "Declaring Type",
                            "Description",
                            "Default Value");

            int i = 0;

            foreach (PropertyInfo pi in entityType.GetProperties())
            {
                if (!pi.CanWrite)
                {
                    continue;
                }
                if (pi.Name == "Item")
                {
                    continue;
                }

                string caption = Provider.GetResource(pi.DeclaringType.Name + "." + pi.Name);
                if (caption.StartsWith(pi.DeclaringType.Name + ".") && !Provider.DesignMode)
                {
                    caption = pi.Name;
                }
                string description = Provider.GetResource(pi.DeclaringType.Name + "." + pi.Name + "Desc");

                sb.AppendFormat("<tr{5}><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td><td>{4}</td></tr>\n",
                                pi.Name,
                                getShortName(pi.PropertyType),
                                pi.DeclaringType.Name,
                                caption == description ? "" : (caption + ". ") + description,
                                pi.GetValue(obj, null),
                                i % 2 == 0 ? "":" class=\"odd\"");
                i++;
            }
            sb.Append("</table>\n");

            i = 0;
            sb.Append("<h2>Read Only Properties</h2>");
            sb.Append("<table>\n");
            sb.AppendFormat("<tr class=\"header\"><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td></tr>\n",
                            "Type",
                            "Name",
                            "Declaring Type",
                            "Description");

            foreach (PropertyInfo pi in entityType.GetProperties())
            {
                if (pi.CanWrite)
                {
                    continue;
                }
                if (pi.Name == "Item")
                {
                    continue;
                }

                DescriptionAttribute desc = pi.GetAttribute <DescriptionAttribute>() ?? new DescriptionAttribute();

                sb.AppendFormat("<tr{4}><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td></tr>\n",
                                getShortName(pi.PropertyType),
                                pi.Name,
                                pi.DeclaringType.Name,
                                desc.Description,
                                i % 2 == 0 ? "" : " class=\"odd\"");
                i++;
            }
            sb.Append("</table>\n");

            i = 0;

            sb.Append("<h2>Methods</h2>");
            sb.Append("<table>\n");
            sb.AppendFormat("<tr class=\"header\"><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td></tr>\n",
                            "Type",
                            "Name",
                            "Declaring Type",
                            "Description");

            foreach (MethodInfo pi in entityType.GetMethods(BindingFlags.Public | BindingFlags.Instance))
            {
                if (pi.IsSpecialName)
                {
                    continue;
                }

                DescriptionAttribute desc = pi.GetAttribute <DescriptionAttribute>() ?? new DescriptionAttribute();

                sb.AppendFormat("<tr{4}><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td></tr>\n",
                                getShortName(pi.ReturnType),
                                pi.Name + "(" + pi.GetParameters().Select(p => "<b>" + getShortName(p.ParameterType) + "</b> " + p.Name).StringJoin(", ") + ")",
                                pi.DeclaringType.Name,
                                desc.Description,
                                i % 2 == 0 ? "" : " class=\"odd\"");
                i++;
            }
            sb.Append("</table>\n");

            i = 0;

            if (obj.GetType() != typeof(Lang))
            {
                sb.Append("<h2>Related Entities</h2>");
                sb.Append("<table>\n");
                sb.AppendFormat("<tr class=\"header\"><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td></tr>\n",
                                "Entity Name",
                                "Related Field Name",
                                "Label",
                                "Description");
                foreach (Type type in Provider.GetEntityTypes())
                {
                    foreach (PropertyInfo pi in type.GetProperties())
                    {
                        if (pi.DeclaringType == typeof(BaseEntity))
                        {
                            continue;                                         //*** BaseEntity'deki UpdateUserId ve InsertUserId bütün entitilerde var, gereksiz bir ilişki kalabalığı oluşturuyor
                        }
                        ColumnDetailAttribute fda = (ColumnDetailAttribute)CMSUtility.GetAttribute(pi, typeof(ColumnDetailAttribute));
                        if (fda.References == entityType)
                        {
                            sb.AppendFormat("<tr{4}><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td></tr>\n",
                                            type.Name,
                                            pi.Name,
                                            Provider.GetResource(type.Name).ToHTMLString(),
                                            Provider.GetResource(type.Name + "Desc").ToHTMLString(),
                                            i % 2 == 0 ? "" : " class=\"odd\"");
                            i++;
                        }
                    }
                }
                sb.Append("</table>\n");
            }

            Provider.Response.Write(sb.ToString());
        }
コード例 #4
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());
        }