LPS:Nastavení a úpravy Mediawiki pro support.zcu.cz (OLD)

Z Support
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(Aktualizováno pro verzi 1.19.)
m
Řádka 893: Řádka 893:
 
<pre>
 
<pre>
 
# Hostmaster
 
# Hostmaster
require_once ("extensions/zcu/SpecialHostmaster.php");
+
require_once ("extensions/zcu/Hostmaster.php");
  
 
# UserRequest
 
# UserRequest
require_once ("extensions/zcu/SpecialUserRequest.php");
+
require_once ("extensions/zcu/UserRequest.php");
  
 
# RTRequest
 
# RTRequest
require_once ("extensions/zcu/SpecialRTRequest.php");
+
require_once ("extensions/zcu/RTRequest.php");
  
 
# StagRequest
 
# StagRequest
require_once ("extensions/zcu/SpecialStagRequest.php");
+
require_once ("extensions/zcu/StagRequest.php");
 
</pre>
 
</pre>
  
 
[[Kategorie:Interní dokumentace|Nastavení a úpravy Mediawiki pro support.zcu.cz]]
 
[[Kategorie:Interní dokumentace|Nastavení a úpravy Mediawiki pro support.zcu.cz]]

Verze z 10:03, 28 srpen 2014

Návod je aktuální k Mediawiki verze 1.19.

Obsah

Konfigurace serveru

MySQL

Dle http://meta.wikimedia.org/wiki/Help:Short_words_in_searches je potřeba nastavit minimální délku slova pro vyhledávání na 3 znaky.

Apache

Idea provozu supportu ve dvou režimech (public, user) autentizovaný WebAuthem je založena na tom, že je Apache provozován na více portech:

  • port 80 (http) - neautentizovaný uživatel, pokuď je uživatel přihlášen, je mu umožněn uživatelský provoz
  • port 443 (https) - chráněno WebAuthem a je vyžadováno přihlášení

Apache2 s podporou autentizace WebAuth lze nakonfigurovat následnovně:

<VirtualHost _default_:80>
   ServerAdmin webmaster@service.zcu.cz
   ServerName daphne.civ.zcu.cz
   ServerAlias daphne

   ErrorLog /var/log/apache2/wiki-error.log
   TransferLog /var/log/apache2/wiki-access.log
   ServerSignature Off

   DocumentRoot /var/lib/mediawiki
   <Directory /var/lib/mediawiki/>
           Options +FollowSymLinks
           AllowOverride All
           order allow,deny
           allow from all
   </Directory>

   Alias /images /var/lib/mediawiki/images
   Include /etc/apache2/redirect.conf

   RewriteEngine On
   RewriteRule ^/nagios/cgi-bin/extinfo.cgi.*$ http://support.zcu.cz/index.php/P%C5%99ehled_dostupnosti_poskytovan%C3%BDch_slu%C5%BEeb

   <Directory /var/lib/mediawiki/images>
           Options +FollowSymLinks -Indexes
           AllowOverride None
   </Directory>
</VirtualHost><VirtualHost _default_:443>
   ServerAdmin webmaster@service.zcu.cz
   ServerName daphne.civ.zcu.cz
   ServerAlias daphne
   ServerSignature off

   ErrorLog /var/log/apache2/ssl-wiki-error.log
   TransferLog /var/log/apache2/ssl-wiki-access.log

   SSLEngine on
   SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
   SSLVerifyDepth 3
   SSLCertificateFile /etc/apache2/ssl/server.crt
   SSLCertificateKeyFile /etc/apache2/ssl/server.key
   SSLCertificateChainFile /etc/apache2/ssl/ca-chain.pem

   ServerSignature Off

   Include /etc/apache2/redirect.conf

   DocumentRoot /var/lib/mediawiki
   <Directory /var/lib/mediawiki/>
           Options +FollowSymLinks
           AllowOverride All
           order allow,deny
           allow from all

           #SSLVerifyClient optional
           #SSLVerifyDepth 9
           SSLOptions +ExportCertData +StdEnvVars +FakeBasicAuth +OptRenegotiate
           AuthType WebAuth
           require privgroup civ lps helps
           #require user vbaxa hana tana zewelova jhodis simha rskarda fiser kvochova
   </Directory>

   Alias /images /var/lib/mediawiki/images
   <Directory /var/lib/images>
           Options -FollowSymLinks
           AllowOverride None

           #SSLVerifyClient optional
           #SSLVerifyDepth 9
           SSLOptions +ExportCertData +StdEnvVars +FakeBasicAuth +OptRenegotiate
           AuthType WebAuth
           Require privgroup civ lps helps
           #require user vbaxa hana tana zewelova jhodis simha rskarda fiser kvochova

        </Directory>
