Index: openacs-4/packages/dotkul/tcl/dotkul-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotkul/tcl/Attic/dotkul-procs.tcl,v diff -u -N -r1.1.2.4 -r1.1.2.5 --- openacs-4/packages/dotkul/tcl/dotkul-procs.tcl 30 Mar 2004 12:08:07 -0000 1.1.2.4 +++ openacs-4/packages/dotkul/tcl/dotkul-procs.tcl 26 Apr 2004 13:14:45 -0000 1.1.2.5 @@ -137,18 +137,18 @@ #---------------------------------------------------------------------- -# Entity types (object types, content types, tables) +# Object-Type types (object types, content types, tables) #---------------------------------------------------------------------- -# nsv_set acs_metadata /entities/ { post } -# nsv_set acs_metadata /entities/post.storage "content_item" -# nsv_set acs_metadata /entities/post.content_type "post" -# nsv_set acs_metadata /entities/post.pretty_name "Post" -# nsv_set acs_metadata /entities/post/ { extended_message } -# nsv_set acs_metadata /entities/post/extended_message.pretty_name "Extended Message" +# nsv_set acs_metadata /object-types/ { post } +# nsv_set acs_metadata /object-types/post.storage "content_item" +# nsv_set acs_metadata /object-types/post.content_type "post" +# nsv_set acs_metadata /object-types/post.pretty_name "Post" +# nsv_set acs_metadata /object-types/post/ { extended_message } +# nsv_set acs_metadata /object-types/post/extended_message.pretty_name "Extended Message" -ad_proc dotkul::build_entity_metadata {} { - Build nsv data structure for entities +ad_proc dotkul::build_object_type_metadata {} { + Build nsv data structure for object-types } { db_foreach object_types { select object_type, supertype, pretty_name, pretty_plural, table_name, id_column, @@ -157,42 +157,51 @@ order by tree_sortkey } { - dotkul::set_metadata /entities/$object_type.type entity - dotkul::set_metadata /entities/$object_type.storage "acs_object" + dotkul::set_metadata /object-types/$object_type.type object_type + dotkul::set_metadata /object-types/$object_type.storage "acs_object" foreach col { object_type supertype pretty_name pretty_plural table_name id_column package_name name_method type_extension_table } { - dotkul::set_metadata /entities/$object_type.$col [set $col] + dotkul::set_metadata /object-types/$object_type.$col [set $col] } - dotkul::set_metadata /entities/$object_type.all_attributes [list] + dotkul::set_metadata /object-types/$object_type.all_attributes [list] + + # Clear out stuff which would otherwise hurt us of this proc is run multiple times + foreach property { all_attributes query_where query_from query_select } { + nsv_set acs_metadata /object-types/$object_type.$property {} + } } #---------------------------------------------------------------------- # Generate the type hierarchy #---------------------------------------------------------------------- - foreach entity [dotkul::get_metadata /entities/] { + foreach object_type [dotkul::get_metadata /object-types/] { - set supertypes $entity + set supertypes $object_type - set last_supertype $entity - set supertype [dotkul::get_metadata /entities/$entity.supertype] + set last_supertype $object_type + set supertype [dotkul::get_metadata /object-types/$object_type.supertype] while { ![string equal $supertype $last_supertype] && ![empty_string_p $supertype] } { set supertypes [concat $supertype $supertypes] set last_supertype $supertype - set supertype [dotkul::get_metadata /entities/$supertype.supertype] + set supertype [dotkul::get_metadata /object-types/$supertype.supertype] } - dotkul::set_metadata /entities/$entity.supertype_list $supertypes + dotkul::set_metadata /object-types/$object_type.supertype_list $supertypes if { [lsearch -exact $supertypes "content_revision"] != -1 } { - dotkul::set_metadata /entities/$entity.storage "content_item" - dotkul::set_metadata /entities/$entity.full_view "[dotkul::get_metadata /entities/$entity.table_name]x" + dotkul::set_metadata /object-types/$object_type.storage "content_item" + dotkul::set_metadata /object-types/$object_type.full_view "[dotkul::get_metadata /object-types/$object_type.table_name]x" } } + #---------------------------------------------------------------------- + # Add attributes + #---------------------------------------------------------------------- + # Mapping from acs_attributes datatype to formbuilder datatypes array set form_datatype { string text @@ -255,53 +264,86 @@ and static_p = 'f' order by object_type, sort_order } { - dotkul::set_metadata /entities/$object_type/$attribute_name.type attribute + dotkul::set_metadata /object-types/$object_type/$attribute_name.type attribute foreach col { table_name attribute_name pretty_name pretty_plural datatype default_value min_n_values storage static_p column_name } { - dotkul::set_metadata /entities/$object_type/$attribute_name.$col [set $col] + dotkul::set_metadata /object-types/$object_type/$attribute_name.$col [set $col] } + if { [empty_string_p $table_name] } { + dotkul::set_metadata /object-types/$object_type/$attribute_name.table_name [dotkul::get_metadata /object-types/$object_type.table_name] + } + if { [empty_string_p $column_name] } { + dotkul::set_metadata /object-types/$object_type/$attribute_name.column_name $attribute_name + } + # Special form-builder presentation options - dotkul::set_metadata /entities/$object_type/$attribute_name.form_datatype $form_datatype($datatype) - dotkul::set_metadata /entities/$object_type/$attribute_name.form_widget $form_widget($datatype) - dotkul::set_metadata /entities/$object_type/$attribute_name.form_options $form_options($datatype) + dotkul::set_metadata /object-types/$object_type/$attribute_name.form_datatype $form_datatype($datatype) + dotkul::set_metadata /object-types/$object_type/$attribute_name.form_widget $form_widget($datatype) + dotkul::set_metadata /object-types/$object_type/$attribute_name.form_options $form_options($datatype) } + #---------------------------------------------------------------------- + # Add inherited attributes, plus query to get the full object + #---------------------------------------------------------------------- + # Add parent attributes to child types - foreach entity [dotkul::get_metadata /entities/] { - foreach supertype [dotkul::get_metadata /entities/$entity.supertype_list] { - foreach attribute [dotkul::get_metadata /entities/$supertype/] { - nsv_lappend acs_metadata /entities/$entity.all_attributes /entities/$supertype/$attribute + foreach object_type [dotkul::get_metadata /object-types/] { + set last_supertype {} + foreach supertype [dotkul::get_metadata /object-types/$object_type.supertype_list] { + if { ![empty_string_p $last_supertype] } { + set where "[dotkul::get_metadata /object-types/$last_supertype.table_name].[dotkul::get_metadata /object-types/$last_supertype.id_column] = [dotkul::get_metadata /object-types/$supertype.table_name].[dotkul::get_metadata /object-types/$supertype.id_column]" + nsv_lappend acs_metadata /object-types/$object_type.query_where $where } + set last_supertype $supertype + foreach attribute [dotkul::get_metadata /object-types/$supertype/] { + nsv_lappend acs_metadata /object-types/$object_type.all_attributes /object-types/$supertype/$attribute + + set table_name [dotkul::get_metadata /object-types/$supertype/$attribute.table_name] + if { [lsearch [dotkul::get_metadata /object-types/$object_type.query_from] $table_name] == -1 } { + nsv_lappend acs_metadata /object-types/$object_type.query_from $table_name + } + nsv_lappend acs_metadata /object-types/$object_type.query_select $table_name.$attribute + } } } - - } # HACK -dotkul::build_entity_metadata +dotkul::build_object_type_metadata #---------------------------------------------------------------------- # Override stuff - prototyping #---------------------------------------------------------------------- -dotkul::set_metadata /entities/acs_object/object_type.form_mode none -dotkul::set_metadata /entities/acs_object/creation_date.form_mode none -dotkul::set_metadata /entities/acs_object/creation_ip.form_mode none -dotkul::set_metadata /entities/acs_object/creation_user.form_mode none -dotkul::set_metadata /entities/acs_object/last_modified.form_mode none -dotkul::set_metadata /entities/acs_object/modifying_ip.form_mode none -dotkul::set_metadata /entities/acs_object/creation_ip.form_mode none -dotkul::set_metadata /entities/acs_object/context_id.form_mode none +dotkul::set_metadata /object-types/acs_object/object_type.form_mode none +dotkul::set_metadata /object-types/acs_object/creation_date.form_mode none +dotkul::set_metadata /object-types/acs_object/creation_ip.form_mode none +dotkul::set_metadata /object-types/acs_object/creation_user.form_mode none +dotkul::set_metadata /object-types/acs_object/last_modified.form_mode none +dotkul::set_metadata /object-types/acs_object/modifying_ip.form_mode none +dotkul::set_metadata /object-types/acs_object/creation_ip.form_mode none +dotkul::set_metadata /object-types/acs_object/context_id.form_mode none -dotkul::set_metadata /entities/content_revision/title.datatype string -dotkul::set_metadata /entities/content_revision/title.form_widget text +dotkul::set_metadata /object-types/content_revision/title.datatype string +dotkul::set_metadata /object-types/content_revision/title.form_widget text +dotkul::set_metadata /object-types/pinds_blog_entry.query_orderby "entry_date desc" + + + #---------------------------------------------------------------------- +# Foreign keys +#---------------------------------------------------------------------- + +dotkul::set_metadata /object-types/acs_object/creation_user.references user + + + +#---------------------------------------------------------------------- # Forms #---------------------------------------------------------------------- @@ -326,37 +368,37 @@ ad_proc dotkul::build_form_metadata {} { Build nsv data structure for forms } { - foreach entity [dotkul::get_metadata /entities/] { + foreach entity [dotkul::get_metadata /object-types/] { dotkul::set_metadata /formspecs/$entity.type formspec - switch [dotkul::get_metadata /entities/$entity.storage] { + switch [dotkul::get_metadata /object-types/$entity.storage] { acs_object { - dotkul::set_metadata /formspecs/$entity.key [dotkul::get_metadata /entities/$entity.id_column] + dotkul::set_metadata /formspecs/$entity.key [dotkul::get_metadata /object-types/$entity.id_column] } content_item { dotkul::set_metadata /formspecs/$entity.key item_id } } dotkul::set_metadata /formspecs/$entity.entity $entity - foreach supertype [dotkul::get_metadata /entities/$entity.supertype_list] { - foreach attribute [dotkul::get_metadata /entities/$supertype/] { + foreach supertype [dotkul::get_metadata /object-types/$entity.supertype_list] { + foreach attribute [dotkul::get_metadata /object-types/$supertype/] { dotkul::set_metadata /formspecs/$entity/${attribute}.type formspec-element dotkul::set_metadata /formspecs/$entity/${attribute}.entity $supertype dotkul::set_metadata /formspecs/$entity/${attribute}.attribute $attribute dotkul::set_metadata /formspecs/$entity/${attribute}.label \ - [dotkul::get_metadata /entities/$supertype/$attribute.pretty_name] + [dotkul::get_metadata /object-types/$supertype/$attribute.pretty_name] dotkul::set_metadata /formspecs/$entity/${attribute}.widget \ - [dotkul::get_metadata /entities/$supertype/$attribute.form_widget] + [dotkul::get_metadata /object-types/$supertype/$attribute.form_widget] dotkul::set_metadata /formspecs/$entity/${attribute}.datatype \ - [dotkul::get_metadata /entities/$supertype/$attribute.form_datatype] + [dotkul::get_metadata /object-types/$supertype/$attribute.form_datatype] dotkul::set_metadata /formspecs/$entity/${attribute}.options \ - [dotkul::get_metadata /entities/$supertype/$attribute.form_options] + [dotkul::get_metadata /object-types/$supertype/$attribute.form_options] dotkul::set_metadata /formspecs/$entity/${attribute}.form_mode \ - [dotkul::get_metadata /entities/$supertype/$attribute.form_mode] + [dotkul::get_metadata /object-types/$supertype/$attribute.form_mode] } } } @@ -392,71 +434,14 @@ -#---------------------------------------------------------------------- -# content_item storage procs -#---------------------------------------------------------------------- -ad_proc -public dotkul::storage::content_item::new { - -key:required - -parent_id:required - -entity:required - -array:required -} { - upvar 1 $array values - - if { ![exists_and_not_null values(name)] } { - if { ![exists_and_not_null values(title)] } { - error "You must supply a title" - } - - set values(name) [util_text_to_url -text $values(title)] - } - if { ![exists_and_not_null values(mime_type)] } { - set values(mime_type) "text/plain" - } - if { ![exists_and_not_null values(content_text)] } { - set values(content_text) {} - } - if { ![exists_and_not_null values(description)] } { - set values(description) {} - } - - db_transaction { - set item_id [bcms::item::create_item \ - -item_id $key \ - -item_name $values(name) \ - -parent_id $parent_id \ - -content_type $entity \ - -storage_type "text"] - - # HACK!!!!! Remember to put in attributes here!!! - set attributes {} - - set revision_id [bcms::revision::add_revision \ - -item_id $item_id \ - -title $values(title) \ - -content_type $entity \ - -mime_type $values(mime_type) \ - -content $values(content_text) \ - -description $values(description) \ - -additional_properties $attributes] - - - bcms::revision::set_revision_status \ - -revision_id $revision_id \ - -status "live" - } - - return $item_id -} - #---------------------------------------------------------------------- # Node and property types #---------------------------------------------------------------------- -dotkul::set_metadata /system/metadata/node-types/entity.type metadata_node -dotkul::set_metadata /system/metadata/node-types/entity/all_attributes.type metadata_property -dotkul::set_metadata /system/metadata/node-types/entity/all_attributes.property_type metadata_reference_list +dotkul::set_metadata /system/metadata/node-types/object_type.type metadata_node +dotkul::set_metadata /system/metadata/node-types/object_type/all_attributes.type metadata_property +dotkul::set_metadata /system/metadata/node-types/object_type/all_attributes.property_type metadata_reference_list dotkul::set_metadata /system/metadata/node-types/page-element-instance.type metadata_node dotkul::set_metadata /system/metadata/node-types/page-element-instance/page-element.type metadata_property @@ -476,7 +461,7 @@ dotkul::set_metadata /page-elements/generic-table.src "/packages/dotkul/lib/generic-table" dotkul::set_metadata /page-elements/generic-table/entity.type parameter dotkul::set_metadata /page-elements/generic-table/entity.datatype metadata -dotkul::set_metadata /page-elements/generic-table/entity.metadata_root /entities/ +dotkul::set_metadata /page-elements/generic-table/entity.metadata_root /object-types/ dotkul::set_metadata /page-elements/generic-table/parent_id.type parameter dotkul::set_metadata /page-elements/generic-table/parent_id.datatype object_id dotkul::set_metadata /page-elements/generic-table/parent_id.object_supertype acs_object @@ -575,7 +560,7 @@ dotkul::set_metadata /site-map/dashboard/projects/index/project-list.layout_tag left dotkul::set_metadata /site-map/dashboard/projects/index/project-list.page-element /page-elements/generic-table dotkul::set_metadata /site-map/dashboard/projects/index/project-list/entity.type parameter-value -dotkul::set_metadata /site-map/dashboard/projects/index/project-list/entity.value /entities/project +dotkul::set_metadata /site-map/dashboard/projects/index/project-list/entity.value /object-types/project dotkul::set_metadata /site-map/dashboard/projects/index/project-list/parent_id.type parameter-value dotkul::set_metadata /site-map/dashboard/projects/index/project-list/parent_id.value {[ad_conn package_id]} Index: openacs-4/packages/dotkul/tcl/object-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotkul/tcl/Attic/object-procs.tcl,v diff -u -N --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/dotkul/tcl/object-procs.tcl 26 Apr 2004 13:14:46 -0000 1.1.2.1 @@ -0,0 +1,340 @@ +ad_library { + API for creating, getting, editing, and deleting objects. +} + +namespace eval object {} +namespace eval storage::acs_object {} +namespace eval storage::content_item {} + +ad_proc -public storage::acs_object::get_list { + -object_type:required + {-filters {}} + {-limit {}} + {-offset {}} + {-orderby {}} +} { + Returns a multirow of objects +} { + # Built assuming that the attributes will have no name conflicts + + set select [dotkul::get_metadata /object-types/$object_type.query_select] + set from [dotkul::get_metadata /object-types/$object_type.query_from] + set where [dotkul::get_metadata /object-types/$object_type.query_where] + + if { [empty_string_p $orderby] } { + set orderby [dotkul::get_metadata /object-types/$object_type.query_orderby] + } + + # References + # TODO: We can get smarter about which attributes are really required, and avoid a number of joins that way + # Maybe the referencing object decide which attributes of the referenced object are interesting, + # or the referenced object has a set of attributes typically used for presentation (maybe using Branimir's + # presentation trick, so we always only have to query acs_objects when referencing other objects, + # unless you specifically mention them in the params to this proc) + + foreach attribute_ref [dotkul::get_metadata /object-types/$object_type.all_attributes] { + set referencing_attribute_name [dotkul::get_metadata $attribute_ref.attribute_name] + set referencing_table_name [dotkul::get_metadata $attribute_ref.table_name] + set referencing_column_name [dotkul::get_metadata $attribute_ref.column_name] + + set references [dotkul::get_metadata $attribute_ref.references] + if { ![empty_string_p $references] } { + # Add to query + + # select creation_user__person.first_names as creation_user_first_names + # from persons creation_user__person + # where creation_user__person.person_id = acs_objects.creation_user + + set ref_tables [list] + + foreach referenced_attribute_ref [dotkul::get_metadata /object-types/$references.all_attributes] { + set referenced_object_type [lindex [split $referenced_attribute_ref /] 2] + set table_name [dotkul::get_metadata /object-types/$referenced_object_type.table_name] + if { [lsearch $ref_tables $table_name] == -1 } { + lappend ref_tables $table_name + lappend from "$table_name ${referencing_attribute_name}__$table_name" + + set id_column [dotkul::get_metadata /object-types/$referenced_object_type.id_column] + + lappend where "${referencing_attribute_name}__$table_name.$id_column = $referencing_table_name.$referencing_column_name" + } + set referenced_column_name [dotkul::get_metadata $referenced_attribute_ref.column_name] + lappend select "${referencing_attribute_name}__$table_name.$referenced_column_name as ${referencing_attribute_name}__$referenced_column_name" + } + } + } + + # TODO: Filters + + + + # TODO: Categories + + set query " +select [join $select ",\n "] +from [join $from ",\n "] +where [join $where "\nand "] +order by $orderby +[ad_decode $limit {} {} "limit $limit"] +[ad_decode $offset {} {} "offset $offset"] + " + + ds_comment $query + + db_multirow $object_type generated $query +} + +ad_proc -public storage::acs_object::create_attribute { + object_type attribute_name spec +} { + Create new content type. +} { + array set spec_array $spec + + foreach var { pretty_name pretty_plural default_value min_n_values max_n_values } { + set $var $spec_array($var) + } + + # TODO: Fixme + db_exec_plsql object_type_create { + select acs_attribute__create_attribute ( + :content_type, + :attribute_name, + :datatype, + :pretty_name, + :pretty_plural, + null, + null, + :default_value, + :min_n_values, + :max_n_values, + null, + 'generic', + 'f' + ) + } +} + +#---------------------------------------------------------------------- +# content_item storage procs +#---------------------------------------------------------------------- + +ad_proc -public storage::content_item::new { + -key:required + -parent_id:required + -entity:required + -array:required +} { + upvar 1 $array values + + if { ![exists_and_not_null values(name)] } { + if { ![exists_and_not_null values(title)] } { + error "You must supply a title" + } + + set values(name) [util_text_to_url -text $values(title)] + } + if { ![exists_and_not_null values(mime_type)] } { + set values(mime_type) "text/plain" + } + if { ![exists_and_not_null values(content_text)] } { + set values(content_text) {} + } + if { ![exists_and_not_null values(description)] } { + set values(description) {} + } + + db_transaction { + set item_id [bcms::item::create_item \ + -item_id $key \ + -item_name $values(name) \ + -parent_id $parent_id \ + -content_type $entity \ + -storage_type "text"] + + # TODO: Actually put in attributes here!!! + set attributes {} + + set revision_id [bcms::revision::add_revision \ + -item_id $item_id \ + -title $values(title) \ + -content_type $entity \ + -mime_type $values(mime_type) \ + -content $values(content_text) \ + -description $values(description) \ + -additional_properties $attributes] + + + bcms::revision::set_revision_status \ + -revision_id $revision_id \ + -status "live" + } + + return $item_id +} + +ad_proc -public storage::content_item::create_type { + object_type spec +} { + Create new content type. +} { + array set spec_array $spec + + if { ![exists_and_not_null spec_array(extends)] } { + set spec_array(extends) "content_revision" + } + foreach var { extends pretty_name pretty_plural table_name id_column } { + set $var $spec_array($var) + } + + db_exec_plsql object_type_create { + select content_type__create_type ( + :object_type, + :extends, + :pretty_name, + :pretty_plural, + :table_name, + :id_column, + null + ) + } +} + +ad_proc -public storage::content_item::create_attribute { + object_type attribute_name spec +} { + Create new content type. +} { + array set spec_array $spec + + foreach var { pretty_name pretty_plural default_value min_n_values max_n_values } { + set $var $spec_array($var) + } + + db_exec_plsql attribute_create { + select content_type__create_attribute ( + :object_type, + :attribute_name, + :datatype, + :pretty_name, + :pretty_plural, + null, + :default_value, + :column_spec XXXX + ); + } +} + + + +#---------------------------------------------------------------------- +# Procs for defining object types +#---------------------------------------------------------------------- + +ad_proc -public object::define_type { object_type spec } { + Declare new object types +} { + array set spec_array $spec + + # Guess properties + if { ![exists_and_not_null spec_array(pretty_name)] } { + set spec_array(pretty_name) [string totitle [string map {_ } $object_type]] + } + if { ![exists_and_not_null spec_array(pretty_plural)] } { + set spec_array(pretty_plural) "$spec_array(pretty_name)s" + } + if { ![exists_and_not_null spec_array(table_name)] } { + set spec_array(table_name) "${object_type}s" + } + if { ![exists_and_not_null spec_array(id_column)] } { + set spec_array(id_column) "${object_type}_id" + } + if { ![exists_and_not_null spec_array(storage)] } { + if { [exists_and_not_null spec_array(extends)] } { + set spec_array(storage) [dotkul::get_metadata /object-types/$extends.storage] + } else { + set spec_array(storage) "acs_object" + } + } + + if { [exists_and_not_null spec_array(attributes)] } { + set attributes $spec_array(attributes) + unset spec_array(attributes) + } else { + set attributes {} + } + + if { [empty_string_p [dotkul::get_metadata /object-types/$object_type.type]] } { + # Object type doesn't already exist, create + + storage::$spec_array(storage)::create_type $object_type [array get spec_array] + } + } else { + # Update metadata in memory + foreach { property value } [array get spec_array] { + dotkul::set_metadata /object-types/$object_type.$property $value + } + # TODO: Update metadata about object-type in DB + } + + + foreach { attribute_name attribute_spec } $attributes { + array set attribute_spec_aray $attribute_spec + + if { ![exists_and_not_null attribute_spec_array(pretty_name)] } { + set attribute_spec_array(pretty_name) [string totitle [string map {_ } $attribute_name]] + } + if { ![exists_and_not_null attribute_spec_array(pretty_plural)] } { + set attribute_spec_array(pretty_plural) "$attribute_spec_array(pretty_name)s" + } + if { ![exists_and_not_null attribute_spec_array(column_name)] } { + set attribute_spec_array(column_name) $attribute_name + } + if { ![exists_and_not_null attribute_spec_array(datatype)] } { + set attribute_spec_array(datatype) "string" + } + if { ![exists_and_not_null attribute_spec_array(default_value)] } { + set attribute_spec_array(default_value) "" + } + if { ![exists_and_not_null attribute_spec_array(min_n_values)] } { + set attribute_spec_array(min_n_values) 0 + } + if { ![exists_and_not_null attribute_spec_array(max_n_values)] } { + set attribute_spec_array(max_n_values) 1 + } + + if { ![empty_string_p [dotkul::get_metadata /object-types/$object_type/$attribute_name.type]] } { + # New attribute + storage::$spec_array(storage)::create_attribute $object_type $attribute_name [array get attribute_spec_array] + } else { + # Update metadata in memory + foreach { property value } [array get attribute_spec_array] { + dotkul::set_metadata /object-types/$object_type/$attribute_name.$property $value + } + # TODO: Update metadata about attribute in DB + } + } +} + + +#---------------------------------------------------------------------- +# Define some core object types +#---------------------------------------------------------------------- + +object::define_type acs_object { + attributes { + creation_user { + references user + } + } +} + +object::define_type users { + attributes { + presentation { + eval { + $first_names $last_name + } + } + } +} Index: openacs-4/packages/dotkul-admin/www/children.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotkul-admin/www/Attic/children.adp,v diff -u -N --- openacs-4/packages/dotkul-admin/www/children.adp 17 Mar 2004 15:35:37 -0000 1.1.2.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,7 +0,0 @@ - - - - - - - Index: openacs-4/packages/dotkul-admin/www/index.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotkul-admin/www/Attic/index.adp,v diff -u -N -r1.1.2.2 -r1.1.2.3 --- openacs-4/packages/dotkul-admin/www/index.adp 22 Mar 2004 14:43:03 -0000 1.1.2.2 +++ openacs-4/packages/dotkul-admin/www/index.adp 26 Apr 2004 13:17:22 -0000 1.1.2.3 @@ -5,11 +5,8 @@ - - - - - + + Index: openacs-4/packages/dotkul-admin/www/tree-view.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotkul-admin/www/Attic/tree-view.adp,v diff -u -N -r1.1.2.1 -r1.1.2.2 --- openacs-4/packages/dotkul-admin/www/tree-view.adp 22 Mar 2004 14:43:03 -0000 1.1.2.1 +++ openacs-4/packages/dotkul-admin/www/tree-view.adp 26 Apr 2004 13:17:22 -0000 1.1.2.2 @@ -5,6 +5,7 @@ <script type="text/javascript" src="/resources/dotkul-admin/xloadtree/xloadtree.js"></script> <link type="text/css" rel="stylesheet" href="/resources/dotkul-admin/xloadtree/xtree.css" /> </property> + <property name="clean_p">1</property> <div id="node-type"> <script type="text/javascript"> Index: openacs-4/packages/dotkul-admin/www/tree-view.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotkul-admin/www/Attic/tree-view.tcl,v diff -u -N -r1.1.2.1 -r1.1.2.2 --- openacs-4/packages/dotkul-admin/www/tree-view.tcl 22 Mar 2004 14:43:03 -0000 1.1.2.1 +++ openacs-4/packages/dotkul-admin/www/tree-view.tcl 26 Apr 2004 13:17:22 -0000 1.1.2.2 @@ -16,5 +16,9 @@ set root_node [lindex [split $node_path /] end] +if { [empty_string_p $root_node] } { + set root_node "Root" +} + set root_src_url "children?path=$node_path"