::xo::PackageMgr
::xo::Package
Class Hierarchy of ::xo::Package
- ::xotcl::Object
- Meta-class:
- ::xotcl::Class
![[i]](/resources/acs-subsite/ZoomIn16.gif)
- Methods for instances:
- __api_make_doc, __api_make_forward_doc, __timediff, abstract, ad_doc, ad_forward, ad_proc, appendC, arrayC, asHTML, autonameC, check, classC, cleanupC, configureC, containsC, copyC, db_0or1rowC, db_1rowC, debug, defaultmethodC, destroyC, destroy_on_cleanup, dot_append_method, dotclass, dotcode, dotquote, dotquotel, ds, evalC, existsC, extractConfigureArg, filterC, filterguardC, filtersearch, forward, hasclass, incrC, infoC, init, instvarC, invarC, isclass, ismetaclass, ismixin, isobject, istype, lappendC, log, method, mixinC, mixinguardC, moveC, msg, noinitC, objectparameter, parametercmdC, proc, procsearch, qn, requireNamespaceC, residualargsC, self, serialize, setC, set_instance_vars_defaults, show-object, substC, traceC, unknown, unsetC, uplevelC, upvarC, volatileC, vwait
- Methods to be applied on the class (in addition to the methods provided by the meta-class):
- getExitHandler, setExitHandler, unsetExitHandler
- ::xo::db::Object
- Meta-class:
- ::xo::db::Class
![[i]](/resources/acs-subsite/ZoomIn16.gif)
- Methods for instances:
- db_1row, delete, initialize_loaded_object, insert, object_idC, object_titleC, save, save_new
- Methods to be applied on the class:
- Methods provided by the meta-class
- ::xo::Package
- Meta-class:
- ::xo::PackageMgr
![[i]](/resources/acs-subsite/ZoomIn16.gif)
- Parameter for instances:
- context (default "::xo::cc"), force_refresh_login (default "false"), id, package_url, url
- Methods for instances:
- default_localeC, exists_form_parameterC, exists_query_parameterC, form_parameterC, get_parameter, init, initialize, insert, instance_nameC, package_idC, package_keyC, query_parameterC, reply_to_user, require_root_folder, return_page, returnredirectC, save, set_url
- Methods to be applied on the class:
- Methods provided by the meta-class
Class Relations
- superclass: ::xo::db::Object
![[i]](/resources/acs-subsite/ZoomIn16.gif)
- subclass: ::xowiki::Package
![[i]](/resources/acs-subsite/ZoomIn16.gif)
::xo::PackageMgr create ::xo::Package \
-superclass ::xo::db::Object \
-parameter {{context ::xo::cc} {force_refresh_login false} id package_url url}
Methods
instproc get_parameter
::267021 instproc get_parameter {attribute {default {}}} {
set param [::xo::parameter get -parameter $attribute -package_id [my id] -default $default -retry false]
#my log "--get_parameter <$attribute> <$default> returned <$param>"
return $param
}
instproc init
::267021 instproc init args {
my instvar id url
set package_url [lindex [site_node::get_url_from_object_id -object_id $id] 0]
#my log "--R creating package_url='$package_url'"
if {$package_url ne ""} {
array set info [site_node::get -url $package_url]
#set package_url $info(url)
my package_key $info(package_key)
my instance_name $info(instance_name)
} else {
db_1row [my qn package_info] {
select package_key, instance_name from apm_packages where package_id = :id
}
my package_key $package_key
my instance_name $instance_name
}
if {[ns_conn isconnected]} {
# in case of of host-node map, simplify the url to avoid redirects
# .... but ad_host works only, when we are connected....
# TODO: solution for syndication
set root [root_of_host [ad_host]]
regexp "^${root}(.*)$" $package_url _ package_url
}
#my log "--R package_url= $package_url (was $info(url))"
my package_url $package_url
if {[my exists url] && [info exists root]} {
regexp "^${root}(.*)$" $url _ url
} elseif {![my exists url]} {
#my log "--R we have no url, use package_url '$package_url'"
# if we have no more information, we use the package_url as actual url
set url $package_url
}
my set_url -url $url
my set mime_type text/html
my set delivery ns_return
set target_class ::[my package_key]::Package
if {[my info class] ne $target_class && [my isclass $target_class]} {
my class $target_class
}
my initialize
}
instproc initialize
::267021 instproc initialize {} {
# empty hook for user level initialization
}
instproc insert
::267021 instproc insert {} {
set __table_name [[self class] table_name]
set __id [[self class] id_column]
my set $__id [my set object_id]
my log "ID insert in $__table_name, id = $__id = [my set $__id]"
next
foreach {__slot_name __slot} [[self class] array get db_slot] {
my instvar $__slot_name
if {[info exists $__slot_name]} {
lappend __vars $__slot_name
lappend __atts [$__slot column_name]
}
}
db_dml dbqd..insert_$__table_name "insert into $__table_name
([join $__atts ,]) values (:[join $__vars ,:])"
}
instproc reply_to_user
::267021 instproc reply_to_user text {
#my log "REPLY [::xo::cc exists __continuation]"
if {[::xo::cc exists __continuation]} {
#my log "REPLY [::xo::cc set __continuation]"
eval [::xo::cc set __continuation]
} else {
if {[string length $text] > 1} {
set status_code [expr {[::xo::cc exists status_code] ? [::xo::cc set status_code] : 200}]
#my log "REPLY [my set delivery] 200 [my set mime_type]"
[my set delivery] $status_code [my set mime_type] $text
}
}
}
<instance of ::xo::Package
> require_root_folder \
[ -parent_id parent_id ] [ -content_types content_types ] \
-name name
Make sure, the root folder for the given package exists. If not,
create it and register all allowed content types.
- Switches:
- -parent_id (defaults to
"-100"
) (optional) - -content_types (optional)
- -name (required)
- Returns:
- folder_id
::267021 instproc require_root_folder {{-parent_id -100} {-content_types {}} -name:required} {
my instvar id
set folder_id [ns_cache eval xotcl_object_type_cache root_folder-$id {
set folder_id [::xo::db::CrClass lookup -name $name -parent_id $parent_id]
if {$folder_id == 0} {
my log "folder with name '$name' and parent $parent_id does NOT EXIST"
set folder_id [::xo::db::sql::content_folder new -name $name -label $name -parent_id $parent_id -package_id $id -context_id $id]
my log "CREATED folder '$name' and parent $parent_id ==> $folder_id"
}
# register all specified content types
::xo::db::CrFolder register_content_types -folder_id $folder_id -content_types $content_types
#my log "returning from cache folder_id $folder_id"
return $folder_id
}]
#my log "returning from require folder_id $folder_id"
return $folder_id
}
instproc return_page
::267021 instproc return_page {-adp:required -variables -form} {
#my log "--vars=[self args]"
set __vars [list]
foreach _var $variables {
if {[llength $_var] == 2} {
lappend __vars [lindex $_var 0] [uplevel subst [lindex $_var 1]]
} else {
set localvar local.$_var
upvar $_var $localvar
if {[array exists $localvar]} {
lappend __vars &$_var $localvar
} elseif {[info exists $localvar]} {
# ignore undefined variables
lappend __vars $_var [set $localvar]
}
}
}
if {[info exists form]} {
set level [template::adp_level]
foreach f [uplevel #$level info vars ${form}:*] {
lappend __vars &$f $f
upvar #$level $f $f
}
}
#my log "--before adp" ; # $__vars
set text [template::adp_include $adp $__vars]
#my log "--after adp"
if { [lang::util::translator_mode_p] } {
set text [::xo::localize $text 1]
}
#my log "--after adp"
return $text
}
instproc save
::267021 instproc save {} {
db_transaction {
next
my instvar object_id package_key default_locale instance_name
db_dml dbqd..update_apm_packages {update apm_packages
set package_key = :package_key,default_locale = :default_locale,instance_name = :instance_name where package_id = :object_id
}
}
}
instproc set_url
::267021 instproc set_url -url {
my url $url
my set object [string range [my url] [string length [my package_url]] end]
#my msg "--R object set to [my set object], url=$url, [my serialize]"
}