Commit Graph

102 Commits

Author SHA1 Message Date
08b9ad24a5 refactor: restructure dashboard UX and migrate logos to provider level
- Move job submission form to separate view (?action=new_job)
- Replace inline form with prominent green button on main dashboard
- Migrate logos from per-job (post thumbnail) to per-provider (user meta)
- Add logo upload/removal functionality to provider dashboard
- Display provider logo on single job pages instead of per-job logo
- Add back link to archive on single job pages
- Remove logo handling from form submission/edit processors
- Improve button styling with proper CSS specificity

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-29 14:03:47 +09:00
d907878143 refactor: improve CSS specificity and add vertical spacing
- Add 1rem vertical padding to .ddhh-provider-dashboard for proper spacing
- Remove all !important declarations from button styles
- Use proper CSS specificity (.ddhh-jobs-table .button) instead
- Document CSS best practices in CLAUDE.md (avoid !important)

CSS specificity approach is more maintainable and prevents conflicts
with Elementor and other theme styles.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-29 13:23:03 +09:00
38535b5edc style: improve dashboard button visibility and section spacing
- Make all button text white (!important) for better readability
- Add vertical padding (2.5rem) to green background sections
- Apply to all button types: logout, edit, view, deactivate
- Ensures text is visible against colored button backgrounds

Improves accessibility and visual hierarchy on provider dashboard.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-29 13:13:47 +09:00
98487eb05b feat: add logout link to provider dashboard header
Add prominent logout button to all dashboard views (main, edit, deactivate)
showing logged-in user name and "Abmelden" (logout) option.

- Header displays "Angemeldet als: [Name]" with logout button
- Logout redirects back to /anbieter-login/ page
- Responsive design: stacks on mobile screens
- Consistent styling across all dashboard views

Fixes Issue 1 from Phase 7 testing: No logout option visible.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-29 13:10:36 +09:00
0327d82ccf docs(quick-001): add planning artifacts for UX polish task
Quick task completed fixing 4 UX/notification issues from Phase 7 testing.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 13:02:37 +09:00
6f5288a355 docs(quick-001): complete UX & notification polish task
Tasks completed: 2/2
- Task 1: Login page redirect for logged-in providers
- Task 2: Fix 3 admin email notification issues

All 4 deferred UX/notification issues from Phase 7 testing now resolved.

SUMMARY: .planning/quick/001-fix-4-ux-notification-issues-from-phase/001-SUMMARY.md
2026-01-29 13:01:58 +09:00
3dab3f9034 fix(quick-001): fix 3 admin email notification issues
- Add job description to submission and edit emails (truncated to 500 chars)
- Fix deactivation reason timing bug by hooking into ddhh_job_deactivated action instead of transition_post_status
- Make all admin email links clickable HTML hyperlinks using proper <a> tags
- Convert all admin emails from plain text to proper HTML format with esc_html() on individual values
2026-01-29 13:00:38 +09:00
84a4ae7c1b feat(quick-001): redirect logged-in providers from login page to dashboard
- Add setup_hooks() method to DDHH_JM_Pages class
- Add maybe_redirect_logged_in_from_login() method that checks if current page is login page
- Redirect logged-in providers to dashboard, allow non-providers to view login page
- Register Pages::setup_hooks() in main plugin orchestrator
2026-01-29 12:58:33 +09:00
c133e3993b docs(07): complete Testing & Polish phase v1.0 2026-01-29 12:32:40 +09:00
50ae7f807c docs(07-03): complete Admin Flow & Deployment Prep plan
Tasks completed: 3/3
- Task 1: Admin moderation workflow (checkpoint) - APPROVED with 1 issue found
- Task 2: Action Scheduler verification (checkpoint) - APPROVED
- Task 3: Create deployment checklist (auto) - COMPLETE

Test Results:
- Admin UI: Custom columns, sorting, status changes all functional
- Email notifications: Admin receives submission/edit/deactivation emails (1 formatting issue)
- Action Scheduler: Zero failed actions, async processing stable

Issues Found:
- Issue 4: Admin email edit links not clickable (plain text instead of hyperlinks)

Phase 7 Summary:
- All 3 plans complete (provider flow, mentor flow, admin flow)
- 4 total issues found (3 from 07-01, 1 from 07-03)
- All issues are non-blocking UX/notification improvements
- System ready for production deployment

