Index: openacs-4/packages/dotlrn-ecommerce/www/application-bulk-approve.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-ecommerce/www/application-bulk-approve.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/dotlrn-ecommerce/www/application-bulk-approve.tcl 23 Jan 2006 08:04:42 -0000 1.3 +++ openacs-4/packages/dotlrn-ecommerce/www/application-bulk-approve.tcl 17 Oct 2006 23:19:00 -0000 1.4 @@ -12,14 +12,22 @@ {rel_id:multiple {}} return_url __confirmed_p:optional - + {send_email_p 1} + submit2:optional {filter_community_id ""} {filter_member_state:multiple {{needs approval} {application sent}}} } -properties { } -validate { } -errors { } +#If we come from a "Submit2" command, we must not send the emails. +if { [exists_and_equal submit2 "[_ dotlrn-ecommerce.Approve_no_email]"] } { + set send_email_p 0 +} + + + # Properly check for permissions as non-sw-admin instructors can # access the applications list and perform operations on their # specific classes @@ -93,7 +101,8 @@ } ad_form -extend -name confirm -form { - {approve:text(submit) {label "[_ dotlrn-ecommerce.Approve]"}} + {submit1:text(submit) {label "[_ dotlrn-ecommerce.Approve]"}} + {submit2:text(submit) {label "[_ dotlrn-ecommerce.Approve_no_email]"}} } -on_submit { db_foreach applications_to_approve [subst { @@ -106,30 +115,32 @@ and (case when :filter_community_id is null then member_state != 'request approval' else r.community_id = :filter_community_id end) }] { - if {$email_reg_info_to == "participant"} { - set email_user_id $user_id - } else { - set email_user_id $patron_id - } - - if { "request approval" == $member_state } { - array set vars [lindex [callback dotlrn::member_email_var_list -community_id $filter_community_id -to_user $email_user_id -type prereq] 0] - set email_vars [lang::message::get_embedded_vars $reason] - foreach var [concat $email_vars] { - if {![info exists vars($var)]} { - set vars($var) "" - } + #Only send the emails if appropriate + if {$send_email_p == 1} { + if {$email_reg_info_to == "participant"} { + set email_user_id $user_id + } else { + set email_user_id $patron_id } - set var_list [array get vars] - set reason "[lang::message::format $reason $var_list]" - - dotlrn_community::send_member_email -community_id $community_id -to_user $email_user_id -type "prereq approval" -override_email $reason -override_subject $subject - } else { - set email_type [ad_decode $member_state "needs approval" "waitinglist approved" "application sent" "on approval" "waitinglist approved"] - - dotlrn_community::send_member_email -community_id $community_id -to_user $email_user_id -type $email_type - } - + + if { "request approval" == $member_state } { + array set vars [lindex [callback dotlrn::member_email_var_list -community_id $filter_community_id -to_user $email_user_id -type prereq] 0] + set email_vars [lang::message::get_embedded_vars $reason] + foreach var [concat $email_vars] { + if {![info exists vars($var)]} { + set vars($var) "" + } + } + set var_list [array get vars] + set reason "[lang::message::format $reason $var_list]" + + dotlrn_community::send_member_email -community_id $community_id -to_user $email_user_id -type "prereq approval" -override_email $reason -override_subject $subject + } else { + set email_type [ad_decode $member_state "needs approval" "waitinglist approved" "application sent" "on approval" "waitinglist approved"] + + dotlrn_community::send_member_email -community_id $community_id -to_user $email_user_id -type $email_type + } + } set price [dotlrn_ecommerce::section::price $section_id] # Approval on free registration gets the user registered immediately Index: openacs-4/packages/dotlrn-ecommerce/www/application-reject.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-ecommerce/www/application-reject.tcl,v diff -u -r1.21 -r1.22 --- openacs-4/packages/dotlrn-ecommerce/www/application-reject.tcl 4 Apr 2006 13:33:30 -0000 1.21 +++ openacs-4/packages/dotlrn-ecommerce/www/application-reject.tcl 17 Oct 2006 23:19:00 -0000 1.22 @@ -2,8 +2,8 @@ ad_page_contract { + Reject application and maybe send rejection email - @author Roel Canicula (roelmc@pldtdsl.net) @creation-date 2005-07-01 @arch-tag: 93f47ba6-c04e-419a-bcd6-60bb95553236 @@ -92,12 +92,12 @@ } set context [list [list applications "[_ dotlrn-ecommerce.Pending_applications]"] $title] ad_form \ + -export { type return_url } \ -name email_form \ -export { return_url } \ -form { - {user_id:text(hidden)} + {user_id:text(hidden)} {community_id:text(hidden)} - {type:text(hidden)} {subject:text {html {size 60}}} {reason:text(textarea),optional {label "[_ dotlrn-ecommerce.Reason]"} {html {rows 10 cols 60}}} } Index: openacs-4/packages/dotlrn-ecommerce/www/applications-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-ecommerce/www/applications-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/dotlrn-ecommerce/www/applications-postgresql.xql 17 Oct 2006 23:19:00 -0000 1.1 @@ -0,0 +1,134 @@ +<?xml version="1.0"?> + +<queryset> + <rdbms><type>postgresql</type><version>7.1</version></rdbms> + + <fullquery name="assessment_revision"> + <querytext> + select a.title, a.assessment_id as section_assessment_rev_id + from dotlrn_ecommerce_section s, dotlrn_catalogi c, as_assessmentsi a, cr_items ci, cr_items ai + where s.course_id = c.item_id + and c.assessment_id = a.item_id + and c.course_id = ci.latest_revision + and a.assessment_id = ai.latest_revision + and s.section_id = :section_id + </querytext> + </fullquery> + + <fullquery name="get_filter_assessments"> + <querytext> + select distinct a.title, a.revision_id as assessment_id from dotlrn_catalog c, cr_items i, as_assessmentsx a where i.item_id=c.assessment_id and i.latest_revision=a.revision_id + </querytext> + </fullquery> + + <fullquery name="applications_pagination"> + <querytext> + select r.rel_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) + left join (select m.*, s.completed_datetime + from dotlrn_ecommerce_application_assessment_map m, as_sessions s + where m.session_id = s.session_id + and m.session_id in (select max(session_id) + from dotlrn_ecommerce_application_assessment_map + group by rel_id)) m + on (r.rel_id = m.rel_id), + dotlrn_ecommerce_section s + left join ec_products p + on (s.product_id = p.product_id), + dotlrn_catalog t, + cr_items i, + acs_objects o + + where r.community_id = s.community_id + and s.course_id = i.item_id + and t.course_id = i.live_revision + and r.rel_id = o.object_id + + $member_state_clause + $user_clause + $section_clause + [template::list::filter_where_clauses -and -name applications] + [template::list::orderby_clause -name applications -orderby] + </querytext> + </fullquery> + + <fullquery name="applications"> + <querytext> + 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 * + from dotlrn_member_rels_full rr, + acs_objects o + where rr.rel_id = o.object_id + 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, m.session_id, m.completed_datetime + + 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) + left join (select m.*, s.completed_datetime + from dotlrn_ecommerce_application_assessment_map m, as_sessions s + where m.session_id = s.session_id + and m.session_id in (select max(session_id) + from dotlrn_ecommerce_application_assessment_map + group by rel_id)) m + on (r.rel_id = m.rel_id), + dotlrn_ecommerce_section s + left join ec_products p + on (s.product_id = p.product_id), + dotlrn_catalogi t, + cr_items i, + acs_objects o + + where r.community_id = s.community_id + and s.course_id = i.item_id + and t.course_id = i.live_revision + and r.rel_id = o.object_id + + $member_state_clause + $user_clause + $section_clause + $page_clause + [template::list::filter_where_clauses -and -name applications] + [template::list::orderby_clause -name applications -orderby] + </querytext> + </fullquery> + + <fullquery name="get_comments"> + <querytext> + select g.comment_id, + r.content as gc_content, + r.title as gc_title, + r.mime_type as gc_mime_type, + acs_object__name(o.creation_user) as gc_author, + to_char(o.creation_date, 'YYYY-MM-DD HH24:MI:SS') as gc_creation_date_ansi + from general_comments g, + cr_revisions r, + cr_items ci, + acs_objects o + where g.object_id in (select session_id + from as_sessions + where assessment_id = (select assessment_id + from as_sessions + where session_id = :session_id) + and subject_id = :applicant_user_id) + and r.revision_id = ci.live_revision + and ci.item_id = g.comment_id + and o.object_id = g.comment_id + order by o.creation_date + </querytext> + </fullquery> + +</queryset> \ No newline at end of file Index: openacs-4/packages/dotlrn-ecommerce/www/applications.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-ecommerce/www/applications.adp,v diff -u -r1.5 -r1.6 --- openacs-4/packages/dotlrn-ecommerce/www/applications.adp 21 Jul 2006 18:25:03 -0000 1.5 +++ openacs-4/packages/dotlrn-ecommerce/www/applications.adp 17 Oct 2006 23:19:00 -0000 1.6 @@ -12,14 +12,15 @@ </script> -<listfilters style="listed-filters" name="applications"></listfilters> <listfilters-form name="applications" style="form-filters"></listfilters-form> <script type="text/javascript"> <!-- if (searchItems[document.forms.as_search.as_item_id.value] == 'section' || searchItems[document.forms.as_search.as_item_id.value] == 'assessment' || document.forms.as_search.as_item_id.selectedIndex == 0) { - document.forms.as_search.as_search.disabled = true; - document.forms.as_search.search.disabled = true; + if (typeof(document.forms.as_search.as_search) != "undefined" && typeof(document.forms.as_search.search) != "undefined" ) { + document.forms.as_search.as_search.disabled = true; + document.forms.as_search.search.disabled = true; + } } //--> </script> 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.48 -r1.49 --- openacs-4/packages/dotlrn-ecommerce/www/applications.tcl 21 Jul 2006 18:59:08 -0000 1.48 +++ openacs-4/packages/dotlrn-ecommerce/www/applications.tcl 17 Oct 2006 23:19:00 -0000 1.49 @@ -16,12 +16,15 @@ {csv_p 0} \ {as_item_id ""} \ {as_search ""} \ + {page 1} \ + {all 0} \ ] \ [as::list::params]] set user_id [ad_conn user_id] set package_id [ad_conn package_id] +permission::require_permission -object_id $package_id -privilege "admin" set admin_p [permission::permission_p -object_id $package_id -privilege "admin"] set return_url [ad_return_url] @@ -259,25 +262,17 @@ if { [exists_and_not_null section_id] } { set section_clause {and s.section_id = :section_id} - if { [db_0or1row assessment_revision { - select a.title, a.assessment_id as section_assessment_rev_id - from dotlrn_ecommerce_section s, dotlrn_catalogi c, as_assessmentsi a, cr_items ci, cr_items ai - where s.course_id = c.item_id - and c.assessment_id = a.item_id - and c.course_id = ci.latest_revision - and a.assessment_id = ai.latest_revision - and s.section_id = :section_id - }] } { - array set search_arr [as::list::filters -assessments [list [list $title $section_assessment_rev_id]]] + if { [db_0or1row assessment_revision { }] } { + array set search_arr [as::list::filters -assessments [list [list $title $section_assessment_rev_id]]] } else { - array set search_arr [list list_filters [list] assessment_search_options [list] search_js_array ""] + array set search_arr [list list_filters [list] assessment_search_options [list] search_js_array ""] } + } else { set section_clause "" # we want to get all the questions that are common to dotlrn-ecommerce # applications - set filter_assessments [db_list_of_lists get_filter_assessments " -select distinct a.title, a.revision_id as assessment_id from dotlrn_catalog c, cr_items i, as_assessmentsx a where i.item_id=c.assessment_id and i.latest_revision=a.revision_id"] + set filter_assessments [db_list_of_lists get_filter_assessments {}] array set search_arr [as::list::filters -assessments $filter_assessments] } @@ -352,44 +347,20 @@ # has_default_p 1 #} +# HAM : +# this exports the current page lappend actions \ - [_ dotlrn-ecommerce.Export] \ + "[_ dotlrn-ecommerce.Export] Page" \ [export_vars -base [ad_return_url] { {csv_p 1} }] \ - [_ dotlrn-ecommerce.Export] + "[_ dotlrn-ecommerce.Export] Page" - -template::list::create \ - -name "applications" \ - -key rel_id \ - -multirow "applications" \ - -no_data "[_ dotlrn-ecommerce.No_applications]" \ - -pass_properties { return_url } \ - -page_flush_p 1 \ - -pass_properties { admin_p return_url _type } \ - -actions $actions \ - -bulk_actions $bulk_actions \ - -bulk_action_export_vars { return_url } \ - -elements $elements \ - -filters $list_filters \ - -filter_form 1 \ - -orderby { - section_name { - label "[_ dotlrn-ecommerce.Section_1]" - orderby "lower(s.section_name)" - } - number { - label "[_ dotlrn-ecommerce.lt_Number_in_Waiting_Lis]" - orderby "lower(s.section_name), number" - } - person_name { - label "[_ dotlrn-ecommerce.Participant]" - orderby "lower(person__name(r.user_id))" - } - member_state { - label "[_ dotlrn-ecommerce.Member_Request]" - } - } - +# this exports all data +lappend actions \ + "[_ dotlrn-ecommerce.Export] All" \ + [export_vars -base [ad_return_url] { {csv_p 1} {all 1} }] \ + "[_ dotlrn-ecommerce.Export] All" + + if { $admin_p } { set user_clause "" } else { @@ -409,51 +380,85 @@ 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 target calendar_id item_type_id num_sessions } 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 * - from dotlrn_member_rels_full rr, - acs_objects o - where rr.rel_id = o.object_id - 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, m.session_id, m.completed_datetime +if { $all } { - 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) - left join (select m.*, s.completed_datetime - from dotlrn_ecommerce_application_assessment_map m, as_sessions s - where m.session_id = s.session_id - and m.session_id in (select max(session_id) - from dotlrn_ecommerce_application_assessment_map - group by rel_id)) m - on (r.rel_id = m.rel_id), - dotlrn_ecommerce_section s - left join ec_products p - on (s.product_id = p.product_id), - dotlrn_catalogi t, - cr_items i, - acs_objects o + # HAM : use this template to export all to csv + template::list::create \ + -name "applications" \ + -key rel_id \ + -multirow "applications" \ + -no_data "[_ dotlrn-ecommerce.No_applications]" \ + -pass_properties { return_url } \ + -pass_properties { admin_p return_url _type } \ + -actions $actions \ + -bulk_actions $bulk_actions \ + -page_flush_p 1 \ + -bulk_action_export_vars { return_url } \ + -elements $elements \ + -filters $list_filters \ + -filter_form 1 \ + -orderby { + section_name { + label "[_ dotlrn-ecommerce.Section_1]" + orderby "lower(s.section_name)" + } + number { + label "[_ dotlrn-ecommerce.lt_Number_in_Waiting_Lis]" + orderby "lower(s.section_name), number" + } + person_name { + label "[_ dotlrn-ecommerce.Participant]" + orderby "lower(person__name(r.user_id))" + } + member_state { + label "[_ dotlrn-ecommerce.Member_Request]" + } + } + + set page_clause "" + +} else { - where r.community_id = s.community_id - and s.course_id = t.item_id - and t.course_id = i.live_revision - and r.rel_id = o.object_id - - $member_state_clause - $user_clause - $section_clause - - [template::list::filter_where_clauses -and -name applications] - [template::list::orderby_clause -name applications -orderby] -}] { + # HAM : use this list template to display rows + # has support for paging + template::list::create \ + -name "applications" \ + -key rel_id \ + -multirow "applications" \ + -no_data "[_ dotlrn-ecommerce.No_applications]" \ + -pass_properties { return_url } \ + -pass_properties { admin_p return_url _type } \ + -actions $actions \ + -bulk_actions $bulk_actions \ + -page_size 25 \ + -page_flush_p 1 \ + -page_query_name "applications_pagination" \ + -bulk_action_export_vars { return_url } \ + -elements $elements \ + -filters $list_filters \ + -filter_form 1 \ + -orderby { + section_name { + label "[_ dotlrn-ecommerce.Section_1]" + orderby "lower(s.section_name)" + } + number { + label "[_ dotlrn-ecommerce.lt_Number_in_Waiting_Lis]" + orderby "lower(s.section_name), number" + } + person_name { + label "[_ dotlrn-ecommerce.Participant]" + orderby "lower(person__name(r.user_id))" + } + member_state { + label "[_ dotlrn-ecommerce.Member_Request]" + } + } + + set page_clause [template::list::page_where_clause -and -key r.rel_id -name applications] +} + +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 calendar_id item_type_id num_sessions } applications applications [subst { }] { set list_type [ad_decode $member_state "needs approval" full "request approval" prereq "application sent" payment full] set approve_url [export_vars -base application-approve { community_id {user_id $applicant_user_id} {type $list_type} return_url }] @@ -479,28 +484,7 @@ # get associated comment if {![empty_string_p $asm_url]} { - db_foreach get_comments { - select g.comment_id, - r.content as gc_content, - r.title as gc_title, - r.mime_type as gc_mime_type, - acs_object__name(o.creation_user) as gc_author, - to_char(o.creation_date, 'YYYY-MM-DD HH24:MI:SS') as gc_creation_date_ansi - from general_comments g, - cr_revisions r, - cr_items ci, - acs_objects o - where g.object_id in (select session_id - from as_sessions - where assessment_id = (select assessment_id - from as_sessions - where session_id = :session_id) - and subject_id = :applicant_user_id) - and r.revision_id = ci.live_revision - and ci.item_id = g.comment_id - and o.object_id = g.comment_id - order by o.creation_date - } { + db_foreach get_comments { } { if {[string equal $gc_mime_type "text/plain"]} { set html_comment [dotlrn_ecommerce::util::text_to_html -text $gc_content] } else { @@ -519,8 +503,14 @@ set calendar_id [dotlrn_calendar::get_group_calendar_id -community_id \ [db_string get_community_id "select community_id from dotlrn_ecommerce_section where section_id=:section_id" -default ""]] set item_type_id [db_string item_type_id "select item_type_id from cal_item_types where type='Session' and calendar_id = :calendar_id"] - set num_sessions [db_string num_sessions "select count(cal_item_id) from cal_items where on_which_calendar = :calendar_id and item_type_id = :item_type_id"] + set num_sessions [db_string num_sessions "select count(cal_item_id) from cal_items where on_which_calendar = :calendar_id and item_type_id = :item_type_id"] } +# HAM : +# unset section id because it seems the last section_id +# is being picked up by the paging links +if {[info exists section_id]} { + unset section_id +} # if we are CSV we need to get the assessment items # since template::list has been prepared at this point we need @@ -620,7 +610,6 @@ } - set __output {} set __cols [list] Index: openacs-4/packages/dotlrn-ecommerce/www/admin/one-section.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-ecommerce/www/admin/one-section.adp,v diff -u -r1.17 -r1.18 --- openacs-4/packages/dotlrn-ecommerce/www/admin/one-section.adp 15 Mar 2006 14:12:13 -0000 1.17 +++ openacs-4/packages/dotlrn-ecommerce/www/admin/one-section.adp 17 Oct 2006 23:19:00 -0000 1.18 @@ -45,7 +45,7 @@ </if> <if @attendance_show_p@> -<h2>#dotlrn-ecommerce.lt_Sessions_and_Attendan#</h2> +<br><h2>#dotlrn-ecommerce.lt_Sessions_and_Attendan#</h2> <include src=/packages/attendance/lib/cp-attendance community_id=@community_id@ package_id=@community_package_id@> </if>