<!-- $Id$ -->
  <chapter id="install">
    <title>Instalacja i konfiguracja</title>
    <sect1 id="install-intro">
      <title>Wstęp</title>
     <para>LMS składa się z kilku modułów, podstawowym modułem jest <emphasis>LMS-UI</emphasis> 
     (interfejs użytkownika). Jest on w całości napisany w PHP i do pracy wymaga bazy danych 
     (właściwie to każdy moduł wymaga bazy danych). To właśnie w <emphasis>LMS-UI</emphasis> wykonujemy wszystkie 
     czynności, reszta modułów ma tylko za zadanie zautomatyzować pracę LMS.</para>
     <para>LMS to także zestaw skryptów w języku Perl, i to właśnie te skrypty wymagają 
     abyś posiadał interpreter tego języka. Jeśli będziesz chciał używać tych skryptów, 
     musisz mieć Perl'a. Skrypty pozwalają m.in. na comiesięczne naliczanie opłat abonamentowych 
     bądź wysyłanie upomnień. Największy z nich - <emphasis>LMS-MGC</emphasis> jest skryptem, ale na tyle 
     uniwersalnym że potrafi wygenerować praktycznie dowolny plik konfiguracyjny i zrestartować 
     usługę na twoim serwerze.</para>
        <para>Jest jeszcze <emphasis>LMS Daemon</emphasis>, napisany w języku C. Jest on przeznaczony 
     (a właściwie jego wtyczki) do generowania plików konfiguracyjnych i restartowania usług. 
     Można go stosować jako zamiennik lub uzupełnienie skryptów perlowych.
     Odpowiada on za to, aby to co zostało zmienione w <emphasis>LMS-UI</emphasis> zostało zmienione także 
     w rzeczywistości.</para>
    </sect1>
    <sect1 id="install-requirements">
            <title>Wymagania</title>
         <sect2 id="install-req-www">
           <title>Serwer WWW</title>
           <para>Ponieważ <emphasis>LMS-UI</emphasis> jest napisane w PHP, niezbędny jest serwer WWW z interpreterem 
          tego języka. Preferowanym serwerem jest Apache 
          (<ulink url="http://www.apache.org">www.apache.org</ulink>).</para>
        </sect2>
        <sect2 id="install-req-php">
        <title>Interpreter PHP</title>
    		<para>Interpreter powinien być w wersji 5.2.x lub nowszej. PHP można ściągnąć ze 
    		strony <ulink url="http://www.php.net">www.php.net</ulink>.
    		W szczególności wymagane są następujące moduły (sprawdź "extension"
    		w php.ini lub wyjście funkcji phpinfo()):
		<itemizedlist>
        		<listitem>
				<para>pcre, posix,</para>
			</listitem>
			<listitem>
				<para>zlib (dla kompresowanych backupów),</para>
			</listitem>
			<listitem>
				<para>gd i/lub ming (tylko dla mapy sieci),</para>
			</listitem>
			<listitem>
				<para>mysql, mysqli lub pgsql (dla bazy danych),</para>
			</listitem>
			<listitem>
				<para>iconv, mbstring</para>
			</listitem>
			<listitem>
				<para>PEAR::Mail (wymaga PEAR::Net_SMTP i PEAR::Net_Socket) do mailingu.</para>
			</listitem>
		</itemizedlist>
		</para>
        </sect2>
        <sect2 id="install-req-db">
           <title>Serwer baz danych</title>
           <para>LMS nie będzie działał prawidłowo na wersjach MySQL starszych od 5.0.</para>
           <para>LMS współpracuje także z PostgreSQL w wersji 8.4.x lub nowszych.</para>
         </sect2>
         <sect2 id="install-req-smarty">
             <title>Biblioteka Smarty</title>
             <para><emphasis>LMS-UI</emphasis> do pracy wymaga jeszcze biblioteki Smarty (<ulink url="http://www.smarty.net">http://www.smarty.net</ulink>)
           w wersji 3.0 lub wyższej.</para>
            </sect2>
            <sect2 id="install-req-perl">
            <title>Perl</title>
       <para>O ile dla <emphasis>LMS-UI</emphasis> wystarczy to co powyżej, to żeby mieć działający 
          <emphasis>LMS-MGC</emphasis> i resztę skryptów potrzebujemy 
          także Perla i moduły do niego, które można pobrać z <ulink url="http://www.cpan.org">www.cpan.org</ulink>,
          czyli:
       <itemizedlist>
         <listitem>
            <para>perl właściwy i jego podstawowe moduły (POSIX, GetOpt::Long),</para>
         </listitem>
         <listitem>
            <para>Config::IniFiles,</para>
         </listitem>
         <listitem>
            <para>DBI,</para>
         </listitem>
         <listitem>
            <para>DBD-mysql (Jeśli masz zamiar używać mysql'a),</para>
         </listitem>
         <listitem>
            <para>DBD-Pg (Jeśli masz zamiar używać postgres'a),</para>
         </listitem>
       </itemizedlist></para>
       </sect2>
       <sect2 id="install-req-c">
         <title>Kompilator języka C</title>
       <para>Jeśli chcesz uruchomić <emphasis>LMS Daemon</emphasis> będziesz potrzebował
       działający kompilator języka C, gdyż jest on dostarczany wyłącznie w postaci
       kodu źródłowego.</para>
       </sect2>
       <sect2 id="install-req-browser">
             <title>Przeglądarka www</title>
             <para>LMS posiada webowy interfejs, dlatego wymagana jest przeglądarka, która
             obsługuje javascript i ma włączone cookies. Z naszego doświadczenia wynika, że
             najlepszym wyborem będzie Mozilla Firefox 1.x.</para>
       </sect2>
     </sect1>
    <sect1 id="install-install">
    <title>Instalacja LMS</title>
        <para>LMS w postaci archiwum tar.gz można pobrać ze strony 
        domowej projektu (<ulink url="http://www.lms.org.pl">www.lms.org.pl</ulink>),
        a następnie rozpakować i umieścić w wybranym katalogu (np. <filename>/var/www/lms
        </filename>) dostępnym dla serwera www:
<screen>
$ cd /var/www
$ wget http://www.lms.org.pl/download/stable/lms-x.x.x.tar.gz
$ tar zxf lms-x.x.x.tar.gz
</screen>
        </para>
        <para>Biblioteka Smarty zawarta jest w paczce z LMSem. Natomiast gdy
	używasz wersji systemu pobranej wprost z CVSu musisz sam zadbać
	o jej instalację. Najprościej skorzystać ze skryptu 
	<filename>/devel/smarty_install.sh</filename>, który pobierze
	bibliotekę Smarty z Internetu i skopiuje zawartość katalogu 
	<filename>/lib</filename> z pobranej paczki do katalogu <filename>/lib/Smarty</filename>.
        </para>
          <para><note><para>Położenie wszystkich katalogów możesz zmienić w sekcji
          <emphasis>[directories]</emphasis> pliku <filename>lms.ini</filename>.</para></note></para>
          <para>Pliki z konfiguracją (<filename>sample/lms.ini</filename> i <filename>
          sample/lms-mgc.ini</filename>) umieść w katalogu <filename>/etc/lms</filename>.
          </para>
          <para>Skrypty wykonywalne z katalogu <filename>bin</filename> 
          najlepiej przenieść do katalogu <filename>/usr/sbin</filename>.
          </para>
        <para>
		<warning><para>Serwer www musi mieć prawo odczytu pliku <filename>lms.ini</filename>
		oraz prawa odczytu i zapisu do katalogu <filename>backup</filename>. 
		Stanowi to potencjalne obniżenie poziomu bezpieczeństwa systemu.
		</para></warning>
		<warning><para>Bezwzględnie LMS wymaga wyłączenia opcji PHP <filename>register_globals</filename>.
		</para></warning>
		<note><para>Począwszy od wersji 1.6 przechowywanie konfiguracji 
		interfejsu użytkownika w <filename>lms.ini</filename> jest przestarzałe. 
		Jedynymi koniecznymi sekcjami w tym pliku są [database] i [directories]
		oraz konfiguracja skryptów perlowych. Ustawienia LMS-UI
	    	przechowywane są w bazie danych i mogą być modyfikowane przez 
		interfejs użytkownika, mają także wyższy priorytet od tych zawartych
		w <filename>lms.ini</filename>.</para></note>
	</para>
	<para>Zalecane zmiany w php.ini (lub httpd.conf dla wirtualki LMSa):
<screen>
mbstring.func_overload = 7
register_globals = off
max_execution_time = 60 ; co najmniej
memory_limit = 32M ; co najmniej
</screen>
	</para>
	<para>Przed pierwszym uruchomieniem LMSa wymagane jest ustawienie opcji
		konfiguracyjnych bazy danych i katalogów w pliku <filename>lms.ini</filename>. 
		Następnie po uruchomieniu <emphasis>LMS-UI</emphasis> zakładamy konto użytkownika uprzywilejowanego (zaznaczając wszystkie uprawnienia).
		Po czym możemy przystąpić do konfiguracji podstawowej systemu. W menu Konfiguracja -> Interfejs użytkownika ustawiamy podstawowe opcje
		odnoszące się do <emphasis>LMS-UI</emphasis>. Następnie wymagane jest
		zdefiniowanie przynajmniej jednej firmy (oddziału) oraz wskazane jest
		zdefiniowanie stawek podatkowych, planów numeracyjnych, województw oraz hostów.</para>
     </sect1>
     <sect1 id="install-locale">
     <title>Lokalizacja</title>
          <para>Domyślnym językiem interfejsu użytkownika jest angielski,
          a znaki są kodowane w UTF-8. Aby znaki narodowe innych języków
          były poprawnie wyświetlane należy mieć w systemie odpowiednie
          locale. Np. dla języka polskiego będzie to komenda:
      <screen>
# localedef -v -c -i pl_PL -f UTF-8 /usr/share/locale/pl_PL.UTF-8
</screen>
          Jeśli w interfejsie użytkownika znaki narodowe w dalszym ciągu nie będą 
          wyświetlane poprawnie możliwe, że trzeba będzie dodać do pliku 
          konfiguracyjnego serwera www (httpd.conf) wpis:
     <screen>
AddDefaultCharset Off
</screen>
          oraz w konfiguracji PHP (php.ini) zakomentować wpis:
     <screen>
;default_charset = "iso-8859-1"
</screen>
          Informacje na temat konfiguracji kodowania bazy danych w dalszej
          części rozdziału.</para>
     </sect1>
     <sect1 id="install-db">
     <title>Instalacja serwera baz danych</title>
          <sect2 id="install-mysql">
          <title>MySQL</title>
          <sect3 id="install-mysql-intro">
          <title>Wstęp</title>
               <para>Ta  bardzo  popularna  baza  jest  dostępna  z większością dystrybucji
               Linuksa.  Jeżeli  jednak będziesz musiał ją zainstalować samodzielnie,
               zacznij od ściągnięcia źródeł z <ulink url="http://www.mysql.com">
               www.mysql.com</ulink>.</para>
          </sect3>
          <sect3 id="install-mysql-server">
          <title>Instalacja serwera MySQL</title>
               <para>Po rozpakowaniu, wejdź do katalogu z naszym MySQL i wydaj kolejno
               polecenia:
               <screen>
$ ./configure --prefix=/usr/local/mysql
$ make
$ make install
$ /usr/local/mysql/bin/mysql_install_db
$ chown mysql -R /usr/local/mysql/var
$ /usr/local/mysql/bin/safe_mysqld &
$ /usr/local/mysql/bin/mysqladmin -u root password nowe_hasło</screen>
          </para>
          </sect3>
          <sect3 id="install-mysql-dbcreate">
          <title>Utworzenie bazy danych</title>
               <para>Konieczne to jest jeżeli uruchamiasz LMS po raz PIERWSZY. 
               Tak więc, wejdź do katalogu w którym masz LMS'a i uruchom shell mysql'a:
               <screen>
mysql -u[tutaj wpisz użytkownika z pełnym dostępem do bazy] -p
Enter password:[podaj hasło]
mysql> CREATE DATABASE lms CHARACTER SET utf8 COLLATE utf8_polish_ci;
mysql> GRANT USAGE ON lms.* TO lms@localhost;
mysql> GRANT ALL ON lms.* TO lms@localhost IDENTIFIED BY 'twoje_hasło';
mysql> flush privileges;</screen>
          </para>
          </sect3>
          <sect3 id="install-mysql-lms">
          <title>Konfiguracja LMS (lms.ini)</title>
               <para>Ponieważ  MySQL  jest  domyślną bazą dla LMS'u, konfiguracja ogranicza
               się  do  podania  w  sekcji  [database] pliku /etc/lms/lms.ini hasła i użytkownika:
               <screen>
user     = lms
password = hasło_z_pkt.3
</screen>
              </para>
	      	<para>W PHP dostępne są dwa rozszerzenia do obsługi bazy MySQL (mysql i mysqli). 
		LMS obsługuje oba, możesz wybrać, ktego chcesz użyć ustawiając odpowiednio
		opcję <emphasis>type</emphasis> w sekcji [database].</para>
               <para>Po  takim  zabiegu,  o ile LMS'owi uda się nawiązać połączenie do bazy
               danych,  można już bez problemu dostać się do systemu. Jeżeli jednak w
               bazie  danych  nie ma żadnego konta użytkownika, jedyną rzeczą jaką
               zobaczysz będzie  formularz  dodania  użytkownika.  Jeżeli
               podasz  prawidłowe  dane  użytkownika, LMS przeniesie Cię na stronę
               logowania gdzie od razu będziesz mógł użyć nowo utworzonego konta.
               </para>
               <para>Zatrzymaj się tutaj i dodaj coś do crona, tak dla świętego spokoju:
               <screen>
12 4 3,10,17,21,28 * * /usr/bin/mysqldump -u lms --password=Twoje-super-tajne-hasło \
              --add-drop-table --add-locks lms > backups/lms-auto-"$(date +%s)".sql</screen>
               </para>
               <para>Spowoduje to wykonywanie o 4:12 rano, każdego 3, 10, 17, 21 i 28 dnia
               miesiąca automagicznie zrzutu danych z mysqla.</para>
          </sect3>
          </sect2>
          <sect2 id="install-pgsql">
          <title>PostgreSQL</title>
          <sect3 id="install-pgsql-intro">
          <title>Wstęp</title>
               <para>LMS jest testowany na PostgreSQL 8.4.x i nowszych, możesz mieć
		problemy korzystając ze starszych wersji. Jeżeli nie masz zainstalowanego serwera
               PostgreSQL, możesz np. własnoręcznie skompilować go
               ze źródeł dostępnych na stronie <ulink url="http://www.postgresql.org">
               www.postgresql.org</ulink>.</para>
          </sect3>
          <sect3 id="install-pgsql-server">
          <title>Instalacja</title>
               <para>Jest to wersja skrócona instalacji, więcej informacji znajdziesz
               w dokumentacji postgresa. Po ściągnięciu i rozpakowaniu wejdź
               do katalogu głównego i wpisz kolejno poniższe polecenia.
               <screen>
$ ./configure --enable-locale
$ gmake
$ su
$ gmake install
$ adduser postgres
$ mkdir /usr/local/pgsql/data
$ chown postgres /usr/local/pgsql/data
$ su - postgres
$ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data --locale=pl_PL.UTF-8
$ /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data >logfile 2>&1 &</screen>
               </para>
	       <para><warning><para>Dotyczy wersji <= 9.1.x: Wymagane jest dodanie wpisu w postgresql.conf: custom_variable_classes = 'lms'</para></warning></para>
          </sect3>
          <sect3 id="install-pgsql-dbcreate">
          <title>Utworzenie bazy danych</title>
               <para>Mając uruchomiony serwer możesz przystąpić do tworzenia bazy o nazwie 'lms',
               której właścicielem będzie użytkownik z loginem 'lms'. 
               <screen>
$ /usr/local/pgsql/bin/createuser -DPRS lms
$ /usr/local/pgsql/bin/createdb -E UNICODE -O lms lms</screen>
          </para>
          </sect3>
          <sect3 id="install-pgsql-lms">
          <title>Konfiguracja LMS (lms.ini)</title>
               <para>Dla systemu LMS domyślnym serwerem baz danych jest MySQL, dlatego w sekcji
               [database] pliku /etc/lms/lms.ini należy ustawić następujące opcje:
                  <screen>
type     = postgres
user     = lms
password = hasło_podane_przy_tworzeniu_użytkownika_lms
</screen>
              </para>
               <para><note><para>Hasło jest wymagane w zależności od konfiguracji autentykacji
                      użytkowników postgresa w <filename>/usr/local/pgsql/data/pg_hba.conf</filename>. 
                      Domyślnie hasło nie jest wymagane.</para></note></para>
               <para>Po takim zabiegu, o ile LMS'owi uda się nawiązać połączenie do bazy danych,
               można już bez problemu dostać się do systemu. Jeżeli jednak w bazie danych
               nie ma żadnego konta użytkownika, jedyną rzeczą jaką zobaczysz
               będzie formularz dodania użytkownika.</para>

               <para>Zatrzymaj się tutaj i dodaj coś do crona, tak dla świętego spokoju:
               <screen>
12 4 3,10,17,21,28 * * /usr/bin/pg_dump -U lms --clean \
                       --file=backups/lms-auto-"$(date +%s)".sql</screen>
               </para>

          </sect3>
          </sect2>
     </sect1>       
      <sect1 id="install-config">
               <title>Konfiguracja podstawowa</title>
          <para>Głównym plikiem konfiguracyjnym LMS jest <filename>lms.ini</filename>,
         który należy umieścić w katalogu <filename>/etc/lms</filename> lub w katalogu
         głównym LMS'a. Zawiera on zmienne konfiguracyjne <emphasis>LMS-UI</emphasis> 
         oraz wszystkich skryptów wykonywalnych z wyjątkiem <emphasis>LMS-MGC</emphasis>.</para>
         <para><note><para>Pamiętaj o usunięciu średników na początku linii z ustawianym 
         parametrem konfiguracyjnym.</para></note></para>
         <sect2 id="install-config-db">
         <title>Sekcja [database] - ustawienia bazy danych</title>
         <para>
         <itemizedlist>
            <listitem>
         <para>type</para>
        <para>Typ drivera bazy danych. Aktualnie w 100% supportowany jest 'mysql',
        'mysqli' oraz 'postgres'. Domyślnie: mysql</para>
        <para>Przykład: <prompt>type = mysql</prompt></para>
       </listitem>
          <listitem>
        <para>host</para>
        <para>Host gdzie zainstalowana jest baza danych. Najczęściej, localhost, ale można tutaj 
        wstawić cokolwiek (ip, domena, ścieżka do gniazda w formacie '/path/to/socket'). 
        Domyślnie: localhost</para>
        <para>Przykład:     <prompt>host = localhost</prompt></para>
       </listitem>
          <listitem>
        <para>user</para>
        <para>Użytkownik do bazy danych. W wielu wypadkach (jeżeli postępowałeś zgodnie ze 
        wskazówkami w dokumentacji) będzie to 'lms'. Jeżeli chcesz używać konta uprzywilejowanego, 
        prawdopodobnie wpiszesz 'root' (MySQL na większości *nixów), 'mysql' (na PLD) bądź 
        'postgres' (PostgreSQL). Domyślnie: mysql</para>
        <para>Przykład:     <prompt>user = lms</prompt></para>
       </listitem>
          <listitem>
        <para>password</para>
        <para>Hasło do bazy danych. Domyślnie puste.</para>
        <para>Przykład:     <prompt>password = password</prompt></para>
       </listitem>
          <listitem>
        <para>database</para>
        <para>Nazwa bazy danych, domyślnie lms.</para>
        <para>Przykład:     <prompt>database = lms</prompt></para>
       </listitem>
         </itemizedlist>
     </para>
     </sect2>
     <sect2 id="install-config-dir">         
     <title>Sekcja [directories] - ustawienia katalogów</title>
      <para>        
     <itemizedlist>
          <listitem>
        <para>sys_dir</para>
        <para>Katalog systemowy. Jest to miejsce gdzie jest cała zawartość UI LMS'a, czyli index.php, grafiki, 
        szablony i reszta. Domyślnie, index.php stara się sam odnaleźć w filesystemie używając getcwd(), ale 
        lepiej by było gdyby mu powiedzieć gdzie jest:</para>
        <para>Przykład:     <prompt>sys_dir = /var/www/htdocs/lms/</prompt></para>
       </listitem>
          <listitem>
        <para>modules_dir</para>
        <para>Katalog z "modułami" LMS'a. Czyli zawartość katalogu modules. Domyślnie jest to podkatalog 
        modules w sys_dir.</para>
        <para>Przykład:     <prompt>modules_dir = /usr/share/lms/modules/</prompt></para>
       </listitem>
          <listitem>
        <para>lib_dir</para>
        <para>Katalog z "bibliotekami" LMS'a. Czyli zawartość katalogu lib. Domyślnie to podkatalog lib w sys_dir.</para>
        <para>Przykład:     <prompt>lib_dir = /usr/share/lms/lib/</prompt></para>
       </listitem>
          <listitem>
        <para>backup_dir</para>
        <para>Katalog z kopiami zapasowymi bazy danych - miejsce gdzie LMS zapisuje zrzuty z bazy. 
        Domyślnie jest to podkatalog 'backups'.</para>
        <para>Przykład:     <prompt>backup_dir = /var/backup/lms/</prompt></para>
        <para><warning><para>Jeśli katalog z kopiami zapasowymi będzie osiągalny z poziomu WWW, to każdy 
        bez autoryzacji będzie miał do nich dostęp.</para></warning></para>
        </listitem>
        <listitem>
        <para>doc_dir</para>
        <para>Katalog na archiwum dokumentów - miejsce gdzie LMS zapisuje pobrane pliki.
        Domyślnie jest to podkatalog 'documents'.</para>
        <para>Przykład:     <prompt>doc_dir = /usr/share/documents/</prompt></para>
        <para><warning><para>Jeśli ten katalog będzie osiągalny z poziomu WWW, to każdy 
        bez autoryzacji będzie miał do nich dostęp.</para></warning></para>
        </listitem>
          <listitem>
        <para>smarty_compile_dir</para>
        <para>Katalog kompilacji Smarty-ego. Miejsce gdzie Smarty kompiluje szablony. Domyślnie to 
        <filename>templates_c</filename> w katalogu sysdir.</para>
        <para>Przykład:      <prompt>smarty_compile_dir = /var/smarty/compile/lms</prompt></para>
       </listitem>
          <listitem>
        <para>smarty_templates_dir</para>
        <para>Katalog z szablonami którymi Smarty-ego. Domyślnie to podkatalog templates z sys_dir'a.</para>
        <para>Przykład:     <prompt>smarty_templates_dir = /usr/share/lms/templates</prompt></para>
       </listitem>
         </itemizedlist>
     </para>
     </sect2>
     <sect2 id="install-config-finances">
     <title>Sekcja [finances] - konfiguracja finansów</title>
     <para>Sekcja ta zawiera opcje dotyczące naliczania opłat, a także
     dane do druków przelewu, których opis znajdziesz w rozdziale o fakturach.
         <itemizedlist>
          <listitem>
        <para>suspension_percentage (opcjonalny)</para>
        <para>Wartość procentowa obciążenia generowana dla obciążeń zawieszonych.
        Domyślnie: '0'</para>
        <para>Przykład:     <prompt>suspension_percentage = 50</prompt></para>
       </listitem>
       </itemizedlist>
       </para>
     </sect2>
    </sect1>
    <sect1 id="install-rights" xreflabel="Prawa dostępu">
      <title>Prawa dostępu</title>
      <sect2 id="install-rights-idea">
                <title>Idea</title>
      <para>LMS  ma  możliwość  zdefiniowania  do 256 reguł dostępu do systemu. Każda z nich może
      zabraniać, bądź pozwalać na dostęp do konkretnych modułów. Każdemu użytkownikowi można
      przydzielić dowolną kombinację reguł dostępu.</para>
      <para>Domyślnie zdefiniowana jest następująca lista reguł dostępu:
       <itemizedlist>
     <listitem><para>pełen dostęp</para></listitem>
        <listitem><para>odczyt wszystkich danych (z wyjątkiem Helpdesku)</para></listitem>
        <listitem><para>podłączanie i odłączanie komputerów</para></listitem>
        <listitem><para>zarządzanie finansami</para></listitem>
        <listitem><para>przeładowywanie konfiguracji</para></listitem>
        <listitem><para>zarządzanie klientami</para></listitem>
        <listitem><para>zarządzanie komputerami</para></listitem>
        <listitem><para>dostęp do statystyk</para></listitem>
        <listitem><para>dostęp do korespondencji seryjnej</para></listitem>
        <listitem><para>zarządzanie Helpdeskiem (RT)</para></listitem>
        <listitem><para>obsługa Helpdesku (RT)</para></listitem>
        <listitem><para>zarządzanie hostingiem</para></listitem>
        <listitem><para>konfiguracja interfejsu użytkownika</para></listitem>
        <listitem><para>zarządzanie sieciami i urządzeniami sieciowymi</para></listitem>
	<listitem><para>zarządzanie terminarzem</para></listitem>
	<listitem><para>zarządzanie i konfiguracja demona</para></listitem>
	<listitem><para>operacje kasowe</para></listitem>
        <listitem><para>zarządzanie grupami klientów</para></listitem>
	<listitem><para>zarządzanie grupami komputerów</para></listitem>
	<listitem><para>przypisywanie klientów do grup</para></listitem>
	<listitem><para>przypisywanie komputerów do grup</para></listitem>
	<listitem><para>zarządzanie kontami voip</para></listitem>
	<listitem><para>zarządzanie Userpanelem</para></listitem>
	<listitem><para>brak dostępu do modyfikacji i zakładania kont użytkowników</para></listitem>
        <listitem><para>brak dostępu</para></listitem>
       </itemizedlist>
      Niektóre z nich zezwalają na dostęp do modułów oraz dwie zabraniają. Moduły do których 
      użytkownik ma zawsze dostęp to: welcome, copyrights,  logout, chpasswd (przy czym 
      chpasswd umożliwia tylko zmianę własnego hasła), dostęp do reszty jest zdefiniowany regułami.</para>
      <note><para>Jeśli nie ustawimy użytkownikowi żadnej reguły dostępu, to LMS domyślnie
      przydzieli mu regułkę 0, czyli pełen dostęp.</para></note>
      </sect2>
      <sect2 id="install-rights-how">
                <title>Jak to działa?</title>
          <para>Decyzja  czy  użytkownik  ma prawo dostępu do modułu czy nie przebiega następująco:
          <simplelist>
          <member>-  najpierw  sprawdzana  jest  lista  modułów, do których zawsze ma się
          dostęp,</member>
          <member>-  potem  następuje sprawdzenie czy moduł pasuje do reguł w poszczególnych
          poziomach, do których użytkownik ma dostęp,</member>
          <member>-  na  końcu podejmowana jest decyzja czy użytkownik ma uprawnienia by
          do  modułu się dobrać. Jeżeli moduł się załapał na którykolwiek poziom, który zabrania dostępu,
          dostęp  zostanie  zabroniony  nawet  jeżeli użytkownik ma ustawiony poziom, który pozwala
          na dostęp do modułu (np.  ktoś  ma  pełny  dostęp oraz brak dostępu do modułu dodawania
          komputerów,  nie  będzie  on  mógł się odwołać do tego modułu). Jeżeli moduł pasuje do
          poziomu, który pozwala na dostęp do danego modułu LMS zezwala na dalszą pracę.
          Jeżeli natomiast moduł się nie "załapał" na żaden poziom również zostanie mu wyświetlony
          komunikat o braku dostępu.</member>
          </simplelist>
          </para>
     </sect2>
     <sect2 id="install-rights-user">
                <title>Reguły dostępu definiowane przez użytkownika</title>
          <para>Zaawansowani użytkownicy mają możliwość zdefiniowania dodatkowych
          dowolnych reguł dostępu lub przedefiniowania istniejących. W tym celu
          należy utworzyć skrypt PHP na wzór <filename>lib/accesstable.php</filename>.
          Lokalizację pliku podajemy w opcji <filename>custom_accesstable</filename> sekcji [phpui].</para>
          <para>W ten sposób można zdefiniować własne reguły zezwalające lub
          zabraniające dostępu do dowolnych modułów. Moduł to nazwa pliku PHP
          z katalogu <filename>modules</filename>, którą w regułach dostępu podajemy
          bez rozszerzenia. Dla przykładu, można zdefiniować uprawnienie do
          odczytu faktur (np. na potrzeby skryptu lms-sendinvoices) w następujący
          sposób:
<screen>
&lt;?php
$access['table'][100]['name']      = 'odczyt faktur';
$access['table'][100]['allow_reg'] = '^invoice$';
?&gt;
</screen>
          </para>
     </sect2>
    </sect1>
	<sect1 id="install-upgrade">
	<title>Upgrade</title>
		<para>Uaktualnienie LMS'a przebiega w kilku etapach. Zacznij od 
		sprawdzenia wymagań systemu, gdyż mogły ulec zmianie. Jeśli
		korzystasz z bazy MySQL powinieneś także zweryfikować uprawnienia
		użytkownika, one też ulegały zmianie w przeszłości.
		</para>
	<para>Najpierw utwórz katalog z plikami nowej wersji (nie zaleca się nadpisywania starych plików
      nowymi) oraz usuń zawartość katalogu <filename>templates_c</filename>.</para>
      <para>Następnie, jeśli nie masz jeszcze w systemie locali pl_PL.UTF-8, należy
      je utworzyć komendą:
      <screen>
# localedef -v -c -i pl_PL -f UTF-8 /usr/share/locale/pl_PL.UTF-8
</screen>
     Jeśli w interfejsie użytkownika znaki narodowe nie będą wyświetlane poprawnie
     możliwe, że trzeba będzie w pliku konfiguracyjnym serwera www (httpd.conf)
     ustawić:
     <screen>
AddDefaultCharset Off
</screen>
     oraz w konfiguracji PHP (php.ini) wyłączyć/zakomentować domyślne kodowanie:
     <screen>
;default_charset = "iso-8859-1"
</screen></para>
	<para>Kolejnym krokiem jest dokonanie zmian w bazie. Od wersji 1.3.1 wprowadzono automatyczną
	procedurę aktualizacji struktury bazy danych. Następuje ona za każdym razem podczas
	uruchomienia <emphasis>LMS-UI</emphasis> (jeszcze przed zalogowaniem do systemu).</para>
	<para>Ostatni etap - konwersja danych do unicodu.
      Począwszy od wersji 1.5.4 zaleca się przechowywanie danych zakodowanych w 
      utf-8 (UNICODE), poniżej zostanie przedstawiony przykład migracji z kodowania ISO-8859-2
      do UNICODE na bazie danych PostgreSQL.</para>
      <para>Zaczynamy od utworzenia backupu danych w LMSie. Następnie przechodzimy do
      katalogu z backupami i wykonujemy konwersję pliku backupu.
      <screen>
# iconv --from-code=ISO-8859-2 --to-code=UTF-8 < plik_backupu > nowy_plik
</screen>
     Po czym zmieniamy nazwę nowo powstałego pliku na lms-xxxxxxx.sql, aby
     plik ten był widoczny z poziomu <emphasis>LMS-UI</emphasis>. Teraz
     należy utworzyć bazę danych z kodowaniem UNICODE (opis w dziale Instalacja).
     Po czym uruchamiamy <emphasis>LMS-UI</emphasis> i odtwarzamy dane z 
     przekonwertowanego backupu.</para>
    <para><warning><para>Jeżeli używasz wersji pobranej z CVSu musisz dodatkowo
    zadbać o instalację biblioteki Smarty. Do katalogu <filename>/lib/Smarty</filename>
    wgraj zawartość katalogu <filename>/lib</filename> z paczki Smarty. Czynność
    (wraz z pobraniem biblioteki Smarty) automatycznie wykonuje skrypt
    <filename>/devel/smarty_install.sh</filename>.</para></warning></para>
	<sect2 id="install-upgrade-compat">
	<title>Zmiany w konfiguracji</title>
	<para>Poniżej znajduje się lista zmian (oraz numer wersji), które zrywają 
	zgodność z wcześniejszymi wydaniami. Zmiany najcześćiej dotyczą usunięcia
	jakiejś opcji/funkcji, zmiany nazwy opcji konfiguracyjnej, zachowania.</para>
	<table id="backward-compat">
	<title>Lista zmian zrywających zgodność z wcześniejszymi wydaniami</title>
		<tgroup cols="2" colsep="1" rowsep="1">
		<colspec COLWIDTH="60">
		<colspec COLWIDTH="600">
		<thead>
			<row>
				<entry ALIGN="center">Wersja</entry>
				<entry ALIGN="center">Opis zmiany</entry>
			</row>
		</thead>
		<tbody>
			<row>
				<entry ALIGN="center">1.11.8</entry>
				<entry ALIGN="left"><itemizedlist>
					<listitem><para>opcje smtp_* i debug_email przeniesiono z sekcji <emphasis>[phpui]</emphasis> do sekcji <emphasis>[mail]</emphasis></para></listitem>
					<listitem><para>lms-notify: opcję mailtemplate zastąpiono opcją debtors_template, opcję mailsubject zastąpiono opcją debtors_subject, usunięto parametr --template-file (-D)</para></listitem>
					<listitem><para>lms-notify-sms: opcję smstemplate zastąpiono opcją debtors_template, usunięto parametr --template-file (-D)</para></listitem>
				</itemizedlist></entry>
			</row>
		</tbody>
		</tgroup>
	</table>
	</sect2>
    </sect1>
    <sect1 id="install-documents">
	<title>Dokumenty</title>
	    <para>LMS umożliwia generowanie oraz przechowywanie przeróżnych
	    dokumentów tj. faktur, dowodów wpłat oraz dokumentów nie-finansowych
	    np. umów, protokołów. Dokumenty mogą być numerowane wg wzorców (planów)
	    numeracyjnych zdefiniowanych przy pomocy menu Konfiguracja - Plany
	    numeracyjne.</para>
    <sect2 id="tax-calculation">
	    <title>Sposób wyliczania podatku VAT</title>
	    <para>Poniżej przedstawiono sposób w jaki wyliczany jest podatek w LMS. Wartości wszystkich działań 
	    są zaokrąglane do dwóch miejsc po przecinku.</para>
            <para>W bazie LMS cena jednostkowa pozycji fakturowej jest przechowywana jako wartość brutto (z podatkiem).
	    <itemizedlist>
	    <listitem>
		<para>wartość podatku = (stawka podatku / 100) + 1</para>
		<para>Przykład: stawka podatku VAT to 22%</para>
		<para>wartość podatku = (22 / 100) + 1 = 1,22</para>
            </listitem>
	    <listitem>
		<para>cena jednostkowa netto = cena jednostkowa brutto / wartość podatku</para>
		<para>Przykład: cena brutto metra kabla wynosi 2,56 zł, a stawka podatku VAT to 22%</para>
		<para>cena jednostkowa netto = 2,56 zł / 1,22 = 2,10 zł</para>
            </listitem>
	    <listitem>
		    <para>sumaryczna cena brutto = cena jednostkowa brutto * ilość sztuk</para>
		    <para>Przykład: cena brutto metra kabla wynosi 2,56 zł, ilość metrów 1366, a stawka podatku VAT to 22%</para>
		    <para>cena sumaryczna brutto = 2,56 zł * 1366 m = 3496,96 zł</para>
            </listitem>	    
	    <listitem>
		    <para>cena sumaryczna netto = cena sumaryczna brutto / wartość podatku</para>
		    <para>Przykład: cena brutto metra kabla wynosi 2,56 zł, ilość metrów 1366, a stawka podatku VAT to 22%</para>
		    <para>cena sumaryczna netto = (2,56 zł * 1366 m = 3496,96 zł) / 1,22 = 2866,36 zł </para>
            </listitem>	    
	    </itemizedlist>
	    </para>
    </sect2>
    <sect2 id="install-invoices">
     <title>Faktury</title>
          <para>LMS umożliwia wystawianie faktur automatycznie i ręcznie. Ręczne wystawienie
          faktury jest możliwe z menu 'Nowa faktura' w panelu 'Finanse'. Automatyczne wystawianie faktur 
          wymaga włączenia tej opcji podczas przypisywania taryf użytkownikom. W takim wypadku
          zapisem faktur do bazy zajmuje się skrypt lms-payments lub demon <emphasis>lmsd</emphasis></para>
          <para>Do poprawnego działania i tworzenia wydruków wymagane jest ustawienie podstawowych parametrów faktury takich jak nagłówek, stopka, domyślny wystawca,
	miejsce wystawienia oraz konto bankowe w definicji firmy. Ponadto mamy do dyspozycji
          opcje sekcji <emphasis>[invoices]</emphasis> konfiguracji:
          <itemizedlist>
	  <listitem>
		<para>print_balance_history</para>
		<para>Określa czy na fakturze (html) drukować listę operacji finansowych 
		na koncie klienta. Domyślnie: nie ustawiona.</para>
		<para>Przykład: <prompt>print_balance_history = true</prompt></para>
          </listitem>
	  <listitem>
		<para>print_balance_history_limit</para>
		<para>Liczba rekordów na liście operacji finansowych na
		fakturze. Domyślnie: 10.</para>
		<para>Przykład: <prompt>print_balance_history_limit = 20000</prompt></para>
          </listitem>
          </itemizedlist>
          Wygenerowane faktury można obejrzeć w dwojaki sposób: albo poprzez ikonkę drukarki 
          na wykazie bilansu finansowego (ogólnego bądź pojedynczego użytkownika), albo 
          poprzez 'Lista faktur' z menu 'Finanse'. W przypadku listy faktur, możliwe jest 
          także filtrowanie faktur do wydruku.</para>

            <para>Podczas wydruku faktury domyślnie wyświetlany jest oryginał i kopia, można to zmienić:
    	    <itemizedlist>
            <listitem>
        	<para>default_printpage</para>
		<para>Lista oddzielonych przecinkiem nazw stron wydruku faktur. Można użyć zdefiniowane ciągi znaków "original", "copy" i "duplicate". Domyślnie: "original,copy".</para>
                <para>Przykład: <prompt>default_printpage = "original"</prompt></para>
            </listitem>
            </itemizedlist>
	    </para>
         <sect3 id="install-invoices-html">
          <title>HTML</title>
          <para>Przy domyślnych ustawieniach faktury wyświetlane są w
          formacie html wg domyślnego szablonu. W sekcji [invoices] masz
          do dyspozycji jeszcze następujące opcje:
          <itemizedlist>
          <listitem>
               <para>template_file</para>
               <para>Szablon faktury, który powinien znajdować się w
               katalogu <filename>templates</filename>. Domyślnie: invoice.html.</para>
               <para>Przykład: <prompt>template_file = invoice-mynet.html</prompt></para>
          </listitem>
          <listitem>
               <para>content_type</para>
               <para>Content-type dla faktury. Jeżeli wpiszesz tutaj 'application/octet-stream'
               to przeglądarka zechce wysłać plik do zapisania na dysku, zamiast go wyświetlić.
               Przydatne jeśli używasz własnego szablonu, który wygeneruje np.rtf'a lub xls'a.
               Domyślnie: 'text/html'</para>
               <para>Przykład: <prompt>content_type = application/octet-stream</prompt></para>
          </listitem>
          <listitem>
               <para>attachment_name</para>
               <para>Można podać nazwę pliku, jako który ma zostać zapisany gotowy
               wydruk. Domyślnie: pusta.</para>
               <para>Przykład: <prompt>attachment_name = faktura.xls</prompt></para>
          </listitem>
          </itemizedlist>
          Wynikowy dokument HTML zawiera oryginały 
          i kopie, które są oddzielone znacznikami podziału strony poprzez CSS. 
          Tak więc każda nowoczesna przeglądarka zgodna z CSS powinna bezproblemowo drukować 
          faktury ładnie podzielone na strony. Funkcja ta była testowana na przeglądarkach 
          Microsoft Internet Explorer 6.0, Opera 7.02 oraz Mozilla 1.3.</para>
          <para>
               <note><para>Praktycznie każda przeglądarka internetowa ma możliwość 
               konfiguracji wydruku, gdzie można wyłączyć funkcje takie jak drukowanie
               stopki i nagłówka, czy też adresu na wydruku.</para></note>
          </para>
         </sect3>     
         <sect3 id="install-invoices-pdf">
          <title>PDF</title>
          <para>Możliwe jest także tworzenie faktur jako pliki pdf. Przypisanie
          opcji <filename>type</filename> z sekcji <emphasis>[invoices]</emphasis> 
          wartości 'pdf' spowoduje, że faktury zamiast w html'u będą tworzone jako pliki 
          "portable data format". Opcja <filename>template_file</filename> spełnia podobną rolę jak dla faktur html'owych,
          z tym, że posiada predefiniowane wartości: 'standard' - faktura podstawowa 
          (odpowiednik invoice.html) i 'FT-0100' - faktura przystosowana do drukowania
          na drukach <ulink url="http://www.polarnet.org/produkty/ft-0100/">FT-0100</ulink> 
	  zawierających druk polecenia przelewu. W opcji <filename>template_file</filename>
          można także wstawić nazwę pliku php, jednak ta możliwość jest przeznaczona dla
          zaawansowanych użytkowników, gdyż wymaga utworzenia pliku php, a nie tak jak w 
          przypadku faktur html'owych szablonu Smarty.</para>
         </sect3>
         <sect3 id="install-invoices-cnote">
          <title>Korekty</title>
          <para>Faktury korygujące korzystają z ustawień dotyczących
	  pozostałych faktur z sekcji [invoices]. Domyślny szablon faktury
	  uwzględnia faktury korygujące. Jednak udostępniono opcję
	  pozwalającą na zdefiniowanie osobnego szablonu dla korekt (pozostałe
	  opcje są wspólne dla faktur i dla korekt):
          <itemizedlist>
          <listitem>
               <para>cnote_template_file</para>
               <para>Szablon faktury korygującej, który powinien znajdować się w
               katalogu <filename>templates</filename>. Domyślnie: invoice.html.</para>
               <para>Przykład: <prompt>cnote_template_file = invoice-mynet.html</prompt></para>
          </listitem>          
          </itemizedlist>
	  </para>
         </sect3>     
         <sect3 id="install-invoices-iban">
          <title>Automatyczne generowanie numeru konta bankowego</title>
          <para>LMS umożliwia automatyczne generowanie numeru konta bankowego w standardzie IBAN
	  zawierającego ID klienta. Funkcja ta może być używana do masowej identyfikacji płatności
	  która jako usługa znajduje się w ofercie większości banków. Aby masowa identyfikacja była
	  możliwa, należy podpisać umowę z bankiem z której potrzebne nam będą:
	  <itemizedlist>
		<listitem>
		    <para>Numer rozliczeniowy banku</para>
		    <para>zawsze stały dla każdego banku, złożony z 8 cyfr</para>
		</listitem>
		<listitem>
		    <para>Identyfikator rachunku</para>
		    <para>identyfikator naszego wirtualnego rachunku, złożony z 4 cyfr</para>
		</listitem>
	  </itemizedlist>
	  Gdy mamy potrzebne dane, definiujemy konto bankowe w
	  konfiguracji firmy (oddziału). System sam rozpozna (na podstawie długości), 
	  czy wprowadzono cały numer rachunku firmy czy prefiks do płatności masowych.
	  Prefix powinien składać się z 8 do 20 cyfr bez spacji i innych znaków.</para>
	  <para>Od tej pory jeśli używamy faktur PDF z szablonem FT-0100, lub drukujemy bloczki przelewu/wpłaty z
	  menu Finanse -> Wydruki -> Faktury -> Drukuj polecenia przelewu/wpłaty, każdy wydruk będzie zawierał
	  unikalny numer konta z zawartym ID naszego klienta. ID klienta zostanie dodane na końcu, oraz
	  poprzedzone odpowiednia ilością zer. Suma kontrolna będzie wyliczana automatycznie.
	  Więcej o IBAN w <ulink url="http://en.wikipedia.org/wiki/International_Bank_Account_Number">Wikipedii</ulink>
          </para>
         </sect3>
	</sect2>
	<sect2 id="install-transferforms">
	<title>Polecenia przelewu/wpłaty</title>
		<para>Dane do druków polecenia przelewu brane są z danych firmy do której
		przypisany jest dany klient. Tytuł płatności można ustawić przy użyciu
		opcji 'pay_title' w sekcji <emphasis>[finances]</emphasis>.
		Dotyczy to zarówno wydruków poleceń przelewu dostępnych w Finanse -> Wydruki 
		jak i wydruków faktur typu FT-0100.</para>
	</sect2>
	<sect2 id="install-receipts">
	<title>Dokumenty kasowe (KP/KW)</title>
          <para>Dokumenty kasowe, ze względu na swoją specyfikę, posiadają podobne 
	  opcje konfiguracyjne jak faktury.</para>
         <sect3 id="install-receipts-html">
          <title>HTML</title>
          <para>Przy domyślnych ustawieniach dokumenty kasowe wyświetlane są w
          formacie html wg domyślnego szablonu. Dla dowodów wpłaty oraz wypłaty
	  przewidziano wspólny szablon wydruku. W sekcji <emphasis>[receipts]</emphasis>
	  masz do dyspozycji jeszcze następujące opcje:
          <itemizedlist>
          <listitem>
               <para>template_file</para>
               <para>Szablon dowodu wpłaty/wypłaty, który powinien znajdować się w
               katalogu <filename>templates</filename>. Domyślnie: receipt.html.</para>
               <para>Przykład: <prompt>template_file = mytempl/receipt.html</prompt></para>
          </listitem>
          <listitem>
               <para>content_type</para>
               <para>Content-type dla druku. Jeżeli wpiszesz tutaj 'application/octet-stream'
               to przeglądarka zechce wysłać plik do zapisania na dysku, zamiast go wyświetlić.
               Przydatne jeśli używasz własnego szablonu, który wygeneruje np.rtf'a lub xls'a.
               Domyślnie: 'text/html'</para>
               <para>Przykład: <prompt>content_type = application/octet-stream</prompt></para>
          </listitem>
          <listitem>
               <para>attachment_name</para>
               <para>Można podać nazwę pliku, jako który ma zostać zapisany gotowy
               wydruk. Domyślnie: pusta.</para>
               <para>Przykład: <prompt>attachment_name = receipt.xls</prompt></para>
          </listitem>
          </itemizedlist>
	  </para>
        </sect3>
        <sect3 id="install-receipts-pdf">
    	    <title>PDF</title>
        	<para>Możliwe jest także tworzenie dokumentów kasowych jako plików pdf. Przypisanie
        	opcji <filename>type</filename> z sekcji <emphasis>[receipts]</emphasis> 
        	wartości 'pdf' spowoduje, że dowody zamiast w html'u będą tworzone jako pliki 
        	"portable data format". Opcja <filename>template_file</filename> spełnia podobną 
		rolę jak dla wydruków html'owych z tym, że posiada predefiniowaną wartość: 
		'standard' - wydruk podstawowy (odpowiednik receipt.html).
		W opcji <filename>template_file</filename> można także wstawić nazwę pliku php, 
		jednak ta możliwość jest przeznaczona dla zaawansowanych użytkowników, gdyż 
		wymaga utworzenia pliku php, a nie tak jak w przypadku html'a szablonu Smarty.</para>
        </sect3>
    </sect2>
    <sect2 id="install-debitnotes">
	<title>Noty obciążeniowe</title>
	<sect3 id="install-debitnotes-html">
		<title>HTML</title>
		<para>Przy domyślnych ustawieniach noty wyświetlane są w
		formacie html wg domyślnego szablonu. W sekcji <emphasis>[notes]</emphasis>
		masz do dyspozycji następujące opcje:
		<itemizedlist>
			<listitem>
				<para>template_file</para>
				<para>Szablon noty, który powinien znajdować się w
				katalogu <filename>templates</filename>. Domyślnie: note.html.</para>
				<para>Przykład: <prompt>template_file = mytempl/note.html</prompt></para>
			</listitem>
			<listitem>
				<para>content_type</para>
				<para>Content-type dla druku. Jeżeli wpiszesz tutaj 'application/octet-stream'
				to przeglądarka zechce wysłać plik do zapisania na dysku, zamiast go wyświetlić.
				Przydatne jeśli używasz własnego szablonu, który wygeneruje np.rtf'a lub xls'a.
				Domyślnie: 'text/html'</para>
				<para>Przykład: <prompt>content_type = application/octet-stream</prompt></para>
			</listitem>
			<listitem>
				<para>attachment_name</para>
				<para>Można podać nazwę pliku, jako który ma zostać zapisany gotowy
				wydruk. Domyślnie: pusta.</para>
				<para>Przykład: <prompt>attachment_name = receipt.xls</prompt></para>
			</listitem>
		</itemizedlist>
		</para>
        </sect3>
	</sect2>
    <sect2 id="install-documents-other" xreflabel="Dokumenty pozostałe">
	<title>Dokumenty pozostałe</title>
		<para>Oprócz dokumentów finansowych w LMSie można przechowywać
	    	dokumenty takie jak umowy, protokoły, aneksy i inne. Każemu klientowi
	    	można przypisać dowolną liczbę dokumentów na zakładce 'Dokumenty klienta'
	    	w panelu 'Informacje o kliencie' lub poprzez menu 'Dokumenty'. 
	    	Pliki z dokumentami przechowywane są poza bazą danych 
	    	(o czym należy pamiętać robiąc backupy) w katalogu 
	    	określonym zmienną 'doc_dir' w sekcji
	    	<emphasis>[directories]</emphasis> pliku konfiguracyjnego.
	    	</para>
		<para>Dokumenty mogą być importowane do systemu jako gotowe pliki, ale 
		także tworzone według szablonów przy użyciu zdefiniowanych kreatorów. Tutaj 
		system daje duże możliwości konfiguracji. W katalogu 
		<filename>documents/templates/default</filename>
		znajduje się domyślny kreator dokumentu (szablon i silnik). Użytkownik może utworzyć
		dowolną liczbę własnych kreatorów dokumentów, które należy 
		umieścić w katalogu <filename>documents/templates/</filename>.</para>
	    	<para>Każdy kreator powinien zawierać plik <filename>info.php</filename> o
		określonej strukturze:
<screen>
&lt;?php
$engine = array(
	'name' => 'default', 	// nazwa (katalogu) kreatora, małe litery i cyfry
	'engine' => 'default', 	// katalog z silnikiem (engine.php)
				// można używać silników z innych kreatorów
	'template' => 'template.html', 		// plik szablonu (w katalogu 'name')
	'title' => trans('Default document'), 	// opis, który będzie wyświetlany w LMS-UI
	'content_type' => 'text/html', 		// typ pliku wynikowego
	'output' => 'default.html', 		// nazwa pliku wynikowego
	'plugin' => 'plugin',			// nazwa pliku pluginu (w katalogu 'name')
	'post-action' => 'post-action',         // plik PHP wykonywany po dodaniu dokumentu (w transakcji)
);
?&gt;
</screen>
		Plik <filename>info.php</filename> opisuje kreatora i jest jedynym wymaganym
		plikiem. Do utworzenia dokumentu potrzebny jest silnik (plik o nazwie
		<filename>engine.php</filename>). Można utworzyć własny silnik lub
		skorzystać z innego, ustawiając zmienną 'engine' na nazwę kreatora, którego
		silnik chcemy wykorzystać. Nie ma zatem wymogu tworzenia własnego silnika
		dla każdego nowego kreatora, wystarczy utworzyć szablon 'template' i plik
		<filename>info.php</filename>.</para>
		<para>Zmienna <filename>plugin</filename> określa nazwę pliku php
		odpowiedzialnego za wyświetlenie dodatkowych pól w formularzu tworzenia
		nowego dokumentu. Plugin może ponadto zawierać obsługę błędów dla
		tych pól. Po dodaniu dokumentu wykonywany jest skrypt PHP określony w 
		zmiennej <filename>post-action</filename>.
		Prosty przykład pluginu i post-akcji przedstawiono w przykładowym 
		domyślnym dokumencie.</para>
    	</sect2>
    </sect1>
    <sect1 id="install-teryt" xreflabel="Baza TERYT">
	<title>Baza podziału terytorialnego (TERYT)</title>
	<para>LMS obsługuje bazę podziału terytorialnego TERYT w sposób umożliwiający przypisanie
	adresów zgodnych z zawartością tej bazy do komputerów oraz urządzeń sieciowych.
	Aby mieć możliwość wyboru adresów z listy należy zaimportować bazę TERYT.
	Służy do tego skrypt <xref linkend="lms-teryt">.
	</para>
    </sect1>
</chapter>
