| <?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; |
| } |
| } |
|
|