Poterie Navarraise Pottery Market Manager

Description

Poterie Navarraise Pottery Market Manager helps pottery market organizers collect applications, review candidates and present selected exhibitors. The French description is “Poterie Navarraise — Organisation de marchés potiers”. The interface and outgoing messages are currently mostly in French.

Visit the official plugin website for a presentation in French.

The plugin is available on WordPress.org and GitHub. Updating from versions 0.19.1 through 0.19.4 preserves existing editions, applications, team assignments, ratings and uploaded files. Existing editions without a city remain usable; enter their market city when next saving their settings. When switching from the old 0.19.0 test package, deactivate it first and create fresh editions and team assignments: the marcpo_ identifiers introduced in 0.19.1 do not migrate those older test records. Read the document storage information below.

Features

  • Multiple editions with application dates, venue, prices, PDF rules and stand settings.
  • Application and selection gallery blocks linked to specific editions.
  • Applications without WordPress accounts: contact details, presentation, activity and six uploads.
  • Separate file transfers and temporary recovery of answers in the browser.
  • Application search, filters and sorting by name, submission date or points.
  • Direct selection or ratings from 0 to 5 by active jury members.
  • Voting progress table, selection history and filtered CSV exports.
  • Invitations and submission confirmations through WordPress email delivery.
  • Public exhibitor photographs, techniques, links and optional mapping with separate site and applicant consent.

No ACF or form builder is required. Blocks use the WordPress editor. Scripts and styles, including Leaflet, are bundled. Mapping providers are documented under External services.

Team and permissions

The admin menu is called “Gestion Marché Potier”. The home page offers shortcuts, a setup guide and a contact email link showing the installed version. In simple selection mode the voter section is hidden; existing assignments and ratings are kept for a later return to multiple voting. Selection history has compact identity columns and a search restricted to surname, first name and email.

Each edition requires an internal market city (“Ville”) below its year. It is not shown in the public application form. Selection history can be filtered by this market city, together with the identity search; only accessible editions contribute to the city choices and results. Existing editions without a city remain usable and can be found under “Ville non renseignée”. Complete their city when next editing them. The applicant’s city and the public venue description remain separate.

The administrator’s “Enregistrer l’édition et envoyer l’invitation” button saves the edition and sends the invitation after validation. Complete the required fields first. A new edition remains a draft until published. New accounts are also invited automatically when first saved. Existing accounts keep their passwords; ordinary saves do not resend their invitations.

Each edition has one administrator identified by name and email. The “[Poterie Navarraise] Administrateur marché” role can manage editions, applications, pages and posts across the site, including other accounts’ content. It cannot access technical settings, plugins or native user management.

The “[Poterie Navarraise] Votant sélection” role can review applications in assigned editions. In multiple voting mode, active jurors can see jury ratings and update their own rating at any time. Application closing dates do not close voting. Point totals never select a candidate automatically.

Replacing an edition administrator does not revoke their site-wide WordPress permissions. A site administrator must remove those permissions when necessary.

Public selection

The gallery requires a published edition, its “Autoriser l’affichage public de la sélection” setting, a selected application and the applicant’s publication authorization. Public selection is disabled by default.

The gallery displays names, town, postal code, techniques, website links and product photographs. The map exposes geocoded addresses. Email, telephone, supporting documents and stand photographs are not displayed in the gallery.

The application form requires authorization for public presentation if selected. A separate, optional checkbox authorizes sending the address to IGN and displaying it on the public map. It is unchecked by default. Refusing mapping does not prevent applying or appearing in the gallery. Telephone collection is unchanged; telephone numbers and email addresses are not sent to mapping providers.

Mapping also requires explicit site-administrator authorization under Gestion Marché Potier > Services externes. IGN geocoding and OpenStreetMap tiles have separate switches, both off by default. Enabling the plugin, publishing the selection or accepting photo publication does not enable either service or imply the applicant’s mapping consent. Existing applications without the new mapping agreement are not mapped. Visitors do not have a separate map consent button.

Data and privacy

Contact details, answers, decisions, authorizations, team assignments, ratings and email status are stored in the WordPress database. Mapping authorization is recorded separately with the date of agreement. Applicants can contact the organizer to withdraw it; the organizer can uncheck the mapping agreement in the application. This removes its saved map position and cancels its queued geocoding task. Previously transmitted requests cannot be recalled from the provider. Organizers and jurors use WordPress accounts; applicants do not receive accounts.

