# Global Survey Settings This document describes the global "Forms Settings" for the Plone SurveyJS add-on. It is based on the available screenshots and covers all tabs shown in that UI. Defaults reflect the values visible in the screenshots; adjust them if your installation ships different defaults. ## SurveyJS These settings control licensing for the SurveyJS components. | Setting | Possible values | Default value | Explanation | | --- | --- | --- | --- | | SurveyJS License Key | SurveyJS license string (text) / empty | Empty (unless configured) | Optional license key used to unlock commercial SurveyJS components. Leave empty to run in evaluation or open-source mode. Store the key exactly as provided by SurveyJS; whitespace or line breaks will invalidate it. | ## AI Provider These settings select which LLM provider is used for AI-assisted form generation and how it is authenticated. | Setting | Possible values | Default value | Explanation | | --- | --- | --- | --- | | AI Model | Model identifier string | `gpt-5-nano` | Name of the model passed to the LLM provider when generating forms. Use provider-specific identifiers (e.g., `gpt-4`, `claude-3-sonnet-20240229`). Selecting a larger model typically improves output quality but may increase latency and cost. | | API Key | Provider API key (secret text) / empty | Empty | Secret key used to authenticate with the selected LLM provider. Stored securely by the add-on. If empty, AI generation will fail unless the provider is configured via environment variables or another external mechanism. | | Ollama URL | URL (HTTP/HTTPS) / empty | Empty | Optional base URL of an Ollama server (for example, `http://localhost:11434`). When set, the AI generator uses Ollama instead of the default cloud provider. Leave empty to keep the default provider behavior. | ## AI Prompts These settings define the prompt scaffolding used around the user's input when building a form. All fields are optional and can be used independently. | Setting | Possible values | Default value | Explanation | | --- | --- | --- | --- | | Prompt before | Multi-line text / empty | Empty | Instructions inserted before the user's prompt. Use this to enforce global rules, tone, or formatting requirements for generated forms. Keeping it short reduces the risk of prompt conflicts. | | Default prompt | Multi-line text / empty | Empty | Prefilled text shown to the user as a starting prompt. This does not automatically prepend or append to the user's final prompt; it only provides default input text. | | Prompt after | Multi-line text / empty | Empty | Instructions appended after the user's prompt. Use this to add constraints or mandatory output structure while still letting users supply their own content. | ## Logging These settings control what additional client metadata is stored alongside form submissions. | Setting | Possible values | Default value | Explanation | | --- | --- | --- | --- | | Log IP addresses | On / Off | Off | When enabled, the client IP address is stored as part of the submission. This can help with abuse detection and audit trails but may introduce privacy and compliance requirements. | | Log user agent | On / Off | Off | When enabled, the browser user-agent string is stored with the submission. Useful for diagnostics and statistics; consider privacy implications before enabling. | ## Result Storage These settings control where survey submissions are stored. | Setting | Possible values | Default value | Explanation | | --- | --- | --- | --- | | Result storage backend | `Plone (ZODB)` / other installed backends | `Plone (ZODB)` | Selects the storage backend for survey results. The default stores results in Plone's ZODB. Additional backends may be available depending on installed add-ons. | | Database URI | SQLAlchemy database URI / empty | `sqlite:///var/surveyjs-results.db` | Database connection string used by SQL-based storage backends. Examples include `sqlite:///var/surveyjs-results.db` or `postgresql+psycopg2://user:pass@host/db`. Ignored when the ZODB backend is selected. | ## Security These settings secure form submissions with short-lived authenticity tokens. | Setting | Possible values | Default value | Explanation | | --- | --- | --- | --- | | Enable authenticity token | On / Off | On | Requires a short-lived authenticity token for each submission. Enable this to protect against unauthenticated or replayed submissions. When disabled, submissions can be posted without a token. | | Authenticity token secret | Secret text (HMAC key) | Configured secret | HMAC secret used to sign authenticity tokens. Keep this private and rotate it only with careful coordination, as rotating the secret invalidates existing tokens. | | Authenticity token TTL (seconds) | Positive integer (seconds) | `3600` | Lifetime of authenticity tokens in seconds. Shorter TTLs reduce replay risk but require clients to refresh tokens more often. | | Authenticity token issuer | Text identifier | `zopyx.surveyjs` | Issuer claim embedded in tokens. Use a stable, unique identifier for your site or add-on instance. | | Authenticity token audience | Text identifier | `zopyx.surveyjs` | Audience claim embedded in tokens. Match this to the expected token consumer; using a distinct value helps prevent token reuse across environments. | | Authenticity token cache path | Filesystem path | `var/token_cache.db` | Path to the disk-backed cache used to store token metadata. Ensure the path is writable by the Plone process and protected from public access. |