Table of Contents

Как мигрировать

Нужно извлечь данные из ScrewTurnWiki, разложить страницы в текстовые файлы и потом импортировать эти файлы в DokuWiki. Требования к файлам: имена без пробелов и только в нижнем регистре, расширение .txt. Разметка dokuwiki.

Извлекаем содержимое страниц

Вот код на Go для того, чтобы извлечь содержимое страниц, сохранить его в виде файлов с именами - названиями страниц и разложить по папкам с именами namespaces.

package main                                                                                                                                                                                    
import (
"code.google.com/p/odbc"
"database/sql"
"fmt"
"log"
"strings"
"os"                                                                                      
)                                                                                             
var (                                                                                         
    title       string                                                                        
    content     string                                                                        
    query       string                                                                        
    pagename    string                                                                        
    filename    string                                                                        
    namespace   string                                                                        
)
func main() {
    db, err := sql.Open("odbc", "DRIVER=FreeTDS;SERVER=192.168.122.169;UID=screw;PWD=password;DATABASE=screw;TDS_Version=8.0;PORT=1433;")
    if err != nil {
        fmt.Println("Error in connect DB")
        log.Fatal(err)
    }
    query = "select Page, Namespace, Content from dbo.PageContent  where Revision = -1"
    rows, err := db.Query(query)
    if err != nil {
        log.Fatal(err)
    }
    for rows.Next() {
        if err := rows.Scan(&pagename, &namespace, &content); err != nil {
            log.Fatal(err)
        }
//              fmt.Println(pagename)
//      fmt.Println(content)
        filename= strings.ToLower("/home/mike/wiki/test/" + namespace)
        os.Mkdir (filename, 0777)
        filename= strings.ToLower("/home/mike/wiki/test/" + namespace + "/" + pagename)
        fo, err := os.Create(filename)
        if err != nil {
                panic(err)
        }
        if _, err := fo.WriteString("##PAGE##\n" + content); err != nil {
            panic(err)
        }
        defer fo.Close()
    }
    defer rows.Close()
}

Конвертация

Конвертер разметки: screwturn-to-dokuwiki-converter.rar
Ставим то что нужно для сборки:

apt-get install --assume-yes bison build-essential curl flex g++

Даем права на запуск makeit.sh и testit.sh.
Собираем:

./makeit.sh

тестируем:

./testit.sh 

(выдаст результат в compilatorMy.out)

Конвертируем:

find ./test3/ -type f -name "*" -exec ./a.out {} {}.txt \;  -print

Удаляем файлы без расширения txt:

find ./test3/ -type f ! -name "*.txt" -exec rm {} \;  -print 

Архивируем и переносим на хост с DokuWiki.

Импорт в dokuwiki

Сначала даем права на файлы.

С помощью плагина Searchindex Manager импортируем страницы в DokuWiki