Esempio n. 1
0
        /*
         * public function filter($context)
         * {
         *      $entityClass = $_REQUEST['class'];
         *      $fieldName = $_REQUEST['field_name'];
         *      $fieldValue = $_REQUEST['field_value'];
         *
         *      $entity = $context->database->createEntity($context, $entityClass);
         *
         * //var_dump($_REQUEST);	   die();
         *
         *      $field = $entity->findField($fieldName);
         *
         *      if (is_null($field))
         *      {
         *              die("Invalid field for filtering");
         *      }
         *      else
         *      {
         *              if (strpos($fieldValue, '*') !== false)
         *              {
         *                      $op = 'like';
         *              }
         *              else
         *              {
         *                      $op = 'eq';
         *              }
         *
         *              $condition = array($fieldName => array($op => $fieldValue));
         *
         *              $context->addFilter($condition);
         *              $this->render($context);
         *      }
         * }
         *
         * public function unfilter($context)
         * {
         * $id = $_REQUEST['id'];
         * //var_dump($_REQUEST);	   die();
         *
         * $context->removeFilters();
         *
         * $this->render($context);
         * }
         */

        public virtual void OnRemove(SynkContext context)
        {
            long id;

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

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

            if (entity.exists)
            {
                entity.Remove(context);

                FetchPage(context);
                GenerateData(context);

                if (this.entities != null && this.entities.Count <= 0 && this.currentPage > 0)
                {
                    this.currentPage--;
                    GenerateData(context);
                }

                context.PushTemplate("crud/list");
                context.Render();
            }
            else
            {
                context.die("Entity " + id + " not found!");
            }
        }
Esempio n. 2
0
        public void OnList(SynkContext context)
        {
            var error   = false;
            var content = DataNode.CreateObject();

            if (context.request.HasVariable("entity"))
            {
                var entityClass = context.request.GetVariable("entity");
                var entities    = context.database.FetchAllEntities(entityClass);

                var obj = DataNode.CreateObject("content");
                content.AddNode(obj);

                foreach (var entity in entities)
                {
                    var fields = entity.GetFields();
                    var child  = DataNode.CreateObject("entity");
                    obj.AddNode(child);
                    child.AddField("id", entity.id.ToString());
                    child.AddNode(fields.ToDataSource());
                }
            }
            else
            {
                error = true;
                content.AddField("error", "Entity type not specified");
            }

            APIResult(context, content, error);
        }
Esempio n. 3
0
 private void ShowDefaultPage(SynkContext context)
 {
     context.ChangeModule(context.config.GetFieldValue("defaultModule"));
     context.ChangeAction("default");
     context.Reload();
     context.RunController();
 }
Esempio n. 4
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. 5
0
        public virtual void OnDefault(SynkContext context)
        {
            FetchPage(context);
            GenerateData(context);

            context.PushTemplate("crud/list");
            context.Render();
        }
Esempio n. 6
0
        public virtual void OnEdit(SynkContext context)
        {
            FetchEntityID(context);
            GenerateData(context);

            context.PushTemplate("crud/edit");
            context.Render();
        }
Esempio n. 7
0
        private void FetchPage(SynkContext context)
        {
            this.entityID = -1;
            //this.filter = context.loadVar("filter", null);
            var pageVal = context.loadVarFromRequest("page", "0");

            int.TryParse(pageVal, out this.currentPage);
        }
Esempio n. 8
0
        public override void OnInvalidAction(SynkContext context, string action)
        {
            var content = DataNode.CreateObject();
            var error   = true;

            content.AddField("error", "method " + action + " not supported");
            APIResult(context, content, error);
        }
Esempio n. 9
0
        public virtual void OnClear(SynkContext context)
        {
            context.database.ClearEntities(_entityClass);

            FetchPage(context);
            GenerateData(context);

            context.PushTemplate("crud/list");
            context.Render();
        }
Esempio n. 10
0
        private void APIResult(SynkContext context, DataNode content, bool error)
        {
            var result = DataNode.CreateObject();

            result.AddField("result", error ? "error" : "ok");
            result.AddNode(content);

            var json = JSONWriter.WriteToString(result);

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

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

            this.detail = context.database.FetchEntityByID(_entityClass, id);

            context.PushTemplate("crud/detail_" + _entityClass);
            context.Render();
        }
