Index: openacs-4/packages/xowiki/xowiki.info =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/xowiki.info,v diff -u -N --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/xowiki/xowiki.info 14 Dec 2005 16:12:58 -0000 1.1 @@ -0,0 +1,40 @@ + + + + + xowiki + xowikis + f + f + xowiki + + + Gustaf Neumann + A more generic xotcl-based wikis example with object types +and subtypes based on the content repository (with category support) + 2005-12-08 + XoWiki is a wiki implementation for OpenACS in xotcl. Instead of trying to +implement the full set of wiki markup commands of systems like MediaWiki, +XoWiki is based on a rich text editor and focuses more on integration +with oacs (e.g categories, general comments, adp-includes). XoWiki +combines aspects of wikis (ease of page-creation) with aspects of a +content management system (revisions, re-usable items, multiple +languages). Furthermore, XoWiki allows to define different types of links such +one could define book-structures (where a navigation structure could be built on the fly) or glossaries with differnt kind of word relationships (like synonyms, etc.). XoWiki supports pages in multiple languages and is localized (currently only for English and German). Currently, richtext and plaintext type entries are supported. Included support for adp-substitution in wiki pages and a file-selector. 0.13 supports page templates and uses the new generic form interface. Use of the oo layer for the content repository, reduced number of database interactions. + 0 + + + + + + + + + + + + + + + + Index: openacs-4/packages/xowiki/catalog/xowiki.de_DE.ISO-8859-1.xml =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/catalog/xowiki.de_DE.ISO-8859-1.xml,v diff -u -N --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/xowiki/catalog/xowiki.de_DE.ISO-8859-1.xml 14 Dec 2005 16:12:59 -0000 1.1 @@ -0,0 +1,13 @@ + + + + Zur�ck + Inhalt + Kommentar + Bearbeiten + Index + Name + Neue Seite + Verweise auf diese Seite: + Ansehen + Index: openacs-4/packages/xowiki/catalog/xowiki.en_US.ISO-8859-1.xml =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/catalog/xowiki.en_US.ISO-8859-1.xml,v diff -u -N --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/xowiki/catalog/xowiki.en_US.ISO-8859-1.xml 14 Dec 2005 16:12:59 -0000 1.1 @@ -0,0 +1,13 @@ + + + + Back + Content + Description + Edit + Index + Name + New Page + References to this Page: + View + Index: openacs-4/packages/xowiki/catalog/xowiki.en_US.ISO-8859-1.xml.orig =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/catalog/Attic/xowiki.en_US.ISO-8859-1.xml.orig,v diff -u -N --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/xowiki/catalog/xowiki.en_US.ISO-8859-1.xml.orig 14 Dec 2005 16:12:59 -0000 1.1 @@ -0,0 +1,13 @@ + + + + Back + Content + Description + Edit + Index + Name + New Page + References to this Page: + View + Index: openacs-4/packages/xowiki/tcl/xowiki-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/xowiki-procs.tcl,v diff -u -N --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/xowiki/tcl/xowiki-procs.tcl 14 Dec 2005 16:12:59 -0000 1.1 @@ -0,0 +1,573 @@ +namespace eval ::xowiki { + + ::Generic::CrClass create Page -superclass ::Generic::CrItem \ + -pretty_name "XoWiki Page" -pretty_plural "XoWiki Pages" \ + -table_name "xowiki_page" -id_column "page_id" \ + -form ::xowiki::WikiForm + + ::Generic::CrClass create PlainPage -superclass Page \ + -pretty_name "XoWiki Plain Page" -pretty_plural "XoWiki Plain Pages" \ + -table_name "xowiki_plain_page" -id_column "ppage_id" \ + -form ::xowiki::PlainWikiForm + + ::Generic::CrClass create PageTemplate -superclass Page \ + -pretty_name "XoWiki Page Template" -pretty_plural "XoWiki Page Templates" \ + -table_name "xowiki_page_template" -id_column "page_template_id" \ + -form ::xowiki::WikiForm + + ::Generic::CrClass create PageInstance -superclass Page \ + -pretty_name "XoWiki Page Instance" -pretty_plural "XoWiki Page Instances" \ + -table_name "xowiki_page_instance" -id_column "page_instance_id" \ + -cr_attributes { + ::Generic::Attribute new -attribute_name page_template -datatype integer \ + -pretty_name "Page Template" + ::Generic::Attribute new -attribute_name instance_attributes -datatype text \ + -pretty_name "Instance Attributes" + } \ + -form ::xowiki::PageInstanceForm \ + -edit_form ::xowiki::PageInstanceEditForm +} + +# the following block is legacy code +::Generic::CrClass create CrWikiPage -superclass ::xowiki::Page \ + -pretty_name "Wiki Page" -pretty_plural "Wiki Pages" \ + -table_name "generic_cr_wiki_page" -id_column "page_id" \ + -form ::xowiki::WikiForm -object_type "CrWikiPage" + +::Generic::CrClass create CrWikiPlainPage -superclass ::xowiki::PlainPage \ + -pretty_name "Plain Wiki Page" -pretty_plural "Plain Wiki Pages" \ + -table_name "generic_cr_plain_page" -id_column "ppage_id" \ + -form ::xowiki::PlainWikiForm -object_type "CrWikiPlainPage" + +::Generic::CrClass create PageTemplate -superclass ::xowiki::PageTemplate \ + -pretty_name "Page Template" -pretty_plural "Page Templates" \ + -table_name "generic_page_template" -id_column "page_template_id" \ + -form ::xowiki::WikiForm -object_type "PageTemplate" + +::Generic::CrClass create PageInstance -superclass ::xowiki::PageInstance \ + -pretty_name "Page Instance" -pretty_plural "Page Instances" \ + -table_name "generic_page_instance" -id_column "page_instance_id" \ + -object_type "PageInstance" \ + -cr_attributes { + ::Generic::Attribute new -attribute_name page_template -datatype integer \ + -pretty_name "Page Template" + ::Generic::Attribute new -attribute_name instance_attributes -datatype text \ + -pretty_name "Instance Attributes" + } \ + -form ::xowiki::PageInstanceForm \ + -edit_form ::xowiki::PageInstanceEditForm + + +if {![db_0or1row check-xowiki-table \ + "select tablename from pg_tables where tablename = 'xowiki_references'"]} { + ns_log notice "xowiki create" + db_dml create-xowiki-table "create table xowiki_references( + reference integer references cr_items(item_id) on delete cascade, + link_type text, + page integer references cr_items(item_id) on delete cascade)" + db_dml create-xowiki-table \ + "create index xowiki_ref_index ON xowiki_references(reference)" +} + +namespace eval ::xowiki { + + ad_proc ::xowiki::upgrade_callback { + {-from_version_name:required} + {-to_version_name:required} + } { + + Callback for upgrading + + @author Gustaf Neumann (neumann@wu-wien.ac.at) + } { + ns_log notice "-- UPGRADE $from_version_name -> $to_version_name" + + if {$to_version_name eq "0.13"} { + ns_log notice "-- upgrading to 0.13" + set package_id [::Generic::package_id_from_package_key xowiki] + set folder_id [::xowiki::Page require_folder \ + -package_id $package_id \ + -name xowiki] + set r [::CrWikiPage instantiate_all -folder_id $folder_id] + db_transaction { + array set map { + ::CrWikiPage ::xowiki::Page + ::CrWikiPlainPage ::xowiki::PlainPage + ::PageTemplate ::xowiki::PageTemplate + ::PageInstance ::xowiki::PageInstance + } + foreach e [$r children] { + set oldClass [$e info class] + if {[info exists map($oldClass)]} { + set newClass $map($oldClass) + ns_log notice "-- old class [$e info class] -> $newClass, \ + fetching [$e set item_id] " + [$e info class] fetch_object -object $e -item_id [$e set item_id] + set oldtitle [$e set title] + $e append title " (old)" + $e save + $e class $newClass + $e set title $oldtitle + $e save_new + } else { + ns_log notice "-- no new class for $oldClass" + } + } + + } + } + } + + Class create WikiForm -superclass ::Generic::Form \ + -parameter { + {field_list {item_id title text description nls_language}} + {f.item_id + {item_id:key}} + {f.title + {title:text {label #xowiki.name#}}} + {f.text + {text:richtext(richtext),nospell,optional + {label #xowiki.content#} + {options {editor xinha plugins { + GetHtml CharacterMap ContextMenu FullScreen + ListType TableOperations EditTag LangMarks Abbreviation OacsFs + } height 350px \$::xowiki::folderspec}} + {html {rows 15 cols 50 style {width: 100%}}}} + } + {f.description + {description:text,optional {label #xowiki.description#}} + } + {f.nls_language + {nls_language:text(select),optional {label Language} + {options \[xowiki::locales\]}}} + {validate + {{title {\[::xowiki::validate_title\]} {correcting locale}}}} + {with_categories true} + {submit_link view} + } + + WikiForm instproc folderspec {value} { + set ::xowiki::folderspec $value + } + WikiForm instproc mkFields {} { + set fields "" + foreach field [my field_list] { + append fields [list [my set f.$field]] \n + } + my set fields $fields + } + + proc ::xowiki::locales {} { + set locales [lang::system::get_locales] + set defpos [lsearch $locales [lang::conn::locale]] + set locales [linsert [lreplace $locales $defpos $defpos] 0 \ + [lang::conn::locale]] + foreach l $locales {lappend lpairs [list $l $l]} + return $lpairs + } + + proc ::xowiki::page_templates {} { + ::xowiki::f1 instvar data folder_id ;# form has to be named ::xowiki::f1 + # transitional code begin + set object_type [[$data info class] object_type] + if {[string match ::xowiki::* $object_type]} { + set templateclass ::xowiki::PageTemplate + } else { + set templateclass ::PageTemplate + } + # transitional code end + set q [$templateclass instance_select_query \ + -folder_id $folder_id \ + -select_attributes {title}] + db_foreach get_page_templates $q { + lappend lpairs [list $title $item_id] + } if_no_rows { + lappend lpairs [list "(No Page Template available)" ""] + } + return $lpairs + } + + proc ::xowiki::validate_title {} { + upvar title title nls_language nls_language + if {![regexp {^..:} $title]} { + if {$nls_language eq ""} {set nls_language [lang::conn::locale]} + set title [string range $nls_language 0 1]:$title + } + return 1 + } + + WikiForm instproc edit_data {} { + my instvar data + my log "--" + set item_id [next] + $data render_adp false + $data render -update_references + return $item_id + } + + + Class create PlainWikiForm -superclass WikiForm \ + -parameter { + {f.text + {text:text(textarea),nospell,optional + {label #xowiki.content#} + {html {cols 80 rows 10}}}} + } + + Class create PageInstanceForm -superclass WikiForm \ + -parameter { + {field_list {item_id title page_template description nls_language}} + {f.page_template + {page_template:text(select) + {label "Page Template"} + {options \[xowiki::page_templates\]}} + } + } + PageInstanceForm instproc set_submit_link_edit {} { + my instvar folder_id data + set __vars {folder_id item_id page_template} + set object_type [[$data info class] object_type] + my log "-- data=$data cl=[$data info class] ot=$object_type" + set item_id [$data set item_id] + set page_template [ns_set get [ns_getform] page_template] + my submit_link [export_vars -base edit {folder_id object_type item_id page_template}] + my log "-- submit_link = [my submit_link]" + } + PageInstanceForm instproc new_data {} { + my instvar data + my log "-- 1 $data, cl=[$data info class] [[$data info class] object_type]" + set item_id [next] + my log "-- 2 $data, cl=[$data info class] [[$data info class] object_type]" + my log "-- new data next DONE item_id=$item_id" + my set_submit_link_edit + return $item_id + } + PageInstanceForm instproc edit_data {} { + set item_id [next] + my log "-- edit_data item_id=$item_id" + return $item_id + } + + Class create PageInstanceEditForm -superclass WikiForm \ + -parameter { + {field_list {item_id title page_template description nls_language}} + {f.title {title:text(inform)}} + {f.page_template {page_template:text(hidden)}} + {f.nls_language {nls_language:text(hidden)}} + {with_categories false} + {textfieldspec {text(textarea),nospell {html {cols 60 rows 5}}}} + } + + PageInstanceEditForm instproc new_data {} { + set __vars {folder_id item_id page_template} + set object_type [[[my set data] info class] object_type] + my log "-- cl=[[my set data] info class] ot=$object_type" + foreach __v $__vars {set $__v [ns_queryget $__v]} + set item_id [next] + my submit_link [export_vars -base edit $__vars] + my log "-- submit_link = [my submit_link]" + return $item_id + } + + PageInstanceEditForm instproc edit_request {item_id} { + my log "-- " + my instvar page_instance_form_atts data + next + array set __ia [$data set instance_attributes] + foreach var $page_instance_form_atts { + if {[info exists __ia($var)]} {my var $var [list $__ia($var)]} + } + } + + PageInstanceEditForm instproc edit_data {} { + my log "-- " + my instvar page_instance_form_atts data + array set __ia [$data set instance_attributes] + foreach var $page_instance_form_atts { + set __ia($var) [my var $var] + } + my log "-- set instance_attributes [array get __ia]" + $data set instance_attributes [array get __ia] + set item_id [next] + my log "-- edit_data item_id=$item_id" + return $item_id + } + + PageInstanceEditForm instproc init {} { + my instvar data page_instance_form_atts + set item_id [ns_queryget item_id] + set page_template [ns_queryget page_template] + if {$page_template eq ""} { + set page_template [$data set page_template] + my log "-- page_template = $page_template" + } + my log "-- calling page_template = $page_template" + set template [::Generic::CrItem instantiate -item_id $page_template] + $template volatile + set dont_edit [concat [[$data info class] edit_atts] [list page_title] \ + [::Generic::CrClass set common_query_atts]] + my log "-- dont edit <$dont_edit>" + set page_instance_form_atts [list] + foreach {_1 _2 var} [regexp -all -inline \ + [template::adp_variable_regexp] \ + [$template set text]] { + if {[lsearch $dont_edit $var] == -1} {lappend page_instance_form_atts $var} + } + foreach var $page_instance_form_atts { + my lappend field_list $var + my set f.$var "$var:[my textfieldspec]" + } + next + #my log "--fields = [my fields]" + } + +} + + +namespace eval ::xowiki { + + # + # data definitions + # + + Page parameter { + page_id + {revision_id 0} + object_type + {folder_id -100} + {lang_links ""} + {lang de} + {render_adp 1} + } + Page set recursion_count 0 + Page array set RE { + include {{{(.+)}}[ \n\r]*(
)?} + anchor {\\\[\\\[([^\]]+)\\\]\\\]} + div { *(
*)?>>([^&]*)<<} + } + + PlainPage parameter { + {render_adp 0} + } + PlainPage array set RE { + include {{{(.+)}}[ \n\r]} + anchor {\\\[\\\[([^\]]+)\\\]\\\]} + div {()>>([^<]*)<<} + } + + PageTemplate parameter { + {render_adp 0} + } + + # + # method definitions + # + + Page instproc regsub-eval {re string cmd} { + subst [regsub -all $re [string map {\[ \\[ \] \\] \$ \\$ \\ \\\\} $string] \ + "\[$cmd\]"] + } + + Page instproc include arg { + [self class] instvar recursion_depth + if {[regexp {^adp (.*)$} $arg _ adp]} { + set adp_fn [lindex $adp 0] + if {![string match /* $adp_fn]} {set adp_fn /packages/xowiki/www/$adp_fn} + set adp_args [concat [lindex $adp 1] [list __including_page [self]]] + return [template::adp_include $adp_fn $adp_args] + } + } + Page instproc div arg { + if {$arg eq "content"} { + return "
" + } elseif {$arg eq "sidebar"} { + return "