RON dokumentace

Dokumentace

Dokumentace obsahuje nápovědu ke konfiguraci RON Portálu.

Dokumentace k XML formulářům je samostatně zde.

Požadavky na systém

doporučujeme používat vždy aktuální verze webových prohlížečů

Nastavení časové zóny v PHP.ini

    date.timezone = "Europe/Prague"
bez toho může PHP hlásit warning:
Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function.

reset IIS serveru z příkazového řádku

    net stop w3svc
    net start w3svc

Použití znakové sady UTF-8

- pokud ovladač databáze umožňuje načítání dat v UTF-8 (umožňuje to například sqlsrv), lze zapnout v _appdbset.php:
    $charset = 'utf-8';

Špatné zobrazení diakritiky načtené z databáze (některá písmenka jsou bez háčků, např. č, ř)

- chyba se vyskytuje obvykle na anglických windows
- je potřeba v nastavení windows změnit "jazyk pro programy které nepodporují unicode"

Připojení k databází pomocí Windows Authentication

Je potřeba povolit přístup do databáze uživateli, pod kterým běží php procesy spouštěné z IIS - (Na Windows 10 obvykle IIS APPPOOL\DefaultAppPool)

Na Windows 10 jsem použil tento postup v SQL Management studiu: Pokud webserver poběží na jiném počítači než SQL Server, tak asi bude potřeba použít doménový účet a přenastavit IIS - netestoval jsem.
Pokud je na webserveru vypnut anonymní přístup (obvykle kvůli automatickému přihlášení), tak asi i připojení k databázi bude pod přihlášeným uživatelem - netestoval jsem
Pak v _appdbset.php zadat:
    $db_user = null;
    $db_password = null;

Načítání velkých dat (obrázků, dokumentů) z databáze

Pokud se databáze připojuje přes ODBC, je potřeba v php.ini nastavit dostatečně velkou hodnotu pro maximální velikost datového pole, např:
odbc.defaultlrl = 2000000
Stejně tak je potřeba nastavit limity v případě přímého připojení přes MSSQL:
mssql.textlimit = 2000000
mssql.textsize = 2000000

Oracle

je k tomu potřeba mít nainstalované knihovny Oracle - např. Instant Client, ke stažení zde: http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html8
Soubory musí být u php.exe nebo v cestě. Mělo by stačit nakopírovat k php.exe tyto soubory:
    oci.dll, ociw32.dll, oraociei12.dll, oraons.dll

Odesílání emailů

Uživatelské texty a překlady

Uživatelská práva

V aplikaci je možné přidat nové typy práv:

Nastavení překladů

- výchozí jazyk se nastaví pomocí řádku:
$defaultlang = "cz";
- jako hodnotu je místo "cz" možné zadat jakýkoliv adresář s překladem, např. eng, sk
- nastavení uživatele je uloženo v cookies prohlížeče, takže při příštím spuštění se použije poslední uživatelem zvolený jazyk
- je možné nastavit jazyk nového uživatele "natvrdo" (nepoužije se hodnota z cookies) zadáním
$g_language = "cz";

Chybová hláška Internal server error 500

- podrobný popis chyby by měl být v logu PHP (ke stažení na stránce menuid=admin)
Nejčastější příčiny

Automatické přihlašování uživatele počítače do Intrawebu pomocí Windows authentication

Při automatickém přihlášení se nekontroluje heslo do docházky. Je ale možné provést odhlášení a následné přihlášení jiného uživatele. Proto je důležité nastavit hesla nebo přepnout kódování hesel na MD5 nebo SHA i v případě používání automatického přihlašování!

Prohlížeči Firefox může být nakonfigurován tak, že neposílá automaticky informace o uživateli. Takto je možné zapnout, aby informace posílal:

případně totéž pro network.automatic-ntlm-auth.trusted-uris (záleží jak jsou nastavení zprostředkovatelé v IIS - Ověřování)
viz jedna z odpovědí zde

Prohlížeč Chrome si přebírá nastavení povolených serverů z nastavení IE, respektive z windows (Ovládací panely - Síť a Internet - Možnosti Internetu)