Esempio n. 12
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. 13
0
        public void OnLogin(SynkContext context)
        {
            var username = context.loadVarFromRequest("username");
            var password = context.loadVarFromRequest("password");

            var dbName = context.config.GetFieldValue("database");
            var cond   = Condition.Equal("username", username);
            var user   = context.database.FetchEntity <User>(cond);

            string hash = null;

            if (user != null && user.exists)
            {
                hash = user.GetFieldValue("hash");
            }

            if (context.database.failed)
            {
                context.warning = "Database error!";
                context.PushTemplate("auth/default");
            }
            else
            if (user != null && user.exists && (string.IsNullOrEmpty(hash) || this.checkPassword(password, hash)))
            {
                if (context.config.GetFieldBool("instanced"))
                {
                    dbName = user.GetFieldValue("database");
                }

                context.LogIn(user.id, dbName);

                ShowDefaultPage(context);
                return;
            }
            else
            {
                if (user.exists)
                {
                    context.warning = "Dados de login invalidos!";
                }
                else
                {
                    context.warning = "Utilizador não existente!";
                }

                context.PushTemplate("auth/default");
            }

            context.Render();
        }
Esempio n. 14
0
        public byte[] GetBytes(SynkContext context)
        {
            var content = GetFieldValue("local_name");

            var filePath = System.IO.Path.Combine("public", content.TrimStart('/', '\\'));

            filePath = context.site.GetFullPath(filePath);
            if (System.IO.File.Exists(filePath))
            {
                return(System.IO.File.ReadAllBytes(filePath));
            }
            else
            {
                return(null);
            }
        }
Esempio n. 15
0
        public void OnUpload(SynkContext context)
        {
            foreach (var upload in context.request.uploads)
            {
                var entity = context.UploadFile(upload.fileName, upload.bytes);

                var result = DataNode.CreateObject();
                result.AddField("id", entity.id.ToString());
                result.AddField("name", upload.fileName);
                result.AddField("hash", entity.GetFieldValue("hash"));

                var json = JSONWriter.WriteToString(result);
                context.Echo(json);
                break;
            }
        }
Esempio n. 16
0
        public virtual void OnSave(SynkContext context)
        {
            long id;

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

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

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

                    if (field.formType.Equals("date"))
                    {
                        int year, month, day;
                        var temp = val.Split('-');
                        int.TryParse(temp[0], out year);
                        int.TryParse(temp[1], out month);
                        int.TryParse(temp[2], out day);
                        DateTime date = new DateTime(year, month, day);
                        val = date.ToTimestamp().ToString();
                    }

                    entity.SetFieldValue(field.name, val);
                }
            }

            if (entity.Save(context))
            {
                FetchPage(context);
                GenerateData(context);

                context.PushTemplate("crud/list");
                context.Render();
            }
            else
            {
                if (string.IsNullOrEmpty(context.error) && !context.WaitingForConfirmation())
                {
                    context.error = "Entity saving entity";
                }

                context.die();
            }
        }
Esempio n. 17
0
        public void OnInsert(SynkContext context)
        {
            var error   = false;
            var content = DataNode.CreateObject();

            if (context.request.HasVariable("entity"))
            {
                var entityClass = context.request.GetVariable("entity");
                var entity      = context.database.CreateEntity(entityClass);

                foreach (var field in entity.fields)
                {
                    var fieldName = field.name;

                    if (context.request.HasVariable(fieldName))
                    {
                        entity.SetFieldValue(fieldName, context.request.GetVariable(fieldName));
                    }
                    else
                    if (!field.required)
                    {
                        entity.SetFieldValue(fieldName, field.GetDefaultValue(context));
                    }
                    else
                    {
                        error = true;
                        content.AddField("error", fieldName + " is required");
                        break;
                    }
                }

                if (!error)
                {
                    entity.Save(context);
                    content.AddField("id", entity.id.ToString());
                }
            }
            else
            {
                error = true;
                content.AddField("error", "Entity type not specified");
            }

            APIResult(context, content, error);
        }
