Esempio n. 1
0
        public void CreateModule(IModule _dbModule, DynamicModuleViewModel _moduleData)
        {
            var row = new Row()
            {
                Module = (Module)_dbModule
            };

            foreach (DynamicModuleField field in _moduleData.Fields)
            {
                var converter = FieldValueConversion.GetConverter(field.DataType);
                var rowField  = new Cell {
                    Field = _dbModule.Fields.FirstOrDefault(f => f.FieldName == field.PropertyName),
                    Data  = converter.Serialize(field, new ConversionContext {
                        Cell = null
                    })
                };

                row.Cells.Add(rowField);
            }

            try {
                ModRepository.AddModuleEntry(_dbModule.Id, row);
            }
            catch (Exception e) {
                throw new CreateModuleFailedException("Ocorreu um erro ao incluir o seu registro. Tente novamente mais tarde.", e);
            }
        }
Esempio n. 2
0
        public void SetModuleData(IModule _dbModule, int?id, DynamicModuleViewModel _moduleData, bool partialData = false)
        {
            if (_dbModule.ModuleType == (int)ModuleType.SingleEntry &&
                _dbModule.Rows.FirstOrDefault() == null)
            {
                // We have a single entry module and its row hasn't been created yet.
                // No big deal, we'll do it.
                CreateModule(_dbModule as Module, _moduleData);
            }

            var rowToEdit = (_dbModule.ModuleType == (int)ModuleType.Dynamic)
                                ? _dbModule.Rows.FirstOrDefault(row => row.ID == id)
                                : _dbModule.Rows.FirstOrDefault();

            if (rowToEdit == null)
            {
                throw new ModuleRowNotFoundException("Registro não encontrado.");
            }

            if (!partialData)
            {
                // Update all the row fields, i.e. set null to missing form fields.
                foreach (Cell rowField in rowToEdit.Cells)
                {
                    var formField = _moduleData.Fields.FirstOrDefault(rf => rf.PropertyName == rowField.Field.FieldName);
                    var converter = FieldValueConversion.GetConverter(formField.DataType);

                    rowField.Data = converter.Serialize(formField, new ConversionContext {
                        Cell       = rowField,
                        Field      = rowField.Field,
                        Module     = _dbModule,
                        Repository = ModRepository
                    });
                }
            }
            else
            {
                // Update only the row fields that were received as form fields. Do not touch others.
                foreach (var formField in _moduleData.Fields)
                {
                    var rowField  = rowToEdit.Cells.FirstOrDefault(rf => rf.Field.FieldName == formField.PropertyName);
                    var converter = FieldValueConversion.GetConverter(formField.DataType);

                    rowField.Data = converter.Serialize(formField, new ConversionContext {
                        Cell       = rowField,
                        Field      = rowField.Field,
                        Module     = _dbModule,
                        Repository = ModRepository
                    });
                }
            }

            ModRepository.Save();
        }
Esempio n. 3
0
        private ActionResult ViewModule(Module _module, int?id, bool creating = false)
        {
            if (id != null &&
                _module.Rows.FirstOrDefault(row => row.ID == id) == null)
            {
                TempData["Message"] = "Registro não encontrado.";
                return(this.RedirectToAction("List"));
            }

            DynamicModuleViewModel modelRow = new DynamicModuleViewModel()
            {
                ID          = id ?? -1,
                ModuleName  = _module.ModuleName,
                DisplayName = _module.DisplayName
            };

            foreach (Field field in _module.Fields)
            {
                Cell rowField = null;

                if (!creating)
                {
                    rowField = (id != null)
                                                ? field.Cells.FirstOrDefault(rf => rf.Row.ID == id)
                                                : field.Cells.FirstOrDefault();
                }

                var fieldDataTpe = Type.GetType(field.FieldDataType.Name);
                var converter    = FieldValueConversion.GetConverter(fieldDataTpe);
                var modelField   = new DynamicModuleField()
                {
                    DisplayName  = field.DisplayName,
                    PropertyName = field.FieldName,
                    IsReadOnly   = field.IsReadOnly,
                    IsRequired   = field.IsRequired,
                    DataType     = fieldDataTpe
                };

                modelField.Data = converter.Deserialize(
                    rowField,
                    new ConversionContext {
                    Field      = field,
                    Module     = _module,
                    Repository = ModRepository
                });

                modelRow.Fields.Add(modelField);
            }

            return(View(modelRow));
        }
