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 20201109
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> logout_url (vlastní URL po odchodu ze setkání)
106: <li> restrict_enter_multiplicity (Pouze jeden účastník na jednu pozvánku = 1, bez omezení = 0)</ul>
107: */
108: function configureMeeting($login, $meetingId, $options);
109:
110: /**
111: * Vrací seznam všech existujících setkání.
112: *
113: * @param string $login Login uživatele, jemuž setkání patří.
114: * @param ?int $meetingId Volitelné: ID setkání - je-li nastaveno, vrací pouze jedno setkání s tímto ID.
115: */
116: function getMeetings($login, $meetingId);
117:
118: /**
119: * Vytvoří účastníka - t.j. někoho, kdo se může účastnit setkání. V odpovědi
120: * vrací ID účastníka (jako $participantId).
121: *
122: * @param string $login Login uživatele, k němuž účastník patří.
123: * @param string $number registrační číslo (smí být prázdné)
124: * @param string $surname příjmení
125: * @param string $firstname jméno
126: * @param string $email platná e-mailová adresa
127: */
128: function createParticipant($login, $number, $surname, $firstname, $email);
129:
130: /**
131: * Upraví existujícího účastníka.
132: *
133: * @param string $login Login uživatele, k němuž účastník patří.
134: * @param int $participantId ID účastníka
135: * @param string $number registrační číslo, smí být prázdné
136: * @param string $surname příjmení
137: * @param string $firstname jméno
138: * @param string $email platná e-mailová adresa
139: */
140: function updateParticipant($login, $participantId, $number, $surname, $firstname, $email);
141:
142: /**
143: * Smaže existujícího účastníka.
144: *
145: * @param string $login Login uživatele, k němuž účastník patří.
146: * @param int $participant_id ID účastníka
147: */
148: function deleteParticipant($login, $participant_id);
149:
150: /**
151: * Vrací seznam všech existujících účastníků.
152: *
153: * @param string $login Login uživatele, k němuž účastnci patří.
154: * @param ?int $participant_id Volitelně: ID účastníka, je-li nastaveno, vrací pouze jednoho účastníka s tímto ID.
155: */
156: function getParticipants($login, $participant_id);
157:
158: /**
159: * Nastaví účastníkovi přístup k setkání.
160: *
161: * @param string $login Login uživatele
162: * @param int $meetingId ID setkání
163: * @param int $participantId ID účastníka
164: * @param int $access_level Nová úroveň přístupu (ACCESS_NONE, ACCESS_ONLINE_ONLY, ACCESS_RECORD_ONLY, ACCESS_ONLINE_AND_RECORD)
165: */
166: function setAccess($login, $meetingId, $participantId, $level);
167:
168: /**
169: * Zjistí aktuální nastavení úrovně přístupu k setkání (pro jednoho zvoleného a nebo pro všechny
170: * přihlášené účastníky).
171: *
172: * @param string $login Login uživatele
173: * @param int $meetingId ID setkání
174: * @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
175: * @return array Jeden tiket (pro zadaný atribut $participantId) nebo pole tiketů indexované participantId (jinak), tiket obsahuje
176: * "participantId", "meetingId", "isAllowedOnline" (povolení vstupu online), "isAllowedRecord" (povolení vstupu k záznamu),
177: * "token", "onlineInvitationSent" a "recordInvitationSent" (čas odeslání pozvánek)
178: */
179: function getAccess($login, $meetingId, $participantId);
180:
181: /**
182: * Naimportuje účastníky a dle požadavku je přiřadí k existujícímu setkání. Pokud už identický účastník
183: * existuje, není vytvářen duplicitně. Pokud má už účastník nějaká práva k setkání, úroveň přístupu
184: * k setkání, která bude účastníkům je mu pouze přidávána, ale nikdy ubírána.
185: *
186: * @param string $login Login uživatele, jemuž setkání patří.
187: * @param int $meetingId ID setkání, může být null, v takovém případě jsou účastníci pouze
188: * naimportování, ale nejsou přiřazeni k žádnému setkání
189: * @param array $participants Pole účastníků, každá položka pole musí být asociativní pole s klíči
190: * 'number' (reg. číslo, smí být prázdné), 'surname' (příjmení),
191: * 'firstname' (jméno) a 'email' (musí být platnou e-mailovou adresou).
192: * @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)
193: * @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
194: */
195: function importParticipants($login, $meetingId, $participants, $access_level);
196:
197: /**
198: * Odebere všechny přístupy k setkání s daným $meetingId - myšleno jako reset
199: * přihlášených účastníků před novým importParticipants()
200: * @param string $login Login uživatele, jemuž setkání patří.
201: * @param int $meetingId ID setkání
202: */
203: function setMeetingEmpty($login, $meetingId);
204:
205: /**
206: * Rozešle jednorázově pozvánky k setkání (s defaultním textem pozvánky).
207: * @param $login string Login uživatele, jemuž setkání patří.
208: * @param int $meetingId ID setkání
209: * @param int $mode Druh pozvánek: 0 pro pozvánky na online, 1 pro pozvánky k záznamu
210: * @param int $filter Filtr (0 = všem, 1 = jen dosud nepozvaným)
211: * @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.
212: */
213: function sendInvitations($login, $meetingId, $mode, $filter, $body);
214:
215: /**
216: * Rozešle jednorázově pozvánky k setkání (s defaultním textem pozvánky).
217: * @param string $login Login uživatele, jemuž setkání patří.
218: * @param int $meetingId ID setkání
219: * @param int $mode Druh pozvánek: 0 pro pozvánky na online, 1 pro pozvánky k záznamu
220: * @param int $filter Filtr (0 = všem, 1 = jen dosud nepozvaným)
221: * @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.
222: * @param string $senderName Jméno odesílatele nebo null pro výchozí hodnotu
223: * @param string $replyTo Email odesílatele nebo null pro výchozí hodnotu
224: * @param string $subject Předmět zprávy nebo null pro výchozí hodnotu
225: */
226: function sendInvitationsExt($login, $meetingId, $mode, $filter, $body, $senderName, $replyTo, $subject);
227:
228: /**
229: * 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
230: * s klíči "url" a "moderatorCode".
231: *
232: * @param string $login Login uživatele, jemuž setkání patří.
233: * @param int $meetingId ID setkání
234: */
235: function getModeratorAccess($login, $meetingId);
236:
237: /**
238: * Vrátí přímo URL místnosti pro moderátora k danému setkání.
239: *
240: * @param string $login Login uživatele, jemuž setkání patří.
241: * @param int $meetingId ID setkání
242: * @param string $moderatorName Jméno moderátora
243: * @param bool $html5client Použít html5 klienta?, výchozí je true
244: * @return string URL
245: */
246: function getModeratorEnterURL($login, $meetingId, $moderatorName, $html5client);
247:
248: /**
249: * Vrátí přímo URL místnosti pro účastníka k danému setkání.
250: *
251: * @param string $login Login uživatele, jemuž setkání patří.
252: * @param int $meetingId ID setkání
253: * @param int $participantId ID účastníka
254: * @param bool $html5client Použít html5 klienta?, výchozí je true
255: * @return string URL
256: */
257: function getParticipantEnterURL($login, $meetingId, $participantId, $html5client);
258:
259: /**
260: * Provede import účastníků (pokud účastník neexistuje, vytvoří se, pokud
261: * není k setkání přiřazen, přiřadí se) a rovnou vrátí unikátní URL místnosti
262: * pro vstup těchto účastníků k danému setkání.
263: * @param string $login Login uživatele, jemuž setkání patří.
264: * @param int $meetingId ID setkání
265: * @param array $participants účastník - musí být asociativní pole s klíči
266: * 'number' (reg. číslo, smí být prázdné), 'surname' (příjmení),
267: * 'firstname' (jméno) a 'email' (musí být platnou e-mailovou adresou).
268: * @param int $access_level Úroveň přístupu (ACCESS_NONE, ACCESS_ONLINE_ONLY, ACCESS_RECORD_ONLY, ACCESS_ONLINE_AND_RECORD)
269: * @param bool $html5client Použít html5 klienta?
270: * @return array Pole, kde klíčem je číslo záznamu ze vstupu $participants a hodnotou URL pro vstup účastníka na setkání
271: */
272: function importParticipantAndGetEnterURL($login, $meetingId, $participants, $access_level, $html5client);
273:
274: /**
275: * Vrátí seznam nahrávek k danému setkání vč. odkazů pro jejich přehrání.
276: *
277: * @param string $login Login uživatele, jemuž setkání patří.
278: * @param int $meetingId ID setkání
279: * @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,
280: * 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).
281: */
282: function getRecordings($login, $meetingId);
283:
284: /**
285: * 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.
286: *
287: * @param string $login Login uživatele, jemuž setkání patří.
288: * @param int $meetingId ID setkání
289: * @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),
290: * v první úrovni indexováno kódem nahrávky, ve druhé úrovni jednotlivé zprávy indexovány od 0,
291: * 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).
292: */
293: function getChatRecordings($login, $meetingId);
294:
295:
296: /**
297: * Vrátí informace o přítomnosti účastníků na živém setkání.
298: * @param int $meetingId ID setkání
299: * @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)
300: * @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',
301: * 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),
302: * 'is_listening' (poslouchal), 'has_joined_voice' (aktivoval mikrofon) a 'has_video' (aktivoval webkameru). Modarátoři mají participant_id NULLové.
303: * Řádky pro účastníky, kteří na setkání vůbec nebyli (hypotetické prázdné presence), se nevracejí. Při použití parametru $participantId je
304: * návratová hodnota (nanejvýš) jednoprvkové pole.
305: */
306: function getPresence($login, $meetingId, $participantId = null);
307:
308:
309: /**
310: * Vrátí informace o přítomnosti účastníků na živém setkání.
311: * @param int $meetingId ID setkání
312: * @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)
313: * @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,
314: * 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
315: * 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á
316: * hodnota (nanejvýš) jednoprvkové pole. Řádky pro účastníky, kteří záznam vůbec neviděli (hypotetické has_played == false), se nevracejí.
317: * Návratová hodnota může být v budoucnu zpětně kompatibilním způsobem rozšířena o další položky.
318: */
319: function getPlaybackPresence($login, $meetingId, $participantId = null);
320:
321:
322:
323: /**
324: * Zjistí, zda existuje uživatel s daným loginem - vyhrazeno pro vnitřní
325: * použití a pro partnery.
326: */
327: //function isLoginUsed($login);
328:
329:
330: /**
331: * Přenastaví uživateli placený program - vyhrazeno pro vnitřní použití a pro partnery.
332: *
333: <ul>
334: <li> pokud login neexistuje, skončí s chybou,
335: <li> pokud je novy program $accessLevel stejný jako starý program, prodlouží tento program o $days dni
336: <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
337: </ul>
338: */
339: //function setAccessLevel($login, $accessLevel, $days);
340:
341:
342:
343: } // CLASS