SUMMARY: .planning/phases/07-testing-polish/07-03-SUMMARY.md
2026-01-29 12:22:28 +09:00
4bc4d18f7b docs(07-03): create comprehensive deployment checklist
- Server requirements (PHP, WordPress, memory limits)
- Required plugins (ACF Pro, Formidable Forms Pro, Elementor Pro, WP Mail SMTP)
- Plugin configuration (ACF fields, Formidable forms F1-F5, Elementor templates)
- Email configuration (SMTP setup, notification testing)
- Access control verification (pages, redirects)
- User roles and capabilities (ddhh_provider role)
- Action Scheduler monitoring (pending/complete/failed actions)
- Testing checklist (provider/mentor/admin flows from Phase 7)
- Security checklist (HTTPS, ownership validation, CSRF protection)
- Performance considerations (caching, query optimization)
- Backup strategy (pre-deployment, rollback plan)
- Post-deployment verification (smoke tests, functional tests, monitoring)
- Known issues documented (4 minor UX issues from Phase 7 testing)

File: .planning/phases/07-testing-polish/DEPLOYMENT-CHECKLIST.md
2026-01-29 12:16:58 +09:00
32ab4d3262 docs(07-02): complete Mentor Flow E2E Testing plan
Tasks completed: 3/3
- Archive access control and display verification
- Job detail page and application form verification
- Notification opt-in system verification

All tests PASSED with zero issues found. Mentor workflow fully functional.

SUMMARY: .planning/phases/07-testing-polish/07-02-SUMMARY.md
2026-01-29 11:20:35 +09:00
c1eedcb0b7 docs(07-01): complete Provider Flow E2E Testing plan
Tasks completed: 3/3
- Task 1: Provider registration and login flow testing - APPROVED
- Task 2: Job submission and editing flow testing - APPROVED
- Task 3: Job deactivation flow testing - APPROVED

Test Results: All core functionality PASS with 3 UX/notification issues documented

Issues Found:
1. No logout option on /anbieter-login/ after login (Low severity)
2. Job description missing from admin submission notification (Medium severity)
3. Deactivation reason not showing in admin email despite correct ACF storage (Medium severity)

SUMMARY: .planning/phases/07-testing-polish/07-01-SUMMARY.md
2026-01-29 10:47:09 +09:00
c85e624b8a test(06): complete UAT - 7 passed, 0 issues 2026-01-29 10:17:12 +09:00
369870ef00 docs: add comprehensive CLAUDE.md for future AI assistance
Add detailed documentation covering plugin architecture, subsystems, workflows, and development practices. Includes GSD workflow requirement for all code changes.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-23 23:10:44 +09:00
1b41b72a3d feat(contact-form): implement modal contact form with AJAX submission
Replace mailto link with modal popup containing Formidable job application form. Modal stays open after submission to show success message.

Changes:
- Add modal popup with contact form on job detail pages
- Implement AJAX form submission to prevent page reload
- Auto-populate job_id field when modal opens
- Add field key compatibility for both job_id and job_id2
- Fix form ID comparison to use loose equality
- Keep modal open after submission to display success message
- Add modal styling and close functionality

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-17 22:56:57 +09:00
907b5a9924 fix(07-01): convert dates back to ISO format before form submission
Added form submit handler that converts DD.MM.YYYY dates back to YYYY-MM-DD format before submission. This fixes validation error "Bewerbungsfrist is invalid" by ensuring Formidable Forms receives dates in the expected format.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-17 21:59:39 +09:00
a87b48df68 fix(07-01): auto-convert date slashes to dots after picker selection
Added change event listener that automatically replaces forward slashes with dots in date fields after user makes a selection. This ensures consistent DD.MM.YYYY format throughout the form interaction.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-17 21:57:57 +09:00
f229af23f5 feat(07-01): improve date field prepopulation with format conversion
Added JavaScript to convert YYYY-MM-DD dates to DD.MM.YYYY format when prepopulating date fields. This is a partial fix for the date field issues - full fix requires Formidable Forms configuration.

Also updated ISSUES.md with detailed documentation of all three date field problems: initial format, picker display, and post-selection format.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-17 21:43:42 +09:00
18ddcd5e0a feat(07-01): add deadline and contact email to all notification emails
All three job notification emails (new submission, edit, deactivation) now include:
- Bewerbungsfrist (deadline) - formatted as DD.MM.YYYY
- Kontakt-E-Mail (contact email)

