|
|
<?php |
|
|
|
|
|
namespace Kanboard\Job; |
|
|
|
|
|
use Kanboard\Event\GenericEvent; |
|
|
use Kanboard\Model\UserModel; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class UserMentionJob extends BaseJob |
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function withParams($text, $eventName, GenericEvent $event) |
|
|
{ |
|
|
$this->jobParams = array($text, $eventName, $event->getAll()); |
|
|
return $this; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function execute($text, $eventName, array $eventData) |
|
|
{ |
|
|
$event = new GenericEvent($eventData); |
|
|
$users = $this->getMentionedUsers($text); |
|
|
|
|
|
foreach ($users as $user) { |
|
|
if ($this->projectPermissionModel->isMember($event->getProjectId(), $user['id'])) { |
|
|
$event['mention'] = $user; |
|
|
$this->dispatcher->dispatch($event, $eventName); |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getMentionedUsers($text) |
|
|
{ |
|
|
$users = array(); |
|
|
|
|
|
if ($text !== null && preg_match_all('/@([^\s,!:?]+)/', $text, $matches)) { |
|
|
array_walk($matches[1], function (&$username) { $username = rtrim($username, '.'); }); |
|
|
$users = $this->db->table(UserModel::TABLE) |
|
|
->columns('id', 'username', 'name', 'email', 'language') |
|
|
->eq('notifications_enabled', 1) |
|
|
->neq('id', $this->userSession->getId()) |
|
|
->in('username', array_unique($matches[1])) |
|
|
->findAll(); |
|
|
} |
|
|
|
|
|
return $users; |
|
|
} |
|
|
} |
|
|
|