protected AuditSaveRequest GetAuditSaveRequest(ISaveRequestHandler handler) { var auditFields = new HashSet <Field>(); var flag = handler.IsCreate ? FieldFlags.Insertable : FieldFlags.Updatable; foreach (var field in handler.Row.GetFields()) { if (field.Flags.HasFlag(flag)) { auditFields.Add(field); } } Field[] array = new Field[auditFields.Count]; auditFields.CopyTo(array); var auditRequest = new AuditSaveRequest(handler.Row.Table, (IIdRow)handler.Old, (IIdRow)handler.Row, array); var parentIdRow = handler.Row as IParentIdRow; if (parentIdRow != null) { var parentIdField = (Field)parentIdRow.ParentIdField; if (!parentIdField.ForeignTable.IsTrimmedEmpty()) { auditRequest.ParentTypeId = parentIdField.ForeignTable; auditRequest.OldParentId = handler.IsCreate ? null : parentIdRow.ParentIdField[handler.Old]; auditRequest.NewParentId = parentIdRow.ParentIdField[handler.Row]; } } return(auditRequest); }
public override void OnBeforeSave(ISaveRequestHandler handler) { var field = (StringField)(handler.Row.FindField(this.filesField) ?? handler.Row.FindFieldByPropertyName(filesField)); if (!handler.Row.IsAssigned(field)) { return; } var oldFilesJSON = (handler.IsCreate ? null : field[handler.Old]).TrimToNull(); var newFilesJSON = field[handler.Row] = field[handler.Row].TrimToNull(); if (oldFilesJSON.IsTrimmedSame(newFilesJSON)) { field[handler.Row] = oldFilesJSON; return; } var oldFileList = ParseAndValidate(oldFilesJSON, "oldFiles"); var newFileList = ParseAndValidate(newFilesJSON, "newFiles"); var filesToDelete = new FilesToDelete(); UploadHelper.RegisterFilesToDelete(handler.UnitOfWork, filesToDelete); handler.StateBag[this.GetType().FullName + "_FilesToDelete"] = filesToDelete; foreach (var file in oldFileList) { var filename = file.Filename.Trim(); if (newFileList.Any(x => String.Compare(x.Filename.Trim(), filename, StringComparison.OrdinalIgnoreCase) == 0)) { continue; } var actualOldFile = ((subFolder != null && !storeSubFolderInDB) ? (subFolder + "/") : "") + filename; filesToDelete.RegisterOldFile(actualOldFile); if (copyFilesToHistory) { var oldFilePath = UploadHelper.ToPath(actualOldFile); string date = DateTime.UtcNow.ToString("yyyyMM", Invariants.DateTimeFormat); string historyFile = "history/" + date + "/" + Path.GetFileName(oldFilePath); if (File.Exists(UploadHelper.DbFilePath(oldFilePath))) { UploadHelper.CopyFileAndRelated(UploadHelper.DbFilePath(oldFilePath), UploadHelper.DbFilePath(historyFile), overwrite: true); } } } if (newFileList.IsEmptyOrNull()) { field[handler.Row] = null; return; } if (handler.IsUpdate) { field[handler.Row] = CopyTemporaryFiles(handler, oldFileList, newFileList, filesToDelete); } }
private string CopyTemporaryFiles(ISaveRequestHandler handler, UploadedFile[] oldFileList, UploadedFile[] newFileList, FilesToDelete filesToDelete) { foreach (var file in newFileList) { var filename = file.Filename.Trim(); if (oldFileList.Any(x => String.Compare(x.Filename.Trim(), filename, StringComparison.OrdinalIgnoreCase) == 0)) { continue; } if (!filename.ToLowerInvariant().StartsWith("temporary/")) { throw new InvalidOperationException("For security reasons, only temporary files can be used in uploads!"); } var uploadHelper = new UploadHelper((subFolder.IsEmptyOrNull() ? "" : (subFolder + "/")) + fileNameFormat); var idField = (Field)(((IIdRow)handler.Row).IdField); var copyResult = uploadHelper.CopyTemporaryFile(filename, idField.AsObject(handler.Row), filesToDelete); if (subFolder != null && !this.storeSubFolderInDB) { copyResult.DbFileName = copyResult.DbFileName.Substring(subFolder.Length + 1); } file.Filename = copyResult.DbFileName; } return(JSON.Stringify(newFileList)); }
public void OnSetInternalFields(ISaveRequestHandler handler) { if (handler.IsCreate) { fldIdComercio[handler.Row] = ((UserDefinition)Authorization.UserDefinition).Id_Comercio; } }
public void OnBeforeSave(ISaveRequestHandler handler) { if (Authorization.HasPermission(PermissionKeys.Tenants)) { return; } if (handler.Row is PaymentsRow || handler.Row is SubscriptionsRow || handler.Row is PaymentsDetailsRow) { return; } var user = (UserDefinition)Authorization.UserDefinition; var tenantFld = TenantRow.Fields; var connection = SqlConnections.NewFor <TenantRow>(); var tenant = connection.First <TenantRow>(tenantFld.TenantId == user.TenantId); if (tenant?.SubscriptionRequired != null && tenant.SubscriptionRequired.Value && UserSubscriptionHelper.GetTenantPaidDays(user.TenantId) < DateTime.Now) { throw new ValidationException(Texts.Site.Subscriptions.Expired.SubscriptionInfoBoxHeader); } }
public override void OnAudit(ISaveRequestHandler handler) { if (handler.Row == null) return; var auditRequest = GetAuditSaveRequest(handler); if (connectionKey == null) connectionKey = RowRegistry.GetConnectionKey(handler.Row); if (handler.IsCreate) { if (auditRequest != null) AuditLogService.AuditInsert(handler.UnitOfWork.Connection, connectionKey, auditRequest); return; } Row audit = null; if (auditRequest != null) audit = AuditLogService.PrepareAuditUpdate(connectionKey, auditRequest); if (audit != null) handler.UnitOfWork.Connection.Insert(audit); }
protected AuditSaveRequest GetAuditSaveRequest(ISaveRequestHandler handler) { var auditFields = new HashSet<Field>(); var flag = handler.IsCreate ? FieldFlags.Insertable : FieldFlags.Updatable; foreach (var field in handler.Row.GetFields()) if (field.Flags.HasFlag(flag)) auditFields.Add(field); Field[] array = new Field[auditFields.Count]; auditFields.CopyTo(array); var auditRequest = new AuditSaveRequest(handler.Row.Table, (IIdRow)handler.Old, (IIdRow)handler.Row, array); var parentIdRow = handler.Row as IParentIdRow; if (parentIdRow != null) { var parentIdField = (Field)parentIdRow.ParentIdField; if (!parentIdField.ForeignTable.IsTrimmedEmpty()) { auditRequest.ParentTypeId = parentIdField.ForeignTable; auditRequest.OldParentId = handler.IsCreate ? null : parentIdRow.ParentIdField[handler.Old]; auditRequest.NewParentId = parentIdRow.ParentIdField[handler.Row]; } } return auditRequest; }
internal static void ValidateUniqueConstraint(ISaveRequestHandler handler, IEnumerable<Field> fields, string errorMessage = null, BaseCriteria groupCriteria = null) { if (handler.IsUpdate && !fields.Any(x => x.IndexCompare(handler.Old, handler.Row) != 0)) return; var criteria = groupCriteria ?? Criteria.Empty; foreach (var field in fields) if (field.IsNull(handler.Row)) criteria &= field.IsNull(); else criteria &= field == new ValueCriteria(field.AsObject(handler.Row)); var idField = (Field)((IIdRow)handler.Row).IdField; if (handler.IsUpdate) criteria &= (Field)idField != new ValueCriteria(idField.AsObject(handler.Old)); var row = handler.Row.CreateNew(); if (new SqlQuery() .Dialect(handler.Connection.GetDialect()) .From(row) .Select("1") .Where(criteria) .Exists(handler.UnitOfWork.Connection)) { throw new ValidationError("UniqueViolation", String.Join(", ", fields.Select(x => x.PropertyName ?? x.Name)), String.Format(!string.IsNullOrEmpty(errorMessage) ? (LocalText.TryGet(errorMessage) ?? errorMessage) : LocalText.Get("Validation.UniqueConstraint"), String.Join(", ", fields.Select(x => x.Title)))); } }
public void OnSetInternalFields(ISaveRequestHandler handler) { if (handler.IsCreate) { fldTenantId[handler.Row] = ((UserDefinition)Authorization.UserDefinition).TenantId; } }
public override void OnValidateRequest(ISaveRequestHandler handler) { if (attrList == null) { return; } if (attrFields == null) { attrFields = attrList.Select(attr => { return(attr.Fields.Select(x => { var field = handler.Row.FindFieldByPropertyName(x) ?? handler.Row.FindField(x); if (ReferenceEquals(null, field)) { throw new InvalidOperationException(String.Format( "Can't find field '{0}' of unique constraint in row type '{1}'", x, handler.Row.GetType().FullName)); } return field; })); }).ToArray(); } for (var i = 0; i < attrList.Length; i++) { var attr = attrList[i]; var fields = attrFields[i]; UniqueFieldSaveBehavior.ValidateUniqueConstraint(handler, fields, attr.ErrorMessage, Criteria.Empty); } }
private string CopyTemporaryFiles(ISaveRequestHandler handler, UploadedFile[] oldFileList, UploadedFile[] newFileList, FilesToDelete filesToDelete) { foreach (var file in newFileList) { var filename = file.Filename.Trim(); if (oldFileList.Any(x => String.Compare(x.Filename.Trim(), filename, StringComparison.OrdinalIgnoreCase) == 0)) { continue; } if (!filename.ToLowerInvariant().StartsWith("temporary/")) { throw new InvalidOperationException("For security reasons, only temporary files can be used in uploads!"); } ImageUploadBehavior.CheckUploadedImageAndCreateThumbs(attr, ref filename); var idField = (Field)(((IIdRow)handler.Row).IdField); var copyResult = uploadHelper.CopyTemporaryFile(filename, idField.AsObject(handler.Row), filesToDelete, s => ImageUploadBehavior.ProcessReplaceFields(s, this.replaceFields, handler)); if (!attr.SubFolder.IsEmptyOrNull()) { copyResult.DbFileName = copyResult.DbFileName.Substring(attr.SubFolder.Length + 1); } file.Filename = copyResult.DbFileName; } return(JSON.Stringify(newFileList)); }
public override void OnAfterSave(ISaveRequestHandler handler) { if (handler.IsUpdate) { return; } var field = (StringField)Target; if (!handler.Row.IsAssigned(field)) { return; } var newFilesJSON = field[handler.Row] = field[handler.Row].TrimToNull(); var newFileList = ParseAndValidate(newFilesJSON, "newFiles"); if (newFileList.IsEmptyOrNull()) { return; } var filesToDelete = handler.StateBag[this.GetType().FullName + "_" + Target.Name + "_FilesToDelete"] as FilesToDelete; var copyResult = CopyTemporaryFiles(handler, new UploadedFile[0], newFileList, filesToDelete); var idField = (Field)(((IIdRow)handler.Row).IdField); new SqlUpdate(handler.UnitOfWork.Connection.GetDialect(), handler.Row.Table, string.Empty) .Set(field, copyResult) .Where(idField == new ValueCriteria(idField.AsObject(handler.Row))) .Execute(handler.UnitOfWork.Connection); }
public override void OnAfterSave(ISaveRequestHandler handler) { var newList = Target.AsObject(handler.Row) as List<NoteRow>; if (newList == null) return; var idField = (handler.Row as IIdRow).IdField; var entityId = idField[handler.Row].Value; if (handler.IsCreate) { foreach (var note in newList) SaveNote(handler.UnitOfWork, note, handler.Row.Table, entityId, null); return; } var fld = NoteRow.Fields; var listRequest = new ListRequest { ColumnSelection = ColumnSelection.List, EqualityFilter = new Dictionary<string, object> { { fld.EntityType.PropertyName, handler.Row.Table }, { fld.EntityId.PropertyName, entityId } } }; var oldList = new NoteRepository().List(handler.Connection, listRequest).Entities; NoteListSave(handler.UnitOfWork, handler.Row.Table, entityId, oldList, newList); }
public override void OnAfterSave(ISaveRequestHandler handler) { if (handler.IsUpdate) { return; } var field = (StringField)(handler.Row.FindField(this.filesField) ?? handler.Row.FindFieldByPropertyName(filesField)); if (!handler.Row.IsAssigned(field)) { return; } var newFilesJSON = field[handler.Row] = field[handler.Row].TrimToNull(); var newFileList = ParseAndValidate(newFilesJSON, "newFiles"); if (newFileList.IsEmptyOrNull()) { return; } var filesToDelete = handler.StateBag[this.GetType().FullName + "_FilesToDelete"] as FilesToDelete; var copyResult = CopyTemporaryFiles(handler, new UploadedFile[0], newFileList, filesToDelete); new SqlUpdate(handler.Row.Table) .Set(field, copyResult) .WhereEqual((Field)((IIdRow)handler.Row).IdField, ((IIdRow)handler.Row).IdField[handler.Row].Value) .Execute(handler.UnitOfWork.Connection); }
public override void OnAfterSave(ISaveRequestHandler handler) { var filename = (StringField)Target; if (handler.IsUpdate) { return; } var newFilename = filename[handler.Row] = filename[handler.Row].TrimToNull(); if (newFilename == null) { return; } var filesToDelete = handler.StateBag[this.GetType().FullName + "_" + Target.Name + "_FilesToDelete"] as FilesToDelete; var copyResult = CopyTemporaryFile(handler, filesToDelete); var idField = (Field)(((IIdRow)handler.Row).IdField); new SqlUpdate(handler.Row.Table) .Set(filename, copyResult.DbFileName) .Where(idField == new ValueCriteria(idField.AsObject(handler.Row))) .Execute(handler.UnitOfWork.Connection); }
public override void OnSetInternalFields(ISaveRequestHandler handler) { var row = handler.Row; var updateLogRow = row as IUpdateLogRow; var insertLogRow = row as IInsertLogRow; Field field; if (updateLogRow != null && (handler.IsUpdate || insertLogRow == null)) { updateLogRow.UpdateDateField[row] = DateTimeField.ToDateTimeKind(DateTime.Now, updateLogRow.UpdateDateField.DateTimeKind); if (updateLogRow.UpdateUserIdField.IsIntegerType) updateLogRow.UpdateUserIdField[row] = Authorization.UserId.TryParseID(); else { field = (Field)updateLogRow.UpdateUserIdField; field.AsObject(row, field.ConvertValue(Authorization.UserId, CultureInfo.InvariantCulture)); } } else if (insertLogRow != null && handler.IsCreate) { insertLogRow.InsertDateField[row] = DateTimeField.ToDateTimeKind(DateTime.Now, insertLogRow.InsertDateField.DateTimeKind); if (insertLogRow.InsertUserIdField.IsIntegerType) insertLogRow.InsertUserIdField[row] = Authorization.UserId.TryParseID(); else { field = (Field)insertLogRow.InsertUserIdField; field.AsObject(row, field.ConvertValue(Authorization.UserId, CultureInfo.InvariantCulture)); } } }
public override void OnValidateRequest(ISaveRequestHandler handler) { if (attrList == null) return; if (attrFields == null) { attrFields = attrList.Select(attr => { return attr.Fields.Select(x => { var field = handler.Row.FindFieldByPropertyName(x) ?? handler.Row.FindField(x); if (ReferenceEquals(null, field)) { throw new InvalidOperationException(String.Format( "Can't find field '{0}' of unique constraint in row type '{1}'", x, handler.Row.GetType().FullName)); } return field; }); }).ToArray(); } for (var i = 0; i < attrList.Length; i++) { var attr = attrList[i]; var fields = attrFields[i]; UniqueFieldSaveBehavior.ValidateUniqueConstraint(handler, fields, attr.ErrorMessage, Criteria.Empty); } }
public override void OnSetInternalFields(ISaveRequestHandler handler) { var row = handler.Row; var updateLogRow = row as IUpdateLogRow; var insertLogRow = row as IInsertLogRow; Field field; if (updateLogRow != null && (handler.IsUpdate || insertLogRow == null)) { updateLogRow.UpdateDateField[row] = DateTimeField.ToDateTimeKind(DateTime.Now, updateLogRow.UpdateDateField.DateTimeKind); if (updateLogRow.UpdateUserIdField.IsIntegerType) { updateLogRow.UpdateUserIdField[row] = Authorization.UserId.TryParseID(); } else { field = (Field)updateLogRow.UpdateUserIdField; field.AsObject(row, field.ConvertValue(Authorization.UserId, CultureInfo.InvariantCulture)); } } else if (insertLogRow != null && handler.IsCreate) { insertLogRow.InsertDateField[row] = DateTimeField.ToDateTimeKind(DateTime.Now, insertLogRow.InsertDateField.DateTimeKind); if (insertLogRow.InsertUserIdField.IsIntegerType) { insertLogRow.InsertUserIdField[row] = Authorization.UserId.TryParseID(); } else { field = (Field)insertLogRow.InsertUserIdField; field.AsObject(row, field.ConvertValue(Authorization.UserId, CultureInfo.InvariantCulture)); } } }
public override void OnAfterSave(ISaveRequestHandler handler) { var newList = Target.AsObject(handler.Row) as IList; if (newList == null) { return; } var masterId = masterKeyField.AsObject(handler.Row); if (handler.IsCreate) { foreach (Row entity in newList) { SaveDetail(handler.UnitOfWork, entity, masterId, null); } return; } var oldList = new List <Row>(); if (!attr.CheckChangesOnUpdate) { var row = rowFactory(); var rowIdField = (row as IIdRow).IdField; // if we're not gonna compare old rows with new ones // no need to call list request handler new SqlQuery() .Dialect(handler.Connection.GetDialect()) .From(row) .Select((Field)rowIdField) .Where( foreignKeyField == new ValueCriteria(masterKeyField.AsSqlValue(handler.Row)) & queryCriteria) .ForEach(handler.Connection, () => { oldList.Add(row.Clone()); }); } else { var listHandler = DefaultHandlerFactory.ListHandlerFor(rowType); var listRequest = DefaultHandlerFactory.ListRequestFor(rowType); listRequest.ColumnSelection = ColumnSelection.List; listRequest.Criteria = foreignKeyCriteria == new ValueCriteria(masterKeyField.AsObject(handler.Row)) & filterCriteria; var entities = listHandler.Process(handler.Connection, listRequest).Entities; foreach (Row entity in entities) { oldList.Add(entity); } } DetailListSave(handler.UnitOfWork, masterId, oldList, newList); }
public override void OnException(ISaveRequestHandler handler, Exception exception) { if (exception is SqlException) { SqlExceptionHelper.HandleSavePrimaryKeyException(exception, handler.Context?.Localizer, handler.Row?.IdField?.GetTitle(handler.Context?.Localizer)); } }
public override void OnBeforeSave(ISaveRequestHandler handler) { foreach (var info in infoList) { handler.StateBag["UpdatableExtensionBehavior_Assignments_" + info.Attr.Alias] = info.Mappings.Where(x => handler.Row.IsAssigned(x.Item1)).ToList(); } }
public override void OnBeforeSave(ISaveRequestHandler handler) { var filesToDelete = new FilesToDelete(); UploadHelper.RegisterFilesToDelete(handler.UnitOfWork, filesToDelete); handler.StateBag[this.GetType().FullName + "_FilesToDelete"] = filesToDelete; var filename = (StringField)(handler.Row.FindField(this.fileNameField) ?? handler.Row.FindFieldByPropertyName(fileNameField)); var oldFilename = handler.IsCreate ? null : filename[handler.Old]; var newFilename = filename[handler.Row] = filename[handler.Row].TrimToNull(); if (oldFilename.IsTrimmedSame(newFilename)) { filename[handler.Row] = oldFilename; return; } if (!oldFilename.IsEmptyOrNull()) { var actualOldFile = ((subFolder != null && !storeSubFolderInDB) ? (subFolder + "/") : "") + oldFilename; filesToDelete.RegisterOldFile(actualOldFile); if (copyFileToHistory) { var oldFilePath = UploadHelper.ToPath(actualOldFile); string date = DateTime.UtcNow.ToString("yyyyMM", Invariants.DateTimeFormat); string historyFile = "history/" + date + "/" + Path.GetFileName(oldFilePath); if (File.Exists(UploadHelper.DbFilePath(oldFilePath))) { UploadHelper.CopyFileAndRelated(UploadHelper.DbFilePath(oldFilePath), UploadHelper.DbFilePath(historyFile), overwrite: true); } } } if (newFilename == null) { if (oldFilename.IsTrimmedEmpty()) { return; } filename[handler.Row] = null; return; } if (!newFilename.ToLowerInvariant().StartsWith("temporary/")) { throw new InvalidOperationException("For security reasons, only temporary files can be used in uploads!"); } if (handler.IsUpdate) { var copyResult = CopyTemporaryFile(handler, filesToDelete); filename[handler.Row] = copyResult.DbFileName; } }
public override void OnBeforeSave(ISaveRequestHandler handler) { var filesToDelete = new FilesToDelete(); UploadHelper.RegisterFilesToDelete(handler.UnitOfWork, filesToDelete); handler.StateBag[this.GetType().FullName + "_" + Target.Name + "_FilesToDelete"] = filesToDelete; var filename = (StringField)(Target); var oldFilename = handler.IsCreate ? null : filename[handler.Old]; var newFilename = filename[handler.Row] = filename[handler.Row].TrimToNull(); if (oldFilename.IsTrimmedSame(newFilename)) { filename[handler.Row] = oldFilename; return; } DeleteOldFile(filesToDelete, oldFilename); if (newFilename == null) { if (oldFilename.IsTrimmedEmpty()) { return; } filename[handler.Row] = null; if (!ReferenceEquals(null, originalNameField)) { originalNameField[handler.Row] = null; } return; } if (!newFilename.ToLowerInvariant().StartsWith("temporary/")) { throw new InvalidOperationException("For security reasons, only temporary files can be used in uploads!"); } if (!ReferenceEquals(null, originalNameField)) { var originalName = File.ReadAllText(Path.ChangeExtension( UploadHelper.DbFilePath(newFilename), ".orig")).TrimToNull(); originalNameField[handler.Row] = originalName; } if (handler.IsUpdate) { var copyResult = CopyTemporaryFile(handler, filesToDelete); filename[handler.Row] = copyResult.DbFileName; } }
public void OnValidateRequest(ISaveRequestHandler handler) { if (handler.IsUpdate) { var user = (UserDefinition)Authorization.UserDefinition; if (fldTenantId[handler.Old] != fldTenantId[handler.Row]) { Authorization.ValidatePermission(PermissionKeys.Tenants); } } }
private CopyTemporaryFileResult CopyTemporaryFile(ISaveRequestHandler handler, FilesToDelete filesToDelete) { var filename = (StringField)(handler.Row.FindField(this.fileNameField) ?? handler.Row.FindFieldByPropertyName(fileNameField)); var newFilename = filename[handler.Row] = filename[handler.Row].TrimToNull(); var uploadHelper = new UploadHelper((subFolder.IsEmptyOrNull() ? "" : (subFolder + "/")) + fileNameFormat); var idField = (Field)(((IIdRow)handler.Row).IdField); var copyResult = uploadHelper.CopyTemporaryFile(newFilename, idField.AsObject(handler.Row), filesToDelete); if (subFolder != null && !this.storeSubFolderInDB) copyResult.DbFileName = copyResult.DbFileName.Substring(subFolder.Length + 1); return copyResult; }
public override void OnAfterSave(ISaveRequestHandler handler) { foreach (var info in infoList) { if (!handler.StateBag.TryGetValue("UpdatableExtensionBehavior_Assignments_" + info.Attr.Alias, out object mappingsObj)) { continue; } var mappings = (IEnumerable <Tuple <Field, Field> >)mappingsObj; if (mappings == null || !mappings.Any()) { continue; } var thisKey = info.ThisKeyField.AsObject(handler.Row); if (thisKey is null) { continue; } object oldID = GetExistingID(handler.Connection, info, thisKey); if (oldID == null && !CheckPresenceValue(info, handler.Row)) { continue; } var extension = info.RowFactory(); if (oldID != null) { ((IIdRow)extension).IdField.AsObject(extension, oldID); } info.OtherKeyField.AsObject(extension, thisKey); if (info.FilterField is object) { info.FilterField.AsObject(extension, info.FilterValue); } var saveHandler = handlerFactory.CreateHandler <ISaveRequestProcessor>(info.Attr.RowType); var request = saveHandler.CreateRequest(); request.Entity = extension; request.EntityId = oldID; foreach (var mapping in mappings) { mapping.Item2.AsObject(extension, mapping.Item1.AsObject(handler.Row)); } saveHandler.Process(handler.UnitOfWork, request, oldID == null ? SaveRequestType.Create : SaveRequestType.Update); } }
public override void OnValidateRequest(ISaveRequestHandler handler) { base.OnValidateRequest(handler); var row = handler.Row; var old = handler.Old; var isUpdate = old == null; if (!(row is IParentIdRow parentIdRow)) { return; } var parentId = parentIdRow.ParentIdField.AsObject(row); if (parentId == null) { return; } if (isUpdate && parentId == parentIdRow.ParentIdField.AsObject(old)) { return; } var parentIdField = parentIdRow.ParentIdField; if (parentIdField.ForeignTable.IsNullOrEmpty()) { return; } var foreignRowType = rowTypeRegistry.ByConnectionKey(row.GetFields().ConnectionKey) .FirstOrDefault(x => x.GetCustomAttribute <TableNameAttribute>()?.Name == parentIdField.ForeignTable); if (foreignRowType == null) { return; } if (!(Activator.CreateInstance(foreignRowType) is IIdRow foreignRow) || !(foreignRow is IIsActiveRow iar)) { return; } ServiceHelper.CheckParentNotDeleted(handler.UnitOfWork.Connection, foreignRow.Table, query => query.Where( new Criteria(foreignRow.IdField) == new ValueCriteria(parentId) & new Criteria(iar.IsActiveField) < 0), localizer); }
public void OnAudit(ISaveRequestHandler handler) { if (handler.IsCreate) { InsertNewLog(handler.Row, handler.Old, AuditActionType.Insert); } if (handler.IsUpdate) { InsertNewLog(handler.Row, handler.Old, AuditActionType.Update); } }
public void OnAudit(ISaveRequestHandler handler) { //if (handler.IsCreate) //{ // InsertNewLog(handler.UnitOfWork, handler.Row, handler.Old, AuditActionType.Insert); //} if (handler.IsUpdate) { InsertNewLog(handler.UnitOfWork, handler.Row, handler.Old, AuditActionType.Update); } }
private CopyTemporaryFileResult CopyTemporaryFile(ISaveRequestHandler handler) { var filename = (StringField)(handler.Row.FindField(this.fileNameField) ?? handler.Row.FindFieldByPropertyName(fileNameField)); var newFilename = filename[handler.Row] = filename[handler.Row].TrimToNull(); var uploadHelper = new UploadHelper((subFolder.IsEmptyOrNull() ? "" : (subFolder + "/")) + fileNameFormat); var copyResult = uploadHelper.CopyTemporaryFile(newFilename, ((IIdRow)handler.Row).IdField[handler.Row].Value, filesToDelete); if (subFolder != null && !this.storeSubFolderInDB) { copyResult.DbFileName = copyResult.DbFileName.Substring(subFolder.Length + 1); } return(copyResult); }
public override void OnBeforeSave(ISaveRequestHandler handler) { var field = (StringField)(handler.Row.FindField(this.filesField) ?? handler.Row.FindFieldByPropertyName(filesField)); if (!handler.Row.IsAssigned(field)) return; var oldFilesJSON = (handler.IsCreate ? null : field[handler.Old]).TrimToNull(); var newFilesJSON = field[handler.Row] = field[handler.Row].TrimToNull(); if (oldFilesJSON.IsTrimmedSame(newFilesJSON)) { field[handler.Row] = oldFilesJSON; return; } var oldFileList = ParseAndValidate(oldFilesJSON, "oldFiles"); var newFileList = ParseAndValidate(newFilesJSON, "newFiles"); var filesToDelete = new FilesToDelete(); UploadHelper.RegisterFilesToDelete(handler.UnitOfWork, filesToDelete); handler.StateBag[this.GetType().FullName + "_FilesToDelete"] = filesToDelete; foreach (var file in oldFileList) { var filename = file.Filename.Trim(); if (newFileList.Any(x => String.Compare(x.Filename.Trim(), filename, StringComparison.OrdinalIgnoreCase) == 0)) continue; var actualOldFile = ((subFolder != null && !storeSubFolderInDB) ? (subFolder + "/") : "") + filename; filesToDelete.RegisterOldFile(actualOldFile); if (copyFilesToHistory) { var oldFilePath = UploadHelper.ToPath(actualOldFile); string date = DateTime.UtcNow.ToString("yyyyMM", Invariants.DateTimeFormat); string historyFile = "history/" + date + "/" + Path.GetFileName(oldFilePath); if (File.Exists(UploadHelper.DbFilePath(oldFilePath))) UploadHelper.CopyFileAndRelated(UploadHelper.DbFilePath(oldFilePath), UploadHelper.DbFilePath(historyFile), overwrite: true); } } if (newFileList.IsEmptyOrNull()) { field[handler.Row] = null; return; } if (handler.IsUpdate) field[handler.Row] = CopyTemporaryFiles(handler, oldFileList, newFileList, filesToDelete); }
public override void OnBeforeSave(ISaveRequestHandler handler) { var filesToDelete = new FilesToDelete(); UploadHelper.RegisterFilesToDelete(handler.UnitOfWork, filesToDelete); handler.StateBag[this.GetType().FullName + "_FilesToDelete"] = filesToDelete; var filename = (StringField)(handler.Row.FindField(this.fileNameField) ?? handler.Row.FindFieldByPropertyName(fileNameField)); var oldFilename = handler.IsCreate ? null : filename[handler.Old]; var newFilename = filename[handler.Row] = filename[handler.Row].TrimToNull(); if (oldFilename.IsTrimmedSame(newFilename)) { filename[handler.Row] = oldFilename; return; } if (!oldFilename.IsEmptyOrNull()) { var actualOldFile = ((subFolder != null && !storeSubFolderInDB) ? (subFolder + "/") : "") + oldFilename; filesToDelete.RegisterOldFile(actualOldFile); if (copyFileToHistory) { var oldFilePath = UploadHelper.ToPath(actualOldFile); string date = DateTime.UtcNow.ToString("yyyyMM", Invariants.DateTimeFormat); string historyFile = "history/" + date + "/" + Path.GetFileName(oldFilePath); if (File.Exists(UploadHelper.DbFilePath(oldFilePath))) UploadHelper.CopyFileAndRelated(UploadHelper.DbFilePath(oldFilePath), UploadHelper.DbFilePath(historyFile), overwrite: true); } } if (newFilename == null) { if (oldFilename.IsTrimmedEmpty()) return; filename[handler.Row] = null; return; } if (!newFilename.ToLowerInvariant().StartsWith("temporary/")) throw new InvalidOperationException("For security reasons, only temporary files can be used in uploads!"); if (handler.IsUpdate) { var copyResult = CopyTemporaryFile(handler, filesToDelete); filename[handler.Row] = copyResult.DbFileName; } }
public override void OnAudit(ISaveRequestHandler handler) { if (handler.Row == null || captureLogHandler == null) { return; } if (handler.IsCreate) { captureLogHandler.Log(handler.UnitOfWork, null, handler.Row, Authorization.UserId); return; } var insertLogRow = handler.Row as IInsertLogRow; var updateLogRow = handler.Row as IUpdateLogRow; bool anyChanged = false; foreach (var field in handler.Row.GetTableFields()) { if (insertLogRow != null && (ReferenceEquals(insertLogRow.InsertDateField, field) || ReferenceEquals(insertLogRow.InsertUserIdField, field))) { continue; } if (updateLogRow != null && (ReferenceEquals(updateLogRow.UpdateDateField, field) || ReferenceEquals(updateLogRow.UpdateUserIdField, field))) { continue; } if (field.IndexCompare(handler.Old, handler.Row) != 0) { anyChanged = true; break; } } if (anyChanged) { captureLogHandler.Log(handler.UnitOfWork, handler.Old, handler.Row, Authorization.UserId); } }
public override void OnPrepareQuery(ISaveRequestHandler handler, SqlQuery query) { base.OnPrepareQuery(handler, query); if (this.replaceFields != null) { foreach (var field in replaceFields.Values) { if (!field.IsTableField() && (!(query is ISqlQueryExtensible) || ((ISqlQueryExtensible)query).GetSelectIntoIndex(field) <= 0)) query.Select(field); } } }
private CopyTemporaryFileResult CopyTemporaryFile(ISaveRequestHandler handler, FilesToDelete filesToDelete) { var fileName = (StringField)Target; var newFilename = fileName[handler.Row] = fileName[handler.Row].TrimToNull(); CheckUploadedImageAndCreateThumbs(attr, ref newFilename); var copyResult = uploadHelper.CopyTemporaryFile(newFilename, ((IIdRow)handler.Row).IdField[handler.Row].Value, filesToDelete); if (!attr.SubFolder.IsEmptyOrNull()) { copyResult.DbFileName = copyResult.DbFileName.Substring(attr.SubFolder.Length + 1); } return(copyResult); }
public override void OnBeforeSave(ISaveRequestHandler handler) { var filesToDelete = new FilesToDelete(); UploadHelper.RegisterFilesToDelete(handler.UnitOfWork, filesToDelete); handler.StateBag[this.GetType().FullName + "_" + Target.Name + "_FilesToDelete"] = filesToDelete; var filename = (StringField)(Target); var oldFilename = handler.IsCreate ? null : filename[handler.Old]; var newFilename = filename[handler.Row] = filename[handler.Row].TrimToNull(); if (oldFilename.IsTrimmedSame(newFilename)) { filename[handler.Row] = oldFilename; return; } DeleteOldFile(filesToDelete, oldFilename); if (newFilename == null) { if (oldFilename.IsTrimmedEmpty()) return; filename[handler.Row] = null; if (!ReferenceEquals(null, originalNameField)) originalNameField[handler.Row] = null; return; } if (!newFilename.ToLowerInvariant().StartsWith("temporary/")) throw new InvalidOperationException("For security reasons, only temporary files can be used in uploads!"); if (!ReferenceEquals(null, originalNameField)) { var originalName = File.ReadAllText(Path.ChangeExtension( UploadHelper.DbFilePath(newFilename), ".orig")).TrimToNull(); originalNameField[handler.Row] = originalName; } if (handler.IsUpdate) { var copyResult = CopyTemporaryFile(handler, filesToDelete); filename[handler.Row] = copyResult.DbFileName; } }
public override void OnBeforeSave(ISaveRequestHandler handler) { var field = (StringField)Target; if (!handler.Row.IsAssigned(field)) { return; } var oldFilesJSON = (handler.IsCreate ? null : field[handler.Old]).TrimToNull(); var newFilesJSON = field[handler.Row] = field[handler.Row].TrimToNull(); if (oldFilesJSON.IsTrimmedSame(newFilesJSON)) { field[handler.Row] = oldFilesJSON; return; } var oldFileList = ParseAndValidate(oldFilesJSON, "oldFiles"); var newFileList = ParseAndValidate(newFilesJSON, "newFiles"); var filesToDelete = new FilesToDelete(); UploadHelper.RegisterFilesToDelete(handler.UnitOfWork, filesToDelete); handler.StateBag[this.GetType().FullName + "_" + Target.Name + "_FilesToDelete"] = filesToDelete; foreach (var file in oldFileList) { var filename = file.Filename.Trim(); if (newFileList.Any(x => String.Compare(x.Filename.Trim(), filename, StringComparison.OrdinalIgnoreCase) == 0)) { continue; } DeleteOldFile(filesToDelete, filename); } if (newFileList.IsEmptyOrNull()) { field[handler.Row] = null; return; } if (handler.IsUpdate) { field[handler.Row] = CopyTemporaryFiles(handler, oldFileList, newFileList, filesToDelete); } }
public override void OnSetInternalFields(ISaveRequestHandler handler) { var row = handler.Row; var insertLogRow = row as IInsertLogRow; Field field; var userId = handler.Context.User?.GetIdentifier(); if (row is IUpdateLogRow updateLogRow && (handler.IsUpdate || insertLogRow == null)) { updateLogRow.UpdateDateField[row] = DateTimeField.ToDateTimeKind(DateTime.Now, updateLogRow.UpdateDateField.DateTimeKind); field = updateLogRow.UpdateUserIdField; field.AsObject(row, field.ConvertValue(userId, CultureInfo.InvariantCulture)); }
public override void OnAfterSave(ISaveRequestHandler handler) { var newList = Target.AsObject(handler.Row) as IList; if (newList == null) { return; } var idField = (Field)((handler.Row as IIdRow).IdField); var masterId = idField.AsObject(handler.Row); if (handler.IsCreate) { foreach (object itemKey in newList) { if (itemKey != null) { InsertDetail(handler.UnitOfWork, masterId, itemKey); } } return; } var oldRows = new List <Row>(); var row = rowFactory(); var rowIdField = (Field)((row as IIdRow).IdField); new SqlQuery() .Dialect(handler.Connection.GetDialect()) .From(row) .Select(rowIdField) .Select(itemKeyField) .OrderBy(rowIdField) .Where( thisKeyField == new ValueCriteria(masterId) & queryCriteria) .ForEach(handler.Connection, () => { oldRows.Add(row.Clone()); }); DetailListSave(handler.UnitOfWork, masterId, oldRows, newList.Cast <object>().ToList()); }
public override void OnPrepareQuery(ISaveRequestHandler handler, SqlQuery query) { base.OnPrepareQuery(handler, query); if (this.replaceFields != null) { foreach (var field in replaceFields.Values) { if (!field.IsTableField() && (!(query is ISqlQueryExtensible) || ((ISqlQueryExtensible)query).GetSelectIntoIndex(field) <= 0)) { query.Select(field); } } } }
internal static void ValidateUniqueConstraint(ISaveRequestHandler handler, IEnumerable <Field> fields, string errorMessage = null, BaseCriteria groupCriteria = null) { if (handler.IsUpdate && !fields.Any(x => x.IndexCompare(handler.Old, handler.Row) != 0)) { return; } var criteria = groupCriteria ?? Criteria.Empty; foreach (var field in fields) { if (field.IsNull(handler.Row)) { criteria &= field.IsNull(); } else { criteria &= field == new ValueCriteria(field.AsObject(handler.Row)); } } var idField = (Field)((IIdRow)handler.Row).IdField; if (handler.IsUpdate) { criteria &= (Field)idField != new ValueCriteria(idField.AsObject(handler.Old)); } var row = handler.Row.CreateNew(); if (new SqlQuery() .Dialect(handler.Connection.GetDialect()) .From(row) .Select("1") .Where(criteria) .Exists(handler.UnitOfWork.Connection)) { throw new ValidationError("UniqueViolation", String.Join(", ", fields.Select(x => x.PropertyName ?? x.Name)), String.Format(!string.IsNullOrEmpty(errorMessage) ? (LocalText.TryGet(errorMessage) ?? errorMessage) : LocalText.Get("Validation.UniqueConstraint"), String.Join(", ", fields.Select(x => x.Title)))); } }
public override void OnSetInternalFields(ISaveRequestHandler handler) { var row = handler.Row; var updateLogRow = row as IUpdateLogRow; var insertLogRow = row as IInsertLogRow; if (updateLogRow != null && (handler.IsUpdate || insertLogRow == null)) { updateLogRow.UpdateDateField[row] = DateTimeField.ToDateTimeKind(DateTime.Now, updateLogRow.UpdateDateField.DateTimeKind); updateLogRow.UpdateUserIdField[row] = Authorization.UserId.TryParseID(); } else if (insertLogRow != null && handler.IsCreate) { insertLogRow.InsertDateField[row] = DateTimeField.ToDateTimeKind(DateTime.Now, insertLogRow.InsertDateField.DateTimeKind); insertLogRow.InsertUserIdField[row] = Authorization.UserId.TryParseID(); } }
public override void OnAfterSave(ISaveRequestHandler handler) { var filename = (StringField)(handler.Row.FindField(this.fileNameField) ?? handler.Row.FindFieldByPropertyName(fileNameField)); if (handler.Old != null) return; var newFilename = filename[handler.Row] = filename[handler.Row].TrimToNull(); if (newFilename == null) return; var copyResult = CopyTemporaryFile(handler); new SqlUpdate(handler.Row.Table) .Set(filename, copyResult.DbFileName) .WhereEqual((Field)((IIdRow)handler.Row).IdField, ((IIdRow)handler.Row).IdField[handler.Row].Value) .Execute(handler.UnitOfWork.Connection); }
public override void OnValidateRequest(ISaveRequestHandler handler) { base.OnValidateRequest(handler); var row = handler.Row; var old = handler.Old; var isUpdate = old == null; var parentIdRow = row as IParentIdRow; if (parentIdRow == null) return; var parentId = parentIdRow.ParentIdField[row]; if (parentId == null) return; if (isUpdate && parentId == parentIdRow.ParentIdField[old]) return; var parentIdField = (Field)parentIdRow.ParentIdField; if (parentIdField.ForeignTable.IsNullOrEmpty()) return; var foreignRow = RowRegistry.GetConnectionRow(RowRegistry.GetConnectionKey(row), parentIdField.ForeignTable); if (foreignRow == null) return; var idForeign = (IIdRow)foreignRow; if (idForeign == null) return; var isActiveForeign = (IIsActiveRow)foreignRow; if (isActiveForeign == null) return; ServiceHelper.CheckParentNotDeleted(handler.UnitOfWork.Connection, foreignRow.Table, query => query.Where( new Criteria((Field)idForeign.IdField) == parentId.Value & new Criteria(isActiveForeign.IsActiveField) < 0)); }
public override void OnAudit(ISaveRequestHandler handler) { if (handler.Row == null || captureLogHandler == null) return; if (handler.IsCreate) { captureLogHandler.Log(handler.UnitOfWork, null, handler.Row, Authorization.UserId); return; } var insertLogRow = handler.Row as IInsertLogRow; var updateLogRow = handler.Row as IUpdateLogRow; bool anyChanged = false; foreach (var field in handler.Row.GetTableFields()) { if (insertLogRow != null && (ReferenceEquals(insertLogRow.InsertDateField, field) || ReferenceEquals(insertLogRow.InsertUserIdField, field))) continue; if (updateLogRow != null && (ReferenceEquals(updateLogRow.UpdateDateField, field) || ReferenceEquals(updateLogRow.UpdateUserIdField, field))) { continue; } if (field.IndexCompare(handler.Old, handler.Row) != 0) { anyChanged = true; break; } } if (anyChanged) captureLogHandler.Log(handler.UnitOfWork, handler.Old, handler.Row, Authorization.UserId); }
public override void OnAfterSave(ISaveRequestHandler handler) { if (handler.Old != null) return; var field = (StringField)(handler.Row.FindField(this.filesField) ?? handler.Row.FindFieldByPropertyName(filesField)); if (!handler.Row.IsAssigned(field)) return; var newFilesJSON = field[handler.Row] = field[handler.Row].TrimToNull(); var newFileList = ParseAndValidate(newFilesJSON, "newFiles"); if (newFileList.IsEmptyOrNull()) return; var copyResult = CopyTemporaryFiles(handler, new UploadedFile[0], newFileList); new SqlUpdate(handler.Row.Table) .Set(field, copyResult) .WhereEqual((Field)((IIdRow)handler.Row).IdField, ((IIdRow)handler.Row).IdField[handler.Row].Value) .Execute(handler.UnitOfWork.Connection); }
public override void OnAfterSave(ISaveRequestHandler handler) { if (handler.IsUpdate) return; var field = (StringField)Target; if (!handler.Row.IsAssigned(field)) return; var newFilesJSON = field[handler.Row] = field[handler.Row].TrimToNull(); var newFileList = ParseAndValidate(newFilesJSON, "newFiles"); if (newFileList.IsEmptyOrNull()) return; var filesToDelete = handler.StateBag[this.GetType().FullName + "_" + Target.Name + "_FilesToDelete"] as FilesToDelete; var copyResult = CopyTemporaryFiles(handler, new UploadedFile[0], newFileList, filesToDelete); new SqlUpdate(handler.Row.Table) .Set(field, copyResult) .WhereEqual((Field)((IIdRow)handler.Row).IdField, ((IIdRow)handler.Row).IdField[handler.Row].Value) .Execute(handler.UnitOfWork.Connection); }
public void OnAfterSave(ISaveRequestHandler handler) { }
public override void OnAfterSave(ISaveRequestHandler handler) { var newList = Target.AsObject(handler.Row) as IList; if (newList == null) return; var idField = (Field)((handler.Row as IIdRow).IdField); var masterId = idField.AsObject(handler.Row); if (handler.IsCreate) { foreach (object itemKey in newList) if (itemKey != null) InsertDetail(handler.UnitOfWork, masterId, itemKey); return; } var oldRows = new List<Row>(); var row = rowFactory(); var rowIdField = (Field)((row as IIdRow).IdField); new SqlQuery() .Dialect(handler.Connection.GetDialect()) .From(row) .Select(rowIdField) .Select(itemKeyField) .OrderBy(rowIdField) .Where( thisKeyField == new ValueCriteria(masterId) & filterCriteriaT0) .ForEach(handler.Connection, () => { oldRows.Add(row.Clone()); }); DetailListSave(handler.UnitOfWork, masterId, oldRows, newList.Cast<object>().ToList()); }
public override void OnAfterSave(ISaveRequestHandler handler) { var filename = (StringField)Target; if (handler.IsUpdate) return; var newFilename = filename[handler.Row] = filename[handler.Row].TrimToNull(); if (newFilename == null) return; var filesToDelete = handler.StateBag[this.GetType().FullName + "_" + Target.Name + "_FilesToDelete"] as FilesToDelete; var copyResult = CopyTemporaryFile(handler, filesToDelete); new SqlUpdate(handler.Row.Table) .Set(filename, copyResult.DbFileName) .WhereEqual((Field)((IIdRow)handler.Row).IdField, ((IIdRow)handler.Row).IdField[handler.Row].Value) .Execute(handler.UnitOfWork.Connection); }
public override void OnBeforeSave(ISaveRequestHandler handler) { var filesToDelete = new FilesToDelete(); UploadHelper.RegisterFilesToDelete(handler.UnitOfWork, filesToDelete); handler.StateBag[this.GetType().FullName + "_" + Target.Name + "_FilesToDelete"] = filesToDelete; var filename = (StringField)(Target); var oldFilename = handler.IsCreate ? null : filename[handler.Old]; var newFilename = filename[handler.Row] = filename[handler.Row].TrimToNull(); if (oldFilename.IsTrimmedSame(newFilename)) { filename[handler.Row] = oldFilename; return; } if (!oldFilename.IsEmptyOrNull()) { var actualOldFile = (attr.SubFolder.IsEmptyOrNull() ? "" : (attr.SubFolder + "/")) + oldFilename; filesToDelete.RegisterOldFile(actualOldFile); if (attr.CopyToHistory) { var oldFilePath = UploadHelper.ToPath(actualOldFile); string date = DateTime.UtcNow.ToString("yyyyMM", Invariants.DateTimeFormat); string historyFile = "history/" + date + "/" + Path.GetFileName(oldFilePath); if (File.Exists(UploadHelper.DbFilePath(oldFilePath))) UploadHelper.CopyFileAndRelated(UploadHelper.DbFilePath(oldFilePath), UploadHelper.DbFilePath(historyFile), overwrite: true); } } if (newFilename == null) { if (oldFilename.IsTrimmedEmpty()) return; filename[handler.Row] = null; if (!ReferenceEquals(null, originalNameField)) originalNameField[handler.Row] = null; return; } if (!newFilename.ToLowerInvariant().StartsWith("temporary/")) throw new InvalidOperationException("For security reasons, only temporary files can be used in uploads!"); if (!ReferenceEquals(null, originalNameField)) { var originalName = File.ReadAllText(Path.ChangeExtension( UploadHelper.DbFilePath(newFilename), ".orig")).TrimToNull(); originalNameField[handler.Row] = originalName; } if (handler.IsUpdate) { var copyResult = CopyTemporaryFile(handler, filesToDelete); filename[handler.Row] = copyResult.DbFileName; } }
private CopyTemporaryFileResult CopyTemporaryFile(ISaveRequestHandler handler, FilesToDelete filesToDelete) { var fileName = (StringField)Target; var newFilename = fileName[handler.Row] = fileName[handler.Row].TrimToNull(); CheckUploadedImageAndCreateThumbs(attr, ref newFilename); var copyResult = uploadHelper.CopyTemporaryFile(newFilename, ((IIdRow)handler.Row).IdField[handler.Row].Value, filesToDelete); if (!attr.SubFolder.IsEmptyOrNull()) copyResult.DbFileName = copyResult.DbFileName.Substring(attr.SubFolder.Length + 1); return copyResult; }
public void OnSetInternalFields(ISaveRequestHandler handler) { if (handler.IsCreate) fldTenantId[handler.Row] = ((UserDefinition)Authorization.UserDefinition).TenantId; }
public void OnReturn(ISaveRequestHandler handler) { }
public void OnAudit(ISaveRequestHandler handler) { }
public void OnBeforeSave(ISaveRequestHandler handler) { }
public void OnPrepareQuery(ISaveRequestHandler handler, SqlQuery query) { }
private string CopyTemporaryFiles(ISaveRequestHandler handler, UploadedFile[] oldFileList, UploadedFile[] newFileList, FilesToDelete filesToDelete) { foreach (var file in newFileList) { var filename = file.Filename.Trim(); if (oldFileList.Any(x => String.Compare(x.Filename.Trim(), filename, StringComparison.OrdinalIgnoreCase) == 0)) continue; if (!filename.ToLowerInvariant().StartsWith("temporary/")) throw new InvalidOperationException("For security reasons, only temporary files can be used in uploads!"); var uploadHelper = new UploadHelper((subFolder.IsEmptyOrNull() ? "" : (subFolder + "/")) + fileNameFormat); var copyResult = uploadHelper.CopyTemporaryFile(filename, ((IIdRow)handler.Row).IdField[handler.Row].Value, filesToDelete); if (subFolder != null && !this.storeSubFolderInDB) copyResult.DbFileName = copyResult.DbFileName.Substring(subFolder.Length + 1); file.Filename = copyResult.DbFileName; } return JSON.Stringify(newFileList); }
public override void OnValidateRequest(ISaveRequestHandler handler) { ValidateUniqueConstraint(handler, new Field[] { Target }, attr == null ? (string)null : attr.ErrorMessage, Criteria.Empty); }
public void OnValidateRequest(ISaveRequestHandler handler) { }