cs:navody:ltp:start

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
cs:navody:ltp:start [10.04.2019 17:05]
Milan Daneček stará verze byla obnovena (07.03.2019 09:44)
cs:navody:ltp:start [27.08.2019 16:33] (aktuální)
Lukáš Strnad
Řádek 23: Řádek 23:
  
 ===Instalace nástroje bagit=== ===Instalace nástroje bagit===
-Pro instalaci je nezbytné nejprve nainstalovat balíček **python-pip**. Pro úspěšnou instalaci nástroje __bagit__ je nezbytné mít v systému **python ​v2.a vyšší**. Následně tedy můžeme provést instalaci (jako správce systému). \\+Pro instalaci je nezbytné nejprve nainstalovat balíček **python-pip**. Pro úspěšnou instalaci nástroje __bagit__ je nezbytné mít v systému **python ​v3.a vyšší**. Následně tedy můžeme provést instalaci (jako správce systému). \\
  
 <​code>​pip install bagit</​code>​ <​code>​pip install bagit</​code>​
Řádek 79: Řádek 79:
 */ */
  
-Pro nahrání archivního balíčku je nezbytné vyplnit jeho název **File name**. Následně můžeme přidat uživatelská metadata **User metadata**. Nakonec vybereme z lokálního disku příslušný zabalený balíček ve formátu *.zip a klikneme na tlačítko **Store**.+Pro nahrání archivního balíčku je nezbytné vyplnit jeho název **File name**. Následně můžeme přidat uživatelská metadata **Package ​metadata**. Zde můžeme využít buď ručního vložení metadat ve fromátu json, případně můžeme nahrát metadata pomocí existujícího json souboru, nebo vyplnit identifikátory zcela ručně. Nakonec vybereme z lokálního disku příslušný zabalený balíček ve formátu *.zip a klikneme na tlačítko **Store**.
  
 <note warning>​Pokud kontroly balíčku po vložení do systému neproběhnou správně, bude balíček označen jako nevalidní a po nějaké době bude automaticky odstraněn. Je tedy zcela zásadní po vkládání balíčku vždy zkontrolovat,​ že je balíček systémem korektně přijat. To je popsáno v auditních zprávách a ve stručné podobě také jako status balíčku.</​note>​ <note warning>​Pokud kontroly balíčku po vložení do systému neproběhnou správně, bude balíček označen jako nevalidní a po nějaké době bude automaticky odstraněn. Je tedy zcela zásadní po vkládání balíčku vždy zkontrolovat,​ že je balíček systémem korektně přijat. To je popsáno v auditních zprávách a ve stručné podobě také jako status balíčku.</​note>​
  
 {{:​cs:​navody:​ltp:​ltp3.png?​700|}} {{:​cs:​navody:​ltp:​ltp3.png?​700|}}
 +
 +Po kliknutí na tlačítko **Store to LTP** dojde k nahrání archivního balíčku, o jehož průběhu vás bude informovat progress bar
 +{{:​cs:​navody:​ltp:​ltp33.png?​700|}}
  
 === Správa archivního balíčku === === Správa archivního balíčku ===
Řádek 112: Řádek 115:
 {{:​cs:​navody:​ltp:​ltp6.png?​700|}} {{:​cs:​navody:​ltp:​ltp6.png?​700|}}
  
-=== Správa ​auditní ​zpráv ===+=== Správa ​auditních ​zpráv ===
  
 Při kliknutí na tlačítko **Audits** v levém menu si můžete zobrazit všechny auditní zprávy pro všechny balíčky uložené v daném skupinovém kontextu. Nejčerstvější auditní záznamy si můžete rovněž prohlédnout,​ pokud kliknete na ikonku zvonečku v pravé horní části stránky. Při kliknutí na tlačítko **Audits** v levém menu si můžete zobrazit všechny auditní zprávy pro všechny balíčky uložené v daném skupinovém kontextu. Nejčerstvější auditní záznamy si můžete rovněž prohlédnout,​ pokud kliknete na ikonku zvonečku v pravé horní části stránky.
Řádek 118: Řádek 121:
 {{:​cs:​navody:​ltp:​ltp7.png?​700|}} {{:​cs:​navody:​ltp:​ltp7.png?​700|}}
  
 +
 +{{anchor:​user_profile:​}}
 =====Popis funkcí dostupných pomocí API===== =====Popis funkcí dostupných pomocí API=====