Esempio n. 4
0
        public ActionResult List(object module)
        {
            var modToList = module as Module;

            ViewData["ModuleName"]  = modToList.ModuleName;
            ViewData["DisplayName"] = modToList.DisplayName;
            ViewData["Fields"]      = modToList.Fields.Where(f => f.ShowInListMode).Select(f => f.DisplayName);

            List <DynamicModuleViewModel> viewModel = new List <DynamicModuleViewModel>();

            foreach (Row _row in modToList.Rows.OrderBy(r => r.SortIndex))
            {
                DynamicModuleViewModel modelRow = new DynamicModuleViewModel()
                {
                    ID = _row.ID
                };

                foreach (Field field in modToList.Fields.Where(f => f.ShowInListMode))
                {
                    var rowField     = field.Cells.FirstOrDefault(rf => rf.Row.ID == _row.ID);
                    var fieldDataTpe = Type.GetType(field.FieldDataType.Name);
                    var converter    = FieldValueConversion.GetConverter(fieldDataTpe);

                    var modelField = new DynamicModuleField()
                    {
                        DisplayName  = field.DisplayName,
                        PropertyName = field.FieldName,
                        IsReadOnly   = field.IsReadOnly,
                        IsRequired   = field.IsRequired,
                        DataType     = fieldDataTpe
                    };

                    modelField.Data = converter.Deserialize(
                        rowField,
                        new ConversionContext {
                        Field      = field,
                        Module     = modToList,
                        Repository = ModRepository
                    });

                    modelRow.Fields.Add(modelField);
                }

                viewModel.Add(modelRow);
            }

            return(View(viewModel));
        }
Esempio n. 5
0
        public ActionResult module(int moduleid, DynamicModuleViewModel _entryToCreate)
        {
            var doverApi     = new ModuleApi(ModRepository);
            var module       = ModRepository.GetModuleById(moduleid, m => m.Fields);
            var result       = String.Empty;
            var filteredList = new DynamicModuleFieldList();

            filteredList.AddRange(_entryToCreate.Fields.Where(f => CheckFieldExistency(f)));
            _entryToCreate.Fields = filteredList;

            try {
                doverApi.CreateModule(module, _entryToCreate);
                result = "<result>Success</result>";
            }
            catch (CreateModuleFailedException) {
                result = "<result>Failure</result>";
            }

            return(Content(result, "text/xml", Encoding.UTF8));
        }
Esempio n. 6
0
        public ActionResult module(int moduleid, int?id, DynamicModuleViewModel _entryToEdit)
        {
            var result = String.Empty;

            try {
                var doverApi     = new ModuleApi(ModRepository);
                var module       = ModRepository.GetModuleById(moduleid, m => m.Rows.Include <Row, Cell>(r => r.Cells), m => m.Fields);
                var filteredList = new DynamicModuleFieldList();

                filteredList.AddRange(_entryToEdit.Fields.Where(f => CheckFieldExistency(f)));
                _entryToEdit.Fields = filteredList;

                doverApi.SetModuleData(module, id, _entryToEdit, true);
                result = "<result>Success</result>";
            }
            catch (Exception e) {
                result = "<result>Failure</result>";
            }

            return(Content(result, "text/xml", Encoding.UTF8));
        }
Esempio n. 7
0
        public ActionResult Edit(object module, int?id, DynamicModuleViewModel _entryToEdit)
        {
            if (!ModelState.IsValid)
            {
                return(View(_entryToEdit));
            }

            var moduleToEdit = module as Module;

            try {
                var moduleApi = new ModuleApi(ModRepository);
                moduleApi.SetModuleData(moduleToEdit, id, _entryToEdit);
            }
            catch (ModuleRowNotFoundException e) {
                TempData["Message"] = e.Message;
                return(this.RedirectToAction("List"));
            }

            TempData["Message"] = "Seus dados foram salvos.";

            return((moduleToEdit.ModuleType == (int)ModuleType.Dynamic)
                ? RedirectToAction("List")
                : RedirectToAction("Index", "Home"));
        }
