1. <?php
  2. class FormTracker {
  3. private $form_data = [];
  4. private $dry_run = false;
  5. public function __construct($dry_run = false) {
  6. $this->dry_run = $dry_run;
  7. }
  8. public function setFieldValue(string $field_name, string $value): void {
  9. $this->form_data[$field_name] = $value;
  10. }
  11. public function getFieldValue(string $field_name): ?string {
  12. return isset($this->form_data[$field_name]) ? $this->form_data[$field_name] : null;
  13. }
  14. public function getFormData(): array {
  15. return $this->form_data;
  16. }
  17. public function isDryRun(): bool {
  18. return $this->dry_run;
  19. }
  20. public function enableDryRun(): void {
  21. $this->dry_run = true;
  22. }
  23. public function disableDryRun(): void {
  24. $this->dry_run = false;
  25. }
  26. /**
  27. * Simulates form processing based on the current data.
  28. * If in dry run mode, it only returns the data.
  29. * Otherwise, it performs actions.
  30. */
  31. public function processForm(): array {
  32. if ($this->dry_run) {
  33. return $this->form_data; // Return data in dry run mode
  34. }
  35. // Simulate form processing logic
  36. $processed_data = $this->form_data;
  37. // Example: Validate email format
  38. if (isset($processed_data['email']) && filter_var($processed_data['email'], FILTER_VALIDATE_EMAIL) === false) {
  39. error_log("Invalid email format.");
  40. $processed_data['email_error'] = "Invalid email address.";
  41. }
  42. // Example: Sanitize a field
  43. if(isset($processed_data['name'])){
  44. $processed_data['name'] = htmlspecialchars($processed_data['name'], ENT_QUOTES, 'UTF-8');
  45. }
  46. return $processed_data;
  47. }
  48. }
  49. // Example usage:
  50. $tracker = new FormTracker(); //default is not dry run
  51. // Set form field values
  52. $tracker->setFieldValue('name', 'John Doe');
  53. $tracker->setFieldValue('email', 'john.doe@example.com');
  54. $tracker->setFieldValue('message', 'This is a test message.');
  55. // Check if in dry run mode
  56. echo "Dry run mode: " . ($tracker->isDryRun() ? 'true' : 'false') . "\n";
  57. // Process the form (without dry run)
  58. $processed_data = $tracker->processForm();
  59. echo "Processed data:\n";
  60. print_r($processed_data);
  61. // Enable dry run mode
  62. $tracker->enableDryRun();
  63. echo "Dry run mode: " . ($tracker->isDryRun() ? 'true' : 'false') . "\n";
  64. // Process the form (in dry run mode)
  65. $dry_run_data = $tracker->processForm();
  66. echo "Dry run data:\n";
  67. print_r($dry_run_data);
  68. // Disable dry run mode
  69. $tracker->disableDryRun();
  70. echo "Dry run mode: " . ($tracker->isDryRun() ? 'true' : 'false') . "\n";
  71. ?>

Add your comment