diff --git a/Dockerfile b/Dockerfile index c841b03..6b5e2ee 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,6 +14,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ locales \ curl \ gettext-base \ + procps \ && curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \ && apt-get install -y nodejs \ && rm -rf /var/lib/apt/lists/* diff --git a/docker/php/entrypoint.sh b/docker/php/entrypoint.sh index 67609b4..09ec1ea 100644 --- a/docker/php/entrypoint.sh +++ b/docker/php/entrypoint.sh @@ -53,8 +53,26 @@ $DRUSH en -y views views_ui field_ui text options link datetime && \ echo "[entrypoint] Core modules enabled." || echo "[entrypoint] WARNING: core modules failed." $DRUSH en -y webform webform_ui && \ echo "[entrypoint] Webform enabled." || echo "[entrypoint] WARNING: webform failed." -$DRUSH en -y symfony_mailer && \ +$DRUSH en -y symfony_mailer mailer_transport && \ echo "[entrypoint] Mailer enabled." || echo "[entrypoint] WARNING: symfony_mailer failed." + +if [ -n "${POSTMARK_API_KEY:-}" ]; then + $DRUSH php:eval " + \$storage = \Drupal::entityTypeManager()->getStorage('mailer_transport'); + if (!\$storage->load('postmark')) { + \$storage->create([ + 'id' => 'postmark', + 'label' => 'Postmark', + 'plugin' => 'smtp', + 'configuration' => ['dsn' => 'postmark+api://' . getenv('POSTMARK_API_KEY') . '@default'], + ])->save(); + } + \$config = \Drupal::configFactory()->getEditable('mailer_transport.settings'); + \$config->set('default_transport', 'postmark')->save(); + \Drupal::configFactory()->getEditable('system.mail') + ->set('interface.default', 'symfony_mailer')->save(); + " && echo "[entrypoint] Postmark transport configured." || echo "[entrypoint] WARNING: Postmark transport setup failed." +fi $DRUSH en -y riverside_pt && \ echo "[entrypoint] riverside_pt enabled." || echo "[entrypoint] WARNING: riverside_pt failed." diff --git a/web/modules/custom/riverside_pt/riverside_pt.services.yml b/web/modules/custom/riverside_pt/riverside_pt.services.yml new file mode 100644 index 0000000..ff232ef --- /dev/null +++ b/web/modules/custom/riverside_pt/riverside_pt.services.yml @@ -0,0 +1,5 @@ +services: + riverside_pt.php_error_logger: + class: Drupal\riverside_pt\Logger\PhpErrorLogger + tags: + - { name: logger } diff --git a/web/modules/custom/riverside_pt/src/Logger/PhpErrorLogger.php b/web/modules/custom/riverside_pt/src/Logger/PhpErrorLogger.php new file mode 100644 index 0000000..7dc40c3 --- /dev/null +++ b/web/modules/custom/riverside_pt/src/Logger/PhpErrorLogger.php @@ -0,0 +1,23 @@ + RfcLogLevel::WARNING) { + return; + } + $channel = $context['channel'] ?? 'drupal'; + $severity = self::LABELS[$level] ?? 'unknown'; + $formatted = strtr($message, array_filter($context, 'is_scalar')); + error_log(sprintf('[drupal/%s] %s: %s', $channel, strtoupper($severity), $formatted)); + } +} diff --git a/web/sites/default/settings.php b/web/sites/default/settings.php index b62c556..e7084dc 100644 --- a/web/sites/default/settings.php +++ b/web/sites/default/settings.php @@ -20,18 +20,11 @@ $settings['hash_salt'] = getenv('HASH_SALT') ?: 'replace-this-in-production'; $settings['update_free_access'] = FALSE; $is_dev = (bool) getenv('DEBUG'); -$postmark_key = getenv('POSTMARK_API_KEY'); if ($is_dev) { $config['system.mail']['interface']['default'] = 'php_mail'; -} else { - if (!$postmark_key) { - throw new \RuntimeException('POSTMARK_API_KEY is not set — refusing to start without a mail transport.'); - } - $config['symfony_mailer.mailer_transport.postmark']['configuration']['dsn'] = - 'postmark+api://' . $postmark_key . '@default'; - $config['mailer_transport.settings']['default_transport'] = 'postmark'; - $config['system.mail']['interface']['default'] = 'symfony_mailer'; +} elseif (!getenv('POSTMARK_API_KEY')) { + throw new \RuntimeException('POSTMARK_API_KEY is not set — refusing to start without a mail transport.'); } // Disable CSS/JS aggregation — assets served directly from source paths.