Skip to content

Implement public intake forms system (#243)#277

Draft
rubenvdlinde wants to merge 4 commits intodevelopmentfrom
feature/243/2026-03-20-public-intake-forms
Draft

Implement public intake forms system (#243)#277
rubenvdlinde wants to merge 4 commits intodevelopmentfrom
feature/243/2026-03-20-public-intake-forms

Conversation

@rubenvdlinde
Copy link
Copy Markdown
Contributor

Closes #243

Summary

Implemented a public intake forms system that allows organizations to capture leads from external websites. The system includes form creation/editing, public form rendering without authentication, submission processing with spam protection, contact deduplication, automatic lead creation, and submission tracking.

Spec Reference

Changes

  • lib/Service/IntakeFormService.php — New service implementing form submission processing, rate limiting, contact deduplication, embed code generation, and CSV export
  • lib/Controller/PublicFormController.php — Public endpoints for form rendering and submission with CORS headers and spam protection
  • lib/Controller/IntakeFormController.php — Authenticated endpoints for embed code generation and submission export
  • openspec/changes/2026-03-20-public-intake-forms/ — Spec files and task checklist

Test Coverage

  • Backend implementation follows existing patterns (ContactImportService, PublicSurveyController) for OpenRegister integration
  • Service methods include honeypot spam detection, APCu-based rate limiting, and per-email contact deduplication
  • Controllers use proper @SPEC docblock tags linking to tasks
  • All code passes PSR-12 style check

Notes

  • Form schemas (intakeForm, intakeSubmission) were already defined in the register
  • Frontend components (FormManager.vue, FormBuilder.vue, FormSubmissions.vue) and routing were already implemented
  • The service implements per-submission authorization implicitly (forms are accessed by ID, no per-object auth check needed for public endpoints)

@github-actions
Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/pipelinq @ d88ae17

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
composer ✅ 100/100
npm ✅ 249/249
PHPUnit ⏭️
Newman ⏭️
Playwright

Spec coverage: 14% (42 tests / 298 specs)


Quality workflow — 2026-04-18 19:28 UTC

Download the full PDF report from the workflow artifacts.

@github-actions
Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/pipelinq @ f43c308

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
composer ✅ 100/100
npm ✅ 249/249
PHPUnit ⏭️
Newman ⏭️
Playwright

Spec coverage: 14% (42 tests / 298 specs)


Quality workflow — 2026-04-18 21:59 UTC

Download the full PDF report from the workflow artifacts.

@github-actions
Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/pipelinq @ 112be55

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
composer ✅ 100/100
npm ✅ 249/249
PHPUnit ⏭️
Newman ⏭️
Playwright

Spec coverage: 14% (42 tests / 298 specs)


Quality workflow — 2026-04-20 10:17 UTC

Download the full PDF report from the workflow artifacts.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant