Changeset 3441872
- Timestamp:
- 01/18/2026 11:56:30 AM (7 weeks ago)
- Location:
- griffinforms-form-builder
- Files:
-
- 2 edited
-
tags/2.1.4.0/readme.txt (modified) (2 diffs)
-
trunk/readme.txt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
griffinforms-form-builder/tags/2.1.4.0/readme.txt
r3439970 r3441872 13 13 == Description == 14 14 15 GriffinForms is a WordPress form builder built for people who want more than a basic contact form. You can create multi-step forms with a real layout system (pages, rows, and columns), reuse fields across forms, validate and conditionally show content, and manage submissions from a dedicated admin area.16 17 If you are searching for a *WordPress form builder* that can handle everything from a simple contact form to multi-page onboarding and payment workflows, GriffinForms focuses on three things: a structured builder, clean data, and admin tools that help you run forms in production.18 19 ### Quick Start ( How to add a form to WordPress)15 GriffinForms is a contact form plugin and WordPress form builder built for structured, multi-step forms. It uses a drag and drop layout system (pages, rows, and columns), supports conditional logic, and stores submissions on your site so your data stays under your control. 16 17 If you need a WordPress form plugin that can handle everything from a simple contact form to a multi step form workflow, GriffinForms focuses on clean layouts, predictable form behavior, and practical admin tools. 18 19 ### Quick Start (Add a form in minutes) 20 20 1. Create a form in **GriffinForms → Forms**. 21 2. Add pages/rows/columns, then insert fields from the field library. 22 3. Publish the form using the shortcode: `[griffinforms_form id="123"]`, or insert the **GriffinForms** block in the WordPress block editor. 23 24 Tip: start with a single-page contact form, then expand into multi-step forms as you add conditional logic, uploads, and integrations. 25 26 ### A Structured Drag-and-Drop Builder (Pages, Rows, Columns) 27 Many “form builder” plugins treat layout as an afterthought. GriffinForms starts with layout: 28 - **Pages** for true multi-step (multi-page) forms with step navigation. 29 - **Rows and columns** so you can build structured forms without custom CSS. 30 - **Reusable fields** so you can maintain one field (like “Address” or “Company”) and insert it into multiple forms. 31 - **Folders and organization** tools to keep larger form libraries tidy as you add more workflows over time. 32 33 This approach is useful when you need forms that behave like small workflows (onboarding, applications, requests) instead of a single “send us a message” page. You can create a short first step, progressively ask for details, and keep each page focused so users are more likely to complete the form. 34 35 Because GriffinForms uses a row/column grid, you can build clean layouts for common patterns like “first name + last name”, “city + state + ZIP”, and grouped options without custom HTML. 36 37 ### Key Features (Benefit-first) 38 - **Multi-step forms**: build multi-page flows for longer applications, onboarding, or checkout-style steps. 39 - **Conditional logic**: WordPress conditional logic for a WordPress form builder — show/hide fields or rows, change labels/values, swap success messages or redirects, toggle submit state, and display form notices. 40 - **Validations**: enforce required rules and common constraints so submissions stay clean. 41 - **File uploads**: accept files as part of a submission and manage uploads from the admin. 42 - **Gutenberg block**: embed forms in the block editor with a lightweight preview and quick edit links. 43 - **Payments**: collect payments through Stripe where configured (useful for donations, applications, and orders). 44 - **Email notifications**: send notifications and route delivery via Custom SMTP, SendGrid, or Mailgun. 45 - **Spam protection**: choose a CAPTCHA provider (reCAPTCHA, Cloudflare Turnstile, or hCaptcha) and enable additional anti-spam controls like honeypot and rate limiting. 46 - **Logs and monitoring**: troubleshoot integrations and submission workflows using a timeline-based log viewer. 47 - **Theme Designer**: style forms with ready-to-use presets and import/export theme configurations. 48 49 ### Who GriffinForms Is For 50 GriffinForms is built for a wide range of WordPress sites: 51 - **Site owners** who need a dependable contact form plugin that scales into onboarding, applications, and payment workflows. 52 - **Agencies** that manage multiple client sites and need reusable components, templates, and consistent admin tooling. 53 - **Developers** who prefer structured form data, clear admin screens, and predictable behavior across forms, submissions, and integrations. 54 55 ### Typical Workflows (Examples you can copy) 56 Here are common workflows people build with a WordPress form builder like GriffinForms: 57 - **Multi-step onboarding**: page 1 (contact info) → page 2 (additional details) → page 3 (confirm + submit). 58 - **Support intake with uploads**: contact info → issue details → attach screenshots/logs → submit. 59 - **Donation/payment form**: amount selection → donor details → pay via Stripe → confirmation. 60 61 These patterns work well because the form layout is structured and the submission data stays consistent. 62 63 ### Builder Workflow (From draft to published form) 64 GriffinForms is designed to keep complex forms maintainable: 65 - Start with layout (pages, rows, columns), then drop fields into place. 66 - Reorder content without breaking the structure of multi-step flows. 67 - Reuse your common fields (name/address/company) across forms so changes stay consistent. 68 - Keep large form libraries organized with folders, templates, and import/export. 69 70 If you are migrating from a basic contact form setup, GriffinForms helps you graduate to structured workflows without rebuilding everything from scratch. You can start small (a single-page contact form) and expand into multi-step forms as your site’s needs grow. 71 72 ### Conditional Logic and Validation (Cleaner submissions) 73 Conditional logic is one of GriffinForms’ strongest features for any WordPress contact form plugin. It goes beyond show/hide and lets you build adaptive form workflows in a drag-and-drop form builder: 74 - Show/hide fields or rows, or display inline messages (error, warning, info, popup). 75 - Change field values or labels, swap option groups, and adjust row headings. 76 - Change success messages or redirects, and enable/disable submit or fields. 77 - Target advanced conditions: value counts, address components, payment selections/totals, password strength, and browser time. 78 79 Validation keeps data reliable while conditional logic guides users through the right path. Together, they reduce back-and-forth because you collect the right data the first time, especially for onboarding, intake, and payment forms in a WordPress form builder. 80 81 ### File Upload Forms (Attachments without chaos) 82 File uploads are common in real workflows (applications, onboarding, support tickets). GriffinForms supports file upload fields and admin management so you can: 83 - accept uploads as part of a submission, 84 - review attachments alongside entry details, 85 - and keep storage behavior manageable through upload controls and retention settings (where configured). 86 87 ### What You Can Build (Use Cases) 88 GriffinForms is a general-purpose WordPress forms plugin. Common use cases include: 89 - **Contact forms** (simple contact pages, support requests) 90 - **Registration forms** (courses, events, internal onboarding) 91 - **Survey and feedback forms** (internal requests, complaint/feedback intake) 92 - **File upload forms** (attachments, documents, media where appropriate) 93 - **Donation and payment forms** (Stripe-enabled forms for payments) 94 95 Starter templates are included to help you begin quickly. Examples include appointment booking, course enrollment, donation forms, employee onboarding, equipment checkout requests, bug reports, and more. 96 97 ### Import/Export (Move forms between sites) 98 You can export forms as JSON and import them on another site. This is helpful when you maintain multiple WordPress sites, build reusable form systems for clients, or want a safe way to version form configurations outside the database. 99 100 ### Integrations and Settings (Where to configure everything) 101 GriffinForms provides dedicated settings pages and integration screens so you can configure behavior without editing code: 102 - Choose and configure your anti-spam provider (reCAPTCHA, Turnstile, or hCaptcha) and enable other anti-abuse controls. 103 - Configure email delivery options (Custom SMTP, SendGrid, Mailgun) so notifications are reliable. 104 - Configure Stripe for payment forms where enabled. 105 - Control logging behavior (enable/disable, message types, retention) so you capture what you need without storing unnecessary history. 106 107 If you prefer a “start with defaults” approach, you can install and build forms first, then enable only the integrations you need later. 108 109 ### Tips for Better Forms (Practical patterns) 110 If you are trying to improve form completion rates, these patterns are commonly effective: 111 - **Use multi-step forms** for long workflows: collecting information across steps is easier than one long page. 112 - **Use conditional logic** to reduce noise: show follow-up questions only when they apply. 113 - **Validate early** to prevent low-quality submissions: required rules and sensible limits reduce cleanup work. 114 - **Use spam protection strategically**: enable a CAPTCHA provider only where needed, and add honeypot/rate limiting for public-facing high-traffic forms. 115 - **Review logs when you change integrations**: if you adjust mail delivery or payment settings, logs help confirm what happened during real submissions. 116 117 These practices are especially useful for lead-generation contact forms, application forms, and payment forms where incomplete submissions have real cost. 118 119 ### Submissions and Admin Workflow (Where your data lives) 120 By default, GriffinForms stores submissions in your WordPress database on your server. File uploads are stored in the WordPress uploads directory. You can view and manage entries inside WordPress: 121 - Filter and browse submissions from the admin. 122 - Open a single submission for full detail, including payment context where applicable. 123 - Review log activity related to a form, submission, or integration when troubleshooting. 124 125 For busy sites, the submissions workflow matters as much as the builder. GriffinForms is built so admins can go from “a user reported an issue” to “I can see what happened” quickly by jumping from forms → submissions → logs. 126 127 ### Admin Screens You Will Use 128 GriffinForms provides dedicated admin screens designed around day-to-day operations: 129 - **Forms list**: manage your form library and copy shortcodes quickly. 130 - **Submissions**: review entries, drill into a single submission, and investigate user journeys. 131 - **Integrations**: configure services like Stripe and mail delivery, and review integration logs. 132 - **Logs**: open a dedicated logs list and a single log view for deeper troubleshooting. 133 134 ### Payments with Stripe (When you need checkout-style forms) 135 If you enable Stripe, you can create payment forms where users pay as part of a submission. This is useful for: 136 - donations, 137 - applications and paid signups, 138 - product-like order forms with quantities and totals. 139 140 Payment configuration includes both global settings (such as currency) and per-form/per-field configuration where available. GriffinForms also supports a “resume” workflow for payments that are completed later, so you can reconnect users to unfinished payment sessions when needed. 141 142 For admins, this means you can review submission context and payment state in one place instead of jumping between multiple dashboards. For users, it means a smoother “review and pay” experience that still fits inside a normal form workflow. 143 144 ### Email Notifications and Delivery 145 GriffinForms can send form notifications and system emails. You can deliver mail through: 146 - **Custom SMTP** (your mail server provider), 147 - **SendGrid**, or 148 - **Mailgun**. 149 150 Delivery and integration changes can also be recorded in logs to help admins diagnose configuration issues. 151 152 If you run a high-volume site, using a dedicated mail delivery provider can reduce “lost notification” issues caused by server mail configuration. GriffinForms keeps the configuration centralized so you can update delivery without editing every form. 153 154 ### Spam Protection (CAPTCHA + Anti-Abuse Controls) 155 Spam is a major reason people search for a better “contact form plugin”. GriffinForms supports multiple anti-spam layers: 156 - **CAPTCHA provider choice**: Google reCAPTCHA (v2/v3), Cloudflare Turnstile, or hCaptcha. 157 - **Honeypot**: a non-intrusive hidden field check. 158 - **Rate limiting**: submission throttling to reduce automated abuse. 159 160 You can apply these controls to keep simple contact forms usable while still protecting high-value workflows like file upload forms and payment forms. 161 162 ### Logs and Monitoring (Understand what happened and why) 163 When logs are enabled, GriffinForms records important activity (submission workflows, integration events, and internal actions) so you can: 164 - review a timeline of what occurred, 165 - spot failures quickly, 166 - understand which integration or subsystem produced an event, 167 - and see upcoming scheduled actions (jobs) inline where available. 168 169 This is especially useful when debugging email delivery, payment events, or anti-spam issues in high-traffic forms. 170 171 If you manage multiple forms, logs help you answer questions like: 172 - “Did the submission reach the server?” 173 - “Which integration handled the request?” 174 - “Was an action scheduled for later, and did it complete?” 175 176 ### Performance at Scale (Large submission and log histories) 177 On sites with large numbers of submissions, admin performance matters. GriffinForms includes tools designed to keep day-to-day work responsive: 178 - Log views can be loaded in batches to avoid slow admin pages when histories get large. 179 - Log retention settings let you control how much history is stored. 180 - Upcoming scheduled actions (jobs) can be shown inline so you can understand what is queued next. 181 182 If you primarily build simple contact forms today, these features may not matter immediately. If you run multiple high-traffic forms or rely on integrations (mail delivery, CAPTCHA, payments), they help keep troubleshooting practical over time. 183 184 ### Design Choices (Why this WordPress form builder stays maintainable) 185 GriffinForms is designed around a few practical choices: 186 - **Layout-first builder**: pages, rows, and columns help you build clean multi-step forms without fighting the editor. 187 - **Reusable building blocks**: reusable fields and templates reduce duplication as your form library grows. 188 - **Admin-first operations**: submissions, logs, and integrations are first-class screens, not hidden behind “debug mode”. 189 - **Optional external services**: you choose when to enable payments or CAPTCHA providers, and you can keep data on your server by default. 190 191 These choices help GriffinForms work as both a straightforward contact form plugin and a flexible WordPress form builder for more complex workflows. They also reduce long-term maintenance, because forms stay organized and admin troubleshooting stays centralized. This is especially helpful for teams managing multiple sites and agencies handling client work. 192 193 ### Theme Designer (Make forms match your site) 194 Your forms should match your brand. The Theme Designer helps you style forms without rewriting templates: 195 - Start with curated presets. 196 - Customize typography, spacing, and states. 197 - Import/export theme configurations so you can reuse designs across sites. 198 199 If you manage multiple forms on the same site, a consistent theme reduces “form sprawl” and keeps your contact form plugin looking like part of your website instead of a bolt-on widget. 200 201 Themes can be used to standardize how inputs, labels, buttons, and summaries look across different forms, which is especially helpful when you publish multiple multi-step forms across landing pages, documentation, or support flows. 202 203 ### Use GriffinForms Without External Services 204 GriffinForms stores submissions on your server by default and only uses third-party services when you enable them. For example, you can: 205 - run forms without payments, 206 - use WordPress’ default mail delivery or your own SMTP provider, 207 - and choose whether to enable CAPTCHA. 208 209 If you do enable external providers, details are documented in the External Services section below. 210 211 ### Support and Troubleshooting (What to check first) 212 If something is not working as expected (missing email notifications, payment issues, CAPTCHA failures), these steps often help: 213 1. Confirm the integration is enabled and the required keys are saved (Stripe/CAPTCHA/mail provider). 214 2. Submit a quick test submission and then check the relevant logs (if logging is enabled). 215 3. Check that your server can make outbound HTTPS requests to enabled providers. 216 4. If you use caching or security plugins, temporarily exclude the form page from aggressive caching/minification and test again. 217 218 When sharing logs or screenshots for support, avoid posting secret keys or private customer information. 219 220 ### Roadmap (High-level) 221 Future updates may expand conditional logic workflows, add more starter templates, and improve admin tooling. Timelines may change. 21 2. Build your layout with pages, rows, and columns, then add fields. 22 3. Publish with the shortcode `[griffinforms_form id="123"]`. 23 24 ### Key Features (short and practical) 25 - **Drag and drop form builder**: build structured forms with pages, rows, columns, and multiple field types. 26 - **Multi-page forms**: add steps for longer workflows with clear page navigation. 27 - **Conditional logic**: show or hide fields and sections based on user input. 28 - **File upload fields**: collect documents or screenshots when your workflow needs attachments. 29 - **Submissions in WordPress**: view entries in the admin and keep data in your database. 30 - **Themes**: apply form themes so your contact form matches your site design. 31 - **Payments (Stripe)**: collect payments when enabled and configured. 32 - **CAPTCHA options**: support reCAPTCHA, Cloudflare Turnstile, or hCaptcha. 33 - **Email delivery**: send notifications using WordPress mail or configured providers like Custom SMTP or SendGrid. 34 35 ### Use Cases (what people build) 36 - Contact form pages and support intake 37 - Registration and request forms 38 - Multi step form wordpress workflows with multiple pages 39 - File upload forms for applications or support tickets 40 41 ### Layout-first builder 42 GriffinForms treats layout as a core part of form building. Use pages to split long flows, rows to group content, and columns to control alignment. This structure makes complex forms easier to maintain and helps users complete longer submissions without fatigue. 43 44 ### Conditional logic for smarter forms 45 Conditional logic lets you build adaptive forms that respond to user input. Use it to show or hide fields, simplify longer questionnaires, or guide users through the right path based on their selections. 46 47 ### Submissions and data 48 Submissions are stored in your WordPress database. You can review entries from the admin area, and logs are available for troubleshooting when enabled. 49 50 ### Payments when you need them 51 If you enable Stripe, you can build payment forms that collect payments as part of a submission. This is useful for donations, paid applications, and simple order-style forms. 52 53 ### Spam protection 54 Choose a CAPTCHA provider that fits your site. GriffinForms supports Google reCAPTCHA, Cloudflare Turnstile, and hCaptcha so you can add spam protection without locking every form behind a heavy challenge. 55 56 ### Email notifications 57 Send admin notifications or autoresponders using WordPress mail or a configured provider such as Custom SMTP or SendGrid. 58 59 ### Privacy and external services 60 By default, GriffinForms stores form data on your site. External services are only used when you enable them (payments, CAPTCHA, or email delivery). See the External Services section below for details. 222 61 223 62 ### External Services 224 GriffinForms optionally uses external services for enhanced functionality: 225 226 1. **Google reCAPTCHA** 227 If enabled, sends the reCAPTCHA token and user IP to Google to verify human input. 228 Service provider: Google LLC 229 - [Terms](https://www.google.com/intl/en/policies/terms/) 230 - [Privacy](https://www.google.com/intl/en/policies/privacy/) 231 232 2. **Stripe** 233 If enabled, payment-related data is sent to Stripe to process transactions (for example, payment intent metadata and transaction context needed to complete payment). 234 Service provider: Stripe, Inc. 235 - [Terms](https://stripe.com/legal) 236 - [Privacy](https://stripe.com/privacy) 237 238 3. **Cloudflare Turnstile** 239 If enabled, Turnstile tokens and visitor metadata are sent to Cloudflare for bot verification. 240 Service provider: Cloudflare, Inc. 241 - [Terms](https://www.cloudflare.com/terms/) 242 - [Privacy](https://www.cloudflare.com/privacypolicy/) 243 244 4. **hCaptcha** 245 If enabled, the hCaptcha token and user interaction data are sent to hCaptcha for verification. 246 Service provider: Intuition Machines, Inc. (hCaptcha) 247 - [Terms](https://www.hcaptcha.com/terms) 248 - [Privacy](https://www.hcaptcha.com/privacy) 249 250 5. **SendGrid** 251 If configured, emails are routed through SendGrid using email content and metadata. 252 Service provider: SendGrid (Twilio) 253 - [Terms](https://www.twilio.com/legal/tos) 254 - [Privacy](https://www.twilio.com/legal/privacy) 255 256 6. **Mailgun** 257 If configured, outbound emails (recipients, content, metadata) are sent to Mailgun’s REST API for delivery. 258 Service provider: Mailgun Technologies, Inc. 259 - [Terms](https://www.mailgun.com/legal/terms/) 260 - [Privacy](https://www.mailgun.com/legal/privacy-policy/) 63 GriffinForms can connect to these third-party services when enabled: 64 - **Google reCAPTCHA** (spam protection): https://www.google.com/intl/en/policies/terms/ and https://www.google.com/intl/en/policies/privacy/ 65 - **Stripe** (payments): https://stripe.com/legal and https://stripe.com/privacy 66 - **Cloudflare Turnstile** (spam protection): https://www.cloudflare.com/terms/ and https://www.cloudflare.com/privacypolicy/ 67 - **hCaptcha** (spam protection): https://www.hcaptcha.com/terms and https://www.hcaptcha.com/privacy 68 - **SendGrid** (email delivery): https://www.twilio.com/legal/tos and https://www.twilio.com/legal/privacy 69 - **Mailgun** (email delivery): https://www.mailgun.com/legal/terms/ and https://www.mailgun.com/legal/privacy-policy/ 70 71 ### Learn more 72 - Documentation: https://griffinforms.com/docs/ 73 - Templates: https://griffinforms.com/templates/ 74 - Releases: https://griffinforms.com/releases/ 75 - Privacy: https://griffinforms.com/privacy.php 261 76 262 77 == Installation == … … 268 83 == Frequently Asked Questions == 269 84 270 = How do I add a form to WordPress? = 271 Create a form, then embed it using the shortcode `[griffinforms_form id="123"]` in any post or page (including inside a Shortcode block). 272 273 = Does GriffinForms work with Gutenberg or page builders? = 85 = How do I add a contact form to WordPress? = 86 Create a form in GriffinForms, then embed it with the shortcode `[griffinforms_form id="123"]` in any post or page. 87 88 = Can I build multi-step (multi-page) forms? = 89 Yes. Use pages in the builder to create multi-step forms with navigation. 90 91 = Does GriffinForms support conditional logic? = 92 Yes. You can show or hide fields based on user input. 93 94 = Can I collect file uploads? = 95 Yes. Add a File Upload field to accept documents or media with a submission. 96 97 = How do I reduce spam (reCAPTCHA/Turnstile/hCaptcha)? = 98 Choose a CAPTCHA provider (reCAPTCHA, Cloudflare Turnstile, or hCaptcha) and enable it in the integrations settings. 99 100 = Where are submissions stored? = 101 Submissions are stored in your WordPress database. File uploads are stored in the WordPress uploads directory. 102 103 = Does it work with Gutenberg or page builders? = 274 104 Yes. Use the shortcode in the block editor or your page builder’s shortcode/widget block. 275 105 276 = Can I build a contact form without coding? = 277 Yes. Build the form with drag-and-drop and publish it using the shortcode. 278 279 = Is GriffinForms free? = 280 Yes. The plugin exposes the full feature set with no paid tiers or add-ons. 281 282 = Can I reuse fields across forms? = 283 Yes. Reusable fields let you create an element once and insert it into any form. 284 285 = Does GriffinForms support reCAPTCHA? = 286 Yes. Both reCAPTCHA v2 and v3 are supported. You can also use Cloudflare Turnstile or hCaptcha. 287 288 = How do I reduce spam submissions? = 289 Choose a CAPTCHA provider (reCAPTCHA, Turnstile, or hCaptcha) and optionally enable honeypot and rate limiting in the Antispam settings. 290 291 = Can I integrate with SendGrid? = 292 Yes. Provide an API key to route email notifications through SendGrid. You can also deliver mail via Mailgun or Custom SMTP. 293 294 = Does GriffinForms support payments? = 295 Yes. The Payment field lets you sell products with quantity controls, tax settings, and Stripe on-site checkout. Payment gateway options are managed in the Payments settings tab and each integration’s modal. 296 297 = Do I need Stripe to use GriffinForms? = 298 No. Payments are optional. You can use GriffinForms for contact forms, application forms, and file upload workflows without enabling Stripe. 299 300 = Can I validate fields with patterns or limits? = 301 Yes. Required rules, regex patterns, numeric limits, date ranges, and database uniqueness checks are available. 302 303 = Does GriffinForms support multi-page forms? = 304 Yes. Multi-page layouts are built in. 305 306 = Can I save incomplete submissions? = 307 Yes. Partial submissions are stored automatically. 308 309 = Where do I view submissions? = 310 Submissions are available from the GriffinForms admin menu. You can browse entries and open a single submission for full details. 311 312 = Is there a way to organize forms as they grow? = 313 Yes. Forms can be grouped into folders from the admin interface. 314 315 = Can I export and import forms? = 316 Yes. Forms export to JSON and can be re-imported on other sites. 317 318 = Can I customize the email design? = 319 Yes. HTML headers and footers can be added to outgoing emails. 320 321 = Does GriffinForms support file uploads and email notifications? = 322 Yes. File upload fields are supported, and notifications can be sent via SMTP, SendGrid, or Mailgun. 323 324 = Where is my form data stored? = 325 Submissions are stored in your WordPress database on your server. File uploads are stored in the WordPress uploads directory. If you enable external services, data is sent to those providers for processing. 326 327 = Where can I see logs? = 328 If logging is enabled, you can review logs from dedicated admin log screens and in relevant contexts like submissions and integrations. 329 330 = Can I disable logging? = 331 Yes. Logging can be toggled in GriffinForms settings. When disabled, log views will show a helpful message instead of attempting to load logs. 332 333 = Does GriffinForms send data to third-party services? = 334 Only if you enable an external provider (CAPTCHA, email delivery, or payments). See the External Services section for details. 106 = Can I send emails via SMTP/SendGrid/Mailgun? = 107 Yes. Configure Custom SMTP, SendGrid, or Mailgun for email delivery. 108 109 = Do I need Stripe to use payments? = 110 Stripe is required for payment processing. If you do not enable Stripe, you can still use GriffinForms for non-payment forms. 111 112 = Where can I find documentation? = 113 See the docs at https://griffinforms.com/docs/. 114 115 = Is GriffinForms free? = 116 Yes. The core plugin provides the full feature set with no paid tiers. 335 117 336 118 == Screenshots == -
griffinforms-form-builder/trunk/readme.txt
r3439965 r3441872 13 13 == Description == 14 14 15 GriffinForms is a WordPress form builder built for people who want more than a basic contact form. You can create multi-step forms with a real layout system (pages, rows, and columns), reuse fields across forms, validate and conditionally show content, and manage submissions from a dedicated admin area.16 17 If you are searching for a *WordPress form builder* that can handle everything from a simple contact form to multi-page onboarding and payment workflows, GriffinForms focuses on three things: a structured builder, clean data, and admin tools that help you run forms in production.18 19 ### Quick Start ( How to add a form to WordPress)15 GriffinForms is a contact form plugin and WordPress form builder built for structured, multi-step forms. It uses a drag and drop layout system (pages, rows, and columns), supports conditional logic, and stores submissions on your site so your data stays under your control. 16 17 If you need a WordPress form plugin that can handle everything from a simple contact form to a multi step form workflow, GriffinForms focuses on clean layouts, predictable form behavior, and practical admin tools. 18 19 ### Quick Start (Add a form in minutes) 20 20 1. Create a form in **GriffinForms → Forms**. 21 2. Add pages/rows/columns, then insert fields from the field library. 22 3. Publish the form using the shortcode: `[griffinforms_form id="123"]`, or insert the **GriffinForms** block in the WordPress block editor. 23 24 Tip: start with a single-page contact form, then expand into multi-step forms as you add conditional logic, uploads, and integrations. 25 26 ### A Structured Drag-and-Drop Builder (Pages, Rows, Columns) 27 Many “form builder” plugins treat layout as an afterthought. GriffinForms starts with layout: 28 - **Pages** for true multi-step (multi-page) forms with step navigation. 29 - **Rows and columns** so you can build structured forms without custom CSS. 30 - **Reusable fields** so you can maintain one field (like “Address” or “Company”) and insert it into multiple forms. 31 - **Folders and organization** tools to keep larger form libraries tidy as you add more workflows over time. 32 33 This approach is useful when you need forms that behave like small workflows (onboarding, applications, requests) instead of a single “send us a message” page. You can create a short first step, progressively ask for details, and keep each page focused so users are more likely to complete the form. 34 35 Because GriffinForms uses a row/column grid, you can build clean layouts for common patterns like “first name + last name”, “city + state + ZIP”, and grouped options without custom HTML. 36 37 ### Key Features (Benefit-first) 38 - **Multi-step forms**: build multi-page flows for longer applications, onboarding, or checkout-style steps. 39 - **Conditional logic**: WordPress conditional logic for a WordPress form builder — show/hide fields or rows, change labels/values, swap success messages or redirects, toggle submit state, and display form notices. 40 - **Validations**: enforce required rules and common constraints so submissions stay clean. 41 - **File uploads**: accept files as part of a submission and manage uploads from the admin. 42 - **Gutenberg block**: embed forms in the block editor with a lightweight preview and quick edit links. 43 - **Payments**: collect payments through Stripe where configured (useful for donations, applications, and orders). 44 - **Email notifications**: send notifications and route delivery via Custom SMTP, SendGrid, or Mailgun. 45 - **Spam protection**: choose a CAPTCHA provider (reCAPTCHA, Cloudflare Turnstile, or hCaptcha) and enable additional anti-spam controls like honeypot and rate limiting. 46 - **Logs and monitoring**: troubleshoot integrations and submission workflows using a timeline-based log viewer. 47 - **Theme Designer**: style forms with ready-to-use presets and import/export theme configurations. 48 49 ### Who GriffinForms Is For 50 GriffinForms is built for a wide range of WordPress sites: 51 - **Site owners** who need a dependable contact form plugin that scales into onboarding, applications, and payment workflows. 52 - **Agencies** that manage multiple client sites and need reusable components, templates, and consistent admin tooling. 53 - **Developers** who prefer structured form data, clear admin screens, and predictable behavior across forms, submissions, and integrations. 54 55 ### Typical Workflows (Examples you can copy) 56 Here are common workflows people build with a WordPress form builder like GriffinForms: 57 - **Multi-step onboarding**: page 1 (contact info) → page 2 (additional details) → page 3 (confirm + submit). 58 - **Support intake with uploads**: contact info → issue details → attach screenshots/logs → submit. 59 - **Donation/payment form**: amount selection → donor details → pay via Stripe → confirmation. 60 61 These patterns work well because the form layout is structured and the submission data stays consistent. 62 63 ### Builder Workflow (From draft to published form) 64 GriffinForms is designed to keep complex forms maintainable: 65 - Start with layout (pages, rows, columns), then drop fields into place. 66 - Reorder content without breaking the structure of multi-step flows. 67 - Reuse your common fields (name/address/company) across forms so changes stay consistent. 68 - Keep large form libraries organized with folders, templates, and import/export. 69 70 If you are migrating from a basic contact form setup, GriffinForms helps you graduate to structured workflows without rebuilding everything from scratch. You can start small (a single-page contact form) and expand into multi-step forms as your site’s needs grow. 71 72 ### Conditional Logic and Validation (Cleaner submissions) 73 Conditional logic is one of GriffinForms’ strongest features for any WordPress contact form plugin. It goes beyond show/hide and lets you build adaptive form workflows in a drag-and-drop form builder: 74 - Show/hide fields or rows, or display inline messages (error, warning, info, popup). 75 - Change field values or labels, swap option groups, and adjust row headings. 76 - Change success messages or redirects, and enable/disable submit or fields. 77 - Target advanced conditions: value counts, address components, payment selections/totals, password strength, and browser time. 78 79 Validation keeps data reliable while conditional logic guides users through the right path. Together, they reduce back-and-forth because you collect the right data the first time, especially for onboarding, intake, and payment forms in a WordPress form builder. 80 81 ### File Upload Forms (Attachments without chaos) 82 File uploads are common in real workflows (applications, onboarding, support tickets). GriffinForms supports file upload fields and admin management so you can: 83 - accept uploads as part of a submission, 84 - review attachments alongside entry details, 85 - and keep storage behavior manageable through upload controls and retention settings (where configured). 86 87 ### What You Can Build (Use Cases) 88 GriffinForms is a general-purpose WordPress forms plugin. Common use cases include: 89 - **Contact forms** (simple contact pages, support requests) 90 - **Registration forms** (courses, events, internal onboarding) 91 - **Survey and feedback forms** (internal requests, complaint/feedback intake) 92 - **File upload forms** (attachments, documents, media where appropriate) 93 - **Donation and payment forms** (Stripe-enabled forms for payments) 94 95 Starter templates are included to help you begin quickly. Examples include appointment booking, course enrollment, donation forms, employee onboarding, equipment checkout requests, bug reports, and more. 96 97 ### Import/Export (Move forms between sites) 98 You can export forms as JSON and import them on another site. This is helpful when you maintain multiple WordPress sites, build reusable form systems for clients, or want a safe way to version form configurations outside the database. 99 100 ### Integrations and Settings (Where to configure everything) 101 GriffinForms provides dedicated settings pages and integration screens so you can configure behavior without editing code: 102 - Choose and configure your anti-spam provider (reCAPTCHA, Turnstile, or hCaptcha) and enable other anti-abuse controls. 103 - Configure email delivery options (Custom SMTP, SendGrid, Mailgun) so notifications are reliable. 104 - Configure Stripe for payment forms where enabled. 105 - Control logging behavior (enable/disable, message types, retention) so you capture what you need without storing unnecessary history. 106 107 If you prefer a “start with defaults” approach, you can install and build forms first, then enable only the integrations you need later. 108 109 ### Tips for Better Forms (Practical patterns) 110 If you are trying to improve form completion rates, these patterns are commonly effective: 111 - **Use multi-step forms** for long workflows: collecting information across steps is easier than one long page. 112 - **Use conditional logic** to reduce noise: show follow-up questions only when they apply. 113 - **Validate early** to prevent low-quality submissions: required rules and sensible limits reduce cleanup work. 114 - **Use spam protection strategically**: enable a CAPTCHA provider only where needed, and add honeypot/rate limiting for public-facing high-traffic forms. 115 - **Review logs when you change integrations**: if you adjust mail delivery or payment settings, logs help confirm what happened during real submissions. 116 117 These practices are especially useful for lead-generation contact forms, application forms, and payment forms where incomplete submissions have real cost. 118 119 ### Submissions and Admin Workflow (Where your data lives) 120 By default, GriffinForms stores submissions in your WordPress database on your server. File uploads are stored in the WordPress uploads directory. You can view and manage entries inside WordPress: 121 - Filter and browse submissions from the admin. 122 - Open a single submission for full detail, including payment context where applicable. 123 - Review log activity related to a form, submission, or integration when troubleshooting. 124 125 For busy sites, the submissions workflow matters as much as the builder. GriffinForms is built so admins can go from “a user reported an issue” to “I can see what happened” quickly by jumping from forms → submissions → logs. 126 127 ### Admin Screens You Will Use 128 GriffinForms provides dedicated admin screens designed around day-to-day operations: 129 - **Forms list**: manage your form library and copy shortcodes quickly. 130 - **Submissions**: review entries, drill into a single submission, and investigate user journeys. 131 - **Integrations**: configure services like Stripe and mail delivery, and review integration logs. 132 - **Logs**: open a dedicated logs list and a single log view for deeper troubleshooting. 133 134 ### Payments with Stripe (When you need checkout-style forms) 135 If you enable Stripe, you can create payment forms where users pay as part of a submission. This is useful for: 136 - donations, 137 - applications and paid signups, 138 - product-like order forms with quantities and totals. 139 140 Payment configuration includes both global settings (such as currency) and per-form/per-field configuration where available. GriffinForms also supports a “resume” workflow for payments that are completed later, so you can reconnect users to unfinished payment sessions when needed. 141 142 For admins, this means you can review submission context and payment state in one place instead of jumping between multiple dashboards. For users, it means a smoother “review and pay” experience that still fits inside a normal form workflow. 143 144 ### Email Notifications and Delivery 145 GriffinForms can send form notifications and system emails. You can deliver mail through: 146 - **Custom SMTP** (your mail server provider), 147 - **SendGrid**, or 148 - **Mailgun**. 149 150 Delivery and integration changes can also be recorded in logs to help admins diagnose configuration issues. 151 152 If you run a high-volume site, using a dedicated mail delivery provider can reduce “lost notification” issues caused by server mail configuration. GriffinForms keeps the configuration centralized so you can update delivery without editing every form. 153 154 ### Spam Protection (CAPTCHA + Anti-Abuse Controls) 155 Spam is a major reason people search for a better “contact form plugin”. GriffinForms supports multiple anti-spam layers: 156 - **CAPTCHA provider choice**: Google reCAPTCHA (v2/v3), Cloudflare Turnstile, or hCaptcha. 157 - **Honeypot**: a non-intrusive hidden field check. 158 - **Rate limiting**: submission throttling to reduce automated abuse. 159 160 You can apply these controls to keep simple contact forms usable while still protecting high-value workflows like file upload forms and payment forms. 161 162 ### Logs and Monitoring (Understand what happened and why) 163 When logs are enabled, GriffinForms records important activity (submission workflows, integration events, and internal actions) so you can: 164 - review a timeline of what occurred, 165 - spot failures quickly, 166 - understand which integration or subsystem produced an event, 167 - and see upcoming scheduled actions (jobs) inline where available. 168 169 This is especially useful when debugging email delivery, payment events, or anti-spam issues in high-traffic forms. 170 171 If you manage multiple forms, logs help you answer questions like: 172 - “Did the submission reach the server?” 173 - “Which integration handled the request?” 174 - “Was an action scheduled for later, and did it complete?” 175 176 ### Performance at Scale (Large submission and log histories) 177 On sites with large numbers of submissions, admin performance matters. GriffinForms includes tools designed to keep day-to-day work responsive: 178 - Log views can be loaded in batches to avoid slow admin pages when histories get large. 179 - Log retention settings let you control how much history is stored. 180 - Upcoming scheduled actions (jobs) can be shown inline so you can understand what is queued next. 181 182 If you primarily build simple contact forms today, these features may not matter immediately. If you run multiple high-traffic forms or rely on integrations (mail delivery, CAPTCHA, payments), they help keep troubleshooting practical over time. 183 184 ### Design Choices (Why this WordPress form builder stays maintainable) 185 GriffinForms is designed around a few practical choices: 186 - **Layout-first builder**: pages, rows, and columns help you build clean multi-step forms without fighting the editor. 187 - **Reusable building blocks**: reusable fields and templates reduce duplication as your form library grows. 188 - **Admin-first operations**: submissions, logs, and integrations are first-class screens, not hidden behind “debug mode”. 189 - **Optional external services**: you choose when to enable payments or CAPTCHA providers, and you can keep data on your server by default. 190 191 These choices help GriffinForms work as both a straightforward contact form plugin and a flexible WordPress form builder for more complex workflows. They also reduce long-term maintenance, because forms stay organized and admin troubleshooting stays centralized. This is especially helpful for teams managing multiple sites and agencies handling client work. 192 193 ### Theme Designer (Make forms match your site) 194 Your forms should match your brand. The Theme Designer helps you style forms without rewriting templates: 195 - Start with curated presets. 196 - Customize typography, spacing, and states. 197 - Import/export theme configurations so you can reuse designs across sites. 198 199 If you manage multiple forms on the same site, a consistent theme reduces “form sprawl” and keeps your contact form plugin looking like part of your website instead of a bolt-on widget. 200 201 Themes can be used to standardize how inputs, labels, buttons, and summaries look across different forms, which is especially helpful when you publish multiple multi-step forms across landing pages, documentation, or support flows. 202 203 ### Use GriffinForms Without External Services 204 GriffinForms stores submissions on your server by default and only uses third-party services when you enable them. For example, you can: 205 - run forms without payments, 206 - use WordPress’ default mail delivery or your own SMTP provider, 207 - and choose whether to enable CAPTCHA. 208 209 If you do enable external providers, details are documented in the External Services section below. 210 211 ### Support and Troubleshooting (What to check first) 212 If something is not working as expected (missing email notifications, payment issues, CAPTCHA failures), these steps often help: 213 1. Confirm the integration is enabled and the required keys are saved (Stripe/CAPTCHA/mail provider). 214 2. Submit a quick test submission and then check the relevant logs (if logging is enabled). 215 3. Check that your server can make outbound HTTPS requests to enabled providers. 216 4. If you use caching or security plugins, temporarily exclude the form page from aggressive caching/minification and test again. 217 218 When sharing logs or screenshots for support, avoid posting secret keys or private customer information. 219 220 ### Roadmap (High-level) 221 Future updates may expand conditional logic workflows, add more starter templates, and improve admin tooling. Timelines may change. 21 2. Build your layout with pages, rows, and columns, then add fields. 22 3. Publish with the shortcode `[griffinforms_form id="123"]`. 23 24 ### Key Features (short and practical) 25 - **Drag and drop form builder**: build structured forms with pages, rows, columns, and multiple field types. 26 - **Multi-page forms**: add steps for longer workflows with clear page navigation. 27 - **Conditional logic**: show or hide fields and sections based on user input. 28 - **File upload fields**: collect documents or screenshots when your workflow needs attachments. 29 - **Submissions in WordPress**: view entries in the admin and keep data in your database. 30 - **Themes**: apply form themes so your contact form matches your site design. 31 - **Payments (Stripe)**: collect payments when enabled and configured. 32 - **CAPTCHA options**: support reCAPTCHA, Cloudflare Turnstile, or hCaptcha. 33 - **Email delivery**: send notifications using WordPress mail or configured providers like Custom SMTP or SendGrid. 34 35 ### Use Cases (what people build) 36 - Contact form pages and support intake 37 - Registration and request forms 38 - Multi step form wordpress workflows with multiple pages 39 - File upload forms for applications or support tickets 40 41 ### Layout-first builder 42 GriffinForms treats layout as a core part of form building. Use pages to split long flows, rows to group content, and columns to control alignment. This structure makes complex forms easier to maintain and helps users complete longer submissions without fatigue. 43 44 ### Conditional logic for smarter forms 45 Conditional logic lets you build adaptive forms that respond to user input. Use it to show or hide fields, simplify longer questionnaires, or guide users through the right path based on their selections. 46 47 ### Submissions and data 48 Submissions are stored in your WordPress database. You can review entries from the admin area, and logs are available for troubleshooting when enabled. 49 50 ### Payments when you need them 51 If you enable Stripe, you can build payment forms that collect payments as part of a submission. This is useful for donations, paid applications, and simple order-style forms. 52 53 ### Spam protection 54 Choose a CAPTCHA provider that fits your site. GriffinForms supports Google reCAPTCHA, Cloudflare Turnstile, and hCaptcha so you can add spam protection without locking every form behind a heavy challenge. 55 56 ### Email notifications 57 Send admin notifications or autoresponders using WordPress mail or a configured provider such as Custom SMTP or SendGrid. 58 59 ### Privacy and external services 60 By default, GriffinForms stores form data on your site. External services are only used when you enable them (payments, CAPTCHA, or email delivery). See the External Services section below for details. 222 61 223 62 ### External Services 224 GriffinForms optionally uses external services for enhanced functionality: 225 226 1. **Google reCAPTCHA** 227 If enabled, sends the reCAPTCHA token and user IP to Google to verify human input. 228 Service provider: Google LLC 229 - [Terms](https://www.google.com/intl/en/policies/terms/) 230 - [Privacy](https://www.google.com/intl/en/policies/privacy/) 231 232 2. **Stripe** 233 If enabled, payment-related data is sent to Stripe to process transactions (for example, payment intent metadata and transaction context needed to complete payment). 234 Service provider: Stripe, Inc. 235 - [Terms](https://stripe.com/legal) 236 - [Privacy](https://stripe.com/privacy) 237 238 3. **Cloudflare Turnstile** 239 If enabled, Turnstile tokens and visitor metadata are sent to Cloudflare for bot verification. 240 Service provider: Cloudflare, Inc. 241 - [Terms](https://www.cloudflare.com/terms/) 242 - [Privacy](https://www.cloudflare.com/privacypolicy/) 243 244 4. **hCaptcha** 245 If enabled, the hCaptcha token and user interaction data are sent to hCaptcha for verification. 246 Service provider: Intuition Machines, Inc. (hCaptcha) 247 - [Terms](https://www.hcaptcha.com/terms) 248 - [Privacy](https://www.hcaptcha.com/privacy) 249 250 5. **SendGrid** 251 If configured, emails are routed through SendGrid using email content and metadata. 252 Service provider: SendGrid (Twilio) 253 - [Terms](https://www.twilio.com/legal/tos) 254 - [Privacy](https://www.twilio.com/legal/privacy) 255 256 6. **Mailgun** 257 If configured, outbound emails (recipients, content, metadata) are sent to Mailgun’s REST API for delivery. 258 Service provider: Mailgun Technologies, Inc. 259 - [Terms](https://www.mailgun.com/legal/terms/) 260 - [Privacy](https://www.mailgun.com/legal/privacy-policy/) 63 GriffinForms can connect to these third-party services when enabled: 64 - **Google reCAPTCHA** (spam protection): https://www.google.com/intl/en/policies/terms/ and https://www.google.com/intl/en/policies/privacy/ 65 - **Stripe** (payments): https://stripe.com/legal and https://stripe.com/privacy 66 - **Cloudflare Turnstile** (spam protection): https://www.cloudflare.com/terms/ and https://www.cloudflare.com/privacypolicy/ 67 - **hCaptcha** (spam protection): https://www.hcaptcha.com/terms and https://www.hcaptcha.com/privacy 68 - **SendGrid** (email delivery): https://www.twilio.com/legal/tos and https://www.twilio.com/legal/privacy 69 - **Mailgun** (email delivery): https://www.mailgun.com/legal/terms/ and https://www.mailgun.com/legal/privacy-policy/ 70 71 ### Learn more 72 - Documentation: https://griffinforms.com/docs/ 73 - Templates: https://griffinforms.com/templates/ 74 - Releases: https://griffinforms.com/releases/ 75 - Privacy: https://griffinforms.com/privacy.php 261 76 262 77 == Installation == … … 268 83 == Frequently Asked Questions == 269 84 270 = How do I add a form to WordPress? = 271 Create a form, then embed it using the shortcode `[griffinforms_form id="123"]` in any post or page (including inside a Shortcode block). 272 273 = Does GriffinForms work with Gutenberg or page builders? = 85 = How do I add a contact form to WordPress? = 86 Create a form in GriffinForms, then embed it with the shortcode `[griffinforms_form id="123"]` in any post or page. 87 88 = Can I build multi-step (multi-page) forms? = 89 Yes. Use pages in the builder to create multi-step forms with navigation. 90 91 = Does GriffinForms support conditional logic? = 92 Yes. You can show or hide fields based on user input. 93 94 = Can I collect file uploads? = 95 Yes. Add a File Upload field to accept documents or media with a submission. 96 97 = How do I reduce spam (reCAPTCHA/Turnstile/hCaptcha)? = 98 Choose a CAPTCHA provider (reCAPTCHA, Cloudflare Turnstile, or hCaptcha) and enable it in the integrations settings. 99 100 = Where are submissions stored? = 101 Submissions are stored in your WordPress database. File uploads are stored in the WordPress uploads directory. 102 103 = Does it work with Gutenberg or page builders? = 274 104 Yes. Use the shortcode in the block editor or your page builder’s shortcode/widget block. 275 105 276 = Can I build a contact form without coding? = 277 Yes. Build the form with drag-and-drop and publish it using the shortcode. 278 279 = Is GriffinForms free? = 280 Yes. The plugin exposes the full feature set with no paid tiers or add-ons. 281 282 = Can I reuse fields across forms? = 283 Yes. Reusable fields let you create an element once and insert it into any form. 284 285 = Does GriffinForms support reCAPTCHA? = 286 Yes. Both reCAPTCHA v2 and v3 are supported. You can also use Cloudflare Turnstile or hCaptcha. 287 288 = How do I reduce spam submissions? = 289 Choose a CAPTCHA provider (reCAPTCHA, Turnstile, or hCaptcha) and optionally enable honeypot and rate limiting in the Antispam settings. 290 291 = Can I integrate with SendGrid? = 292 Yes. Provide an API key to route email notifications through SendGrid. You can also deliver mail via Mailgun or Custom SMTP. 293 294 = Does GriffinForms support payments? = 295 Yes. The Payment field lets you sell products with quantity controls, tax settings, and Stripe on-site checkout. Payment gateway options are managed in the Payments settings tab and each integration’s modal. 296 297 = Do I need Stripe to use GriffinForms? = 298 No. Payments are optional. You can use GriffinForms for contact forms, application forms, and file upload workflows without enabling Stripe. 299 300 = Can I validate fields with patterns or limits? = 301 Yes. Required rules, regex patterns, numeric limits, date ranges, and database uniqueness checks are available. 302 303 = Does GriffinForms support multi-page forms? = 304 Yes. Multi-page layouts are built in. 305 306 = Can I save incomplete submissions? = 307 Yes. Partial submissions are stored automatically. 308 309 = Where do I view submissions? = 310 Submissions are available from the GriffinForms admin menu. You can browse entries and open a single submission for full details. 311 312 = Is there a way to organize forms as they grow? = 313 Yes. Forms can be grouped into folders from the admin interface. 314 315 = Can I export and import forms? = 316 Yes. Forms export to JSON and can be re-imported on other sites. 317 318 = Can I customize the email design? = 319 Yes. HTML headers and footers can be added to outgoing emails. 320 321 = Does GriffinForms support file uploads and email notifications? = 322 Yes. File upload fields are supported, and notifications can be sent via SMTP, SendGrid, or Mailgun. 323 324 = Where is my form data stored? = 325 Submissions are stored in your WordPress database on your server. File uploads are stored in the WordPress uploads directory. If you enable external services, data is sent to those providers for processing. 326 327 = Where can I see logs? = 328 If logging is enabled, you can review logs from dedicated admin log screens and in relevant contexts like submissions and integrations. 329 330 = Can I disable logging? = 331 Yes. Logging can be toggled in GriffinForms settings. When disabled, log views will show a helpful message instead of attempting to load logs. 332 333 = Does GriffinForms send data to third-party services? = 334 Only if you enable an external provider (CAPTCHA, email delivery, or payments). See the External Services section for details. 106 = Can I send emails via SMTP/SendGrid/Mailgun? = 107 Yes. Configure Custom SMTP, SendGrid, or Mailgun for email delivery. 108 109 = Do I need Stripe to use payments? = 110 Stripe is required for payment processing. If you do not enable Stripe, you can still use GriffinForms for non-payment forms. 111 112 = Where can I find documentation? = 113 See the docs at https://griffinforms.com/docs/. 114 115 = Is GriffinForms free? = 116 Yes. The core plugin provides the full feature set with no paid tiers. 335 117 336 118 == Screenshots ==
Note: See TracChangeset
for help on using the changeset viewer.