/
Limit.php
74 lines (61 loc) · 2.5 KB
/
Limit.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php
namespace Concrete\Core\User\PrivateMessage;
use Loader;
use DateTime;
use Config;
use UserInfo;
use Events;
use View;
class Limit
{
/**
* checks to see if a user has exceeded their limit for sending private messages.
*
* @param int $uID
*
* @return bool
*/
public function isOverLimit($uID)
{
if (Config::get('concrete.user.private_messages.throttle_max') == 0) {
return false;
}
if (Config::get('concrete.user.private_messages.throttle_max_timespan') == 0) {
return false;
}
$db = Loader::db();
$dt = new DateTime();
$dt->modify('-'.Config::get('concrete.user.private_messages.throttle_max_timespan').' minutes');
$v = array($uID, $dt->format('Y-m-d H:i:s'));
$q = "SELECT COUNT(msgID) as sent_count FROM UserPrivateMessages WHERE uAuthorID = ? AND msgDateCreated >= ?";
$count = $db->getOne($q, $v);
if ($count > Config::get('concrete.user.private_messages.throttle_max')) {
self::notifyAdmin($uID);
return true;
} else {
return false;
}
}
public function getErrorObject()
{
$ve = Loader::helper('validation/error');
$ve->add(t('You may not send more than %s messages in %s minutes', Config::get('concrete.user.private_messages.throttle_max'), Config::get('concrete.user.private_messages.throttle_max_timespan')));
return $ve;
}
protected function notifyAdmin($offenderID)
{
$offender = UserInfo::getByID($offenderID);
$ue = new \Concrete\Core\User\Event\UserInfo($offender);
Events::dispatch('on_private_message_over_limit', $ue);
$admin = UserInfo::getByID(USER_SUPER_ID);
\Log::addEntry(t("User: %s has tried to send more than %s private messages within %s minutes", $offender->getUserName(), Config::get('concrete.user.private_messages.throttle_max'), Config::get('concrete.user.private_messages.throttle_max_timespan')), t('warning'));
$mh = Loader::helper('mail');
$mh->addParameter('offenderUname', $offender->getUserName());
$mh->addParameter('profileURL', $offender->getUserPublicProfileUrl());
$mh->addParameter('profilePreferencesURL', View::url('/account/edit_profile'));
$mh->to($admin->getUserEmail());
$mh->addParameter('siteName', tc('SiteName', \Core::make('site')->getSite()->getSiteName()));
$mh->load('private_message_admin_warning');
$mh->sendMail();
}
}