示例#1
0
        public VueComponentDefinition[] ConvertFormToVues(ContentModifierForm modifierForm,
                                                          ContentField field,
                                                          ContentModifyOperation operation,
                                                          ProtoContent content, ContentFieldDefinition fieldDefinition)
        {
            var vues = new List <VueComponentDefinition>();

            if (operation.IsDeleteOperation())
            {
                vues.Add(new VueHtmlWidget("Proceed to delete?"));
            }
            vues.AddRange(new[] {
                new VueComponentDefinition {
                    Name  = "cms-form-field-hidden",
                    Props = new {
                        valuePath = nameof(CommonFieldModifierForm.ContentId)
                    }
                },
                new VueComponentDefinition {
                    Name  = "cms-form-field-hidden",
                    Props = new {
                        valuePath = nameof(CommonFieldModifierForm.ContentTypeId)
                    }
                },
                new VueComponentDefinition {
                    Name  = "cms-form-field-hidden",
                    Props = new {
                        valuePath = nameof(CommonFieldModifierForm.OperationName)
                    }
                }
            });

            return(vues.ToArray());
        }
        public void PerformModification(ContentModifierForm modifierForm, ContentField field,
                                        ContentModifyOperation operation,
                                        ProtoContent content, ContentFieldDefinition fieldDefinition)
        {
            var fm       = modifierForm.DirectCastTo <FilePickerFieldModifierForm>();
            var fnPrefix = $"{fieldDefinition.FieldName}.{nameof(FilePickerField.Val)}.";
            var existing = content.ContentFields.Where(x => x.FieldName.StartsWith(fnPrefix)).ToArray();

            foreach (var cfe in existing)
            {
                content.ContentFields.Remove(cfe);
                _dbContext.ProtoFields.Remove(cfe);
            }
            var idx = 0;

            foreach (var path in fm.Val)
            {
                var cf = new ProtoField {
                    ContentId          = content.Id,
                    StringValue        = path,
                    FieldName          = $"{fnPrefix}{idx}",
                    FieldClassTypeName = typeof(FilePickerField).FullName
                };
                content.ContentFields.Add(cf);
                idx++;
            }
        }
        public ContentModifierForm BuildModifierForm(ContentField field,
                                                     ContentModifyOperation operation, ProtoContent content, ContentFieldDefinition fieldDefinition)
        {
            var f    = field.DirectCastTo <TrashingField>();
            var form = new TrashingFieldModifierForm {
                TrashedAt = f.TrashedUtc?.ToLocalTime()
            };

            return(form);
        }
        public ContentModifierForm BuildModifierForm(ContentField field, ContentModifyOperation operation,
                                                     ProtoContent content,
                                                     ContentFieldDefinition fieldDefinition)
        {
            var fi = field.DirectCastTo <FilePickerField>();
            var fm = new FilePickerFieldModifierForm {
                Val = fi.Val
            };

            return(fm);
        }
示例#5
0
        public ContentModifierForm BuildModifierForm(ContentField field,
                                                     ContentModifyOperation operation, ProtoContent content,
                                                     ContentFieldDefinition fieldDefinition)
        {
            var f = new CommonFieldModifierForm {
                ContentId     = content?.Id,
                ContentTypeId = content?.ContentTypeId,
                OperationName = operation.Name
            };

            return(f);
        }
