=== Catalogue de formation Digiforma === Contributors: digiforma Tags: Formation Requires at least: 6.6 Tested up to: 7.0 Requires PHP: 8.2 Stable tag: 1.6.2 License: GPL2 Synchronize your training catalog and manage pre-registrations for inter, intra, and custom sessions directly from WordPress. == Description == Automatically synchronize your Digiforma training catalog and allow your visitors to register directly from your WordPress site. == Main Features == * Automatic synchronization of training programs, categories, sessions, and instructors from the Digiforma API * Custom post type "digiforma" to manage your training programs * Training category taxonomy to organize your programs * Training sessions stored in program posts * Secure registration forms for: * Pre-registrations for inter sessions (with session selection) * Requests for intra sessions (in-company training) * Requests for custom sessions (personalized training) * Multi-layer anti-spam protection (honeypot, rate limiting, Akismet, temporal validation) * Customizable templates for displaying archives and training details * Appearance customization (colors, images, text) from WordPress administration * Automatic cleanup of obsolete content * Integrated SEO optimizations == Installation == 1. Install and activate the plugin from the WordPress repository 2. Go to Digiforma > Settings 3. Enter your Digiforma license key (obtained from app.digiforma.com) 4. Configure the form and thank-you pages 5. Click "Synchronize catalog" to import your training programs == Usage == Use the [digiforma_form] shortcode to display the registration form. Templates can be overridden in your theme to customize the display. == Developer hooks == Themes and custom plugins can extend Digiforma with WordPress actions and filters. === Registration form (inter sessions) === * `digiforma_form_session_option_label` — Filter the label of one session in the dropdown. * Parameters: `$label` (string), `$session` (array), `$postId` (int) * Return: string (escaped again on output; do not include HTML) * `digiforma_form_session_options` — Filter the full list of session options (`session id => label`). * Parameters: `$options` (array), `$postId` (int), `$sessions` (array) * Return: array Example in a theme `functions.php`: add_filter( 'digiforma_form_session_option_label', function ( $label, $session, $post_id ) { $name = isset( $session['name'] ) ? (string) $session['name'] : ''; return $name !== '' ? $name : $label; }, 10, 3 ); === GraphQL client === * `digiforma_graphql_client` — Replace the Digiforma GraphQL client instance used on form submission. === Spam protection === * `digiforma_spam_min_submission_time` — Minimum seconds before a submission is accepted (int). * `digiforma_spam_max_submission_time` — Maximum seconds before a submission is rejected (int). * `digiforma_spam_suspicious_email_domains` — List of suspicious email domains (array). * `digiforma_spam_suspicious_keywords` — List of suspicious keywords (array). * `digiforma_spam_strict_referrer_check` — Enable strict referrer checking (bool). * `digiforma_spam_require_javascript` — Require JavaScript to submit (bool). * `digiforma_spam_score_threshold` — Spam score threshold (int). === Rate limiting === * `digiforma_rate_limit_max_attempts` — Maximum submission attempts (int). * `digiforma_rate_limit_time_window` — Rate limit time window in seconds (int). === Templates === * `digiforma_render_single_in_block` — Return true to render the single formation template inside a block wrapper (bool). Actions on archive and single templates include: `digiforma_archive_before`, `digiforma_archive_after`, `digiforma_archive_after_title`, `digiforma_archive_before_loop`, `digiforma_archive_after_loop`, `digiforma_archive_empty`, `digiforma_archive_loop_item_before`, `digiforma_archive_loop_item_after`, `digiforma_single_before`, `digiforma_single_after_header`, `digiforma_single_formation_page_after_video`, `digiforma_single_formation_page_after_sessions`, `digiforma_single_formation_page_after_content`. === Synchronization === * `digiforma_sync_programs_completed` — Fired after program sync (`$result`, `$forceUpdate`). * `digiforma_sync_sessions_completed` — Fired after session sync (`$result`, `$forceUpdate`). * `digiforma_sync_categories_completed` — Fired after category sync (`$result`, `$cleanupImmediately`). * `digiforma_sync_instructors_completed` — Fired after instructor sync (`$result`, `$forceUpdate`). * `digiforma_auto_sync_failed` — Fired when automatic sync fails (`$exception`). === Administration === * `digiforma/admin/before_main_page` — Before the main Digiforma settings page is rendered. * `digiforma/admin/after_main_page_header` — After the main settings page header. == Security == The plugin implements multiple layers of protection: * CSRF protection with WordPress nonces * Anti-bot honeypot * Rate limiting by IP and email * Advanced spam detection * Complete validation and sanitization of all data == External Services == This plugin connects to external services to provide its functionality. Below is detailed information about each service used. === Digiforma API === The extension synchronizes training content and manages registrations. * **What the service is and what it is used for**: Digiforma is a training management platform that allows organizations to organize and manage their training catalog. The Digiforma plugin is used to: * Synchronize training programs, categories, training sessions, and instructors from Digiforma to WordPress. * Validate the license key during plugin configuration. * Submit pre-registration requests for training sessions (inter, intra, and custom sessions). * **What data is sent and when**: * **During synchronization** (manual or automatic): The plugin sends authenticated queries containing the license key to retrieve training data. No personal user data is sent during synchronization. * **During license key validation**: The plugin sends a test query with the license key to verify API access. * **During form submission**: When a visitor submits a registration form, the plugin sends the following personal data to create a registration in Digiforma: * **For individuals**: * First name. * Last name. * Email. * Phone number. * Address. * Postal code. * City. * Country. * Optional: custom fields configured in Digiforma. * **For organizations**: * Company name. * Company email. * Phone number. * SIRET number. * Address. * Postal code. * City. * Country. * Optional: custom fields configured in Digiforma. * **Additional context**: * Training program ID. * Session ID (for inter sessions). * Number of learners. * Form type. * **Service provider**: Digiforma * **Terms of service** and **Privacy policy**: https://app.digiforma.com/tos == Support == For any questions or issues, consult the plugin readme (Developer hooks section) or contact Digiforma support. == Changelog == = [1.6.3] - 2026-07-07 = * Create a filter for sessions name * Change color picker * Add required mention at the bottom of the form * Fix remove programs that are no more in Digiforma * Add field list on message error * Fix SEO JSON and add Course Schema * Use API config for base fields * Add all date for sessions in meta * Fix reveiw rate on single header = [1.6.2] - 2026-06-16 = * Fix synchro for sessions * Add hooks comments * Fix line breaks errors = [1.6.1] - 2026-05-29 = * Add trainee in register form * Create a second style for form with shortcode attribute style="catalog" * Add a force sync button to force replace all meta un programms * Adding hook after sync action = [1.5.3] - 2026-05-04 = * Fix rewrite achrive with front * Fix responsive archive for IOS * Add line breaks on single accessibility text = [1.5.2] - 2026-04-25 = * Hotfix form open div * Add line break in mentoring text = [1.5.1] - 2026-04-14 = * Hotfix single sidebar mobile = [1.5.0] - 2026-04-09 = * Add compatibility with FSE * Fix bullets in the training card list * Add advanced settings for fixed header * Change single header meta design * Add created-at / updated-at display * Force permalink rules * Change sidebar order on mobile = [1.4.1] - 2026-03-24 = * Hotfix for duplicate fields in forms = [1.4.0] - 2026-03-20 = * For the registration form: fetch fields from Digiforma * Design changes for next sessions * Fix price display * Display comment for score in training detail page * Add a minimal size for font * Add support for half hour/day * Do not display empty cards on training detail page = [1.3.1] - 2026-02-18 = * Add French translation * Add missing translations for Spanish and German * Edit labels for administration page to make it clearer * Change color settings * Add an error message when URL identifiers are the same * Fix max capacity when set to false = [1.2.2] - 2026-02-18 = * Add French translation * Add missing translations for Spanish and German * Edit labels for administration page to make it clearer = [1.2.1] = * Initial release.