create-berna-stencil 1.0.7 → 1.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/.eleventy.js +3 -1
  2. package/_tools/res/templates.json +2 -2
  3. package/bin/create.js +1 -1
  4. package/package.json +5 -5
  5. package/src/.htaccess +18 -0
  6. package/src/api/.htaccess +12 -0
  7. package/src/api/composer.json +6 -0
  8. package/src/api/composer.lock +574 -0
  9. package/src/api/endpoints/protected/secret.php +16 -0
  10. package/src/api/endpoints/protected/send-mail.php +75 -0
  11. package/src/api/endpoints/public/ping.php +16 -0
  12. package/src/api/index.php +95 -0
  13. package/src/api/init.php +43 -0
  14. package/src/api/modules/Response.php +37 -0
  15. package/src/api/vendor/autoload.php +22 -0
  16. package/src/api/vendor/composer/ClassLoader.php +579 -0
  17. package/src/api/vendor/composer/InstalledVersions.php +396 -0
  18. package/src/api/vendor/composer/LICENSE +21 -0
  19. package/src/api/vendor/composer/autoload_classmap.php +15 -0
  20. package/src/api/vendor/composer/autoload_files.php +12 -0
  21. package/src/api/vendor/composer/autoload_namespaces.php +9 -0
  22. package/src/api/vendor/composer/autoload_psr4.php +16 -0
  23. package/src/api/vendor/composer/autoload_real.php +50 -0
  24. package/src/api/vendor/composer/autoload_static.php +86 -0
  25. package/src/api/vendor/composer/installed.json +582 -0
  26. package/src/api/vendor/composer/installed.php +86 -0
  27. package/src/api/vendor/composer/platform_check.php +25 -0
  28. package/src/data/site.json +53 -53
  29. package/src/js/pages/404.js +2 -2
  30. package/src/js/pages/anotherPage.js +2 -2
  31. package/src/js/pages/homepage.js +2 -2
  32. package/src/scss/pages/404.scss +1 -0
  33. package/src/api/configExample.php +0 -28
  34. package/src/api/sendEmail.php +0 -131