示例#6
0
        public ContentModifierForm BuildModifierForm(ContentField field, ContentModifyOperation operation,
                                                     ProtoContent content,
                                                     ContentFieldDefinition fieldDefinition)
        {
            var cf   = field.DirectCastTo <SelectField>();
            var val  = cf.Val;
            var form = new SelectFieldModifierForm {
                Val = val
            };

            return(form);
        }
        public ContentModifierForm BuildModifierForm(ContentField field,
                                                     ContentModifyOperation operation, ProtoContent content,
                                                     ContentFieldDefinition fieldDefinition)
        {
            var f = field != null?field.DirectCastTo <PublishingField>() : new PublishingField();

            var form = new PublishingFieldModifierForm {
                PublishedAt   = f.PublishedUtc?.ToLocalTime(),
                UnpublishedAt = f.UnpublishedUtc?.ToLocalTime()
            };

            return(form);
        }
 public VueComponentDefinition[] ConvertFormToVues(ContentModifierForm modifierForm,
                                                   ContentField field,
                                                   ContentModifyOperation operation, ProtoContent content, ContentFieldDefinition fieldDefinition)
 {
     return(new[] {
         new VueComponentDefinition {
             Name = "cms-form-field-datetime",
             Props = new {
                 label = "Trashed At",
                 valuePath = nameof(TrashingFieldModifierForm.TrashedAt)
             }
         }
     });
 }
        public VueComponentDefinition[] ConvertFormToVues(ContentModifierForm modifierForm, ContentField field,
                                                          ContentModifyOperation operation, ProtoContent content, ContentFieldDefinition fieldDefinition)
        {
            var cfg = fieldDefinition.Config.DirectCastTo <NumberFieldConfiguration>();

            return(new[] {
                new VueComponentDefinition {
                    Name = "cms-form-field-number",
                    Props = new {
                        label = cfg.Label ?? fieldDefinition.FieldName,
                        valuePath = nameof(NumberFieldModifierForm.Val),
                        numberKind = cfg.NumberKind.ToString().ToLowerInvariant(),
                        helpText = cfg.HelpText,
                    }
                }
            });
        }
        public VueComponentDefinition[] ConvertFormToVues(ContentModifierForm modifierForm, ContentField field,
                                                          ContentModifyOperation operation, ProtoContent content, ContentFieldDefinition fieldDefinition)
        {
            var fcfg = fieldDefinition.Config.DirectCastTo <FilePickerFieldConfiguration>();

            return(new[] {
                new VueComponentDefinition {
                    Name = "cms-form-field-file-picker",
                    Props = new {
                        label = fcfg.Label ?? fieldDefinition.FieldName,
                        valuePath = nameof(FilePickerFieldModifierForm.Val),
                        helpText = fcfg.HelpText,
                        isMultiSelect = fcfg.IsMultiSelect,
                        fileExplorerPageUrl = _urlProv.GenerateManageFileExplorerUrl()
                    }
                }
            });
        }
示例#11
0
        public VueComponentDefinition[] ConvertFormToVues(ContentModifierForm modifierForm, ContentField field,
                                                          ContentModifyOperation operation, ProtoContent content, ContentFieldDefinition fieldDefinition)
        {
            var cfg = fieldDefinition.Config.DirectCastTo <SelectFieldConfiguration>();

            return(new[] {
                new VueComponentDefinition {
                    Name = "cms-form-field-select",
                    Props = new {
                        label = fieldDefinition.Config.Label ?? fieldDefinition.FieldName,
                        valuePath = $"{nameof(SelectField.Val)}",
                        isMultiSelect = cfg.IsMultiSelect,
                        optionsHandlerId = cfg.OptionsHandlerId,
                        optionsHandlerParam = cfg.OptionsHandlerParam
                    }
                },
            });
        }
        public ContentModifierForm BuildModifierForm(ContentField field, ContentModifyOperation operation,
                                                     ProtoContent content,
                                                     ContentFieldDefinition fieldDefinition)
        {
            var cf  = field.DirectCastTo <TextField>();
            var cfg = fieldDefinition.Config.DirectCastTo <TextFieldConfiguration>();
            var val = cf.Val;

            if (operation.IsCreateOperation())
            {
                val = cfg.InitialValue;
            }
            var form = new TextFieldModifierForm {
                Val = val
            };

            return(form);
        }
 public void PerformModification(IDictionary <string, ContentModifierForm> modifierForm, ProtoContent content,
                                 ContentModifyOperation operation, ContentType contentType)
 {
     foreach (var fd in contentType.Fields)
     {
         if (!operation.IsAny(fd.Config.HandledModifyOperationNames))
         {
             continue;
         }
         var fdr   = fd.FieldFinder();
         var mod   = fd.FieldModifier();
         var field = operation.Is(CommonFieldModifyOperationsProvider.CREATE_OPERATION_NAME)
             ? Activator.CreateInstance(fd.ModelType).DirectCastTo <ContentField>()
             : fdr.GetModel(content, fd);
         modifierForm.TryGetValue(fd.FieldName, out var form);
         mod.PerformModification(form, field, operation, content, fd);
     }
 }
        public VueComponentDefinition[] ConvertFormToVues(ContentModifierForm modifierForm, ContentField field,
                                                          ContentModifyOperation operation, ProtoContent content, ContentFieldDefinition fieldDefinition)
        {
            var fcfg = fieldDefinition.Config.DirectCastTo <BooleanFieldConfiguration>();

            return(new[] {
                new VueComponentDefinition {
                    Name = "cms-form-field-checkbox",
                    Props = new {
                        label = fieldDefinition.Config.Label ?? fieldDefinition.FieldName,
                        valuePath = nameof(BooleanFieldModifierForm.Val),
                        yesLabel = fcfg.TrueBoolLabel,
                        noLabel = fcfg.FalseBoolLabel,
                        helpText = fcfg.HelpText,
                    }
                }
            });
        }
        public void PerformModification(ContentModifierForm modifierForm, ContentField field,
                                        ContentModifyOperation operation, ProtoContent content, ContentFieldDefinition fieldDefinition)
        {
            var fn         = $"{fieldDefinition.FieldName}.{nameof(TrashingField.TrashedUtc)}";
            var fp         = modifierForm.DirectCastTo <TrashingFieldModifierForm>();
            var trashedUtc = fp?.TrashedAt?.ToUniversalTime();
            var cf         = content.ContentFields.FirstOrDefault(x => x.FieldName == fn);

            if (cf == null)
            {
                cf = new ProtoField {
                    FieldName = fn,
                    ContentId = content.Id
                };
                content.ContentFields.Add(cf);
            }
            cf.FieldClassTypeName = typeof(TrashingField).FullName;
            cf.DateTimeValue      = trashedUtc;
        }
