Dokumentace
Dokumentace obsahuje nápovědu ke konfiguraci RON Portálu.
Dokumentace k XML formulářům je samostatně zde.
Požadavky na systém
- PHP - aktuální podporovaná verze - viz http://php.net/supported-versions.php
- webový server kompatibilní s PHP, např. IIS, Apache
- prohlížeče Firefox, Chrome, Edge
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
- výhoda: v _appdbset.php nemusí být jméno a heslo databázového uživatele
- s připojením přes ODBC funguje i ve starších verzích, s připojením přes sqlsrv funguje od Portálu verze 4.901.133
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:
- Pod Security - Logins přidat uživatele (zaškrtnout Windows Authentication, zadat IIS APPPOOL\DefaultAppPool)
- Pod Databases - [DATABAZE_RON] - Security - Users přidat uživatele
- User type = Windows User
- User name = zadat nějaké jméno, třeba IIS
- Login name = IIS APPPOOL\DefaultAppPool
- Membership - vybrat db_datareader a db_datawriter
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
- na starších verzích PHP (do 5.5) funguje rozšíření php_oci.dll
- na novějších verzích PHP (od 5.6) lze použít php_oci8_12c.dll případně novější
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ů
- aby bylo možné z portálu posílat automatické emaily (např. při schvalování absencí), musí se nastavit mailserver
- nastavení se provede v souboru _email_set.php (soubor nakopírujte ze složky install do kořene portálu)
- najčastěji se používá odesílání mailu pomocí phpmaileru ($usephpmailer = true), protože mailserver vyžaduje uživatelské jméno a heslo
- pro otestování emailu použijte stránku ...?menuid=emailtest (uživatel, který test provádí musí mít právo Nastavení Portálu = Vše)
- původní email_test.php, který se používal dříve provede redirect na správnou stránku ?menuid=emailtest
- příklady nastavení a nějaké tipy pro řešení problémů jsou v souboru install/_email_set.examples
Uživatelské texty a překlady
- zobrazované texty jsou uloženy v *.ini souborech v adresáři lang (pro každý jazyk je tam podadresář)
- soubory ron_strings.ini a app_strings.ini se načítají vždy, ostatní soubory se načítají jen v případě potřeby
(například kapacity.ini se načítají pro plánování kapacit)
- uživatelský překlad textů je možné zapsat v souboru (pokud neexistuje, vytvořte si jej)
- user/user_strings.ini (načítá se vždy)
- user/user_strings.cz.ini, user/user_strings.eng.ini, atd. - načítá se pro příslušnou jazykovou verzi (cz, eng, atd.)
- pro zjištění identifikátoru textu je možné vypnout překlady pomocí url parameteru translate=0
Uživatelská práva
V aplikaci je možné přidat nové typy práv:
- editace_mv_<kod_casove_slozky> - právo pro editaci měsíčního výsledku konkrétní časové složky
- vkladani_mzdpol_<kod_mzdove_polozky> - právo pro vkládání a editaci konkrétní mzdové položky
- absence_<kod_operace> - plánování absence s konkrétní operací
- absence_schval_<kod_operace> - schvalování absence s konkrétní operací
- pkniha_schval1_<cislo_browseru> - schvalování záznamů v pokladní knize
- pkniha_prohl_<cislo_browseru>
- pkniha_vloz_<cislo_browseru>
- slcesty_ucet_<typ_radku_uctovani> - právo pro vkládání a editaci řádku účtování služební cesty se zadaným typem účtování
- monitorovani_<kod_sloupce> - právo pro zobrazení konkrétního sloupce monitorování. Kódy lze najít v Portálu - Nastavení Portálu - Monitorování - v položce Sloupce sestavy
(např. monitorovani_casoperace, monitorovani_fotoimg a podobně)
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
- do rootu intrawebu není nakopírován soubor _appdbset.php nebo _coding.php
- špatné nastavení připojení k databázi, nebo není v PHP.ini zapnuto rozšíření pro danou databázi
(chybová hláška se v tomto případě zobrazí ihned po přihlášení)
- špatně nastavená práva na PHP nebo obsah Intrawebu
(chybová hláška se zobrazí ihned při pokusu o zobrazení jakékoliv PHP stránky)
- špatně nastavené připojení k mailserveru
(zobrazí se při odesílání emailu)
- špatně nastavené připojení k LDAP serveru
(zobrazí se při přihlášení pomocí LDAP)
- v php.ini není nastaven soubor error_log a přitom je zapnuto log_errors
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:
- v adresním řádku Firefoxu zadat about:config
- najít network.negotiate-auth.trusted-uris
- a přidat tam jméno/adresu serveru
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í
- log_errors - zkuste nastavit na Off
- error_log - pokud je log_errors=On, tak zde musí být správná hodnota
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
- v nastavení Intrawebu být nastaveno spouštění agentů
- mít vytvořený skript s příslušným jménem. Po zobrazení nastavevní Intrawebu je možné skript vytvořit jako událost.
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/