1: <?php
2:
3: namespace App\Api;
4:
5: /**
6: * Interface pro Webmeeting API - obsahuje metody, přes které lze Webmeeting
7: * ovládat vzdáleně z jiné aplikace.
8: *
9: * Tento interface je implementován klientem (stub WebmeetingApiClient) stejně
10: * jako serverem (skeleton WebmeetingServer).
11: *
12: * @version 20260313
13: *
14: */
15:
16: interface WebmeetingInferface {
17:
18: /** Nepřihlášen (vztah k účastníka k setkání) */
19: const ACCESS_NONE = 0;
20:
21: /** Přihlášen pouze na on-line setkání (vztah k účastníka k setkání) */
22: const ACCESS_ONLINE_ONLY = 1;
23:
24: /** Přihlášen pouze k prohlížení záznamu (vztah k účastníka k setkání) */
25: const ACCESS_RECORD_ONLY = 2;
26:
27: /** Přihlášen na on-line setkání i k prohlížení záznamu (vztah k účastníka k setkání) */
28: const ACCESS_ONLINE_AND_RECORD = 3;
29:
30:
31: /**
32: * Vytvoří nový účet (nového uživatele) ve Webmeetingu - vyhrazeno pro vnitřní
33: * použití a pro partnery. Při nastavování hesla do Webmeetingu nepoužívejte
34: * stejné heslo jako do systému, ze kterého API používáte; je na business
35: * logice, dáte-li uživateli jeho heslo nějak vědět. Pro komunikaci přes
36: * API toto heslo není potřeba, požadavky se podepisují tajemstvím klienta API
37: * (systému partnera).
38: *
39: * @param string $name Jméno nového uživatele
40: * @param string $login Přihlašovací jméno nového uživatele, musí být unikátní
41: * @param string $email string Emailová adresa klienta
42: * @param string $password string Hash hesla pro konkrétního klienta, lze použít: md5() - bude přehashováno
43: */
44: function createAccount($name, $login, $email, $password);
45:
46: /**
47: * Upraví již vytvořené setkání. Úpravy jsou omezené stejně jako při přístupu
48: * přes webové rozhraní, již započaté setkání nelze upravovat.
49: *
50: * @param string $login Login uživatele, jemuž setkání patří.
51: * @param int $meetingId ID setkání
52: * @param string $name Nový název setkání
53: * @param string $time_begin Nový čas začátku setkání ve formátu "d.m.Y H:i". Pokud se zadá prázdný (nebo v blízké minulosti), bude považován za TEĎ HNED.
54: * @param string $speaker_name Nové jméno přednášejícího
55: * @param string $description Nový popis setkání
56: * @param int $type Nový typ setkání, konstanty viz násl. tabulka. Ne všechny typy setkání musejí být k dispozici pro všechny (tarifní) programy.
57: * Parametry typů setkání mohou být v budoucnu měněny.
58: <table class="table"><tr><td>14</td><td>Rande (až 3 účastníků, 91 minut)</td></tr>
59: <tr><td>2</td><td>Porada (až 9 účastníků, 91 minut)</td></tr>
60: <tr><td>1</td><td>Místnost pro 51 (až 51 účastníků, 217 minut)</td></tr>
61: <tr><td>11</td><td>Místnost pro 101 (až 101 účastníků, 217 minut)</td></tr>
62: <tr><td>9</td><td>Místnost pro 201 (až 201 účastníků, 217 minut)</td></tr>
63: <tr><td>4</td><td>Stálá porada (až 9 účastníků kontinuálně na 1 rok)</td></tr>
64: <tr><td>5</td><td>Stálá místnost pro 51 (až 51 účastníků kontinuálně na 1 rok)</td></tr>
65: <tr><td>12</td><td>Stálá místnost pro 101 (až 101 účastníků kontinuálně na 1 rok)</td></tr></table>
66: */
67: function updateMeeting($login, $meetingId, $name, $time_begin, $speaker_name, $description, $type /*, $is_public, $public_capacity, $public_price*/);
68: /* @param $is_public int Umožnit na setkání přihlašování veřejnosti (0 ne, 1 ano, 2 ano + umístit do veřejného seznamu)
69: * @param $public_capacity int Kapacita pro veřejnost
70: * @param $public_price int Cena pro veřejnost, -1 = placený v režii pořadatele
71: */
72:
73: /**
74: * Vytvoří nové setkání (poradu, meeting nebo webinář). V odpovědi vrací
75: * ID setkání.
76: *
77: * @param string $login Login uživatele, pro kterého setkání vytváříme.
78: * @param string $name Název setkání
79: * @param string $time_begin Čas začátku setkání ve formátu "d.m.Y H:i". Pokud se zadá prázdný (nebo v blízké minulosti), bude považován za TEĎ HNED.
80: * @param string $speaker_name Jméno přednášejícího
81: * @param string $description Popis setkání
82: * @param int $type Typ setkání (konstanty viz tabulka v dokumentaci metody updateMeeting())
83: */
84: function createMeeting($login, $name, $time_begin, $speaker_name, $description, $type /*, $is_public, $public_capacity, $public_price*/);
85:
86: /**
87: * Smaže již vytvořené setkání. Smazání je omezené stejně jako při přístupu
88: * přes webové rozhraní, již započaté setkání nelze smazat.
89: *
90: * @param string $login Login uživatele, jemuž setkání patří.
91: * @param int $meetingId ID setkání
92: */
93: function deleteMeeting($login, $meetingId);
94:
95: /**
96: * Nastaví další parametry pro již vytvořené setkání.
97: *
98: * @param string $login Login uživatele, jemuž setkání patří.
99: * @param int $meetingId ID setkání
100: * @param array $options Pole s konfiguračními parametry (klíč-hodnota), povolené klíče jsou:<ul>
101: <li> auto_start_recording (začít automaticky nahrávání, aktuálně nepodporováno BBB)
102: <li> is_public (Umožnit na setkání přihlašování veřejnosti - 0 ne, 1 ano, 2 ano + umístit do veřejného seznamu),
103: <li> public_capacity (Kapacita pro veřejnost),
104: <li> public_price (Cena pro veřejnost, -1 = placený v režii pořadatele)
105: <li> is_record_public (Umožnit přihlašování veřejnosti k záznamu - 0 ne, 1 ano, 2 ano + umístit do veřejného seznamu),
106: <li> logout_url (vlastní URL po odchodu ze setkání)
107: <li> restrict_enter_multiplicity (Pouze jeden účastník na jednu pozvánku = 1, bez omezení = 0)</ul>
108: */
109: function configureMeeting($login, $meetingId, $options);
110:
111: /**
112: * Vrací seznam všech existujících setkání.
113: *
114: * @param string $login Login uživatele, jemuž setkání patří.
115: * @param ?int $meetingId Volitelné: ID setkání - je-li nastaveno, vrací pouze jedno setkání s tímto ID.
116: */
117: function getMeetings($login, $meetingId);
118:
119: /**
120: * Vytvoří účastníka - t.j. někoho, kdo se může účastnit setkání. V odpovědi
121: * vrací ID účastníka (jako $participantId).
122: *
123: * @param string $login Login uživatele, k němuž účastník patří.
124: * @param string $number registrační číslo (smí být prázdné)
125: * @param string $surname příjmení
126: * @param string $firstname jméno
127: * @param string $email platná e-mailová adresa
128: */
129: function createParticipant($login, $number, $surname, $firstname, $email);
130:
131: /**
132: * Upraví existujícího účastníka.
133: *
134: * @param string $login Login uživatele, k němuž účastník patří.
135: * @param int $participantId ID účastníka
136: * @param string $number registrační číslo, smí být prázdné
137: * @param string $surname příjmení
138: * @param string $firstname jméno
139: * @param string $email platná e-mailová adresa
140: */
141: function updateParticipant($login, $participantId, $number, $surname, $firstname, $email);
142:
143: /**
144: * Smaže existujícího účastníka.
145: *
146: * @param string $login Login uživatele, k němuž účastník patří.
147: * @param int $participant_id ID účastníka
148: */
149: function deleteParticipant($login, $participant_id);
150:
151: /**
152: * Vrací seznam všech existujících účastníků.
153: *
154: * @param string $login Login uživatele, k němuž účastnci patří.
155: * @param ?int $participant_id Volitelně: ID účastníka, je-li nastaveno, vrací pouze jednoho účastníka s tímto ID.
156: */
157: function getParticipants($login, $participant_id);
158:
159: /**
160: * Nastaví účastníkovi přístup k setkání.
161: *
162: * @param string $login Login uživatele
163: * @param int $meetingId ID setkání
164: * @param int $participantId ID účastníka
165: * @param int $access_level Nová úroveň přístupu (ACCESS_NONE, ACCESS_ONLINE_ONLY, ACCESS_RECORD_ONLY, ACCESS_ONLINE_AND_RECORD)
166: */
167: function setAccess($login, $meetingId, $participantId, $level);
168:
169: /**
170: * Zjistí aktuální nastavení úrovně přístupu k setkání (pro jednoho zvoleného a nebo pro všechny
171: * přihlášené účastníky).
172: *
173: * @param string $login Login uživatele
174: * @param int $meetingId ID setkání
175: * @param int $participantId ID účastníka - volitelné - může být null, pak vrací všechny účastníky s jiným právem než ACCESS_NONE
176: * @return array Jeden tiket (pro zadaný atribut $participantId) nebo pole tiketů indexované participantId (jinak), tiket obsahuje
177: * "participantId", "meetingId", "isAllowedOnline" (povolení vstupu online), "isAllowedRecord" (povolení vstupu k záznamu),
178: * "token", "onlineInvitationSent" a "recordInvitationSent" (čas odeslání pozvánek)
179: */
180: function getAccess($login, $meetingId, $participantId);
181:
182: /**
183: * Naimportuje účastníky a dle požadavku je přiřadí k existujícímu setkání. Pokud už identický účastník
184: * existuje, není vytvářen duplicitně. Pokud má už účastník nějaká práva k setkání, úroveň přístupu
185: * k setkání, která bude účastníkům je mu pouze přidávána, ale nikdy ubírána.
186: *
187: * @param string $login Login uživatele, jemuž setkání patří.
188: * @param int $meetingId ID setkání, může být null, v takovém případě jsou účastníci pouze
189: * naimportování, ale nejsou přiřazeni k žádnému setkání
190: * @param array $participants Pole účastníků, každá položka pole musí být asociativní pole s klíči
191: * 'number' (reg. číslo, smí být prázdné), 'surname' (příjmení),
192: * 'firstname' (jméno) a 'email' (musí být platnou e-mailovou adresou).
193: * @param int $access_level Úroveň přístupu k setkání, která bude účastníkům přidána (ACCESS_ONLINE_ONLY, ACCESS_RECORD_ONLY, ACCESS_ONLINE_AND_RECORD)
194: * @return array Pole, kde klíčem je číslo záznamu ze vstupu $participants a hodnotou ID vloženého (nebo již existujícího) účastníka
195: */
196: function importParticipants($login, $meetingId, $participants, $access_level);
197:
198: /**
199: * Odebere všechny přístupy k setkání s daným $meetingId - myšleno jako reset
200: * přihlášených účastníků před novým importParticipants()
201: * @param string $login Login uživatele, jemuž setkání patří.
202: * @param int $meetingId ID setkání
203: */
204: function setMeetingEmpty($login, $meetingId);
205:
206: /**
207: * Rozešle jednorázově pozvánky k setkání (s defaultním textem pozvánky).
208: * @param $login string Login uživatele, jemuž setkání patří.
209: * @param int $meetingId ID setkání
210: * @param int $mode Druh pozvánek: 0 pro pozvánky na online, 1 pro pozvánky k záznamu
211: * @param int $filter Filtr (0 = všem, 1 = jen dosud nepozvaným)
212: * @param string $body Tělo pozvánky, musí obsahivat /%URL%/ pro vložení odkazu pro vstup. Alternativně, pokud je $body prázdné, použije WebMeeting standardní text pozvánky.
213: */
214: function sendInvitations($login, $meetingId, $mode, $filter, $body);
215:
216: /**
217: * Rozešle jednorázově pozvánky k setkání (s defaultním textem pozvánky).
218: * @param string $login Login uživatele, jemuž setkání patří.
219: * @param int $meetingId ID setkání
220: * @param int $mode Druh pozvánek: 0 pro pozvánky na online, 1 pro pozvánky k záznamu
221: * @param int $filter Filtr (0 = všem, 1 = jen dosud nepozvaným)
222: * @param string $body Tělo pozvánky, musí obsahivat /%URL%/ pro vložení odkazu pro vstup. Alternativně, pokud je $body prázdné, použije Webmeeting standardní text pozvánky.
223: * @param string $senderName Jméno odesílatele nebo null pro výchozí hodnotu
224: * @param string $replyTo Email odesílatele nebo null pro výchozí hodnotu
225: * @param string $subject Předmět zprávy nebo null pro výchozí hodnotu
226: */
227: function sendInvitationsExt($login, $meetingId, $mode, $filter, $body, $senderName, $replyTo, $subject);
228:
229: /**
230: * Vrátí URL vstupní stránky pro moderátora a vstupní kód pro přihlášení moderátora k danému setkání, jako pole
231: * s klíči "url" a "moderatorCode".
232: *
233: * @param string $login Login uživatele, jemuž setkání patří.
234: * @param int $meetingId ID setkání
235: */
236: function getModeratorAccess($login, $meetingId);
237:
238: /**
239: * Vrátí přímo URL místnosti pro moderátora k danému setkání.
240: *
241: * @param string $login Login uživatele, jemuž setkání patří.
242: * @param int $meetingId ID setkání
243: * @param string $moderatorName Jméno moderátora
244: * @param bool $html5client Použít html5 klienta?, výchozí je true
245: * @return string URL
246: */
247: function getModeratorEnterURL($login, $meetingId, $moderatorName, $html5client);
248:
249: /**
250: * Vrátí přímo URL místnosti pro účastníka k danému setkání.
251: *
252: * @param string $login Login uživatele, jemuž setkání patří.
253: * @param int $meetingId ID setkání
254: * @param int $participantId ID účastníka
255: * @param bool $html5client Použít html5 klienta?, výchozí je true
256: * @return string URL
257: */
258: function getParticipantEnterURL($login, $meetingId, $participantId, $html5client);
259:
260: /**
261: * Provede import účastníků (pokud účastník neexistuje, vytvoří se, pokud
262: * není k setkání přiřazen, přiřadí se) a rovnou vrátí unikátní URL místnosti
263: * pro vstup těchto účastníků k danému setkání.
264: * @param string $login Login uživatele, jemuž setkání patří.
265: * @param int $meetingId ID setkání
266: * @param array $participants účastník - musí být asociativní pole s klíči
267: * 'number' (reg. číslo, smí být prázdné), 'surname' (příjmení),
268: * 'firstname' (jméno) a 'email' (musí být platnou e-mailovou adresou).
269: * @param int $access_level Úroveň přístupu (ACCESS_NONE, ACCESS_ONLINE_ONLY, ACCESS_RECORD_ONLY, ACCESS_ONLINE_AND_RECORD)
270: * @param bool $html5client Použít html5 klienta?
271: * @return array Pole, kde klíčem je číslo záznamu ze vstupu $participants a hodnotou URL pro vstup účastníka na setkání
272: */
273: function importParticipantAndGetEnterURL($login, $meetingId, $participants, $access_level, $html5client);
274:
275: /**
276: * Vrátí seznam nahrávek k danému setkání vč. odkazů pro jejich přehrání.
277: *
278: * @param string $login Login uživatele, jemuž setkání patří.
279: * @param int $meetingId ID setkání
280: * @return array Pole s informacemi o nahrávkách (jedno setkání může mít více nahrávek), indexováno kódem nahrávky,
281: * obsahuje hodnoty indexované url (odkaz na nahrávku), length (délka v minutách) a startTime (čas začátku ve formátu 06.11.2019 12:59:56).
282: */
283: function getRecordings($login, $meetingId);
284:
285: /**
286: * Vrátí výpis ze zaznamenaného chatu k danému setkání. Podmínkou je, že pro setkání byl pořízen záznam.
287: *
288: * @param string $login Login uživatele, jemuž setkání patří.
289: * @param int $meetingId ID setkání
290: * @return array Pole obsahující záznamy chatu k jednotlivým nahrávkám (jedno setkání může mít více nahrávek),
291: * v první úrovni indexováno kódem nahrávky, ve druhé úrovni jednotlivé zprávy indexovány od 0,
292: * v poslední úrovni obsahuje hodnoty indexované time (čas zprávy od začátku nahrávky), name (jméno posluchače) a message (text vlastní zrpávy).
293: */
294: function getChatRecordings($login, $meetingId);
295:
296:
297: /**
298: * Vrátí informace o přítomnosti účastníků na živém setkání.
299: * @param int $meetingId ID setkání
300: * @param ?int $participantId ID účastníka (je-li požadována informace jen o jednom účastníkovi) nebo NULL (je-li požadována informace o všech účastnících)
301: * @return array Návštěvnost živého setkání pro jednotlivé účastníky - pole obsahuje položky indexované 'participant_id', 'participant_name' a 'presence',
302: * prezence je indexovaná časem (datetime) a obsahuje binární (0, 1) položky 'is_moderator' (je moderátorem), 'is_presenter' (je přednášejícím),
303: * 'is_listening' (poslouchal), 'has_joined_voice' (aktivoval mikrofon) a 'has_video' (aktivoval webkameru). Modarátoři mají participant_id NULLové.
304: * Řádky pro účastníky, kteří na setkání vůbec nebyli (hypotetické prázdné presence), se nevracejí. Při použití parametru $participantId je
305: * návratová hodnota (nanejvýš) jednoprvkové pole.
306: */
307: function getPresence($login, $meetingId, $participantId = null);
308:
309:
310: /**
311: * Vrátí informace o shlédnutí záznamu ze setkání jednotlivými účastníky.
312: * @param int $meetingId ID setkání
313: * @param ?int $participantId ID účastníka (je-li požadována informace jen o jednom účastníkovi) nebo NULL (je-li požadována informace o všech účastnících)
314: * @return array Návštěvnost záznamu ze setkání webináře pro jednotlivé účastníky - pole obsahuje položky indexované 'participant_id' a 'has_played' (1,
315: * pokud si přehrál záznam). Neřešíme už přitom, jak dlouho měl účastník záznam otevřený, ani zda, kolikrát nebo které části záznamu v rámci
316: * tohoto otevření shlédnul. Pokud je k setkání záznamů více, neřešíme, který z nich otevřel. Při použití parametru $participantId je návratová
317: * hodnota (nanejvýš) jednoprvkové pole. Řádky pro účastníky, kteří záznam vůbec neviděli (hypotetické has_played == false), se nevracejí.
318: * Návratová hodnota může být v budoucnu zpětně kompatibilním způsobem rozšířena o další položky.
319: */
320: function getPlaybackPresence($login, $meetingId, $participantId = null);
321:
322:
323:
324: /**
325: * Zjistí, zda existuje uživatel s daným loginem - vyhrazeno pro vnitřní
326: * použití a pro partnery.
327: */
328: function isLoginUsed($login);
329:
330:
331: /**
332: * Přenastaví uživateli placený program - vyhrazeno pro vnitřní použití a pro partnery.
333: *
334: <ul>
335: <li> pokud login neexistuje, skončí s chybou,
336: <li> pokud je novy program $accessLevel stejný jako starý program, prodlouží tento program o $days dni
337: <li> pokud je novy program $accessLevel jiný než starý program (a nebo pokud starý program už vypršel), nastaví nový program od teď na $days dni
338: </ul>
339: */
340: function setAccessLevel($login, $accessLevel, $days);
341:
342:
343:
344: } // CLASS