#!/usr/bin/perl -w # # Bad hack to convert Swiki to DokuWiki use strict; my $in= $ENV{'HOME'}."/Applications/ComSwiki/swiki/wiki"; my $out=$ENV{'HOME'}."/WebServer/Documents/wiki/data"; # -------------- # Scan directory # -------------- my @pages; opendir DIR, $in."/pages"; while ($_=readdir(DIR)) { if (/(\d+)\.xml/) { push @pages, $1; } } closedir DIR; @pages=sort {$a <=> $b} @pages; # ---------- # Read Pages # ---------- my %pages; foreach my $id (@pages) { $pages{$id}=""; open IN, $in."/pages/$id.xml"; while() { s/\r/\n/g; $pages{$id}.="$_\n"; } close IN; } my %title; my %text; foreach my $id (@pages) { my $temp; my $eof=0; foreach (split(/\n/, $pages{$id})) { chomp; if (m/(.*)<\/name>/) { $title{$id}=$1; } if (defined $temp) { if (/(.*)<\/text>/) { $temp.="$1\n"; $eof=1; } else { if (! $eof) { $temp.=$_."\n"; } } } else { if (/(.*)/) { $temp="$1\n"; } } } $text{$id}=$temp; } # --------------- # Convert uploads # --------------- foreach my $id (@pages) { my $title=$title{$id}; my $text=$text{$id}; my $dir=$title; $dir=~tr/A-Z/a-z/; # lowercase $dir=~s/^\///; # leading slash $dir=~s/^\.//; # leading dot $dir=~tr/ '+\//____/; # special characters $dir=~s/[_]+/_/g; # multiple underscores if (-d $in."/uploads/$id") { mkdir "$out/media/$dir"; opendir DIR, $in."/uploads/$id"; while (my $file=readdir(DIR)) { if (-f $in."/uploads/$id/$file") { print "$file\n"; my $nfile=$file; $nfile=~tr/A-Z/a-z/; # lowercase $nfile=~s/^\///; # leading slash $nfile=~s/^\.//; # leading dot $nfile=~tr/ '+\//____/; # special characters $nfile=~s/[_]+/_/g; # multiple underscores system "cp \"$in/uploads/$id/$file\" $out/media/$dir/$nfile\n"; } } closedir DIR; } }