záložka Zabezpečení, položka Důvěryhodné, kliknout na tlačítko Weby, a přidat server (tj. adresu např. http://jmenoserveru )

Přihlásit se jako (login as)

Zapne se v _appdbset.php pomocí řádku
$enable_login_as = 1;
uživatelům se pak nastaví práva "Přihlášení jako jiný uživatel"

Debug mód

- Debug mód je nutné povolit v _appdbset.php:
$enabledebugmode = 1;
- po zadání parametru debug=1 v URL se pak budou zobrazovat debugovací hlášky:
http:// .... ?debug=1

Ověřování jména a hesla pomocí LDAP serveru (doménový server a podobně)

V PHP musí být zapnuta podpora LDAP. Zkontrolujte jestli máte v PHP nainstalován soubor php_ldap.dll (soubor musí být v adresáři, ve kterém PHP hledá rozšíření - položka extension_dir v info.php). Podpora LDAP se pak v PHP.ini zapne pomocí řádku
extension = php_ldap.dll
- nastavte v _appdbset.php připojení k LDAP serveru:
// Verze pro Active directory:
$ldap_server = 'JMENO_SERVERU';
$ldap_port = 389;  // zadani portu neni povinne, pripadne muze byt i v ldap_server
$ldap_nameprefix = 'JMENO_DOMENY\\';
$ldap_namesuffix = '';
// Verze pro OpenLDAP
$ldap_server = 'JMENO_SERVERU';
$ldap_nameprefix = 'cn=';        // nebo 'uid=';
$ldap_namesuffix = ',dc=domena,dc=cz';
// Dale se muzou nastavit options, napriklad takto:
$ldap_options = array( LDAP_OPT_PROTOCOL_VERSION => 3 );
// Je možné také kombinované ověřování - uživatelé, kteří nemají v AD účet, se ověří přímo pomocí docházky.
// Ale POZOR! V tom případě musí být nastaveno $ldap_user, $ldap_assword a $ldap_search_dn (viz dále)
// Zapne se takto:
$ldap_only_existing_users = true;

Uživatelé musí mít stejná přihlašovací jména jako do domény. Hesla z programu Docházka se pak vůbec nepoužijí. Místo toho ověřuje heslo LDAP server. POZOR! Uživatelé na LDAP serveru nesmí mít prázdné heslo, jinak jim nebude přihlášení fungovat! $ldap_nameprefix se automaticky připojí na začátek zadaného uživatelského jména, takže uživatelé pak zadávají jméno bez domény.

Někdy může být problém v tom, že je potřeba nejdříve zjistit DN (distinguished name) uživatele. V tom případě je potřeba nastavit "servisní" účet, kterým se z LDAP zjistí DN přihlášeného uživatele a pak se teprve ověří. Servisní účet se pak konfiguruje takto:

$ldap_user = 'cn=jmeno-uzivatele,dc=domena,dc=cz';  // pripadne i 'domena\\jmeno_uzivatele' - nutno odzkouset
$ldap_password = 'heslo';
$ldap_search_dn = 'dc=domena,dc=cz';  // kde se uzivatel hleda
// $ldap_search_filter = '(sAMAccountName={$loginname})';
//   Nepovinne - urcuje filtr pro funkci ldap_search s parametrem {$loginname}.
Na Apache i v IIS jsem odzkoušel tyto varianty jména serveru (pro Active directory):
$ldap_server = 'jmeno_serveru';
$ldap_server = 'jmeno_serveru:389';
$ldap_server = 'ip_adresa_serveru';
$ldap_server = 'ip_adresa_serveru:389';
389 je výchozí číslo portu, které používá LDAP server - konkrétní jméno serveru a číslo portu záleží na konfiguraci serveru.

V případě, že je špatně nastavené jméno doménového serveru, nebo se není možné z nějakého jiného důvodu (např. firewall) k serveru připojit, zobrazí se tato chybová hláška:

Warning: ldap_bind(): Unable to bind to server: Can't contact LDAP server in C:\inetpub\wwwroot\ads\ron\ronapp.php on line 269
$ldap_nameprefix obsahuje prefix, který se připojí před jméno zadané uživatelem,
$ldap_namesuffix se připojí za jméno zadané uživatelem. Příklad konfigurace:
$ldap_nameprefix = 'ron\\';
uživatel pak má v docházce (karta osoby, sekce Intraweb, práva, záložka Intraweb - položka Přihlašovací jméno) zadáno přihlašovací jméno např. novak a pro ověření uživatelského jména se použije ron\novak
tj. prefix se připojí před jméno. Heslo uživatele v síti nesmí být prázdné!
V případě zadání špatného uživatelského jména nebo hesla se může zobrazit chybová hláška Invalid credentials:
Warning: ldap_bind(): Unable to bind to server: Invalid credentials in C:\inetpub\wwwroot\ads\ron\ronapp.php on line 269

Zobrazování warningů a "zdechání" Intrawebu

- zkontrolujte v php.ini nastavení

Přihlašování do Intrawebu pomocí ID média a čtečky karet

K počítači musí být připojena čtečka, která odesílá načtené číslo do klávesnicového bufferu pro čtečky RD3 to je možné zajistit pomocí utility RD_Reader nebo služby RD_Reader_Service respektive RD_Reader_x64 nebo RD_Reader_Service_64. Je vhodné nastavit čtečku/RD_Reader tak, aby se na konci vložil enter

- zkopírovat z podadresáře install soubor idlogin.php do hlavního adresáře (rootu) Intrawebu pro přihlášení pomocí ID média se pak použije startovací stránka http://...../idlogin.php

- přihlašování kartou je možné zapnout také v _appdbset.php přidáním řádku

    $enableidlogin = true;

v tomto případě ale pak bude přihlášení pomocí id média zapnuto vždy a nebude možná volba přihlášení pomocí volby stránky

- v přihlasovaci stránce intrawebu se pak zobrazí místo jména a hesla jenom pole pro zadáni ID média, po přiložení karty se pole vyplní a provede se přihlášení

Uživatelská úprava stylů (vzhled, barvy, písma)

- uživatelské styly můžete nastavit přímo v Portálu, menu Nastavení Portálu, záložka Uživatelské styly CSS
- nebo vytvořte v rootu intrawebu soubor s_user.css a v něm nadefinujte požadované změny css stylů

Další uživatelské soubory:

user_beforeshow.php - načte se těsně před zobrazením HTML
user_session.php - načte se před session_start

Úprava a přízpůsobení vzhledu Intrawebu

- zkopírujte soubor s_user.css z podadresáře Install do hlavního adresáře Intrawebu
V tomto souboru můžete následně provádět uživatelské úpravy stylu stránek
Úpravu stylu můžeme provést také na zakázku (včetně grafického návrhu nebo podle Vašeho vlastního návrhu)

V některých formulářích je možné zobrazit i odkazy na stáhnutí tiskových sestav:

- Zpracovaná docházka - zobrazují se formuláře s kódem začínajícím ZpracovanaDochazka...
- Služební cesta - zobrazují se sestavy s kódem SluzebniCesta_... a do sestavy je předána proměnná IdSluzebniCesty
- Detail absence - zobrazují se sestavy Absence_... a jsou definované proměnné poradi a datumOd

Spouštění skriptů

Pro správnou funkčnost je potřeba

Tisk

- musí být nasteveno spouštění agentů (remote executor)
- v _appdbset musí být správně nastaveny parametry pro připojení k report serveru, např:
$reportserver = 'localhost';
$reportserverport = 9090;
$showReports = true;  // nepovinne - zobrazi polozku Tisk v menu
Tisk z XML - tag <report> - viz dokumentace k XML

Připojení na databázi z Linuxu

jednou z možností je použítí zastaralého rozšíření mssql s knihovnou FreeTDS
Konfigurace v php.ini:
mssql.charset = CP1250
(toto lze zadat i primo v _appdbset.php pomoci ini_set('mssql.charset', 'CP1250');

Příklad konfigurace freetds.conf (obvykle v /etc/freetds.conf) - nutno upravit podle vlastního nastavení
[jmeno-serveru]
host = jmeno-serveru
instance = SQLExpress
tds version = 7.0
client charset = cp1250

další možností je použití ODBC v kombinaci s FreeTDS. Konfigurace ODBC je popsána zde: http://www.freetds.org/userguide/odbcconnattr.htm

Pokud se nekdy zobrazuje: Chyba v SQL dotazu! Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier. tak pravděpodobně není nastaveno tds version = 7.0 (případně 8 atd)

Vitrína – parametry v url:

1. kodjidelny - do url se zadá číslo terminálů, např. „&kodjidelny=1“
h 2. cena - do url se zadá, zda se má zobrazit cena, např. „&cena=1“ pro zobrazení ceny u položky a „&cena=0“ pro její skrytí
3. pocetsloupcu – do url se nastaví v kolika sloupcích se mají položky zobrazovat.

Pro nastavení zobrazení max. 8 položek na výšku se nemusí zadávat nic. Implicítně je nastaven počet sloupců na hodnotu 2.
Pro zobrazení max. 8 položek na šířku je potřeba zadat parametr „&pocetsloupcu=4“, tedy zobrazí se 8 položek ve 4 sloupcích. Lze samozřejmě zobrazit položek více, pro rovnoměrné rozložení po obrazovce je potřeba zvýšit počet sloupců.

Warning Null value is Eliminated by an Aggregate or Other SET Operation

PHP Warning: odbc_execute(): SQL error: [Microsoft][ODBC SQL Server Driver][SQL Server]Warning: Null value is eliminated by an aggregate or other SET operation., SQL state 01003 in SQLExecute in D:\RON\WEB\db\odbc.php on line 132
Zobrazuji se např. ve zpracované docházce (konkrétně to dělá načtení schválení docházky)
Dělá to v případě, že jsou povolené warningy (na produkčním serveru by neměly být) a v ODBC zdroji je zaškrtnuto "Use ANSI nulls, paddings and warnings" viz https://blog.sqlauthority.com/2015/02/13/sql-server-warning-null-value-is-eliminated-by-an-aggregate-or-other-set-operation/