</VirtualHost>

Dále se musí v /etc/php5/apache2/php.ini nastavit tyto volby (v sec):

session.cookie_lifetime = 36000
session.gc_maxlifetime = 36000

Toto musi byt v souladu s hodnotou $wgCookieExpiration v konfiguraci wiki (soubor LocalSettings.php).


Další závislosti

Některá rozšíření vyžadují, aby byl na serveru nainstalován balík graphviz.

Upgrade o patch level

Stáhnout novou verzi a rozbalit ji do /usr/local/mediawiki-VERZE/. Dalším krokem je úprava skriptů, které byly upraveny (jedná se zvláště o přihlašování). Seznam (nemusí být úplný je zde):

  • aplikovat patch pro Restrict stránky, neprovádět upgrade pokud patch neexistuje
  • upravit includes/SpecialSearch.php tak, aby podporoval vyhledávání google
  • includes/templates/Userlogin.php - změna přesměrování při přihlášení
  • zkontrolovat zákaz zobrazování tlačítek pro nepřihlášené uživatele
  • zkontrolovat zrušení zobrazování tlačítka pro diskusi pro všechny uživatele
  • zkontrolovat změny ve skinu
  • zkontrolovat kompatibilitu všech rozšíření a aktualizovat je

Viz také Manuálovou stránku k upgradování

Postup upgrade

Předpokládáme, že jsme na stroji, co na něm je wiki již nainstalována. Tzn. v databázi máme data wiki a obrázky v /opt/wiki-images.

Nejprve se ujistíme, že Apache a MySQL jsou nakonfigurovány v souladu s touto dokumentací.

Stáhneme mediawiki a rozbalíme do /opt/mediawiki-<verze>.

Prolinkujeme:

ln -sfn /opt/mediawiki-<verze> /var/lib/mediawiki
rm -r /opt/mediawiki-<verze>/images
ln -s /opt/wiki-images /var/lib/mediawiki/images

Máme dvě možnosti. Buď si zobrazíme wiki v prohlížeči a projdeme webový instalátor. Ten nám vygeneruje základ souboru LocalSettings.php a updatne databázi. Nebo si soubor LocalSettings.php přetáhneme ze staré instalace a spustíme:

php maintenance/update.php

čím zaktualizujeme databázi.

Upravíme LocalSettings.php.

Aplikujeme patch pro Page Restriction.

Nainstalujeme rozšíření.

Úpravy v LocalSettings.php

Kvůli starším rozšířením se musí na začátek souboru přidat následující řádky:

if ( !defined( 'MEDIAWIKI' ) ) {
        exit;
}

+$path = array( $IP, "$IP/includes", "$IP/languages" );
+set_include_path( implode( PATH_SEPARATOR, $path ) . PATH_SEPARATOR . get_include_path() );

$path = array( $IP, "$IP/includes", "$IP/languages" ); set_include_path( implode( PATH_SEPARATOR, $path ) . PATH_SEPARATOR . get_include_path() );

Změna nastavení cache:

$wgMainCacheType = CACHE_MEMCACHED;
$wgMemCachedServers = array (
  0 => '127.0.0.1:11211',
  );

Dál je třeba dát pozor na to aby proměnná $wgServer byla nastavená bez protokolu. Jinak se nenačítá css po přesměrování z webauthu. Takže něco jako:

$wgServer           = "//support.zcu.cz";

Následující nastavení je třeba přidat nakonec LocalSettings.php:

ini_set( 'memory_limit', '80M' );

$wgShowIPinHeader = false;
$wgDisableAnonTalk = true;

# nastaveni defaultniho uzivatele
$wgDefaultUserOptions ['editsection'] = 0;
$wgDefaultUserOptions ['date'] = 2;
$wgDefaultUserOptions ['timecorrection'] = '02:00';

# enable patrolling
# http://meta.wikimedia.org/wiki/Patrol
$wgUseRCPatrol = true;
# --- NAMESPACES ------------------------------------------------------------
$wgExtraNamespaces = array ( 
	100 => "CIV",
	101 => "CIV diskuse",
	102 => "LPS",
	103 => "LPS diskuse",
	104 => "SIS",
	105 => "SIS diskuse",
	106 => "HelpDesk",
	107 => "HelpDesk diskuse",
	108 => "Aktuality",
	109 => "Aktuality diskuse",
	110 => "Public",
	111 => "Public diskuse",
	112 => "PIS",
	113 => "PIS diskuse",
	114 => "KPS",
	115 => "KPS diskuse"
);

