Skip to content

Commit 3b73fa1

Browse files
committed
GH-230 Refactor handleReferralMultiAccountDetection()
1 parent dc1738e commit 3b73fa1

File tree

1 file changed

+77
-51
lines changed

1 file changed

+77
-51
lines changed

modules/overview/screens/FirstLogin/utils/effects/handleReferralMultiAccountDetection.effect.php

Lines changed: 77 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -21,62 +21,88 @@ function handleReferralMultiAccountDetection($props) {
2121
$_Included_AlertSystemUtilities = true;
2222
include($_EnginePath.'includes/functions/AlertSystemUtilities.php');
2323

24-
$CheckIntersection = AlertUtils_IPIntersect($userId, $referredById, array
25-
(
26-
'LastTimeDiff' => (TIME_DAY * 60),
27-
'ThisTimeDiff' => (TIME_DAY * 60),
28-
'ThisTimeStamp' => ($currentTimestamp - SERVER_MAINOPEN_TSTAMP)
29-
));
30-
31-
if($CheckIntersection !== false)
32-
{
33-
$FiltersData = array();
34-
$FiltersData['place'] = 4;
35-
$FiltersData['alertsender'] = 4;
36-
$FiltersData['users'] = array($userId, $referredById);
37-
$FiltersData['ips'] = $CheckIntersection['Intersect'];
38-
$FiltersData['newuser'] = $userId;
39-
$FiltersData['referrer'] = $referredById;
40-
foreach($CheckIntersection['Intersect'] as $IP)
41-
{
42-
$FiltersData['logcount'][$IP][$userId] = $CheckIntersection['IPLogData'][$userId][$IP]['Count'];
43-
$FiltersData['logcount'][$IP][$referredById] = $CheckIntersection['IPLogData'][$referredById][$IP]['Count'];
24+
$intersectionCheckResult = AlertUtils_IPIntersect(
25+
$userId,
26+
$referredById,
27+
[
28+
'LastTimeDiff' => (TIME_DAY * 60),
29+
'ThisTimeDiff' => (TIME_DAY * 60),
30+
'ThisTimeStamp' => ($currentTimestamp - SERVER_MAINOPEN_TSTAMP)
31+
]
32+
);
33+
34+
if ($intersectionCheckResult === false) {
35+
return;
36+
}
37+
38+
$ALERT_SENDER = 4;
39+
40+
$alertSystemFilterParams = [];
41+
$alertSystemFilterParams['place'] = 4;
42+
$alertSystemFilterParams['alertsender'] = $ALERT_SENDER;
43+
$alertSystemFilterParams['users'] = [
44+
$userId,
45+
$referredById,
46+
];
47+
$alertSystemFilterParams['ips'] = $intersectionCheckResult['Intersect'];
48+
$alertSystemFilterParams['newuser'] = $userId;
49+
$alertSystemFilterParams['referrer'] = $referredById;
50+
$alertSystemFilterParams['logcount'] = object_map(
51+
$intersectionCheckResult['Intersect'],
52+
function ($intersectedIpId) use ($intersectionCheckResult, $userId, $referredById) {
53+
return [
54+
[
55+
$userId => $intersectionCheckResult['IPLogData'][$userId][$intersectedIpId]['Count'],
56+
$referredById => $intersectionCheckResult['IPLogData'][$referredById][$intersectedIpId]['Count'],
57+
],
58+
$intersectedIpId
59+
];
4460
}
61+
);
62+
63+
$alertSystemFilterResult = AlertUtils_CheckFilters(
64+
$alertSystemFilterParams,
65+
[
66+
'Save' => true,
67+
]
68+
);
4569

46-
$FilterResult = AlertUtils_CheckFilters($FiltersData, array('Save' => true));
47-
if($FilterResult['SendAlert'])
48-
{
49-
$_Alert['Data']['ReferrerID'] = $referredById;
50-
foreach($CheckIntersection['Intersect'] as $ThisIPID)
51-
{
52-
$_Alert['Data']['Intersect'][] = array
53-
(
54-
'IPID' => $ThisIPID,
55-
'NewUser' => $CheckIntersection['IPLogData'][$userId][$ThisIPID],
56-
'OldUser' => $CheckIntersection['IPLogData'][$referredById][$ThisIPID]
57-
);
58-
}
59-
if(!empty($referringUserWithTasksData['TaskData']))
60-
{
61-
$_Alert['Data']['Tasks'] = $referringUserWithTasksData['TaskData'];
62-
}
63-
64-
$Query_AlertOtherUsers .= "SELECT DISTINCT `User_ID` FROM {{table}} WHERE ";
65-
$Query_AlertOtherUsers .= "`User_ID` NOT IN ({$userId}, {$referredById}) AND ";
66-
$Query_AlertOtherUsers .= "`IP_ID` IN (".implode(', ', $CheckIntersection['Intersect']).") AND ";
67-
$Query_AlertOtherUsers .= "`Count` > `FailCount`;";
68-
$Result_AlertOtherUsers = doquery($Query_AlertOtherUsers, 'user_enterlog');
69-
if($Result_AlertOtherUsers->num_rows > 0)
70-
{
71-
while($FetchData = $Result_AlertOtherUsers->fetch_assoc())
72-
{
73-
$_Alert['Data']['OtherUsers'][] = $FetchData['User_ID'];
70+
if (!$alertSystemFilterResult['SendAlert']) {
71+
return;
72+
}
73+
74+
$alertParams = [
75+
'Data' => [
76+
'ReferrerID' => $referredById,
77+
'Intersect' => array_map_withkeys(
78+
$intersectionCheckResult['Intersect'],
79+
function ($intersectedIpId) use ($intersectionCheckResult, $userId, $referredById) {
80+
return [
81+
'IPID' => $intersectedIpId,
82+
'NewUser' => $intersectionCheckResult['IPLogData'][$userId][$intersectedIpId],
83+
'OldUser' => $intersectionCheckResult['IPLogData'][$referredById][$intersectedIpId],
84+
];
7485
}
75-
}
86+
),
87+
],
88+
];
7689

77-
Alerts_Add(4, $currentTimestamp, 1, 2, 8, $userId, $_Alert['Data']);
78-
}
90+
if (!empty($referringUserWithTasksData['TaskData'])) {
91+
$alertParams['Data']['Tasks'] = $referringUserWithTasksData['TaskData'];
7992
}
93+
94+
$Query_AlertOtherUsers = '';
95+
$Query_AlertOtherUsers .= "SELECT DISTINCT `User_ID` FROM {{table}} WHERE ";
96+
$Query_AlertOtherUsers .= "`User_ID` NOT IN ({$userId}, {$referredById}) AND ";
97+
$Query_AlertOtherUsers .= "`IP_ID` IN (".implode(', ', $intersectionCheckResult['Intersect']).") AND ";
98+
$Query_AlertOtherUsers .= "`Count` > `FailCount`;";
99+
$Result_AlertOtherUsers = doquery($Query_AlertOtherUsers, 'user_enterlog');
100+
101+
$alertParams['Data']['OtherUsers'] = mapQueryResults($Result_AlertOtherUsers, function ($otherUserEntry) {
102+
return $otherUserEntry['User_ID'];
103+
});
104+
105+
Alerts_Add($ALERT_SENDER, $currentTimestamp, 1, 2, 8, $userId, $alertParams['Data']);
80106
}
81107

82108
?>

0 commit comments

Comments
 (0)