コード例 #1
0
 private void SaveDataFields(DomainClasses.Entities.FormScheme formScheme, FormSubmitRequest request,
                             DomainClasses.Entities.Form form)
 {
     foreach (string prop in request.Form)
     {
         var fd = formScheme.FieldDefenitions.FirstOrDefault(x => x.Handle == prop);
         if (fd == null)
         {
             continue;
         }
         form.Fields.Add(new Field()
         {
             FieldDefenitionId = fd.Id,
             RawValue          =
                 _fieldFactoryPrvider.GetFieldFactory(fd.Type).CreateNew(fd.Title, request.Form[prop], fd.MetaData).Value ?? fd.DefaultValue,
         });
     }
 }
コード例 #2
0
        private void SaveFileFields(DomainClasses.Entities.FormScheme formScheme, FormSubmitRequest request,
                                    DomainClasses.Entities.Form form)
        {
            foreach (string prop in request.Files)
            {
                var file = request.Files[prop];
                var fd   = formScheme.FieldDefenitions.FirstOrDefault(x => x.Handle == prop);
                if (fd == null)
                {
                    continue;
                }
                var fileSaveRes = _fileManager.Save(file,
                                                    _formsBaseFolderPath + $"/{formScheme.Handle}/" + file.FileName);
                var data = new FileFieldDataWrapper(file, fileSaveRes.SavedFilePath, fileSaveRes.SavedFileName);

                form.Fields.Add(new Field()
                {
                    FieldDefenitionId = fd.Id,
                    RawValue          = _fieldFactoryPrvider.GetFieldFactory(fd.Type).CreateNew(fd.Title, data, fd.MetaData).Value ?? fd.DefaultValue,
                });
            }
        }
コード例 #3
0
ファイル: WebSecurityHelpers.cs プロジェクト: pir8aye/FRA-CMS
        public static void UpdateOrCreateSubmitTime(string ip)
        {
            using (CmsContext db = new CmsContext())
            {
                var now  = DateTime.Now;
                var last = db.Set <FormSubmitRequest>().SingleOrDefault(e => e.ClientIP == ip);
                if (last != null)
                {
                    last.LastSubmit = now;
                }
                else
                {
                    last = new FormSubmitRequest
                    {
                        ClientIP   = ip,
                        LastSubmit = now
                    };

                    db.Set <FormSubmitRequest>().Add(last);
                    db.SaveChanges();
                }
            }
        }
コード例 #4
0
        public async Task <FormSubmitResponse> SubmitNewForm(FormSubmitRequest request)
        {
            var formScheme =
                await _formSchemeDataService
                .Query
                .Include(x => x.FieldDefenitions)
                .FirstAsync(x => x.Handle == request.FormSchemeHandle);

            if (!HasRequestRequiredFileds(formScheme, request) || !AreAllFieldsValid(formScheme, request))
            {
                return(new FormSubmitResponse()
                {
                    Access = ResponseAccess.BadRequest,
                    Message = "mising or invalid filed value Use CmsFormValidationFilterAttribute To See Details"
                });
            }
            await HandleRequest(formScheme, request);

            return(new FormSubmitResponse()
            {
                Access =
                    ResponseAccess.Granted
            });
        }
コード例 #5
0
        public async Task <IActionResult> Submit([FromBody] FormSubmitRequest request, CancellationToken cancellationToken)
        {
            var clone = JsonConvert.DeserializeObject <FormSubmitRequest>(JsonConvert.SerializeObject(request));

            if (clone.QualificationType != "other")
            {
                clone.QualificationTypeText = string.Empty;
            }

            if (clone.TeacherSpeech == false)
            {
                clone.TeacherSpeechText = string.Empty;
            }

            if (clone.TeacherWriting == false)
            {
                clone.TeacherWritingText = string.Empty;
            }

            if (clone.TeacherScreen == false)
            {
                clone.TeacherScreenText = string.Empty;
            }

            if (clone.StudentNotes == false)
            {
                clone.StudentNotesText = string.Empty;
            }

            if (clone.StudentQuestions == false)
            {
                clone.StudentQuestionsText = string.Empty;
            }

            if (clone.StudyProcess == false)
            {
                clone.StudyProcessText = string.Empty;
            }

            if (clone.LabParticipation == false)
            {
                clone.LabParticipationText = string.Empty;
            }

            if (clone.PcUsage == false)
            {
                clone.PcUsageText = string.Empty;
            }

            if (clone.Keyboard == false)
            {
                clone.KeyboardText = string.Empty;
            }

            if (clone.Mouse == false)
            {
                clone.MouseText = string.Empty;
            }

            if (clone.Screen == false)
            {
                clone.ScreenText = string.Empty;
            }

            if (clone.Speakers == false)
            {
                clone.SpeakersText = string.Empty;
            }

            var validationResult = await new FormSubmitRequestValidator(this._context).ValidateAsync(clone, cancellationToken);

            if (!validationResult.IsValid)
            {
                throw new ValidationException(validationResult.Errors);
            }

            this._context.FormSubmissions.Add(new FormSubmission
            {
                Data = JsonConvert.SerializeObject(clone)
            });

            await using (var transaction = await this._context.Database.BeginTransactionAsync(IsolationLevel.ReadCommitted, cancellationToken))
            {
                await InsertOrUpdateStudent(this._context, this._postalCodeProviderService, clone, cancellationToken);

                await this._context.SaveChangesAsync(cancellationToken);

                await transaction.CommitAsync(cancellationToken);
            }

            return(this.Ok(true));
        }