$wgNamespacesToBeSearchedDefault = array(
'NS_MEDIA'            => false,
'NS_SPECIAL'          => false,
'NS_MAIN'             => true,
'NS_TALK'             => false,
'NS_USER'             => false,
'NS_USER_TALK'        => false,
'NS_WIKIPEDIA'        => false,
'NS_WIKIPEDIA_TALK'   => false,
'NS_IMAGE'            => false,
'NS_IMAGE_TALK'       => false,
'NS_MEDIAWIKI'        => false,
'NS_MEDIAWIKI_TALK'   => false,
'NS_TEMPLATE'         => false,
'NS_TEMPLATE_TALK'    => false,
'NS_HELP'             => false,
'NS_HELP_TALK'        => false,
'NS_CATEGORY'         => true,
'NS_CATEGORY_TALK'    => false,
100 => false,
101 => false,
102 => false,
103 => false,
104 => false,
105 => false,
106 => false,
107 => false,
108 => true,
109 => false,
110 => true,
111 => false,
112 => false,
113 => false,
114 => false,
115 => false
);

# Enable subpages in the namespace
$wgNamespacesWithSubpages[0] = 1;
$wgNamespacesWithSubpages[100] = 1;
$wgNamespacesWithSubpages[102] = 1;
$wgNamespacesWithSubpages[104] = 1;
$wgNamespacesWithSubpages[106] = 1;
$wgNamespacesWithSubpages[108] = 1;
$wgNamespacesWithSubpages[110] = 1;
$wgNamespacesWithSubpages[112] = 1;
$wgNamespacesWithSubpages[114] = 1;

$wgUploadPath       = "$wgScriptPath/images";
$wgUploadDirectory  = "$IP/images";
# --- PERMISSIONS ---
$wgGroupPermissions['*'    ]['createaccount']   = false;
$wgGroupPermissions['*'    ]['read']            = true;
$wgGroupPermissions['*'    ]['edit']            = false;

$wgGroupPermissions['user' ]['move']            = false;
$wgGroupPermissions['user' ]['edit']            = false;
$wgGroupPermissions['user' ]['upload']          = true;
$wgGroupPermissions['user' ]['viewrestrict']    = false;

$wgGroupPermissions['editor']['edit']           = true;
$wgGroupPermissions['editor']['restrict']       = true;
$wgGroupPermissions['editor']['upload']         = true;
$wgGroupPermissions['editor']['move']           = true;
$wgGroupPermissions['editor']['delete']         = true;

$wgGroupPermissions['mediator']['protect']      = true;
$wgGroupPermissions['mediator']['patrol']       = true;
$wgGroupPermissions['mediator']['rollback']     = true;

$wgGroupPermissions['sysop']['restrict']        = true;

$wgGroupPermissions['pis']['edit']              = true;

#Na logo CIV se lze dostat odkazem [[Image:Logo_ZCU-support.png]]
$wgLogo = "{$wgUploadPath}/8/83/Logo_ZCU-support.png";

$wgVerifyMimeType = false;
$wgMimeDetectorCommand = "/usr/bin/file -bi";
$wgFileExtensions = array('png', 'jpg', 'jpeg', 'gif', 'dia', 'tar.gz', 'tgz', 'gz', 'pdf', 'zip', 'odt', 'odg');

## To enable image uploads, make sure the 'images' directory
## is writable, then uncomment this:
$wgEnableUploads                = true;
$wgUseImageResize               = true;
$wgUseImageMagick = true;
$wgImageMagickConvertCommand = "/usr/bin/convert";

# expirace prihlaseni po 10 hodinach
$wgCookieExpiration = 36000;

# Debug
#error_reporting(E_ALL);
#ini_set( 'display_errors', 1 );
#$wgShowExceptionDetails = true;

# Pokud je povolena cache parseru, vede to na bezpecnostni diru v page protectu
$wgParserCacheType  = CACHE_NONE;

Úpravy kódu a vzhledu

Úpravy stylu

Následující css je třeba vložit do MediaWiki:Common.css:

table.tabulka {
  background: #f9f9f9;
  padding: 1pt;
  border: 1px solid silver;
}
table.tabulka th {
  background: #a2bdc8;
  border: 1px solid black;
  padding: 0 2pt;
}
table.tabulka td {
  border: 1px dotted gray;
}

