Index: openacs-4/packages/xowiki/xowiki.info =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/xowiki.info,v diff -u -r1.4 -r1.5 --- openacs-4/packages/xowiki/xowiki.info 31 Dec 2005 16:37:29 -0000 1.4 +++ openacs-4/packages/xowiki/xowiki.info 19 Jan 2006 23:01:58 -0000 1.5 @@ -8,26 +8,27 @@ 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-31 + 2006-01-19 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. +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.18 supports text/enhanced, nice page names, import/export. + 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 -r1.1 -r1.2 --- openacs-4/packages/xowiki/catalog/xowiki.de_DE.ISO-8859-1.xml 14 Dec 2005 16:12:59 -0000 1.1 +++ openacs-4/packages/xowiki/catalog/xowiki.de_DE.ISO-8859-1.xml 19 Jan 2006 23:01:58 -0000 1.2 @@ -1,5 +1,5 @@ - + Zur�ck Inhalt @@ -8,6 +8,8 @@ Index Name Neue Seite + Titel der Seite + Typ der 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 -r1.1 -r1.2 --- openacs-4/packages/xowiki/catalog/xowiki.en_US.ISO-8859-1.xml 14 Dec 2005 16:12:59 -0000 1.1 +++ openacs-4/packages/xowiki/catalog/xowiki.en_US.ISO-8859-1.xml 19 Jan 2006 23:01:58 -0000 1.2 @@ -1,5 +1,5 @@ - + Back Content @@ -8,6 +8,8 @@ Index Name New Page + Page Title + Page Type References to this Page: View Fisheye: Tag 1.2 refers to a dead (removed) revision in file `openacs-4/packages/xowiki/catalog/xowiki.en_US.ISO-8859-1.xml.orig'. Fisheye: No comparison available. Pass `N' to diff? 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 -r1.4 -r1.5 --- openacs-4/packages/xowiki/tcl/xowiki-procs.tcl 31 Dec 2005 16:37:31 -0000 1.4 +++ openacs-4/packages/xowiki/tcl/xowiki-procs.tcl 19 Jan 2006 23:01:58 -0000 1.5 @@ -3,30 +3,32 @@ ::Generic::CrClass create Page -superclass ::Generic::CrItem \ -pretty_name "XoWiki Page" -pretty_plural "XoWiki Pages" \ -table_name "xowiki_page" -id_column "page_id" \ + -mime_type text/html \ -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" \ + -mime_type text/plain \ -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 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 + ::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 } @@ -198,16 +200,35 @@ return 1 } - WikiForm instproc edit_data {} { + WikiForm instproc handle_enhanced_text_from_form {} { my instvar data - my log "--" - set item_id [next] + array set __tmp [ns_set array [ns_getform]] + if {[info exists __tmp(text.format)] && + $__tmp(text.format) eq "text/enhanced"} { + $data set mime_type "text/enhanced" + } + } + WikiForm instproc update_references {} { + my instvar data $data render_adp false $data render -update_references + } + + WikiForm instproc new_data {} { + my handle_enhanced_text_from_form + set item_id [next] + my update_references return $item_id } + WikiForm instproc edit_data {} { + my handle_enhanced_text_from_form + set item_id [next] + my update_references + return $item_id + } + Class create PlainWikiForm -superclass WikiForm \ -parameter { {f.text @@ -244,6 +265,7 @@ my set_submit_link_edit return $item_id } + PageInstanceForm instproc edit_data {} { set item_id [next] my log "-- edit_data item_id=$item_id" @@ -308,7 +330,6 @@ $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] \ @@ -401,6 +422,7 @@ if {[string match "http*//*" $link]} { return "$label" } else { + set specified_link $link my instvar parent_id [my info class] instvar object_type if {[regexp {^:(..):(.*)$} $link _ lang stripped]} { @@ -409,7 +431,8 @@ my log "lang lookup for '$lang:$stripped' returned $lang_item_id" if {$lang_item_id} { set css_class "found" - set link [export_vars -base view {{item_id $lang_item_id}}] + set link ./[ad_urlencode $lang:$stripped] + #set link [export_vars -base view {{item_id $lang_item_id}}] } else { set css_class "undefined" set last_page_id [my set item_id] @@ -431,14 +454,17 @@ -title $link -parent_id $parent_id] if {$item_id} { my lappend references [list $item_id $link_type] - set link [export_vars -base view {item_id}] - return "$label" + #set link [export_vars -base view {item_id}] + #return "$label" + return "$label" } else { - set link [export_vars -base edit {object_type {title $label}}] + my incr unresolved_references + set link [export_vars -base ../edit {object_type {title $label}}] return " \[ $label \] " } } } + Page instproc references {} { [my info class] instvar table_name my instvar item_id @@ -447,8 +473,10 @@ where reference=$item_id and ci.item_id = page"] set refs [list] foreach e $l { - set link [export_vars -base view {{item_id {[lindex $e 0]}}}] - lappend refs "[lindex $e 1]" + #set link [export_vars -base view {{item_id {[lindex $e 0]}}}] + set link [lindex $e 1] + if {[string range $link 0 2] eq "[my lang]:"} {set link [string range $link 3 end]} + lappend refs "$link" } return [join $refs ", "] } @@ -457,7 +485,9 @@ set baseclass [expr {[[my info class] exists RE] ? [my info class] : [self class]}] $baseclass instvar RE #my log "-- baseclass for RE = $baseclass" - + if {[my set mime_type] eq "text/enhanced"} { + set source [ad_enhanced_text_to_html $source] + } set content "" foreach l [split [lindex $source 0] \n] { set l [my regsub-eval $RE(include) $l {my include "\1"}] @@ -514,16 +544,17 @@ } Page instproc render {-update_references:switch} { - my instvar item_id references lang title render_adp + my instvar item_id references lang title render_adp unresolved_references my log "-- my class=[my info class]" regexp {^(..):(.*)$} $title _ lang title set references [list] + set unresolved_references 0 set content [my get_content] - if {$update_references} { + if {$update_references || $unresolved_references > 0} { my update_references $item_id [lsort -unique $references] } if {![my exists lang_links]} { - my log "-- for some reason, no lang links" + #my log "-- for some reason, no lang links" my set lang_links "" } else { my set lang_links [join [my set lang_links] ", "] @@ -561,7 +592,7 @@ #my log "-- fetching page_template = $page_template" ::Generic::CrItem instantiate -item_id $page_template $page_template volatile - return [my substitute_markup [$page_template set text]] + return [my substitute_markup [my adp_subst [$page_template set text]]] } PageInstance instproc adp_subst {content} { # add extra variables as instance variables Index: openacs-4/packages/xowiki/www/index.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/Attic/index.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/xowiki/www/index.tcl 30 Dec 2005 00:09:58 -0000 1.3 +++ openacs-4/packages/xowiki/www/index.tcl 19 Jan 2006 23:01:58 -0000 1.4 @@ -12,6 +12,9 @@ folder_id:optional } +set path [ad_conn path_info] +ns_log notice "-- path=<$path>" + set context [list] set supertype ::xowiki::Page @@ -35,15 +38,16 @@ # set up categories set package_id [ad_conn package_id] set category_map_url [export_vars -base \ - "[site_node::get_package_url -package_key categories]cadmin/one-object" \ - { { object_id $package_id } }] + [site_node::get_package_url -package_key categories]cadmin/one-object \ + { { object_id $package_id } }] set actions "" foreach type $object_types { - if {[$type info class] eq "::xotcl::Class"} {continue; #5.1 compatibility hack} - append actions [subst {Action new -label "Add [$type pretty_name]" \ - -url [export_vars -base edit {{object_type $type} folder_id}] \ - -tooltip "Add a new item of kind [$type pretty_name]" + append actions [subst { + Action new \ + -label "[_ xotcl-core.add [list type [$type pretty_name]]]" \ + -url [export_vars -base edit {{object_type $type} folder_id}] \ + -tooltip "[_ xotcl-core.add_long [list type [$type pretty_name]]]" }] } @@ -52,8 +56,8 @@ -columns { ImageField_EditIcon edit -label "" ImageField_ViewIcon view -label "" - Field title -label "Name" - Field object_type -label "Object Type" + Field title -label [_ xowiki.page_title] + Field object_type -label [_ xowiki.page_type] ImageField_DeleteIcon delete -label "" } @@ -70,7 +74,7 @@ t1 add \ -title $title \ -object_type $object_type \ - -view.href [export_vars -base view {item_id}] \ + -view.href [export_vars -base pages/[ad_urlencode $title] {}] \ -edit.href [export_vars -base edit {item_id}] \ -delete.href [export_vars -base delete {item_id}] } Index: openacs-4/packages/xowiki/www/view.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/Attic/view.adp,v diff -u -r1.1 -r1.2 --- openacs-4/packages/xowiki/www/view.adp 14 Dec 2005 16:12:59 -0000 1.1 +++ openacs-4/packages/xowiki/www/view.adp 19 Jan 2006 23:01:58 -0000 1.2 @@ -76,7 +76,7 @@ #xowiki.new# · - #xowiki.index# + #xowiki.index# @content;noquote@ Index: openacs-4/packages/xowiki/www/view.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/Attic/view.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/xowiki/www/view.tcl 30 Dec 2005 00:09:58 -0000 1.3 +++ openacs-4/packages/xowiki/www/view.tcl 19 Jan 2006 23:01:58 -0000 1.4 @@ -16,6 +16,7 @@ {object_type:optional} } +ns_log notice "-- view item_id=$item_id, [info exists folder_id]" ::xowiki::Page set recursion_count 0 set page [::Generic::CrItem instantiate \ @@ -29,9 +30,11 @@ $page instvar title text description lang_links set context [list $title] -set rev_link [export_vars -base revisions {{page_id $item_id} title}] -set edit_link [export_vars -base edit {item_id}] -set new_link [export_vars -base edit {object_type}] +set base [apm_package_url_from_id [ad_conn package_id]] +set rev_link [export_vars -base ${base}revisions {{page_id $item_id} title}] +set edit_link [export_vars -base ${base}edit {item_id}] +set new_link [export_vars -base ${base}edit {object_type}] +set index_link [export_vars -base ${base} {}] set return_url [export_vars -base [ad_conn url] item_id] set gc_link [general_comments_create_link $item_id $return_url] Index: openacs-4/packages/xowiki/www/admin/export.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/admin/export.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/xowiki/www/admin/export.tcl 19 Jan 2006 23:01:58 -0000 1.1 @@ -0,0 +1,11 @@ +set object_type ::xowiki::Page +set folder_id [$object_type require_folder -name xowiki] + +set content "" +db_foreach instance_select \ + [$object_type instance_select_query -folder_id $folder_id -with_subtypes true] { + ::Generic::CrItem instantiate -item_id $item_id + append content [::Serializer deepSerialize $item_id] \n + } + +ns_return 200 text/plain $content \ No newline at end of file Index: openacs-4/packages/xowiki/www/admin/import.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/admin/import.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/xowiki/www/admin/import.adp 19 Jan 2006 23:01:58 -0000 1.1 @@ -0,0 +1,29 @@ + + @page_title;noquote@ + @context;noquote@ + + + + + + + + + + +
+ + + + + + +
@formerror.upload_file@
+
+
+ +
+
+@msg;noquote@ +
Index + Index: openacs-4/packages/xowiki/www/admin/import.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/admin/import.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/xowiki/www/admin/import.tcl 19 Jan 2006 23:01:58 -0000 1.1 @@ -0,0 +1,77 @@ +set msg "" +ad_form \ + -name upload_form \ + -mode edit \ + -export {fs_package_id folder_id orderby selector_type file_types} \ + -html { enctype multipart/form-data } \ + -form { + {upload_file:file(file) {html {size 30}} } + {ok_btn:text(submit) {label "[_ acs-templating.HTMLArea_SelectUploadBtn]"} + } + } \ + -on_submit { + # check file name + if {$upload_file eq ""} { + template::form::set_error upload_form upload_file \ + [_ acs-templating.HTMLArea_SpecifyUploadFilename] + break + } + + set file_name [template::util::file::get_property filename $upload_file] + set upload_tmpfile [template::util::file::get_property tmp_filename $upload_file] + set mime_type [template::util::file::get_property mime_type $upload_file] + set f [open $upload_tmpfile]; set content [read $f]; close $f + if {[catch {eval $content} error]} { + append msg "Error: $error" + } else { + + set replace 0 ;# 1 is overwrite mode + set object_type ::xowiki::Page + set folder_id [$object_type require_folder -name xowiki] + + append msg "objects=[$object_type allinstances]

" + set added 0 + foreach o [$object_type allinstances] { + $o set parent_id $folder_id + # page instances have references to page templates, add these first + if {[$o istype ::xowiki::PageInstance]} continue + set item [CrItem lookup -title [$o set title] -parent_id $folder_id] + if {$item != 0 && $replace} { ;# we delete the original + ::Generic::CrItem delete -item_id $item + set item 0 + } + if {$item == 0} { + $o save_new + incr added + } + } + + foreach o [$object_type allinstances] { + if {[$o istype ::xowiki::PageInstance]} { + db_transaction { + set item [CrItem lookup -title [$o set title] -parent_id $folder_id] + if {$item != 0 && $replace} { ;# we delete the original + ::Generic::CrItem delete -item_id $item + set item 0 + } + if {$item == 0} { ;# the item does not exist -> update reference and save + set old_template_id [$o set page_template] + set template [CrItem lookup \ + -title [$old_template_id set title] \ + -parent_id $folder_id] + $o set page_template $template + $o save_new + incr added + } + } + } + $o destroy + } + append msg "$added objects inserted

" + } + } + + +set page_title "Import XoWiki Pages" +set context {} +ad_return_template Index: openacs-4/packages/xowiki/www/admin/index.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/admin/index.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/xowiki/www/admin/index.tcl 30 Dec 2005 00:09:58 -0000 1.3 +++ openacs-4/packages/xowiki/www/admin/index.tcl 19 Jan 2006 23:01:58 -0000 1.4 @@ -16,6 +16,10 @@ template::list::create \ -name admin_index \ + -actions { + export export export + import import import + } \ -elements { delete { link_url_col delete_url