Esempio n. 8
0
        public ActionResult Create(object module, DynamicModuleViewModel _entryToCreate)
        {
            if (!ModelState.IsValid)
            {
                return(View(_entryToCreate));
            }

            var newModule = module as Module;

            try {
                var moduleApi = new ModuleApi(ModRepository);
                moduleApi.CreateModule(newModule, _entryToCreate);
            }
            catch (CreateModuleFailedException e) {
                TempData["Message"] = e.Message;
                return(View(_entryToCreate));
            }

            TempData["Message"] = "Registro criado com sucesso.";

            return((newModule.ModuleType == (int)ModuleType.Dynamic)
                ? RedirectToAction("List")
                : RedirectToAction("Index", "Home"));
        }
Esempio n. 9
0
        /// <summary>
        /// Returns module records based on the provided module module
        /// and filtering parameters.
        /// </summary>
        /// <param name="module">The module to be queried</param>
        /// <param name="id">Optional row id for filtering</param>
        /// <returns>The matching rows in the specified module</returns>
        public DynamicModuleApiResult GetModuleData(IModule module, int?id, NameValueCollection _filters)
        {
            if (module == null)
            {
                return(null);
            }

            var moduleData = new DynamicModuleApiResult()
            {
                ModuleName = module.ModuleName,
                ModuleType = module.ModuleType,
                ModuleId   = module.Id
            };

            var rows         = module.Rows;
            var filteredRows = (id != null) ? rows.Where(r => r.ID == id) : rows.AsEnumerable();

            // Search filter
            string reqFilter = _filters["_Filter"];

            if (!String.IsNullOrWhiteSpace(reqFilter))
            {
                filteredRows = filteredRows.Where(r => r.Cells.Any(rf => rf.Data != null && rf.Data.IndexOf(reqFilter, StringComparison.CurrentCultureIgnoreCase) != -1));
            }

            // Random entry filter
            string randomEntry = _filters["_Random"];
            int    randomTotal;

            if (!String.IsNullOrWhiteSpace(randomEntry) && Int32.TryParse(randomEntry, out randomTotal))
            {
                filteredRows = filteredRows.OrderBy(r => Guid.NewGuid()).Take(randomTotal);
            }

            foreach (var key in _filters.AllKeys.Except(new string[] { "_Filter", "_Random" }))
            {
                var fieldName = key;
                var value     = _filters[fieldName];
                filteredRows = filteredRows.Where(r => r.Cells.Any(rf => rf.Field.FieldName == fieldName && rf.Data != null && rf.Data.IndexOf(value, StringComparison.CurrentCultureIgnoreCase) != -1));
            }

            foreach (var row in filteredRows.OrderBy(r => r.SortIndex))
            {
                DynamicModuleViewModel modelRow = new DynamicModuleViewModel()
                {
                    ID = row.ID
                };

                foreach (Cell rowField in row.Cells)
                {
                    var field          = rowField.Field;
                    var sFieldDataType = field.FieldDataType.Name;
                    var fieldDataTpe   = Type.GetType(sFieldDataType);

                    var modelField = new DynamicModuleField()
                    {
                        DisplayName  = field.DisplayName,
                        PropertyName = field.FieldName,
                        IsReadOnly   = field.IsReadOnly,
                        IsRequired   = field.IsRequired,
                        DataType     = fieldDataTpe
                    };

                    var converter = FieldValueConversion.GetConverter(fieldDataTpe);
                    modelField.Data = converter.Deserialize(
                        rowField,
                        new ConversionContext {
                        Field      = field,
                        Module     = module,
                        Repository = ModRepository
                    });

                    modelRow.Fields.Add(modelField);
                }

                moduleData.Rows.Add(modelRow);
            }

            return(moduleData);
        }
Esempio n. 10
0
 public void SetPartialModuleData(IModule _dbModule, int?id, DynamicModuleViewModel _moduleData)
 {
     SetModuleData(_dbModule, id, _moduleData, true);
 }
