View · Index
No registered users in community rubick
in last 10 minutes

Script to import greenspun's forums to OpenACS forums

This is a little script I wrote to import forums from Greenspun's old forum package to the OpenACS forums.
# to do: set forum_id
# set up second dvfile
# do not use Safari or another browser that times out

set dvfile1 [open "/home/path/forum_dump.html" r]

set dvcontent1 [read $dvfile1]

close $dvfile1

ns_write "<html>Start"

set lines [split $dvcontent1 "|"]

set position 0
foreach line $lines {
    if {$position == 0} {
        set message_id $line
    } elseif {$position == 1} {
        set message $line
    } elseif {$position == 2} {
        set posting_date $line
    } elseif {$position == 3} {
        set subject $line
    } elseif {$position == 4} {
        set topic $line
    } elseif {$position == 5} {
        set creator_name $line
    } elseif {$position == 6} {
        set creator_email $line
    } elseif {$position == 7} {

        # use the message_id from before, create list of last items, then use
        # message_id for next item

        if {![regexp {(.*)<br>(.*)} $line match refers_to next_message_id]} {
            # we're done
            set message_id $line
            ns_write "last one, hopefully"
        }

        set new_message_id [db_nextval acs_object_id_seq]
        set message_map($message_id) $new_message_id

        lappend items [list $new_message_id $refers_to $subject $message $creator_name]

        set message_id $next_message_id

        set position 0
    }

    ns_write "."

    incr position
}

# this is hardcoded to the Forum ID
set forum_id 6823

# this is hardcoded to the user ID of the person you want the forum postings to be under.
set user_id 2539

ns_write "<P>"

foreach item $items {

    ns_write "<hr>Line: $item<BR>"

    set message_id   [lindex $item 0]
    set refers_to    [lindex $item 1]
    set subject      [lindex $item 2]
    set message      [lindex $item 3]
    set creator_name [lindex $item 4]

    if {[string equal $refers_to "no referal"] || [string equal $refers_to "no"]
} {
        set refers_to ""

        forum::message::new \
            -forum_id $forum_id \
            -message_id $message_id \
            -parent_id $refers_to \
            -subject $subject \
            -content "$message --$creator_name (posting from archive)" \
            -html_p "f" \
            -user_id $user_id
        
    } else {
        lappend need_parents $item
    }

}


foreach item $need_parents {
    ns_write "<hr>Parent Line: $item<BR>"

    set message_id   [lindex $item 0]
    set refers_to    [lindex $item 1]
    set subject      [lindex $item 2]
    set message      [lindex $item 3]
    set creator_name [lindex $item 4]

    if {[string equal $refers_to "no referal"] || [string equal $refers_to "no"]
} {
        set refers_to ""
    } else {
        set refers_to $message_map($refers_to)
    }

    forum::message::new \
        -forum_id $forum_id \
        -message_id $message_id \
        -parent_id $refers_to \
        -subject $subject \
        -content "$message --$creator_name (posting from archive)" \
        -html_p "f" \
        -user_id $user_id
}


# ns_write "$lines"
ns_write "Done.</html>"