table.tabulka-red {
  background: #f9f9f9;
  padding: 1pt;
  border: 1px solid silver;
}
table.tabulka-red th {
  background: #ff3939;
  border: 1px solid black;
  padding: 0 2pt;
  color: white;
}


table.tabulka-red td {
  border: 1px dotted gray;
}

body.page-Hlavní_strana h1.firstHeading { display:none; }
body.page-Kiosek h1.firstHeading { display:none; }

/* X3 - FACELIFT na modrou JVS compliant variantu - srpen 2014 ----------------------------- */

/* V podstate predelani standardniho skinu Vector na neco, co je v souladu s JVS ZCU
   - uprava zahlavi (pozice, background, logo)
   - uprava horizontalni navigace (pozice, barvy) 
   - pridani hacku obarvujiciho element p-cactions v pripade, ze je stranka restricted a uzivatl ma moznost ji zverejnit
*/

div#mw-head {
  background: url("/skins/vector/headerBackground.png") repeat-x scroll 0 0 #23549b; 
  height: 95px;
}

#mw-page-base {
    height: 95px;
}

#left-navigation {
    top: 66px;
    left: 159px;
}

#right-navigation {
    margin-top: 66px;
}

div.vectorMenu,
div.vectorMenu h5 a,
div.vectorTabs,
div.vectorTabs ul li {
    height: 28px;
}

div.vectorTabs,
div.vectorTabs ul,
div.vectorTabs ul li,
div.vectorTabs ul li.selected,
div.vectorTabs span,
div.vectorMenu h5 a {
    background-image: none;
}

div.vectorTabs span a {
    padding-top: 6px;
}

#p-search form, #p-search input {
    margin: 0;
}

div.vectorMenu,
div.vectorTabs ul li {
    background-color: white;
}

div#mw-panel {
    top: 115px;
}

a.new, 
#p-personal a.new,
a.new:visited, 
#p-personal:visited a.new {
    color: #FFCB00 !important;
    font-weight: bold !important;
}

#p-personal a {
    color: white;
}

#pt-userpage, #pt-anonuserpage, #pt-login {
    background: url("/skins/vector/icon_user.png") no-repeat scroll 0 0 transparent;
}

div.vectorMenu,
div.vectorTabs li {
    border-right: 1px solid #e8e8e8;
    border-top: 1px solid #132d52;
}

div.vectorTabs li:first-child {
    border-left: 1px solid #132d52;
}

#left-navigation div.vectorTabs li:last-child {
    border-right: 1px solid #132d52;
}

div.vectorMenu {
    border-right: 1px solid #132d52;
}

Dále je třeba přetáhnout následující věci:

  • 2x NEW soubor
    • /skins/Vector.php - 2 zmeny
    • /skind/vector/screen.css - 1 zmena
  • 2x "OLD" soubor
    • /skins/Vector_old.php
    • /skind/vector/screen_old.css
  • 3x obrazek
    • /skins/vector/headerBackground.png
    • /skins/vector/headerLogo.png
    • /skins/vector/icon_user.png

Zrušení tlačítek pro nepřihlášené uživatele

V souboru includes/SkinTemplate.php je třeba řádek:

$userCanRead = $title->quickUserCan( 'read', $user );

změnit na:

$userCanRead = $user->getId() != 0 && $title->quickUserCan( 'read', $user );

Zrušení zobrazování tlačítka pro diskusi

V includes/SkinTemplate.php zakomentovat následující řádky:

                        $content_navigation['namespaces'][$talkId] = $this->tabAction(
                                      $talkPage, array( "nstab-$talkId", 'talk' ), $isTalk && !$preventActiveTabs, '', $userCanRead
                        );
                        $content_navigation['namespaces'][$talkId]['context'] = 'talk';

A pro zrušení vyhledávání v diskusích se v includes/search/SearchEngine.php ve funkci searchableNamespaces(), podmínka

                        if( $ns >= NS_MAIN ) {
                                $arr[$ns] = $name;
                        }

upraví na

                        if( ($ns >= NS_MAIN) && (($ns%2) == 0) ) {
                                $arr[$ns] = $name;
                        }

Trik spočívá v tom, že diskuse jsou vždy liché.

Změna diskuse v uživatelských url na Public

