Skip to content

Commit 306a9be

Browse files
committed
Apply some early returns in function qa_mailing_perform_step()
1 parent de02a7f commit 306a9be

1 file changed

Lines changed: 38 additions & 33 deletions

File tree

qa-include/app/mailing.php

Lines changed: 38 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -63,51 +63,56 @@ function qa_mailing_perform_step()
6363

6464
$lastuserid = qa_opt('mailing_last_userid');
6565

66-
if (strlen($lastuserid)) {
67-
$thistime = time();
68-
$lasttime = qa_opt('mailing_last_timestamp');
69-
$perminute = qa_opt('mailing_per_minute');
66+
if (strlen($lastuserid) == 0) {
67+
return;
68+
}
7069

71-
if (($lasttime - $thistime) > 60) // if it's been a while, we assume there hasn't been continuous mailing...
72-
$lasttime = $thistime - 1; // ... so only do 1 second's worth
73-
else // otherwise...
74-
$lasttime = max($lasttime, $thistime - 6); // ... don't do more than 6 seconds' worth
70+
$thistime = time();
71+
$lasttime = qa_opt('mailing_last_timestamp');
72+
$perminute = qa_opt('mailing_per_minute');
7573

76-
$count = min(floor(($thistime - $lasttime) * $perminute / 60), 100); // don't do more than 100 messages at a time
74+
if (($lasttime - $thistime) > 60) // if it's been a while, we assume there hasn't been continuous mailing...
75+
$lasttime = $thistime - 1; // ... so only do 1 second's worth
76+
else // otherwise...
77+
$lasttime = max($lasttime, $thistime - 6); // ... don't do more than 6 seconds' worth
7778

78-
if ($count > 0) {
79-
qa_opt('mailing_last_timestamp', $thistime + 30);
80-
// prevents a parallel call to qa_mailing_perform_step() from sending messages, unless we're very unlucky with timing (poor man's mutex)
79+
$count = min(floor(($thistime - $lasttime) * $perminute / 60), 100); // don't do more than 100 messages at a time
8180

82-
$sentusers = 0;
83-
$users = qa_db_users_get_mailing_next($lastuserid, $count);
81+
if ($count == 0) {
82+
return;
83+
}
8484

85-
if (count($users)) {
86-
foreach ($users as $user) {
87-
$lastuserid = max($lastuserid, $user['userid']);
88-
}
85+
qa_opt('mailing_last_timestamp', $thistime + 30);
86+
// prevents a parallel call to qa_mailing_perform_step() from sending messages, unless we're very unlucky with timing (poor man's mutex)
8987

90-
qa_opt('mailing_last_userid', $lastuserid);
91-
qa_opt('mailing_done_users', qa_opt('mailing_done_users') + count($users));
88+
$sentusers = 0;
89+
$users = qa_db_users_get_mailing_next($lastuserid, $count);
9290

93-
$isModeratingUsers = qa_opt('moderate_users');
91+
if (count($users)) {
92+
foreach ($users as $user) {
93+
$lastuserid = max($lastuserid, $user['userid']);
94+
}
9495

95-
foreach ($users as $user) {
96-
if (($user['flags'] & QA_USER_FLAGS_NO_MAILINGS) || // exclude users who don't want to get the mailings
97-
($user['flags'] & QA_USER_FLAGS_USER_BLOCKED) || // exclude blocked users
98-
($isModeratingUsers && ($user['level'] < QA_USER_LEVEL_APPROVED))) { // if moderating users exclude unapproved users
99-
continue;
100-
}
96+
qa_opt('mailing_last_userid', $lastuserid);
97+
qa_opt('mailing_done_users', qa_opt('mailing_done_users') + count($users));
10198

102-
qa_mailing_send_one($user['userid'], $user['handle'], $user['email'], $user['emailcode']);
103-
$sentusers++;
104-
}
99+
$isModeratingUsers = qa_opt('moderate_users');
105100

106-
qa_opt('mailing_last_timestamp', $lasttime + $sentusers * 60 / $perminute); // can be floating point result, based on number of mails actually sent
101+
foreach ($users as $user) {
102+
if (($user['flags'] & QA_USER_FLAGS_NO_MAILINGS) || // exclude users who don't want to get the mailings
103+
($user['flags'] & QA_USER_FLAGS_USER_BLOCKED) || // exclude blocked users
104+
($isModeratingUsers && ($user['level'] < QA_USER_LEVEL_APPROVED))) { // if moderating users exclude unapproved users
105+
continue;
106+
}
107107

108-
} else
109-
qa_mailing_stop();
108+
qa_mailing_send_one($user['userid'], $user['handle'], $user['email'], $user['emailcode']);
109+
$sentusers++;
110110
}
111+
112+
qa_opt('mailing_last_timestamp', $lasttime + $sentusers * 60 / $perminute); // can be floating point result, based on number of mails actually sent
113+
114+
} else {
115+
qa_mailing_stop();
111116
}
112117
}
113118

0 commit comments

Comments
 (0)