-Pro přístup přes API rozhraní je nezbytné ​si nejdříve ​vygenerovat ​přístupový ​tokenTokeny mají platnost ​jeden den a uživatel je může zneplatnit i dříve.+Pro přístup přes API rozhraní je nezbytné nejdříve ​získat ​přístupový ​API klíčKlíč má omezenou ​platnost
 + 
 +Přístupový klíč si můžete vygenerovat ve webovém prostředí při kliknutí na tlačítko **User Profile** v levém menu a následně na **Manage Tokens**. 
 + 
 +{{:​cs:​navody:​ltp:​ltp8.png?700|}}
  
-Přístupový token si můžete zobrazit ve webovém prostředí následujícím postupem. 
   - Přihlásit se přes web na https://​ltp.cesnet.cz/​ \\   - Přihlásit se přes web na https://​ltp.cesnet.cz/​ \\
-  - Přejít ​na https://ltp.cesnet.cz/​api/​auth/​token/+  - Klikněte v levém menu na tlačítko **User Profile** \\ 
 +  - Klikněte na talčítko **Manage Tokens** \\ 
 +  - Na zobrazené stránce vyplňte název tokenu a klikněte na tlačítko **Save Token** \\ 
 +<note important>​Token si prosím zkopírujte na bezpečné místo. Z bezpečnostních důvodů jej nebude možné později znovu zobrazit.<​/note> 
 + 
 +{{:​cs:​navody:​ltp:ltp9.png?​700|}} 
 + 
 +Pokud provedete obnovení stránky, dojde ke skrytí tokenuNa zobrazené stránce pak můžete ​token rovněž revokovat. 
 + 
 +{{:​cs:​navody:​ltp:​ltp10.png?​700|}}
  
 <note tip>​Doporučujeme **uložit si přístupový token do proměnné shellu**. Následně můžete v curl-příkazech použít tuto proměnnou.</​note>​ <note tip>​Doporučujeme **uložit si přístupový token do proměnné shellu**. Následně můžete v curl-příkazech použít tuto proměnnou.</​note>​
Řádek 136: Řádek 153:
 ====Správa uživatelského účtu==== ====Správa uživatelského účtu====
 {{anchor:​account_info:​}} {{anchor:​account_info:​}}
