Index: openacs-4/packages/xowiki/tcl/package-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/package-procs.tcl,v
diff -u -r1.35 -r1.36
--- openacs-4/packages/xowiki/tcl/package-procs.tcl 17 Feb 2007 19:41:08 -0000 1.35
+++ openacs-4/packages/xowiki/tcl/package-procs.tcl 17 Feb 2007 23:01:36 -0000 1.36
@@ -41,6 +41,19 @@
return $page
}
+ Package ad_proc instances {{-include_unmounted false}} {
+ @return list of package_ids of xowiki instances
+ } {
+ if {$include_unmounted} {
+ return [db_list get_xowiki_packages {select package_id \
+ from apm_packages where package_key = 'xowiki'}]
+ } else {
+ return [db_list get_mounted_packages {select package_id \
+ from apm_packages p, site_nodes s \
+ where package_key = 'xowiki' and s.object_id = p.package_id}]
+ }
+ }
+
Package ad_proc get_url_from_id {{-item_id 0} {-revision_id 0}} {
Get the full URL from a page in situations, where the context is not set up.
@see instantiate_page_from_id
@@ -453,6 +466,12 @@
}
+
+ ###############################################################
+ #
+ # user callable methods
+ #
+
Package ad_instproc reindex {} {
reindex all items of this package
} {
@@ -467,20 +486,296 @@
}
}
- # the following three functions should be moved form page-proc to here
- Package instproc rss {} {
- my instvar id
- set cmd [list ::xowiki::Page rss -package_id $id]
- if {[regexp {[^0-9]*([0-9]+)d} [my query_parameter rss] _ days]} {
- lappend cmd -days $days
+ #
+ # Package import
+ #
+
+ Package ad_instproc import {-user_id -folder_id {-replace 0} -objects} {
+ import the specified pages into the xowiki instance
+ } {
+ set package_id [my id]
+ if {![info exists folder_id]} {set folder_id [my folder_id]}
+ if {![info exists user_id]} {set user_id [::xo::cc user_id]}
+ if {![info exists objects]} {set objects [::xowiki::Page allinstances]}
+
+ set msg "processing objects: $objects
"
+ set added 0
+ set replaced 0
+ set updated 0
+ array set excluded_var {
+ folder_id 1 package_id 1 absolute_links 1 lang_links 1
+ publish_status 1 item_id 1 revision_id 1 last_modified 1 parent_id 1
}
- eval $cmd
+ foreach o $objects {
+ $o set parent_id $folder_id
+ $o set package_id $package_id
+ $o set creation_user $user_id
+ # page instances have references to page templates, add these first
+ if {[$o istype ::xowiki::PageInstance]} continue
+ set item_id [CrItem lookup -name [$o set name] -parent_id $folder_id]
+ if {$item_id != 0} {
+ if {$replace} { ;# we delete the original
+ ::Generic::CrItem delete -item_id $item_id
+ set item_id 0
+ incr replaced
+ } else {
+ ::Generic::CrItem instantiate -item_id $item_id
+ foreach var [$o info vars] {
+ if {![info exists excluded_var($var)]} {
+ $item_id set $var [$o set $var]
+ }
+ }
+ $item_id save
+ incr updated
+ }
+ }
+ if {$item_id == 0} {
+ $o save_new
+ incr added
+ }
+ }
+
+ foreach o $objects {
+ if {[$o istype ::xowiki::PageInstance]} {
+ db_transaction {
+ set item_id [CrItem lookup -name [$o set name] -parent_id $folder_id]
+ if {$item_id != 0} {
+ if {$replace} { ;# we delete the original
+ ::Generic::CrItem delete -item_id $item_id
+ set item_id 0
+ incr replaced
+ } else {
+ ::Generic::CrItem instantiate -item_id $item_id
+ foreach var [$o info vars] {
+ if {![info exists excluded_var($var)]} {
+ $item_id set $var [$o set $var]
+ }
+ }
+ $item_id save
+ incr updated
+ }
+ }
+ if {$item_id == 0} { ;# the item does not exist -> update reference and save
+ set old_template_id [$o set page_template]
+ set template [CrItem lookup \
+ -name [$old_template_id set name] \
+ -parent_id $folder_id]
+ $o set page_template $template
+ $o save_new
+ incr added
+ }
+ }
+ }
+ $o destroy
+ }
+ append msg "$added objects newly inserted, $updated object updated, $replaced objects replaced
"
}
- Package instproc google-sitemap {} {
- my instvar id
- ::xowiki::Page [self proc] -package_id $id
+
+ #
+ # RSS 2.0 support
+ #
+
+ Package instproc rss_head {
+ -channel_title
+ -link
+ -description
+ {-language en-us}
+ } {
+#
+ return "
+
+
+ $channel_title
+ $link
+ $description
+ $language
+ xowiki"
}
+
+ Package instproc rss_item {-creator -title -link -guid -description -pubdate } {
+ append result - \n\
+ $creator \n\
+ $title \n\
+ $link \n\
+ "" $guid \n\
+ $description \n\
+ $pubdate \n\
+
\n
+ }
+
+ Package instproc rss_tail {} {
+ return "\n\n\n"
+ }
+
+ Package ad_instproc rss {
+ -maxentries
+ -days
+ } {
+ Report content of xowiki folder in rss 2.0 format. The
+ reporting order is descending by date. The title of the feed
+ is taken from the title, the description
+ is taken from the description field of the folder object.
+
+ @param maxentries maximum number of entries retrieved
+ @param days report entries changed in speficied last days
+
+ } {
+ set package_id [my id]
+ set folder_id [::$package_id folder_id]
+
+ if {![info exists days] &&
+ [regexp {[^0-9]*([0-9]+)d} [my query_parameter rss] _ days]} {
+ # setting the variable days
+ }
+
+ set limit_clause [expr {[info exists maxentries] ? " limit $maxentries" : ""}]
+ set timerange_clause [expr {[info exists days] ?
+ " and p.last_modified > (now() + interval '$days days ago')" : ""}]
+
+ set xmlMap { & & < < > > \" " ' ' }
+
+ set content [my rss_head \
+ -channel_title [string map $xmlMap [::$folder_id set title ]] \
+ -description [string map $xmlMap [::$folder_id set description]] \
+ -link [ad_url][site_node::get_url_from_object_id -object_id $package_id] \
+ ]
+
+ db_foreach get_pages \
+ "select s.body, p.name, p.creator, p.title, p.page_id,\
+ p.object_type as content_type, p.last_modified, p.description \
+ from xowiki_pagex p, syndication s, cr_items i \
+ where i.parent_id = $folder_id and i.live_revision = s.object_id \
+ and s.object_id = p.page_id $timerange_clause \
+ order by p.last_modified desc $limit_clause \
+ " {
+
+ if {[string match "::*" $name]} continue
+ if {$content_type eq "::xowiki::PageTemplate::"} continue
+
+ set description [string trim $description]
+ if {$description eq ""} {set description $body}
+ regexp {^([^.]+)[.][0-9]+(.*)$} $last_modified _ time tz
+
+ if {$title eq ""} {set title $name}
+ #append title " ($content_type)"
+ set time "[clock format [clock scan $time] -format {%a, %d %b %Y %T}] ${tz}00"
+ append content [my rss_item \
+ -creator [string map $xmlMap $creator] \
+ -title [string map $xmlMap $title] \
+ -link [::$package_id pretty_link -absolute true $name] \
+ -guid [ad_url]/$page_id \
+ -description [string map $xmlMap $description] \
+ -pubdate $time \
+ ]
+ }
+
+ append content [my rss_tail]
+ #set t text/plain
+ set t text/xml
+ ns_return 200 $t $content
+ }
+
+ #
+ # Google sitemap support
+ #
+
+ Package ad_instproc google-sitemap {
+ -maxentries
+
+ {-changefreq "daily"}
+ {-priority "0.5"}
+ } {
+ Report content of xowiki folder in google site map format
+ https://www.google.com/webmasters/sitemaps/docs/en/protocol.html
+
+ @param maxentries maximum number of entries retrieved
+ @param package_id to determine the xowiki instance
+ @param changefreq changefreq as defined by google
+ @param priority priority as defined by google
+
+ } {
+ set package_id [my id]
+ set folder_id [::$package_id folder_id]
+
+ set limit_clause [expr {[info exists maxentries] ? " limit $maxentries" : ""}]
+ set timerange_clause ""
+ set xmlMap { & & < < > > \" " ' ' }
+
+ set content {
+
+}
+ db_foreach get_pages \
+ "select s.body, p.name, p.creator, p.title, p.page_id,\
+ p.object_type as content_type, p.last_modified, p.description \
+ from xowiki_pagex p, syndication s, cr_items i \
+ where i.parent_id = $folder_id and i.live_revision = s.object_id \
+ and s.object_id = p.page_id $timerange_clause \
+ order by p.last_modified desc $limit_clause \
+ " {
+ my log "--found $name"
+ if {[string match "::*" $name]} continue
+ if {$content_type eq "::xowiki::PageTemplate::"} continue
+
+ regexp {^([^.]+)[.][0-9]+(.*)$} $last_modified _ time tz
+
+ set time "[clock format [clock scan $time] -format {%Y-%m-%dT%T}]${tz}:00"
+ append content \n\
+ [::$package_id pretty_link -absolute true $name] \n\
+ $time \n\
+ $changefreq \n\
+ $priority \n\
+ \n
+ }
+
+ append content \n
+ set t text/plain
+ #set t text/xml
+ ns_return 200 $t $content
+ }
+
+ Package ad_proc google-sitemapindex {
+ {-changefreq "daily"}
+ {-priority "priority"}
+ } {
+ Provide a sitemap index of all xowiki instances in google site map format
+ https://www.google.com/webmasters/sitemaps/docs/en/protocol.html
+
+ @param maxentries maximum number of entries retrieved
+ @param package_id to determine the xowiki instance
+ @param changefreq changefreq as defined by google
+ @param priority priority as defined by google
+
+ } {
+
+ set content {
+
+}
+ foreach package_id [::xowiki::Package instances] {
+ set last_modified [db_string get_newest_modification_date \
+ "select last_modified from acs_objects where package_id = $package_id \
+ order by last_modified desc limit 1"]
+
+ regexp {^([^.]+)[.][0-9]+(.*)$} $last_modified _ time tz
+ set time "[clock format [clock scan $time] -format {%Y-%m-%dT%T}]${tz}:00"
+
+ my log "--site_node::get_from_object_id -object_id $package_id"
+ array set info [site_node::get_from_object_id -object_id $package_id]
+
+ append content \n\
+ [ad_url]$info(url)?google-sitemap \n\
+ $time \n\
+
+ }
+ append content \n
+ set t text/plain
+ #set t text/xml
+ ns_return 200 $t $content
+ }
+
Package instproc google-sitemapindex {} {
+ # deprecated
::xowiki::Page [self proc]
}
@@ -496,16 +791,15 @@
my instvar folder_id id
if {![info exists item_id]} {
set item_id [my query_parameter item_id]
- my log "--D item_id from query parameter $item_id"
+ #my log "--D item_id from query parameter $item_id"
set name [my query_parameter name]
}
if {$item_id ne ""} {
- my log "--D trying to delete $item_id $name"
+ #my log "--D trying to delete $item_id $name"
::Generic::CrItem delete -item_id $item_id
- #ns_cache flush xotcl_object_cache ::$item_id;;; done by generic
- # we should probably flush as well cached revisions
+
if {$name eq "::$folder_id"} {
- my log "--D deleting folder object ::$folder_id"
+ #my log "--D deleting folder object ::$folder_id"
ns_cache flush xotcl_object_cache ::$folder_id
ns_cache flush xotcl_object_type_cache item_id-of-$folder_id
::$folder_id destroy
@@ -518,6 +812,10 @@
my returnredirect [my query_parameter "return_url" [$id package_url]]
}
+ #
+ # policy management
+ #
+
Package instproc condition {method attr value} {
switch $attr {
has_class {set result [expr {[my query_parameter object_type ""] eq $value}]}
Index: openacs-4/packages/xowiki/tcl/xowiki-callback-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/xowiki-callback-procs.tcl,v
diff -u -r1.10 -r1.11
--- openacs-4/packages/xowiki/tcl/xowiki-callback-procs.tcl 5 Jan 2007 21:22:20 -0000 1.10
+++ openacs-4/packages/xowiki/tcl/xowiki-callback-procs.tcl 17 Feb 2007 23:01:36 -0000 1.11
@@ -106,7 +106,7 @@
ns_log notice "-- upgrading to 0.22"
set folder_ids [list]
set package_ids [list]
- db_foreach get_xowiki_packages {select package_id from apm_packages where package_key = 'xowiki'} {
+ foreach package_id [::xowiki::Package instances] {
set folder_id [db_list get_folder_id "select f.folder_id from cr_items c, cr_folders f \
where c.name = 'xowiki: $package_id' and c.item_id = f.folder_id"]
if {$folder_id ne ""} {
@@ -133,8 +133,7 @@
contract_name FtsContentProvider
owner xowiki
}
-# foreach pkgid [site_node::get_children -package_key xowiki -all \
-# -node_id 0 -element package_id] {
+# foreach pkgid [::xowiki::Package instances] {
# ::xowiki::Page reindex -package_id $pkgid
# }
}
@@ -177,8 +176,7 @@
ns_log notice "-- upgrading to 0.31"
set folder_ids [list]
set package_ids [list]
- set package_ids [db_list get_xowiki_packages {select package_id from apm_packages where package_key = 'xowiki'}]
- foreach package_id $package_ids {
+ foreach package_id [::xowiki::Package instances] {
set folder_id [db_string get_folder_id "select f.folder_id from cr_items c, cr_folders f \
where c.name = 'xowiki: $package_id' and c.item_id = f.folder_id"]
if {$folder_id ne ""} {
@@ -233,9 +231,7 @@
} {
set folder_ids [list]
set package_ids [list]
- set package_ids [db_list get_xowiki_packages \
- {select package_id from apm_packages where package_key = 'xowiki'}]
- foreach package_id $package_ids {
+ foreach package_id [::xowiki::Package instances] {
ns_log notice "checking package_id $package_id"
set folder_id [db_list get_folder_id "select f.folder_id from cr_items c, cr_folders f \
where c.name = 'xowiki: $package_id' and c.item_id = f.folder_id"]
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.73 -r1.74
--- openacs-4/packages/xowiki/tcl/xowiki-procs.tcl 30 Jan 2007 11:36:07 -0000 1.73
+++ openacs-4/packages/xowiki/tcl/xowiki-procs.tcl 17 Feb 2007 23:01:36 -0000 1.74
@@ -215,281 +215,16 @@
return $sql
}
-
- Page proc rss_head {
- -channel_title
- -link
- -description
- {-language en-us}
- } {
-#
- return "
-
-
- $channel_title
- $link
- $description
- $language
- xowiki"
- }
-
- Page proc rss_item {-creator -title -link -guid -description -pubdate } {
- append result - \n\
- $creator \n\
- $title \n\
- $link \n\
- "" $guid \n\
- $description \n\
- $pubdate \n\
-
\n
- }
-
- Page proc rss_tail {} {
- return "\n\n\n"
- }
-
- Page ad_proc rss {
- -maxentries
- -days
- -package_id:required
- } {
- Report content of xowiki folder in rss 2.0 format. The
- reporting order is descending by date. The title of the feed
- is taken from the title, the description
- is taken from the description field of the folder object.
+ Page proc import {-user_id -package_id -folder_id {-replace 0} -objects} {
+ my log "DEPRECATED"
+ if {![info exists package_id]} {set package_id [::xo::cc package_id]}
+ set cmd [list $package_id import -replace $replace]
- @param maxentries maximum number of entries retrieved
- @param days report entries changed in speficied last days
- @param package_id to determine the xowiki instance
-
- } {
- set folder_id [::$package_id folder_id]
-
- set limit_clause [expr {[info exists maxentries] ? " limit $maxentries" : ""}]
- set timerange_clause [expr {[info exists days] ?
- " and p.last_modified > (now() + interval '$days days ago')" : ""}]
-
- set xmlMap { & & < < > > \" " ' ' }
-
- set content [my rss_head \
- -channel_title [string map $xmlMap [::$folder_id set title ]] \
- -description [string map $xmlMap [::$folder_id set description]] \
- -link [ad_url][site_node::get_url_from_object_id -object_id $package_id] \
- ]
-
- db_foreach get_pages \
- "select s.body, p.name, p.creator, p.title, p.page_id,\
- p.object_type as content_type, p.last_modified, p.description \
- from xowiki_pagex p, syndication s, cr_items i \
- where i.parent_id = $folder_id and i.live_revision = s.object_id \
- and s.object_id = p.page_id $timerange_clause \
- order by p.last_modified desc $limit_clause \
- " {
-
- if {[string match "::*" $name]} continue
- if {$content_type eq "::xowiki::PageTemplate::"} continue
-
- set description [string trim $description]
- if {$description eq ""} {set description $body}
- regexp {^([^.]+)[.][0-9]+(.*)$} $last_modified _ time tz
-
- if {$title eq ""} {set title $name}
- #append title " ($content_type)"
- set time "[clock format [clock scan $time] -format {%a, %d %b %Y %T}] ${tz}00"
- append content [my rss_item \
- -creator [string map $xmlMap $creator] \
- -title [string map $xmlMap $title] \
- -link [::$package_id pretty_link -absolute true $name] \
- -guid [ad_url]/$page_id \
- -description [string map $xmlMap $description] \
- -pubdate $time \
- ]
- }
-
- append content [my rss_tail]
- #set t text/plain
- set t text/xml
- ns_return 200 $t $content
+ if {[info exists user_id]} {lappend cmd -user_id $user_id}
+ if {[info exists objects]} {lappend cmd -objects $objects}
+ eval $cmd
}
-
- Page ad_proc google-sitemapindex {
- {-changefreq "daily"}
- {-priority "priority"}
- } {
- Provide a sitemap index of all xowiki instances in google site map format
- https://www.google.com/webmasters/sitemaps/docs/en/protocol.html
-
- @param maxentries maximum number of entries retrieved
- @param package_id to determine the xowiki instance
- @param changefreq changefreq as defined by google
- @param priority priority as defined by google
-
- } {
-
- set content {
-
-}
- db_foreach get_xowiki_packages {select package_id
- from apm_packages p, site_nodes s
- where package_key = 'xowiki' and s.object_id = p.package_id} {
- set last_modified [db_string get_newest_modification_date \
- "select last_modified from acs_objects where package_id = $package_id \
- order by last_modified desc limit 1"]
-
- regexp {^([^.]+)[.][0-9]+(.*)$} $last_modified _ time tz
- set time "[clock format [clock scan $time] -format {%Y-%m-%dT%T}]${tz}:00"
-
- my log "--site_node::get_from_object_id -object_id $package_id"
- array set info [site_node::get_from_object_id -object_id $package_id]
-
- append content \n\
- [ad_url]$info(url)?gsm \n\
- $time \n\
-
- }
- append content \n
- set t text/plain
- #set t text/xml
- ns_return 200 $t $content
- }
-
- Page ad_proc google-sitemap {
- -maxentries
- -package_id:required
- {-changefreq "daily"}
- {-priority "0.5"}
- } {
- Report content of xowiki folder in google site map format
- https://www.google.com/webmasters/sitemaps/docs/en/protocol.html
-
- @param maxentries maximum number of entries retrieved
- @param package_id to determine the xowiki instance
- @param changefreq changefreq as defined by google
- @param priority priority as defined by google
-
- } {
- set folder_id [::$package_id folder_id]
-
- set limit_clause [expr {[info exists maxentries] ? " limit $maxentries" : ""}]
- set timerange_clause ""
- set xmlMap { & & < < > > \" " ' ' }
-
- set content {
-
-}
- db_foreach get_pages \
- "select s.body, p.name, p.creator, p.title, p.page_id,\
- p.object_type as content_type, p.last_modified, p.description \
- from xowiki_pagex p, syndication s, cr_items i \
- where i.parent_id = $folder_id and i.live_revision = s.object_id \
- and s.object_id = p.page_id $timerange_clause \
- order by p.last_modified desc $limit_clause \
- " {
-
- if {[string match "::*" $name]} continue
- if {$content_type eq "::xowiki::PageTemplate::"} continue
-
- regexp {^([^.]+)[.][0-9]+(.*)$} $last_modified _ time tz
-
- set time "[clock format [clock scan $time] -format {%Y-%m-%dT%T}]${tz}:00"
- append content \n\
- [::$package_id pretty_link -absolute true $name] \n\
- $time \n\
- $changefreq \n\
- $priority \n\
- \n
- }
-
- append content \n
- set t text/plain
- #set t text/xml
- ns_return 200 $t $content
- }
-
-
- Page proc import {-user_id -package_id -folder_id {-replace 0} -objects} {
- set object_type [self]
- if {![info exists folder_id]} {set folder_id [$object_type require_folder -name xowiki]}
- if {![info exists package_id]} {set package_id [ad_conn package_id]}
- if {![info exists user_id]} {set user_id [ad_conn user_id]}
- if {![info exists objects]} {set objects [$object_type allinstances]}
-
- set msg "processing objects: $objects"
- set added 0
- set replaced 0
- set updated 0
- array set excluded_var {
- folder_id 1 package_id 1 absolute_links 1 lang_links 1
- publish_status 1 item_id 1 revision_id 1 last_modified 1 parent_id 1
- }
- foreach o $objects {
- $o set parent_id $folder_id
- $o set package_id $package_id
- $o set creation_user $user_id
- # page instances have references to page templates, add these first
- if {[$o istype ::xowiki::PageInstance]} continue
- set item_id [CrItem lookup -name [$o set name] -parent_id $folder_id]
- if {$item_id != 0} {
- if {$replace} { ;# we delete the original
- ::Generic::CrItem delete -item_id $item_id
- set item_id 0
- incr replaced
- } else {
- ::Generic::CrItem instantiate -item_id $item_id
- foreach var [$o info vars] {
- if {![info exists excluded_var($var)]} {
- $item_id set $var [$o set $var]
- }
- }
- $item_id save
- incr updated
- }
- }
- if {$item_id == 0} {
- $o save_new
- incr added
- }
- }
-
- foreach o $objects {
- if {[$o istype ::xowiki::PageInstance]} {
- db_transaction {
- set item_id [CrItem lookup -name [$o set name] -parent_id $folder_id]
- if {$item_id != 0} {
- if {$replace} { ;# we delete the original
- ::Generic::CrItem delete -item_id $item_id
- set item_id 0
- incr replaced
- } else {
- ::Generic::CrItem instantiate -item_id $item_id
- foreach var [$o info vars] {
- if {![info exists excluded_var($var)]} {
- $item_id set $var [$o set $var]
- }
- }
- $item_id save
- incr updated
- }
- }
- if {$item_id == 0} { ;# the item does not exist -> update reference and save
- set old_template_id [$o set page_template]
- set template [CrItem lookup \
- -name [$old_template_id set name] \
- -parent_id $folder_id]
- $o set page_template $template
- $o save_new
- incr added
- }
- }
- }
- $o destroy
- }
- append msg "$added objects newly inserted, $updated object updated, $replaced objects replaced
"
- }
-
#
# tag management, get_tags works on instance or gobally
#
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 -r1.9 -r1.10
--- openacs-4/packages/xowiki/www/admin/import.tcl 6 Jan 2007 03:27:07 -0000 1.9
+++ openacs-4/packages/xowiki/www/admin/import.tcl 17 Feb 2007 23:01:36 -0000 1.10
@@ -33,7 +33,7 @@
if {[catch {namespace eval ::xo::import $content} error]} {
set msg "Error: $error"
} else {
- set msg [::xowiki::Page import -replace 0]
+ set msg [$package_id import -replace 0]
}
namespace delete ::xo::import
}
Index: openacs-4/packages/xowiki/www/prototypes/weblog-portlet.page
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/prototypes/Attic/weblog-portlet.page,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/xowiki/www/prototypes/weblog-portlet.page 3 Jan 2007 14:03:58 -0000 1.2
+++ openacs-4/packages/xowiki/www/prototypes/weblog-portlet.page 17 Feb 2007 23:01:36 -0000 1.3
@@ -29,7 +29,7 @@
append content "
" \
"
" \
"
Created by $creator, " \
- "last modfified by [::xo::get_user_name $creation_user] " \
+ "last modified by [::xo::get_user_name $creation_user] " \
"$pretty_date
" \
$description $more \n\
"
"