This provides administrators with complete information about each job posting.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-17 21:36:43 +09:00
0c9ebb9e89 fix(07-01): fix job type dropdown not pre-populating on edit
Improved JavaScript to use case-insensitive matching for select fields, so 'vollzeit' matches 'Vollzeit'. Also normalized all job_type values to lowercase when saving to ensure consistency.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-17 21:27:49 +09:00
9142b56a9f docs(07-01): add issue for date field display format
Date field shows as '20260130' instead of German format '30.01.2026'. Documented as low priority cosmetic issue to be fixed later.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-17 21:23:59 +09:00
32a22e5fd6 fix(07-01): allow providers to edit published job offers
Added edit_published_job_offers capability to ddhh_provider role and created upgrade_roles function to automatically add this capability to existing provider accounts. Providers can now edit their published job offers from the dashboard.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-17 21:20:16 +09:00
7f2c5fa6a6 feat(07-01): add frontend display template for job offers
Created DDHH_JM_Template class to display full job details on single job offer pages. Shows logo, organization, location, type, deadline, description, and contact information in a styled layout.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-17 20:13:48 +09:00
90525cd0ea fix(07-01): fix timing issue in job notification emails
Moved job submission notifications from transition_post_status hook to custom ddhh_job_submitted/ddhh_job_edited hooks. This ensures metadata is saved before the email is sent, so location and type fields are populated correctly instead of showing "Nicht angegeben".

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-17 19:56:53 +09:00
737f3d6fe9 feat(07-01): implement complete job management workflow
Adds comprehensive job submission, editing, and deactivation functionality with proper form handling and permissions. Includes administrator capabilities for job_offer management and fixed dashboard navigation.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-17 19:49:21 +09:00
1ed164aed0 fix(07-01): create missing form action for job submission
- Job submission form had 0 actions, posts weren't being created
- Manually created wppost action with proper field mappings
- Maps all 7 fields (title, description, location, type, deadline, email, logo)
- Discovered during provider flow testing (jobs not appearing in dashboard)
2026-01-15 23:03:30 +09:00
cadb7f6c01 docs(07-01): document issues discovered during provider flow testing
- Logo field misplaced on job form instead of provider profile
- Empty dropdown issue (fixed)
- Identified required changes for proper company logo implementation
2026-01-15 22:45:31 +09:00
969a7bad74 fix(07-01): prevent multiple redirect triggers causing server crash
- Added ddhhRedirectTriggered flag to ensure only one redirect
- Clear interval immediately when success message detected
- Removed MutationObserver which was causing duplicate events
- Simplified JavaScript to single interval-based check
2026-01-15 20:13:08 +09:00
7009d4c621 fix(07-01): use DOM monitoring for registration redirect
- Changed from event listener to MutationObserver
- Watches for success message text to appear in form
- Monitors form DOM for changes and redirects when success appears
- More reliable than waiting for custom events
2026-01-14 22:12:25 +09:00
36d0f0b2ef fix(07-01): add JavaScript redirect for registration form
- Added add_registration_redirect_script() method
- Listens for frmFormComplete event on registration form
- Redirects to /anbieter-dashboard/ after 1.5s delay
- Shows success message before redirect
- Replaces non-working frm_json_response filter approach
2026-01-14 22:08:44 +09:00
00cabcc178 fix(07-01): add filter to set redirect URL in registration form response
- Added set_registration_redirect() filter on frm_json_response
- Modifies Formidable's JSON response to include redirect_url
- Formidable JavaScript will then redirect to /anbieter-dashboard/
- Fixes registration redirect issue
2026-01-14 22:04:40 +09:00
d838b72ed8 fix(07-01): add redirect URL to registration form
- Registration form now redirects to /anbieter-dashboard/ after successful submission
- Configured via form options redirect_url setting
- Fixes missing redirect after registration
2026-01-14 22:01:32 +09:00
25666a2509 debug(07-01): add detailed field value logging to registration 2026-01-14 21:58:21 +09:00
d6304d934a fix(07-01): use loose comparison for form ID check in registration handler
- Changed !== to != to allow type coercion
- Fixes registration not working due to string vs int comparison
- Added type debugging to help diagnose similar issues
2026-01-14 21:55:15 +09:00
7286133bf4 debug(07-01): add debug logging to registration handler 2026-01-14 21:40:35 +09:00
a00e28702f fix(07-01): replace deprecated FrmFormAction static calls with FrmFormActionsController
- Changed FrmFormAction::create() to FrmFormActionsController::create_action()
- Updated class_exists checks to use FrmFormActionsController
- Fixes fatal error on plugin activation with modern Formidable Forms
- Discovered during provider flow testing (Plan 07-01)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-14 21:26:59 +09:00
433b83bd8f docs(07): create phase plan
Phase 07: Testing & Polish
- 3 plans created
- 9 total tasks defined (all verification checkpoints + 1 checklist creation)
- Ready for execution