@@ -0,0 +1,574 @@
1
+ {
2
+ "_readme": [
3
+ "This file locks the dependencies of your project to a known state",
4
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
5
+ "This file is @generated automatically"
6
+ ],
7
+ "content-hash": "06112bd3c7053b3bb5b8a9ea876cbd9f",
8
+ "packages": [
9
+ {
10
+ "name": "graham-campbell/result-type",
11
+ "version": "v1.1.4",
12
+ "source": {
13
+ "type": "git",
14
+ "url": "https://github.com/GrahamCampbell/Result-Type.git",
15
+ "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b"
16
+ },
17
+ "dist": {
18
+ "type": "zip",
19
+ "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/e01f4a821471308ba86aa202fed6698b6b695e3b",
20
+ "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b",
21
+ "shasum": ""
22
+ },
23
+ "require": {
24
+ "php": "^7.2.5 || ^8.0",
25
+ "phpoption/phpoption": "^1.9.5"
26
+ },
27
+ "require-dev": {
28
+ "phpunit/phpunit": "^8.5.41 || ^9.6.22 || ^10.5.45 || ^11.5.7"
29
+ },
30
+ "type": "library",
31
+ "autoload": {
32
+ "psr-4": {
33
+ "GrahamCampbell\\ResultType\\": "src/"
34
+ }
35
+ },
36
+ "notification-url": "https://packagist.org/downloads/",
37
+ "license": [
38
+ "MIT"
39
+ ],
40
+ "authors": [
41
+ {
42
+ "name": "Graham Campbell",
43
+ "email": "hello@gjcampbell.co.uk",
44
+ "homepage": "https://github.com/GrahamCampbell"
45
+ }
46
+ ],
47
+ "description": "An Implementation Of The Result Type",
48
+ "keywords": [
49
+ "Graham Campbell",
50
+ "GrahamCampbell",
51
+ "Result Type",
52
+ "Result-Type",
53
+ "result"
54
+ ],
55
+ "support": {
56
+ "issues": "https://github.com/GrahamCampbell/Result-Type/issues",
57
+ "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.4"
58
+ },
59
+ "funding": [
60
+ {
61
+ "url": "https://github.com/GrahamCampbell",
62
+ "type": "github"
63
+ },
64
+ {
65
+ "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type",
66
+ "type": "tidelift"
67
+ }
68
+ ],
69
+ "time": "2025-12-27T19:43:20+00:00"
70
+ },
71
+ {
72
+ "name": "phpmailer/phpmailer",
73
+ "version": "v7.0.2",
74
+ "source": {
75
+ "type": "git",
76
+ "url": "https://github.com/PHPMailer/PHPMailer.git",
77
+ "reference": "ebf1655bd5b99b3f97e1a3ec0a69e5f4cd7ea088"
78
+ },
79
+ "dist": {
80
+ "type": "zip",
81
+ "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/ebf1655bd5b99b3f97e1a3ec0a69e5f4cd7ea088",
82
+ "reference": "ebf1655bd5b99b3f97e1a3ec0a69e5f4cd7ea088",
83
+ "shasum": ""
84
+ },
85
+ "require": {
86
+ "ext-ctype": "*",
87
+ "ext-filter": "*",
88
+ "ext-hash": "*",
89
+ "php": ">=5.5.0"
90
+ },
91
+ "require-dev": {
92
+ "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
93
+ "doctrine/annotations": "^1.2.6 || ^1.13.3",
94
+ "php-parallel-lint/php-console-highlighter": "^1.0.0",
95
+ "php-parallel-lint/php-parallel-lint": "^1.3.2",
96
+ "phpcompatibility/php-compatibility": "^10.0.0@dev",
97
+ "squizlabs/php_codesniffer": "^3.13.5",
98
+ "yoast/phpunit-polyfills": "^1.0.4"
99
+ },
100
+ "suggest": {
101
+ "decomplexity/SendOauth2": "Adapter for using XOAUTH2 authentication",
102
+ "directorytree/imapengine": "For uploading sent messages via IMAP, see gmail example",
103
+ "ext-imap": "Needed to support advanced email address parsing according to RFC822",
104
+ "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses",
105
+ "ext-openssl": "Needed for secure SMTP sending and DKIM signing",
106
+ "greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication",
107
+ "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
108
+ "league/oauth2-google": "Needed for Google XOAUTH2 authentication",
109
+ "psr/log": "For optional PSR-3 debug logging",
110
+ "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)",
111
+ "thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication"
112
+ },
113
+ "type": "library",
114
+ "autoload": {
115
+ "psr-4": {
116
+ "PHPMailer\\PHPMailer\\": "src/"
117
+ }
118
+ },
119
+ "notification-url": "https://packagist.org/downloads/",
120
+ "license": [
121
+ "LGPL-2.1-only"
122
+ ],
123
+ "authors": [
124
+ {
125
+ "name": "Marcus Bointon",
126
+ "email": "phpmailer@synchromedia.co.uk"
127
+ },
128
+ {
129
+ "name": "Jim Jagielski",
130
+ "email": "jimjag@gmail.com"
131
+ },
132
+ {
133
+ "name": "Andy Prevost",
134
+ "email": "codeworxtech@users.sourceforge.net"
135
+ },
136
+ {
137
+ "name": "Brent R. Matzelle"
138
+ }
139
+ ],
140
+ "description": "PHPMailer is a full-featured email creation and transfer class for PHP",
141
+ "support": {
142
+ "issues": "https://github.com/PHPMailer/PHPMailer/issues",
143
+ "source": "https://github.com/PHPMailer/PHPMailer/tree/v7.0.2"
144
+ },
145
+ "funding": [
146
+ {
147
+ "url": "https://github.com/Synchro",
148
+ "type": "github"
149
+ }
150
+ ],
151
+ "time": "2026-01-09T18:02:33+00:00"
152
+ },
153
+ {
154
+ "name": "phpoption/phpoption",
155
+ "version": "1.9.5",
156
+ "source": {
157
+ "type": "git",
158
+ "url": "https://github.com/schmittjoh/php-option.git",
159
+ "reference": "75365b91986c2405cf5e1e012c5595cd487a98be"
160
+ },
161
+ "dist": {
162
+ "type": "zip",
163
+ "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/75365b91986c2405cf5e1e012c5595cd487a98be",
164
+ "reference": "75365b91986c2405cf5e1e012c5595cd487a98be",
165
+ "shasum": ""
166
+ },
167
+ "require": {
168
+ "php": "^7.2.5 || ^8.0"
169
+ },
170
+ "require-dev": {
171
+ "bamarni/composer-bin-plugin": "^1.8.2",
172
+ "phpunit/phpunit": "^8.5.44 || ^9.6.25 || ^10.5.53 || ^11.5.34"
173
+ },
174
+ "type": "library",
175
+ "extra": {
176
+ "bamarni-bin": {
177
+ "bin-links": true,
178
+ "forward-command": false
179
+ },
180
+ "branch-alias": {
181
+ "dev-master": "1.9-dev"
182
+ }
183
+ },
184
+ "autoload": {
185
+ "psr-4": {
186
+ "PhpOption\\": "src/PhpOption/"
187
+ }
188
+ },
189
+ "notification-url": "https://packagist.org/downloads/",
190
+ "license": [
191
+ "Apache-2.0"
192
+ ],
193
+ "authors": [
194
+ {
195
+ "name": "Johannes M. Schmitt",
196
+ "email": "schmittjoh@gmail.com",
197
+ "homepage": "https://github.com/schmittjoh"
198
+ },
199
+ {
200
+ "name": "Graham Campbell",
201
+ "email": "hello@gjcampbell.co.uk",
202
+ "homepage": "https://github.com/GrahamCampbell"
203
+ }
204
+ ],
205
+ "description": "Option Type for PHP",
206
+ "keywords": [
207
+ "language",
208
+ "option",
209
+ "php",
210
+ "type"
211
+ ],
212
+ "support": {
213
+ "issues": "https://github.com/schmittjoh/php-option/issues",
214
+ "source": "https://github.com/schmittjoh/php-option/tree/1.9.5"
215
+ },
216
+ "funding": [
217
+ {
218
+ "url": "https://github.com/GrahamCampbell",
219
+ "type": "github"
220
+ },
221
+ {
222
+ "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption",
223
+ "type": "tidelift"
224
+ }
225
+ ],
226
+ "time": "2025-12-27T19:41:33+00:00"
227
+ },
228
+ {
229
+ "name": "symfony/polyfill-ctype",
230
+ "version": "v1.37.0",
231
+ "source": {
232
+ "type": "git",
233
+ "url": "https://github.com/symfony/polyfill-ctype.git",
234
+ "reference": "141046a8f9477948ff284fa65be2095baafb94f2"
235
+ },
236
+ "dist": {
237
+ "type": "zip",
238
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2",
239
+ "reference": "141046a8f9477948ff284fa65be2095baafb94f2",
240
+ "shasum": ""
241
+ },
242
+ "require": {
243
+ "php": ">=7.2"
244
+ },
245
+ "provide": {
246
+ "ext-ctype": "*"
247
+ },
248
+ "suggest": {
249
+ "ext-ctype": "For best performance"
250
+ },
251
+ "type": "library",
252
+ "extra": {
253
+ "thanks": {
254
+ "url": "https://github.com/symfony/polyfill",
255
+ "name": "symfony/polyfill"
256
+ }
257
+ },
258
+ "autoload": {
259
+ "files": [
260
+ "bootstrap.php"
261
+ ],
262
+ "psr-4": {
263
+ "Symfony\\Polyfill\\Ctype\\": ""
264
+ }
265
+ },
266
+ "notification-url": "https://packagist.org/downloads/",
267
+ "license": [
268
+ "MIT"
269
+ ],
270
+ "authors": [
271
+ {
272
+ "name": "Gert de Pagter",
273
+ "email": "BackEndTea@gmail.com"
274
+ },
275
+ {
276
+ "name": "Symfony Community",
277
+ "homepage": "https://symfony.com/contributors"
278
+ }
279
+ ],
280
+ "description": "Symfony polyfill for ctype functions",
281
+ "homepage": "https://symfony.com",
282
+ "keywords": [
283
+ "compatibility",
284
+ "ctype",
285
+ "polyfill",
286
+ "portable"
287
+ ],
288
+ "support": {
289
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.37.0"
290
+ },
291
+ "funding": [
292
+ {
293
+ "url": "https://symfony.com/sponsor",
294
+ "type": "custom"
295
+ },
296
+ {
297
+ "url": "https://github.com/fabpot",
298
+ "type": "github"
299
+ },
300
+ {
301
+ "url": "https://github.com/nicolas-grekas",
302
+ "type": "github"
303
+ },
304
+ {
305
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
306
+ "type": "tidelift"
307
+ }
308
+ ],
309
+ "time": "2026-04-10T16:19:22+00:00"
310
+ },
311
+ {
312
+ "name": "symfony/polyfill-mbstring",
313
+ "version": "v1.37.0",
314
+ "source": {
315
+ "type": "git",
316
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
317
+ "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315"
318
+ },
319
+ "dist": {
320
+ "type": "zip",
321
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6a21eb99c6973357967f6ce3708cd55a6bec6315",
322
+ "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315",
323
+ "shasum": ""
324
+ },
325
+ "require": {
326
+ "ext-iconv": "*",
327
+ "php": ">=7.2"
328
+ },
329
+ "provide": {
330
+ "ext-mbstring": "*"
331
+ },
332
+ "suggest": {
333
+ "ext-mbstring": "For best performance"
334
+ },
335
+ "type": "library",
336
+ "extra": {
337
+ "thanks": {
338
+ "url": "https://github.com/symfony/polyfill",
339
+ "name": "symfony/polyfill"
340
+ }
341
+ },
342
+ "autoload": {
343
+ "files": [
344
+ "bootstrap.php"
345
+ ],
346
+ "psr-4": {
347
+ "Symfony\\Polyfill\\Mbstring\\": ""
348
+ }
349
+ },
350
+ "notification-url": "https://packagist.org/downloads/",
351
+ "license": [
352
+ "MIT"
353
+ ],
354
+ "authors": [
355
+ {
356
+ "name": "Nicolas Grekas",
357
+ "email": "p@tchwork.com"
358
+ },
359
+ {
360
+ "name": "Symfony Community",
361
+ "homepage": "https://symfony.com/contributors"
362
+ }
363
+ ],
364
+ "description": "Symfony polyfill for the Mbstring extension",
365
+ "homepage": "https://symfony.com",
366
+ "keywords": [
367
+ "compatibility",
368
+ "mbstring",
369
+ "polyfill",
370
+ "portable",
371
+ "shim"
372
+ ],
373
+ "support": {
374
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.37.0"
375
+ },
376
+ "funding": [
377
+ {
378
+ "url": "https://symfony.com/sponsor",
379
+ "type": "custom"
380
+ },
381
+ {
382
+ "url": "https://github.com/fabpot",
383
+ "type": "github"
384
+ },
385
+ {
386
+ "url": "https://github.com/nicolas-grekas",
387
+ "type": "github"
388
+ },
389
+ {
390
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
391
+ "type": "tidelift"
392
+ }
393
+ ],
394
+ "time": "2026-04-10T17:25:58+00:00"
395
+ },
396
+ {
397
+ "name": "symfony/polyfill-php80",
398
+ "version": "v1.37.0",
399
+ "source": {
400
+ "type": "git",
401
+ "url": "https://github.com/symfony/polyfill-php80.git",
402
+ "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411"
403
+ },
404
+ "dist": {
405
+ "type": "zip",
406
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411",
407
+ "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411",
408
+ "shasum": ""
409
+ },
410
+ "require": {
411
+ "php": ">=7.2"
412
+ },
413
+ "type": "library",
414
+ "extra": {
415
+ "thanks": {
416
+ "url": "https://github.com/symfony/polyfill",
417
+ "name": "symfony/polyfill"
418
+ }
419
+ },
420
+ "autoload": {
421
+ "files": [
422
+ "bootstrap.php"
423
+ ],
424
+ "psr-4": {
425
+ "Symfony\\Polyfill\\Php80\\": ""
426
+ },
427
+ "classmap": [
428
+ "Resources/stubs"
429
+ ]
430
+ },
431
+ "notification-url": "https://packagist.org/downloads/",
432
+ "license": [
433
+ "MIT"
434
+ ],
435
+ "authors": [
436
+ {
437
+ "name": "Ion Bazan",
438
+ "email": "ion.bazan@gmail.com"
439
+ },
440
+ {
441
+ "name": "Nicolas Grekas",
442
+ "email": "p@tchwork.com"
443
+ },
444
+ {
445
+ "name": "Symfony Community",
446
+ "homepage": "https://symfony.com/contributors"
447
+ }
448
+ ],
449
+ "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
450
+ "homepage": "https://symfony.com",
451
+ "keywords": [
452
+ "compatibility",
453
+ "polyfill",
454
+ "portable",
455
+ "shim"
456
+ ],
457
+ "support": {
458
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.37.0"
459
+ },
460
+ "funding": [
461
+ {
462
+ "url": "https://symfony.com/sponsor",
463
+ "type": "custom"
464
+ },
465
+ {
466
+ "url": "https://github.com/fabpot",
467
+ "type": "github"
468
+ },
469
+ {
470
+ "url": "https://github.com/nicolas-grekas",
471
+ "type": "github"
472
+ },
473
+ {
474
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
475
+ "type": "tidelift"
476
+ }
477
+ ],
478
+ "time": "2026-04-10T16:19:22+00:00"
479
+ },
480
+ {
481
+ "name": "vlucas/phpdotenv",
482
+ "version": "v5.6.3",
483
+ "source": {
484
+ "type": "git",
485
+ "url": "https://github.com/vlucas/phpdotenv.git",
486
+ "reference": "955e7815d677a3eaa7075231212f2110983adecc"
487
+ },
488
+ "dist": {
489
+ "type": "zip",
490
+ "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/955e7815d677a3eaa7075231212f2110983adecc",
491
+ "reference": "955e7815d677a3eaa7075231212f2110983adecc",
492
+ "shasum": ""
493
+ },
494
+ "require": {
495
+ "ext-pcre": "*",
496
+ "graham-campbell/result-type": "^1.1.4",
497
+ "php": "^7.2.5 || ^8.0",
498
+ "phpoption/phpoption": "^1.9.5",
499
+ "symfony/polyfill-ctype": "^1.26",
500
+ "symfony/polyfill-mbstring": "^1.26",
501
+ "symfony/polyfill-php80": "^1.26"
502
+ },
503
+ "require-dev": {
504
+ "bamarni/composer-bin-plugin": "^1.8.2",
505
+ "ext-filter": "*",
506
+ "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2"
507
+ },
508
+ "suggest": {
509
+ "ext-filter": "Required to use the boolean validator."
510
+ },
511
+ "type": "library",
512
+ "extra": {
513
+ "bamarni-bin": {
514
+ "bin-links": true,
515
+ "forward-command": false
516
+ },
517
+ "branch-alias": {
518
+ "dev-master": "5.6-dev"
519
+ }
520
+ },
521
+ "autoload": {
522
+ "psr-4": {
523
+ "Dotenv\\": "src/"
524
+ }
525
+ },
526
+ "notification-url": "https://packagist.org/downloads/",
527
+ "license": [
528
+ "BSD-3-Clause"
529
+ ],
530
+ "authors": [
531
+ {
532
+ "name": "Graham Campbell",
533
+ "email": "hello@gjcampbell.co.uk",
534
+ "homepage": "https://github.com/GrahamCampbell"
535
+ },
536
+ {
537
+ "name": "Vance Lucas",
538
+ "email": "vance@vancelucas.com",
539
+ "homepage": "https://github.com/vlucas"
540
+ }
541
+ ],
542
+ "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
543
+ "keywords": [
544
+ "dotenv",
545
+ "env",
546
+ "environment"
547
+ ],
548
+ "support": {
549
+ "issues": "https://github.com/vlucas/phpdotenv/issues",
550
+ "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.3"
551
+ },
552
+ "funding": [
553
+ {
554
+ "url": "https://github.com/GrahamCampbell",
555
+ "type": "github"
556
+ },
557
+ {
558
+ "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv",
559
+ "type": "tidelift"
560
+ }
561
+ ],
562
+ "time": "2025-12-27T19:49:13+00:00"
563
+ }
564
+ ],
565
+ "packages-dev": [],
566
+ "aliases": [],
567
+ "minimum-stability": "stable",
568
+ "stability-flags": {},
569
+ "prefer-stable": false,
570
+ "prefer-lowest": false,
571
+ "platform": {},
572
+ "platform-dev": {},
573
+ "plugin-api-version": "2.6.0"
574
+ }
@@ -0,0 +1,16 @@
1
+ <?php
2
+
3
+ declare(strict_types=1);
4
+
5
+ require_once __DIR__ . '/../../modules/Response.php';
6
+
7
+ if ($method !== 'GET') {
8
+ Response::error('Method not allowed', 405);
9
+ }
10
+
11
+ Response::success([
12
+ 'message' => 'Protected endpoint is working',
13
+ 'endpoint' => 'secret',
14
+ 'visibility' => 'protected',
15
+ 'params' => $requestParams,
16
+ ]);
@@ -0,0 +1,75 @@
1
+ <?php
2
+
3
+ declare(strict_types=1);
4
+
5
+ use PHPMailer\PHPMailer\PHPMailer;
6
+ use PHPMailer\PHPMailer\Exception;
7
+
8
+ /**
9
+ * NOTA: Non serve require 'vendor/autoload.php' o 'init.php'
10
+ * perché questo file viene incluso da index.php che ha già caricato tutto.
11
+ */
12
+
13
+ // 1. Controllo Metodo (Vogliamo solo POST)
14
+ if ($method !== 'POST') {
15
+ Response::error('Method not allowed', 405);
16
+ }
17
+
18
+ // 2. Funzioni di Sanitizzazione (Locali o spostabili in un helper)
19
+ $clean = fn($v) => htmlspecialchars(trim((string)($v ?? '')), ENT_QUOTES, 'UTF-8');
20
+ $safeNum = fn($v) => filter_var($v ?? '', FILTER_SANITIZE_NUMBER_INT);
21
+
22
+ // 3. Recupero Dati (supporta sia $_POST standard che JSON)
23
+ $input = $_POST;
24
+ if (empty($input)) {
25
+ $input = json_decode(file_get_contents('php://input'), true) ?? [];
26
+ }
27
+
28
+ $formType = $clean($input['formType'] ?? 'Contatto Generico');
29
+ $name = $clean($input['name'] ?? '');
30
+ $phoneNumber = $safeNum($input['phoneNumber'] ?? '');
31
+
32
+ // Validazione minima
33
+ if (empty($name)) {
34
+ Response::error('Il campo nome è obbligatorio');
35
+ }
36
+
37
+ // 4. Configurazione PHPMailer
38
+ $mail = new PHPMailer(true);
39
+
40
+ try {
41
+ // Usiamo le variabili d'ambiente caricate da init.php
42
+ $mail->isSMTP();
43
+ $mail->Host = $_ENV['MAIL_HOST'];
44
+ $mail->SMTPAuth = true;
45
+ $mail->Username = $_ENV['MAIL_USERNAME'];
46
+ $mail->Password = $_ENV['MAIL_PASSWORD'];
47
+ $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
48
+ $mail->Port = (int)$_ENV['MAIL_PORT'];
49
+ $mail->CharSet = 'UTF-8';
50
+
51
+ $mail->setFrom($_ENV['MAIL_USERNAME'], $_ENV['MAIL_FROM_NAME'] ?? 'API Robot');
52
+ $mail->addAddress($_ENV['MAIL_TO_ADDRESS'], $_ENV['MAIL_TO_NAME'] ?? 'Admin');
53
+
54
+ $mail->isHTML(true);
55
+ $mail->Subject = "Nuovo invio modulo: {$formType}";
56
+
57
+ // Costruzione Body
58
+ $htmlBody = "<h2>Dettagli Richiesta</h2>";
59
+ $htmlBody .= "<p><strong>Nome:</strong> {$name}</p>";
60
+ if (!empty($phoneNumber)) {
61
+ $htmlBody .= "<p><strong>Telefono:</strong> {$phoneNumber}</p>";
62
+ }
63
+
64
+ $mail->Body = $htmlBody;
65
+ $mail->AltBody = strip_tags(str_replace(['<br>', '</p>'], ["\n", "\n\n"], $htmlBody));
66
+
67
+ $mail->send();
68
+
69
+ // Risposta JSON di successo
70
+ Response::success(['message' => 'Email inviata con successo']);
71
+
72
+ } catch (Exception $e) {
73
+ // Risposta JSON di errore
74
+ Response::error("Errore nell'invio della mail: {$mail->ErrorInfo}", 500);
75
+ }
@@ -0,0 +1,16 @@
1
+ <?php
2
+
3
+ declare(strict_types=1);
4
+
5
+ require_once __DIR__ . '/../../modules/Response.php';
6
+
7
+ if ($method !== 'GET') {
8
+ Response::error('Method not allowed', 405);
9
+ }
10
+
11
+ Response::success([
12
+ 'message' => 'Public endpoint is working',
13
+ 'endpoint' => 'ping',
14
+ 'visibility' => 'public',
15
+ 'params' => $requestParams,
16
+ ]);