Changeset 3488301
- Timestamp:
- 03/22/2026 04:29:33 PM (6 days ago)
- Location:
- dfx-parish-retreat-letters
- Files:
-
- 34 added
- 1 edited
-
tags/26.03.22 (added)
-
tags/26.03.22/LICENSE (added)
-
tags/26.03.22/assets (added)
-
tags/26.03.22/assets/css (added)
-
tags/26.03.22/assets/css/message-form.css (added)
-
tags/26.03.22/assets/css/print-page.css (added)
-
tags/26.03.22/assets/js (added)
-
tags/26.03.22/assets/js/admin-footer.js (added)
-
tags/26.03.22/assets/js/admin-gdpr.js (added)
-
tags/26.03.22/assets/js/admin-retreat-edit.js (added)
-
tags/26.03.22/assets/js/message-form.js (added)
-
tags/26.03.22/assets/js/print-page.js (added)
-
tags/26.03.22/dfx-parish-retreat-letters.php (added)
-
tags/26.03.22/includes (added)
-
tags/26.03.22/includes/admin.js (added)
-
tags/26.03.22/includes/class-admin.php (added)
-
tags/26.03.22/includes/class-attendant.php (added)
-
tags/26.03.22/includes/class-confidential-message.php (added)
-
tags/26.03.22/includes/class-database.php (added)
-
tags/26.03.22/includes/class-dfx-parish-retreat-letters.php (added)
-
tags/26.03.22/includes/class-gdpr.php (added)
-
tags/26.03.22/includes/class-global-settings.php (added)
-
tags/26.03.22/includes/class-invitations.php (added)
-
tags/26.03.22/includes/class-message-file.php (added)
-
tags/26.03.22/includes/class-permissions.php (added)
-
tags/26.03.22/includes/class-print-log.php (added)
-
tags/26.03.22/includes/class-retreat.php (added)
-
tags/26.03.22/includes/class-security.php (added)
-
tags/26.03.22/languages (added)
-
tags/26.03.22/languages/dfx-parish-retreat-letters-es_ES.mo (added)
-
tags/26.03.22/languages/dfx-parish-retreat-letters-es_ES.po (added)
-
tags/26.03.22/languages/dfx-parish-retreat-letters.pot (added)
-
tags/26.03.22/readme.txt (added)
-
tags/26.03.22/uninstall.php (added)
-
trunk/readme.txt (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
dfx-parish-retreat-letters/trunk/readme.txt
r3488281 r3488301 8 8 License: GPLv3 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-3.0.html 10 Manage parish retreat programs with confidentiality, GDPR compliance, and user management. 11 12 == DFX Parish Retreat Letters == 13 14 # DFX Parish Retreat Letters 15 16 **Enterprise-Grade Retreat Management System for WordPress** 17 18 A comprehensive, security-focused WordPress plugin designed for parishes and organizations to 19 manage retreat programs with complete confidentiality, GDPR compliance, and advanced user management capabilities. 20 21 ## Description 22 23 DFX Parish Retreat Letters is a professional-grade retreat management system that provides churches and organizations 24 with enterprise-level security and functionality for managing retreat programs. The plugin features a complete retreat 25 lifecycle management system, secure confidential messaging with military-grade encryption, and a sophisticated three-tier 26 authorization system designed to protect sensitive spiritual and personal communications. 27 28 ## Core Features 29 30 ### Comprehensive Retreat Management System 31 - **Complete Retreat Lifecycle Management**: Create, edit, organize, and track retreats from planning to completion 32 - **Advanced Date Management**: Flexible scheduling system with date tracking and conflict resolution 33 - **Retreat Status Tracking**: Monitor retreat progress through customizable status workflows 34 - **Multi-Retreat Organization**: Handle multiple concurrent retreats with separate management streams 35 36 ### Advanced Attendant Management 37 - **Complete Registration System**: Comprehensive attendant registration with personal information tracking 38 - **Attendant-Retreat Associations**: Flexible assignment system linking attendants to multiple retreats 39 - **Bulk Operations**: Import/export attendant data via CSV with data validation 40 - **Personal Information Security**: Encrypted storage of sensitive personal data with GDPR compliance 41 42 ### Secure Confidential Message System 43 - **Privacy-Compliant Messaging**: Full adherence to Spanish privacy laws (LOPD-GDD) and European GDPR regulations 44 - **Cryptographically Secure URLs**: Unique, unguessable URLs generated for each attendant using cryptographic tokens 45 - **Military-Grade Encryption**: AES-256-CBC encryption for all message content and file attachments 46 - **Public Submission Interface**: Rich text editor with file upload capabilities for attendant message submission 47 - **Print-Only Backend Access**: Administrative interface shows no content preview - messages only accessible via secure printing 48 - **Complete Audit Trails**: Comprehensive logging of all message operations, access attempts, and administrative actions 49 - **Secure File Storage**: Encrypted file storage outside web directory with access control protection 50 51 ### Three-Tier Authorization System 52 - **Plugin Administrators**: Global access to all functionality with complete system control 53 - **Retreat Managers**: Full control over assigned retreats with permission delegation capabilities 54 - **Message Managers**: Specialized message-only access with read-only attendant information 55 - **User Invitation System**: Email-based invitations with secure token authentication and role assignment 56 - **Hierarchical Permissions**: Sophisticated permission inheritance with granular access control 57 - **Complete Audit Logging**: Track all administrative actions with user attribution and timestamps 58 59 ## Enterprise Security & Compliance 60 61 ### Advanced Security Features 62 - **Enterprise-Grade Encryption**: AES-256-CBC encryption for all sensitive data storage and transmission 63 - **GDPR Full Compliance**: Complete implementation of European General Data Protection Regulation requirements 64 - **Spanish Privacy Law Compliance**: Full adherence to LOPD-GDD (Ley Orgánica de Protección de Datos) 65 - **Complete Input Validation**: Comprehensive sanitization and validation preventing SQL injection and XSS attacks 66 - **CSRF Protection**: Cross-Site Request Forgery protection with WordPress nonce validation throughout the system 67 - **Rate Limiting**: Advanced abuse protection with intelligent rate limiting on sensitive operations 68 - **Comprehensive Audit Logging**: Complete audit trails for all administrative actions with forensic-level detail 69 70 ### Privacy & Data Protection 71 - **Right to be Forgotten**: Complete GDPR Article 17 implementation with secure data erasure 72 - **Data Minimization**: Collect and store only necessary data with configurable retention policies 73 - **IP Address Anonymization**: Automatic IP address anonymization after 30-day retention period 74 - **Automated Data Cleanup**: Configurable data retention policies with automatic secure deletion 75 - **Consent Management**: Integrated consent tracking and privacy policy compliance 76 - **Data Export/Portability**: GDPR Article 20 compliance with secure data export functionality 77 78 ## Technical Architecture 79 80 ### WordPress Integration Excellence 81 - **Custom Post Types**: Seamless integration with WordPress content management system 82 - **Custom Database Tables**: Optimized database schema for retreat-specific data with proper indexing 83 - **WordPress Capability System**: Deep integration with WordPress user roles and capabilities 84 - **Email System Integration**: Native WordPress email system for secure invitations and notifications 85 - **Internationalization Ready**: Complete i18n support with professional Spanish translations 86 - **Responsive Admin Interface**: Modern, mobile-friendly administration interface with intuitive UX/UI 87 88 ### Modern Development Standards 89 - **Object-Oriented Architecture**: Clean, maintainable OOP design with singleton patterns for optimal performance 90 - **Enterprise Design Patterns**: Implementation of proven design patterns for scalability and maintainability 91 - **WordPress Coding Standards**: Full compliance with WordPress coding standards and best practices 92 - **Modern PHP Requirements**: Built for PHP 7.4+ with support for latest PHP features and security standards 93 - **Database Schema Management**: Automated database migrations with version control and rollback capabilities 94 - **Security-First Development**: Security considerations integrated into every aspect of the codebase 95 96 ## System Requirements 97 98 ### Minimum Requirements 99 - **WordPress**: 5.0 or higher (WordPress 6.0+ recommended for optimal performance) 100 - **PHP**: 7.4 or higher (PHP 8.0+ recommended for enhanced security and performance) 101 - **MySQL**: 5.6 or higher (MySQL 8.0+ or MariaDB 10.3+ recommended) 102 - **Memory**: 256MB PHP memory limit minimum (512MB+ recommended for bulk operations) 103 - **Disk Space**: 50MB minimum for plugin files and database storage 104 105 ### Security Recommendations 106 - **HTTPS Required**: SSL/TLS encryption mandatory for production environments 107 - **Server Configuration**: Secure server configuration with proper file permissions 108 - **WordPress Updates**: Keep WordPress core, themes, and plugins updated 109 - **Database Security**: Secure database configuration with strong passwords and restricted access 110 - **Backup Strategy**: Regular automated backups of database and uploaded files 111 112 ## Installation & Setup 113 114 ### Quick Installation 115 1. **Download Plugin**: Download the latest release from the official repository 116 2. **Upload to WordPress**: Upload the `dfx-parish-retreat-letters` folder to `/wp-content/plugins/` 117 3. **Activate Plugin**: Activate through the WordPress 'Plugins' admin menu 118 4. **Database Setup**: Plugin automatically creates required database tables on activation 119 5. **Initial Configuration**: Access plugin settings to configure basic parameters 120 121 ### Post-Installation Setup 122 123 #### 1. Administrator Configuration 124 - Navigate to **DFX Retreat Letters** in WordPress admin menu 125 - Configure global plugin settings and security parameters 126 - Set up email templates for invitations and notifications 127 - Configure data retention and privacy compliance settings 128 129 #### 2. Permission System Setup 130 - Create initial Plugin Administrators through WordPress user management 131 - Set up Retreat Manager roles for retreat-specific administration 132 - Configure Message Manager roles for confidential message access 133 - Test invitation system with secure token generation 134 135 #### 3. Security Configuration 136 - Verify HTTPS is properly configured and enforced 137 - Configure secure file storage directory outside web root 138 - Set up backup procedures for encrypted data 139 - Review and configure rate limiting settings 140 141 #### 4. GDPR Compliance Setup 142 - Configure data retention policies according to local regulations 143 - Set up privacy policy integration 144 - Configure consent management settings 145 - Test data export and erasure functionality 146 147 ## Usage Guide 148 149 ### For Plugin Administrators 150 151 #### Creating and Managing Retreats 152 - **Retreat Creation**: Create new retreats with comprehensive details including dates, descriptions, and capacity limits 153 - **Retreat Organization**: Organize retreats by categories, dates, and status for efficient management 154 - **Attendant Registration**: Set up registration forms and manage attendant information securely 155 - **Message URL Configuration**: Generate cryptographically secure URLs for confidential message submission 156 157 #### User Permission Management 158 - **Invite Users**: Send secure email invitations with role-specific access tokens 159 - **Assign Roles**: Delegate specific retreat management or message access permissions 160 - **Monitor Access**: Review user activity and access logs through comprehensive audit trails 161 - **Revoke Access**: Instantly revoke user permissions with complete session invalidation 162 163 ### For Retreat Managers 164 165 #### Managing Assigned Retreats 166 - **Retreat Administration**: Full control over assigned retreats including attendant management 167 - **Attendant Operations**: Add, edit, and manage attendant information with bulk import/export capabilities 168 - **Message Management**: Access confidential messages through secure print-only interface 169 - **Permission Delegation**: Invite and assign Message Managers for specific retreat message handling 170 171 #### Advanced Attendant Features 172 - **CSV Import/Export**: Bulk attendant operations with data validation and error reporting 173 - **Personal Information Security**: View and manage encrypted personal data with audit logging 174 - **Communication Tracking**: Monitor message submission and printing activity 175 176 ### For Message Managers 177 178 #### Confidential Message Operations 179 - **Secure Message Access**: View submitted confidential messages through print-only interface 180 - **Print Tracking**: All message printing activities are logged with timestamp and user attribution 181 - **Attendant Information**: Read-only access to attendant details for message context 182 - **Audit Compliance**: Complete audit trail of all message access and printing operations 183 184 #### Privacy Protection Features 185 - **No Content Preview**: Administrative interface prevents content display for maximum privacy 186 - **Secure Printing**: Encrypted message content only accessible through controlled printing system 187 - **Access Logging**: All message access attempts logged for security and compliance 188 189 ## Developer Information 190 191 ### Plugin Architecture 192 193 #### Database Schema 194 The plugin creates and manages several custom database tables: 195 196 - **`{prefix}_dfx_prl_retreats`**: Core retreat information with status tracking 197 - **`{prefix}_dfx_prl_attendants`**: Encrypted attendant personal information 198 - **`{prefix}_dfx_prl_confidential_messages`**: AES-256 encrypted message content 199 - **`{prefix}_dfx_prl_message_files`**: Encrypted file attachments with secure storage 200 - **`{prefix}_dfx_prl_message_print_log`**: Comprehensive audit trail for message printing 201 - **`{prefix}_dfx_prl_retreat_permissions`**: Three-tier authorization system data 202 - **`{prefix}_dfx_prl_retreat_invitations`**: Secure invitation token management 203 204 #### Core Classes and Design Patterns 205 206 ```php 207 // Main plugin singleton 208 DFXPRL::get_instance() 209 210 // Security and encryption utilities 211 DFXPRL_Security::get_instance() 212 213 // GDPR compliance management 214 DFXPRL_GDPR::get_instance() 215 216 // Three-tier permission system 217 DFXPRL_Permissions::get_instance() 218 219 // Database operations 220 DFXPRL_Database::get_instance() 221 ``` 222 223 #### Security Implementation Details 224 225 ##### Encryption Methods 226 - **Algorithm**: AES-256-CBC with HMAC-SHA256 authentication 227 - **Key Management**: WordPress-integrated key derivation with salt rotation 228 - **File Encryption**: Separate encryption keys for file contents and metadata 229 230 ##### Permission System 231 ```php 232 // Check user permissions for retreat access 233 $permissions->can_user_manage_retreat($user_id, $retreat_id) 234 235 // Verify message manager access 236 $permissions->can_user_access_messages($user_id, $retreat_id) 237 238 // Audit logging for all permission checks 239 $audit->log_permission_check($user_id, $action, $resource_id) 240 ``` 241 242 #### Extension Points for Developers 243 244 ##### Custom Hooks and Filters 245 ```php 246 // Customize encryption parameters 247 add_filter('dfx_prl_retreat_letters_encryption_config', $callback); 248 249 // Extend GDPR compliance features 250 add_action('dfx_prl_retreat_letters_gdpr_data_export', $callback); 251 252 // Customize permission logic 253 add_filter('dfx_prl_retreat_letters_user_permissions', $callback); 254 255 // Extend audit logging 256 add_action('dfx_prl_retreat_letters_audit_log', $callback); 257 ``` 258 259 ##### API Endpoints 260 The plugin provides secure REST API endpoints for: 261 - Retreat management operations 262 - Attendant data handling (with encryption) 263 - Secure message submission 264 - Permission verification 265 - Audit log access (admin only) 266 267 ### Security Best Practices Implemented 268 269 - **Input Validation**: Comprehensive sanitization using WordPress standards 270 - **SQL Injection Prevention**: Prepared statements and WordPress database abstraction 271 - **Cross-Site Scripting (XSS) Protection**: Output escaping and Content Security Policy headers 272 - **Cross-Site Request Forgery (CSRF) Protection**: WordPress nonce validation throughout 273 - **Data Encryption**: AES-256-CBC for all sensitive data at rest 274 - **Secure Communications**: HTTPS enforcement and secure token generation 275 - **Audit Logging**: Complete forensic-level activity logging 276 277 ## Plugin Structure 278 279 ``` 280 dfx-parish-retreat-letters/ 281 ├── dfx-parish-retreat-letters.php # Main plugin file and initialization 282 ├── includes/ # Core plugin classes 283 │ ├── class-dfx-parish-retreat-letters.php # Main plugin singleton 284 │ ├── class-admin.php # Administrative interface 285 │ ├── class-database.php # Database management 286 │ ├── class-security.php # Encryption and security 287 │ ├── class-permissions.php # Three-tier authorization 288 │ ├── class-retreat.php # Retreat management 289 │ ├── class-attendant.php # Attendant operations 290 │ ├── class-confidential-message.php # Secure messaging 291 │ ├── class-message-file.php # Encrypted file handling 292 │ ├── class-print-log.php # Print audit logging 293 │ ├── class-gdpr.php # GDPR compliance 294 │ ├── class-invitations.php # User invitation system 295 │ ├── class-i18n.php # Internationalization 296 │ └── admin.js # Admin interface scripts 297 ├── languages/ # Translation files 298 │ ├── dfx-parish-retreat-letters.pot # Translation template 299 │ ├── dfx-parish-retreat-letters-es_ES.po # Spanish translation 300 │ └── dfx-parish-retreat-letters-es_ES.mo # Compiled Spanish translation 301 ├── uninstall.php # Clean uninstallation procedures 302 ├── LICENSE # GPL v3 license 303 └── README.md # This comprehensive documentation 304 ``` 305 306 ## Internationalization 307 308 The plugin is fully translation-ready and includes professional translations: 309 310 - **English (en_US)**: Default language with complete interface coverage 311 - **Spanish (es_ES)**: Professional translation for Spanish-speaking parishes 312 - **Translation Template**: Complete `.pot` file for additional language translations 313 314 ### Adding New Languages 315 1. Use the provided `dfx-parish-retreat-letters.pot` template 316 2. Create new `.po` and `.mo` files for your target language 317 3. Place translation files in the `languages/` directory 318 4. Follow WordPress translation standards and guidelines 319 320 ## License 321 322 This plugin is licensed under the **GNU General Public License v3.0 or later**. 323 324 - **Freedom to Use**: Use the plugin for any purpose, including commercial applications 325 - **Freedom to Study**: Access to complete source code and documentation 326 - **Freedom to Modify**: Modify the plugin to meet your specific requirements 327 - **Freedom to Distribute**: Share the plugin with others under the same license terms 328 329 For complete license terms, see [LICENSE](LICENSE) file or visit [GNU GPL v3](https://www.gnu.org/licenses/gpl-3.0.html). 330 331 ## Author & Support 332 333 **David Marín Carreño (DaveFX)** 334 - **Website**: [davefx.com](https://davefx.com) 335 - **GitHub Profile**: [@davefx](https://github.com/davefx) 336 - **Project Repository**: [dfx-parish-retreat-letters](https://github.com/davefx/dfx-parish-retreat-letters) 337 - **Issue Tracking**: Report bugs and feature requests through GitHub Issues 338 - **Documentation**: Complete documentation available in this README 339 340 ### Contributing 341 Contributions are welcome! Please: 342 1. Fork the repository 343 2. Create a feature branch 344 3. Submit a pull request with detailed description 345 4. Follow WordPress coding standards 346 5. Include appropriate tests and documentation 10 Manage personal messages in parish retreats: attendants, confidential messages, permissions, and GDPR compliance — all in one place. 11 12 == Description == 13 14 DFX Parish Retreat Letters lets your parish manage the full lifecycle of confidential personal messages for retreat attendants — from collecting letters through a public web form to printing them securely in the admin, while keeping every piece of content fully encrypted and every action fully audited. 15 16 = How it works = 17 18 1. **Create a retreat** and register your attendants. 19 2. **Share each attendant's unique, private URL** with the people who want to write to them — family, friends, spiritual directors. 20 3. **Writers fill in the form** on a clean public page: they can type a rich-text message, attach images or documents, and agree to a legal disclaimer. A simple arithmetic CAPTCHA protects against bots. 21 4. **Messages are stored encrypted** in the database. Nobody can read them by browsing the admin — they are only revealed at print time. 22 5. **Authorised staff print the messages** from the admin panel. Each print is logged with the user's name, timestamp, and IP address. 23 6. **Messages are handed to attendants** during or after the retreat. 24 25 = Retreat management = 26 27 * Create retreats with name, location, start and end dates, and a custom welcome message shown on the submission form. 28 * Set a legal disclaimer text and an acceptance checkbox label that writers must tick before they can submit. 29 * Enable or disable optional **Notes** and **Internal Notes** fields per retreat (Notes are exportable; Internal Notes are not). 30 * Set custom **body CSS classes** on the message-form page per retreat, so each retreat can use a different visual style. 31 * Choose a custom **header block** and **footer block** (any WordPress block or template part) to brand the submission form page. 32 * Delete a retreat together with all its attendants and messages in one action. 33 34 = Attendant management = 35 36 * Add attendants individually or **import them from a CSV file** (supports merge mode to add emergency-contact data without overwriting existing records). 37 * Each attendant stores: name, surnames, date of birth, and the following optional fields — notes, internal notes, emergency-contact details (name, surnames, relationship, email), inviting person, and incompatibilities. 38 * **Export attendants to CSV** including their unique message URL, message count, and all standard fields. 39 * Sort and filter the attendant list by name, message count, notes, or any other available column. 40 * The attendant list shows at a glance how many messages each person has received and how many have not yet been printed. 41 * Delete individual attendants, or remove all attendants from a retreat at once. 42 43 = Confidential message submission (public form) = 44 45 * Each attendant has a **unique, cryptographically secure URL** (based on a random token). Anyone with the link can submit a message without logging in to WordPress. 46 * The submission form provides a **rich-text editor** (with formatting, images, and copy-paste from Word or Google Docs). 47 * Writers can attach **images and documents** (PDF, DOCX, and other common types). If a message has multiple non-image files, they are bundled into a ZIP for printing. 48 * An optional **legal disclaimer** with a configurable acceptance checkbox can be required before submission. 49 * A simple **arithmetic CAPTCHA** prevents automated submissions. Logged-in WordPress users skip the CAPTCHA. 50 * The form URL includes the attendant's initials as a suffix for easy identification when sharing links, without exposing the full name. 51 * **Rate limiting** (20 requests per hour per IP) prevents abuse. 52 53 = Secure message access and printing = 54 55 * The admin interface **never displays message content** — there is no content-preview panel. This protects confidentiality if a screen is visible to others. 56 * Authorised users open a message and click **Print**. The plugin decrypts the content on the fly, renders it in a print-ready format with the recipient's name and the sender's name, and sends it to the printer. 57 * Each print action is recorded in a **print log** (user, timestamp, IP address). The log is visible from the attendant's message list. 58 * Multiple images in a single message are laid out so they do not split across pages. 59 60 = Three-tier permission system = 61 62 The plugin uses three access levels, each scoped to specific retreats: 63 64 **Plugin Administrators** (WordPress users with the `manage_retreat_plugin` capability, automatically granted to WordPress Administrators): 65 66 * Create and delete retreats. 67 * Manage all attendants and all messages across all retreats. 68 * Grant or revoke permissions for any retreat. 69 * Access Global Settings and Privacy & Compliance pages. 70 71 **Retreat Managers** (assigned per retreat): 72 73 * Full control of their assigned retreat: edit retreat details, manage attendants, access all messages. 74 * Invite and assign Message Managers to their retreat. 75 * Cannot access other retreats or global settings. 76 77 **Message Managers** (assigned per retreat): 78 79 * Read-only access to attendant names for context. 80 * Can open and print confidential messages for their retreat. 81 * Cannot edit attendants, retreat details, or permissions. 82 * All print actions are logged. 83 84 = User invitations = 85 86 * Invite any email address to become a Retreat Manager or Message Manager for a specific retreat directly from the retreat's **Access Management** tab. 87 * The invitee receives an email with a secure, time-limited token link. 88 * If the email address already belongs to a WordPress user, they are granted the role immediately on acceptance. If not, a new WordPress account is created for them. 89 * Pending invitations can be cancelled at any time. Expired invitations are cleaned up automatically. 90 91 = Encryption and data security = 92 93 * All message content and file attachments are encrypted with **AES-256-CBC** and authenticated with HMAC-SHA256 before being written to the database or disk. 94 * Encrypted files are stored **outside the web root**, so they cannot be accessed directly via a browser. 95 * The encryption key is generated automatically on first activation and stored in the database. An admin notice prompts you to move it to `wp-config.php` by defining the constant `DFXPRL_ENCRYPTION_KEY` for better security. If the constant and the database key ever differ, the plugin detects the mismatch and offers a one-click resolution. 96 * Every sensitive admin action (permission grants, revocations, invitation events) is written to a **permission audit log**. 97 98 = GDPR and privacy compliance = 99 100 * **Right to Erasure** (GDPR Article 17): delete all personal data for a specific email address or attendant in one action. 101 * **Data Portability** (GDPR Article 20): export all personal data associated with an email address as a structured file. 102 * **IP address anonymisation**: sender IP addresses are automatically anonymised after a configurable retention period (default 30 days). A daily WordPress cron job handles the cleanup. 103 * **Configurable data retention**: set how long messages and audit log entries are kept before automatic deletion. 104 * **Spanish privacy law (LOPD-GDD)**: the plugin was designed with Spanish data-protection requirements in mind, in addition to GDPR. 105 * All settings are found under **Retreats > Privacy & Compliance**. 106 107 = Global settings = 108 109 Under **Retreats > Global Settings** you can configure: 110 111 * Default header and footer blocks for the message submission form (overridable per retreat). 112 * Default body CSS classes for the submission form page. 113 * Encryption key management (including the option to remove a database-stored key in favour of the `wp-config.php` constant). 114 115 = Internationalisation = 116 117 * The plugin ships with a complete **Spanish (es_ES)** translation. 118 * A `.pot` template file is included so you can add your own language. 119 * The public submission form uses informal Spanish ("tú") for a friendlier tone. 120 121 == Installation == 122 123 1. Upload the `dfx-parish-retreat-letters` folder to `/wp-content/plugins/`. 124 2. Activate the plugin through the WordPress **Plugins** menu. 125 3. The plugin automatically creates all required database tables on activation. 126 4. Navigate to **Retreats** in the WordPress admin sidebar to get started. 127 128 = Recommended post-installation steps = 129 130 1. Go to **Retreats > Global Settings** and review the default header, footer, and body-class settings for the submission form. 131 2. Go to **Retreats > Privacy & Compliance** and configure data-retention periods to match your local legal requirements. 132 3. For production sites, add the following line to `wp-config.php` to store the encryption key outside the database: 133 `define( 'DFXPRL_ENCRYPTION_KEY', 'your-long-random-secret-here' );` 134 Replace the placeholder with a long, cryptographically random string — for example one generated by `wp_generate_password( 64, true, true )` in the WordPress shell, or by an equivalent secure random generator. The plugin will display a notice reminding you to do this if the key is still in the database. 135 4. Verify that your site uses HTTPS. The submission form URLs contain sensitive tokens and must be served over a secure connection. 136 137 == Frequently Asked Questions == 138 139 = Who can see the content of submitted messages? = 140 141 Nobody can read message content by browsing the admin interface. Content is only revealed at print time, and only to users who have the Retreat Manager or Message Manager role for that retreat. Every print is logged. 142 143 = How do writers submit messages without a WordPress account? = 144 145 Each attendant has a unique, cryptographically secure URL. You share that URL (e.g. by email or WhatsApp) with the people who want to write to the attendant. They open the link in any browser, fill in the form, and submit — no login required. 146 147 = What happens to the submission form URL after the retreat? = 148 149 The URL remains valid until you delete the attendant or the retreat. If you want to stop accepting new messages, you can delete the attendant's token by deleting and re-adding the attendant, or by deleting the retreat entirely. 150 151 = Does the plugin use WordPress Custom Post Types or pages? = 152 153 No. All data is stored in custom database tables (prefixed `{prefix}dfxprl_*`, e.g. `wp_dfxprl_retreats`). The public submission form is served directly by the plugin using a rewrite rule — you do not need to create any WordPress page. 154 155 = Can I customise the look of the submission form? = 156 157 Yes. You can set a custom WordPress block as the header and footer of the form page — globally under **Retreats > Global Settings**, or per retreat on the retreat edit screen. You can also add custom CSS body classes per retreat. 158 159 = What file types can writers attach? = 160 161 Common image formats (JPG, PNG, GIF, WebP), PDF, DOCX, and other document types supported by your server. The maximum file size is determined by your PHP and server configuration and is shown on the form. If a message contains multiple files and at least one is not an image, a ZIP archive is generated for printing. 162 163 = Is the plugin GDPR-compliant? = 164 165 Yes. It implements GDPR Articles 17 (Right to Erasure) and 20 (Data Portability), anonymises sender IP addresses after a configurable period, and supports configurable data-retention policies with automatic deletion. All settings are under **Retreats > Privacy & Compliance**. 166 167 = Where is the encryption key stored? = 168 169 By default it is generated automatically and stored in the WordPress database (`wp_options`). The plugin will display an admin notice recommending that you move it to `wp-config.php` by defining the `DFXPRL_ENCRYPTION_KEY` constant. The wp-config.php approach is safer because the key is then separate from the encrypted data. 170 171 = Can I add translations for my language? = 172 173 Yes. A `.pot` translation template is included in the `languages/` directory. Create `.po` and `.mo` files for your language and place them in that folder following standard WordPress translation conventions. 347 174 348 175 ## Changelog
Note: See TracChangeset
for help on using the changeset viewer.