Plugin Directory

Changeset 3652941


Ignore:
Timestamp:
08/18/2026 01:15:39 PM (2 months ago)
Author:
edutainmentuk
Message:

Readme Updated

File:
1 edited

Legend:

Unmodified
Added
Removed
  • edutain-certificate-validator/trunk/readme.txt

    r3649741 r3652941  
    1 === Edutain Certificate Validator ===
    2 Contributors: edutainmentuk, freemius
    3 Tags: certificate, certificate verification, csv, qr code, pdf certificate
     1=== Edutain Certificate Validator – Certificate Verification, QR Code & Digital Credentials ===
     2Contributors: edutainmentuk
     3Tags: certificate verification, certificate validator, verify certificate, id card verify, course certificate
    44Requires at least: 5.0
    55Tested up to: 7.0
    … …  
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
    1010
    11 Upload certificate records and add LMS-independent certificate verification to WordPress with a shortcode.
     11
     12Verify certificates, id cards or licenses online from your own WordPress site. No LMS, no external service.
     13
    1214
    1315== Description ==
    1416
    15 Edutain Certificate Validator adds online certificate verification to your WordPress site without requiring an LMS. Upload certificate records from CSV or add them individually, then let learners, employers and other visitors verify a certificate by entering its unique code.
    16 
    17 The core certificate validator is fully functional, unlimited and free. CSV certificate upload, individual record management, CSV/XLSX export and the public verification form are not restricted by Pro.
    18 
    19 = Free certificate verification features =
    20 
    21 * Upload and merge certificate records from CSV files up to 10 MB.
    22 * Import up to 100,000 data rows per uploaded file.
    23 * Use four required columns in any order: Name, Authentication Code and Issue Date.
    24 * Optionally store a Email address with each record.
    25 * Add and edit records individually.
    26 * Search, sort and paginate the records table.
    27 * Delete individual records, or delete all records after confirmation.
    28 * Export the complete dataset as CSV or XLSX.
    29 * Use `[edcv_validator]` as a certificate verification shortcode on any page or post.
    30 * Share direct verification links using `?certificate_code=CODE` or `?code=CODE`.
    31 * Display a verification result with the learner name, course, completion date and Authentication Code.
    32 * Let visitors copy a verification link or print the result.
    33 * Limit public verification attempts to reduce automated certificate-code guessing.
    34 * Automatically create a published Validate Certificate page on activation.
    35 * Keep certificate records in a dedicated, indexed WordPress database table.
    36 
    37 = CSV certificate upload =
    38 
    39 Your CSV must contain these three headers, in any order and with case-insensitive matching:
    40 
    41 
    42 * Name
    43 * Authentication Code
    44 * Issue Date
    45 
    46 `Email` is optional. Issue dates may use `dd/mm/yyyy` or `yyyy-mm-dd` and are stored in ISO format. Authentication Codes must be unique. Duplicate codes and invalid rows are skipped and reported. Duplicate column names stop the import so ambiguous data is not processed.
    47 
    48 Free imports accept the core columns only. With Pro active, additional CSV columns can be stored as certificate extras. `Expiry Date` and `Certificate Status` are recognised Pro columns; other additional columns become public custom fields, up to 30 custom fields per record.
    49 
    50 = Pro certificate management features =
    51 
    52 Pro features are delivered through the licensed Premium edition of Edutain Certificate Validator;[Learn more about Pro](https://edutain-certificate-validator.edutainmentuk.com/).
    53 
    54 * Generate individual QR codes that open direct certificate verification links.
    55 * Download QR codes as PNG or PDF, create multi-certificate QR PDF sheets, and print QR sheets.
    56 * Generate branded landscape PDF certificates with an optional Media Library logo, accent colour, signature name and embedded QR code.
    57 * Optionally let learners download PDFs from valid public verification results.
    58 * Add expiry dates and mark certificates as valid, revoked or suspended, with an optional status reason.
    59 * Show expired, revoked and suspended states on the public verification result.
    60 * Add up to 30 custom label/value fields per certificate and choose which are public.
    61 * Bulk delete selected records and bulk-set expiry, status, Email or custom-field values.
    62 * Send or resend certificate emails manually using the stored Email address.
    63 * Customise the email subject and message with certificate placeholders.
    64 * Queue bulk email sends in WP-Cron batches of 15 to reduce request timeouts and pressure on host mail limits.
    65 * Log verification attempts and view totals, failed attempts, recent activity and most-verified Authentication Codes.
    66 * Choose a verification-log retention period or retain the log indefinitely.
    67 
    68 = Email management =
    69 
    70 Pro email management uses the optional core `Email` value for each certificate record. The subject and message support these placeholders:
    71 
    72 `{name}` `{course_name}` `{issue_date}` `{authentication_code}` `{verify_link}` `{site_name}`
    73 
    74 Bulk sends are queued in the background in groups of 15. They use WordPress WP-Cron, so processing time depends on site traffic and the site's email configuration. Email is sent through WordPress using `wp_mail()`.
     17
     18[Edutain Certificate Validator](https://edutain-certificate-validator.edutainmentuk.com/) is a professional WordPress certificate verification plugin that lets anyone verify a certificate online, in seconds, on your own website. It is a no-code certificate validator built for training providers, educators, online course creators, and organizations that issue certificates.
     19
     20
     21Edutain Certificate Validator gives you a complete online certificate verification system inside WordPress. **No LMS required.** No external certificate platform. No monthly credential service. Your certificate database stays on your own site, under your own control.
     22
     23
     24Upload your certificate records, publish your verification page, and give anyone a secure way to verify certificates online. Learners, employers, and visitors verify a certificate instantly using its unique authentication code.
     25
     26
     27The core certificate validator, including CSV import, unlimited records, and the public verification form, is free forever and is never restricted by the Pro version.
     28
     29
     30
     31
     32= Key features in the free version =
     33
     34
     35* Add certificate records individually from your WordPress dashboard
     36* Bulk import certificates from a CSV file
     37* Import up to 100,000 data rows per uploaded file
     38* Publish a public certificate verification page in minutes
     39* Let visitors verify certificates using unique authentication codes
     40* Share direct certificate verification links
     41* Display professional verification results, including learner name, course name, completion date, and certificate details
     42* One-click social sharing to LinkedIn, Facebook, and X
     43* Add and edit records individually
     44* Search, sort, and paginate the records table
     45* Delete individual records, or delete all records after confirmation
     46* Download your complete dataset as CSV or XLSX
     47* Certificate records stored securely in your own WordPress database
     48* Built-in protection against automated verification attempts
     49* No external certificate storage required
     50* Works independently, with or without an LMS
     51* Import summary reporting records added, duplicate codes skipped, and invalid rows
     52* Downloadable CSV template, so your certificate data imports correctly first time
     53* Unlimited certificate records, with no cap on your certificate database
     54
     55
     56= Do more with the Pro version =
     57
     58
     59* **Custom fields** — add up to 30 label and value fields per certificate and choose which ones are public. Record grades, credit hours, CPD points, license numbers, or awarding body details.
     60* **Certificate QR code generator** — generate a QR code that opens the verification page for that exact certificate.
     61* Download QR codes as PNG or PDF, build multi-certificate QR PDF sheets, and print them.
     62* **Branded PDF certificates** — generate landscape PDF certificates with an optional Media Library logo, accent color, signature name, and embedded QR code.
     63* Optionally let learners download their PDF certificate straight from a valid verification result.
     64* **Certificate expiry management** — set expiry dates and control valid, revoked, and suspended states.
     65* Show expired, revoked, and suspended states clearly on the public verification result.
     66* **Bulk record management** — bulk delete selected records, and bulk edit expiry, status, email, or custom field values.
     67* **Certificate email management** — send or resend customized certificate emails manually or in bulk, using the stored email address.
     68* **Verification analytics** — log verification attempts and review totals, failed attempts, recent activity, and your most-verified authentication codes.
     69* Choose how long verification logs are kept, or retain them indefinitely.
     70
     71
     72= Verify ID cards, gym memberships, test results, and almost anything else =
     73
     74
     75Your organization issues more than course certificates. Staff ID cards. Gym memberships. Library cards. Medical test results. Professional licenses. Every one of them needs a way for someone to check it is real.
     76
     77
     78Edutain Certificate Validator Pro handles all of them, so the same plugin doubles as an ID card verifier, a library card verifier, or a general document verification tool.
     79
     80
     81Leave the course name field empty, add your own custom fields — ID Card Number, Card Type, Test Name, Test Result, License Expiry — and the plugin becomes whatever verifier you need. Someone can then verify an ID card, membership, or document on the same trusted public page your learners already use. Same simple setup. No extra plugins, no developer required.
     82
     83
     84= Why choose Edutain Certificate Validator? =
     85
     86
     87Manual certificate checking and spreadsheet tracking do not scale, and they give employers no way to confirm anything independently. Edutain Certificate Validator gives your organization a complete WordPress certificate verification system that helps you:
     88
     89
     90* Prevent fake certificates
     91* Build trust in the credentials you issue
     92* Reduce time spent answering verification requests by hand
     93* Provide instant certificate validation, around the clock
     94* Manage digital certificates professionally
     95
    7596
    7697= External services =
    7798
    78 Edutain Certificate Validator integrates services provided by Freemius, Inc. Freemius is used for optional account connection and management, Pro licence activation and entitlement checks, premium software updates, and the Pro checkout process.
    79 
    80 The plugin loads the Freemius Checkout JavaScript from `https://checkout.freemius.com/js/v1/` on EDCV's Dashboard, Data Management, dedicated Upgrade, and Freemius Account admin pages, where purchasing or upgrading controls may be needed. This remote script request can occur before a Freemius account connection or licence activation and communicates with Freemius. As with other web requests, Freemius and its infrastructure may receive request information such as the requesting device's IP address, browser or user-agent headers, and the referring admin-page URL. Opening Checkout sends the selected EDCV product and plan, licence quantity, and billing cycle to Freemius. Contact, billing, payment, tax, and purchase information entered during Checkout is handled by Freemius and its payment providers.
    81 
    82 When an administrator chooses to connect a Freemius account, opts into data sharing, activates or manages a Pro licence, uses the Freemius Account screen, checks or receives Freemius-managed premium updates, or interacts with related Freemius notices, the bundled SDK may communicate with Freemius. Depending on the action and permissions shown in the Freemius interface, transmitted information may include:
    83 
    84 * The site or homepage URL and site title.
    85 * The WordPress and PHP versions, site language, and multisite or network context.
    86 * The EDCV plugin version, Freemius SDK version, and whether the plugin is active, deactivated, or uninstalled.
    87 * The WordPress administrator's first name, last name, and email address when connecting an account.
    88 * Freemius user, site, install, product, plan, licence, and activation identifiers, including a licence key when one is submitted.
    89 * Optional diagnostic information, which can include installed plugin and theme names, slugs, versions, and activation states when that permission is enabled.
    90 
    91 Freemius presents its connection, licence, and diagnostic permissions in WordPress. Some communication is required to activate and validate a Pro licence or use a Freemius account, while optional diagnostic sharing can be controlled through the Freemius permissions and opt-out controls. Checkout communication occurs when its remote script is loaded and when the administrator opens or completes a purchase. Freemius-managed update checks and installation-state updates may also communicate information needed for licence and update delivery.
    92 
    93 No EDCV code path was found that passes learner names, Email addresses, course names, issue dates, Authentication Codes, certificate custom fields, or verification analytics to the Freemius SDK or Checkout configuration. These certificate-related values are used by EDCV's local database, verification, PDF, QR, analytics, export, and email features instead. This statement describes EDCV's own integration code and does not replace Freemius's policies for information processed through its SDK, checkout, account, licence, or update services.
    94 
    95 Freemius terms: https://freemius.com/terms/
    96 
     99
     100This plugin connects to Freemius, Inc. for optional account connection, Pro license activation and validation, premium plugin updates, and Pro checkout. It is a third-party service, so using these features means data is sent to Freemius.
     101
     102
     103The Freemius Checkout script is loaded from `https://checkout.freemius.com/js/v1/` on the plugin's Dashboard, Data Management, Upgrade, and Freemius Account screens, where purchasing controls may appear. As with any remote request, this can send your IP address, browser user-agent, and the referring admin page URL. Opening Checkout also sends the selected product, plan, license quantity, and billing cycle. Any contact, billing, and payment details you enter during Checkout are handled by Freemius and its payment providers.
     104
     105
     106When an administrator connects a Freemius account, activates or manages a license, checks for premium updates, or opts into data sharing, the bundled Freemius SDK may send: your site URL and title; WordPress, PHP, and SDK versions; site language and multisite context; the plugin version and its active, deactivated, or uninstalled state; the administrator's name and email address; Freemius account, site, install, product, plan, and license identifiers, including a submitted license key; and, only if you enable that optional permission, a list of installed plugin and theme names and versions.
     107
     108
     109Freemius permissions are shown to you inside WordPress, and optional diagnostic sharing can be turned off there. Some communication is required to activate and validate a Pro license.
     110
     111
     112Certificate data is never sent to Freemius. Learner names, email addresses, course names, issue dates, authentication codes, custom fields, and verification analytics stay in your own WordPress database.
     113
     114
     115Freemius terms of service: https://freemius.com/terms/
    97116Freemius privacy policy: https://freemius.com/privacy/
    98117
    99 If an administrator configures a certificate logo using an external image URL instead of the WordPress Media Library, the site fetches that image when generating a PDF. The image host may receive normal request information such as the site server's IP address and request headers. EDCV does not add certificate-record values to the logo request.
     118
     119If you configure a certificate logo using an external image URL instead of the WordPress Media Library, your site downloads that image while generating a PDF, and the image host may receive your server's IP address and standard request headers. No certificate data is included in that request.
     120
    100121
    101122= Usage =
     123
    102124
    1031251. Install and activate the plugin.
    1041262. Open *Certificate Validator > Data Management*.
    1051273. Download the example CSV, upload your completed file, or add a certificate record manually.
    106 4. Open the automatically created *Validate Certificate* page, or add `[edcv_validator]` to another page or post.
    107 5. Give each learner their Authentication Code or a direct verification link.
     1284. Open the automatically created *Validate Certificate* page, or add `[edcv_validator]` to any page or post.
     1295. Give each learner their authentication code or a direct verification link.
     130
    108131
    109132== Installation ==
     133
    110134
    1111351. Install *Edutain Certificate Validator* from the WordPress Plugins screen, or upload the `edutain-certificate-validator` folder to `/wp-content/plugins/`.
    … …  
    1131373. Go to *Certificate Validator > Data Management* to add or import certificate records.
    1141384. Confirm the automatically created *Validate Certificate* page is published, or place `[edcv_validator]` on your preferred page.
    115 5. Optional: enter Email values if you plan to use Pro email management.
     1395. Optional: enter email values if you plan to use Pro email management.
     140
     141
     142= Support =
     143* FAQ : https://edutain-certificate-validator.edutainmentuk.com/faqs/
     144* Documentation:https://edutain-certificate-validator.edutainmentuk.com/documentation/
     145* Website: https://edutain-certificate-validator.edutainmentuk.com/
     146
     147
     148
     149
     150= Follow Edutain Certificate Validator on Social Media =
     151[LinkedIn](https://www.linkedin.com/showcase/edutain-certificate-validator/) | [Facebook](https://www.facebook.com/edutaincertificatevalidator/) | [Youtube](https://www.youtube.com/@EdutainCertificateValidator) |
     152[Instagram](https://www.instagram.com/edutaincertificatevalidator/)
     153
    116154
    117155== Frequently Asked Questions ==
    118156
     157
    119158= Is the free certificate validator limited? =
    120159
    121 No. The core CSV upload, individual record management, CSV/XLSX export, unlimited stored records and public certificate verification form are available without Pro. A single CSV upload is limited to 10 MB and 100,000 data rows for safe processing; this is an import-operation limit, not a stored-record limit.
     160
     161No. CSV upload, individual record management, CSV and XLSX export, unlimited stored records, and the public certificate verification form are all available without Pro. A single CSV upload is limited to 10 MB and 100,000 data rows for safe processing. That is a limit on one import operation, not on how many records you can store.
     162
    122163
    123164= What columns must my CSV contain? =
    124165
    125 The required columns are  `Name`, `Issue Date` (or `Completion Date`) and `Authentication Code`. Columns can be in any order and header matching is case-insensitive. `Email` is optional.
     166
     167The required columns are `Name`, `Issue Date` (or `Completion Date`), and `Authentication Code`. Columns can be in any order, and header matching is not case-sensitive. `Email` is optional.
     168
    126169
    127170= Which date formats can I import? =
    128171
    129 Completion Date and the Pro Expiry Date column accept `dd/mm/yyyy` or `yyyy-mm-dd`. Invalid calendar dates are skipped and reported.
     172
     173Completion Date and the Pro Expiry Date column accept `dd/mm/yyyy` or `yyyy-mm-dd`. Invalid calendar dates are skipped and reported back to you.
     174
    130175
    131176= Can I upload multiple CSV files? =
    132177
    133 Yes. Each upload is merged into the existing dataset. Existing Authentication Codes are skipped as duplicates and reported.
     178
     179Yes. Each upload is merged into your existing dataset. Authentication codes that already exist are skipped as duplicates and listed in the import summary.
     180
    134181
    135182= Can I export my certificate records? =
    136183
    137 Yes. The complete dataset can be downloaded as CSV or XLSX. With Pro active, exports also include expiry information and custom fields.
     184
     185Yes. Your complete dataset can be downloaded as CSV or XLSX. With Pro active, exports also include expiry information and custom fields.
     186
    138187
    139188= Where is certificate data stored? =
    140189
    141 Certificate records are stored in the `{prefix}_edcv_certificates` table in your WordPress database. Pro certificate metadata and verification analytics use separate plugin tables.
     190
     191Certificate records are stored in the `{prefix}_edcv_certificates` table in your own WordPress database. Pro certificate metadata and verification analytics use separate plugin tables.
     192
    142193
    143194= How do visitors verify a certificate? =
    144195
    145 Visitors enter a Authentication Code on the automatically created Validate Certificate page or any page containing `[edcv_validator]`. A URL containing `?certificate_code=THEIR-CODE` or `?code=THEIR-CODE` pre-fills the form and starts verification automatically.
     196
     197Visitors enter an authentication code on the automatically created Validate Certificate page, or on any page containing `[edcv_validator]`. A URL containing `?certificate_code=THEIR-CODE` or `?code=THEIR-CODE` fills in the form and starts verification automatically, which makes it easy to verify a certificate from a link or a QR code.
     198
     199
     200= Can I use this to verify ID cards, memberships, or other documents? =
     201
     202
     203Yes, with Pro. Custom fields let you record whatever the document needs — ID card numbers, membership types, test results, license details — so the same public page works as an ID card verifier, a library card verifier, or a general document verification page. The course name field can be left empty.
     204
    146205
    147206= Is the public verification form protected against abuse? =
    148207
    149 The verification endpoint is nonce-protected and allows 30 attempts per IP in a fixed 60-second window. Public PDF downloads use a separate limit of 10 attempts per IP in their own fixed 60-second window. Developers can adjust limits with the `edcv_rate_limit_max_attempts` and `edcv_rate_limit_window` filters; trusted hosting environments can provide a validated, server-normalized client IP with `edcv_rate_limit_visitor_identity`.
    150 
    151 = Does the plugin require an LMS or external verification API? =
    152 
    153 No LMS or external verification API is required. Certificate lookup, QR generation and PDF generation run on your WordPress site. Freemius is used for licensing, account and checkout services, and WordPress email delivery depends on your site's mail configuration.
     208
     209Yes. The verification endpoint is nonce-protected and allows 30 attempts per IP address in a fixed 60-second window. Public PDF downloads use a separate limit of 10 attempts per IP in their own 60-second window.
     210
     211
     212= Does the plugin require an LMS or an external verification API? =
     213
     214
     215No. Certificate lookup, QR generation, and PDF generation all run on your own WordPress site. Freemius is used only for licensing, account, and checkout services, and email delivery depends on your site's existing mail configuration.
     216
    154217
    155218= Will the shortcode work with my theme or page builder? =
    156219
    157 Yes. `[edcv_validator]` is a standard WordPress shortcode, so it works in the block editor, classic editor and any page builder that supports shortcodes, including Elementor, Divi and Beaver Builder.
     220
     221Yes. `[edcv_validator]` is a standard WordPress shortcode, so it works in the block editor, the classic editor, and any page builder that supports shortcodes, including Elementor, Divi, and Beaver Builder.
     222
    158223
    159224= Who can access the certificate admin area? =
    160225
    161 Only Administrators by default. Editors, Authors and other roles cannot see or manage certificate data.
     226
     227Administrators only, by default. Editors, Authors, and other roles cannot see or manage certificate data.
     228
    162229
    163230= How does Pro email management choose recipients? =
    164231
    165 It uses the valid `Email` stored in each core certificate record. Records without a valid email address are skipped. Bulk sends are queued through WP-Cron in batches of 15.
    166 
    167 = What does Pro require for QR codes? =
    168 
    169 QR generation requires the PHP GD extension. If GD is unavailable, the plugin shows an administrator notice and does not generate QR images.
     232
     233It uses the valid `Email` value stored in each certificate record. Records without a valid email address are skipped. Bulk sends are queued through WP-Cron in batches of 15.
     234
     235
     236= What does the Pro QR code generator require? =
     237
     238
     239QR generation requires the PHP GD extension, which most hosts enable by default. If GD is unavailable, the plugin shows an administrator notice and does not generate QR images.
     240
    170241
    171242= What happens when a certificate expires or is revoked? =
    172243
    173 With Pro active, the public result changes to show expired, revoked or suspended status. Public PDF download is offered only for certificates whose current state is valid.
     244
     245With Pro active, the public result changes to show expired, revoked, or suspended status. Public PDF download is offered only for certificates that are currently valid.
     246
    174247
    175248= Do generated PDF certificates support all languages and characters? =
    176249
    177 Generated PDF certificates currently work best with Latin-based text. Unsupported characters in learner names, course titles, issuer names or signature names may be transliterated or omitted in the PDF. Certificate records and the public verification page continue to use WordPress's normal UTF-8 text handling and do not share this PDF limitation.
     250
     251Generated PDF certificates work best with Latin-based text. Unsupported characters in learner names, course titles, issuer names, or signature names may be transliterated or omitted in the PDF. Certificate records and the public verification page use WordPress's normal UTF-8 text handling and are not affected by this limitation.
     252
    178253
    179254= Will updating from version 1.0 delete existing certificates? =
    180255
    181 No. The plugin migrates the legacy CSV dataset into its database table and keeps a backup under a random filename. Version 2.0.0 also migrates the former Pro `email` metadata value into the core Email column when available.
    182 
    183 = What happens to data when I deactivate or uninstall the plugin? =
    184 
    185 Deactivating leaves everything untouched. Uninstalling also retains data by default. The Data Management page includes an opt-in setting to delete core certificate data on uninstall. Pro settings include a separate opt-in control for deleting Pro metadata, analytics and settings. Review both controls before uninstalling.
    186 
     256
     257No. The plugin migrates your legacy CSV dataset into its database table and keeps a backup under a random filename. Version 2.0.0 also migrates the former Pro `email` metadata value into the core Email column where one is available.
     258
     259
     260= What happens to my data when I deactivate or uninstall the plugin? =
     261
     262
     263Deactivating leaves everything untouched. Uninstalling also keeps your data by default. The Data Management page includes an opt-in setting to delete core certificate data on uninstall, and Pro settings include a separate opt-in control for deleting Pro metadata, analytics, and settings. Check both before uninstalling.
     264
     265
     266= For developers =
     267
     268
     269Rate limits can be adjusted with the `edcv_rate_limit_max_attempts` and `edcv_rate_limit_window` filters. Trusted hosting environments can supply a validated, server-normalized client IP through `edcv_rate_limit_visitor_identity`. Record lifecycle actions and verification card filters are preserved from earlier versions.
    187270
    188271
    189272== Screenshots ==
    190273
    191 1. Add a Record.
    192 2. Bulk Upload.
    193 3. Certificate Verification.
    194 4. LinkedIn Sharing.
    195 5. Data Table.
     274
     2751. Add a record.
     2762. Bulk upload.
     2773. Certificate verification.
     2784. LinkedIn sharing.
     2795. Data table.
     280
    196281
    197282== Changelog ==
    198283
     284
    199285= 2.0.0 =
    200 * New: added Email as an optional core certificate field for manual entry, CSV import and record editing.
    201 * New: added complete-record CSV and XLSX exports, including Pro expiry and custom-field data when Pro is active.
     286* New: added Email as an optional core certificate field for manual entry, CSV import, and record editing.
     287* New: added complete-record CSV and XLSX exports, including Pro expiry and custom field data when Pro is active.
    202288* New: added Pro bulk record deletion and bulk field updates.
    203 * New: added Pro QR PNG downloads, QR PDF downloads and multi-record QR PDF sheets.
     289* New: added Pro QR PNG downloads, QR PDF downloads, and multi-record QR PDF sheets.
    204290* New: added tabbed Data Management and Pro Settings workflows.
    205291* New: added Pro manual email management and queued bulk sending from core Email values.
    206 * Improved: added live eligible-recipient counts, a capped recipient preview and loading/error states before a bulk email is queued.
    207 * Changed: Pro features now unlock with a licence key, instead of installing a separate add-on plugin.
    208 * Changed: certificate email sending is manual-only; adding or importing records does not automatically send email.
     292* Improved: added live eligible-recipient counts, a capped recipient preview, and loading and error states before a bulk email is queued.
     293* Changed: Pro features now unlock with a license key instead of a separate add-on plugin.
     294* Changed: certificate email sending is manual only. Adding or importing records no longer sends email automatically.
    209295* Changed: custom fields are limited to 30 per certificate record.
    210 * Improved: CSV imports validate supported date formats, reject duplicate headers and report invalid dates.
     296* Improved: CSV imports validate supported date formats, reject duplicate headers, and report invalid dates.
    211297* Improved: legacy Pro email metadata is migrated to the core Email column.
    212 * Security: added capability and nonce checks to administrative AJAX operations and retained rate limiting on public verification and PDF endpoints.
    213 * Security: CSV and XLSX exports neutralise cells that could be interpreted as spreadsheet formulas.
    214 * Developer: preserved record lifecycle actions, verification-card filters and configurable rate-limit filters.
    215 * Merged the former Pro add-on into the same plugin product and licence flow.
    216 * Kept CSV upload, record management and public verification free and unlimited.
     298* Security: added capability and nonce checks to administrative AJAX operations, and retained rate limiting on public verification and PDF endpoints.
     299* Security: CSV and XLSX exports neutralize cells that could be interpreted as spreadsheet formulas.
     300* Developer: preserved record lifecycle actions, verification card filters, and configurable rate-limit filters.
     301
    217302
    218303= 1.1.0 =
    219304* Moved certificate data from a legacy CSV file to a dedicated database table, with automatic migration.
    220 * Added the redesigned public verification result, direct verification links and rate limiting.
    221 * Added individual record management, search, sorting and pagination.
    222 * Added drag-and-drop CSV upload, flexible column order and import summaries.
     305* Added the redesigned public verification result, direct verification links, and rate limiting.
     306* Added individual record management, search, sorting, and pagination.
     307* Added drag-and-drop CSV upload, flexible column order, and import summaries.
    223308* Added the optional core-data deletion setting for uninstall.
     309
    224310
    225311= 1.0.0 =
    226312* Initial release.
    227313
     314
    228315== Upgrade Notice ==
    229316
     317
    230318= 2.0.0 =
    231 This update completes the merged Free/Pro architecture, adds Email and export tools, and introduces manual queued Pro email management. Existing certificate records are retained, and legacy Pro email metadata is migrated when available. Review your email template and uninstall-retention settings after updating.
     319Adds Email support, full data exports, and Pro QR, bulk, and email tools. Your certificate records are kept. Review your uninstall settings after updating.
     320
    232321
    233322= 1.1.0 =
    234 Major update: database storage with automatic migration, redesigned verification card, direct verification links and rate limiting.
     323Major update: database storage with automatic migration, redesigned verification card, direct verification links, and rate limiting.
     324
    235325
    236326== Privacy ==
    237327
    238 Certificate records, including learner names, optional Email addresses and the optional `expiry_date` value, are stored in a dedicated table in your WordPress database. Pro expiry logic uses that core `expiry_date` value. Pro certificate status and custom fields are stored in a separate metadata table.
    239 
    240 Public verification compares a submitted Authentication Code with the local certificate table. Rate limiting creates a temporary transient keyed by an MD5 hash of the visitor's IP address. With Pro analytics active, each verification attempt is stored with the submitted Authentication Code, result, certificate state, timestamp and a salted MD5 hash of the visitor's IP address. The analytics retention setting controls scheduled deletion; it can also be set to retain logs indefinitely.
    241 
    242 Pro email management sends certificate information to valid Email recipients through WordPress `wp_mail()`. Bulk email jobs store temporary job state in the `edcv_pro_email_queue` option, including a job identifier, record-scan cursor and maximum record ID, recipient/count progress, status, and timestamps. WP-Cron processes eligible records in batches of 15. Legacy jobs created by earlier 2.0.0 development builds may temporarily retain pending record IDs until those jobs finish or are cancelled. Delivery and any transfer to an email provider depend on the WordPress site's mail setup.
    243 
    244 QR codes and PDFs are generated locally. QR generation uses temporary files that are deleted after use. A PDF logo selected from the Media Library is read from its local attachment file; a manually configured external logo URL is downloaded temporarily during PDF generation and then deleted.
    245 
    246 The bundled Freemius SDK provides account, licensing, entitlement, premium-update and Checkout functionality. Its remote Checkout script is loaded on EDCV's Dashboard, Data Management, dedicated Upgrade, and Freemius Account admin pages where purchasing or upgrading controls may be needed, while account, licence, update and optional diagnostic communication depends on the administrator's actions and the permissions presented by Freemius. See the External services section for the categories of information involved and links to Freemius's terms and privacy policy.
    247 
    248 Plugin data is retained on uninstall unless the administrator enables the relevant deletion settings. Core certificate data and Pro metadata/analytics have separate opt-in deletion controls.
     328
     329Certificate records, including learner names, optional email addresses, and the optional `expiry_date` value, are stored in a dedicated table in your WordPress database. Pro certificate status and custom fields are stored in a separate metadata table.
     330
     331
     332Public verification compares a submitted authentication code against your local certificate table. Rate limiting creates a temporary transient keyed by a hashed version of the visitor's IP address. With Pro analytics active, each verification attempt is stored with the submitted code, result, certificate state, timestamp, and a salted hash of the visitor's IP address. The analytics retention setting controls scheduled deletion, and can also be set to keep logs indefinitely.
     333
     334
     335Pro email management sends certificate information to valid recipients through WordPress `wp_mail()`. Bulk email jobs store temporary job state in the `edcv_pro_email_queue` option, including a job identifier, record-scan cursor, maximum record ID, recipient progress, status, and timestamps. WP-Cron processes eligible records in batches of 15. Delivery, and any transfer to an email provider, depends on your site's mail setup.
     336
     337
     338QR codes and PDFs are generated locally. QR generation uses temporary files that are deleted after use. A PDF logo selected from the Media Library is read from its local attachment file. A manually configured external logo URL is downloaded temporarily during PDF generation and then deleted.
     339
     340
     341The bundled Freemius SDK provides account, licensing, premium update, and checkout functionality. See the External services section above for what is sent, when, and links to Freemius's terms and privacy policy.
     342
     343
     344Plugin data is kept on uninstall unless you enable the relevant deletion settings. Core certificate data and Pro metadata and analytics have separate opt-in deletion controls.
Note: See TracChangeset for help on using the changeset viewer.