Manual:Writing maintenance scripts/cs

Tato příručka krok za krokem popisuje, jak psát údržbářské skripty, které se spouštějí na straně serveru na příkazovém řádku. Jsou založené na třídě  (viz ), která je implementovaná od MediaWiki verze 1.16

Ukázkový skript
Projdeme si skript údržby, který jednoduše vypíše "Hello, World". Tento skript obsahuje minimální množství kódu potřebného ke spuštění a hlavičku s uvedením autorských práv, která by neměla nikdy chybět (jaké lze použít hlavičky článek viz hlavičky autorských práv):

Skript vrací pouze "Hello, World!", ale již lze použít  (a vypsat další parametry pro jeho použití na příkazovém řádku). Viz ukázkový výstup:

 $ php helloWorld.php Hello, World! $ php helloWorld.php --help

Usage: php helloWorld.php [--conf|--dbgroupdefault|--dbpass|--dbuser|--globals|--help|--memory-limit|--mwdebug|--profiler|--quiet|--server|--wiki]

Generic maintenance parameters: --help (-h): Display this help message --quiet (-q): Whether to suppress non-error output --conf: Location of LocalSettings.php, if not default --wiki: For specifying the wiki ID   --globals: Output globals at the end of processing for debugging --memory-limit: Set a specific memory limit for the script, "max" for no limit or "default" to avoid changing it   --server: The protocol and server name to use in URLs, e.g.        https://en.wikipedia.org. This is sometimes necessary because server name detection may fail in command line scripts. --profiler: Profiler output format (usually "text") --mwdebug: Enable built-in MediaWiki development settings

Script dependent parameters: --dbuser: The DB user to use for this script --dbpass: The password to use for this script --dbgroupdefault: The default DB group to use.

$

Ve stručnosti:


 * Zahrne soubor . V něm je definována třída , která obsahuje metody pro analýzu předaných argumentů, čtení dat z konzole, pro zajištění přístupu do databáze atd. Je žádoucí ve skriptu byla k   uvedena plná, nikoliv relativní, cesta.


 * Naše třída je pouze rozšířením třídy Maintenance


 * které řekne třídě Maintenance, aby spouštěla skript přes naši třídu, jen když poběží na příkazovém řádku. Po zavolání interní proměnné   se načte další soubor , který načte konfiguraci a na jejím základě pak automaticky i další třídy MediaWiki.


 * A pak zavolá námi definovanou funkci, a náš skript dokončí svou práci.

Přidáváme popis
„Na co je ale dobrý tenhle údržbářský skript?” Už slyším, jak se ptáte.

Proto můžeme pomocí metody  do našeho konstruktoru přidat popis, který se zobrazí hned na začátku výstupu při použití parametru " ":

Takže teď už bude vracet náš popis:

$ php helloWorld.php --help

Say hello.

Usage: php helloWorld.php [--conf|--dbgroupdefault|--dbpass|--dbuser|--globals|--help|--memory-limit|--mwdebug|--profiler|--quiet|--server|--wiki] …

Volby a zpracování jejich hodnot
Pozdravit celičký svět je nepochybně správné a dobré, ale my chceme, aby ten skript uměl pozdravit i konkrétního jednotlivce.

Abyste přidali další volbu příkazového řádku, přidejte do třídy  konstruktor, co zavolá ze třídy   metodu , která zaaktualizuje metodu  , aby zahrnula i vaši novou volbu. Parametry metody  jsou , takže:

V tuto chvíli se po spuštění výstup skriptu  bude měnit, podle toho jakou předáte hodnotu argumentu:

 $ php helloWorld.php Hello, World! $ php helloWorld.php --name=Mark Hello, Mark! $ php helloWorld.php --help

Say hello.

Usage: php helloWorld.php [--conf|--dbgroupdefault|--dbpass|--dbuser|--globals|--help|--memory-limit|--mwdebug|--name|--profiler|--quiet|--server|--wiki] … Script specific parameters: --name: Who to say Hello to

Rozšíření
Pokud váš údržbářský skript vyžaduje funkce, které nabízí nějaké rozšíření, měli byste přidat také požadavek, aby bylo nejprve tohle rozšíření nainstalováno:

Pokud požadované rozšíření ještě není na dané wiki k dispozici (což se na wiki farmách občas stane). Vrátí skript pěkné chybové hlášení. Ovšem fungovat to bude jen u těch rozšíření, co se registrují přes soubor.

Pamatujte prosím na to, že se třídami co jsou definované v tomto rozšíření nebudete moct pracovat, dokud se nezavolá funkce. Pokud tedy vytvoříte instanci třídy dříve, např. v konstruktoru, bude výsledkem to že vaše třída neošetří správným způsobem výjimky.

Psaní testů
Je doporučeno abyste pro vaše údržbářské skripty psali i testy, tak jako u každé jiné třídy. Nápovědu a ukázkové příklady, jak se to dělá najdete na stránce Jak psát testy pro údržbářské skripty.