V souboru /includes/SkinTemplate.php je ve funkci builPersonalUrls() přidat nový kód pro zobrazení public namespace a zakomentovat starý kód pro diskuse. Výsledek by měl vypadat takto:

                        $userpublicUrlDetails = $this->makeUrlDetails('Public:' .$this->username);
                        $personal_urls['public'] = array(
                                'text' => 'public',
                                'href' => &$userpublicUrlDetails['href'],
                                'class' => $userpublicUrlDetails['exists']?false:'new',
                                'active' => ( $userpublicUrlDetails['href'] == $pageurl )
                        );
#                       $usertalkUrlDetails = $this->makeTalkUrlDetails($this->userpage);
#                       $personal_urls['mytalk'] = array(
#                               'text' => wfMsg('mytalk'),
#                               'href' => &$usertalkUrlDetails['href'],
#                               'class' => $usertalkUrlDetails['exists']?false:'new',
#                               'active' => ( $usertalkUrlDetails['href'] == $pageurl )
#                       );

Popis uživatelských skupin

Práva se uživatelům nastavují tak, že se zařadí do patřičné skupiny. Práva skupiny se nastavují v LocalSettings.php proměnnou $wgGroupPermissions.

anonymous

Nepřihlášený uživatel, který má právo jen prohlížet nechráněné stránky. Pro získání vyšších práv je třeba se přihlásit.

editor

Možnost editovat stránky, nemá právo pro zamykání, ale je mu umožněna restrikce.

mediator

Má právo zamykání stránek proti editaci a nastavení restrict.

sysop

Administrátor, má všechny práva, kromě změny práv.

byrokrat

Umožňuje měnit oprávnění.

restrict

Může označovat stránky za stránky s omezeným přístupem.

viewrestrict

Může prohlížet stránky s omezeným přístupem.

Příhlášení webauthem

Příhlášení webauthem je realizováné prostřednictvím rozšíření AutomaticREMOTE_USER s droubnou úpravou.

Instalace

Rozšíření rozbalíme do složky extensions a do LocalSettings.php přidáme následující řádky:

require_once( "$IP/extensions/Auth_remoteuser/Auth_remoteuser.php" );
$wgAuth = new Auth_remoteuser();

Dále je třeba v LocalSettings.php vypnout cache parseru, jinak to vede na bezpečnostní díru:

$wgParserCacheType  = CACHE_NONE;

Úpravy

Je třeba upravit dva soubory. V zdrojovém kódu rozšíření se musí zakomentovat řádek následujícím způsobem:

--- Auth_remoteuser.php
+++ Auth_remoteuser.php
@@ -81,7 +81,7 @@ $wgAuthRemoteuserDomain = "NETBIOSDOMAIN"; /* Remove NETBIOSDOMAIN\ from the beg
 /* User's mail domain to append to the user name to make their email address */
 $wgAuthRemoteuserMailDomain = "example.com";

