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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
<?php
namespace Integration;
use Exception;
use Fabiang\Xmpp\Options;
use Fabiang\Xmpp\Client;
use Fabiang\Xmpp\Protocol\Message;
use Fabiang\Xmpp\Protocol\Presence;
/**
* Jabber
*
* @package integration
* @author Frederic Guillot
*/
class Jabber extends \Core\Base
{
/**
* Return true if Jabber is enabled for this project or globally
*
* @access public
* @param integer $project_id
* @return boolean
*/
public function isActivated($project_id)
{
return $this->config->get('integration_jabber') == 1 || $this->projectIntegration->hasValue($project_id, 'jabber', 1);
}
/**
* Get connection parameters
*
* @access public
* @param integer $project_id
* @return array
*/
public function getParameters($project_id)
{
if ($this->config->get('integration_jabber') == 1) {
return array(
'server' => $this->config->get('integration_jabber_server'),
'domain' => $this->config->get('integration_jabber_domain'),
'username' => $this->config->get('integration_jabber_username'),
'password' => $this->config->get('integration_jabber_password'),
'nickname' => $this->config->get('integration_jabber_nickname'),
'room' => $this->config->get('integration_jabber_room'),
);
}
$options = $this->projectIntegration->getParameters($project_id);
return array(
'server' => $options['jabber_server'],
'domain' => $options['jabber_domain'],
'username' => $options['jabber_username'],
'password' => $options['jabber_password'],
'nickname' => $options['jabber_nickname'],
'room' => $options['jabber_room'],
);
}
/**
* Build and send the message
*
* @access public
* @param integer $project_id Project id
* @param integer $task_id Task id
* @param string $event_name Event name
* @param array $event Event data
*/
public function notify($project_id, $task_id, $event_name, array $event)
{
if ($this->isActivated($project_id)) {
$project = $this->project->getbyId($project_id);
$event['event_name'] = $event_name;
$event['author'] = $this->user->getFullname($this->session['user']);
$payload = '['.$project['name'].'] '.str_replace('"', '"', $this->projectActivity->getTitle($event)).(isset($event['task']['title']) ? ' ('.$event['task']['title'].')' : '');
if ($this->config->get('application_url')) {
$payload .= ' '.$this->config->get('application_url');
$payload .= $this->helper->url->to('task', 'show', array('task_id' => $task_id, 'project_id' => $project_id));
}
$this->sendMessage($project_id, $payload);
}
}
/**
* Send message to the XMPP server
*
* @access public
* @param integer $project_id
* @param string $payload
*/
public function sendMessage($project_id, $payload)
{
try {
$params = $this->getParameters($project_id);
$options = new Options($params['server']);
$options->setUsername($params['username']);
$options->setPassword($params['password']);
$options->setTo($params['domain']);
$options->setLogger($this->container['logger']);
$client = new Client($options);
$channel = new Presence;
$channel->setTo($params['room'])->setNickName($params['nickname']);
$client->send($channel);
$message = new Message;
$message->setMessage($payload)
->setTo($params['room'])
->setType(Message::TYPE_GROUPCHAT);
$client->send($message);
$client->disconnect();
}
catch (Exception $e) {
$this->container['logger']->error('Jabber error: '.$e->getMessage());
}
}
}
|