Photos and supporting documents are WordPress Media Library attachments with ordinary public file URLs. Files follow the configured WordPress uploads directory. JPEG copies at 1080 by 1350 pixels are generated locally after an application is saved and are also available in the Media Library. WordPress selects the available image editor (Imagick or GD). Copies preserve the whole photo, centred on white, without enlarging small photos or replacing the source. If an editor is unavailable or processing fails, the application and its source file remain saved; only the optional copy is marked as failed. Nothing is posted automatically to Instagram or Facebook.

Supporting documents have no special access protection. Their URLs can be opened without signing in. This does not display them in the selection gallery: that gallery only shows the selected product photographs and public presentation. Access to application management and CSV export still requires the appropriate WordPress permissions.

The technical marcpo_form_session cookie links browser sessions to transfers and is renewed for 24 hours. Answers and choices may be saved in browser localStorage under marcpo-candidate-draft: followed by the edition ID, with a maximum logical lifetime of 24 hours. Expired drafts are removed when the code next runs; a closed browser may retain them physically until another visit or manual deletion.

Temporary uploads expire after 24 hours. Physical cleanup depends on subsequent reads and an hourly WordPress task; delayed WP-Cron execution can prolong storage. On confirmation, the existing attachments are assigned to the application without copying them; only the draft metadata is removed. Cleanup only deletes explicitly marked provisional media with no application reference. Ordinary unattached media are never collected.

Rate limiting stores counters associated with an HMAC of the IP address, with a fifteen-minute expiry renewed on counted attempts. Missing or invalid IP addresses share a fallback bucket. These counters do not contain raw IP addresses; hosting or provider logs may independently retain them.

Confirmed applications, identity records and votes have no automatic retention period. Replacing a file or permanently deleting an application preserves its confirmed media for reuse. Delete unwanted confirmed media explicitly from the Media Library. Deleting an application removes its votes but does not erase every record associated with the person. This version does not integrate WordPress personal data export or erasure tools and does not purge data on uninstall.

Organizers must define retention periods and update their site’s privacy policy for their practices, backups and providers. The form links to that policy when configured in WordPress.

External services

IGN / Géoplateforme: French address geocoding

Provider: Institut national de l’information géographique et forestière (IGN).
Purpose: convert a French address into coordinates for the public workshop map.

The WordPress server requests https://data.geopf.fr/geocodage/search over HTTPS with q (street, postal code and town), index=address and limit=2. The User-Agent includes the plugin name and site’s home URL. IGN also receives the server IP. The plugin does not attach email, telephone, photographs, documents, ratings or the applicant’s name as a separate field; address text is normalized before transmission without changing the application. Postal-code whitespace is removed; standalone st/ST becomes saint in streets and towns. Country aliases Pays Basque, Pays-Basque, Euskal Herri, Euskal-Herri and Euskal Herria are treated as France. If the street result is unsuitable, a second request uses q=town, type=municipality and postcode, with index=address and limit=2. A sufficiently matching, unambiguous municipality result is shown as an approximate town-centre position.

Scheduled WordPress tasks make requests only after a site administrator explicitly enables IGN and only for selected applications with separate mapping consent and publication authorization in editions allowing public selection. Authorization is checked again when the task runs. Addresses must pass French format checks. Coordinates already recorded for the same address avoid another call. Responses may be cached locally for 180 days; accepted coordinates remain in application metadata until mapping consent is withdrawn or the application is deleted. Shared geocoding response caches expire separately.

  • Documentation: https://ignf.github.io/cartes.gouv.fr-documentation/fr/guides-utilisateur/utiliser-les-services-de-la-geoplateforme/geocodage/
  • Terms: https://cartes.gouv.fr/cgu/
  • Personal data: https://cartes.gouv.fr/donnees-personnelles/

OpenStreetMap: map tiles

Provider: OpenStreetMap Foundation (OSMF).
Purpose: display the gallery map background using https://tile.openstreetmap.org/{z}/{x}/{y}.png tiles.

Only after a site administrator explicitly enables OpenStreetMap does the plugin render a map of eligible applicants who authorized address mapping. The visitor’s browser requests tiles directly when that map enters the visible area, or during initialization if IntersectionObserver is unavailable. Panning and zooming may trigger more requests. No separate visitor acceptance click is requested beforehand.

OSMF receives the visitor’s IP address, browser HTTP information, tile coordinates and zoom level. The code sets strict-origin-when-cross-origin referrer policy: the site’s origin may be transmitted on external HTTPS requests according to browser rules. Marker names and addresses are rendered locally and are not included as fields in tile requests, but those requests reveal the viewed geographical area.