-$wgExtensionFunctions[] = 'Auth_remote_user_hook';
+//$wgExtensionFunctions[] = 'Auth_remote_user_hook';

 /**
  * This hook is registered by the Auth_remoteuser constructor.  It will be

Dále je třeba vložit následující řádky do souboru includes/templates/Userlogin.php:

--- Userlogin.php
+++ Userlogin.php
@@ -29,6 +29,21 @@ class UserloginTemplate extends QuickTemplate {
        <div class="visualClear"></div>
 <?php } ?>

+<?php
+# zcu login hack
+# presmerujeme na https
+if (empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] === "off") {
+       header("Location: https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
+       die();
+}
+# zavolame rozsireni na autentikaci
+require_once( "extensions/Auth_remoteuser/Auth_remoteuser.php" );
+Auth_remote_user_hook();
+# presmerujeme uzivatele zpet odkud prisel
+header("Location: https://daphne.civ.zcu.cz/index.php/".$_GET['returnto']."");
+die();
+?>
+
 <div id="loginstart"><?php $this->msgWiki( 'loginstart' ); ?></div>
 <div id="userloginForm">
 <form name="userlogin" method="post" action="<?php $this->text('action') ?>">

Page Restriction - omezení přístupu

Jedná se o patch z MediaWiki. Rozšíření přidává možnost blokovat/odblokovávat stránky (právo restrict) a prohlížení blokovaných stránek (právo viewrestrict). Na tyto stránky je třeba mít zvláštní právo.

Verze na stránce s rozšířením je zastaralá. Patch upravený pro verzi 1.19 lze najít zde (přišel mi příliš dlouhý pro vložení přímo sem).

Vyhledávání přes Google

Postup zhruba podle stránek [1]. V souboru includes/specials/SpecialSearch.php upravíme funkci showResults( $term ) následovně:

--- SpecialSearch.php
+++ SpecialSearch.php
@@ -403,6 +403,10 @@ class SpecialSearch extends SpecialPage {
                if( $num || $this->offset ) {
                        $out->addHTML( "<p class='mw-search-pager-bottom'>{$prevnext}</p>\n" );
                }
+                if ( ! $wgDisableTextSearch ) {
+                        $out->addWikiText( wfMsg( 'Googlesearchheader' ) );
+                        $out->addHTML( wfMsg( 'Googlesearch', $term ) );
+                }
                wfProfileOut( __METHOD__ );
        }

Dále vytvoříme systémové hlášení Googlesearchheader přístupem na MediaWiki:Googlesearchheader kam vložíme něco chytrého jako:

===Hledání Googlem===
Můžete zkusit vyhledávání Googlem; je ale možné, že jeho výsledky nemusí být aktuální.

Dále je potřeba nastavit odeslání hledaného řetězce v utf-8, to se provede úpravou MediaWiki:Googlesearch, tak aby skryté položky 'ie' a 'oe' obsahovaly 'utf-8' (nahradí se proměnna $2), asi takto:

<input type="hidden" name="ie" value="utf-8" />
<input type="hidden" name="oe" value="utf-8" />

Google Analytics

Postupovat dle návodu http://www.mediawiki.org/wiki/Extension:Google_Analytics_Integration, identifikátor je UA-19622695-1. Prohlížení je dostupné na https://www.google.com/analytics/reporting/?id=38863334 (je třeba získat oprávnění od phanousk nebo svamberg, předpokládá se vlastnictví google účtu).

Rozšíření

Rozšíření s přímočarou instalací

Instalace následujích rozšíření vyžaduje pouze jejich stažení, rozbalení do adresářeextensions a vložení příslušného include do LocalSettings.php.

AnyWebSite

Původní je k dosažení na mediawiki, my máme dopsanou podporu pro parametry 'width' a 'height' trošičku jinak. Následující kód vložit do /var/lib/mediawiki/extensions/anywebsite.php:

<?php
# Tag :
#   <anyweb [width="<size in px>"] [height="<size in px>"]>website</anyweb>
# Ex :
#   from url http://aurora1.sourceforge.net
#   <anyweb>http://aurora1.sourceforge.net</anyweb>
#   <anyweb width="100" height="200">http://aurora1.sourceforge.net</anyweb>
# 
# Enjoy !
$wgExtensionFunctions[] = 'wfanyweb';
$wgExtensionCredits['parserhook'][] = array(
        'name' => 'anysite extension',
        'description' => 'Display sites',
        'author' => 'Minseong Kim and Others',
        'url' => 'http://www.mediawiki.org/wiki/Extension:Anysite'
);

function wfanyweb() {
        global $wgParser;
        $wgParser->setHook('anyweb', 'renderanyweb');
}

# The callback function for converting the input text to HTML output
function renderanyweb($input, $params = array()) {
        $width = 800;
        $height = 600;

        if (array_key_exists('width', $params))
                $width = $params['width'];

        if (array_key_exists('height', $params))
                $height = $params['height'];

        $output= '<iframe name="anyweb" src="'.htmlspecialchars($input).'" width="'.$width.'" height="'.$height.'" frameborder="0">'.'</iframe>';
        return $output;
}

?>

A do LocalSettings.php přidat řádky:

# embeding webpages
include("extensions/anywebsite.php");


External Links

Stáheneme ze stránky rozšíření a do LocalSettings.php přidáme:

#http://www.mediawiki.org/wiki/Extension:ExternalLinks
require_once( "$IP/extensions/ExternalLinks/ExternalLinks.php" );
$wgELuserRight = 'delete'; // default: edit
$wgELvalidationMode = 'cURL';

Graphical Category Browser

Graphical Category Browser zobrazuje závislosti kategorií mezi sebou, lze postupovat podle návodu, ale je třeba dát pozor na:

  • upravu práv adresáře images/xyGraphvizCache: chmod www-data:www-data /var/lib/mediawiki/images/xyGraphvizCache
  • poslední znak ve skriptu musí být ?> jinak hlásí chybu, že nelze modifikovat hlavičku, protože již byla odeslána, tedy ani odřádkování
  • ve skriptu zakomentovat řádek $wgHooks['CategoryPageView'][] = 'xyCategoryGraphHook'; jinak nezobrazuje stránky s kategoriemi, dočasně může zobrazovat chybu memcached, ktery hlásí problem se serializací, mělo by stačit jej restartnout nebo chvíli vyčkat

Dále chceme, aby se graf kategorií zobrazoval pouze na stránkách kategorií, které obsahují tag <GraphicalCategory />. Proto je třeba na rozšíření aplikovat následující patch:

diff --git xyCategoryBrowser.php xyCategoryBrowser.php
index f406da7..6df7224 100644
--- xyCategoryBrowser.php
+++ xyCategoryBrowser.php
@@ -97,7 +97,19 @@ class xyCategoryHook {
   public static function hookSetup() {
     global $IP, $wgMessageCache, $wgHooks;
  
-    $wgHooks['CategoryPageView'][] = 'xyCategoryHook::hook';
+    //$wgHooks['CategoryPageView'][] = 'xyCategoryHook::hook';
+
+    $wgHooks['ParserFirstCallInit'][] = 'setupParserHook';
+ 
+    function setupParserHook( Parser $parser ) {
+	$parser->setHook( 'GraphicalCategory', 'xyCategoryHook::parserHook' );
+	return true;
+}
+  }
+
+  public static function parserHook($input, array $args, Parser $parser, PPFrame $frame) {
+	xyCategoryHook::hook($parser->getTitle());
+	return "";
   }
  
   /**
@@ -105,18 +117,18 @@ class xyCategoryHook {
    *
    * @param $cat category
    */ 
