Index: openacs-4/packages/imsld/tcl/imsld-install-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/imsld/tcl/imsld-install-procs.tcl,v diff -u -N -r1.51 -r1.52 --- openacs-4/packages/imsld/tcl/imsld-install-procs.tcl 29 Oct 2009 11:09:59 -0000 1.51 +++ openacs-4/packages/imsld/tcl/imsld-install-procs.tcl 14 Jan 2010 09:44:45 -0000 1.52 @@ -642,303 +642,303 @@ } 1.0d 1.1d { - # property instances - content::type::new -content_type imsld_property_instance -supertype content_revision -pretty_name "#imsld.lt_IMS-LD_Property_Insta#" -pretty_plural "#imsld.lt_IMS-LD_Property_Insta_1#" -table_name imsld_property_instances -id_column instance_id - - content::type::attribute::new -content_type imsld_property_instance -attribute_name property_id -datatype number -pretty_name "#imsld.Property_Identifier#" -column_spec "integer" - content::type::attribute::new -content_type imsld_property_instance -attribute_name identifier -datatype string -pretty_name "#imsld.lt_Property_String_Ident#" -column_spec "varchar(100)" - content::type::attribute::new -content_type imsld_property_instance -attribute_name party_id -datatype number -pretty_name "#imsld.Party_Identifier#" -column_spec "integer" - content::type::attribute::new -content_type imsld_property_instance -attribute_name run_id -datatype number -pretty_name "#imsld.Run_Identifier#" -column_spec "integer" - content::type::attribute::new -content_type imsld_property_instance -attribute_name value -datatype string -pretty_name "#imsld.Property_Value#" -column_spec "varchar(4000)" + # property instances + content::type::new -content_type imsld_property_instance -supertype content_revision -pretty_name "#imsld.lt_IMS-LD_Property_Insta#" -pretty_plural "#imsld.lt_IMS-LD_Property_Insta_1#" -table_name imsld_property_instances -id_column instance_id + + content::type::attribute::new -content_type imsld_property_instance -attribute_name property_id -datatype number -pretty_name "#imsld.Property_Identifier#" -column_spec "integer" + content::type::attribute::new -content_type imsld_property_instance -attribute_name identifier -datatype string -pretty_name "#imsld.lt_Property_String_Ident#" -column_spec "varchar(100)" + content::type::attribute::new -content_type imsld_property_instance -attribute_name party_id -datatype number -pretty_name "#imsld.Party_Identifier#" -column_spec "integer" + content::type::attribute::new -content_type imsld_property_instance -attribute_name run_id -datatype number -pretty_name "#imsld.Run_Identifier#" -column_spec "integer" + content::type::attribute::new -content_type imsld_property_instance -attribute_name value -datatype string -pretty_name "#imsld.Property_Value#" -column_spec "varchar(4000)" - set i 0 - foreach run [db_list_of_lists runs { - select ir.run_id, - ir.imsld_id, - ic.item_id as component_item_id, - icm.manifest_id, - rug.group_id as run_group_id - from imsld_runs ir, - imsld_imsldsi ii, - imsld_componentsi ic, - imsld_cp_organizationsi ico, - imsld_cp_manifestsi icm, - imsld_run_users_group_ext rug - where ir.imsld_id = ii.imsld_id - and ii.item_id = ic.imsld_id - and ii.organization_id = ico.item_id - and ico.manifest_id = icm.item_id - and rug.run_id = ir.run_id - }] { - set run_id [lindex $run 0] - set imsld_id [lindex $run 1] - set component_item_id [lindex $run 2] - set manifest_id [lindex $run 3] - set run_group_id [lindex $run 4] - incr i - - set community_id [imsld::community_id_from_manifest_id -manifest_id $manifest_id] - set run_folder_id [imsld::instance::create_run_folder -run_id $run_id -community_id $community_id] - set cr_folder_id [content::item::get_parent_folder -item_id $component_item_id] - #in case the content type is not registered - content::folder::register_content_type -folder_id $cr_folder_id -content_type imsld_property_instance - content::folder::register_content_type -folder_id $cr_folder_id -content_type imsld_property_instance - set global_folder_id [imsld::global_folder_id -community_id $community_id] + set i 0 + foreach run [db_list_of_lists runs { + select ir.run_id, + ir.imsld_id, + ic.item_id as component_item_id, + icm.manifest_id, + rug.group_id as run_group_id + from imsld_runs ir, + imsld_imsldsi ii, + imsld_componentsi ic, + imsld_cp_organizationsi ico, + imsld_cp_manifestsi icm, + imsld_run_users_group_ext rug + where ir.imsld_id = ii.imsld_id + and ii.item_id = ic.imsld_id + and ii.organization_id = ico.item_id + and ico.manifest_id = icm.item_id + and rug.run_id = ir.run_id + }] { + set run_id [lindex $run 0] + set imsld_id [lindex $run 1] + set component_item_id [lindex $run 2] + set manifest_id [lindex $run 3] + set run_group_id [lindex $run 4] + incr i + + set community_id [imsld::community_id_from_manifest_id -manifest_id $manifest_id] + set run_folder_id [imsld::instance::create_run_folder -run_id $run_id -community_id $community_id] + set cr_folder_id [content::item::get_parent_folder -item_id $component_item_id] + #in case the content type is not registered + content::folder::register_content_type -folder_id $cr_folder_id -content_type imsld_property_instance + content::folder::register_content_type -folder_id $cr_folder_id -content_type imsld_property_instance + set global_folder_id [imsld::global_folder_id -community_id $community_id] - db_foreach property_in_component { - select property_id, - identifier, - type, - datatype, - initial_value, - role_id, - existing_href, - uri, - component_id as component_item_id - from imsld_properties - where component_id = :component_item_id - } { - incr i - switch $type { - loc { - # get instance info - if { ![db_0or1row get_instance_info { - select instance_id as old_instance_id, - party_id, - value - from imsld_property_instances - where property_id = :property_id - and identifier = :identifier - and run_id = :run_id - }] } { - continue - } + db_foreach property_in_component { + select property_id, + identifier, + type, + datatype, + initial_value, + role_id, + existing_href, + uri, + component_id as component_item_id + from imsld_properties + where component_id = :component_item_id + } { + incr i + switch $type { + loc { + # get instance info + if { ![db_0or1row get_instance_info { + select instance_id as old_instance_id, + party_id, + value + from imsld_property_instances + where property_id = :property_id + and identifier = :identifier + and run_id = :run_id + }] } { + continue + } - if { ![db_0or1row loc_already_instantiated_p { - select 1 - from imsld_property_instancesi - where property_id = :property_id - and identifier = :identifier - and run_id = :run_id - }] } { - set instance_id [imsld::item_revision_new -attributes [list [list run_id $run_id] \ - [list value $value] \ - [list identifier $identifier] \ - [list property_id $property_id]] \ - -content_type imsld_property_instance \ - -title $identifier \ - -parent_id [expr [string eq $datatype "file"] ? $run_folder_id : $cr_folder_id]] - - if { [string eq $datatype "file"] } { - # initialize the file to an empty one so the fs doesn't generate an error when requesting the file - imsld::fs::empty_file -revision_id [content::item::get_live_revision -item_id $instance_id] -string $value - } - # delete old instance - db_dml delte_old_instance { - delete from imsld_property_instances where instance_id = :old_instance_id - } - } - } - locpers { - foreach party_id [db_list users_in_run { - select ar.object_id_two as party_id - from acs_rels ar - where ar.object_id_one = :run_group_id - and ar.rel_type = 'imsld_run_users_group_rel' - }] { - - # get instance info - if { ![db_0or1row get_instance_info { - select instance_id as old_instance_id, - party_id, - value - from imsld_property_instances - where property_id = :property_id - and identifier = :identifier - and party_id = :party_id - and run_id = :run_id - }] } { - continue - } - - if { ![db_0or1row locrole_already_instantiated_p { - select 1 - from imsld_property_instancesi - where property_id = :property_id - and identifier = :identifier - and party_id = :party_id - and run_id = :run_id - }] } { - set instance_id [imsld::item_revision_new -attributes [list [list run_id $run_id] \ - [list value $value] \ - [list identifier $identifier] \ - [list party_id $party_id] \ - [list property_id $property_id]] \ - -content_type imsld_property_instance \ - -title $identifier \ - -parent_id [expr [string eq $datatype "file"] ? $run_folder_id : $cr_folder_id]] - if { [string eq $datatype "file"] } { - # initialize the file to an empty one so the fs doesn't generate an error when requesting the file - imsld::fs::empty_file -revision_id [content::item::get_live_revision -item_id $instance_id] -string $value - } - # delete old instance - db_dml delte_old_instance { - delete from imsld_property_instances where instance_id = :old_instance_id - } - } - } - } - locrole { - foreach party_id [db_list roles_instances_in_run { - select ar1.object_id_two as party_id - from acs_rels ar1, acs_rels ar2, acs_rels ar3, - public.imsld_run_users_group_ext run_group - where ar1.rel_type = 'imsld_role_group_rel' - and ar1.object_id_two = ar2.object_id_one - and ar2.rel_type = 'imsld_roleinstance_run_rel' - and ar2.object_id_two = ar3.object_id_one - and ar3.object_id_one = run_group.group_id - and run_group.run_id = :run_id - }] { - # get instance info - if { ![db_0or1row get_instance_info { - select instance_id as old_instance_id, - party_id, - value - from imsld_property_instances - where property_id = :property_id - and identifier = :identifier - and party_id = :party_id - and run_id = :run_id - }] } { - continue - } - - if { ![db_0or1row locrole_already_instantiated_p { - select 1 - from imsld_property_instancesi - where property_id = :property_id - and identifier = :identifier - and party_id = :party_id - and run_id = :run_id - }] } { - - set instance_id [imsld::item_revision_new -attributes [list [list run_id $run_id] \ - [list value $value] \ - [list identifier $identifier] \ - [list party_id $party_id] \ - [list property_id $property_id]] \ - -content_type imsld_property_instance \ - -title $identifier \ - -parent_id [expr [string eq $datatype "file"] ? $run_folder_id : $cr_folder_id]] - if { [string eq $datatype "file"] } { - # initialize the file to an empty one so the fs doesn't generate an error when requesting the file - imsld::fs::empty_file -revision_id [content::item::get_live_revision -item_id $instance_id] -string $value - } - - # delete old instance - db_dml delte_old_instance { - delete from imsld_property_instances where instance_id = :old_instance_id - } - } - } - } - globpers { - foreach party_id [db_list user_in_run { - select ar.object_id_two as party_id - from acs_rels ar - where ar.object_id_one = :run_group_id - and ar.rel_type = 'imsld_run_users_group_rel' - }] { - # get instance info - if { ![db_0or1row get_instance_info { - select instance_id as old_instance_id, - party_id, - value - from imsld_property_instances - where identifier = :identifier - and party_id = :party_id - }] } { - continue - } - - if { ![db_0or1row globpers_already_instantiated_p { - select 1 - from imsld_property_instancesi - where identifier = :identifier - and party_id = :party_id - }] } { - # not instantiated... is it already defined (existing href)? or must we use the one of the global definition? - if { ![string eq $existing_href ""] } { - # it is already defined - # NOTE: there must be a better way to deal with this, - # but by the moment we treat the href as the property value - set initial_value $existing_href - } - # TODO: the property must be somehow instantiated in the given URI also - set instance_id [imsld::item_revision_new -attributes [list [list value $value] \ - [list identifier $identifier] \ - [list party_id $party_id] \ - [list property_id $property_id]] \ - -content_type imsld_property_instance \ - -title $identifier \ - -parent_id [expr [string eq $datatype "file"] ? $global_folder_id : $cr_folder_id]] - if { [string eq $datatype "file"] } { - # initialize the file to an empty one so the fs doesn't generate an error when requesting the file - imsld::fs::empty_file -revision_id [content::item::get_live_revision -item_id $instance_id] -string $value - } - - # delete old instance - db_dml delte_old_instance { - delete from imsld_property_instances where instance_id = :old_instance_id - } - } - } - } - global { - # get instance info - if { ![db_0or1row get_instance_info { - select instance_id as old_instance_id, - party_id, - value - from imsld_property_instances - where identifier = :identifier - }] } { - continue - } + if { ![db_0or1row loc_already_instantiated_p { + select 1 + from imsld_property_instancesi + where property_id = :property_id + and identifier = :identifier + and run_id = :run_id + }] } { + set instance_id [imsld::item_revision_new -attributes [list [list run_id $run_id] \ + [list value $value] \ + [list identifier $identifier] \ + [list property_id $property_id]] \ + -content_type imsld_property_instance \ + -title $identifier \ + -parent_id [expr [string eq $datatype "file"] ? $run_folder_id : $cr_folder_id]] + + if { [string eq $datatype "file"] } { + # initialize the file to an empty one so the fs doesn't generate an error when requesting the file + imsld::fs::empty_file -revision_id [content::item::get_live_revision -item_id $instance_id] -string $value + } + # delete old instance + db_dml delte_old_instance { + delete from imsld_property_instances where instance_id = :old_instance_id + } + } + } + locpers { + foreach party_id [db_list users_in_run { + select ar.object_id_two as party_id + from acs_rels ar + where ar.object_id_one = :run_group_id + and ar.rel_type = 'imsld_run_users_group_rel' + }] { + + # get instance info + if { ![db_0or1row get_instance_info { + select instance_id as old_instance_id, + party_id, + value + from imsld_property_instances + where property_id = :property_id + and identifier = :identifier + and party_id = :party_id + and run_id = :run_id + }] } { + continue + } + + if { ![db_0or1row locrole_already_instantiated_p { + select 1 + from imsld_property_instancesi + where property_id = :property_id + and identifier = :identifier + and party_id = :party_id + and run_id = :run_id + }] } { + set instance_id [imsld::item_revision_new -attributes [list [list run_id $run_id] \ + [list value $value] \ + [list identifier $identifier] \ + [list party_id $party_id] \ + [list property_id $property_id]] \ + -content_type imsld_property_instance \ + -title $identifier \ + -parent_id [expr [string eq $datatype "file"] ? $run_folder_id : $cr_folder_id]] + if { [string eq $datatype "file"] } { + # initialize the file to an empty one so the fs doesn't generate an error when requesting the file + imsld::fs::empty_file -revision_id [content::item::get_live_revision -item_id $instance_id] -string $value + } + # delete old instance + db_dml delte_old_instance { + delete from imsld_property_instances where instance_id = :old_instance_id + } + } + } + } + locrole { + foreach party_id [db_list roles_instances_in_run { + select ar1.object_id_two as party_id + from acs_rels ar1, acs_rels ar2, acs_rels ar3, + public.imsld_run_users_group_ext run_group + where ar1.rel_type = 'imsld_role_group_rel' + and ar1.object_id_two = ar2.object_id_one + and ar2.rel_type = 'imsld_roleinstance_run_rel' + and ar2.object_id_two = ar3.object_id_one + and ar3.object_id_one = run_group.group_id + and run_group.run_id = :run_id + }] { + # get instance info + if { ![db_0or1row get_instance_info { + select instance_id as old_instance_id, + party_id, + value + from imsld_property_instances + where property_id = :property_id + and identifier = :identifier + and party_id = :party_id + and run_id = :run_id + }] } { + continue + } + + if { ![db_0or1row locrole_already_instantiated_p { + select 1 + from imsld_property_instancesi + where property_id = :property_id + and identifier = :identifier + and party_id = :party_id + and run_id = :run_id + }] } { + + set instance_id [imsld::item_revision_new -attributes [list [list run_id $run_id] \ + [list value $value] \ + [list identifier $identifier] \ + [list party_id $party_id] \ + [list property_id $property_id]] \ + -content_type imsld_property_instance \ + -title $identifier \ + -parent_id [expr [string eq $datatype "file"] ? $run_folder_id : $cr_folder_id]] + if { [string eq $datatype "file"] } { + # initialize the file to an empty one so the fs doesn't generate an error when requesting the file + imsld::fs::empty_file -revision_id [content::item::get_live_revision -item_id $instance_id] -string $value + } + + # delete old instance + db_dml delte_old_instance { + delete from imsld_property_instances where instance_id = :old_instance_id + } + } + } + } + globpers { + foreach party_id [db_list user_in_run { + select ar.object_id_two as party_id + from acs_rels ar + where ar.object_id_one = :run_group_id + and ar.rel_type = 'imsld_run_users_group_rel' + }] { + # get instance info + if { ![db_0or1row get_instance_info { + select instance_id as old_instance_id, + party_id, + value + from imsld_property_instances + where identifier = :identifier + and party_id = :party_id + }] } { + continue + } + + if { ![db_0or1row globpers_already_instantiated_p { + select 1 + from imsld_property_instancesi + where identifier = :identifier + and party_id = :party_id + }] } { + # not instantiated... is it already defined (existing href)? or must we use the one of the global definition? + if { ![string eq $existing_href ""] } { + # it is already defined + # NOTE: there must be a better way to deal with this, + # but by the moment we treat the href as the property value + set initial_value $existing_href + } + # TODO: the property must be somehow instantiated in the given URI also + set instance_id [imsld::item_revision_new -attributes [list [list value $value] \ + [list identifier $identifier] \ + [list party_id $party_id] \ + [list property_id $property_id]] \ + -content_type imsld_property_instance \ + -title $identifier \ + -parent_id [expr [string eq $datatype "file"] ? $global_folder_id : $cr_folder_id]] + if { [string eq $datatype "file"] } { + # initialize the file to an empty one so the fs doesn't generate an error when requesting the file + imsld::fs::empty_file -revision_id [content::item::get_live_revision -item_id $instance_id] -string $value + } + + # delete old instance + db_dml delte_old_instance { + delete from imsld_property_instances where instance_id = :old_instance_id + } + } + } + } + global { + # get instance info + if { ![db_0or1row get_instance_info { + select instance_id as old_instance_id, + party_id, + value + from imsld_property_instances + where identifier = :identifier + }] } { + continue + } - if { ![db_0or1row global_already_instantiated_p { - select 1 - from imsld_property_instancesi - where identifier = :identifier - }] } { - # not instantiated... is it already defined (existing href)? or must we use the one of the global definition? - if { ![string eq $existing_href ""] } { - # it is already defined - # NOTE: there must be a better way to deal with this, but by the moment we treat the href as the property value - set initial_value $existing_href - } - # TODO: the property must be somehow instantiated in the given URI also - set instance_id [imsld::item_revision_new -attributes [list [list value $value] \ - [list identifier $identifier] \ - [list property_id $property_id]] \ - -content_type imsld_property_instance \ - -parent_id [expr [string eq $datatype "file"] ? $global_folder_id : $cr_folder_id]] - if { [string eq $datatype "file"] } { - # initialize the file to an empty one so the fs doesn't generate an error when requesting the file - imsld::fs::empty_file -revision_id [content::item::get_live_revision -item_id $instance_id] -string $value - } - - # delete old instance - db_dml delte_old_instance { - delete from imsld_property_instances where instance_id = :old_instance_id - } - } - } - } - } - } - } + if { ![db_0or1row global_already_instantiated_p { + select 1 + from imsld_property_instancesi + where identifier = :identifier + }] } { + # not instantiated... is it already defined (existing href)? or must we use the one of the global definition? + if { ![string eq $existing_href ""] } { + # it is already defined + # NOTE: there must be a better way to deal with this, but by the moment we treat the href as the property value + set initial_value $existing_href + } + # TODO: the property must be somehow instantiated in the given URI also + set instance_id [imsld::item_revision_new -attributes [list [list value $value] \ + [list identifier $identifier] \ + [list property_id $property_id]] \ + -content_type imsld_property_instance \ + -parent_id [expr [string eq $datatype "file"] ? $global_folder_id : $cr_folder_id]] + if { [string eq $datatype "file"] } { + # initialize the file to an empty one so the fs doesn't generate an error when requesting the file + imsld::fs::empty_file -revision_id [content::item::get_live_revision -item_id $instance_id] -string $value + } + + # delete old instance + db_dml delte_old_instance { + delete from imsld_property_instances where instance_id = :old_instance_id + } + } + } + } + } + } + } } } @@ -988,7 +988,7 @@ } { imsld::rel_type_delete -rel_type imsld_role_group_rel imsld::rel_type_delete -rel_type imsld_roleinstance_run_rel -#TODO: drop attributes + #TODO: drop attributes imsld::rel_type_delete -rel_type imsld_run_users_group_rel } @@ -999,7 +999,7 @@ } { imsld::group_type_delete -group_type imsld_role_group -#TODO: drop attributes + #TODO: drop attributes imsld::group_type_delete -group_type imsld_run_users_group } @@ -1321,37 +1321,37 @@ set dotlrn_root_folder_id [dotlrn_fs::get_dotlrn_root_folder_id] db_transaction { - # create the root cr dir + # create the root cr dir - set global_folder_id [imsld::cr::folder_new \ - -parent_id $dotlrn_root_folder_id \ - -folder_name $folder_name \ - -folder_label "IMS-LD"] + set global_folder_id [imsld::cr::folder_new \ + -parent_id $dotlrn_root_folder_id \ + -folder_name $folder_name \ + -folder_label "IMS-LD"] - # PERMISSIONS FOR FILE-STORAGE + # PERMISSIONS FOR FILE-STORAGE - # Before we go about anything else, lets just set permissions - # straight. - # Disable folder permissions inheritance - permission::set_not_inherit -object_id $global_folder_id + # Before we go about anything else, lets just set permissions + # straight. + # Disable folder permissions inheritance + permission::set_not_inherit -object_id $global_folder_id - # Set read permissions for *all* other professors within .LRN - # (so they can see the content) - set party_id_professor [dotlrn::user::type::get_segment_id -type professor] - permission::grant -party_id $party_id_professor -object_id $global_folder_id -privilege read - - # Set read permissions for *all* other admins within .LRN - # (so they can see the content) - set party_id_admins [dotlrn::user::type::get_segment_id -type admin] - permission::grant -party_id $party_id_admins -object_id $global_folder_id -privilege read + # Set read permissions for *all* other professors within .LRN + # (so they can see the content) + set party_id_professor [dotlrn::user::type::get_segment_id -type professor] + permission::grant -party_id $party_id_professor -object_id $global_folder_id -privilege read + + # Set read permissions for *all* other admins within .LRN + # (so they can see the content) + set party_id_admins [dotlrn::user::type::get_segment_id -type admin] + permission::grant -party_id $party_id_admins -object_id $global_folder_id -privilege read } # register content types content::folder::register_content_type -folder_id $global_folder_id \ - -content_type imsld_property_instance + -content_type imsld_property_instance # allow subfolders inside our parent folder content::folder::register_content_type -folder_id $global_folder_id \ - -content_type content_folder + -content_type content_folder return $global_folder_id }