Class ::xo::db::CrItem (public)
::xo::db::CrClass ::xo::db::CrItem![[i]](/resources/acs-subsite/ZoomIn16.gif)
Defined in
- Testcases:
-
No testcase defined.
Source code:
namespace eval ::xo::db {}
::nsf::object::alloc ::xo::db::CrClass ::xo::db::CrItem {set :__default_metaclass ::xotcl::Class
set :__default_superclass ::xotcl::Object
set :abstract_p f
set :auto_save false
array set :db_constraints {nls_language {{default en_US}} mime_type {{references cr_mime_types} {default text/plain}} item_id {{references {cr_items on delete cascade}}}}
array set :db_slot {creation_date ::xo::db::Object::slot::creation_date creation_user ::xo::db::Object::slot::creation_user object_id ::xo::db::Object::slot::object_id description ::xo::db::CrItem::slot::description creation_ip ::xo::db::Object::slot::creation_ip text ::xo::db::CrItem::slot::text nls_language ::xo::db::CrItem::slot::nls_language object_title ::xo::db::Object::slot::object_title package_id ::xo::db::Object::slot::package_id name ::xo::db::CrItem::slot::name security_inherit_p ::xo::db::Object::slot::security_inherit_p context_id ::xo::db::Object::slot::context_id mime_type ::xo::db::CrItem::slot::mime_type title ::xo::db::CrItem::slot::title revision_id ::xo::db::CrItem::slot::revision_id item_id ::xo::db::CrItem::slot::item_id last_modified ::xo::db::Object::slot::last_modified publish_date ::xo::db::CrItem::slot::publish_date modifying_user ::xo::db::Object::slot::modifying_user modifying_ip ::xo::db::Object::slot::modifying_ip}
set :folder_id -100
set :id_column revision_id
set :mime_type text/plain
set :name_method {}
set :non_cached_instance_var_patterns __*
set :object_type content_revision
set :object_type_key 0000000000001111
set :pretty_name CrItem
set :pretty_plural CrItem
set :security_inherit_p t
set :sql_package_name ::xo::db::CrItem
set :storage_type text
set :supertype content_revision
set :table_name cr_revisions
set :with_table true}
::xo::db::CrItem instproc rename {-old_name:required -new_name:required} {
set item_id ${:item_id}
::xo::dc dml update_rename "update cr_items set name = :new_name where item_id = :item_id"
set :name $new_name
:update_item_index
}
::xo::db::CrItem instproc save_new {-package_id -creation_user -creation_ip -context_id {-live_p:boolean true} {-use_given_publish_date:boolean false}} {
set __class [:info class]
if {![info exists package_id] && [info exists :package_id]} {
set package_id ${:package_id}
}
if {![info exists context_id]} {
set context_id [expr {[info exists :context_id] ? ${:context_id} : ""}]
}
[self class] get_context package_id creation_user creation_ip
set :creation_user $creation_user
set __atts [list creation_user]
set __vars $__atts
foreach {__slot_name __slot} [$__class array get db_slot] {
if {
[$__slot domain] eq "::xo::db::Object"
|| $__slot in {
"::xo::db::CrItem::slot::name"
"::xo::db::CrItem::slot::publish_date"
}
} continue
:instvar $__slot_name
if {![info exists $__slot_name]} {set $__slot_name ""}
lappend __atts [$__slot column_name]
lappend __vars $__slot_name
}
if {$use_given_publish_date} {
if {"publish_date" ni $__atts} {
set publish_date ${:publish_date}
lappend __atts publish_date
lappend __vars publish_date
}
set publish_date_flag [list -publish_date $publish_date]
} else {
set publish_date_flag ""
}
::xo::dc transaction {
$__class instvar storage_type object_type
[self class] lock acs_objects "SHARE ROW EXCLUSIVE"
set revision_id [xo::dc nextval acs_object_id_seq]
set :revision_id $revision_id
if {![info exists :name] || ${:name} eq ""} {
set :name [expr {[info exists :__autoname_prefix] ?
"${:__autoname_prefix}$revision_id" : $revision_id}]
}
if {$title eq ""} {
set title [expr {[info exists :__title_prefix] ?
"${:__title_prefix} (${:name})" : ${:name}}]
}
if {$storage_type eq "file"} {
set mime_type [cr_check_mime_type -mime_type $mime_type -filename ${:name} -file ${:import_file}]
}
set :item_id [::acs::dc call content_item new -name ${:name} -parent_id ${:parent_id} -creation_user $creation_user -creation_ip $creation_ip -context_id $context_id -item_subtype "content_item" -content_type $object_type -description $description -mime_type $mime_type -nls_language $nls_language -is_live f -storage_type $storage_type -package_id $package_id -with_child_rels f]
if {$storage_type eq "file"} {
set text [cr_create_content_file ${:item_id} $revision_id ${:import_file}]
}
::xo::dc [::xo::dc insert-view-operation] revision_add [[:info class] insert_statement $__atts $__vars]
:fix_content $revision_id $text
if {$live_p} {
::acs::dc call content_item set_live_revision -revision_id $revision_id -publish_status ${:publish_status} -is_latest true {*}$publish_date_flag
:update_item_index
}
}
:db_1row [:qn get_dates] {
select creation_date, last_modified
from acs_objects where object_id = :revision_id
}
set :object_id ${:item_id}
return ${:item_id}
}
::xo::db::CrItem instproc is_cached_object {} {
return [info exists :__cached_object]
}
::xo::db::CrItem instproc update_revision {{-quoted false} revision_id attribute value} {
if {$quoted} {set val $value} {set val :value}
::xo::dc dml update_content "update cr_revisions set $attribute = $val where revision_id = :revision_id"
}
::xo::db::CrItem instproc delete {} {
[:info class] delete -item_id ${:item_id}
}
::xo::db::CrItem instproc privilege=creator {{-login true} user_id package_id method} {
set allowed 0
if {[info exists :creation_user]} {
if {${:creation_user} == $user_id} {
set allowed 1
} else {
set allowed [::xo::cc permission -object_id $package_id -party_id $user_id -privilege admin]
}
}
return $allowed
}
::xo::db::CrItem instproc changed_redirect_url {} {
return ""
}
::xo::db::CrItem instproc is_package_root_folder {} {
if {![info exists :item_id]} {
return false
}
return [expr {${:item_id} eq [::${:package_id} folder_id]} ? true : false]
}
::xo::db::CrItem instproc update_content {revision_id content} {
[:info class] instvar storage_type
if {$storage_type eq "file"} {
:log "--update_content not implemented for type file"
} else {
::xo::dc dml update_content "update cr_revisions set content = :content where revision_id = :revision_id"
}
}
::xo::db::CrItem instproc save {-modifying_user {-live_p:boolean true} {-use_given_publish_date:boolean false}} {
set __atts [list creation_user]
set __vars $__atts
if {[ns_conn isconnected]} {
lappend __atts creation_ip
set peeraddr [ad_conn peeraddr]
lappend __vars peeraddr
}
set creation_user [expr {[info exists modifying_user] ?
$modifying_user :
[:current_user_id]}]
foreach {__slot_name __slot} [[:info class] array get db_slot] {
if {
[$__slot domain] eq "::xo::db::Object"
|| $__slot in {
"::xo::db::CrItem::slot::name"
"::xo::db::CrItem::slot::publish_date"
}
} continue
set $__slot_name [set :$__slot_name]
lappend __atts [$__slot column_name]
lappend __vars $__slot_name
}
if {$use_given_publish_date} {
if {"publish_date" ni $__atts} {
set publish_date ${:publish_date}
lappend __atts publish_date
lappend __vars publish_date
}
set publish_date_flag [list -publish_date $publish_date]
} else {
set publish_date_flag ""
}
::xo::dc transaction {
::xo::dc row_lock -for "no key update" -prepare integer item_lock {
select item_id from cr_items where item_id = :item_id
}
[:info class] instvar storage_type
set revision_id [xo::dc nextval acs_object_id_seq]
if {$storage_type eq "file"} {
set :mime_type [cr_check_mime_type -mime_type ${:mime_type} -filename ${:name} -file ${:import_file}]
set :text [cr_create_content_file $item_id $revision_id ${:import_file}]
set text ${:text}
set mime_type ${:mime_type}
}
::xo::dc [::xo::dc insert-view-operation] revision_add [[:info class] insert_statement $__atts $__vars]
:fix_content $revision_id $text
if {$live_p} {
::acs::dc call content_item set_live_revision -revision_id $revision_id -publish_status ${:publish_status} -is_latest true {*}$publish_date_flag
set :revision_id $revision_id
:update_item_index
} else {
}
set :modifying_user $creation_user
::xo::dc 1row -prepare integer get_metadata {
select last_modified
from acs_objects where object_id = :revision_id
}
set :last_modified $last_modified
if {[info exists :context_id]} {
set context_id ${:context_id}
::xo::dc dml update_context {
UPDATE acs_objects
SET context_id = :context_id
WHERE object_id = :item_id
AND context_id != :context_id
}
}
}
return $item_id
}
::xo::db::CrItem instproc update_item_index {} {
next
}
::xo::db::CrItem instproc initialize_loaded_object {} {
}
::xo::db::CrItem instproc fix_content {revision_id content} {
[:info class] instvar storage_type
if {![info exists :storage_type] || $storage_type ne ${:storage_type}} {
ad_log warning "we cannot get rid of the instvar storage_type yet" "(exists [info exists :storage_type], instvar '$storage_type'," "value '[expr {[info exists :storage_type] ? ${:storage_type} : {UNKNOWN}}]')"
}
if {$storage_type eq "file"} {
::xo::dc dml fix_content_length "update cr_revisions set content_length = [ad_file size ${:import_file}] where revision_id = :revision_id"
}
}
::xo::db::CrItem instproc set_live_revision {-revision_id:required {-publish_status "ready"} {-is_latest:boolean false}} {
::acs::dc call content_item set_live_revision -revision_id $revision_id -publish_status $publish_status -is_latest $is_latest
::xo::xotcl_object_cache flush ${:item_id}
::xo::xotcl_object_cache flush $revision_id
}
::xo::db::CrItem instproc update_attribute_from_slot {-revision_id slot:object value} {
set :[$slot name] $value
if {![info exists revision_id]} {
set revision_id ${:revision_id}
}
set domain [$slot domain]
::xo::dc dml update_attribute_from_slot [subst {
update [$domain table_name]
set [$slot column_name] = :value
where [$domain id_column] = :revision_id
}]
::xo::dc dml update_attribute_from_slot_last_modified {
update acs_objects set last_modified = CURRENT_TIMESTAMP
where object_id = :revision_id
}
}
::xo::db::CrItem instproc update {} {
::xo::dc transaction {
next
:instvar object_id publish_date nls_language description name mime_type text title item_id
::xo::dc dml update_cr_revisions {update cr_revisions
set publish_date = :publish_date,nls_language = :nls_language,description = :description,name = :name,mime_type = :mime_type,text = :text,title = :title,item_id = :item_id where revision_id = :object_id
}
}
}
::xo::db::CrItem instproc www-revisions {} {
set isAdmin [acs_user::site_wide_admin_p]
::TableWidget create t1 -volatile -columns {
Field version_number -label "" -html {align right}
AnchorField create view -CSSclass view-item-button -label ""
AnchorField diff -label ""
AnchorField plain_diff -label ""
AnchorField author -label [_ acs-content-repository.Creation_User]
Field content_size -label [_ acs-content-repository.Size] -html {align right}
Field last_modified_ansi -label [_ acs-content-repository.Last_Modified]
Field description -label [_ acs-content-repository.Description]
if {[acs_user::site_wide_admin_p]} {AnchorField show -label ""}
ImageAnchorField live_revision -label [_ xotcl-core.live_revision] -src /resources/acs-subsite/radio.gif -width 16 -height 16 -border 0 -html {align center}
AnchorField create version_delete -CSSclass delete-item-button -label ""
}
set user_id [:current_user_id]
set page_id ${:item_id}
set live_revision_id [::acs::dc call content_item get_live_revision -item_id $page_id]
set package_id ${:package_id}
set base [::$package_id url]
set sql [::xo::dc select -map_function_names true -vars "ci.name, r.revision_id as version_id, person__name(o.creation_user) as author, o.creation_user as author_id, to_char(o.last_modified,'YYYY-MM-DD HH24:MI:SS') as last_modified_ansi, r.description, acs_permission.permission_p(r.revision_id,:user_id,'admin') as admin_p, acs_permission.permission_p(r.revision_id,:user_id,'delete') as delete_p, r.content_length, content_revision__get_number(r.revision_id) as version_number " -from "cr_items ci, cr_revisions r, acs_objects o" -where "ci.item_id = :page_id and r.item_id = ci.item_id and o.object_id = r.revision_id
and acs_permission.permission_p(r.revision_id, :user_id, 'read') = 't'" -orderby "r.revision_id desc"]
::xo::dc foreach revisions_select $sql {
set content_size_pretty [lc_content_size_pretty -size $content_length]
set last_modified_ansi [lc_time_system_to_conn $last_modified_ansi]
if {$version_id != $live_revision_id} {
set live_revision "Make this Revision Current"
set live_revision_icon /resources/acs-subsite/radio.gif
} else {
set live_revision "Current Live Revision"
set live_revision_icon /resources/acs-subsite/radiochecked.gif
}
set live_revision_link [export_vars -base $base {
{m make-live-revision} {revision_id $version_id}
}]
t1 add -version_number $version_number: -view "" -view.href [export_vars -base $base {{revision_id $version_id}}] -author $author -content_size $content_size_pretty -last_modified_ansi [lc_time_fmt $last_modified_ansi "%x %X"] -description $description -live_revision.src $live_revision_icon -live_revision.title $live_revision -live_revision.href $live_revision_link -version_delete.href [export_vars -base $base {{m delete-revision} {revision_id $version_id}}] -version_delete "" -version_delete.title [_ acs-content-repository.Delete_Revision]
[t1 last_child] set payload(revision_id) $version_id
if {$isAdmin} {
set show_revision_link [export_vars -base $base {{m show-object} {revision_id $version_id}}]
[t1 last_child] set show show
[t1 last_child] set show.href $show_revision_link
}
}
set lines [t1 children]
for {set i 0} {$i < [llength $lines]-1} {incr i} {
set e [lindex $lines $i]
set n [lindex $lines $i+1]
set revision_id [$e set payload(revision_id)]
set compare_revision_id [$n set payload(revision_id)]
$e set diff.href [export_vars -base $base {{m diff} compare_revision_id revision_id}]
$e set diff "diff"
$e set plain_diff.href [export_vars -base $base {{m diff} {plain_text_diff 1} compare_revision_id revision_id}]
$e set plain_diff "plain"
}
set e [lindex $lines end]
if {$e ne ""} {
$e set diff.href ""
$e set diff ""
$e set plain_diff.href ""
$e set plain_diff ""
}
return [t1 asHTML]
}
::xo::db::CrItem instproc current_user_id {} {
if {[nsf::is object ::xo::cc]} {return [::xo::cc user_id]}
if {[ns_conn isconnected]} {return [ad_conn user_id]}
return ""
}
::xo::db::CrItem instparametercmd description
::xo::db::CrItem instparametercmd text
::xo::db::CrItem instparametercmd storage_type
::xo::db::CrItem instparametercmd nls_language
::xo::db::CrItem instparametercmd package_id
::xo::db::CrItem instparametercmd mime_type
::xo::db::CrItem instparametercmd name
::xo::db::CrItem instparametercmd title
::xo::db::CrItem instparametercmd publish_status
::xo::db::CrItem instparametercmd item_id
::xo::db::CrItem instparametercmd revision_id
::xo::db::CrItem instparametercmd publish_date
::xo::db::CrItem instparametercmd parent_id
::nsf::relation::set ::xo::db::CrItem superclass ::xo::db::Object
::nsf::relation::set ::xo::db::CrItem class-mixin ::xo::db::CrCache::Item
::nx::slotObj -container slot ::xo::db::CrItem
::xo::db::CrItem::slot eval {set :__parameter {
package_id
{parent_id -100}
{publish_status ready}
{storage_type text}
}}
::nsf::object::alloc ::xo::db::CrAttribute ::xo::db::CrItem::slot::mime_type {set :accessor public
set :column_name mime_type
set :configurable true
set :convert false
set :create_acs_attribute true
set :create_table_attribute true
set :datatype text
set :default text/plain
set :defaultmethods {}
set :disposition alias
set :domain ::xo::db::CrItem
set :incremental false
set :manager ::xo::db::CrItem::slot::mime_type
set :max_n_values 1
set :methodname mime_type
set :min_n_values 1
set :multiplicity 1..1
set :name mime_type
set :per-object false
set :position 0
set :pretty_name {Mime Type}
set :pretty_plural {Mime Types}
set :references cr_mime_types
set :required false
set :sqltype varchar(200)
set :substdefault 0b111
set :trace none
: init}
::nsf::object::alloc ::xo::db::CrAttribute ::xo::db::CrItem::slot::title {set :accessor public
set :column_name title
set :configurable true
set :convert false
set :create_acs_attribute true
set :create_table_attribute true
set :datatype text
set :defaultmethods {}
set :disposition alias
set :domain ::xo::db::CrItem
set :incremental false
set :manager ::xo::db::CrItem::slot::title
set :max_n_values 1
set :methodname title
set :min_n_values 1
set :multiplicity 1..1
set :name title
set :per-object false
set :position 0
set :pretty_name #xotcl-core.title#
set :pretty_plural #xotcl-core.titles#
set :references {}
set :required false
set :sqltype varchar(1000)
set :trace none
: init}
::nsf::object::alloc ::xo::db::CrAttribute ::xo::db::CrItem::slot::item_id {set :accessor public
set :column_name item_id
set :configurable true
set :convert false
set :create_acs_attribute true
set :create_table_attribute true
set :datatype integer
set :defaultmethods {}
set :disposition alias
set :domain ::xo::db::CrItem
set :incremental false
set :manager ::xo::db::CrItem::slot::item_id
set :max_n_values 1
set :methodname item_id
set :min_n_values 1
set :multiplicity 1..1
set :name item_id
set :parameterSpec -item_id
set :per-object false
set :position 0
set :pretty_name {Item ID}
set :pretty_plural {Item IDs}
set :references {cr_items on delete cascade}
set :required false
set :sqltype integer
set :trace none
: init}
::nsf::object::alloc ::xo::db::Attribute ::xo::db::CrItem::slot::revision_id {set :accessor public
set :column_name revision_id
set :configurable true
set :convert false
set :create_acs_attribute false
set :create_table_attribute true
set :datatype integer
set :default 0
set :defaultmethods {}
set :disposition alias
set :domain ::xo::db::CrItem
set :incremental false
set :manager ::xo::db::CrItem::slot::revision_id
set :max_n_values 1
set :methodname revision_id
set :min_n_values 1
set :multiplicity 1..1
set :name revision_id
set :parameterSpec {-revision_id 0}
set :per-object false
set :position 0
set :pretty_name ID
set :pretty_plural {}
set :references {}
set :required false
set :sqltype integer
set :substdefault 0b111
set :trace none
: init}
::nsf::object::alloc ::xo::db::CrAttribute ::xo::db::CrItem::slot::text {set :accessor public
set :column_name text
set :configurable true
set :convert false
set :create_acs_attribute false
set :create_table_attribute false
set :datatype text
set :defaultmethods {}
set :disposition alias
set :domain ::xo::db::CrItem
set :incremental false
set :manager ::xo::db::CrItem::slot::text
set :max_n_values 1
set :methodname text
set :min_n_values 1
set :multiplicity 1..1
set :name text
set :per-object false
set :position 0
set :pretty_name Text
set :pretty_plural {}
set :references {}
set :required false
set :sqltype text
set :trace none
: init}
::nsf::object::alloc ::xotcl::Attribute ::xo::db::CrItem::slot::parent_id {set :accessor public
set :configurable true
set :convert false
set :default -100
set :defaultmethods {}
set :disposition alias
set :domain ::xo::db::CrItem
set :incremental 0
set :manager ::xo::db::CrItem::slot::parent_id
set :methodname parent_id
set :multiplicity 1..1
set :name parent_id
set :parameterSpec {-parent_id:substdefault -100}
set :per-object false
set :position 0
set :required false
set :substdefault 0b111
set :trace none
: init}
::nsf::object::alloc ::xotcl::Attribute ::xo::db::CrItem::slot::storage_type {set :accessor public
set :configurable true
set :convert false
set :default text
set :defaultmethods {}
set :disposition alias
set :domain ::xo::db::CrItem
set :incremental 0
set :manager ::xo::db::CrItem::slot::storage_type
set :methodname storage_type
set :multiplicity 1..1
set :name storage_type
set :parameterSpec {-storage_type:substdefault text}
set :per-object false
set :position 0
set :required false
set :substdefault 0b111
set :trace none
: init}
::nsf::object::alloc ::xotcl::Attribute ::xo::db::CrItem::slot::package_id {set :accessor public
set :configurable true
set :convert false
set :defaultmethods {}
set :disposition alias
set :domain ::xo::db::CrItem
set :incremental 0
set :manager ::xo::db::CrItem::slot::package_id
set :methodname package_id
set :multiplicity 1..1
set :name package_id
set :parameterSpec -package_id
set :per-object false
set :position 0
set :required false
set :trace none
: init}
::nsf::object::alloc ::xo::db::CrAttribute ::xo::db::CrItem::slot::nls_language {set :accessor public
set :column_name nls_language
set :configurable true
set :convert false
set :create_acs_attribute true
set :create_table_attribute true
set :datatype text
set :default en_US
set :defaultmethods {}
set :disposition alias
set :domain ::xo::db::CrItem
set :incremental false
set :manager ::xo::db::CrItem::slot::nls_language
set :max_n_values 1
set :methodname nls_language
set :min_n_values 1
set :multiplicity 1..1
set :name nls_language
set :per-object false
set :position 0
set :pretty_name #xotcl-core.language#
set :pretty_plural #xotcl-core.languages#
set :references {}
set :required false
set :sqltype varchar(50)
set :substdefault 0b111
set :trace none
: init}
::nsf::object::alloc ::xo::db::CrAttribute ::xo::db::CrItem::slot::name {set :accessor public
set :column_name name
set :configurable true
set :convert false
set :create_acs_attribute false
set :create_table_attribute false
set :datatype text
set :defaultmethods {}
set :disposition alias
set :domain ::xo::db::CrItem
set :incremental false
set :manager ::xo::db::CrItem::slot::name
set :max_n_values 1
set :methodname name
set :min_n_values 1
set :multiplicity 1..1
set :name name
set :per-object false
set :position 0
set :pretty_name Name
set :pretty_plural {}
set :references {}
set :required false
set :sqltype text
set :trace none
: init}
::nsf::object::alloc ::xotcl::Attribute ::xo::db::CrItem::slot::publish_status {set :accessor public
set :configurable true
set :convert false
set :default ready
set :defaultmethods {}
set :disposition alias
set :domain ::xo::db::CrItem
set :incremental 0
set :manager ::xo::db::CrItem::slot::publish_status
set :methodname publish_status
set :multiplicity 1..1
set :name publish_status
set :parameterSpec {-publish_status:substdefault ready}
set :per-object false
set :position 0
set :required false
set :substdefault 0b111
set :trace none
: init}
::nsf::object::alloc ::xo::db::CrAttribute ::xo::db::CrItem::slot::publish_date {set :accessor public
set :column_name publish_date
set :configurable true
set :convert false
set :create_acs_attribute true
set :create_table_attribute true
set :datatype date
set :defaultmethods {}
set :disposition alias
set :domain ::xo::db::CrItem
set :incremental false
set :manager ::xo::db::CrItem::slot::publish_date
set :max_n_values 1
set :methodname publish_date
set :min_n_values 1
set :multiplicity 1..1
set :name publish_date
set :per-object false
set :position 0
set :pretty_name #xo.CrItem-publish_date#
set :pretty_plural {}
set :references {}
set :required false
set :sqltype date
set :trace none
: init}
::nsf::object::alloc ::xo::db::CrAttribute ::xo::db::CrItem::slot::description {set :accessor public
set :column_name description
set :configurable true
set :convert false
set :create_acs_attribute true
set :create_table_attribute true
set :datatype text
set :defaultmethods {}
set :disposition alias
set :domain ::xo::db::CrItem
set :incremental false
set :manager ::xo::db::CrItem::slot::description
set :max_n_values 1
set :methodname description
set :min_n_values 1
set :multiplicity 1..1
set :name description
set :per-object false
set :position 0
set :pretty_name #xotcl-core.description#
set :pretty_plural #xotcl-core.descriptions#
set :references {}
set :required false
set :sqltype text
set :trace none
: init}
XQL Not present:Generic, PostgreSQL, Oracle
[
hide source ]
| [
make this the default ]