The service is subject to its usage policy and has no availability guarantee. Preserve attribution and comply with provider terms.

  • Service: https://www.openstreetmap.org/
  • Tile usage policy: https://operations.osmfoundation.org/policies/tiles/
  • Privacy: https://osmfoundation.org/wiki/Privacy_Policy
  • Map data attribution and licensing: https://www.openstreetmap.org/copyright

Custom providers

Developers can override provider URLs through marcpo_address_geocoder_url and marcpo_map_tile_url. The information above describes default providers. Sites using replacements must document the actual services and update their privacy policy accordingly.

Email and external links

Emails use wp_mail() and the site’s configured transport. No particular third-party email provider is required. Submission confirmations include answers and filenames without attachments. Recipients are the applicant and edition administrator; active jurors also receive them in multiple voting mode. Invitations contain login information and a password setup link for new accounts.

The form’s DATA INPI link and applicants’ website, Instagram and Facebook links open those sites when clicked. They do not trigger automatic imports or posts.

Source code and third-party libraries

Plugin source

The plugin’s PHP, JavaScript and CSS are distributed in readable form under GPL-2.0-or-later. No build step, Composer or npm is required to run it.

  • Repository: https://github.com/PaulPoterie/MarchePotier
  • License: https://www.gnu.org/licenses/gpl-2.0.html

Leaflet 1.9.4

Leaflet draws the map, markers and popups in the browser. Its JavaScript and CSS are bundled in assets/vendor/leaflet/ and served by the WordPress site. No Leaflet CDN is used.

Leaflet uses the BSD-2-Clause license. Its copyright notice and license text are preserved in assets/vendor/leaflet/LICENSE.

  • Project: https://leafletjs.com/
  • Matching source version: https://github.com/Leaflet/Leaflet/tree/v1.9.4
  • Uncompressed JavaScript sources: https://github.com/Leaflet/Leaflet/tree/v1.9.4/src
  • Distribution and CSS: https://github.com/Leaflet/Leaflet/tree/v1.9.4/dist
  • License: https://github.com/Leaflet/Leaflet/blob/v1.9.4/LICENSE
  • Contribution and build instructions: https://github.com/Leaflet/Leaflet/blob/v1.9.4/CONTRIBUTING.md

Leaflet is a local library, separate from the IGN and OpenStreetMap services above. Its license does not replace service terms or map data licensing.

Installation

  1. Use WordPress 6.6 or later and PHP 8.2 or later, Fileinfo and a WordPress image editor (Imagick or GD) supporting JPEG, PNG and WebP for social copies. Use MySQL/MariaDB, or SQLite through the official WordPress SQLite Database Integration plugin.
  2. On staging, upload the ZIP containing the poterie-navarraise-market-manager folder through Plugins > Add New > Upload Plugin, then activate it.
  3. Sign in as a WordPress administrator and open Gestion Marché Potier. Review the documented public file storage behavior and verify email delivery before collecting real applications.
  4. Create an edition, complete its settings and required administrator, then publish it.
  5. Add the “Formulaire de candidature” block to a page and choose the edition. Use one form per page.
  6. Exclude the application page from page/CDN caching, ensure WP-Cron works and test a complete application.
  7. Add the “Présentation de la sélection” block, choose the edition and enable public selection when ready.
  8. To offer a map, a WordPress site administrator must read and enable the desired providers under Gestion Marché Potier > Services externes. Applicants must separately opt in to address mapping. Purge page/CDN caches after changing provider settings or withdrawing mapping consent so cached pages reflect the change.

When switching from the former marche-potier package, deactivate the old plugin before activating this renamed package. WordPress may list them separately; do not activate both together.

Documented local tests use WordPress 7.1 and PHP 8.3. Declared minimum versions do not represent a fully tested compatibility matrix.

FAQ

Can I use SQLite or WordPress Playground?

The write lock uses the WordPress options table instead of MySQL named locks. MySQL and SQLite with the official SQLite Database Integration plugin are covered by the local database tests. MariaDB uses the same WordPress SQL path; it has not been tested separately in this test run. PostgreSQL, SQL Server and other third-party database adapters are not validated. Playground uses SQLite, but these local tests do not certify every browser/runtime combination.

The lock is released after each operation, with a fallback at request shutdown. It is never taken over merely because an operation is slow. A hard server termination can leave an orphaned lock: if the busy message persists, ask the site administrator to investigate rather than changing upload permissions. Recovery requires confirming that no plugin write is still running.