示例#16
0
        public VueComponentDefinition[] ConvertFormToVues(ContentModifierForm modifierForm,
                                                          ContentField field, ContentModifyOperation operation, ProtoContent content,
                                                          ContentFieldDefinition fieldDefinition)
        {
            var fcfg       = fieldDefinition.Config.DirectCastTo <ChronoFieldConfiguration>();
            var pickerKind = fcfg.PickerKind.ToString();

            return(new[] {
                new VueComponentDefinition {
                    Name = "cms-form-field-datetime",
                    Props = new {
                        label = $"{fcfg.Label}",
                        helpText = fcfg.HelpText,
                        valuePath = nameof(ChronoFieldModifierForm.Val),
                        pickerKind
                    }
                }
            });
        }
        public void PerformModification(ContentModifierForm modifierForm, ContentField field,
                                        ContentModifyOperation operation,
                                        ProtoContent content, ContentFieldDefinition fieldDefinition)
        {
            var cfg  = fieldDefinition.Config.DirectCastTo <BooleanFieldConfiguration>();
            var form = modifierForm.DirectCastTo <BooleanFieldModifierForm>();
            var fn   = $"{fieldDefinition.FieldName}.{nameof(BooleanField.Val)}";
            var cf   = content.ContentFields.FirstOrDefault(x => x.FieldName == fn);

            if (cf == null)
            {
                cf = new ProtoField {
                    ContentId = content.Id,
                    FieldName = fn
                };
                content.ContentFields.Add(cf);
            }
            cf.FieldClassTypeName = typeof(BooleanField).FullName;
            cf.BooleanValue       = form.Val ?? cfg.DefaultValue;
        }
        public void PerformModification(ContentModifierForm modifierForm, ContentField field,
                                        ContentModifyOperation operation,
                                        ProtoContent content, ContentFieldDefinition fieldDefinition)
        {
            var f   = modifierForm.DirectCastTo <TextFieldModifierForm>();
            var cfg = fieldDefinition.Config.DirectCastTo <TextFieldConfiguration>();
            var fn  = $"{fieldDefinition.FieldName}.{nameof(f.Val)}";
            var cf  = content.ContentFields.FirstOrDefault(x => x.FieldName == fn);

            if (cf == null)
            {
                cf = new ProtoField {
                    ContentId = content.Id,
                    FieldName = fn
                };
                content.ContentFields.Add(cf);
            }
            cf.FieldClassTypeName = typeof(TextField).FullName;
            cf.StringValue        = string.IsNullOrWhiteSpace(f.Val) ? cfg.DefaultValue?.Trim() : f.Val;
        }
        public VueComponentDefinition[] ConvertFormToVues(ContentModifierForm modifierForm, ContentField field,
                                                          ContentModifyOperation operation, ProtoContent content, ContentFieldDefinition fieldDefinition)
        {
            var cfg       = fieldDefinition.Config.DirectCastTo <TextFieldConfiguration>();
            var editorVue = new VueComponentDefinition {
                Name  = "cms-form-field-text",
                Props = new {
                    label     = cfg.Label,
                    helpText  = cfg.HelpText,
                    valuePath = nameof(TextFieldModifierForm.Val)
                }
            };

            switch (cfg.EditorType)
            {
            case TextFieldEditorType.TextArea:
                editorVue = new VueComponentDefinition {
                    Name  = "cms-form-field-textarea",
                    Props = new {
                        label     = cfg.Label,
                        helpText  = cfg.HelpText,
                        valuePath = nameof(TextFieldModifierForm.Val)
                    }
                };
                break;

            case TextFieldEditorType.RichHtml:
                editorVue = new VueComponentDefinition {
                    Name  = "cms-form-field-rich-html",
                    Props = new {
                        label     = cfg.Label,
                        helpText  = cfg.HelpText,
                        valuePath = nameof(TextFieldModifierForm.Val)
                    }
                };
                break;
            }
            return(new[] {
                editorVue
            });
        }
        public void PerformModification(ContentModifierForm modifierForm, ContentField field,
                                        ContentModifyOperation operation,
                                        ProtoContent content, ContentFieldDefinition fieldDefinition)
        {
            var pfn = $"{fieldDefinition.FieldName}.{nameof(PublishingField.PublishedUtc)}";
            var ufn = $"{fieldDefinition.FieldName}.{nameof(PublishingField.UnpublishedUtc)}";

            var fp = modifierForm.DirectCastTo <PublishingFieldModifierForm>();

            var publishedUtc = fp?.PublishedAt?.ToUniversalTime();
            var pcf          = content.ContentFields.FirstOrDefault(x => x.FieldName == pfn);

            if (pcf == null)
            {
                pcf = new ProtoField {
                    FieldName = pfn,
                    ContentId = content.Id
                };
                content.ContentFields.Add(pcf);
            }
            pcf.FieldClassTypeName = typeof(PublishingField).FullName;
            pcf.DateTimeValue      = publishedUtc;

            var unpublishedUtc = fp?.UnpublishedAt?.ToUniversalTime();
            var ucf            = content.ContentFields.FirstOrDefault(x => x.FieldName == ufn);

            if (ucf == null)
            {
                ucf = new ProtoField {
                    FieldName = ufn,
                    ContentId = content.Id
                };
                content.ContentFields.Add(ucf);
            }
            ucf.FieldClassTypeName = typeof(PublishingField).FullName;
            ucf.DateTimeValue      = unpublishedUtc;
        }
        public IDictionary <string, ContentModifierForm> BuildModifierForm(ProtoContent content,
                                                                           ContentModifyOperation operation, ContentType contentType)
        {
            var fps = new Dictionary <string, ContentModifierForm>();

            foreach (var fd in contentType.Fields)
            {
                if (!operation.IsAny(fd.Config.HandledModifyOperationNames))
                {
                    continue;
                }
                var fdr   = fd.FieldFinder();
                var mod   = fd.FieldModifier();
                var field = operation.Is(CommonFieldModifyOperationsProvider.CREATE_OPERATION_NAME)
                    ? Activator.CreateInstance(fd.ModelType).DirectCastTo <ContentField>()
                    : fdr.GetModel(content, fd);
                var form = mod.BuildModifierForm(field, operation, content, fd);
                if (form != null)
                {
                    fps.Add(fd.FieldName, form);
                }
            }
            return(fps);
        }
