Non puoi selezionare più di 25 argomenti
Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
355 righe
14 KiB
355 righe
14 KiB
<? |
|
use \Firebase\JWT\JWT; |
|
class zoomMtg |
|
{ |
|
private $token; |
|
private $hosts; |
|
private $ente; |
|
public function __construct() |
|
{ |
|
if (isset($_SESSION["ente"])) { |
|
global $config; |
|
$curl = curl_init(); |
|
curl_setopt($curl, CURLOPT_URL, "https://api.zoom.us/oauth/token"); |
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); |
|
curl_setopt($curl, CURLOPT_TIMEOUT, 0); |
|
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); |
|
curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); |
|
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST"); |
|
$auth = base64_encode($config["zoom-OAuth-CLIENTID"].":".$config["zoom-OAuth-CLIENTSECRET"]); |
|
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded","Authorization: Basic {$auth}")); |
|
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query([ |
|
"grant_type" => "account_credentials", |
|
"account_id" => $config["zoom-OAuth-ACCOUNTID"] |
|
])); |
|
$risposta = curl_exec($curl); |
|
curl_close($curl); |
|
if (!empty($risposta)) { |
|
$risposta = json_decode($risposta,true); |
|
if (!empty($risposta["access_token"])) { |
|
$success = true; |
|
$this->token = $risposta["access_token"]; |
|
$this->hosts = self::getHosts(); |
|
$this->ente = $_SESSION["ente"]->getInfo(); |
|
} |
|
} |
|
} |
|
if (empty($success)) { |
|
return false; |
|
} |
|
} |
|
|
|
public static function getHosts($onlyID= true) { |
|
if (isset($_SESSION["ente"])) { |
|
global $pdo; |
|
$hosts = $pdo->go("SELECT * FROM b_hosts WHERE provider = 'zoom' AND codice_ente = :ente",[":ente"=>$_SESSION["ente"]->codice]); |
|
if ($hosts->rowCount() > 0) { |
|
$hosts = $hosts->fetchAll(PDO::FETCH_ASSOC); |
|
if ($onlyID) { |
|
$tmp = []; |
|
foreach($hosts AS $host) { |
|
$tmp[] = $host["id"]; |
|
} |
|
$hosts = $tmp; |
|
} |
|
return $hosts; |
|
} |
|
} |
|
return false; |
|
} |
|
|
|
public function getMeetingDetails($id) { |
|
$curl = curl_init(); |
|
curl_setopt($curl, CURLOPT_URL, "https://api.zoom.us/v2/meetings/{$id}"); |
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); |
|
curl_setopt($curl, CURLOPT_TIMEOUT, 0); |
|
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); |
|
curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); |
|
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "GET"); |
|
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json","Authorization: Bearer {$this->token}")); |
|
$risposta = curl_exec($curl); |
|
curl_close($curl); |
|
if (!empty($risposta)) { |
|
$risposta = json_decode($risposta,true); |
|
if (!empty($risposta["id"])) { |
|
return $risposta; |
|
} |
|
} |
|
return false; |
|
} |
|
|
|
public function getPastMeeting($id) { |
|
$curl = curl_init(); |
|
curl_setopt($curl, CURLOPT_URL, "https://api.zoom.us/v2/past_meetings/{$id}"); |
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); |
|
curl_setopt($curl, CURLOPT_TIMEOUT, 0); |
|
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); |
|
curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); |
|
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "GET"); |
|
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json","Authorization: Bearer {$this->token}")); |
|
$risposta = curl_exec($curl); |
|
curl_close($curl); |
|
if (!empty($risposta)) { |
|
$risposta = json_decode($risposta,true); |
|
if (!empty($risposta["id"])) { |
|
if ($risposta["participants_count"] > 0) { |
|
$curl = curl_init(); |
|
curl_setopt($curl, CURLOPT_URL, "https://api.zoom.us/v2/past_meetings/{$id}/participants"); |
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); |
|
curl_setopt($curl, CURLOPT_TIMEOUT, 0); |
|
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); |
|
curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); |
|
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "GET"); |
|
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json","Authorization: Bearer {$this->token}")); |
|
$participants = curl_exec($curl); |
|
curl_close($curl); |
|
if (!empty($participants)) { |
|
$participants = json_decode($participants,true); |
|
if (!empty($participants["participants"])) { |
|
$risposta["participants"] = $participants["participants"]; |
|
} |
|
} |
|
} |
|
return $risposta; |
|
} |
|
} |
|
return false; |
|
} |
|
|
|
public function getMeetingFromDB($sezione,$codice_elemento,$sub_elemento,$contesto,$codice_meeting=false) { |
|
global $pdo; |
|
$bind = [":sezione"=>$sezione,":codice_elemento"=>$codice_elemento,":sub_elemento"=>$sub_elemento,":contesto"=>$contesto,"ente"=>$this->ente["codice"]]; |
|
$sql = "SELECT * FROM b_conference WHERE provider = 'zoom' AND codice_ente = :ente AND sezione = :sezione AND codice_elemento = :codice_elemento AND sub_elemento = :sub_elemento AND contesto = :contesto "; |
|
if (!empty($codice_meeting)) { |
|
$bind[":codice"] = $codice_meeting; |
|
$sql .= " AND codice = :codice"; |
|
} |
|
$sql .= " ORDER BY codice DESC LIMIT 0,1"; |
|
$meetings = $pdo->go($sql,$bind); |
|
if ($meetings->rowCount() > 0) { return $meetings->fetch(PDO::FETCH_ASSOC); } |
|
return false; |
|
} |
|
|
|
|
|
public function createUser() { |
|
global $config; |
|
$body = []; |
|
$body["action"] ="custCreate"; |
|
$body["user_info"] = [ |
|
"first_name" => "Host", |
|
"last_name" => substr($this->ente["denominazione"], 0, 20), |
|
"email" => time()."-".$this->ente["codice"]."@studioamica.it", |
|
"password" => $config["zoom-JWT-APIKEY"], |
|
"type" => (($_SESSION["demoEnv"]) ? 1 : 2) |
|
]; |
|
$body = json_encode($body); |
|
$curl = curl_init(); |
|
global $pdo; |
|
curl_setopt_array($curl, array( |
|
CURLOPT_URL => 'https://api.zoom.us/v2/users', |
|
CURLOPT_RETURNTRANSFER => true, |
|
CURLOPT_ENCODING => '', |
|
CURLOPT_MAXREDIRS => 10, |
|
CURLOPT_TIMEOUT => 0, |
|
CURLOPT_FOLLOWLOCATION => true, |
|
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, |
|
CURLOPT_CUSTOMREQUEST => 'POST', |
|
CURLOPT_POSTFIELDS => $body, |
|
CURLOPT_HTTPHEADER => array( |
|
'Content-Type: application/json', |
|
'Accept: application/json', |
|
"Authorization: Bearer {$this->token}" |
|
), |
|
)); |
|
$risposta = $response = curl_exec($curl); |
|
curl_close($curl); |
|
if (!empty($risposta)) { |
|
$risposta = json_decode($risposta,TRUE); |
|
if (!empty($risposta["id"])) { |
|
$salva = new salva($pdo); |
|
$salva->debug = false; |
|
|
|
$salva->nome_tabella = "b_hosts"; |
|
$salva->operazione = "INSERT"; |
|
$salva->oggetto = ["id"=>$risposta["email"],"codice_ente"=>$this->ente["codice"],"other"=>$response]; |
|
$salva->save(); |
|
if (!$_SESSION["demoEnv"]) { |
|
$this->allowLiveStreaming($risposta["email"]); |
|
} |
|
return true; |
|
} |
|
} |
|
return false; |
|
} |
|
|
|
public function getInfoLicenze() { |
|
$curl = curl_init(); |
|
curl_setopt($curl, CURLOPT_URL, "https://api.zoom.us/v2/accounts/me/plans/usage"); |
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); |
|
curl_setopt($curl, CURLOPT_TIMEOUT, 0); |
|
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); |
|
curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); |
|
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "GET"); |
|
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json","Authorization: Bearer {$this->token}")); |
|
$risposta = curl_exec($curl); |
|
curl_close($curl); |
|
if (!empty($risposta)) { |
|
$risposta = json_decode($risposta,true); |
|
return $risposta; |
|
} |
|
return false; |
|
} |
|
|
|
public function allowLiveStreaming($id) { |
|
$body = []; |
|
$body["members"] = [["email"=>$id]]; |
|
$body = json_encode($body); |
|
$curl = curl_init(); |
|
curl_setopt($curl, CURLOPT_URL, "https://api.zoom.us/v2/groups/n7MPX8PZQzaKFY9YPekQ0w/members"); |
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); |
|
curl_setopt($curl, CURLOPT_TIMEOUT, 0); |
|
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); |
|
curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); |
|
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST"); |
|
curl_setopt($curl, CURLOPT_POSTFIELDS, $body); |
|
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json","Authorization: Bearer {$this->token}")); |
|
curl_exec($curl); |
|
curl_close($curl); |
|
} |
|
|
|
public function getSettings($id) { |
|
$curl = curl_init(); |
|
curl_setopt($curl, CURLOPT_URL, "https://api.zoom.us/v2/users/{$id}/settings"); |
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); |
|
curl_setopt($curl, CURLOPT_TIMEOUT, 0); |
|
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); |
|
curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); |
|
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "GET"); |
|
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json","Authorization: Bearer {$this->token}")); |
|
curl_exec($curl); |
|
curl_close($curl); |
|
} |
|
|
|
public function deleteUser($codice) { |
|
$hosts = self::getHosts(false); |
|
foreach($hosts AS $tmp) { |
|
if ($tmp["codice"] == $codice) { |
|
$host = json_decode($tmp["other"],true); |
|
break; |
|
} |
|
} |
|
if (!empty($host)) { |
|
$curl = curl_init(); |
|
global $pdo; |
|
curl_setopt($curl, CURLOPT_URL, "https://api.zoom.us/v2/users/{$host["id"]}?action=delete"); |
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); |
|
curl_setopt($curl, CURLOPT_TIMEOUT, 0); |
|
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); |
|
curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); |
|
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE"); |
|
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json","Authorization: Bearer {$this->token}")); |
|
$risposta = curl_exec($curl); |
|
curl_close($curl); |
|
if (empty($risposta)) { |
|
$pdo->go("DELETE FROM b_hosts WHERE codice = :codice",[":codice"=>$codice]); |
|
return true; |
|
} |
|
} |
|
return false; |
|
} |
|
|
|
public function createMeeting($sezione,$codice_elemento,$sub_elemento,$contesto) { |
|
$body = []; |
|
$body["type"] = 1; |
|
$body["topic"] = "{$sezione} - #{$codice_elemento} - {$contesto}"; |
|
$body["password"] = ""; // randomPassword(10); TODO: IMPLEMENTARE PASSWORD |
|
$body["timezone"] = "Europe/Rome"; |
|
$body["settings"] = [ |
|
"audio" => "voip", |
|
"auto_recording" => "local", |
|
"waiting_room" => true, |
|
"contact_name" => $this->ente["denominazione"], |
|
"contact_email" => $this->ente["pec"], |
|
"approval_type" => 1 |
|
]; |
|
$body = json_encode($body); |
|
$curl = curl_init(); |
|
global $pdo; |
|
$check = $pdo->prepare("SELECT response FROM b_conference WHERE provider = 'zoom' AND codice_ente = :ente AND host = :host AND DATE(timestamp) = curdate() ORDER BY codice DESC LIMIT 0,1"); |
|
$check->bindValue(":ente",$this->ente["codice"]); |
|
foreach($this->hosts AS $tmpHost) { |
|
$check->bindValue(":host",$tmpHost); |
|
$check->execute(); |
|
if ($check->rowCount() > 0) { |
|
$tmpResponse = $check->fetch(PDO::FETCH_ASSOC); |
|
$meeting = json_decode($tmpResponse["response"],true); |
|
$status = $this->getMeetingDetails($meeting["id"]); |
|
if (empty($status["status"]) || $status["status"] == "finished") { |
|
$host = $tmpHost; |
|
} |
|
} else { |
|
$host = $tmpHost; |
|
} |
|
if (!empty($host)) { break; } |
|
} |
|
if (!empty($host)) { |
|
curl_setopt($curl, CURLOPT_URL, "https://api.zoom.us/v2/users/{$host}/meetings"); |
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); |
|
curl_setopt($curl, CURLOPT_TIMEOUT, 0); |
|
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); |
|
curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); |
|
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST"); |
|
curl_setopt($curl, CURLOPT_POSTFIELDS, $body); |
|
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json","Authorization: Bearer {$this->token}")); |
|
|
|
$risposta = $response = curl_exec($curl); |
|
curl_close($curl); |
|
if (!empty($risposta)) { |
|
$risposta = json_decode($risposta,TRUE); |
|
if (!empty($risposta["uuid"])) { |
|
$salva = new salva($pdo); |
|
$salva->debug = false; |
|
|
|
$salva->nome_tabella = "b_conference"; |
|
$salva->operazione = "INSERT"; |
|
$salva->oggetto = ["sezione"=>$sezione,"codice_ente"=>$this->ente["codice"],"provider"=>"zoom","codice_elemento"=>$codice_elemento,"sub_elemento"=>$sub_elemento,"contesto"=>$contesto,"response"=>$response,"host"=>$host]; |
|
$salva->save(); |
|
return $risposta; |
|
} |
|
} |
|
} |
|
return false; |
|
} |
|
|
|
public function deleteMeeting($id) { |
|
$curl = curl_init(); |
|
curl_setopt($curl, CURLOPT_URL, "https://api.zoom.us/v2/meetings/{$id}"); |
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); |
|
curl_setopt($curl, CURLOPT_TIMEOUT, 0); |
|
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); |
|
curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); |
|
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE"); |
|
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json","Authorization: Bearer {$this->token}")); |
|
$risposta = curl_exec($curl); |
|
curl_close($curl); |
|
if (curl_getinfo($curl, CURLINFO_HTTP_CODE) == 204) { return true; } |
|
return false; |
|
} |
|
|
|
public function printLog($id) { |
|
$bind = []; |
|
$bind[":codice"] = $id; |
|
global $pdo; |
|
$risultato_conference = $pdo->go("SELECT * FROM b_conference WHERE provider = 'zoom' AND codice = :codice ",$bind); |
|
if ($risultato_conference->rowCount() > 0) { |
|
$zoomMeeting = $risultato_conference->fetch(PDO::FETCH_ASSOC); |
|
$response = json_decode($zoomMeeting["response"],true); |
|
$info = $this->getPastMeeting($response["uuid"]); |
|
if (!empty($info)) { |
|
include(__DIR__."/log.php"); |
|
} |
|
} |
|
} |
|
} |
|
|
|
?>
|