name: Form slug: form type: plugin version: 9.1.5 description: Enables forms handling and processing icon: check-square author: name: Team Grav email: devs@getgrav.org url: https://getgrav.org keywords: plugin, form homepage: https://github.com/getgrav/grav-plugin-form bugs: https://github.com/getgrav/grav-plugin-form/issues license: MIT compatibility: grav: ['1.7', '2.0'] dependencies: - { name: grav, version: ">=1.7.51" } - { name: php, version: ">=8.1" } form: validation: strict fields: enabled: type: hidden label: PLUGIN_ADMIN.PLUGIN_STATUS highlight: 1 default: 0 options: 1: PLUGIN_ADMIN.ENABLED 0: PLUGIN_ADMIN.DISABLED validate: type: bool general: type: section title: PLUGIN_FORM.GENERAL fields: debug: type: toggle label: Debug highlight: 1 default: 0 options: 1: PLUGIN_ADMIN.ENABLED 0: PLUGIN_ADMIN.DISABLED validate: type: bool built_in_css: type: toggle label: PLUGIN_FORM.USE_BUILT_IN_CSS highlight: 1 default: 1 options: 1: PLUGIN_ADMIN.ENABLED 0: PLUGIN_ADMIN.DISABLED validate: type: bool inline_css: type: toggle label: PLUGIN_FORM.USE_INLINE_CSS highlight: 1 default: 1 options: 1: PLUGIN_ADMIN.ENABLED 0: PLUGIN_ADMIN.DISABLED validate: type: bool refresh_prevention: type: toggle label: PLUGIN_FORM.REFRESH_PREVENTION help: PLUGIN_FORM.REFRESH_PREVENTION_HELP highlight: 1 default: 0 options: 1: PLUGIN_ADMIN.ENABLED 0: PLUGIN_ADMIN.DISABLED validate: type: bool client_side_validation: type: toggle label: PLUGIN_FORM.CLIENT_SIDE_VALIDATION help: PLUGIN_FORM.CLIENT_SIDE_VALIDATION_HELP highlight: 1 default: 1 options: 1: PLUGIN_ADMIN.ENABLED 0: PLUGIN_ADMIN.DISABLED validate: type: bool inline_errors: type: toggle label: PLUGIN_FORM.INLINE_ERRORS help: PLUGIN_FORM.INLINE_ERRORS_HELP highlight: 0 default: 0 options: 1: PLUGIN_ADMIN.ENABLED 0: PLUGIN_ADMIN.DISABLED validate: type: bool modular_form_fix: type: toggle label: PLUGIN_FORM.MODULAR_FORM_FIX help: PLUGIN_FORM.MODULAR_FORM_FIX_HELP highlight: 1 default: 1 options: 1: PLUGIN_ADMIN.ENABLED 0: PLUGIN_ADMIN.DISABLED validate: type: bool files: type: section title: PLUGIN_FORM.FILES fields: files.multiple: type: toggle label: PLUGIN_FORM.ALLOW_MULTIPLE help: PLUGIN_FORM.ALLOW_MULTIPLE_HELP highlight: 1 default: 0 options: 1: PLUGIN_ADMIN.ENABLED 0: PLUGIN_ADMIN.DISABLED validate: type: bool files.limit: type: text size: x-small label: PLUGIN_FORM.LIMIT help: PLUGIN_FORM.LIMIT_HELP default: 10 validate: type: number min: 1 files.destination: type: text size: large label: PLUGIN_FORM.DESTINATION help: PLUGIN_FORM.DESTINATION_HELP default: "@self" files.accept: type: selectize size: large label: PLUGIN_FORM.ACCEPT help: PLUGIN_FORM.ACCEPT_HELP classes: fancy default: - image/* validate: type: commalist files.filesize: type: text label: PLUGIN_FORM.FILESIZE help: PLUGIN_FORM.FILESIZE_HELP size: x-small default: 5 validate: type: number min: 0 files.avoid_overwriting: type: toggle label: PLUGIN_FORM.AVOID_OVERWRITING help: PLUGIN_FORM.AVOID_OVERWRITING_HELP highlight: 0 default: 0 options: 1: PLUGIN_ADMIN.ENABLED 0: PLUGIN_ADMIN.DISABLED validate: type: bool files.random_name: type: toggle label: PLUGIN_FORM.RANDOM_NAME help: PLUGIN_FORM.RANDOM_NAME_HELP highlight: 0 default: 0 options: 1: PLUGIN_ADMIN.ENABLED 0: PLUGIN_ADMIN.DISABLED validate: type: bool recaptcha: type: section title: PLUGIN_FORM.RECAPTCHA fields: recaptcha.version: type: select label: PLUGIN_FORM.RECAPTCHA_VERSION default: 2-checkbox options: 2-checkbox: PLUGIN_FORM.RECAPTCHA_VERSION_V2_CHECKBOX 2-invisible: PLUGIN_FORM.RECAPTCHA_VERSION_V2_INVISIBLE 3: PLUGIN_FORM.RECAPTCHA_VERSION_V3_LATEST recaptcha.theme: type: select label: PLUGIN_FORM.RECAPTCHA_THEME default: light options: light: PLUGIN_FORM.RECAPTCHA_THEME_LIGHT dark: PLUGIN_FORM.RECAPTCHA_THEME_DARK recaptcha.site_key: recaptcha.site_key: type: text label: PLUGIN_FORM.RECAPTCHA_SITE_KEY help: PLUGIN_FORM.RECAPTCHA_SITE_KEY_HELP default: "" recaptcha.secret_key: type: text label: PLUGIN_FORM.RECAPTCHA_SECRET_KEY help: PLUGIN_FORM.RECAPTCHA_SECRET_KEY_HELP default: "" turnstile_captcha: type: section title: PLUGIN_FORM.TURNSTILE_CAPTCHA fields: turnstile.theme: type: select label: PLUGIN_FORM.RECAPTCHA_THEME default: light options: light: PLUGIN_FORM.RECAPTCHA_THEME_LIGHT dark: PLUGIN_FORM.RECAPTCHA_THEME_DARK turnstile.site_key: type: text label: PLUGIN_FORM.RECAPTCHA_SITE_KEY help: PLUGIN_FORM.RECAPTCHA_SITE_KEY_HELP default: "" turnstile.secret_key: type: text label: PLUGIN_FORM.RECAPTCHA_SECRET_KEY help: PLUGIN_FORM.RECAPTCHA_SECRET_KEY_HELP default: "" cap_captcha: type: section title: Cap (Proof-of-Work) Captcha fields: cap.mode: type: select label: Default Mode help: "Invisible solves proof-of-work in the background on submit. Checkbox shows the cap.js widget and requires a user click." default: invisible options: invisible: Invisible (auto-solve on submit) checkbox: Checkbox widget cap.storage: type: select label: Token Storage Backend help: "Where to persist outstanding challenges and issued tokens. Grav cache is recommended for production." default: grav-cache options: grav-cache: Grav Cache (PSR-16) filesystem: Filesystem (user/data/cap) cap.challenge_count: type: number label: Challenge Count help: "Number of sub-challenges per captcha. Higher = more work for client." default: 50 size: small validate: min: 1 max: 200 type: number cap.challenge_size: type: number label: Salt Size help: "Length of each sub-challenge salt in hex characters." default: 32 size: small validate: min: 8 max: 64 type: number cap.challenge_difficulty: type: number label: Difficulty help: "Target hex-prefix length each SHA-256 solution must match. Higher = slower solve." default: 4 size: small validate: min: 1 max: 8 type: number cap.expires_ms: type: number label: Challenge TTL (ms) help: "How long an issued challenge remains redeemable." default: 600000 size: small validate: min: 30000 type: number basic_captcha: type: section title: PLUGIN_FORM.BASIC_CAPTCHA fields: basic_captcha.image.width: type: number label: PLUGIN_FORM.BASIC_CAPTCHA_BOX_WIDTH default: 135 append: px size: small validate: min: 100 max: 500 type: number basic_captcha.image.height: type: number label: PLUGIN_FORM.BASIC_CAPTCHA_BOX_HEIGHT default: 40 append: px size: small validate: min: 30 max: 200 type: number basic_captcha.chars.font: type: select label: PLUGIN_FORM.BASIC_CAPTCHA_FONT default: zxx-noise.ttf options: "zxx-noise.ttf": zxx-Noise "zxx-xed.ttf": zxx-Xed "zxx-camo.ttf": zxx-Camo "zxx-sans.ttf": zxx-Sans basic_captcha.chars.size: type: range label: PLUGIN_FORM.BASIC_CAPTCHA_SIZE default: 24 append: px validate: min: 12 max: 32 step: 2 basic_captcha.chars.bg: type: colorpicker size: small label: PLUGIN_FORM.BASIC_CAPTCHA_BG_COLOR default: "#ffffff" basic_captcha.chars.text: type: colorpicker size: small label: PLUGIN_FORM.BASIC_CAPTCHA_TEXT_COLOR default: "#000000" basic_captcha.chars.start_x: type: number label: PLUGIN_FORM.BASIC_CAPTCHA_START_X default: 5 append: px size: small validate: min: 0 type: number basic_captcha.chars.start_y: type: number label: PLUGIN_FORM.BASIC_CAPTCHA_START_Y default: 30 append: px size: small validate: min: 0 type: number basic_captcha.type: type: elements label: PLUGIN_FORM.BASIC_CAPTCHA_TYPE default: "characters" size: medium options: characters: Random Characters math: Math Puzzle fields: characters: type: element fields: basic_captcha.chars.length: type: range label: PLUGIN_FORM.BASIC_CAPTCHA_LENGTH default: 6 validate: min: 4 max: 12 append: characters math: type: element fields: basic_captcha.math.min: type: number label: PLUGIN_FORM.BASIC_CAPTCHA_MATH_MIN default: 1 size: small validate: min: 0 type: number basic_captcha.math.max: type: number label: PLUGIN_FORM.BASIC_CAPTCHA_MATH_MAX default: 10 size: small validate: min: 1 type: number basic_captcha.math.operators: type: selectize selectize: options: - value: "+" text: "+ Addition" - value: "-" text: "- Subtraction" - value: "*" text: "x Multiplication" - value: "/" text: "/ Division" label: PLUGIN_FORM.BASIC_CAPTCHA_MATH_OPERATORS validate: type: commalist