| 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 |