-**GET Account info** - zobrazí informace o uživateli včetně seznamu skupin, jichž je členem. Je nutné použít autorizační token získaný v __GET Login user__.+**GET Account info** - zobrazí informace o uživateli včetně seznamu skupin, jichž je členem. Je nutné použít autorizační token získaný v [[#​user_profile|uživatelském profilu]].
 <hidden Příklad dotazu><​code>​curl --request GET \ <hidden Příklad dotazu><​code>​curl --request GET \
   --url https://​ltp.cesnet.cz/​api/​auth/​account/​ \   --url https://​ltp.cesnet.cz/​api/​auth/​account/​ \
Řádek 150: Řádek 167:
     {     {
       "​name":​ "​hogwarts",​       "​name":​ "​hogwarts",​
-      "​permissions":​ [],+      "​permissions":​ [ 106 ],
       "​is_group_admin":​ false       "​is_group_admin":​ false
     }     }
Řádek 185: Řádek 202:
 //--form content=@// cesta k zabalenému balíčku, který chcete uložit do služby LTP \\ //--form content=@// cesta k zabalenému balíčku, který chcete uložit do služby LTP \\
 //--form '​user_metadata=//​ uživatelská metadata pro archivní balíček ve formě dvojic "​klíč":​ "​hodnota"​ \\ //--form '​user_metadata=//​ uživatelská metadata pro archivní balíček ve formě dvojic "​klíč":​ "​hodnota"​ \\
-//--form group=// plné jméno skupiny, členové dané skupiny budou moci spravovat daný balíček (download, update, ...). Celý název příslušné skupiny lze získat pomocí funkce [[#​account_info|GET Account info]]. \\+//--form group=// plné jméno skupiny, členové dané skupiny budou moci spravovat daný balíček (download, update, ...). Celý název příslušné skupiny lze získat pomocí funkce [[#​account_info|GET Account info]] případně zkopírovat z webového prostředí z [[#​user_profile|uživatelského profilu]]. \\
  
 <hidden Příklad dotazu><​code>​curl --request POST \ <hidden Příklad dotazu><​code>​curl --request POST \
Řádek 200: Řádek 217:
   "​id":​ 160,   "​id":​ 160,
   "​name":​ "​bag-balicek",​   "​name":​ "​bag-balicek",​
-  "​created_by": ​50+  "​created_by": ​5
-  "created_at": ​"​2019-02-20T16:​52:​57.602206"​+  "owner": ​11
-  "​content":​ "​https://​ltp.cesnet.cz/​api/​v1/​archive/​c33a7550a6adbc5b88761294d72d86d4ecf3ac520750602c2714cdf6b3ec8317", +  "​content":​ "​https://​ltp.cesnet.cz/​api/​v1/​archive/​f379dbfb5b0f3ee06b6df0090b82da9c4be86b83fa05a65e8a5790ea232eab3e", 
-  "​checksum":​ "c33a7550a6adbc5b88761294d72d86d4ecf3ac520750602c2714cdf6b3ec8317",+  "​checksum":​ "f379dbfb5b0f3ee06b6df0090b82da9c4be86b83fa05a65e8a5790ea232eab3e",
   "​version":​ 1,   "​version":​ 1,
   "​system_metadata":​ {   "​system_metadata":​ {
     "​original_filename":​ "​my_archive_package.zip",​     "​original_filename":​ "​my_archive_package.zip",​
-    "​extension":​ "​zip"​+    "​extension":​ "zip", 
 +    "​size":​ "​3054499"
   },   },
   "​user_metadata":​ {   "​user_metadata":​ {
Řádek 215: Řádek 233:
   "​next_version":​ null,   "​next_version":​ null,
   "​previous_metadata":​ {},   "​previous_metadata":​ {},
-  "status": "​1"​+  "integrity_status":​ "​0",​ 
 +  "​status_description":​ "​Unknown",​ 
 +  "​data_status":​ { 
 +    "​DOWNLOAD":​ "​0",​ 
 +    "​UPLOAD": "​1"​ 
 +  }, 
 +  "​created_at":​ "​2019-07-02T14:​33:​48.545072",​ 
 +  "​data_status_description":​ { 
 +    "​DOWNLOAD":​ "​New",​ 
 +    "​UPLOAD":​ "​Uploading To Archive"​ 
 +  }
 }</​code></​hidden>​ }</​code></​hidden>​
  
Řádek 227: Řádek 255:
   --url https://​ltp.cesnet.cz/​api/​v1/​archive/​160/​ \   --url https://​ltp.cesnet.cz/​api/​v1/​archive/​160/​ \
   --header "​Authorization:​ Token ${LTP_TOKEN}"​ \   --header "​Authorization:​ Token ${LTP_TOKEN}"​ \
-  --header '​cache-control:​ no-cache' \ +  --header '​cache-control:​ no-cache'​ | jq</​code></​hidden>​
-  --form group='​urn:​geant:​cesnet.cz:​group:​VO_ltp_pilot_catchall:​ltp_test_group' | jq</​code></​hidden>​+
 <hidden Příklad odpovědi><​code>​{ <hidden Příklad odpovědi><​code>​{
   "​id":​ 160,   "​id":​ 160,
   "​name":​ "​bag-balicek",​   "​name":​ "​bag-balicek",​
-  "​created_by": ​50+  "​created_by": ​5
-  "created_at": ​"​2019-02-20T17:​53:​18.337553"​+  "owner": ​11
-  "​content":​ "​https://​ltp.cesnet.cz/​api/​v1/​archive/​160/​c33a7550a6adbc5b88761294d72d86d4ecf3ac520750602c2714cdf6b3ec8317", +  "​content":​ "​https://​ltp.cesnet.cz/​api/​v1/​archive/​160/​f379dbfb5b0f3ee06b6df0090b82da9c4be86b83fa05a65e8a5790ea232eab3e", 
-  "​checksum":​ "c33a7550a6adbc5b88761294d72d86d4ecf3ac520750602c2714cdf6b3ec8317",+  "​checksum":​ "f379dbfb5b0f3ee06b6df0090b82da9c4be86b83fa05a65e8a5790ea232eab3e",
   "​version":​ 1,   "​version":​ 1,
   "​system_metadata":​ {   "​system_metadata":​ {
 +    "​size":​ "​3054499",​
     "​sha256":​ "​e5d1350b23e69af6277c0286915c97f2aa3584ffdca51d2df8506b62d35e45",​     "​sha256":​ "​e5d1350b23e69af6277c0286915c97f2aa3584ffdca51d2df8506b62d35e45",​
     "​extension":​ "​zip",​     "​extension":​ "​zip",​
Řádek 248: Řádek 276:
   "​next_version":​ null,   "​next_version":​ null,
   "​previous_metadata":​ {},   "​previous_metadata":​ {},
-  "status": "3+  "integrity_status": "1", 
-+  "​status_description":​ "​Archive is valid",​ 
-</​code></​hidden>​+  "​data_status":​ { 
 +    "​UPLOAD":​ "​2",​ 
 +    "​DOWNLOAD":​ "​0"​ 
 +  ​}, 
 +  "​created_at":​ "​2019-07-02T14:​33:​48.545072",​ 
 +  "​data_status_description":​ { 
 +    "​UPLOAD":​ "​Stored In Archive",​ 
 +    "​DOWNLOAD":​ "​New"​ 
 +  } 
 +}</​code></​hidden>​
  
 <note important>​Výstup <​code>​{ <note important>​Výstup <​code>​{
Řádek 266: Řádek 303:
   --header '​cache-control:​ no-cache'​ \   --header '​cache-control:​ no-cache'​ \
   --header '​content-type:​ multipart/​form-data'​ \   --header '​content-type:​ multipart/​form-data'​ \
-  --form name=bag-name-update ​+  --form name=bag-name-update | jq</​code></​hidden>​
-  --form group='​urn:​geant:​cesnet.cz:​group:​VO_ltp_pilot_catchall:​ltp_test_group' ​| jq</​code></​hidden>​+
 <hidden Příklad odpovědi><​code>​{ <hidden Příklad odpovědi><​code>​{
   "​id":​ 160,   "​id":​ 160,
   "​name":​ "​bag-name-update",​   "​name":​ "​bag-name-update",​
-  "​created_by": ​50+  "​created_by": ​5
-  "created_at": ​"​2019-02-20T17:​01:​43.872294"​+  "owner": ​11
-  "​content":​ "​https://​ltp.cesnet.cz/​api/​v1/​archive/​160/​c33a7550a6adbc5b88761294d72d86d4ecf3ac520750602c2714cdf6b3ec8317", +  "​content":​ "​https://​ltp.cesnet.cz/​api/​v1/​archive/​160/​f379dbfb5b0f3ee06b6df0090b82da9c4be86b83fa05a65e8a5790ea232eab3e", 
-  "​checksum":​ "c33a7550a6adbc5b88761294d72d86d4ecf3ac520750602c2714cdf6b3ec8317",+  "​checksum":​ "f379dbfb5b0f3ee06b6df0090b82da9c4be86b83fa05a65e8a5790ea232eab3e",
   "​version":​ 1,   "​version":​ 1,
   "​system_metadata":​ {   "​system_metadata":​ {
 +    "​size":​ "​3054499",​
     "​sha256":​ "​e5d1350b23e69af6277c0286915c97f2aa3584ffdca51d2df8506b62d35e45",​     "​sha256":​ "​e5d1350b23e69af6277c0286915c97f2aa3584ffdca51d2df8506b62d35e45",​
     "​extension":​ "​zip",​     "​extension":​ "​zip",​
Řádek 287: Řádek 324:
   "​next_version":​ null,   "​next_version":​ null,
   "​previous_metadata":​ {},   "​previous_metadata":​ {},
-  "status": "3+  "integrity_status": "1", 
-+  "​status_description":​ "​Archive is valid",​ 
-</​code></​hidden>​+  "​data_status":​ { 
 +    "​UPLOAD":​ "​2",​ 
 +    "​DOWNLOAD":​ "​0"​ 
 +  ​}, 
 +  "​created_at":​ "​2019-07-02T14:​33:​48.545072",​ 
 +  "​data_status_description":​ { 
 +    "​UPLOAD":​ "​Stored In Archive",​ 
 +    "​DOWNLOAD":​ "​New"​ 
 +  } 
 +}</​code></​hidden>​
 \\ \\
 **GET DOWNLOAD ArchivePackage** - stažení archivního balíčku daného ID. \\ **GET DOWNLOAD ArchivePackage** - stažení archivního balíčku daného ID. \\
 ID balíčku je uvedeno ve výstupu funkce [[#​get_detail|GET DETAIL ArchivePackage]]. ID balíčku je uvedeno ve výstupu funkce [[#​get_detail|GET DETAIL ArchivePackage]].
-Pro stažení balíčku je nezbytné zavolat funkci pro stažení dvakrát. První volání spustí přípravu balíčku pro stažení (zejména kontrolu kontrolních součtů). Balíček je připraven ke stažení, pokud je jeho **Status ​7**. Pro automatické stahování doporučujeme do workflow zařadit (busy-wait) kontrolu hodnoty atributu **Status**. U velkých souborů/​balíčků může kontrola kontrolních součtu trvat i několik minut.+Pro stažení balíčku je nezbytné zavolat funkci pro stažení dvakrát. První volání spustí přípravu balíčku pro stažení (zejména kontrolu kontrolních součtů). Balíček je připraven ke stažení, pokud má jeho atribut DOWNLOAD hodnotu Download Ready, tj. ** "​DOWNLOAD"​"​Download Ready"**. Pro automatické stahování doporučujeme do workflow zařadit (busy-wait) kontrolu hodnoty atributu **Status**. U velkých souborů/​balíčků může kontrola kontrolních součtu trvat i několik minut.
 <hidden Příklad dotazu><​code>​curl --request GET \ <hidden Příklad dotazu><​code>​curl --request GET \
   --url https://​ltp.cesnet.cz/​api/​v1/​archive/​160/​download/​ \   --url https://​ltp.cesnet.cz/​api/​v1/​archive/​160/​download/​ \
   --header "​Authorization:​ Token ${LTP_TOKEN}"​ \   --header "​Authorization:​ Token ${LTP_TOKEN}"​ \
-  --header '​cache-control:​ no-cache' \ +  --header '​cache-control:​ no-cache'</​code></​hidden>​
-  --form group='​urn:​geant:​cesnet.cz:​group:​VO_ltp_pilot_catchall:​ltp_test_group'</​code></​hidden>​+
 <hidden Příklad odpovědi><​code></​code></​hidden>​ <hidden Příklad odpovědi><​code></​code></​hidden>​
 \\ \\
-Kontrola hodnoty atributu **Status**. Je-li balíček připraven ke stažení, bude mít nastaveno **"status": "7"​**. ​+Kontrola hodnoty atributu **DOWNLOAD**. Je-li balíček připraven ke stažení, bude mít nastaveno **"DOWNLOAD": "Download Ready"​**. ​
 <hidden Příklad dotazu><​code>​curl --request GET \ <hidden Příklad dotazu><​code>​curl --request GET \
   --url https://​ltp.cesnet.cz/​api/​v1/​archive/​160/​ \   --url https://​ltp.cesnet.cz/​api/​v1/​archive/​160/​ \
   --header "​Authorization:​ Token ${LTP_TOKEN}"​ \   --header "​Authorization:​ Token ${LTP_TOKEN}"​ \
-  --header '​cache-control:​ no-cache' \ +  --header '​cache-control:​ no-cache'​ | jq</​code></​hidden>​
-  --form group='​urn:​geant:​cesnet.cz:​group:​VO_ltp_pilot_catchall:​ltp_test_group' | jq</​code></​hidden>​+
 <hidden Příklad odpovědi><​code>​{ <hidden Příklad odpovědi><​code>​{
-  "​id": ​38+  ​
-  "​name":​ "bag-balicek",+  ​"​id": ​160
 +  "​name":​ "bag-name-update",
   "​created_by":​ 5,   "​created_by":​ 5,
-  "created_at": ​"​2019-02-26T13:​31:​58.382375"​+  "owner": ​11
-  "​content":​ "​https://​ltp.cesnet.cz/​api/​v1/​archive/​38/4b1551af73769645fa7732407ea52d6782a44f8f542edc09bdfda761023b9569", +  "​content":​ "​https://​ltp.cesnet.cz/​api/​v1/​archive/​160/f379dbfb5b0f3ee06b6df0090b82da9c4be86b83fa05a65e8a5790ea232eab3e", 
-  "​checksum":​ "ad19c8e20a091b971cd43686d5848aa5448e52f6d63370d945318bacb8e4989b",+  "​checksum":​ "f379dbfb5b0f3ee06b6df0090b82da9c4be86b83fa05a65e8a5790ea232eab3e",
   "​version":​ 1,   "​version":​ 1,
   "​system_metadata":​ {   "​system_metadata":​ {
-    "​size":​ 3054499,+    "​size": ​"3054499",
     "​sha256":​ "​e5d1350b23e69af6277c0286915c97f2aa3584ffdca51d2df8506b62d35e45",​     "​sha256":​ "​e5d1350b23e69af6277c0286915c97f2aa3584ffdca51d2df8506b62d35e45",​
     "​extension":​ "​zip",​     "​extension":​ "​zip",​
-    "​original_filename":​ "​my_archive_package.zip"​+    "​original_filename":​ "​my_archive_package.zip"​
 +    "​last_checksum_check":​ 1562072047.847555
   },   },
   "​user_metadata":​ {   "​user_metadata":​ {
Řádek 327: Řádek 373:
   "​next_version":​ null,   "​next_version":​ null,
   "​previous_metadata":​ {},   "​previous_metadata":​ {},
-  "status": "7+  "integrity_status": "1", 
-}</​code></​hidden>​+  "​status_description":​ "​Archive is valid",​ 
 +  "​data_status":​ { 
 +    "​UPLOAD":​ "​2",​ 
 +    "​DOWNLOAD":​ "​5"​ 
 +  ​}
 +  "​created_at":​ "​2019-07-02T14:​33:​48.545072",​ 
 +  "​data_status_description":​ { 
 +    "​UPLOAD":​ "​Stored In Archive",​ 
 +    "​DOWNLOAD":​ "​Download Ready"​ 
 +  } 
 +
 +</​code></​hidden>​
 \\ \\
 Stažení balíčku - **POZOR - balíček ukládejte jako soubor *.zip**, níže //​downloaded_package.zip//​. Stažení balíčku - **POZOR - balíček ukládejte jako soubor *.zip**, níže //​downloaded_package.zip//​.
-<note important>​Dokud není balíček ve stavu **7**, není možné provést jeho download. [[#​stavove_kody|Význam jednotlivých stavových kódů]].</​note>​+<note important>​Dokud není balíček ve stavu **"​DOWNLOAD":​ "​Download Ready"**, není možné provést jeho download.</​note>​
 <hidden Příklad dotazu><​code>​curl --request GET \ <hidden Příklad dotazu><​code>​curl --request GET \
   --output downloaded_package.zip \   --output downloaded_package.zip \
   --url https://​ltp.cesnet.cz/​api/​v1/​archive/​160/​download/​ \   --url https://​ltp.cesnet.cz/​api/​v1/​archive/​160/​download/​ \
   --header "​Authorization:​ Token ${LTP_TOKEN}"​ \   --header "​Authorization:​ Token ${LTP_TOKEN}"​ \
-  --header '​cache-control:​ no-cache' \ +  --header '​cache-control:​ no-cache'</​code></​hidden>​
-  --form group='​urn:​geant:​cesnet.cz:​group:​VO_ltp_pilot_catchall:​ltp_test_group' </​code></​hidden>​+
 <hidden Příklad odpovědi><​code></​code></​hidden>​ <hidden Příklad odpovědi><​code></​code></​hidden>​
 \\ \\
Řádek 548: Řádek 604:
 ] ]
 </​code></​hidden>​ </​code></​hidden>​
 +/*
 {{anchor:​stavove_kody:​}} {{anchor:​stavove_kody:​}}
 ===== Stavové kódy archivních balíčků ===== ===== Stavové kódy archivních balíčků =====
Řádek 562: Řádek 618:
 NOT_VALID_BAGIT = '​9'​ \\ NOT_VALID_BAGIT = '​9'​ \\
 BAGIT_IS_VALID = '​10'​ \\ BAGIT_IS_VALID = '​10'​ \\
 +*/
 ===== Záznam změn/​Change Log ===== ===== Záznam změn/​Change Log =====
 [[cs:​navody:​ltp:​change_log:​start|Soupis prováděných změn v souvislosti s funkcionalitami LTP]] [[cs:​navody:​ltp:​change_log:​start|Soupis prováděných změn v souvislosti s funkcionalitami LTP]]
  
Poslední úprava: 10.04.2019 17:05