inbox_email.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <?php
  2. require_once __DIR__ . '/../config/database.php';
  3. require_once __DIR__ . '/../lib/auth.php';
  4. require_once __DIR__ . '/../lib/csrf.php';
  5. if (session_status() === PHP_SESSION_NONE) {
  6. session_start();
  7. }
  8. requireLogin();
  9. $pageTitle = 'Compose Email';
  10. $siteName = 'Crop Monitor';
  11. $user = getCurrentUser() ?? [];
  12. $fullname = $user['fullname'] ?? '';
  13. $email = $user['email'] ?? '';
  14. $errors = [];
  15. $success = false;
  16. // Email sending requires PHPMailer — currently a stub
  17. if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['send'])) {
  18. if (!verifyCsrfToken($_POST['csrf_token'] ?? '')) {
  19. $errors[] = 'Invalid CSRF token.';
  20. } else {
  21. // TODO: configure PHPMailer / SMTP and send email
  22. $errors[] = 'Email sending is not yet configured. Please set up SMTP in lib/mailer.php.';
  23. }
  24. }
  25. $h = fn($v) => htmlspecialchars((string) $v, ENT_QUOTES, 'UTF-8');
  26. include __DIR__ . '/../layouts/header.php';
  27. include __DIR__ . '/../layouts/navbar.php';
  28. ?>
  29. <div id="layoutSidenav">
  30. <div id="layoutSidenav_nav">
  31. <?php include __DIR__ . '/../layouts/sidebar.php'; ?>
  32. </div>
  33. <div id="layoutSidenav_content">
  34. <main>
  35. <div class="container-fluid px-4">
  36. <h1 class="mt-4"><?= $h($pageTitle) ?></h1>
  37. <ol class="breadcrumb mb-4">
  38. <li class="breadcrumb-item"><a href="/dashboard/dashboard.php">Dashboard</a></li>
  39. <li class="breadcrumb-item active">Compose Email</li>
  40. </ol>
  41. <?php foreach ($errors as $err): ?>
  42. <div class="alert alert-danger"><?= $h($err) ?></div>
  43. <?php endforeach; ?>
  44. <?php if ($success): ?>
  45. <div class="alert alert-success">Email sent successfully.</div>
  46. <?php endif; ?>
  47. <div class="row">
  48. <div class="col-md-8">
  49. <form class="needs-validation" id="email-form" method="post"
  50. action="" enctype="multipart/form-data" novalidate>
  51. <input type="hidden" name="csrf_token" value="<?= $h(generateCsrfToken()) ?>">
  52. <!-- From -->
  53. <div class="input-group mb-3">
  54. <span class="input-group-text"><i class="far fa-paper-plane"></i></span>
  55. <input type="text" class="form-control fw-bold"
  56. value="<?= $h($fullname) ?> <<?= $h($email) ?>>" readonly>
  57. </div>
  58. <input type="hidden" name="emailFrom" value="<?= $h($email) ?>">
  59. <input type="hidden" name="emailFromName" value="<?= $h($fullname) ?>">
  60. <input type="hidden" name="emailReply" value="<?= $h($email) ?>">
  61. <input type="hidden" name="emailReplyName" value="<?= $h($fullname) ?>">
  62. <!-- To -->
  63. <div class="input-group mb-3">
  64. <span class="input-group-text"><i class="fas fa-envelope-open"></i></span>
  65. <input type="email" class="form-control" name="emailAddress"
  66. placeholder="To" required>
  67. <div class="invalid-feedback">Please provide a valid email address.</div>
  68. </div>
  69. <!-- CC -->
  70. <div class="input-group mb-3">
  71. <span class="input-group-text"><i class="far fa-envelope-open"></i></span>
  72. <input type="email" class="form-control" name="carboncopy" placeholder="CC">
  73. </div>
  74. <!-- Subject -->
  75. <div class="input-group mb-3">
  76. <span class="input-group-text"><i class="far fa-comment"></i></span>
  77. <input type="text" class="form-control" name="subject"
  78. placeholder="Email Subject" required>
  79. <div class="invalid-feedback">Please provide an email subject.</div>
  80. </div>
  81. <!-- Attachment -->
  82. <div class="input-group mb-3">
  83. <span class="input-group-text"><i class="fas fa-paperclip"></i></span>
  84. <input type="file" class="form-control" name="attachment[]">
  85. </div>
  86. <!-- Body -->
  87. <div class="mb-3">
  88. <label class="form-label">Email Message</label>
  89. <textarea class="form-control" name="emailBody" id="emailBody" rows="10"><?= "\n\nRegards\n" . $h($fullname) . "\nCrop Monitor Consultant\n" . $h($email) ?></textarea>
  90. </div>
  91. <button name="send" id="send" type="submit" class="btn btn-primary">Submit</button>
  92. </form>
  93. </div>
  94. </div>
  95. </div>
  96. </main>
  97. <?php include __DIR__ . '/../layouts/footer.php'; ?>
  98. </div>
  99. </div>
  100. <script>
  101. (function () {
  102. 'use strict';
  103. window.addEventListener('load', function () {
  104. var forms = document.getElementsByClassName('needs-validation');
  105. Array.prototype.forEach.call(forms, function (form) {
  106. form.addEventListener('submit', function (event) {
  107. if (!form.checkValidity()) {
  108. event.preventDefault();
  109. event.stopPropagation();
  110. }
  111. form.classList.add('was-validated');
  112. }, false);
  113. });
  114. }, false);
  115. })();
  116. </script>