Which files are accepted?

Three product photographs, one stand photograph, proof of professional status and professional liability insurance are required. Photos accept JPEG, PNG and WebP; documents also accept PDF. The limit is 20 MB per file, reduced when server limits are lower. HEIC is not supported.

Can applications work without mapping services?

Yes. Both mapping services are disabled by default. Applications, reviews, ratings, exports and the gallery remain available without them. Refusing mapping or an address that cannot be geocoded does not prevent an eligible exhibitor appearing in the gallery. Markers require the applicant’s mapping agreement and saved coordinates; displaying the map also requires the OpenStreetMap setting. Turning off IGN stops new geocoding requests, including queued tasks; turning off OpenStreetMap stops the plugin rendering the map on subsequent page loads. Already loaded or cached pages need refreshing or purging.

Is an API key required?

No API key or registration with IGN or OpenStreetMap is required by this version. Provider terms still apply.

Are selection decisions emailed automatically?

No. Invitations and submission confirmations are sent, but not automatic acceptance or rejection messages. Failed emails are not automatically retried. Delivery depends on the site’s email system.

How do I back up or uninstall?

Back up the database and uploads directory together. Deactivating or deleting the plugin does not automatically remove its records, files, votes, options or roles. Manage these separately according to your retention policy.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“Poterie Navarraise Pottery Market Manager” is open source software. The following people have contributed to this plugin.

Contributors

Changelog

0.19.5

  • Use native WordPress image editors for social copies, supporting Imagick as well as GD.
  • Preserve complete photos on a white 1080 by 1350 JPEG canvas without cropping or enlarging small images.
  • Keep source files and applications saved if the optional image copy fails; scope image filters to the copy operation.
  • Update installation and release documentation following WordPress.org approval.

0.19.4

  • Remove an unused WordPress media library include and load required core libraries only at their point of use.
  • Replace MySQL named locks with an owner-checked options-table lock, tested with MySQL and the official SQLite integration.
  • Distinguish busy or unavailable database locks from upload-directory errors in migration notices.
  • Add the official plugin website to the plugin header, dashboard and documentation.
  • Remove unused notification rendering code and document media lifecycles, database compatibility and recovery.

0.19.3

  • Require an internal market city below the edition year, with server-side validation; keep it out of the public application form.
  • Filter selection history by market city, combined with surname, first-name and email search.
  • Restrict city choices and results to accessible editions and group equivalent city names without case or accent differences.
  • Preserve existing editions without a city under the City not provided option until their settings are updated.
  • Update English and French documentation and add regression coverage for city validation, filtering and access controls.

0.19.2

  • Add a save-and-invite button for the market administrator, with required-field validation and draft preservation.
  • Hide the voter section in simple selection mode while preserving assignments and ratings.
  • Add optional edition title guidance.
  • Refresh the administration dashboard with the Gestion Marché Potier menu, role-based shortcuts, setup guidance and version-aware support contact.
  • Narrow identity columns in selection history and add surname, first-name and email search, with access checks and accent-insensitive matching.
  • Normalize IGN address queries and fall back to unambiguous municipality centres, with the location precision shown to visitors.
  • Update English and French documentation and add regression coverage for administration workflows.

0.19.1

  • Adopt the Poterie Navarraise Pottery Market Manager name and the poterie-navarraise-market-manager text domain.
  • Add separate site-administrator opt-ins for IGN geocoding and OpenStreetMap tiles, both disabled by default.
  • Add optional, unchecked applicant consent for address mapping, with a recorded date and withdrawal controls.
  • Validate public answers and upload descriptors before submission; use context-specific email, URL and filename sanitization.
  • Validate and sanitize public, voting, selection and export nonces before verification.
  • Validate IGN responses and retain only sanitized, relevant properties in the local cache.
  • Update English documentation for external services, data handling and bundled Leaflet sources.
  • Replace short identifiers with the distinct marcpo_ prefix. Previous test data is not migrated.
  • Load quick-edit JavaScript through WordPress and restore the saved selection correctly.
  • Sanitize public nonces and restrict operational notices to relevant plugin screens.

0.19.0

  • Edition administrators and assigned jurors in one plugin.
  • Ratings from 0 to 5, totals, personal filters and voting progress.
  • Application and selection blocks linked to editions by ID.
  • Search, filters and sorting by points, submission date and name.
  • WordPress.org readme, explicit output escaping, prepared vote queries and typed HTTP inputs.
  • WordPress Media Library storage, resumable file transfers and safe temporary media cleanup.