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)); } }