1 | Seguem as alterações necessárias para transformar um telefone em um link clicktocall : |
---|
2 | |
---|
3 | 1 - Verificando se usuario logado está com recurso clicktocall liberado (PHP): |
---|
4 | Obs.: $voip_enabled é o boolean que contém essa informação. |
---|
5 | |
---|
6 | //Begin: Enable/Disable VoIP Service -> Voip Server Config |
---|
7 | $voip_enabled = false; |
---|
8 | $voip_groups = array(); |
---|
9 | if($GLOBALS['phpgw_info']['server']['voip_groups']) { |
---|
10 | $emailVoip = false; |
---|
11 | foreach(explode(",",$GLOBALS['phpgw_info']['server']['voip_groups']) as $i => $voip_group){ |
---|
12 | $a_voip = explode(";",$voip_group); |
---|
13 | $voip_groups[] = $a_voip[1]; |
---|
14 | } |
---|
15 | foreach($GLOBALS['phpgw']->accounts->membership() as $idx => $group){ |
---|
16 | if(array_search($group['account_name'],$voip_groups) !== FALSE){ |
---|
17 | $voip_enabled = true; |
---|
18 | break; |
---|
19 | } |
---|
20 | } |
---|
21 | } |
---|
22 | //End: Enable/Disable VoIP Service -> Voip Server Config |
---|
23 | |
---|
24 | |
---|
25 | 2- Montando link clicktocall (Javascript): |
---|
26 | Obs.: phoneUser é a variável que contém o telefone de destino. Vira uma tag HREF com link clicktocall, se habilitado. |
---|
27 | |
---|
28 | // Verifica se o usuário tem o recurso VoIP ativado e se tem telefone cadastrado no Expresso |
---|
29 | if(preferences.voip_enabled && phoneUser) { |
---|
30 | phoneUser = "<a title='Discar para esse telefone' href='#' onclick='javascript:connectVoip(\'"+phoneUser+"\', \'com\')'>"+phoneUser+"</a>"; |
---|
31 | } |
---|
32 | |
---|
33 | 3 - Implementando função connectVoiP (Javascript) |
---|
34 | |
---|
35 | var connectVoip = function (phoneUser, typePhone){ |
---|
36 | var handler_connectVoip = function(data){ |
---|
37 | if(!data) { |
---|
38 | alert(get_lang("Error contacting VoIP server.")); |
---|
39 | } |
---|
40 | else{ |
---|
41 | alert(get_lang("Requesting a VoIP call")+":\n"+data); |
---|
42 | } |
---|
43 | } |
---|
44 | // HTTPRequest |
---|
45 | cExecute ("$this.functions.callVoipConnect&to="+phoneUser+"&typePhone="+typePhone, handler_connectVoip); |
---|
46 | } |
---|
47 | |
---|
48 | 4 - Implementando classe PHP com método callVoipConnect: |
---|
49 | |
---|
50 | class Functions{ |
---|
51 | |
---|
52 | function CallVoipConnect($params){ |
---|
53 | $fromNumber = $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['telephone_number']; |
---|
54 | if(!$fromNumber) |
---|
55 | return false; |
---|
56 | $fromNumber = substr($fromNumber,strlen($fromNumber) - 4, strlen($fromNumber) - 1); |
---|
57 | $toNumber = $params['to'] ? substr($params['to'],strlen($params['to']) - 4, strlen($params['to']) - 1) : 0; |
---|
58 | |
---|
59 | $voipServer = $_SESSION['phpgw_info']['expressomail']['server']['voip_server']; |
---|
60 | $voipUrl = $_SESSION['phpgw_info']['expressomail']['server']['voip_url']; |
---|
61 | $voipPort = $_SESSION['phpgw_info']['expressomail']['server']['voip_port']; |
---|
62 | |
---|
63 | if(!$voipServer || !$voipUrl || !$voipPort) |
---|
64 | return false; |
---|
65 | $url = "http://".$voipServer.":".$voipPort.$voipUrl."?magic=1333&acao=liga&ramal=".$fromNumber."&numero=".$toNumber; |
---|
66 | $sMethod = 'GET '; |
---|
67 | $crlf = "\r\n"; |
---|
68 | $sRequest = " HTTP/1.1" . $crlf; |
---|
69 | $sRequest .= "Host: localhost" . $crlf; |
---|
70 | $sRequest .= "Accept: */* " . $crlf; |
---|
71 | $sRequest .= "Connection: Close" . $crlf . $crlf; |
---|
72 | $sRequest = $sMethod . $url . $sRequest; |
---|
73 | $sockHttp = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); |
---|
74 | if (!$sockHttp) { |
---|
75 | return false; |
---|
76 | } |
---|
77 | $resSocketConnect = socket_connect($sockHttp, $voipServer, $voipPort); |
---|
78 | if (!$resSocketConnect) { |
---|
79 | return false; |
---|
80 | } |
---|
81 | $resSocketWrite = socket_write($sockHttp, $sRequest, strlen($sRequest)); |
---|
82 | if (!$resSocketWrite) { |
---|
83 | return false; |
---|
84 | } |
---|
85 | $sResponse = ''; |
---|
86 | while ($sRead = socket_read($sockHttp, 512)) { |
---|
87 | $sResponse .= $sRead; |
---|
88 | } |
---|
89 | |
---|
90 | socket_close($sockHttp); |
---|
91 | $pos = strpos($sResponse, $crlf . $crlf); |
---|
92 | return substr($sResponse, $pos + 2 * strlen($crlf)); |
---|
93 | } |
---|
94 | } |
---|
95 | |
---|
96 | IMPORTANTE |
---|
97 | |
---|
98 | Para que o método CallVoipConnect (AJAX) funcione corretamente, é |
---|
99 | necessário popular alguns valores do $GLOBALS para $_SESSION na index.php |
---|
100 | ou em outro PHP usado para montar a página que terá o "Clicktocall" . São eles: |
---|
101 | |
---|
102 | $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['telephone_number'] = $GLOBALS['phpgw_info']['user']['telephonenumber']; |
---|
103 | $_SESSION['phpgw_info']['expressomail']['server'] = $GLOBALS['phpgw_info']['server']; |
---|
104 | |
---|
105 | |
---|
106 | As variáveis da $_SESSION usadas são do ExpressoMail, pois já tem lá atualmente. |
---|