Esempio n. 11
0
        public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            var routeValues = controllerContext.RouteData.Values;
            var id = -1;
            var moduleId = -1;

            var account = routeValues["account"] as string;
            var moduleName = routeValues["modulename"] as string;

            Int32.TryParse(routeValues["moduleid"] as string, out moduleId);
            Int32.TryParse(routeValues["id"] as string, out id);

            var module = ModRepository.GetModuleById(moduleId,
                m => m.Account,
                m => m.Fields.Include<Field, FieldDataType>(f => f.FieldDataType),
                m => m.Rows.Include<Row, Cell>(r => r.Cells));

            if (module == null) {
                bindingContext.ModelState.AddModelError("_FORM", "Módulo não encontrado");
                return null;
            }

            if (module.Account == null ||
                module.Account.SubdomainName != account) {
                bindingContext.ModelState.AddModelError("_FORM", "Módulo não encontrado");
                return null;
            }

            // if we have a module name, use it for filtering
            if (!String.IsNullOrWhiteSpace(moduleName) &&
                module.ModuleName != moduleName) {
                bindingContext.ModelState.AddModelError("_FORM", "Módulo não encontrado");
                return null;
            }

            var theModel = new DynamicModuleViewModel() {
                ID = id,
                ModuleName = module.ModuleName,
                DisplayName = module.DisplayName
            };

            // Switch back to the original data annotations model metadata implementation
            ModelMetadataProviders.Current = new DataAnnotationsModelMetadataProvider();

            foreach (Field field in module.Fields) {
                field.FieldDataTypeReference.Load();
                string sFieldDataType = field.FieldDataType.Name;
                Type fieldDataTpe = Type.GetType(sFieldDataType);

                var modelField = new DynamicModuleField() {
                    DisplayName = field.DisplayName,
                    PropertyName = field.FieldName,
                    IsReadOnly = field.IsReadOnly,
                    IsRequired = field.IsRequired,
                    DataType = fieldDataTpe
                };

                IModelBinder fieldBinder = ModelBinders.Binders.GetBinder(fieldDataTpe);

                var fieldBindingContext = new ModelBindingContext {
                    ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(null, fieldDataTpe),
                    ModelName = modelField.PropertyName,
                    ModelState = bindingContext.ModelState,
                    ValueProvider = bindingContext.ValueProvider,
                    PropertyFilter = bindingContext.PropertyFilter
                };

                modelField.Data = fieldBinder.BindModel(controllerContext, fieldBindingContext);

                if (modelField.IsRequired &&
                    (modelField.Data == null ||
                    String.IsNullOrEmpty(modelField.Data.ToString()))) {
                    bindingContext.ModelState.AddModelError(modelField.PropertyName, "O campo " + modelField.DisplayName + " é obrigatório");
                }

                theModel.Fields.Add(modelField);
            }

            return theModel;
        }