Esempio n. 18
0
        public void OnGet(SynkContext context)
        {
            var error   = false;
            var content = DataNode.CreateObject();

            if (context.request.HasVariable("entity"))
            {
                var entityClass = context.request.GetVariable("entity");
                if (context.request.HasVariable("id"))
                {
                    long entityID;
                    long.TryParse(context.request.GetVariable("id"), out entityID);

                    var obj = DataNode.CreateObject("content");
                    content.AddNode(obj);

                    var entity = context.database.FetchEntityByID(entityClass, entityID);
                    if (entity.exists)
                    {
                        obj.AddField("id", entity.id.ToString());
                        var fields = entity.GetFields();
                        obj.AddNode(fields.ToDataSource());
                    }
                    else
                    {
                        error = true;
                        content.AddField("error", "ID does not exist");
                    }
                }
                else
                {
                    error = true;
                    content.AddField("error", "id is required for");
                }
            }
            else
            {
                error = true;
                content.AddField("error", "Entity type not specified");
            }

            APIResult(context, content, error);
        }
Esempio n. 19
0
        public virtual void InitFirstUser(SynkContext context, User user)
        {
            user.SetFieldValue("username", this.GetFieldValue("defaultUser"));
            user.SetFieldValue("password", this.GetFieldValue("defaultPass"));
            user.SetFieldValue("permissions", 0xFFFFFFFF.ToString());

            var dbName = this.GetFieldValue("database");

            bool instanced = this.GetFieldBool("instanced");

            if (instanced)
            {
                user.SetFieldValue("database", dbName + '_' + Utility.GetUniqID());
            }
            else
            {
                user.SetFieldValue("database", dbName);
            }
        }
Esempio n. 20
0
        public override void OnDetail(SynkContext context)
        {
            long id;

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

            var file = context.database.FetchEntityByID <File>(id);

            if (file.exists)
            {
                var fileName = file.GetFieldValue("real_name");
                var bytes    = file.GetBytes(context);
                context.SendDownload(fileName, bytes);
            }
            else
            {
                context.die("File not found, id " + id);
            }
        }
Esempio n. 21
0
        public void OnDelete(SynkContext context)
        {
            var error   = false;
            var content = DataNode.CreateObject();

            if (context.request.HasVariable("entity"))
            {
                var entityClass = context.request.GetVariable("entity");

                if (context.request.HasVariable("id"))
                {
                    long entityID;
                    long.TryParse(context.request.GetVariable("id"), out entityID);
                    var entity = context.database.FetchEntityByID(entityClass, entityID);
                    if (entity.exists)
                    {
                        content.AddField("id", entityID.ToString());
                        entity.Remove(context);
                    }
                    else
                    {
                        error = true;
                        content.AddField("error", "ID does not exist");
                    }
                }
                else
                {
                    error = true;
                    content.AddField("error", "ID is required");
                }
            }
            else
            {
                error = true;
                content.AddField("error", "Entity type not specified");
            }

            APIResult(context, content, error);
        }
Esempio n. 22
0
 public void OnDefault(SynkContext context)
 {
     context.PushTemplate("auth/default");
     context.Render();
 }
Esempio n. 23
0
 public long FetchEntityID(SynkContext context)
 {
     long.TryParse(context.loadVar("entity", "-1"), out this.entityID);
     return(this.entityID);
 }
Esempio n. 24
0
        public Entity FetchEntity(SynkContext context)
        {
            FetchEntityID(context);

            return(context.database.FetchEntityByID(_entityClass, this.entityID));
        }
Esempio n. 25
0
        /*public string addFilter(string filter)
         *  {
         *          if (is_null($this->filter))
         *          {
         *              $this->filter = $filter;
         *          }
         *          else
         *          {
         *                  $this->filter = array('and' => array($this->filter, $filter));
         *          }
         *
         *          $_SESSION['filter'] = $this->filter;
         *  }*/

        public override bool CheckPermissions(SynkContext context, User user, string action)
        {
            return(context.hasLogin || action.Equals("detail"));
        }
Esempio n. 26
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));
            }
        }
Esempio n. 27
0
 public void OnLogout(SynkContext context)
 {
     context.LogOut();
     ShowDefaultPage(context);
     return;
 }
Esempio n. 28
0
 public override bool CheckPermissions(SynkContext context, User user, string action)
 {
     return(true);
 }