Index: openacs-4/packages/xowiki/xowiki.info =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/xowiki.info,v diff -u -N -r1.51 -r1.52 --- openacs-4/packages/xowiki/xowiki.info 2 May 2007 10:13:38 -0000 1.51 +++ openacs-4/packages/xowiki/xowiki.info 25 Jun 2007 12:18:56 -0000 1.52 @@ -8,11 +8,11 @@ f xowiki - + Gustaf Neumann A more generic xotcl-based wikis example with object types and subtypes based on the content repository (with category support) - 2007-05-02 + 2007-06-25 <pre> XoWiki is a wiki implementation for OpenACS in XOTcl. Instead of trying to implement the full set of wiki markup commands of systems @@ -114,20 +114,26 @@ variable binding from different pages, new includelets creation-date to get dates nicer formatted, simplified development of derived packages (s5) + +0.53: ::xowiki::Form (will be maybe renamed before release), +::xowiki::FormInstances (pot. rename). FormFields, form +constraints, unnamed instances, some podcast improvements +improved localization, new includelet "unread-items", +export renaming for unnamed entries </pre> BSD-Style 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 -r1.14 -r1.15 --- openacs-4/packages/xowiki/catalog/xowiki.de_DE.ISO-8859-1.xml 21 Mar 2007 12:47:47 -0000 1.14 +++ openacs-4/packages/xowiki/catalog/xowiki.de_DE.ISO-8859-1.xml 25 Jun 2007 12:18:56 -0000 1.15 @@ -1,31 +1,40 @@ - + Verwalten Zur�ck - Inhalt Erzeuge diese Seite in der folgenden Sprache: L�schen - Kurzbeschreibung Bearbeiten bearbeiten + Formular + Formular Einschr�nkungen Index - Sprache - Name Neue Seite Verst�ndigungen - Abschnitt - Titel der Seite + Creator + Kurzbeschreibung + Name + Sprache + Abschnitt + Inhalt + Titel der Seite Typ der Seite + Instanzattribute + Seitenvorlage + Unbenamte Instanzen + Dauer + Schl�sselworte + Publikationsdatum + Untertitel H�ufig verwendete Schlagworte h�ufige Schlagworte - Es gibt bereits ein Portlet mit dem Titel '%page_title%' in diesem Portal. - �ndern Sie entweder den Namen des existierenden Portlets oder den Titel der Xowiki-Seite, die Sie zum Portal hinzuf�gen wollen. + �ndern Sie entweder den Namen des existierenden Portlets oder den Titel der Xowiki-Seite, die Sie zum Portal hinzuf�gen wollen. + Es gibt bereits ein Portlet mit dem Titel '%page_title%' in diesem Portal. Freigegeben Verweise auf diese Seite: Verlauf Suche - Titel Ansehen mehr... Pers�nliche Schlagworte 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 -r1.19 -r1.20 --- openacs-4/packages/xowiki/catalog/xowiki.en_US.ISO-8859-1.xml 17 Jun 2007 10:28:19 -0000 1.19 +++ openacs-4/packages/xowiki/catalog/xowiki.en_US.ISO-8859-1.xml 25 Jun 2007 12:18:56 -0000 1.20 @@ -1,28 +1,39 @@ - + Admin Back - Content Create this page in a different language - Creator Delete - Description Edit edit tags + Can be obtained from the name of the uploaded file Form Form Constraints Anwers Fill out Index - Language - Name New Page Notifications - Section - Page Title + Creator + Description + Name + Shortname to identify an entry within a folder, typically lowercase characters + Language + Section + Content + Page Title Page Type - Anonymous Instances + Instance Attributes + Page Instance + Unnamed Instances + Duration + E.g. 9:16 means 9 minutes 16 seconds (if ffmpeg is installed and configured, it will get the value automatically) + Keywords + comma separated itunes keywords, e.g. salt, pepper, shaker, exciting + Can be obtained from the name of the uploaded file + Publication Date + Subtitle Popular tags popular tags Please either change the existing portlets' name or the title of the xowiki page you want to add to the portal. @@ -31,9 +42,6 @@ References to this Page: Revisions Search - Subtitle - Template - Title View more... Your Tags Index: openacs-4/packages/xowiki/catalog/xowiki.es_ES.ISO-8859-1.xml =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/catalog/xowiki.es_ES.ISO-8859-1.xml,v diff -u -N -r1.1 -r1.2 --- openacs-4/packages/xowiki/catalog/xowiki.es_ES.ISO-8859-1.xml 11 Jun 2007 22:10:28 -0000 1.1 +++ openacs-4/packages/xowiki/catalog/xowiki.es_ES.ISO-8859-1.xml 25 Jun 2007 12:18:56 -0000 1.2 @@ -1,23 +1,31 @@ - + Administrar Volver - Contenido Crear esta p�gina en un lenguaje diferente - Autor Borrar - Descripci�n Editar editar tags + Forme �ndice - Idioma - Nombre Nueva P�gina Notificaciones - Secci�n - T�tulo de la P�gina + Autor + Descripci�n + Nombre + Idioma + Secci�n + Contenido + T�tulo de la P�gina Tipo de P�gina + Cualidad + Plantilla de la p�gina + Entradas innomadas + Duraci�n + Palabras claves + Fecha de la publicaci�n + Subt�tulo Tags populares tags populares Por favor, cambie el nombre de los portlets existentes � el t�tulo de la p�gina del xowiki que se quiere a�adir al portal. @@ -26,8 +34,6 @@ Referencias a esta P�gina: Revisiones Buscar - Subt�tulo - T�tulo Vista m�s... Tus tags Index: openacs-4/packages/xowiki/tcl/form-field-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/form-field-procs.tcl,v diff -u -N --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/xowiki/tcl/form-field-procs.tcl 25 Jun 2007 12:18:56 -0000 1.1 @@ -0,0 +1,227 @@ +ad_library { + XoWiki - form fields + + @creation-date 2007-06-22 + @author Gustaf Neumann + @cvs-id $Id: form-field-procs.tcl,v 1.1 2007/06/25 12:18:56 gustafn Exp $ +} + +namespace eval ::xowiki { + + # first approximation for form fields. + # these could support not only asWidgetSpec, but as well asHTML + # + # todo: every formfield type should have its own class + # finally, this should go into xotcl-core + + Class FormField -parameter { + {required false} {type text} {label} {name} {spell false} {size 80} + {value ""} {spec ""} {help_text ""} + } + FormField instproc init {} { + my instvar spec + if {![my exists label]} {my label [string totitle [my name]]} + my config_from_spec $spec + } + FormField instproc config_from_spec {spec} { + my instvar type options widget_type + foreach s [split $spec ,] { + switch -glob $s { + optional {my set required false} + required {my set required true} + hidden {set type hidden} + inform {set type inform} + text {set type text} + boolean {set type boolean} + numeric {set type text; #for the time being} + month {set type month} + label=* {my label [lindex [split $s =] 1]} + help_text=* {my help_text [lindex [split $s =] 1]} + size=* {my size [lindex [split $s =] 1]} + date* { + my instvar date + set type date + if {[regexp {^date\((.*)\)$} $s _ opts]} { + foreach o [split "$opts;" ";"] { + foreach {att value} [split $o =] break + set date($att) [string map [list _ " "] $value] + } + } + } + select(*) { + regexp {^select\((.*)\)$} $s _ opts + set type text(select) + foreach o [split "$opts;" ";"] { + switch -glob $o { + options=* {set options [lindex [split $o =] 1]} + } + } + } + textarea* { + my instvar textarea + set type text(textarea) + set textarea(cols) 80 + set textarea(rows) 2 + if {[regexp {^textarea\((.*)\)$} $s _ opts]} { + foreach o [split $opts ";"] { + switch -glob $o { + cols=* {set textarea(cols) [lindex [split $o =] 1]} + rows=* {set textarea(rows) [lindex [split $o =] 1]} + } + } + } + my size [lindex [split $s =] 1] + } + default {error "unknown spec for entry [my name]: '$s'"} + } + } + switch $type { + hidden - + inform { + set widget_type text($type) + } + boolean { + set widget_type text(select) + set options {{No f} {Yes t}} + } + month { + set widget_type text(select) + set options { + {January 1} {February 2} {March 3} {April 4} {May 5} {June 6} + {July 7} {August 8} {September 9} {October 10} {November 11} {December 12} + } + } + default { + set widget_type $type + } + } + #my msg "--formField processing spec $spec -> widget_type = $widget_type" + } + + FormField instproc asWidgetSpec {} { + my instvar widget_type options help_text + set spec $widget_type + if {![my spell]} {append spec ",nospell"} + if {![my required]} {append spec ",optional"} + append spec " {label \"[my label]\"}" + if {$widget_type eq "text"} { + if {[my exists size]} {append spec " {html {size [my size]}}"} + } elseif {$widget_type eq "text(select)"} { + append spec " {options [list $options]}" + } elseif {$widget_type eq "text(textarea)"} { + my instvar textarea + append spec " {html {cols $textarea(cols) rows $textarea(rows)}}" + } elseif {$widget_type eq "date" && [my exists date]} { + if {[my exists date(format)]} { + append spec " {format \"[my set date(format)]\"}" + } + # {pub_date:date,optional {format "YYYY MM DD HH24 MI"} {html {id date}}} + } + if {$help_text ne ""} { + if {[string match "#*#" $help_text]} { + set internationalized [_ [string trim $help_text #]] + append spec " {help_text {$internationalized}}" + } else { + append spec " {help_text {$help_text}}" + } + } + #my msg "final spec=$spec" + return $spec + } + + FormField instproc render_form_widget {} { + # todo: for all types + set atts [list type text] + foreach att {size name value} { + if {[my exists $att]} {lappend atts $att [my set $att]} + } + + ::html::div -class form-widget {::html::input $atts {}} + } + FormField instproc render_item {} { + ::html::div -class form-item-wrapper { + ::html::div -class form-label { + ::html::label -for [my name] { + ::html::t [my label] + } + if {[my required]} { + ::html::div -class form-required-mark { + ::html::t " (#acs-templating.required#)" + } + } + } + my render_form_widget + } + } + FormField instproc renderValue {v} { + if {[my exists options]} { + foreach o [my set options] { + foreach {label value} $o break + if {$value eq $v} {return $label} + } + } + return $v + } + + # + # a few test cases + # + proc ? {cmd expected {msg ""}} { + ::xo::Timestamp t1 + set r [uplevel $cmd] + if {$msg eq ""} {set msg $cmd} + if {$r ne $expected} { + regsub -all \# $r "" r + append ::_ "Error: $msg returned '$r' ne '$expected'\n" + } else { + append ::_ "$msg - passed ([t1 diff] ms)\n" + } + } + # + proc test_form_fields {} { + set ::_ "" + set o [Object new -destroy_on_cleanup] + # mixin methods for create_form_field + $o mixin ::xowiki::Page + + set f0 [$o create_form_field -name test \ + -slot ::xowiki::Page::slot::name] + ? {$f0 asWidgetSpec} \ + {text,nospell {label "#xowiki.Page-name#"} {html {size 80}} {help_text {Shortname to identify a page within a folder, typically lowercase characters}}} \ + "name with help_text" + + set f0 [$o create_form_field -name test \ + -slot ::xowiki::Page::slot::name -spec inform] + ? {$f0 asWidgetSpec} \ + {text(inform),nospell {label "#xowiki.Page-name#"} {help_text {Shortname to identify a page within a folder, typically lowercase characters}}} \ + "name with help_text + inform" + + set f0 [$o create_form_field -name test \ + -slot ::xowiki::Page::slot::name -spec optional] + ? {$f0 asWidgetSpec} \ + {text,nospell,optional {label "#xowiki.Page-name#"} {html {size 80}} {help_text {Shortname to identify a page within a folder, typically lowercase characters}}} \ + "name with help_text + optional" + + set f1 [$o create_form_field -name test \ + -slot ::xowiki::Page::slot::description \ + -spec "textarea(cols=80;rows=2)"] + ? {$f1 asWidgetSpec} \ + {text(textarea),nospell,optional {label "#xowiki.Page-description#"} {html {cols 80 rows 2}}} \ + "textarea(cols=80;rows=2)" + + set f2 [$o create_form_field -name test \ + -slot ::xowiki::Page::slot::nls_language \ + -spec {select(options=[xowiki::locales])}] + ? {$f2 asWidgetSpec} \ + {text(select),nospell,optional {label "#xowiki.Page-nls_language#"} {options {[xowiki::locales]}}} \ + {select(options=[xowiki::locales])} + + + $o mixin ::xowiki::PodcastItem + set f3 [$o create_form_field -name test \ + -slot ::xowiki::PodcastItem::slot::pub_date] + ? {$f3 asWidgetSpec} \ + {date,nospell,optional {label "#xowiki.PodcastItem-pub_date#"} {format "YYYY MM DD HH24 MI"}} \ + {date with format} + } +} Index: openacs-4/packages/xowiki/tcl/xowiki-form-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/xowiki-form-procs.tcl,v diff -u -N -r1.62 -r1.63 --- openacs-4/packages/xowiki/tcl/xowiki-form-procs.tcl 22 Jun 2007 13:32:02 -0000 1.62 +++ openacs-4/packages/xowiki/tcl/xowiki-form-procs.tcl 25 Jun 2007 12:18:56 -0000 1.63 @@ -15,17 +15,11 @@ Class create WikiForm -superclass ::Generic::Form \ -parameter { {field_list {item_id name title creator text description nls_language}} - {f.page_order - {page_order:text,optional {label #xowiki.order#} {html {align right}} }} - {f.item_id - {item_id:key}} - {f.name - {name:text {label #xowiki.name#} {html {size 80}} - {help_text {Shortname to identify a page within a folder, typically lowercase characters}}}} - {f.title - {title:text {label #xowiki.title#} {html {size 80}} }} - {f.creator - {creator:text,optional {label #xowiki.creator#} {html {size 80}} }} + {f.item_id {item_id:key}} + {f.name "="} + {f.title "="} + {f.creator "="} + {f.description "="} {f.text {text:richtext(richtext),nospell,optional {label #xowiki.content#} @@ -35,13 +29,6 @@ }} {html {rows 15 cols 50 style {width: 100%}}}} } - {f.description - {description:text(textarea),nospell,optional - {label #xowiki.description#} {html {cols 80 rows 2}}} - } - {f.nls_language - {nls_language:text(select),optional {label #xowiki.Language#} - {options \[xowiki::locales\]}}} {validate {{name {\[::xowiki::validate_name\]} {Another item with this name exists \ already in this folder}}}} @@ -72,6 +59,7 @@ set field_list [my field_list] if {[my show_page_order]} { set field_list [linsert $field_list 2 page_order] + # todo: needed? if {[$data istype ::xowiki::PageInstance]} { set s [$data get_field_type page_order ""] if {$s ne ""} { @@ -83,44 +71,30 @@ my f.name {name:text(hidden),optional} } - # TODO: this could be made cleaner by using slots, which require xotcl 1.5.*. - # currently, i do not want to force an upgrade to the newer xotcl versions. - set class [[my set data] info class] - set __container [::xo::OrderedComposite new -destroy_on_cleanup] - foreach cl [concat $class [$class info heritage]] { - if {[$cl exists cr_attributes]} {$__container contains [$cl cr_attributes]} - } - foreach __field $field_list { - set __spec [my set f.$__field] + + # if there is no field spec, use the default from the slot definitions + set __spec [expr {[my exists f.$__field] ? [my set f.$__field] : "="}] set __wspec [lindex $__spec 0] + #my msg "$__field wspec=$__wspec, spec=$__spec" # - # try first to get the information from the attribute definitions + # get first the information from the attribute definitions & given specs # if {[lindex $__wspec 0] eq "="} { - set __found 0 - foreach __att [$__container children] { - #ns_log notice "--field compare '$__field' '[$__att attribute_name]'" - if {[$__att attribute_name] eq $__field} { - #ns_log notice "--field $__field [$__att serialize]" - set __f [FormField new -volatile \ - -label [$__att pretty_name] -type [$__att datatype] \ - -spec [lindex $__wspec 1]] - set __spec ${__field}:[$__f asWidgetSpec] - set __wspec [lindex $__spec 0] - set __found 1 - break - } - } - if {!$__found} { - ns_log notice "--form WARNING: could not find field $__field" - } + set f [$data create_form_field \ + -name $__field \ + -slot [$data find_slot $__field] \ + -spec [lindex $__spec 1] \ + ] + + set __spec ${__field}:[$f asWidgetSpec] + set __wspec [lindex $__spec 0] } # # it might be necessary to update the folder spec for xinha - # (to locate the right folder) + # to locate the right folder # # ns_log notice "--field richtext '$__wspec' --> [string first richtext $__wspec]" if {[string first "richtext" $__wspec] > -1} { @@ -139,7 +113,7 @@ my log "--F rewritten spec is '$__newspec'" set __spec $__newspec } - # ad_form does a subst. escape esp. the javascript stuff + # ad_form does a subst, therefore escape esp. the javascript stuff set __spec [string map {\[ \\[ \] \\] \$ \\$ \\ \\\\} $__spec] } @@ -349,10 +323,7 @@ Class create PlainWikiForm -superclass WikiForm \ -parameter { - {f.text - {text:text(textarea),nospell,optional - {label #xowiki.content#} - {html {cols 80 rows 10}}}} + {f.text "= textarea(cols=80;rows=10)"} } # @@ -363,11 +334,8 @@ -parameter { {html { enctype multipart/form-data }} \ {field_list {item_id name text title creator description}} - {f.name - {name:text,nospell,optional {label #xowiki.name#} - {help_text {Can be obtained from the name of the uploaded file}}}} - {f.title - {title:text,optional {label #xowiki.title#} {html {size 80}} }} + {f.name "= optional,help_text=#xowiki.File-name-help_text#"} + {f.title "= optional"} {f.text {upload_file:file(file) {label #xowiki.content#} @@ -415,29 +383,19 @@ return [next] } +# {f.pub_date +# {pub_date:date,optional {format "YYYY MM DD HH24 MI"} {html {id date}} +# {after_html { Y-M-D} +# }} +# } Class create PodcastForm -superclass FileForm \ -parameter { {html { enctype multipart/form-data }} \ {field_list {item_id name text title subtitle creator pub_date duration keywords description}} - {f.subtitle - {subtitle:text,nospell,optional {label #xowiki.subtitle#} {html {size 80}}}} - {f.pub_date - {pub_date:date,optional {format "YYYY MM DD HH24 MI"} {html {id date}} - {after_html { Y-M-D} - }} - } - {f.duration - {duration:text,nospell,optional - {help_text {E.g. 9:16 means 9 minutes 16 seconds (if ffmpeg is installed and configured, it will get the value automatically)}} - }} - {f.keywords - {keywords:text,nospell,optional - {help_text {comma separated itunes keywords, e.g. salt, pepper, shaker, exciting}} - }} {validate { {upload_file {\[::xowiki::validate_file\]} {For new entries, \ a upload file must be provided}} @@ -447,6 +405,8 @@ }} } +# {help_text {E.g. 9:16 means 9 minutes 16 seconds (if ffmpeg is installed and configured, it will get the value automatically)}} + PodcastForm instproc to_timestamp {widgetinfo} { if {$widgetinfo ne ""} { foreach {y m day hour min} $widgetinfo break @@ -502,7 +462,7 @@ # don't call validate on the folder object, don't let people change its name set name [$data set name] if {$name eq "::[$data set parent_id]"} { - my f.name {name:text(inform) {label #xowiki.name#}} + my f.name "= inform,help_text=" my validate {{name {1} {dummy}} } #my log "--e don't validate folder id - parent_id = [$data set parent_id]" } @@ -513,14 +473,14 @@ ObjectForm instproc new_request {} { my instvar data permission::require_permission \ - -party_id [ad_conn user_id] -object_id [$data set parent_id] \ + -party_id [ad_conn user_id] -object_id [$data set parent_id] \ -privilege "admin" next } ObjectForm instproc edit_request {item_id} { my instvar data - my f.name {{name:text {label #xowiki.name#}}} + #my f.name {{name:text {label #xowiki.Page-name#}}} permission::require_permission \ -party_id [ad_conn user_id] -object_id [$data set parent_id] \ -privilege "admin" @@ -538,7 +498,6 @@ Class create PageTemplateForm -superclass WikiForm \ -parameter { {field_list {item_id name title creator text anon_instances description nls_language}} - {f.anon_instances "="} } # @@ -584,7 +543,7 @@ -parameter { {field_list_top {item_id name title creator}} {field_list_bottom {page_template description nls_language}} - {f.name {name:text(inform)}} + {f.name "= inform"} {f.page_template {page_template:text(hidden)}} {f.nls_language {nls_language:text(hidden)}} {with_categories true} @@ -632,40 +591,47 @@ PageInstanceEditForm instproc init {} { my instvar data page_instance_form_atts set item_id [$data form_parameter item_id] - set page_template [$data form_parameter page_template ""] - if {$page_template eq ""} { - set page_template [$data set page_template] - #my log "-- page_template = $page_template" + # + # make sure to have page template object loaded + # + set page_template_id [$data form_parameter page_template ""] + if {$page_template_id eq ""} { + set page_template_id [$data set page_template] } - #my log "-- calling page_template = $page_template" - set template [::Generic::CrItem instantiate -item_id $page_template] - $template volatile + set template [::Generic::CrItem instantiate -item_id $page_template_id] + $template destroy_on_cleanup set dont_edit [concat [[$data info class] edit_atts] [list title] \ [::Generic::CrClass set common_query_atts]] + + # + # compute list of form instance attributes + # set page_instance_form_atts [list] foreach {var _} [$data template_vars [$template set text]] { if {[lsearch $dont_edit $var] == -1} {lappend page_instance_form_atts $var} } my set field_list [concat [my field_list_top] $page_instance_form_atts [my field_list_bottom]] - #my log "--field_list [my set field_list]" - foreach __var [concat [my field_list_top] [my field_list_bottom]] { - set spec [my f.$__var] - set spec [string range $spec [expr {[string first : $spec]+1}] end] - my set f.$__var "$__var:[$data get_field_type $__var $spec]" - } + + # + # get widget specs from folder. + # All other specs are taken form attributes or form constraints. + # The widget_spec functionality might be deprecated in the future. + # foreach __var $page_instance_form_atts { - my set f.$__var "$__var:[$data get_field_type $__var [my textfieldspec]]" + set spec [$data widget_spec_from_folder_object [$data set name] [$template set name]] + if {$spec ne ""} { + my set f.$__var "$__var:$spec" + } } + my edit_page_title [$data get_from_template title] next #my log "--fields = [my fields]" } Class create FormInstanceEditForm -superclass PageInstanceEditForm \ -parameter { - {f.name - {name:text {label #xowiki.name#} {html {size 80}} - {help_text {Shortname to identify a page within a folder, typically lowercase characters}}}} + {f.name "= text"} } FormInstanceEditForm instproc edit_data {} { @@ -707,7 +673,6 @@ Class create FormForm -superclass ::xowiki::PageTemplateForm \ -parameter { {field_list {item_id name title creator text form form_constraints anon_instances description nls_language}} - {f.form_constraints "="} {f.text {text:richtext(richtext),nospell,optional {label #xowiki.template#} @@ -758,102 +723,5 @@ } - # first approximation for form fields. - # these could support not only asWidgetSpec, but as well asHTML - # todo: every formfield type should have its own class - Class FormField -parameter { - {required false} {type text} {label} {name} {spell false} {size 80} - {value ""} spec - } - FormField instproc init {} { - my instvar type options spec widget_type - if {![my exists label]} {my label [string totitle [my name]]} - foreach s [split $spec ,] { - switch -glob $s { - required {my set required true} - hidden {set type hidden} - inform {set type inform} - text {set type text} - date {set type date} - boolean {set type boolean} - numeric {set type text; #for the time being} - month {set type month} - label=* {my label [lindex [split $s =] 1]} - size=* {my size [lindex [split $s =] 1]} - default {error "unknown spec for entry [my name]: '$s'"} - } - } - switch $type { - hidden - - inform { - set widget_type text($type) - } - boolean { - set widget_type text(select) - set options {{No f} {Yes t}} - } - month { - set widget_type text(select) - set options { - {January 1} {February 2} {March 3} {April 4} {May 5} {June 6} - {July 7} {August 8} {September 9} {October 10} {November 11} {December 12} - } - } - default { - set widget_type $type - } - } - #my msg "--formField processing spec $spec -> widget_type = $widget_type" - } - FormField instproc asWidgetSpec {} { - my instvar widget_type options - set spec $widget_type - if {![my spell]} {append spec ",nospell"} - if {![my required]} {append spec ",optional"} - append spec " {label \"[my label]\"}" - if {$widget_type eq "text"} { - if {[my exists size]} {append spec " {html {size [my size]}}"} - } elseif {$widget_type eq "text(select)"} { - append spec " {options [list $options]}" - } - return $spec - } - FormField instproc render_form_widget {} { - # todo: for all types - set atts [list type text] - foreach att {size name value} { - if {[my exists $att]} {lappend atts $att [my set $att]} - } - - ::html::div -class form-widget {::html::input $atts {}} - } - FormField instproc render_item {} { - ::html::div -class form-item-wrapper { - ::html::div -class form-label { - ::html::label -for [my name] { - ::html::t [my label] - } - if {[my required]} { - ::html::div -class form-required-mark { - ::html::t " (#acs-templating.required#)" - } - } - } - my render_form_widget - } - } - FormField instproc renderValue {v} { - if {[my exists options]} { - foreach o [my set options] { - foreach {label value} $o break - if {$value eq $v} {return $label} - } - } - return $v - } - - - -} - +} \ No newline at end of file Index: openacs-4/packages/xowiki/tcl/xowiki-portlet-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/Attic/xowiki-portlet-procs.tcl,v diff -u -N -r1.63 -r1.64 --- openacs-4/packages/xowiki/tcl/xowiki-portlet-procs.tcl 18 Jun 2007 10:32:17 -0000 1.63 +++ openacs-4/packages/xowiki/tcl/xowiki-portlet-procs.tcl 25 Jun 2007 12:18:56 -0000 1.64 @@ -490,7 +490,7 @@ if {[[my info parent] set allow_edit]} { ImageField_EditIcon edit -label "" -html {style "padding-right: 2px;"} } - AnchorField title -label [_ xowiki.page_title] + AnchorField title -label [::xowiki::Page::slot::title set pretty_name] if {[[my info parent] set allow_delete]} { ImageField_DeleteIcon delete -label "" } @@ -558,7 +558,7 @@ TableWidget t1 -volatile \ -columns { - AnchorField title -label [_ xowiki.page_title] + AnchorField title -label [::xowiki::Page::slot::title set pretty_name] } db_foreach [my qn get_pages] \ @@ -610,7 +610,7 @@ TableWidget t1 -volatile \ -columns { - AnchorField title -label [_ xowiki.page_title] + AnchorField title -label [::xowiki::Page::slot::title set pretty_name] Field users -label Visitors -html { align right } } set since_condition "and [::xo::db::sql since_interval_condition time $interval]" @@ -633,7 +633,7 @@ TableWidget t1 -volatile \ -columns { - AnchorField title -label [_ xowiki.page_title] + AnchorField title -label [::xowiki::Page::slot::title set pretty_name] Field count -label Visits -html { align right } Field users -label Visitors -html { align right } } @@ -683,7 +683,7 @@ TableWidget t1 -volatile \ -columns { - AnchorField title -label [_ xowiki.page_title] + AnchorField title -label [::xowiki::Page::slot::title set pretty_name] } set or_clause "or i.item_id in (select x.page_id from xowiki_last_visited x, acs_objects o \ @@ -1992,31 +1992,39 @@ } ::xowiki::Page requireCSS "/resources/acs-templating/lists.css" + set return_url [::xo::cc url]?[::xo::cc actual_query] TableWidget t1 -volatile \ -columns { Field last_modified -label "Modification Date" -orderby last_modified Field creation_user -label "By User" -orderby creation_user AnchorField view -label "View" + ImageField_DeleteIcon delete -label "" } foreach {att order} [split $orderby ,] break set sql [::xowiki::FormInstance instance_select_query \ - -select_attributes "publish_date creation_user" \ + -select_attributes "publish_date creation_user revision_id" \ -from_clause ", xowiki_page_instance p" \ -with_subtypes 0 \ -orderby "$att $order" \ -where_clause " p.page_template = $form_item_id and p.page_instance_id = cr.revision_id " \ -folder_id [$package_id folder_id]] db_foreach [my qn get_pages] $sql { - t1 add \ - -view $name \ - -view.href [$package_id pretty_link $name] \ - -creation_user [::xo::get_user_name $creation_user] \ - -last_modified $publish_date - } + set p [::Generic::CrItem instantiate -item_id 0 -revision_id $revision_id] + $p destroy_on_cleanup + set page_link [$package_id pretty_link $name] + + t1 add \ + -view $name \ + -view.href $page_link \ + -creation_user [::xo::get_user_name $creation_user] \ + -delete.href [$package_id make_link -link $page_link $p delete return_url] \ + -last_modified $publish_date + } + set base [$package_id pretty_link [$__including_page name]] set label [$__including_page name] append html "

Instances of Form $label

\n" [t1 asHTML] 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 -r1.117 -r1.118 --- openacs-4/packages/xowiki/tcl/xowiki-procs.tcl 22 Jun 2007 13:32:02 -0000 1.117 +++ openacs-4/packages/xowiki/tcl/xowiki-procs.tcl 25 Jun 2007 12:18:56 -0000 1.118 @@ -16,11 +16,9 @@ -mime_type text/html \ -cr_attributes { if {[::xo::db::has_ltree]} { - ::Generic::Attribute new -attribute_name page_order -datatype text \ - -pretty_name "Order" -sqltype ltree + ::Generic::Attribute new -attribute_name page_order -datatype text -sqltype ltree } - ::Generic::Attribute new -attribute_name creator -datatype text \ - -pretty_name "Creator" + ::Generic::Attribute new -attribute_name creator -datatype text } \ -parameter { page_id @@ -32,18 +30,33 @@ name title text + description + nls_language {folder_id -100} {lang en} {render_adp 1} {absolute_links 0} } \ -form ::xowiki::WikiForm - # TODO: the following line is just a start. type, required+label should be just attributes - # of the slot object - ::xowiki::Page::slot::name set spec "text,required,label=#xowiki.name#" + # TODO: the following slot definitions are not meant to stay this way. + # when we change to the xotcl 1.5.0+ slots, this will go away + ::xowiki::Page::slot::name set pretty_name #xowiki.Page-name# + ::xowiki::Page::slot::name set required true + ::xowiki::Page::slot::name set help_text #xowiki.Page-name-help_text# + ::xowiki::Page::slot::name set datatype text + ::xowiki::Page::slot::title set pretty_name #xowiki.Page-title# + ::xowiki::Page::slot::title set required true + ::xowiki::Page::slot::title set datatype text + ::xowiki::Page::slot::description set pretty_name #xowiki.Page-description# + ::xowiki::Page::slot::description set spec "textarea(cols=80;rows=2)" + ::xowiki::Page::slot::description set datatype text + ::xowiki::Page::slot::text set pretty_name #xowiki.Page-text# + ::xowiki::Page::slot::text set datatype text + ::xowiki::Page::slot::nls_language set pretty_name #xowiki.Page-nls_language# + ::xowiki::Page::slot::nls_language set datatype text + ::xowiki::Page::slot::nls_language set spec {select(options=[xowiki::locales])} - ::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" \ @@ -60,14 +73,13 @@ -pretty_name "Podcast Item" -pretty_plural "Podcast Items" \ -table_name "xowiki_podcast_item" -id_column "podcast_item_id" \ -cr_attributes { - ::Generic::Attribute new -attribute_name pub_date -datatype date -sqltype timestamp \ - -pretty_name "Publication Date" + ::Generic::Attribute new -attribute_name pub_date -datatype date \ + -sqltype timestamp -spec "date(format=YYYY_MM_DD_HH24_MI)" ::Generic::Attribute new -attribute_name duration -datatype text \ - -pretty_name "Duration" - ::Generic::Attribute new -attribute_name subtitle -datatype text \ - -pretty_name "Subtitle" + -help_text "#xowiki.PodcastItem-duration-help_text#" + ::Generic::Attribute new -attribute_name subtitle -datatype text ::Generic::Attribute new -attribute_name keywords -datatype text \ - -pretty_name "Keywords" + -help_text "#xowiki.PodcastItem-keywords-help_text#" } \ -storage_type file \ -form ::xowiki::PodcastForm @@ -77,19 +89,17 @@ -table_name "xowiki_page_template" -id_column "page_template_id" \ -cr_attributes { ::Generic::Attribute new -attribute_name anon_instances -datatype boolean \ - -sqltype boolean -default "f" \ - -pretty_name "#xowiki.PageTemplate-anon_instances#" + -sqltype boolean -default "f" } \ -form ::xowiki::PageTemplateForm ::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 page_template -datatype integer ::Generic::Attribute new -attribute_name instance_attributes -datatype text \ - -pretty_name "Instance Attributes" -default "" + -default "" } \ -form ::xowiki::PageInstanceForm \ -edit_form ::xowiki::PageInstanceEditForm @@ -104,10 +114,8 @@ -pretty_name "XoWiki Form" -pretty_plural "XoWiki Forms" \ -table_name "xowiki_form" -id_column "xowiki_form_id" \ -cr_attributes { - ::Generic::Attribute new -attribute_name form -datatype text \ - -pretty_name "#xowiki.Form-form#" - ::Generic::Attribute new -attribute_name form_constraints -datatype text \ - -pretty_name "#xowiki.Form-form_constraints#" + ::Generic::Attribute new -attribute_name form -datatype text + ::Generic::Attribute new -attribute_name form_constraints -datatype text } \ -form ::xowiki::FormForm ::Generic::CrClass create FormInstance -superclass PageInstance \ @@ -300,6 +308,12 @@ my set parent_id $parent_id my set package_id $package_id my set creation_user $creation_user + # + # if we import from an instance without page_orders into an instance + # with page_orders, we need default values + if {[::xo::db::has_ltree] && ![my exists page_order]} { + my set page_order "" + } # in the general case, no more actions required } @@ -314,6 +328,24 @@ close $F } + # set default values. + # todo: with slots, it should be easier to set default values + # for non existing variables + PageInstance instproc demarshall {args} { + # some older versions do not have anon_instances + if {![my exists anon_instances]} { + my set anon_instances "f" + } + next + } + Form instproc demarshall {args} { + # some older versions do not have anon_instances + if {![my exists anon_instances]} { + my set anon_instances "t" + } + next + } + Page instproc copy_content_vars {-from_object:required} { array set excluded_var { folder_id 1 package_id 1 absolute_links 1 lang_links 1 @@ -423,7 +455,7 @@ next } - Page instproc regsub-eval {re string cmd} { + Page instproc regsub_eval {re string cmd} { subst [regsub -all $re [string map { \" \\\" \[ \\[ \] \\] \ \$ \\$ \\ \\\\} $string] \ "\[$cmd\]"] @@ -612,9 +644,9 @@ foreach l0 [split [lindex $source 0] \n] { append l $l0 if {[string first \{\{ $l] > -1 && [string first \}\} $l] == -1} continue - set l [my regsub-eval $RE(anchor) $l {my anchor "\1" "\2"}] - set l [my regsub-eval $RE(div) $l {my div "\2" "\3"}] - set l [my regsub-eval $RE(include) $l {my include "\1" "\2" "\3"}] + set l [my regsub_eval $RE(anchor) $l {my anchor "\1" "\2"}] + set l [my regsub_eval $RE(div) $l {my div "\2" "\3"}] + set l [my regsub_eval $RE(include) $l {my include "\1" "\2" "\3"}] regsub -all $RE(clean) $l {\1} l regsub -all $RE(clean2) $l { \1} l append content [string range $l 1 end] \n @@ -798,9 +830,9 @@ set content "" foreach l [split $source \n] { set l " $l" - set l [my regsub-eval $RE(anchor) $l {my anchor "\1" "\2"}] - set l [my regsub-eval $RE(div) $l {my div "\2" "\3"}] - set l [my regsub-eval $RE(include) $l {my include "\1" "\2" ""}] + set l [my regsub_eval $RE(anchor) $l {my anchor "\1" "\2"}] + set l [my regsub_eval $RE(div) $l {my div "\2" "\3"}] + set l [my regsub_eval $RE(include) $l {my include "\1" "\2" ""}] regsub -all $RE(clean) $l {\1} l append content [string range $l 1 end] \n } @@ -848,7 +880,7 @@ #my log "--F page_link=$page_link ---- " set t [TableWidget new -volatile \ -columns { - AnchorField name -label [_ xowiki.name] + AnchorField name -label [_ xowiki.Page-name] Field mime_type -label "Content Type" Field last_modified -label "Last Modified" Field mod_user -label "By User" @@ -921,29 +953,36 @@ } return $value } - PageInstance instproc get_field_type {name default_spec} { - my instvar page_template + PageInstance instproc widget_spec_from_folder_object {name given_template_name} { # get the widget field specifications from the payload of the folder object # for a field with a specified name in a specified page template - set spec $default_spec - set short_spec [my get_short_spec $name] - if {$short_spec ne ""} { - set f [FormField new -volatile -name $name -spec $short_spec] - return [$f asWidgetSpec] - } - set given_template_name [$page_template set name] + my instvar page_template foreach {s widget} [[my set parent_id] get_payload widget_specs] { foreach {template_name var_name} [split $s ,] break #ns_log notice "--w T.title = '$given_template_name' var=$name" if {([string match $template_name $given_template_name] || $given_template_name eq "") && [string match $var_name $name]} { - set spec $widget + return $widget_spec #ns_log notice "--w using $widget for $name" } } - #ns_log notice "--w returning spec $spec" - return $spec + return "" } + PageInstance instproc get_field_type {name default_spec} { + my instvar page_template + # get widget spec from folder (highest priority) + set spec [my widget_spec_from_folder_object $name [$page_template set name]] + if {$spec ne ""} { + return $spec + } + # get widget spec from attribute definition + set f [my create_form_field -name $name -slot [my find_slot $name]] + if {$f ne ""} { + return [$f asWidgetSpec] + } + # use default widget spec + return $default_spec + } PageInstance instproc get_from_template {var} { my instvar page_template @@ -972,6 +1011,8 @@ array set __ia [my set instance_attributes] foreach var [array names __ia] { #my log "-- set $var [list $__ia($var)]" + # TODO: just for the lookup, whether a field is a richt text field, + # there should be a more efficient and easier way... if {[string match "richtext*" [my get_field_type $var text]]} { # ignore the text/html info from htmlarea set value [lindex $__ia($var) 0] Index: openacs-4/packages/xowiki/tcl/xowiki-www-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/xowiki-www-procs.tcl,v diff -u -N -r1.53 -r1.54 --- openacs-4/packages/xowiki/tcl/xowiki-www-procs.tcl 22 Jun 2007 13:32:02 -0000 1.53 +++ openacs-4/packages/xowiki/tcl/xowiki-www-procs.tcl 25 Jun 2007 12:18:56 -0000 1.54 @@ -296,49 +296,61 @@ return $html } - FormInstance instproc createFormField {{-spec ""} {-configuration ""} -name} { - if {$spec ne ""} { - set f [FormField new -name $name -spec $spec] - } else { - # - # try first to get the information from the form constraints - # - set short_spec [my get_short_spec $name] - if {$short_spec ne ""} { - set f [FormField new -name $name -spec $short_spec] - } else { - - # TODO: this could be made cleaner by using slots, which require xotcl 1.5.*. - # currently, i do not want to force an upgrade to the newer xotcl versions. - set class [my info class] - set __container [::xo::OrderedComposite new -destroy_on_cleanup] - foreach cl [concat $class [$class info heritage]] { - if {[$cl exists cr_attributes]} {$__container contains [$cl cr_attributes]} - } - - # - # try to get the information from the attribute definitions - # - foreach __att [$__container children] { - #ns_log notice "--field compare '$__field' '[$__att attribute_name]'" - if {[$__att attribute_name] eq $name} { - #ns_log notice "--field $name [$__att serialize]" - set f [FormField new \ - -label [$__att pretty_name] -type [$__att datatype] \ - -spec [lindex $__wspec 1]] - break - } - } + Page instproc find_slot {name} { + set start_class [my info class] + foreach cl [concat $start_class [$start_class info heritage]] { + set slotobj ${cl}::slot::$name + if {[my isobject $slotobj]} { + #my msg $slotobj + return $slotobj } } - if {![info exists f]} { - error "could not find definitions for field $name" + return "" + } + + Page instproc create_form_field {-name -slot {-spec ""} {-configuration ""}} { + + if {$slot eq ""} { + # We have no slot, so create a minimal slot. This should only happen for instance attributes + set slot [::xo::Attribute new -pretty_name $name -datatype text -volatile -noinit] } + + set spec_list [list] + if {[$slot exists spec]} {lappend spec_list [$slot set spec]} + if {$spec ne ""} {lappend spec_list $spec} + #my msg "[self args] spec_list $spec_list" + #my msg "$name, spec_list = '[join $spec_list ,]'" + + if {[$slot exists pretty_name]} { + set label [$slot set pretty_name] + } else { + set label $name + ns_log notice "no pretty_name for variable $name in slot $slot" + } + + set f [FormField new -name $name \ + -label $label \ + -type [expr {[$slot exists datatype] ? [$slot set datatype] : "text"}] \ + -help_text [expr {[$slot exists help_text] ? [$slot set help_text] : ""}] \ + -required [expr {[$slot exists required] ? [$slot set required] : "false"}] \ + -spec [join $spec_list ,] \ + ] $f destroy_on_cleanup $f configure $configuration return $f } + PageInstance instproc create_form_field {-name -slot {-spec ""} {-configuration ""}} { + # TODO combine with form_constraints, Remove unneeded cases + set short_spec [my get_short_spec $name] + set spec_list [list] + if {$short_spec ne ""} {lappend spec_list $short_spec} + if {$spec ne ""} {lappend spec_list $spec} + #my msg "$name, short_spec '$short_spec', spec_list 1 = '[join $spec_list ,]'" + set f [next -name $name -slot $slot -spec [join $spec_list ,] -configuration $configuration] + return $f + } + FormInstance instproc edit {} { my instvar page_template doc root package_id @@ -362,11 +374,11 @@ } $fcn if {$anon_instances eq "f"} { - set f [my createFormField -name __name -spec "text,required,label=#xowiki.name#" \ + set f [my create_form_field -name __name -slot [my find_slot name] \ -configuration [list -value [my set name]]] $root insertBeforeFromScript {$f render_item} $fcn - set f [my createFormField -name __title -spec "text,required,label=#xowiki.title#" \ + set f [my create_form_field -name __title -slot [my find_slot title] \ -configuration [list -value [my set title]]] $root insertBeforeFromScript {$f render_item} $fcn } Index: openacs-4/packages/xowiki/www/oacs-view.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/oacs-view.adp,v diff -u -N -r1.37 -r1.38 --- openacs-4/packages/xowiki/www/oacs-view.adp 15 Jun 2007 07:29:40 -0000 1.37 +++ openacs-4/packages/xowiki/www/oacs-view.adp 25 Jun 2007 12:18:57 -0000 1.38 @@ -1,4 +1,4 @@ - + @title;noquote@ @context;noquote@ Index: openacs-4/packages/xowiki/www/oacs-view2.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/oacs-view2.adp,v diff -u -N -r1.16 -r1.17 --- openacs-4/packages/xowiki/www/oacs-view2.adp 15 Jun 2007 07:29:40 -0000 1.16 +++ openacs-4/packages/xowiki/www/oacs-view2.adp 25 Jun 2007 12:18:57 -0000 1.17 @@ -1,4 +1,4 @@ - + @title;noquote@ @context;noquote@ Index: openacs-4/packages/xowiki/www/oacs-view3.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/oacs-view3.adp,v diff -u -N -r1.11 -r1.12 --- openacs-4/packages/xowiki/www/oacs-view3.adp 15 Jun 2007 07:29:40 -0000 1.11 +++ openacs-4/packages/xowiki/www/oacs-view3.adp 25 Jun 2007 12:18:57 -0000 1.12 @@ -1,4 +1,4 @@ - + @title;noquote@ @context;noquote@ Index: openacs-4/packages/xowiki/www/view-default.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/view-default.adp,v diff -u -N -r1.33 -r1.34 --- openacs-4/packages/xowiki/www/view-default.adp 15 Jun 2007 07:29:40 -0000 1.33 +++ openacs-4/packages/xowiki/www/view-default.adp 25 Jun 2007 12:18:57 -0000 1.34 @@ -1,4 +1,4 @@ - + @title;noquote@ @context;noquote@ Index: openacs-4/packages/xowiki/www/view-links.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/view-links.adp,v diff -u -N -r1.23 -r1.24 --- openacs-4/packages/xowiki/www/view-links.adp 15 Jun 2007 07:29:40 -0000 1.23 +++ openacs-4/packages/xowiki/www/view-links.adp 25 Jun 2007 12:18:57 -0000 1.24 @@ -1,4 +1,4 @@ - +
Index: openacs-4/packages/xowiki/www/view-plain.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/view-plain.adp,v diff -u -N -r1.19 -r1.20 --- openacs-4/packages/xowiki/www/view-plain.adp 15 Jun 2007 07:29:40 -0000 1.19 +++ openacs-4/packages/xowiki/www/view-plain.adp 25 Jun 2007 12:18:57 -0000 1.20 @@ -1,4 +1,4 @@ - +
Index: openacs-4/packages/xowiki/www/admin/list.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/admin/list.tcl,v diff -u -N -r1.14 -r1.15 --- openacs-4/packages/xowiki/www/admin/list.tcl 22 Jun 2007 13:32:02 -0000 1.14 +++ openacs-4/packages/xowiki/www/admin/list.tcl 25 Jun 2007 12:18:57 -0000 1.15 @@ -56,7 +56,7 @@ BulkAction objects -id name -actions { Action new -label export -tooltip export -url export } - ImageField_EditIcon edit -label "" -html {style "padding-right: 2px;"} + ImageField_EditIcon edit -label "" -html {style "padding: 2px;"} if {$::individual_permissions} { ImageAnchorField permissions -src /resources/xowiki/permissions.png -width 16 \ -height 16 -border 0 -title "Manage Individual Permssions for this Item" \ @@ -67,13 +67,14 @@ -height 8 -border 0 -title "Toggle Publish Status" \ -alt "publish status" -label [_ xowiki.publish_status] -html {style "padding: 2px;"} } - Field syndicated -label "RSS" + Field syndicated -label "RSS" -html {style "padding: 2px;"} if {[::xo::db::has_ltree]} { - AnchorField page_order -label [_ xowiki.order] -orderby page_order + AnchorField page_order -label [_ xowiki.order] -orderby page_order -html {style "padding: 2px;"} } - AnchorField name -label [_ xowiki.name] -orderby name - Field object_type -label [_ xowiki.page_type] -orderby object_type - Field size -label "Size" -orderby size -html {align right} + AnchorField name -label [_ xowiki.Page-name] -orderby name -html {style "padding: 2px;"} + AnchorField title -label [_ xowiki.Page-title] -orderby title + Field object_type -label [_ xowiki.page_type] -orderby object_type -html {style "padding: 2px;"} + Field size -label "Size" -orderby size -html {align right style "padding: 2px;"} Field last_modified -label "Last Modified" -orderby last_modified Field mod_user -label "By User" -orderby mod_user ImageField_DeleteIcon delete -label "" ;#-html {onClick "return(confirm('Confirm delete?'));"} @@ -85,7 +86,7 @@ # -page_size 10 # -page_number 1 -set attributes [list revision_id content_length creation_user \ +set attributes [list revision_id content_length creation_user title \ "to_char(last_modified,'YYYY-MM-DD HH24:MI:SS') as last_modified"] if {[::xo::db::has_ltree]} { lappend attributes page_order @@ -110,6 +111,7 @@ t1 add \ -name $name \ + -title $title \ -object_type [string map [list "::xowiki::" ""] $object_type] \ -name.href $page_link \ -last_modified $last_modified \ Index: openacs-4/packages/xowiki/www/admin/test.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/admin/test.tcl,v diff -u -N -r1.5 -r1.6 --- openacs-4/packages/xowiki/www/admin/test.tcl 25 May 2007 11:52:02 -0000 1.5 +++ openacs-4/packages/xowiki/www/admin/test.tcl 25 Jun 2007 12:18:57 -0000 1.6 @@ -172,7 +172,7 @@ ? {::xo::cc user_id} 0 "user_id is guest" ? {::$package_id make_link ::$page_item_id delete return_url} "" \ "the public cannot delete this page" -? {::$package_id make_link -privilege admin -url admin/ $package_id {} {}} "" \ +? {::$package_id make_link -privilege admin -link admin/ $package_id {} {}} "" \ "the public cannot admin this package" ######################################################################## Index: openacs-4/packages/xowiki/www/portlets/categories-recent.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/portlets/Attic/categories-recent.tcl,v diff -u -N --- openacs-4/packages/xowiki/www/portlets/categories-recent.tcl 17 Aug 2006 01:44:26 -0000 1.7 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,65 +0,0 @@ -# $Id: categories-recent.tcl,v 1.7 2006/08/17 01:44:26 gustafn Exp $ -# display recent entries by categories -# -gustaf neumann -# -# valid parameters from the include are -# tree_name: match pattern, if specified displays only the trees with matching names -# max_entries: show given number of new entries -# skin: name of adp-file to render content - -::xowiki::Page proc __render_html { - -package_id - -max_entries - -tree_name -} { - set cattree [::xowiki::CatTree new -volatile -name "categories-recent"] - - foreach tree [category_tree::get_mapped_trees $package_id] { - foreach {tree_id my_tree_name ...} $tree {break} - if {$tree_name ne "" && ![string match $tree_name $my_tree_name]} continue - lappend trees $tree_id - } - if {[info exists trees]} { - set tree_select_clause "and c.tree_id in ([join $trees ,])" - } else { - set tree_select_clause "" - } - - db_foreach get_pages \ - "select c.category_id, i.name, r.title, \ - to_char(r.publish_date,'YYYY-MM-DD HH24:MI:SS') as publish_date \ - from category_object_map_tree c, cr_items i, cr_revisions r, xowiki_page p \ - where c.object_id = i.item_id and i.parent_id = [$package_id folder_id] \ - and r.revision_id = i.live_revision \ - and p.page_id = r.revision_id $tree_select_clause \ - order by r.publish_date desc limit $max_entries - " { - if {$title eq ""} {set title $name} - set itemobj [Object new] - set prefix "$publish_date " - set suffix "" - foreach var {name title prefix suffix} {$itemobj set $var [set $var]} - if {![info exists categories($category_id)]} { - set categories($category_id) [::xowiki::Category new \ - -package_id $package_id \ - -label [category::get_name $category_id]\ - -level 1] - $cattree add $categories($category_id) - } - $cattree add_to_category -category $categories($category_id) -itemobj $itemobj - } - return [$cattree render] -} - -set content [::xowiki::Page __render_html \ - -max_entries [expr {[info exists max_entries] ? $max_entries : 10}] \ - -tree_name [expr {[info exists tree_name] ? $tree_name : ""}] \ - -package_id [$__including_page set package_id] \ - ] -if {![info exists name]} {set name "Recently Changed Pages by Categories"} -set link "" - -if {![info exists skin]} {set skin portlet-skin} -if {![string match /* $skin]} {set skin [file dir $__adp_stub]/$skin} -template::set_file $skin - Index: openacs-4/packages/xowiki/www/portlets/categories.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/portlets/Attic/categories.tcl,v diff -u -N --- openacs-4/packages/xowiki/www/portlets/categories.tcl 14 Nov 2006 12:17:59 -0000 1.18 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,127 +0,0 @@ -# $Id: categories.tcl,v 1.18 2006/11/14 12:17:59 gustafn Exp $ -# display the category tree with associated pages -# -gustaf neumann -# -# valid parameters from the adp include are -# tree_name: match pattern, if specified displays only the trees -# with matching names -# no_tree_name: if specified, tree names are not displayed -# open_page: name (e.g. en:iMacs) of the page to be opened initially -# tree_style: boolean, default: true, display based on mktree -# skin: name of adp-file to render content - -::xowiki::Page proc __render_html { - -package_id - {-tree_name ""} - -tree_style - -no_tree_name:boolean - -count:boolean - {-summary 0} - {-open_page ""} - {-category_ids ""} - {-except_category_ids ""} -} { - set folder_id [$package_id folder_id] - # get the folder id from the including page - set open_item_id [expr {$open_page ne "" ? - [CrItem lookup -name $open_page -parent_id $folder_id] : 0}] - - set content "" - foreach tree [category_tree::get_mapped_trees $package_id] { - foreach {tree_id my_tree_name ...} $tree {break} - if {$tree_name ne "" && ![string match $tree_name $my_tree_name]} continue - if {!$no_tree_name} { - append content "

$my_tree_name

" - } - set categories [list] - set pos 0 - set cattree(0) [::xowiki::CatTree new -volatile -orderby pos -name $my_tree_name] - foreach category_info [category_tree::get_tree $tree_id] { - foreach {cid category_label deprecated_p level} $category_info {break} - set c [::xowiki::Category new -orderby pos -category_id $cid -package_id $package_id \ - -level $level -label $category_label -pos [incr pos]] - set cattree($level) $c - set plevel [expr {$level -1}] - $cattree($plevel) add $c - set category($cid) $c - lappend categories $cid - #set itemobj [Object new -set name en:index -set title MyTitle -set prefix "" -set suffix ""] - #$cattree(0) add_to_category -category $c -itemobj $itemobj -orderby title - } - - set sql "category_object_map c, cr_items ci, cr_revisions r, xowiki_page p \ - where c.object_id = ci.item_id and ci.parent_id = $folder_id \ - and ci.content_type not in ('::xowiki::PageTemplate') \ - and category_id in ([join $categories ,]) \ - and r.revision_id = ci.live_revision \ - and p.page_id = r.revision_id" - - if {$except_category_ids ne ""} { - append sql \ - " and not exists (select * from category_object_map c2 \ - where ci.item_id = c2.object_id \ - and c2.category_id in ($except_category_ids))" - } - ns_log notice "--c category_ids=$category_ids" - if {$category_ids ne ""} { - foreach cid [split $category_ids ,] { - append sql " and exists (select * from category_object_map \ - where object_id = ci.item_id and category_id = $cid)" - } - } - - if {$count} { - db_foreach get_counts \ - "select count(*) as nr,category_id from $sql group by category_id" { - $category($category_id) set count $nr - set s [expr {$summary ? "&summary=$summary" : ""}] - $category($category_id) href [ad_conn url]?category_id=$category_id$s - $category($category_id) open_tree - } - append content [$cattree(0) render -tree_style $tree_style] - } else { - db_foreach get_pages \ - "select ci.item_id, ci.name, ci.content_type, r.title, category_id from $sql" { - if {$title eq ""} {set title $name} - set itemobj [Object new] - set prefix "" - set suffix "" - foreach var {name title prefix suffix} {$itemobj set $var [set $var]} - $cattree(0) add_to_category \ - -category $category($category_id) \ - -itemobj $itemobj \ - -orderby title \ - -open_item [expr {$item_id == $open_item_id}] - } - append content [$cattree(0) render -tree_style $tree_style] - } - } - return $content -} - -set link "" -if {![info exists name]} {set name "Categories"} -# TODO new style includelets, based on ::xo::cc -set summary [expr {[ns_conn isconnected] ? [ns_queryget summary 0]} : 0] -foreach _ {category_ids except_category_ids} { - if {![info exists $_]} { - # TODO new style includelets, based on ::xo::cc - set $_ [expr {[ns_conn isconnected] ? [ns_queryget $_ ""] : ""}] - } -} -set content [::xowiki::Page __render_html \ - -package_id [$__including_page set package_id] \ - -tree_name [expr {[info exists tree_name] ? $tree_name : ""}] \ - -tree_style [expr {[info exists tree_style] ? $tree_style : 1}] \ - -no_tree_name [info exists no_tree_name] \ - -count [info exists count] \ - -summary $summary \ - -open_page [expr {[info exists open_page] ? $open_page : ""}] \ - -category_ids $category_ids \ - -except_category_ids $except_category_ids \ - ] - -if {![info exists skin]} {set skin portlet-skin} -if {![string match /* $skin]} {set skin [file dir $__adp_stub]/$skin} -template::set_file $skin - Index: openacs-4/packages/xowiki/www/portlets/last-visited.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/portlets/Attic/last-visited.tcl,v diff -u -N --- openacs-4/packages/xowiki/www/portlets/last-visited.tcl 17 Aug 2006 01:44:26 -0000 1.6 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,53 +0,0 @@ -# $Id: last-visited.tcl,v 1.6 2006/08/17 01:44:26 gustafn Exp $ -# display last visited entries -# -gustaf neumann -# -# valid parameters from the include are -# max_entries: show given number of new entries -# user_id -# skin: name of adp-file to render content - -::xowiki::Page requireCSS "/resources/acs-templating/lists.css" - -::xowiki::Page proc __render_html { - -folder_id - -package_id - -user_id - -max_entries -} { - TableWidget t1 -volatile \ - -columns { - AnchorField title -label [_ xowiki.page_title] - } - - db_foreach get_pages \ - "select r.title,i.name, to_char(x.time,'YYYY-MM-DD HH24:MI:SS') as visited_date \ - from xowiki_last_visited x, xowiki_page p, cr_items i, cr_revisions r \ - where x.page_id = i.item_id and i.live_revision = p.page_id and \ - r.revision_id = p.page_id and x.user_id = $user_id and x.package_id = $package_id - order by x.time desc limit $max_entries - " { - if {$title eq ""} {set title $name} - - t1 add \ - -title $title \ - -title.href [::$package_id pretty_link $name] - } - return [t1 asHTML] -} - -set link "" -if {![info exists name]} {set name "Last Visited Pages"} -set content [::xowiki::Page __render_html \ - -folder_id [$__including_page set parent_id] \ - -package_id [$__including_page set package_id] \ - -max_entries [expr {[info exists max_entries] ? $max_entries : 20}] \ - -user_id [expr {[info exists user_id] ? $user_id : \ - [ad_conn isconnected] ? [ad_conn user_id] : 0}] \ - ] - -if {![info exists skin]} {set skin portlet-skin} -if {![string match /* $skin]} {set skin [file dir $__adp_stub]/$skin} -template::set_file $skin - - Index: openacs-4/packages/xowiki/www/portlets/most-popular.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/portlets/Attic/most-popular.tcl,v diff -u -N --- openacs-4/packages/xowiki/www/portlets/most-popular.tcl 17 Aug 2006 01:44:26 -0000 1.5 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,51 +0,0 @@ -# $Id: most-popular.tcl,v 1.5 2006/08/17 01:44:26 gustafn Exp $ -# display last visited entries -# -gustaf neumann -# -# valid parameters from the include are -# max_entries: show given number of new entries -# skin: name of adp-file to render content - -::xowiki::Page requireCSS "/resources/acs-templating/lists.css" - -::xowiki::Page proc __render_html { - -folder_id - -package_id - -max_entries -} { - - TableWidget t1 -volatile \ - -columns { - AnchorField title -label [_ xowiki.page_title] - Field count -label Count -html { align right } - } - - db_foreach get_pages \ - "select sum(x.count), x.page_id, r.title,i.name \ - from xowiki_last_visited x, xowiki_page p, cr_items i, cr_revisions r \ - where x.page_id = i.item_id and i.live_revision = p.page_id and r.revision_id = p.page_id \ - and x.package_id = $package_id group by x.page_id, r.title, i.name \ - order by sum desc limit $max_entries " \ - { - if {$title eq ""} {set title $name} - - t1 add \ - -title $title \ - -title.href [::$package_id pretty_link $name] \ - -count $sum - } - return [t1 asHTML] -} - -set content [::xowiki::Page __render_html \ - -folder_id [$__including_page set parent_id] \ - -package_id [$__including_page set package_id] \ - -max_entries [expr {[info exists max_entries] ? $max_entries : 10}] \ - ] -if {![info exists name]} {set name "Most Popular Pages"} -set link "" - -if {![info exists skin]} {set skin portlet-skin} -if {![string match /* $skin]} {set skin [file dir $__adp_stub]/$skin} -template::set_file $skin - Index: openacs-4/packages/xowiki/www/portlets/recent.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/portlets/Attic/recent.tcl,v diff -u -N --- openacs-4/packages/xowiki/www/portlets/recent.tcl 17 Aug 2006 01:44:26 -0000 1.6 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,54 +0,0 @@ -# $Id: recent.tcl,v 1.6 2006/08/17 01:44:26 gustafn Exp $ -# display recent entries -# -gustaf neumann -# -# valid parameters from the include are -# max_entries: show given number of new entries -# skin: name of adp-file to render content - -::xowiki::Page requireCSS "/resources/acs-templating/lists.css" - -::xowiki::Page proc __render_html { - -folder_id - -package_id - -max_entries -} { - TableWidget t1 -volatile \ - -columns { - Field date -label "Modification Date" - AnchorField title -label [_ xowiki.page_title] - } - - db_foreach get_pages \ - "select i.name, r.title, \ - to_char(r.publish_date,'YYYY-MM-DD HH24:MI:SS') as publish_date \ - from cr_items i, cr_revisions r, xowiki_page p \ - where i.parent_id = $folder_id \ - and r.revision_id = i.live_revision \ - and p.page_id = r.revision_id \ - order by r.publish_date desc limit $max_entries\ - " { - if {$title eq ""} {set title $name} - - t1 add \ - -title $title \ - -title.href [::$package_id pretty_link $name] \ - -date $publish_date - } - - return [t1 asHTML] -} - -ns_log notice "--I folder=[$__including_page set parent_id]" - -set link "" -set content [::xowiki::Page __render_html \ - -folder_id [$__including_page set parent_id] \ - -package_id [$__including_page set package_id] \ - -max_entries [expr {[info exists max_entries] ? $max_entries : 20}] \ - ] - -if {![info exists skin]} {set skin portlet-skin} -if {![string match /* $skin]} {set skin [file dir $__adp_stub]/$skin} -template::set_file $skin - Index: openacs-4/packages/xowiki/www/portlets/rss-button.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/portlets/Attic/rss-button.adp,v diff -u -N --- openacs-4/packages/xowiki/www/portlets/rss-button.adp 5 May 2006 10:57:03 -0000 1.2 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1 +0,0 @@ -RSS Index: openacs-4/packages/xowiki/www/portlets/rss-button.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/portlets/Attic/rss-button.tcl,v diff -u -N --- openacs-4/packages/xowiki/www/portlets/rss-button.tcl 5 May 2006 10:57:03 -0000 1.2 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,5 +0,0 @@ -# use "span" to specify parameters to the rss call -set rss_param [expr {[info exists span] ? $span : "10d"}] -set folder_id [$__including_page set parent_id] -set package_id [$folder_id set package_id] -set instance [site_node::get_url_from_object_id -object_id $package_id] Index: openacs-4/packages/xowiki/www/portlets/tags.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/portlets/Attic/tags.tcl,v diff -u -N --- openacs-4/packages/xowiki/www/portlets/tags.tcl 12 Sep 2006 12:01:24 -0000 1.3 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,61 +0,0 @@ -# $Id: tags.tcl,v 1.3 2006/09/12 12:01:24 gustafn Exp $ -# display the tags -# -gustaf neumann -# -# valid parameters from the adp include are -# popular: list tags from all users -# skin: name of adp-file to render content - -::xowiki::Page proc __render_html { - -folder_id - -user_id - {-limit 20} - {-summary 0} - {-popular 0} -} { - - # get the folder id from the including page - set package_id [$folder_id set package_id] - - if {$popular} { - set label [_ xowiki.popular_tags_label] - set tag_type ptag - set sql "select count(*) as nr,tag from xowiki_tags where \ - package_id=$package_id group by tag order by tag limit $limit" - } else { - set label [_ xowiki.your_tags_label] - set tag_type tag - set sql "select count(*) as nr,tag from xowiki_tags where \ - user_id=$user_id and package_id=$package_id group by tag order by tag" - } - set entries [list] - db_foreach get_counts $sql { - set s [expr {$summary ? "&summary=$summary" : ""}] - set href [::$package_id url]?$tag_type=[ad_urlencode $tag]$s - lappend entries "$tag ($nr)" - } - set content "" - if {[llength $entries]>0} { - append content "

$label

" \ - "[join $entries {, }]
\n" - } - return $content -} - -set link "" -if {![info exists name]} {set name "Tags"} -if {![info exists limit]} {set limit 20} -set summary [ns_queryget summary 0] -set content [::xowiki::Page __render_html \ - -folder_id [$__including_page set parent_id] \ - -user_id [::xo::cc user_id] \ - -summary $summary \ - -limit $limit \ - -popular [info exists popular] \ - ] - -if {![info exists skin]} {set skin portlet-skin} -if {![string match /* $skin]} {set skin [file dir $__adp_stub]/$skin} -template::set_file $skin - - Index: openacs-4/packages/xowiki/www/portlets/weblog.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/portlets/Attic/weblog.adp,v diff -u -N --- openacs-4/packages/xowiki/www/portlets/weblog.adp 19 Jun 2006 00:40:04 -0000 1.2 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,19 +0,0 @@ -
-@name@ -
-
-
- -
@filter_msg;noquote@
-
- @content;noquote@ - - previous page - - - next page

- -

-
Index: openacs-4/packages/xowiki/www/portlets/wiki.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/portlets/Attic/wiki.tcl,v diff -u -N --- openacs-4/packages/xowiki/www/portlets/wiki.tcl 17 Aug 2006 01:44:26 -0000 1.8 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,28 +0,0 @@ -# $Id: wiki.tcl,v 1.8 2006/08/17 01:44:26 gustafn Exp $ -# display a wiki page included in a different wiki page -# -gustaf neumann -# -# valid parameters from the include are -# name: name of the xowiki page to render -# skin: name of adp-file to render content - - -$__including_page instvar package_id -set page [$package_id resolve_request -path $name] -$page volatile - -if {[::xowiki::Page incr recursion_count]<3} { - set content [$page render] - set link [::[$page package_id] pretty_link $name] -} else { - set content "Recursion Limit exceeded, items are nested to deep!" -} - -::xowiki::Page incr recursion_count -1 -#strip language prefix for name -regexp {^..:(.*)$} $name _ name - -if {![info exists skin]} {set skin portlet-skin} -if {![string match /* $skin]} {set skin [file dir $__adp_stub]/$skin} -template::set_file $skin -