Index: openacs-4/packages/dotlrn-ecommerce/dotlrn-ecommerce.info =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-ecommerce/dotlrn-ecommerce.info,v diff -u -r1.34 -r1.35 --- openacs-4/packages/dotlrn-ecommerce/dotlrn-ecommerce.info 6 Sep 2005 03:23:00 -0000 1.34 +++ openacs-4/packages/dotlrn-ecommerce/dotlrn-ecommerce.info 6 Sep 2005 05:25:39 -0000 1.35 @@ -7,15 +7,15 @@ f t - + Roel Canicula Package to tie the dotLRN, Ecommerce, Assessments and dotLRN Catalog packages together 2005-08-10 Solution Grove Package to tie the dotLRN, Ecommerce, Assessments and dotLRN Catalog packages together. Initially intended for the MOS and MGH projects, the goal is to create a reusable module for similar projects. 0 - + @@ -58,6 +58,7 @@ + Index: openacs-4/packages/dotlrn-ecommerce/sql/postgresql/upgrade/upgrade-0.1d14-0.1d15.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-ecommerce/sql/postgresql/upgrade/upgrade-0.1d14-0.1d15.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/dotlrn-ecommerce/sql/postgresql/upgrade/upgrade-0.1d14-0.1d15.sql 6 Sep 2005 05:25:38 -0000 1.1 @@ -0,0 +1,22 @@ +-- +-- packages/dotlrn-ecommerce/sql/postgresql/upgrade/upgrade-0.1d14-0.1d15.sql +-- +-- @author Roel Canicula (roelmc@pldtdsl.net) +-- @creation-date 2005-09-06 +-- @arch-tag: 22b40de7-ea7d-4da0-8c15-88b20ba71f02 +-- @cvs-id $Id: upgrade-0.1d14-0.1d15.sql,v 1.1 2005/09/06 05:25:38 roelc Exp $ +-- + +create table dotlrn_ecommerce_application_assessment_map ( + rel_id integer references membership_rels on delete cascade not null, + session_id integer references as_sessions on delete cascade not null +); + +create index dotlrn_ecommerce_application_assessment_map_rel_id_idx +on dotlrn_ecommerce_application_assessment_map (rel_id); + +create index dotlrn_ecommerce_application_assessment_map_session_id_idx +on dotlrn_ecommerce_application_assessment_map (session_id); + +create unique index dotlrn_ecommerce_application_assessment_map_un +on dotlrn_ecommerce_application_assessment_map (rel_id, session_id); \ No newline at end of file Index: openacs-4/packages/dotlrn-ecommerce/www/applications.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-ecommerce/www/applications.tcl,v diff -u -r1.32 -r1.33 --- openacs-4/packages/dotlrn-ecommerce/www/applications.tcl 5 Sep 2005 20:48:25 -0000 1.32 +++ openacs-4/packages/dotlrn-ecommerce/www/applications.tcl 6 Sep 2005 05:25:38 -0000 1.33 @@ -241,7 +241,7 @@ set general_comments_url [apm_package_url_from_key "general-comments"] -db_multirow -extend { approve_url reject_url asm_url section_edit_url person_url register_url comments comments_text_plain comments_truncate add_comment_url s session_id target} applications applications [subst { +db_multirow -extend { approve_url reject_url asm_url section_edit_url person_url register_url comments comments_text_plain comments_truncate add_comment_url target} applications applications [subst { select person__name(r.user_id) as person_name, member_state, r.community_id, r.user_id as applicant_user_id, s.section_name, t.course_name, s.section_id, r.rel_id, e.phone, o.creation_user as patron_id, (select count(*) from (select * @@ -251,14 +251,18 @@ and rr.rel_id <= r.rel_id and rr.community_id = r.community_id and rr.member_state = r.member_state - order by o.creation_date) r) as number, s.product_id + order by o.creation_date) r) as number, s.product_id, m.session_id + from dotlrn_member_rels_full r left join (select * from ec_addresses where address_id in (select max(address_id) from ec_addresses group by user_id)) e - on (r.user_id = e.user_id), dotlrn_ecommerce_section s, dotlrn_catalogi t, cr_items i, acs_objects o + on (r.user_id = e.user_id) + left join dotlrn_ecommerce_application_assessment_map m + on (r.rel_id = m.rel_id), dotlrn_ecommerce_section s, dotlrn_catalogi t, cr_items i, acs_objects o + where r.community_id = s.community_id and s.course_id = t.item_id and t.course_id = i.live_revision @@ -282,25 +286,27 @@ $member_state == "payment received" } { # Get associated assessment - if { [db_0or1row assessment { - select ss.session_id - from dotlrn_ecommerce_section des, - dotlrn_catalog dc, - cr_items i1, - cr_items i2, - cr_revisions r, - as_sessions ss - where des.community_id = :community_id - and i1.item_id = des.course_id - and i1.live_revision = dc.course_id - and dc.assessment_id = i2.item_id - and r.item_id = i2.item_id - and r.revision_id = ss.assessment_id - and ss.subject_id = :applicant_user_id - order by ss.creation_datetime desc - limit 1 - }] } { +# if { [db_0or1row assessment { +# select ss.session_id +# from dotlrn_ecommerce_section des, +# dotlrn_catalog dc, +# cr_items i1, +# cr_items i2, +# cr_revisions r, +# as_sessions ss + +# where des.community_id = :community_id +# and i1.item_id = des.course_id +# and i1.live_revision = dc.course_id +# and dc.assessment_id = i2.item_id +# and r.item_id = i2.item_id +# and r.revision_id = ss.assessment_id +# and ss.subject_id = :applicant_user_id +# order by ss.creation_datetime desc +# limit 1 +# }] } { + if { ! [empty_string_p $session_id] } { if {$use_embedded_application_view_p ==1} { set asm_url "admin/application-view?session_id=$session_id" set target "" @@ -309,34 +315,37 @@ set asm_url [export_vars -base "[apm_package_url_from_id [parameter::get -parameter AssessmentPackage]]asm-admin/results-session" { session_id }] set target "_blank" } - ns_log Notice "A:HAM: $asm_url" - } + + ns_log Notice "A:HAM: $asm_url" +# } + } elseif { $member_state == "request approval" || $member_state == "request approved" } { # Get associated assessment set assessment_id [parameter::get -parameter ApplicationAssessment -default ""] - if { [db_0or1row assessment { - select ss.session_id +# if { [db_0or1row assessment { +# select ss.session_id - from (select a.* - from as_assessmentsi a, - cr_items i - where a.assessment_id = i.latest_revision) a, - as_sessions ss +# from (select a.* +# from as_assessmentsi a, +# cr_items i +# where a.assessment_id = i.latest_revision) a, +# as_sessions ss - where a.assessment_id = ss.assessment_id - and a.item_id = :assessment_id - and ss.subject_id = (select creation_user from acs_objects where object_id = :rel_id) +# where a.assessment_id = ss.assessment_id +# and a.item_id = :assessment_id +# and ss.subject_id = (select creation_user from acs_objects where object_id = :rel_id) - order by creation_datetime desc +# order by creation_datetime desc - limit 1 - }] } { +# limit 1 +# }] } { + if { ! [empty_string_p $session_id] } { if {$use_embedded_application_view_p ==1} { set asm_url "admin/application-view?session_id=$session_id" set target "" @@ -345,10 +354,12 @@ set asm_url [export_vars -base "[apm_package_url_from_id [parameter::get -parameter AssessmentPackage]]asm-admin/results-session" { session_id }] set target "_blank" } - ns_log Notice "B:HAM: $asm_url" } + +# } + ns_log Notice "B:HAM: $asm_url" } -ns_log Notice "1:HAM: $asm_url" + ns_log Notice "1:HAM: $asm_url" set section_edit_url [export_vars -base admin/one-section { section_id return_url }] set person_url [export_vars -base /acs-admin/users/one { {user_id $applicant_user_id} }] Index: openacs-4/packages/dotlrn-ecommerce/www/ecommerce/application-request-2.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-ecommerce/www/ecommerce/application-request-2.tcl,v diff -u -r1.1 -r1.2 --- openacs-4/packages/dotlrn-ecommerce/www/ecommerce/application-request-2.tcl 24 Aug 2005 12:45:53 -0000 1.1 +++ openacs-4/packages/dotlrn-ecommerce/www/ecommerce/application-request-2.tcl 6 Sep 2005 05:25:38 -0000 1.2 @@ -11,6 +11,8 @@ } { user_id:integer,notnull return_url:notnull + rel_id:integer,notnull + session_id:integer,notnull,optional } -properties { } -validate { } -errors { @@ -19,26 +21,39 @@ set assessment_id [parameter::get -parameter ApplicationAssessment -default ""] set viewing_user_id [ad_conn user_id] -if { ! [empty_string_p $assessment_id] } { - db_dml set_assessment_subject { - update as_sessions +if { ! [exists_and_not_null session_id] && ! [empty_string_p $assessment_id] } { + set session_id [db_string session { + select ss.session_id + + from (select a.* + from as_assessmentsi a, + cr_items i + where a.assessment_id = i.latest_revision) a, + as_sessions ss + + where a.assessment_id = ss.assessment_id + and a.item_id = :assessment_id + and ss.subject_id = :viewing_user_id + + order by creation_datetime desc + + limit 1 + }] + + db_dml set_assessment_subject { + update as_sessions set subject_id = :user_id - where session_id = (select ss.session_id - - from (select a.* - from as_assessmentsi a, - cr_items i - where a.assessment_id = i.latest_revision) a, - as_sessions ss - - where a.assessment_id = ss.assessment_id - and a.item_id = :assessment_id - and ss.subject_id = :viewing_user_id - - order by creation_datetime desc - - limit 1) + where session_id = :session_id } } +# Create a mapping for the application rel_id and the assessment +# session +if { [exists_and_not_null session_id] } { + db_dml map_application_to_assessment { + insert into dotlrn_ecommerce_application_assessment_map + values (:rel_id, :session_id) + } +} + ad_returnredirect $return_url \ No newline at end of file Index: openacs-4/packages/dotlrn-ecommerce/www/ecommerce/application-request.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-ecommerce/www/ecommerce/application-request.tcl,v diff -u -r1.17 -r1.18 --- openacs-4/packages/dotlrn-ecommerce/www/ecommerce/application-request.tcl 6 Sep 2005 04:48:17 -0000 1.17 +++ openacs-4/packages/dotlrn-ecommerce/www/ecommerce/application-request.tcl 6 Sep 2005 05:25:38 -0000 1.18 @@ -155,6 +155,23 @@ if { [empty_string_p $assessment_id] || $type == "full" } { ad_returnredirect $next_url } else { - set return_url [export_vars -base "[ad_conn package_url]ecommerce/application-request-2" { user_id {return_url $next_url} }] - ad_returnredirect [export_vars -base "[apm_package_url_from_id [parameter::get -parameter AssessmentPackage]]assessment" { assessment_id return_url }] + # Start a new session + as::assessment::data -assessment_id $assessment_id + + # This shouldn't fail and the assessment must exist, if for some + # reason it doesn't, the redirects bellow shall not include the + # session_id and not error out, a new session will be created by + # the assessment code + if { [info exists assessment_data(assessment_id)] } { + set assessment_rev_id $assessment_data(assessment_rev_id) + + set package_id [parameter::get -parameter AssessmentPackage] + set folder_id [db_string get_folder_id "select folder_id from cr_folders where package_id=:package_id"] + + set session_item_id [content::item::new -parent_id $folder_id -content_type {as_sessions} -name "$user_id-$assessment_rev_id-[as::item::generate_unique_name]" -title "$user_id-$assessment_rev_id-[as::item::generate_unique_name]" ] + set session_id [content::revision::new -item_id $session_item_id -content_type {as_sessions} -title "$user_id-$assessment_rev_id-[as::item::generate_unique_name]" -attributes [list [list assessment_rev_id $assessment_rev_id] [list subject_id $user_id] [list staff_id ""] [list target_datetime ""] [list creation_datetime ""] [list first_mod_datetime ""] [list last_mod_datetime ""] [list completed_datetime ""] [list percent_score ""] [list consent_timestamp ""] ] ] + } + + set return_url [export_vars -base "[ad_conn package_url]ecommerce/application-request-2" { user_id {return_url $next_url} rel_id session_id }] + ad_returnredirect [export_vars -base "[apm_package_url_from_id [parameter::get -parameter AssessmentPackage]]assessment" { assessment_id return_url session_id }] }