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(