From fe4d6229a4d809095f6f657800779fd16dab165d Mon Sep 17 00:00:00 2001 From: ltning Date: Sun, 25 Jan 2026 20:49:27 +0000 Subject: [PATCH] Add new send_reg_approval_email_from_register function Current send_reg_approval_email function expects account to already exist, and does not seem to be called anywhere. New function takes necessary information from the register table. Added call to new function in Regate.php after verification is done. Will fail and roll back if the function call fails or if no admin accounts were found to notify (delivered<1). --- Zotlabs/Module/Regate.php | 10 ++++- include/account.php | 85 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 93 insertions(+), 2 deletions(-) diff --git a/Zotlabs/Module/Regate.php b/Zotlabs/Module/Regate.php index 13a89a707..711d94260 100644 --- a/Zotlabs/Module/Regate.php +++ b/Zotlabs/Module/Regate.php @@ -142,7 +142,15 @@ class Regate extends \Zotlabs\Web\Controller { if (($flags & ACCOUNT_PENDING ) == ACCOUNT_PENDING) { $nextpage = 'regate/' . bin2hex($did2) . $didx; - q("COMMIT"); + $approve = send_reg_approval_email_from_register([ 'reg_id' => $r['reg_id'] ]); + if ($approve['success']) { + q("COMMIT"); + } else { + q("ROLLBACK"); + $msg_code = 'ZAR1237E'; + $msg = t('Account verification notify error'); + zar_log($msg_code . ' ' . $msg . ': ' . print_r($approve, true)); + } } elseif (($flags ^ REGISTER_AGREED) == 0) { diff --git a/include/account.php b/include/account.php index 9b859432c..11f5c9cd9 100644 --- a/include/account.php +++ b/include/account.php @@ -311,7 +311,7 @@ function verify_email_address(string $email): bool { pop_lang(); if(! $res) - logger("send_reg_approval_email: failed sending email to: {$email}"); + logger("send_reg_verification_email: failed sending email to: {$email}"); return $res; } @@ -392,6 +392,89 @@ function send_reg_approval_email($arr) { return($delivered ? true : false); } + +/** + * send_reg_approval_email_from_register + * @author ltning + * @since 2026-01-25 + * + * Account approval after verification based on table register. + * This function sends email to admin(s). + * + */ +function send_reg_approval_email_from_register($arr) { + + $result = array('success' => false, 'message' => 'rid:' . $arr['reg_id']); + $now = datetime_convert(); + + $register = q("SELECT * FROM register WHERE reg_id = %d", + intval($arr['reg_id']) + ); + + if(! ($register && count($register))) { + logger('send_reg_approval_email: could not find data for reg_id ' . $arr['reg_id']); + return $result; + } + + $r = q("select * from account where (account_roles & %d) >= 4096", + intval(ACCOUNT_ROLE_ADMIN) + ); + + $admins = array(); + + foreach($r as $rr) { + if(strlen($rr['account_email'])) { + $admins[] = array('email' => $rr['account_email'], 'lang' => $rr['account_lang']); + } + } + + if(! count($admins)) { + logger('send_reg_approval_email: could not find any admins to notify for reg_id ' . $arr['reg_id']); + return $result; + } + + $delivered = 0; + + foreach($admins as $admin) { + if(strlen($admin['lang'])) + push_lang($admin['lang']); + else + push_lang('en'); + + $email_msg = replace_macros(get_intltext_template('register_verify_eml.tpl'), array( + '$sitename' => Config::Get('system','sitename'), + '$siteurl' => z_root(), + '$email' => $register[0]['reg_email'], + '$uid' => $arr['reg_id'], + '$hash' => $register[0]['reg_hash'], + '$details' => $register[0]['reg_atip'] + )); + + $res = z_mail( + [ + 'toEmail' => $admin['email'], + 'messageSubject' => sprintf( t('Registration request at %s'), Config::Get('system','sitename')), + 'textVersion' => $email_msg, + ] + ); + + if($res) { + $delivered ++; + } else { + logger('send_reg_approval_email: failed to ' . $admin['email'] . 'reg_email: ' . $register[0]['reg_email']); + } + + pop_lang(); + } + + $result['delivered'] = $delivered; + if($delivered > 0) { + $result['success'] = true; + } + return $result; +} + + function send_register_success_email($email,$password) { $email_msg = replace_macros(get_intltext_template('register_open_eml.tpl'), array(