Mając odpowiednio spreparowaną strukturę katalogów i plików zdjęć (pisałem o tym wcześniej) można wygenerować galerię w formacie mediawiki. Konwersja jest kolejnym etapem więc lektura wcześniejszego opisu jest niezbędna.
Mówiąc w skrócie dodatkowy etap jest potrzebny ze względu na inny sposób obsługi zdjęć przez medialiwi. Tutaj, w odróżnieniu od dokuwiki, pliki są trzymane w automatycznie tworzonych podkatalogach a dodatkowe dane o zdjęciu wędrują do bazy danych (mysql). Sprawa wygląda na skomplikowaną ale to tylko pozory
Do zabawy będziemy potrzebowali dodatkowych skryptów:
Tak jak poprzednio skrypty są przeznaczone dla systemu Linux. Nie będą potrzebne żadne dodatkowe rekwizyty czy uprawnienia w systemie - wystarczy dostęp do shell (linii poleceń).
Wcześniej napisałem, że pliki zdjęć są nieco inaczej traktowane w mediawiki niż w dokuwiki. Na czym konkretnie polegają różnice?
Dokuwiki:
Mediawiki:
Na pierwszy rzut oka problemem będzie unikalność nazw plików. Wyjściem jest zastosowanie szablonu dzięki któremu będziemy mieli porządek w danych a odpowiednie pliki będą mogły być łatwo dostępne z poziomu wyszukiwarki mediawiki.
obiekt_miejsce_data_numer.rozszerzenie
obiekt i miejsce są zapisane bez polskich znaków, w mianowniku liczby pojedynczej;
data wykonania zdjęcia zapisana w formacie YYYYMMDD;
numer to 3-cyfrowa liczba losowa zapewniająca unikalność nazwy pliku;
na przykład:
kosciol_olsztyn_20020921_202.jpg zamek_golub-dobrzyn_20050709_120.jpg zamek_lidzbark_warminski_20030607_090.jpg
WAŻNE!
Wszystkie skrypty działają bezpośrednio na plikach, nie wykonując wcześniej żadnych kopii roboczych! Pamiętaj o zabezpieczeniu oryginałów zdjęć.
Opis poniżej dotyczy konwersji do struktur danych mediawiki 1.4.x (skrypty nie zadziałają z wersją 1.5.x!)
Skrypt przenosi zdjęcia ze struktury
autor/obiekt/województwo/miejscowość/data/plik.jpg
do struktury
obiekt_miejscowość_data_numer.jpg
Skrypt tworzy także plik zawierający instrukcje SQL aktualizujące bazę danych mediawiki.
Parametry wywołania to:
Plik: rfr.sh
#! /bin/bash # Skrypt zmieniajacy nazwy plikow dla mediawiki # Utworzony na licencji GNU GPL # (C) 2005 Olsztynska Strona Rowerowa # # konwencja wywolania: # DIR nazwa katalogu w ktorym beda konwertowane zdjecia # ID id uzytkownika w systemie mediawiki # USER nazwa uzytkownika o danym ID DIR=$1 if [ -z "$DIR" -o ! -d "$DIR" ]; then DIR="."; fi ID=$2 if [ -z "$ID" ]; then ID=1; fi USER=$3 if [ -z "$USER" ]; then USER="Admin"; fi find $DIR -type f| grep -v out| egrep "(jpg|png|jpeg|gif)" | awk -v user=$USER -v id=$ID -F/ ' function toword(s) { return toupper(substr(s,1,1)) substr(s,2) } { OUT="out"; sprintf("rm -fr %s && mkdir %s", OUT, OUT)| getline rc; source=$0 split($(NF-1), d, "-") date=d[1]d[2]d[3] object=toword($(NF-4)) # nazwa pliku musi byc z duzej litery location=toword($(NF-2)) number=sprintf("%03d", int(rand()*1000)) split($NF, p, ".") suffix=tolower(p[2]) file=object"_"location"_"date"_"number"."suffix destination=OUT"/"file sprintf("cp -Rp %s %s", source, destination)| getline rc stamp=strftime("%Y-%m-%d %H:%M:%S") desc=object"_"location"_"date sprintf("find %s -printf %%s", source)| getline size printf "insert into wiki_image values (\"%s\", %d, \"%s\", %d, \"%s\", \"%s\");\n", file, size, desc, id, user, stamp >> OUT"/sql.txt" } '
Mediawiki samodzielnie tworzy podkatalogi na pliki zdjęć bazując na funkcji sktótu MD5. Skrypt przenosi zdjęcia ze struktury
obiekt_miejsce_data_numer.jpg
do struktury
x/xy/obiekt_miejsce_data_numer.jpg
x jest pierwszym a y drugim znakiem skrótu MD5
Plik: rmw.sh
#! /bin/bash # Skrypt tworzacy strukture plikow mediawiki # Utworzony na licencji GNU GPL # (C) 2005 Olsztynska Strona Rowerowa ls -1 out | egrep "(jpg|png|jpeg|gif)" | awk -F/ ' function toword(s) { return toupper(substr(s,1,1)) substr(s,2) } { OUT="out"; source=OUT"/"$0 file=toword($NF) "echo "source" | md5sum | cut -c 0-32" | getline md md=tolower(md) destination=OUT"/"substr(md,0,1)"/"substr(md,1,2) "mkdir -p "destination| getline rc sprintf("mv -f %s %s/%s", source, destination, file)| getline rc } '
Na początek musimy mieć utwtworzoną odpowiednią strukturę podkatalogów dla plików zdjęć galerii. Zdjęcia powinny być już przygotowane do konwersji (odpowiednio pogrupowane, przeskalowane, oznaczone odpowiednim napisem).
Powiedzmy, że mamy gotową kolekcję zdjęć kościołów w katalogu "wiki". Katalog ten będzie więc zawierał skrypty (dla uproszczenia pominąłem skrypty konwerujące do formatu dokuwiki) i katalog ze zdjęciami:
$cd $HOME $ls -l wiki drwxr-xr-x 2 narg narg 16 2006-01-11 22:21 autor/ -rwxr-xr-x 1 narg narg 523 2006-03-02 21:04 rfr.sh -rwxr-xr-x 1 narg narg 1262 2006-03-02 21:04 rmw.sh
Teraz możemy wywołać skrypty konwersji do mediawiki. Nie trzeba robić kopii bezpieczeństwa katalogu ponieważ zdjęcia są kopiowane a nie przenoszone do nowej struktury.
$cd $HOME/wiki $./rfr.sh autor/ 2 narg # moje konto w mediawiki ma ID 2 oraz login "narg" $./rmw.sh
Po zakończeniu działania skryptu:
Proste
C.D.N.