Esempio n. 12
0
        public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            var routeValues = controllerContext.RouteData.Values;
            var id          = -1;
            var moduleId    = -1;

            var account    = routeValues["account"] as string;
            var moduleName = routeValues["modulename"] as string;

            Int32.TryParse(routeValues["moduleid"] as string, out moduleId);
            Int32.TryParse(routeValues["id"] as string, out id);

            var module = ModRepository.GetModuleById(moduleId,
                                                     m => m.Account,
                                                     m => m.Fields.Include <Field, FieldDataType>(f => f.FieldDataType),
                                                     m => m.Rows.Include <Row, Cell>(r => r.Cells));

            if (module == null)
            {
                bindingContext.ModelState.AddModelError("_FORM", "Módulo não encontrado");
                return(null);
            }

            if (module.Account == null ||
                module.Account.SubdomainName != account)
            {
                bindingContext.ModelState.AddModelError("_FORM", "Módulo não encontrado");
                return(null);
            }

            // if we have a module name, use it for filtering
            if (!String.IsNullOrWhiteSpace(moduleName) &&
                module.ModuleName != moduleName)
            {
                bindingContext.ModelState.AddModelError("_FORM", "Módulo não encontrado");
                return(null);
            }

            var theModel = new DynamicModuleViewModel()
            {
                ID          = id,
                ModuleName  = module.ModuleName,
                DisplayName = module.DisplayName
            };

            // Switch back to the original data annotations model metadata implementation
            ModelMetadataProviders.Current = new DataAnnotationsModelMetadataProvider();

            foreach (Field field in module.Fields)
            {
                field.FieldDataTypeReference.Load();
                string sFieldDataType = field.FieldDataType.Name;
                Type   fieldDataTpe   = Type.GetType(sFieldDataType);

                var modelField = new DynamicModuleField()
                {
                    DisplayName  = field.DisplayName,
                    PropertyName = field.FieldName,
                    IsReadOnly   = field.IsReadOnly,
                    IsRequired   = field.IsRequired,
                    DataType     = fieldDataTpe
                };

                IModelBinder fieldBinder = ModelBinders.Binders.GetBinder(fieldDataTpe);

                var fieldBindingContext = new ModelBindingContext {
                    ModelMetadata  = ModelMetadataProviders.Current.GetMetadataForType(null, fieldDataTpe),
                    ModelName      = modelField.PropertyName,
                    ModelState     = bindingContext.ModelState,
                    ValueProvider  = bindingContext.ValueProvider,
                    PropertyFilter = bindingContext.PropertyFilter
                };

                modelField.Data = fieldBinder.BindModel(controllerContext, fieldBindingContext);

                if (modelField.IsRequired &&
                    (modelField.Data == null ||
                     String.IsNullOrEmpty(modelField.Data.ToString())))
                {
                    bindingContext.ModelState.AddModelError(modelField.PropertyName, "O campo " + modelField.DisplayName + " é obrigatório");
                }

                theModel.Fields.Add(modelField);
            }

            return(theModel);
        }
        public IActionResult Edit(DynamicModuleViewModel <T> configuration)
        {
            var dynamicModuleModelRequest = m_dynamicModuleManager.GetById(configuration.Id);

            if (dynamicModuleModelRequest.HasError)
            {
                return(NotFound(configuration.Id));
            }

            var dynamicModuleModel = dynamicModuleModelRequest.Result;

            var moduleInfo = m_dynamicModuleProvider.GetContextByNameOrGuid(
                dynamicModuleModel.Name,
                dynamicModuleModel.ModuleGuid
                );

            if (moduleInfo == null)
            {
                return(NotFound(configuration.Id));
            }

            var configurationDto = moduleInfo.ModuleConfiguration ?? moduleInfo.EmptyModuleConfiguration;

            configuration.CustomConfigurationViewModel.Name = configuration.Name;

            moduleInfo.ModuleConfigurationManager.HydrateModuleConfiguration(
                configurationDto,
                configuration.CustomConfigurationViewModel
                );

            m_dynamicModuleManager.UpdateConfiguration(
                configuration.Id,
                configurationDto,
                moduleInfo.LibModuleInfo.Version
                );

            var viewModelWithMainLogo = configuration.CustomConfigurationViewModel as IModuleMainLogoViewModel;

            if (viewModelWithMainLogo?.MainLogo != null)
            {
                if (ContentType.ImageContentTypes.Contains(viewModelWithMainLogo.MainLogo.ContentType))
                {
                    var dynamicModuleBlobRequest = m_dynamicModuleManager.GetDynamicModuleBlob(
                        configuration.Id,
                        DynamicModuleBlobEnum.MainLogo
                        );

                    var mainLogoStream        = viewModelWithMainLogo.MainLogo.OpenReadStream();
                    var mainLogoFileExtension = Path.GetExtension(viewModelWithMainLogo.MainLogo.FileName).Substring(1).ToLower();

                    var dynamicModuleBlob = dynamicModuleBlobRequest.Result;

                    if (dynamicModuleBlobRequest.Succeeded && dynamicModuleBlob != null)
                    {
                        m_dynamicModuleManager.UpdateDynamicModuleBlob(
                            dynamicModuleBlob.Id,
                            mainLogoStream,
                            mainLogoFileExtension
                            );
                    }
                    else
                    {
                        m_dynamicModuleManager.CreateDynamicModuleBlob(
                            configuration.Id,
                            DynamicModuleBlobEnum.MainLogo,
                            mainLogoStream,
                            mainLogoFileExtension
                            );
                    }
                }
            }

            return(RedirectToAction("Edit", "DynamicModule", new
            {
                id = configuration.Id
            }));
        }