-  public static function hook($cat) {
+  public static function hook($title) {
     require_once 'xyCategoryGraph.php';
     global $wgOut, $xyCategoriesMaxAge;
     $wgOut->setSquidMaxage( $xyCategoriesMaxAge );
-    $title = $cat->getTitle();
+    //$title = $cat->getTitle();
     $dbKey = $title->getDBkey();
     $cap = new xyCategoryGraph();
     $age = $cap->cacheAge($dbKey);
     if (!$age || $age > $xyCategoriesMaxAge ) {
       $cap->doQuery($title);
       $cap->doDot($dbKey);
-      };
+    };
     $cap->showImg($dbKey);
     return true;
     }

Dynamic Page List

Instalace podle stránky rozšíření. Dále je třeba na soubory rozšíření aplikovat následující patch pro přidání volby addfirstparagraph:

--- DPL.php
+++ DPL.php
@@ -16,6 +16,7 @@ class DPL {
 	var $mIncSecLabelsMatch    = array(); // array of match patterns for sections to transclude
 	var $mIncSecLabelsNotMatch = array(); // array of NOT match patterns for sections to transclude
 	var $mIncParsed;    // whether to match raw parameters or parsed contents
+	var $mIncFirstPar;
 	var $mParser;
 	var $mParserOptions;
 	var $mParserTitle;
@@ -32,7 +33,7 @@ class DPL {
 		$includemaxlen, $includeseclabels, $includeseclabelsmatch,
 		$includeseclabelsnotmatch, $includematchparsed, &$parser, $logger,
 		$replaceInTitle, $iTitleMaxLen, $defaultTemplateSuffix, $aTableRow,
-		$bIncludeTrim, $iTableSortCol, $updateRules, $deleteRules
+		$bIncludeTrim, $iTableSortCol, $updateRules, $deleteRules, $includefirstparagraph
 	) {
 	   	global $wgContLang;
 
@@ -49,6 +50,8 @@ class DPL {
 			$this->mIncParsed            = $includematchparsed;
 		}
 
+		$this->mIncFirstPar = $includefirstparagraph;
+
 		if ( isset( $includemaxlen ) ) {
 			$this->mIncMaxLen = $includemaxlen + 1;
 		} else {
@@ -348,7 +351,7 @@ class DPL {
 		}
 
 		// other list modes
-		$sk = & $wgUser->getSkin();
+		$sk = $wgUser->getSkin();
 
 		// process results of query, outputing equivalent of <li>[[Article]]</li> for each result,
 		// or something similar if the list uses other startlist/endlist;
@@ -381,7 +384,7 @@ class DPL {
 			}
 
 			// Page transclusion: get contents and apply selection criteria based on that contents
-			if ( $this->mIncPage ) {
+			if ( $this->mIncPage || $this->mIncFirstPar ) {
 				$matchFailed = false;
 				if ( empty( $this->mIncSecLabels ) || $this->mIncSecLabels[0] == '*' ) { // include whole article
 					$title = $article->mTitle->getPrefixedText();
@@ -737,11 +740,17 @@ class DPL {
 			}
 
 			// add included contents
-			if ( $this->mIncPage ) {
+			if ( $this->mIncPage || $this->mIncFirstPar ) {
 				DPLInclude::open(
 					$this->mParser, $this->mParserTitle->getPrefixedText()
 				);
+
+				if ( $this->mIncFirstPar && preg_match("/^(.*)[\n=]/", $incwiki, $match) ) {
+					$incwiki = $match[0];
+				}
+
 				$rBody .= $incwiki;
+
 				DPLInclude::close(
 					$this->mParser, $this->mParserTitle->getPrefixedText()
 				);
diff --git DPLMain.php DPLMain.php
index c8a708d..06fd8ad 100644
--- DPLMain.php
+++ DPLMain.php
@@ -230,6 +230,8 @@ class DPLMain {
 
 		$bAddEditDate = self::argBoolean( ExtDynamicPageList::$options['addeditdate']['default'] );
 
+		$bAddFirstParagraph = self::argBoolean( ExtDynamicPageList::$options['addfirstparagraph']['default'] );
+
 		$bAddUser		 = self::argBoolean( ExtDynamicPageList::$options['adduser']['default'] );
 		$bAddAuthor	   = self::argBoolean( ExtDynamicPageList::$options['addauthor']['default'] );
 		$bAddContribution = self::argBoolean( ExtDynamicPageList::$options['addcontribution']['default'] );
@@ -1303,6 +1305,13 @@ class DPLMain {
 					}
 					break;
 
+				case 'addfirstparagraph':
+                               		if( in_array($sArg, ExtDynamicPageList::$options['addfirstparagraph'] ) )
+                                       		$bAddFirstParagraph = self::argBoolean( $sArg );
+                               		else
+                                       		$output .= $logger->msgWrongParam('addfirstparagraph', $sArg);
+	                               break;
+
 				/**
 				 * FORMAT/HTML PARAMETERS
 				 * @todo allow addpagetoucheddate, addeditdate, adduser, addcategories to have effect with 'mode=category'
@@ -3167,7 +3176,7 @@ class DPLMain {
 			$iIncludeMaxLen, $aSecLabels, $aSecLabelsMatch, $aSecLabelsNotMatch,
 			$bIncParsed, $parser, $logger, $aReplaceInTitle, $iTitleMaxLen,
 			$defaultTemplateSuffix, $aTableRow, $bIncludeTrim, $iTableSortCol,
-			$sUpdateRules, $sDeleteRules
+			$sUpdateRules, $sDeleteRules, $bAddFirstParagraph
 		);
 
 		if ( $rowcount == - 1 ) {
diff --git DPLSetup.php DPLSetup.php
index 2a57e27..bbadaba 100644
--- DPLSetup.php
+++ DPLSetup.php
@@ -528,6 +528,9 @@ class ExtDynamicPageList {
 		'addpagetoucheddate'   => array( 'default' => 'false', 'true', 'no', 'yes', '0', '1', 'off', 'on' ),
 		'adduser'			  => array( 'default' => 'false', 'true', 'no', 'yes', '0', '1', 'off', 'on' ),
 
+		'addfirstparagraph'  => array( 'default' => 'false', 'true', 'no', 'yes', '0', '1', 'off', 'on' ),
+
+
 		// default of allowchacheresults depends on behaveasIntersetion and on LocalSettings ...
 		'allowcachedresults'   => array( 'true', 'false', 'no', 'yes', 'yes+warn', '0', '1', 'off', 'on' ),
 		/**

Wikifeeds

Rozšíření se už nevyvíjí, ale mělo by stále fungovat. Překopírujeme ze staré instalace a do LocalSettings.php přidáme:

# wiki feeds
require_once("extensions/GenericXmlSyndicationFeed.php");
require_once("extensions/SpecialWikiFeeds.php");
$wgWikiFeedsSettings['cacheEnable'] = false;

ZČU rozšíření

Rozšíření bylo třeba pro Mediawiki 1.19 mírně předělat. Protože se rozpadla do více souboruů, jsou umístěna souhrně do adresáře zcu. Následující přidat do LocalSettings.php:

# Hostmaster
require_once ("extensions/zcu/Hostmaster.php");

# UserRequest
require_once ("extensions/zcu/UserRequest.php");

# RTRequest
require_once ("extensions/zcu/RTRequest.php");

# StagRequest
require_once ("extensions/zcu/StagRequest.php");
Osobní nástroje
Jmenné prostory

Varianty
Zobrazení
Akce
Kdo jsem
Navigace
Často hledaná témata
Nástroje