예제 #1
0
        private void GenerateData(SynkContext context)
        {
            if (this._entityClass == null)
            {
                return;
            }

            var templateEntity = context.database.CreateEntity(_entityClass);

            var tabEntries = new HashSet <string>();

            this.headers = new List <Header>();
            foreach (var field in templateEntity.fields)
            {
                if (!field.hidden)
                {
                    headers.Add(new Header(field.name, templateEntity.translateField(context, field), field.grid));

                    tabEntries.Add(field.tab);
                }
            }

            long total;

            if (entityID >= 0)
            {
                var entity = context.database.FetchEntityByID(_entityClass, entityID);

                entities = new List <Entity>();
                entities.Add(entity);
                total = 1;
            }
            else
            {
                total    = context.database.GetEntityCount(_entityClass, this.filter);
                entities = context.database.FetchAllEntities(_entityClass, this.filter, new Pagination(itemsPerPage, currentPage));
            }

            this.tabs = new List <Tab>();
            this.rows = new List <Row>();
            foreach (var tabName in tabEntries)
            {
                var tab = new Tab();
                tab.name = context.Translate("entity_" + _entityClass + "_" + tabName);

                var rows = new List <Row>();
                tab.rows = rows;

                tabs.Add(tab);
                tab.index  = tabs.Count;
                tab.active = tab.index == 1;

                foreach (var entity in entities)
                {
                    var entityPermission = entity.exists ? entity.CheckPermissions(context, context.currentUser) : PermissonMode.Writable;
                    if (entityPermission == PermissonMode.Hidden)
                    {
                        continue;
                    }

                    var columns = new List <Column>();
                    int i       = 0;
                    foreach (var field in entity.fields)
                    {
                        if (!field.tab.Equals(tabName) && entityID >= 0)
                        {
                            continue;
                        }

                        var mode = field.HasPermissions(context);
                        if (mode == PermissonMode.Hidden)
                        {
                            continue;
                        }

                        if (entityPermission == PermissonMode.Readable)
                        {
                            mode = PermissonMode.Readable;
                        }

                        var column = new Column();

                        column.name        = field.name;
                        column.value       = entity.GetFieldValue(column.name);
                        column.maskedValue = column.value;
                        column.required    = field.required;
                        column.odd         = (i % 2) != 0;

                        column.extra_attributes = "";

                        if (field.formType.Equals("checkbox"))
                        {
                            if (column.value.Equals("1"))
                            {
                                column.extra_attributes += "checked='true' ";
                            }
                        }

                        column.isHTML   = false;
                        column.isUpload = false;
                        column.thumb    = null;

                        if (field.lengthLimit > 0)
                        {
                            column.extra_attributes += "maxlength='" + field.lengthLimit + "' ";
                        }

                        /*if (field.pattern != null)
                         * {
                         *  column.extra_attributes += "pattern='" + field.pattern + "' ";
                         * }*/

                        if (field.formType.Equals("html"))
                        {
                            column.isHTML            = true;
                            column.extra_attributes += "style='width:100%; height:300px;' ";
                        }
                        else
                        if (field.formType.Equals("password"))
                        {
                            column.extra_attributes = "data-minlength='6' ";
                        }
                        else
                        if (field.formType == "file")
                        {
                            column.isUpload = true;
                            var fieldData = column.name + "_thumb";
                            column.thumb = entity.GetFieldValue(fieldData);

                            if (string.IsNullOrEmpty(column.thumb))
                            {
                                column.maskedValue = "-";
                            }
                        }

                        column.hasContent = (field.controlType.Equals("textarea"));

                        column.options = new List <Option>();
                        if (!string.IsNullOrEmpty(field.enumName))
                        {
                            var enumValues = context.FetchEnum(field.enumName);
                            var opLen      = enumValues.Count;

                            foreach (var enumVal in enumValues)
                            {
                                var enumSelected    = (enumVal.Equals(column.value));
                                var translateKey    = "enum_" + field.enumName + "_" + enumVal;
                                var enumTranslation = context.Translate(translateKey);

                                var option = new Option(enumVal, enumTranslation, enumSelected);

                                if (enumSelected)
                                {
                                    column.maskedValue = enumTranslation;
                                }

                                column.options.Add(option);
                            }
                        }

                        column.items = new List <Item>();


                        if (field.entity != null)
                        {
                            column.entityID = column.value;
                            column.isTable  = field.formType.Equals("table");

                            var template = context.database.CreateEntity(field.entity);
                            column.isSearchable = template.GetSearch("test") != null;

                            if (column.isTable)
                            {
                                var entityList = column.entityID.Split(',');
                                foreach (var id in entityList)
                                {
                                    if (id.Length == 0)
                                    {
                                        break;
                                    }

                                    long otherID;
                                    long.TryParse(id, out otherID);

                                    if (otherID == 0)
                                    {
                                        continue;
                                    }

                                    var otherEntity = context.database.FetchEntityByID(field.entity, otherID);
                                    var otherThumb  = otherEntity.ToThumb();
                                    column.items.Add(new Item(otherID, otherEntity.ToString(), otherThumb));
                                }

                                column.maskedValue = "";
                            }
                            else
                            {
                                if (string.IsNullOrEmpty(column.value) || column.value.Equals("0"))
                                {
                                    column.maskedValue = "-";
                                }
                                else
                                {
                                    long otherID;
                                    long.TryParse(column.value, out otherID);

                                    var otherEntity = context.database.FetchEntityByID(field.entity, otherID);
                                    column.maskedValue = otherEntity.ToString();
                                }
                            }
                        }
                        else
                        {
                            column.isTable = false;
                        }

                        if (field.formType.Equals("date"))
                        {
                            long dateval;
                            long.TryParse(column.value, out dateval);
                            DateTime date = dateval.ToDateTime();
                            column.value       = date.Year + "-" + date.Month.ToString("00") + "-" + date.Day.ToString("00");
                            column.maskedValue = entity.GetFieldValue(field.name + "_text");
                        }

                        column.unit = field.unit;

                        if (column.unit != null && column.unit.Equals("byte"))
                        {
                            int val;
                            int.TryParse(column.value, out val);
                            column.maskedValue = Utility.SizeSuffix(val);
                            column.unit        = null;
                        }

                        if (string.IsNullOrEmpty(column.maskedValue))
                        {
                            column.maskedValue = column.value;
                        }

                        column.label    = entity.translateField(context, field);
                        column.visible  = field.grid;
                        column.type     = field.formType;
                        column.@class   = field.formClass;
                        column.control  = field.controlType;
                        column.entity   = field.entity;
                        column.writable = mode == PermissonMode.Writable;
                        column.index    = columns.Count;

                        column.validable = !(/*field.formType.Equals("file") ||*/ field.formType.Equals("checkbox") || field.formType.Equals("table"));

                        columns.Add(column);

                        i++;
                    }


                    var row = new Row();
                    row.columns = columns;
                    row.rowID   = entity.id;
                    row.@class  = _entityClass;
                    rows.Add(row);

                    this.rows.Add(row);
                }

                if (entityID < 0)
                {
                    break;
                }
            }

            int totalPages = (int)Math.Ceiling(total / (float)itemsPerPage);

            this.pages = new List <Page>();
            this.pages.Add(new Page("«", currentPage <= 0 ? 0 : currentPage - 1, false, currentPage <= 1));
            var lastPage = totalPages - 1;

            for (int j = 0; j <= lastPage; j++)
            {
                this.pages.Add(new Page((j + 1).ToString(), j, currentPage == j, false));
            }
            this.pages.Add(new Page("»", currentPage >= lastPage ? lastPage : currentPage + 1, false, currentPage >= lastPage));

            if (this.pages.Count <= 2)
            {
                this.pages.Clear();
            }

            this.exports = new List <Export>();

            /*foreach (glob('plugins/export/*.php') as $file)
             * {
             * $extensionName = pathinfo($file, PATHINFO_FILENAME);
             * require_once($file);
             * $exports[] = array('format' => $extensionName, 'label' => $extensionName);
             * }	*/

            this.error = null;

            if (entities.Count == 0)
            {
                error = context.Translate("grid_error_empty");
                error = error.Replace("$name", context.currentModule.getTitle(context));
            }
        }