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 -r1.29 -r1.30 --- openacs-4/packages/imsld/tcl/imsld-install-procs.tcl 10 Jul 2006 13:15:13 -0000 1.29 +++ openacs-4/packages/imsld/tcl/imsld-install-procs.tcl 10 Jul 2006 13:45:29 -0000 1.30 @@ -501,7 +501,17 @@ rel_types::new imsld_on_comp_change_pv_rel "On Completion - Change Property Values rel" "On Completion - Change Property Values rels" \ content_item 0 {} \ content_item 0 {} + + # Properties - Conditions + rel_types::new imsld_prop_cond_rel "Property - Condition" "Properties - Conditions" \ + content_item 0 {} \ + content_item 0 {} + # Properties - When-condition-true + rel_types::new imsld_prop_whct_rel "Property - when-condition-true" "Properties - When-Condition-True" \ + content_item 0 {} \ + content_item 0 {} + } ad_proc -public imsld::uninstall::delete_rels { Index: openacs-4/packages/imsld/tcl/imsld-parse-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/imsld/tcl/imsld-parse-procs.tcl,v diff -u -r1.48 -r1.49 --- openacs-4/packages/imsld/tcl/imsld-parse-procs.tcl 10 Jul 2006 13:15:13 -0000 1.48 +++ openacs-4/packages/imsld/tcl/imsld-parse-procs.tcl 10 Jul 2006 13:45:29 -0000 1.49 @@ -2014,8 +2014,8 @@ relation_add imsld_env_env_rel $environment_id $refrenced_env_id } else { # case two, first verify that the referenced environment exists - set organizations [$manifest selectNodes "*\[local-name()=organizations\]"] - set environments [$organizations selectNodes {*[local-name()='learning-design']\*[local-name()='components']\*[local-name()='environments']}] + set organizations [$manifest selectNodes "*\[local-name()='organizations'\]"] + set environments [$organizations selectNodes {*[local-name()='learning-design']/*[local-name()='components']/*[local-name()='environments']}] # set environments [[[$organizations child all imsld:learning-design] child all imsld:components] child all imsld:environments] set found_p 0 foreach referenced_environment [$environments selectNodes "*\[local-name()='environment'\]"] { @@ -2692,7 +2692,7 @@ } else { # search in the manifest ... set organizations [$manifest selectNodes {*[local-name()=organizations]}] - set activity_structures [$organizations {*[local-name()='learning-design']\*[local-name()='components']\*[local-name()='activities']\*[local-name()='activity-structure']}] + set activity_structures [$organizations {*[local-name()='learning-design']/*[local-name()='components']/*[local-name()='activities']/*[local-name()='activity-structure']}] # set activity_structures [[[[$organizations child all imsld:learning-design] child all imsld:components] child all imsld:activities] child all imsld:activity-structure] set found_p 0 @@ -2797,7 +2797,7 @@ } else { # search in the manifest ... set organizations [$manifest selectNodes {*[local-name()='organizations']}] - set activity_structures [$organizations selectNodes {*[local-name()='learning-design']\*[local-name()='components']\*[local-name()='activities']\*[local-name()='activity-structure']}] + set activity_structures [$organizations selectNodes {*[local-name()='learning-design']/*[local-name()='components']/*[local-name()='activities']/*[local-name()='activity-structure']}] # set activity_structures [[[[$organizations child all imsld:learning-design] child all imsld:components] child all imsld:activities] child all imsld:activity-structure] set found_p 0 @@ -2885,7 +2885,7 @@ } else { # case two, first verify that the referenced activity structure exists set organizations [$manifest selectNodes {*[local-name()='organizations']}] - set activity_structures [$organizations selectNodes {*\[local-name()='learning-design']\*[local-name()='components']\*[local-name()='activities']\*[local-name()='activity-structure']}] + set activity_structures [$organizations selectNodes {*[local-name()='learning-design']/*[local-name()='components']/*[local-name()='activities']/*[local-name()='activity-structure']}] # set activity_structures [[[[$organizations child all imsld:learning-design] child all imsld:components] child all imsld:activities] child all imsld:activity-structure] set found_p 0 @@ -3233,15 +3233,22 @@ # error, referenced role does not exist return [list 0 "[_ imsld.lt_Referenced_role_role_]"] } - set expression [$when_condition_true selectNodes "*\[local-name()='expression'\]"] - imsld::parse::validate_multiplicity -tree $expression -multiplicity 1 -element_name expression(when-condition-true) -equal + #select all but role-ref that is: select the expression node + set expression [$when_condition_true selectNodes "*\[not(local-name()='role-ref')\]"] + imsld::parse::validate_multiplicity -tree $expression -multiplicity 1 -element_name "[$expression localName](when-condition-true)" -equal set when_condition_true_id [imsld::item_revision_new -attributes [list [list role_id $role_id] \ [list expression_xml [$expression asXML]]] \ -content_type imsld_when_condition_true \ -parent_id $parent_id \ -title $title] - + #search properties in expression + set property_nodes_list [$expression selectNodes {//*[local-name()='property-ref']}] + foreach property $property_nodes_list { +#TODO que funcion la get_property_id con el play_id + set property_id [imsld::get_property_id -identifier [$property getAttribute ref] -play_id $play_id] + relation_add imsld_prop_whct_rel $property_id $when_condition_true_id + } } set complete_act_id [imsld::item_revision_new -attributes [list [list time_in_seconds $time_in_seconds] \ @@ -3986,14 +3993,20 @@ set imsld_ifs_list [$conditions selectNodes { *[local-name()='if'] } ] foreach imsld_if $imsld_ifs_list { - set if_then_else_list [list] - lappend $if_then_else_list [imsld::parse::parse_and_create_if_then_else -condition_node $imsld_if \ - -manifest_id $manifest_id \ - -parent_id $cr_folder_id \ - -manifest $manifest \ - -method_id $method_id ] + + set condition_id [imsld::parse::parse_and_create_if_then_else -condition_node $imsld_if \ + -manifest_id $manifest_id \ + -parent_id $cr_folder_id \ + -manifest $manifest \ + -method_id $method_id ] + #search condition properties + set property_nodes_list [$imsld_if selectNodes { //*[local-name()='property-ref'] }] + + foreach property $property_nodes_list { + set property_id [imsld::get_property_id -identifier [$property getAttribute ref] -imsld_id $imsld_id] + relation_add imsld_prop_cond_rel $property_id $contition_id + } } - } Index: openacs-4/packages/imsld/tcl/imsld-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/imsld/tcl/imsld-procs.tcl,v diff -u -r1.72 -r1.73 --- openacs-4/packages/imsld/tcl/imsld-procs.tcl 10 Jul 2006 13:15:14 -0000 1.72 +++ openacs-4/packages/imsld/tcl/imsld-procs.tcl 10 Jul 2006 13:45:29 -0000 1.73 @@ -1118,6 +1118,7 @@ group by member_id }] } + #get acts in run set acts_list [db_list get_acts_in_run { select iai.act_id, @@ -1138,16 +1139,49 @@ foreach user $user_id { foreach act $acts_list { if {![imsld::act_finished_p -run_id $run_id -act_id $act -user_id $user]} { - set all_finished_p 0 + if {[imsld::user_participate_p -run_id $run_id -act_id $act -user_id $user]} { + set all_finished_p 0 + } } } } return $all_finished_p } +ad_proc -public imsld::user_participate_p { + -act_id:required + -run_id:required + {-user_id ""} +} { + @param act_id + @param run_id + @option user_id + + @return 0 if the user does not participate in the act. 1 otherwise +} { + set user_id [expr { [string eq "" $user_id] ? [ad_conn user_id] : $user_id }] + set involved_roles [db_list get_roles_in_act {select irolei.role_id + from imsld_role_parts ir, + imsld_actsi iai, + imsld_rolesi irolei + where iai.act_id=:act_id + and iai.item_id=ir.act_id + and ir.role_id=irolei.item_id}] + set involved_users [list] + ns_log Notice "user: $user_id, act_id: $act_id, run_id: $run_id" + foreach role $involved_roles { + ns_log Notice "role:$role" + set involved_users [concat $involved_users [imsld::roles::get_users_in_role -role_id $role -run_id $run_id ]] + } + ns_log Notice "involved: $involved_users" + if { [lsearch $involved_users $user_id] < 0 } { + return 0 + } else { + return 1 + } +} - ad_proc -public imsld::act_finished_p { -act_id:required -run_id:required @@ -2923,7 +2957,30 @@ } } +ad_proc -public imsld::get_property_id { + -identifier:required + -imsld_id:required +} { +
Get the property_id from the property_identifier in a imsld_id
+ @author Luis de la Fuente Valent�n (lfuente@it.uc3m.es) +} { + + return [db_string get_property_id { + select ip.property_id + from imsld_properties ip, + imsld_componentsi ici, + imsld_imsldsi iii + where ip.component_id=ici.item_id + and ici.imsld_id=iii.item_id + and iii.imsld_id=:imsld_id + and ip.identifier=:identifier + }] + + +} + + ad_proc -public imsld::grant_permissions { -resources_activities_list -user_id Index: openacs-4/packages/imsld/www/admin/imsld-role-members.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/imsld/www/admin/imsld-role-members.tcl,v diff -u -r1.5 -r1.6 --- openacs-4/packages/imsld/www/admin/imsld-role-members.tcl 31 May 2006 16:20:54 -0000 1.5 +++ openacs-4/packages/imsld/www/admin/imsld-role-members.tcl 10 Jul 2006 13:45:29 -0000 1.6 @@ -42,6 +42,7 @@ set members_list 0 } set not_members_list [db_list get_not_members_list_2 {}] + if {![llength $not_members_list]} { set not_members_list 0 } Index: openacs-4/packages/imsld/www/admin/imsld-role-members.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/imsld/www/admin/imsld-role-members.xql,v diff -u -r1.4 -r1.5 --- openacs-4/packages/imsld/www/admin/imsld-role-members.xql 16 May 2006 09:24:36 -0000 1.4 +++ openacs-4/packages/imsld/www/admin/imsld-role-members.xql 10 Jul 2006 13:45:29 -0000 1.5 @@ -51,6 +51,7 @@ where container_id=:parent_instance and not (member_id in ([join $members_list ","])) and not (gmm.member_id in ([join $not_allowed ","])) + @@ -92,6 +93,7 @@ from acs_rels where object_id_two=:group_instance and rel_type='composition_rel' +