コード例 #6
0
        private static async Task InsertOrUpdateStudent(EducationContext _context, IPostalCodeProviderService service, FormSubmitRequest request, CancellationToken cancellationToken)
        {
            var country = await _context.Countries.Where(x => x.Code == "GR").SingleAsync(cancellationToken);

            var student = await _context.Students
                          .Where(x => x.RegistrationId == request.StudentId)
                          .FirstOrDefaultAsync(cancellationToken);

            if (student == null)
            {
                _context.Students.Add(student = new Student
                {
                    RegistrationId = request.StudentId
                });
            }

            var postalCode = await service.GetPostalCodeAsync(request.PostalCode, cancellationToken);

            student.Gender       = Enum.TryParse(request.Gender, out Gender _gender) ? _gender : Gender.Unspecified;
            student.DepartmentId = await _context.Departments.Where(x => x.Code == request.Department).Select(x => x.Id).FirstOrDefaultAsync(cancellationToken);

            student.Name       = request.Name;
            student.Surname    = request.Surname;
            student.Email      = request.Email;
            student.Mobile     = request.Mobile;
            student.Phone      = request.Phone;
            student.PostalCode = postalCode.Code;
            student.Address    = request.Address;
            student.City       = postalCode.Area;
            student.Prefecture = postalCode.Prefecture;
            student.CountryId  = country.Id;
        }
コード例 #7
0
        private async Task HandleRequest(DomainClasses.Entities.FormScheme formScheme, FormSubmitRequest request)
        {
            var form = new DomainClasses.Entities.Form()
            {
                Fields = new List <Field>(), FormSchemeId = formScheme.Id
            };

            SaveDataFields(formScheme, request, form);
            SaveFileFields(formScheme, request, form);
            await BaseBeforeAddAsync(form, request.RequestOwner);

            await _formDataSrv.AddAsync(form);

            await BaseAfterAddAsync(form, request.RequestOwner);
        }
コード例 #8
0
        private bool HasRequestRequiredFileds(DomainClasses.Entities.FormScheme formScheme, FormSubmitRequest request)
        {
            var requiredProps = formScheme.FieldDefenitions.Where(x => x.IsRequired).Select(x => x.Handle);
            var requestProps  = request.Form.AllKeys.ToList();

            requestProps.AddRange(request.Files.AllKeys);
            var @is = true;

            foreach (var prop in requiredProps)
            {
                if (!requestProps.Contains(prop))
                {
                    @is = false;
                }
            }
            return(@is);
        }
コード例 #9
0
        private bool AreAllFormFieldsValid(DomainClasses.Entities.FormScheme formScheme, FormSubmitRequest request)
        {
            bool @is = true;

            foreach (string prop in request.Form)
            {
                var fd = formScheme.FieldDefenitions.FirstOrDefault(x => x.Handle == prop);
                if (fd == null)
                {
                    continue;
                }
                if (!_fieldFactoryPrvider.GetFieldFactory(fd.Type).IsValidForField(request.Form[prop], fd.MetaData))
                {
                    @is = false;
                }
            }
            return(@is);
        }
コード例 #10
0
 private bool AreAllFieldsValid(DomainClasses.Entities.FormScheme formScheme, FormSubmitRequest request)
 {
     return(AreAllFormFieldsValid(formScheme, request) && AreAllFileFieldsValid(formScheme, request));
 }