Plan breakdown:
- 07-01: Provider flow E2E test (register → submit → deactivate)
- 07-02: Mentor flow E2E test (browse → apply → opt-in)
- 07-03: Admin flow test + deployment checklist

All plans independent (can run in parallel)
2026-01-14 21:14:42 +09:00
d305d8b149 docs(06-03): complete async mentor notifications plan
Phase 6 Plan 3 complete. Async batch email notifications to opted-in
mentors on job publish without blocking admin workflow. Integrated with
Action Scheduler for background processing in batches of 50 users.
German email templates with job details, rate limit delays, error
logging, and unsubscribe hints.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-14 21:09:37 +09:00
6a2914f5fc feat(06-03): implement async batch email processor callback
Add process_mentor_notification_batch() method to process Action
Scheduler callbacks. Sends German email notifications with job details
(title, location, type, permalink) to batches of opted-in mentors.
Includes rate limit delay (0.1s between emails), error logging for
failures, and unsubscribe hint in email body. Registered callback for
'ddhh_jm_send_mentor_notification_batch' hook.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-14 21:09:01 +09:00
e24b4fa7f0 feat(06-03): add job publish hook to schedule mentor notifications
Add notify_mentors_on_job_publish() method to trigger async batch
notifications when jobs transition to publish status. Only triggers on
initial publish (not updates). Queries opted-in mentors via User
Preferences class and schedules batches via Scheduler class. Logs
notification scheduling with mentor count and batch count.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-14 21:08:23 +09:00
b87ac203fe docs(06-01): complete mentor notification opt-in plan
Tasks completed: 2/2
- User preferences class with notification opt-in meta
- Helper method to query opted-in mentors

SUMMARY: .planning/phases/06-email-notifications/06-01-SUMMARY.md

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-14 21:06:32 +09:00
2bfc666ddf docs(06-02): complete Action Scheduler integration plan
Tasks completed: 2/2
- Download and include Action Scheduler library
- Create scheduler helper class for email batch actions

SUMMARY: .planning/phases/06-email-notifications/06-02-SUMMARY.md
2026-01-14 21:05:31 +09:00
cae10e113c feat(06-02): create scheduler helper class for email batch actions
- Created DDHH_JM_Scheduler class with static setup_hooks() method
- Added schedule_mentor_notification_batch() method with 50-user batching
- Uses as_enqueue_async_action() with unique flag and email-notifications group
- Initialized in main plugin file and job manager class
- Ready for Phase 06-03 to register async action callbacks
2026-01-14 21:04:26 +09:00
48f270f6a5 chore(06-02): download and include Action Scheduler library
- Downloaded Action Scheduler 3.9.3 from GitHub
- Placed in vendor/action-scheduler/ directory
- Included in main plugin file before other code for proper initialization
- Library will auto-initialize itself when required
2026-01-14 21:03:48 +09:00
fd88dcf025 docs(06): create Phase 6 email notifications plans
Phase 6: Email Notifications
- 3 plans created
- 6 total tasks defined
- Parallel execution: 06-01 and 06-02 in Wave 1, 06-03 in Wave 2
- Ready for execution

Plans:
- 06-01: Mentor notification opt-in (2 tasks)
- 06-02: Action Scheduler integration (2 tasks)
- 06-03: Async batch email processing (2 tasks)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-14 20:59:56 +09:00
464e3d9a41 docs(roadmap): mark Phase 5 complete
All 4 plans completed:
- 05-01: Archive access control
- 05-02: Application form
- 05-03: Logo auto-crop
- 05-04: Single job post protection

Phase 5 complete - mentor job board backend infrastructure ready

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-14 20:52:26 +09:00
4f33f88d59 docs(05-04): complete job detail page plan
Summary documents single job post access control implementation,
completing Phase 5 backend infrastructure. Elementor template creation
is manual UI work through WordPress admin.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-14 20:51:17 +09:00
2e8bef56b8 feat(05-04): protect single job posts from public access
Add protect_single_job() method to access control class following the
same pattern as job archive protection. Non-logged-in users are
redirected to /anbieter-login/ when attempting to access individual
job_offer posts. Logged-in users (any role) can view job details.

Completes backend infrastructure for Phase 5 mentor job board. All ACF
fields and application form ready for Elementor template integration.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-14 20:51:11 +09:00
dd83b676b4 docs(05-04): create job detail page plan
Phase 05-04: Job Detail Page Protection
- 1 plan created
- 2 tasks defined (1 auto, 1 checkpoint:human-verify)
- Ready for execution

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-14 20:45:08 +09:00