示例#22
0
        public void PerformModification(ContentModifierForm modifierForm, ContentField field,
                                        ContentModifyOperation operation,
                                        ProtoContent content, ContentFieldDefinition fieldDefinition)
        {
            if (operation.Is(CommonFieldModifyOperationsProvider.CREATE_OPERATION_NAME))
            {
                content.CreatedUtc = DateTime.UtcNow;
                content.UpdatedUtc = content.CreatedUtc;
                _dbContext.ProtoContents.Add(content);
            }
            else if (operation.Is(CommonFieldModifyOperationsProvider.DELETE_OPERATION_NAME))
            {
                content.UpdatedUtc = DateTime.UtcNow;
                _dbContext.ProtoContents.Remove(content);
            }
            else
            {
                content.UpdatedUtc = DateTime.UtcNow;
            }
            if (string.IsNullOrWhiteSpace(content.CreatedByUserId))
            {
                var rctx = ProtoCmsRuntimeContext.Current;
                if (rctx.CurrentUser != null)
                {
                    content.CreatedByUserId = rctx.CurrentUser.Id;
                }
            }
            var creator = _userMgr.ProtoUsers.FirstOrDefault(x => x.Id == content.CreatedByUserId);

            if (creator != null)
            {
                content.CreatedByUserName        = creator.UserName;
                content.CreatedByUserDisplayName = creator.DisplayName;
            }
            _dbContext.ThisDbContext().SaveChanges();
        }
        public VueComponentDefinition[] ConvertFormToVues(ContentModifierForm modifierForm,
                                                          ContentField field,
                                                          ContentModifyOperation operation,
                                                          ProtoContent content, ContentFieldDefinition fieldDefinition)
        {
            var vues = new List <VueComponentDefinition> {
                new VueComponentDefinition {
                    Name  = "cms-form-field-datetime",
                    Props = new {
                        label     = "Published At",
                        valuePath = nameof(PublishingFieldModifierForm.PublishedAt)
                    }
                },
                new VueComponentDefinition {
                    Name  = "cms-form-field-datetime",
                    Props = new {
                        label     = "Unpublished At",
                        valuePath = nameof(PublishingFieldModifierForm.UnpublishedAt)
                    }
                }
            };

            return(vues.ToArray());
        }
        public FurtherValidationResult ValidateModifierForm(IDictionary <string, ContentModifierForm> modifierForm,
                                                            ProtoContent content, ContentModifyOperation operation, ContentType contentType)
        {
            var result = new FurtherValidationResult();

            foreach (var fd in contentType.Fields)
            {
                if (!operation.IsAny(fd.Config.HandledModifyOperationNames))
                {
                    continue;
                }
                var fdr   = fd.FieldFinder();
                var mod   = fd.FieldModifier();
                var field = operation.Is(CommonFieldModifyOperationsProvider.CREATE_OPERATION_NAME)
                    ? Activator.CreateInstance(fd.ModelType).DirectCastTo <ContentField>()
                    : fdr.GetModel(content, fd);
                modifierForm.TryGetValue(fd.FieldName, out var form);
                if (form == null)
                {
                    var testForm = mod.BuildModifierForm(field, operation, content, fd);
                    if (testForm != null)
                    {
                        throw new HttpException(400, $"ProtoCMS: content modifier form for field '{fd.FieldName}' " +
                                                $"is required and must be an instance of " +
                                                $"'{testForm.GetType().FullName}'.");
                    }
                    continue;
                }
                foreach (var fvkv in fd.Config.Validators)
                {
                    var hasValidator = false;
                    foreach (var dv in ContentFieldValidator.DefinedValidators)
                    {
                        if (dv.Name != fvkv.Key || !dv.HandledFormTypes.Contains(form.GetType()))
                        {
                            continue;
                        }
                        hasValidator = true;
                        var valCfg = fvkv.Value ?? Activator.CreateInstance(dv.ConfigType)
                                     .DirectCastTo <ContentFieldValidatorConfiguration>();
                        if (operation.IsAny(valCfg.ModifyOperationNamesThatIgnoreValidation))
                        {
                            continue;
                        }
                        if (valCfg.GetType() != dv.ConfigType)
                        {
                            throw new InvalidOperationException(
                                      $"ProtoCMS: content field validator '{dv.Name}' (for validating form " +
                                      $"'{form.GetType().FullName}') can only accept config instance of type " +
                                      $"'{dv.ConfigType.FullName}'.");
                        }
                        var valRes = dv.ValidateForm(form, valCfg, contentType, fd);
                        if (valRes != null)
                        {
                            foreach (var kv in valRes.Errors)
                            {
                                if (kv.Value == null || kv.Value.Length == 0)
                                {
                                    continue;
                                }
                                foreach (var err in kv.Value)
                                {
                                    result.AddError($"{fd.FieldName}.{kv.Key}", err);
                                }
                            }
                        }
                    }
                    if (!hasValidator)
                    {
                        throw new InvalidOperationException($"ProtoCMS: there's no content field validator " +
                                                            $"named '{fvkv.Key}' that can handle form " +
                                                            $"'{form.GetType().FullName}' validation.");
                    }
                }
            }
            return(result);
        }
 protected void CheckUserHasPermissionToModifyContent(ProtoCmsRuntimeContext rctx,
                                                      ModifyContentPermission modPerm, ContentModifyOperation modOp, ContentType ct)
 {
     if (!rctx.UserHasPermission(modPerm.Id))
     {
         throw new HttpException(403, $"ProtoCMS: user is forbidden to perform modify operation " +
                                 $"'{modOp.Name}' on content type '{ct.Id}'.");
     }
 }
 public void PerformModification(ContentModifierForm modifierForm, ContentField field,
                                 ContentModifyOperation operation,
                                 ProtoContent content, ContentFieldDefinition fieldDefinition)
 {
 }
 public VueComponentDefinition[] ConvertFormToVues(ContentModifierForm modifierForm, ContentField field,
                                                   ContentModifyOperation operation, ProtoContent content, ContentFieldDefinition fieldDefinition)
 {
     return(null);
 }
 public ContentModifierForm BuildModifierForm(ContentField field, ContentModifyOperation operation,
                                              ProtoContent content,
                                              ContentFieldDefinition fieldDefinition)
 {
     return(null);
 }