Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 14 additions & 22 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,39 +7,31 @@ The format follows [Keep a Changelog] (https://keepachangelog.com/en/1.1.0/).

## [Unreleased]

## [6.39.0] (2026-10-13)

### Added

- **The plugin has an icon on Dashboard → Updates and in the plugin list** (#1712). A certificate with a seal, white on blue, replaces WordPress's grey placeholder, read from the installed copy. `assets/img/brand/` also ships black, white, dark-screen and no-background variants, each as SVG and as 128 px and 256 px PNG.
- **"View details" shows a banner and the readme's tabs** (#1714). Description, Installation, FAQ, Screenshots and Other notes come from the offered release's `readme.txt`, and the changelog renders its Markdown instead of printing it raw.
- **"View details" speaks Portuguese and opens screenshots in place** (#1716). The tabs and banner follow the viewer's language when the plugin ships a translation (`languages/readme-pt_BR.txt`), and a screenshot opens in an overlay with arrows, swipe and zoom instead of a new tab.
- **Choice fields take one option per row, and every field can carry limits** (#1729). Options may contain commas; a choice field can shuffle its options per participant; a checkbox can cap how many are ticked; text and textarea take a minimum and maximum length (server ceilings 255 and 2,000) with a live counter; number and date take a range. The participant sees each limit, and the editor says what each type is for.
- **Quiz questions are scored per field** (#1730). Each field can be scored or left out; choices by correct option(s), a checkbox only on the exact set, or by points per option; text when answered; number and date by a correct range. "Show which answers were correct" now works. New tokens `{{correct_count}}` and `{{question_count}}`; existing forms score as before.
- **A quiz can clear its answers when the participant leaves the window** (#1731). Off by default; the form warns first, switching tabs clears the scored answers and a dialog says why. It is not an attempt; the count is stored and shown on the submission. A deterrent, not a lock.
- **"View details" shows a banner, the readme's tabs and screenshots in place, in Portuguese too** (#1714, #1716). Description, Installation, FAQ, Screenshots and Other notes come from the offered release's `readme.txt` (or `languages/readme-pt_BR.txt` for a pt_BR viewer), the changelog renders its Markdown, and a screenshot opens in an overlay with arrows, swipe and zoom.
- **Choice fields take one option per row, and every field can carry limits** (#1729). Options may contain commas and can be shuffled per participant; a checkbox can cap how many are ticked; text and textarea take a length range (server ceilings 255 and 2,000) with a live counter; number and date take a range. A "Checkbox" field now renders as a group of boxes instead of one text box, and the server enforces every field's rules, not only the browser.
- **Quiz questions are scored per field** (#1730). Each field can be scored or left out: choices by correct option(s), a checkbox only on the exact set, or by points per option; text when answered; number and date by a correct range. "Show which answers were correct" now works, with new tokens `{{correct_count}}` and `{{question_count}}`; existing forms score as before.
- **A quiz can clear its answers when the participant leaves** (#1731, #1745). Leaving the Window is Off / Moderate / Strict: Moderate reacts to switching tabs, Strict also to a second window side by side, after a grace set on Settings → Certificates. The form warns first, Start again reloads and reshuffles, and the count is shown on the submission. A deterrent, not a lock.
- **Open quiz answers can be graded by a person** (#1732). A manually graded text question holds the attempt as "Awaiting Grading"; grading it on the edit screen issues the certificate or records Retry/Failed and emails the result. New capability `ffc_grade_certificates`, seeded from `ffc_edit_certificates`.
- **A quiz can also reset when its window loses the focus** (#1745). Leaving the Window is Off / Moderate / Strict; Strict catches two windows side by side, after a grace set on Settings → Certificates. Start again reloads, reshuffling options. Built on a reusable steps control (`ffc-control-*`) with autosave.

### Changed

- **Clock-reading tests no longer fail when a run crosses a boundary** (#1719). The rate-limit window, dashboard midnight and export-filename tests read the clock before and after the call; the issue holds the audit of every clock-reading test. A `readme.txt` change now carries its pt_BR copy in the same PR (#1718).
- **The compiled `.l10n.php` is `wp i18n make-php`'s shape, byte for byte** (#1721). The compiler writes WP-CLI's `domain` and headers and an integer-like key bare, so a catalogue compiled here, saved from Loco or made by WP-CLI is the same file.
- **Form fields follow the form's font, and Public Design offers Arial** (#1727). Fields, selects and buttons inherit the font the labels use instead of the browser's; the font choice is the theme's (default), the plugin's system font or Arial, as in Email Signature Generator and Institutional Email.
- **Required certificate tags have their own Settings tab and protect their fields** (#1734). The list moved from Advanced to a new Certificates tab; the layout and template screens list the configured tags instead of a fixed three. A field a required tag calls for is amber, badged, always required, and cannot be renamed or removed; a form missing one is warned on save.
- **Required form fields are a list of their own** (#1741). Settings → Certificates keeps the layout tags and, apart, the fields every form needs with label and type (default `name`, `cpf_rf`, `email`; Email stays). New forms start with them, their type is locked, and the editor adds missing ones.
- **Ordered three-level settings use the steps control** (#1745). The four geofence display modes, the two private-calendar displays and the IP API fallback store the same values as before; an unknown stored value shows the old default.
- **The on/off toggle joins the control family** (#1748). `.ffc-toggle` is now `.ffc-control-toggle` everywhere, with the shared hover and pressed halo, a greyed disabled state instead of a faded one, and an optional check / cross mark on the knob.
- **Small unordered choices use a segmented control** (#1750). Dark Mode, Code Editor Theme and the geofence Time Behavior are one row of options instead of a select or stacked radios, with the same stored values; new `AdminUI::render_segmented()` takes 2 to 6 options.
- **Required tags and required fields have their own Settings → Certificates tab** (#1734, #1741, #1736). The layout tags moved from Advanced, one per line, and the layout and template screens list them instead of a fixed three. Apart from them, the fields every form needs (default `name`, `cpf_rf`, `email`) have a label and a locked type: new forms start with them, the editor adds missing ones, and they are badged, always required and cannot be removed.
- **Settings use one family of controls** (#1745, #1748, #1750). An on/off is a toggle (`.ffc-control-toggle`, with a hover halo, a greyed disabled state and an optional check / cross mark); an ordered scale is a steps rail (the geofence display modes, the private-calendar displays, the IP API fallback); a short unordered choice is a segmented row (Dark Mode, Code Editor Theme, Time Behavior). Stored values are unchanged.
- **Form fields follow the form's font, and Public Design offers Arial** (#1727). Fields, selects and buttons inherit the font the labels use instead of the browser's; the font is the theme's (default), the plugin's system font or Arial, as in Email Signature Generator and Institutional Email.
- **Tests and translation files are steadier** (#1719, #1721, #1718). Clock-reading tests no longer fail when a run crosses a boundary, the compiled `.l10n.php` is `wp i18n make-php`'s shape byte for byte, and a `readme.txt` change carries its pt_BR copy in the same PR.

### Fixed

- **Dark mode reaches what core paints on its own** (#1723). Admin screens declare `color-scheme: dark` (scrollbars, the time picker's clock, the file button). Links, notice links, "Add New", disabled primary buttons, the colour picker, checkboxes, radios, the Publish box footer, row actions, Screen Options and the booking details title follow the palette. Quick Navigation no longer scrolls sideways; the submissions ID column is narrower.
- **Personal Calendars and Certificate templates follow dark mode** (#1725). Their lists and editors are WordPress post screens the toggle never reached, so they stayed light; the rich-text e-mail editor's tabs and toolbar now read the palette too.
- **A checkbox field renders its options, and the server enforces every field's rules** (#1729). A "Checkbox" field rendered as one empty text box that posted `on`; it is now a group of boxes posting the ticked options, and "Required" means at least one. A required answer, a length, a range and whether an answer is one of the options were the browser's word only; an edited page could post anything.
- **The standard fields validate as they claim** (#1734). An invalid CPF/RF now blocks the submit and its message stays until corrected; an invalid email says so instead of "Email address is required."; a name needs at least two words and 4 characters, in the browser and on the server.
- **Settings → Certificates saves the required tags one per line** (#1736). The Save button stored the list on a single line, which then read as one tag; a list already stored that way reads as separate tags again.
- **A certificate form submits again** (#1739). A script printed before `ffc-core.js` that created the `FFC` namespace made the core skip its own API, so every submit failed on `FFC.request is not a function`; the core now installs its API and keeps what was already there.
- **A quiz attempt that did not pass is no longer a certificate** (#1744). The first attempt was saved as issued and its certificate link emailed before its result was known; its code also verified. The email, verification by code or link, the REST lookup and the user dashboard now skip it.
- **Dark mode reaches what core paints on its own** (#1723, #1725). Admin screens declare `color-scheme: dark`; links, notices, buttons, the colour picker, checkboxes, the Publish box, row actions and Screen Options follow the palette, and Personal Calendars and Certificate templates, WordPress post screens the toggle never reached, turn dark with their e-mail editor.
- **The standard fields validate as they claim** (#1734). An invalid CPF/RF blocks the submit and its message stays until corrected; an invalid email says so instead of "Email address is required."; a name needs at least two words and 4 characters, in the browser and on the server.
- **A certificate form submits again** (#1739). A script printed before `ffc-core.js` that created the `FFC` namespace made the core skip its own API, so every submit failed on `FFC.request is not a function`.
- **A quiz attempt that did not pass is no longer a certificate** (#1744). It was saved as issued and its link emailed before the result was known, and its code verified; the email, verification, the REST lookup and the user dashboard now skip it.
- **The dashboard's notification toggles can be reached by keyboard** (#1748). They used a second toggle that hid its checkbox with `display: none`; they now use the plugin's one toggle.
- **The steps control lines up inside a settings table** (#1750). WordPress makes every label in a `.form-table` fieldset inline-block, which pushed each stop's mark to the left of its rail; the stops and the segmented options now outrank that rule.

## [6.38.0] (2026-10-12) — `529e80a1`

Expand Down
4 changes: 2 additions & 2 deletions ffcertificate.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* Plugin URI: https://github.com/rpgmem/ffcertificate
* Update URI: https://github.com/rpgmem/ffcertificate
* Description: Allows creation of dynamic forms, saves submissions, generates a PDF certificate, and enables CSV export.
* Version: 6.38.0
* Version: 6.39.0
* Requires at least: 6.8
* Requires PHP: 8.3
* Author: Alex Meusburger
Expand All @@ -24,7 +24,7 @@
/**
* Centralized version management
*/
define( 'FFC_VERSION', '6.38.0' ); // Plugin version (WordPress Plugin Check compliance)
define( 'FFC_VERSION', '6.39.0' ); // Plugin version (WordPress Plugin Check compliance)
// External libraries versions.
define( 'FFC_HTML2CANVAS_VERSION', '1.4.1' ); // html2canvas - https://html2canvas.hertzen.com/.
define( 'FFC_JSPDF_VERSION', '4.2.1' ); // jsPDF - https://github.com/parallax/jsPDF.
Expand Down
2 changes: 1 addition & 1 deletion languages/readme-pt_BR.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ A referência completa (cada token, shortcode, capacidade e configuração) vem
* **PDF gerado no navegador** - Certificados desenhados no navegador com html2canvas e jsPDF, a partir de Modelos de documento reutilizáveis com imagens de fundo.
* **Links mágicos** - Acesso ao certificado com um clique, por um link único com um token aleatório de 32 caracteres, enviado por e-mail.
* **Verificação** - Conferência de autenticidade pelo código de autenticação ou pelo link mágico, na página `/valid` criada na ativação.
* **Modo questionário** - Formulários com nota, com os tokens `{{score}}`, `{{max_score}}` e `{{score_percent}}`.
* **Modo questionário** - Formulários com nota, cada campo pontuado por si (opções, pontos, faixas), com os tokens `{{score}}`, `{{max_score}}`, `{{score_percent}}`, `{{correct_count}}` e `{{question_count}}`. Respostas abertas podem ser corrigidas por uma pessoa, e o questionário pode recomeçar quando o participante sai da janela.

= QR Codes =

Expand Down
8 changes: 4 additions & 4 deletions readme.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ Contributors: alexmeusburger
Tags: certificate, form builder, pdf generation, verification, validation
Requires at least: 6.8
Tested up to: 7.1.3
Stable tag: 6.38.0
Stable tag: 6.39.0
Requires PHP: 8.3
License: AGPLv3 or later
License URI: https://www.gnu.org/licenses/agpl-3.0.html
Expand All @@ -22,7 +22,7 @@ The full reference (every token, shortcode, capability and setting) ships inside
* **Client-Side PDF Generation** - Certificates rendered in the browser with html2canvas and jsPDF, from reusable Document Templates with background images.
* **Magic Links** - One-click certificate access through a unique link carrying a random 32-character token, sent by e-mail.
* **Verification** - Authenticity check by authentication code or magic link, on the `/valid` page created at activation.
* **Quiz Mode** - Scored forms with `{{score}}`, `{{max_score}}` and `{{score_percent}}` tokens.
* **Quiz Mode** - Scored forms, each field scored on its own (choices, points, ranges), with `{{score}}`, `{{max_score}}`, `{{score_percent}}`, `{{correct_count}}` and `{{question_count}}` tokens. Open answers can be graded by a person, and a quiz can reset when the participant leaves the window.

= QR Codes =

Expand Down Expand Up @@ -270,8 +270,8 @@ now CHANGELOG.md alone.

== Upgrade Notice ==

= 6.38.0 =
⚠ The licence is now AGPLv3 or later: reuse and forks stay free, and a modified copy offered as a service must publish its source. Identity resolution names each number, and the recruitment CSV import checks the RF digit.
= 6.39.0 =
Quizzes score per field, can be graded by hand and can reset when the participant leaves the window. Choice fields take one option per row with limits, required certificate fields get their own tab, and the plugin gains an icon and a "View details" screen.

This section carries a short summary of the version being offered, and only
that one — the updater never offers an older release, so an entry for one
Expand Down
Loading