Esempio n. 1
0
        public void OnDefault(SynkContext context)
        {
            var entityClass = context.request.GetVariable("entity");
            var term        = context.request.GetVariable("term");
            var required    = context.request.GetVariable("required").Equals("true");

            List <Entity> entities = context.currentModule.Search(context, entityClass, term);

            var result = DataNode.CreateArray();

            if (!required)
            {
                var item = DataNode.CreateObject();
                item.AddField("value", "0");
                item.AddField("label", context.Translate("system_none"));
                result.AddNode(item);
            }

            if (entities != null)
            {
                foreach (var entity in entities)
                {
                    var item = DataNode.CreateObject();
                    item.AddField("value", entity.id.ToString());
                    item.AddField("label", entity.ToString());
                    result.AddNode(item);
                }
            }

            var json = JSONWriter.WriteToString(result);

            context.Echo(json);
        }
Esempio n. 2
0
        public virtual void OnValidate(SynkContext context)
        {
            long id;

            long.TryParse(context.request.GetVariable("entity"), out id);

            var entity = context.database.FetchEntityByID(_entityClass, id);

            var obj = DataNode.CreateObject();

            foreach (var field in entity.fields)
            {
                if (context.request.HasVariable(field.name))
                {
                    var newValue = context.request.GetVariable(field.name);

                    var currentValue = entity.GetFieldValue(field);
                    var defaultValue = field.GetDefaultValue(context);

                    string error = null;

                    if (field.validator != null)
                    {
                        if (field.required || !string.IsNullOrEmpty(newValue))
                        {
                            entity.SetFieldValue(field, newValue);
                            error = field.validator(context, entity, field);
                            entity.SetFieldValue(field, currentValue);
                        }
                    }
                    else
                    if (field.required && (string.IsNullOrEmpty(newValue) || (newValue.Equals("0") && (field.entity != null || field.formType.Equals("file")))))
                    {
                        error = context.Translate("system_field_required");
                    }

                    if (error != null)
                    {
                        var result = DataNode.CreateObject(field.name);
                        result.AddField("label", entity.translateField(context, field));
                        result.AddField("error", error);
                        obj.AddNode(result);
                    }
                }
            }

            var json = JSONWriter.WriteToString(obj);

            context.Echo(json);
        }
Esempio n. 3
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));
            }
        }