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);
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 4
0
 public void OnSetInternalFields(ISaveRequestHandler handler)
 {
     if (handler.IsCreate)
     {
         fldIdComercio[handler.Row] = ((UserDefinition)Authorization.UserDefinition).Id_Comercio;
     }
 }
Exemplo n.º 5
0
        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);
            }
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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;
        }
Exemplo n.º 8
0
        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))));
            }
        }
Exemplo n.º 9
0
 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);
            }
        }
Exemplo n.º 11
0
        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));
        }
Exemplo n.º 12
0
        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);
        }
Exemplo n.º 13
0
        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);
        }
Exemplo n.º 15
0
        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);
            }
        }
Exemplo n.º 18
0
        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));
     }
 }
Exemplo n.º 21
0
 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();
     }
 }
Exemplo n.º 22
0
        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;
            }
        }
Exemplo n.º 23
0
        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;
            }
        }
Exemplo n.º 24
0
 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;
 }
Exemplo n.º 26
0
        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);
        }
Exemplo n.º 28
0
        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);
            }
        }
Exemplo n.º 29
0
        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;
            }
        }
Exemplo n.º 33
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 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);
                }
            }
        }
Exemplo n.º 35
0
        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);
        }
Exemplo n.º 36
0
        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;
            }
        }
Exemplo n.º 37
0
        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);
            }
        }
Exemplo n.º 38
0
        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());
        }
Exemplo n.º 40
0
        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))));
            }
        }
Exemplo n.º 42
0
        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);
        }
Exemplo n.º 44
0
        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));
        }
Exemplo n.º 45
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());
        }
Exemplo n.º 50
0
        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);
        }
Exemplo n.º 51
0
        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;
            }
        }
Exemplo n.º 52
0
        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);
        }
Exemplo n.º 59
0
 public override void OnValidateRequest(ISaveRequestHandler handler)
 {
     ValidateUniqueConstraint(handler, new Field[] { Target },
         attr == null ? (string)null : attr.ErrorMessage,
         Criteria.Empty);
 }
 public void OnValidateRequest(ISaveRequestHandler handler) { }