Loads email templates from "emails" views, available to plugins too.
parent
20cc575792
commit
b609aca2cc
|
|
@ -11,13 +11,45 @@
|
||||||
*
|
*
|
||||||
* @param string $templateName Template filename (without extension)
|
* @param string $templateName Template filename (without extension)
|
||||||
* @param array $variables Variables to substitute
|
* @param array $variables Variables to substitute
|
||||||
|
* @param array $options Additional options
|
||||||
* @return string Rendered template content
|
* @return string Rendered template content
|
||||||
*/
|
*/
|
||||||
function renderEmailTemplate($templateName, $variables = []) {
|
function renderEmailTemplate($templateName, $variables = [], array $options = []) {
|
||||||
$templateFile = __DIR__ . '/../templates/' . $templateName . '.txt';
|
$searchPaths = [];
|
||||||
|
|
||||||
if (!file_exists($templateFile)) {
|
// Explicit plugin template path takes priority
|
||||||
throw new RuntimeException("Email template '$templateName' not found");
|
if (!empty($options['plugin_template'])) {
|
||||||
|
$searchPaths[] = rtrim((string)$options['plugin_template'], DIRECTORY_SEPARATOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Plugin name maps to its templates directory (if registered)
|
||||||
|
if (!empty($options['plugin'])) {
|
||||||
|
$pluginKey = (string)$options['plugin'];
|
||||||
|
$pluginInfo = $GLOBALS['enabled_plugins'][$pluginKey] ?? null;
|
||||||
|
if (!empty($pluginInfo['path'])) {
|
||||||
|
$pluginBase = rtrim($pluginInfo['path'], DIRECTORY_SEPARATOR);
|
||||||
|
|
||||||
|
// We search for email templates in the following locations:
|
||||||
|
// we can add more locations if needed, but "views/emails" is the standard location
|
||||||
|
$searchPaths[] = $pluginBase . '/views/emails';
|
||||||
|
$searchPaths[] = $pluginBase . '/views/email';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fallback to core app templates
|
||||||
|
$searchPaths[] = __DIR__ . '/../templates/emails';
|
||||||
|
|
||||||
|
$templateFile = null;
|
||||||
|
foreach ($searchPaths as $basePath) {
|
||||||
|
$candidate = rtrim($basePath, DIRECTORY_SEPARATOR) . '/' . $templateName . '.txt';
|
||||||
|
if (is_file($candidate)) {
|
||||||
|
$templateFile = $candidate;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($templateFile === null) {
|
||||||
|
throw new RuntimeException("Email template '$templateName' not found in any configured template paths");
|
||||||
}
|
}
|
||||||
|
|
||||||
$content = file_get_contents($templateFile);
|
$content = file_get_contents($templateFile);
|
||||||
|
|
@ -39,11 +71,12 @@ function renderEmailTemplate($templateName, $variables = []) {
|
||||||
* @param array $variables Template variables
|
* @param array $variables Template variables
|
||||||
* @param array $config Application config
|
* @param array $config Application config
|
||||||
* @param array $additionalHeaders Additional email headers
|
* @param array $additionalHeaders Additional email headers
|
||||||
|
* @param array $options Additional options
|
||||||
* @return bool Success status
|
* @return bool Success status
|
||||||
*/
|
*/
|
||||||
function sendTemplateEmail($to, $subject, $templateName, $variables, $config, $additionalHeaders = []) {
|
function sendTemplateEmail($to, $subject, $templateName, $variables, $config, $additionalHeaders = [], array $options = []) {
|
||||||
try {
|
try {
|
||||||
$message = renderEmailTemplate($templateName, $variables);
|
$message = renderEmailTemplate($templateName, $variables, $options);
|
||||||
|
|
||||||
$fromDomain = $config['domain'] ?? ($_SERVER['HTTP_HOST'] ?? 'totalmeet.local');
|
$fromDomain = $config['domain'] ?? ($_SERVER['HTTP_HOST'] ?? 'totalmeet.local');
|
||||||
$headers = array_merge([
|
$headers = array_merge([
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue