Index: openacs-4/packages/acs-developer-support/lib/toolbar.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-developer-support/lib/toolbar.adp,v
diff -u -r1.17 -r1.18
--- openacs-4/packages/acs-developer-support/lib/toolbar.adp	10 Sep 2007 08:31:17 -0000	1.17
+++ openacs-4/packages/acs-developer-support/lib/toolbar.adp	7 Oct 2007 22:36:53 -0000	1.18
@@ -19,23 +19,23 @@
           <span>|</span></li>
           <li><a href="@oacs_shell_url@" title="Execute commands and see the result">Shell</a>
           <span>|</span></li>
-          <li><a href="/acs-admin/apm/" title="Modify/reload packages">APM</a>
+          <li><a href="@base_url@/acs-admin/apm/" title="Modify/reload packages">APM</a>
           <span>|</span></li>
-          <li><a href="/admin/site-map/" title="Manage your package instances">Site&nbsp;Map</a>
+          <li><a href="@base_url@/admin/site-map/" title="Manage your package instances">Site&nbsp;Map</a>
           <span>|</span></li>
-          <li><a href="/acs-admin/apm/?reload_links_p=1" title="Scan for changed library files">Changed</a>
+          <li><a href="@base_url@/acs-admin/apm/?reload_links_p=1" title="Scan for changed library files">Changed</a>
           <span>|</span></li>
           <li><a href="@flush_url@" title="Flush entire util_memoize cache">Flush</a>
           <span>|</span></li>
           <li><a href="@auto_test_url@" title="Automated Testing Home">Test</a>
           <span>|</span></li>
-          <li><a href="/acs-admin/users/" title="Add/edit/become users">Users</a>
+          <li><a href="@base_url@/acs-admin/users/" title="Add/edit/become users">Users</a>
           <span>|</span></li>
-          <li><a href="/acs-lang/admin/" title="Add/edit message keys">I18n</a>
+          <li><a href="@base_url@/acs-lang/admin/" title="Add/edit message keys">I18n</a>
           <span>|</span></li>
-          <li><a href="/doc/" title="View system documentation">Docs</a>
+          <li><a href="@base_url@/doc/" title="View system documentation">Docs</a>
           <span>|</span></li>
-          <li><a href="/api-doc/" title="View/search OpenACS Tcl API documentation">API&nbsp;doc</a>
+          <li><a href="@base_url@/api-doc/" title="View/search OpenACS Tcl API documentation">API&nbsp;doc</a>
           <if @rm_url@ ne ""><span>|</span></li>
 	  <li><a href="@rm_url@" title="View requests in the request monitor">Requests</a></li>
 	  </if><else>
@@ -45,7 +45,7 @@
       </td>
 
       <td align="right" id="developer-search">
-        <form action="/api-doc/proc-search">
+        <form action="@base_url@/api-doc/proc-search">
           <input type="hidden" name="search_type" value="All+matches"/>
           <input type="hidden" name="name_weight" value="5"/>
           <input type="hidden" name="param_weight" value="3"/>
Index: openacs-4/packages/acs-developer-support/lib/toolbar.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-developer-support/lib/toolbar.tcl,v
diff -u -r1.10 -r1.11
--- openacs-4/packages/acs-developer-support/lib/toolbar.tcl	5 Oct 2007 12:02:38 -0000	1.10
+++ openacs-4/packages/acs-developer-support/lib/toolbar.tcl	7 Oct 2007 22:36:53 -0000	1.11
@@ -8,6 +8,7 @@
 if { $show_p } {
     set ds_url [ds_support_url]
 
+    set base_url [ad_url]
     set num_comments [llength [ds_get_comments]]
 
     multirow create ds_buttons label title toggle_url state
@@ -34,7 +35,7 @@
 
     multirow append ds_buttons TRN \
         "Toggle translation mode" \
-        [export_vars -base "/acs-lang/admin/translator-mode-toggle" { { return_url [ad_return_url] } }] \
+        [export_vars -base "[ad_url]/acs-lang/admin/translator-mode-toggle" { { return_url [ad_return_url] } }] \
         [ad_decode [lang::util::translator_mode_p] 1 "on" "off"]
 
     multirow append ds_buttons ADP \
@@ -61,7 +62,7 @@
     set db_num_cmds [lindex $db_info 0]
     set db_num_ms [lc_numeric [lindex $db_info 1]]
 
-    set flush_url [export_vars -base "/acs-admin/cache/flush-cache" { { suffix util_memoize } { return_url [ad_return_url] } }]
+    set flush_url [export_vars -base "[ad_url]/acs-admin/cache/flush-cache" { { suffix util_memoize } { return_url [ad_return_url] } }]
 
     if { [empty_string_p $page_ms] } {
         set request_info_label "Request info"
@@ -99,7 +100,7 @@
 
 set rm_package_id [apm_package_id_from_key xotcl-request-monitor]
 if {$rm_package_id > 0} {
-    set rm_url [apm_package_url_from_id $rm_package_id]
+    set rm_url "${base_url}[apm_package_url_from_id $rm_package_id]"
 } else {
     set rm_url ""
 }
Index: openacs-4/packages/acs-developer-support/tcl/acs-developer-support-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/acs-developer-support/tcl/acs-developer-support-procs.tcl,v
diff -u -r1.45 -r1.46
--- openacs-4/packages/acs-developer-support/tcl/acs-developer-support-procs.tcl	8 Aug 2006 21:26:12 -0000	1.45
+++ openacs-4/packages/acs-developer-support/tcl/acs-developer-support-procs.tcl	7 Oct 2007 22:36:53 -0000	1.46
@@ -155,7 +155,7 @@
      @return A link to the first instance of the developer-support information available in the site node, \
              the empty_string if none are available.
  } {
-     return [apm_package_url_from_key "acs-developer-support"]
+     return "[ad_url][apm_package_url_from_key "acs-developer-support"]"
  }
 
  ad_proc ds_link {} { 
Index: openacs-4/packages/assessment/lib/assessment.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/lib/assessment.tcl,v
diff -u -r1.19 -r1.20
--- openacs-4/packages/assessment/lib/assessment.tcl	15 May 2007 20:14:15 -0000	1.19
+++ openacs-4/packages/assessment/lib/assessment.tcl	7 Oct 2007 22:36:53 -0000	1.20
@@ -1,5 +1,5 @@
 ad_page_contract {
-e
+
     This page allows to display an assessment with sections and items
 
     @author Eduardo PĂ©rez Ureta (eperez@it.uc3m.es)
@@ -34,7 +34,6 @@
 if { [info exists return_url] } {
     
     set url $return_url
-#    ns_log notice "$return_url"
 } 
 
 set return_url "$url"
@@ -66,10 +65,11 @@
 
 db_transaction {
     if {[empty_string_p $session_id]} {
-	
+
 	# Check if there is an unfinished session lying around
 	set session_id [db_string unfinished_session_id {}]
-	if {[empty_string_p $session_id]} {
+    }
+    	if {[empty_string_p $session_id]} {
 	    # start new session
 	    set session_id [as::session::new -assessment_id $assessment_rev_id -subject_id $user_id -package_id $assessment_package_id]
 	    if {[empty_string_p $assessment_data(consent_page)]} {
@@ -80,27 +80,25 @@
 	    }
 	} else {
 	    # pick up old session
-	    db_1row unfinished_section_order {}
-	    if {[empty_string_p $section_order]} {
-#		set consent_url [export_vars -base assessment-consent {assessment_id session_id password return_url next_asm single_section_id}]
-	    } else {
-		db_1row unfinished_section_id {}
-		db_1row unfinished_item_order {}
-		if {[empty_string_p $item_order]} {
-		    db_1row unfinished_last_item {}
-		}
-		incr section_order -1
-		if {$item_order eq ""} {
-		    set item_order 0
+	    if {$section_order eq ""} {
+		db_1row unfinished_section_order {}
+		if {[empty_string_p $section_order]} {
+		    #		set consent_url [export_vars -base assessment-consent {assessment_id session_id password return_url next_asm single_section_id}]
 		} else {
-		    incr item_order -1
+		    db_1row unfinished_section_id {}
+		    db_1row unfinished_item_order {}
+		if {![empty_string_p $item_order]} {
+		    incr section_order -1
+		    if {$item_order eq ""} {
+			set item_order 0
+		    } else {
+			incr item_order -1
+		    }		    
 		}
+		}
+
 	    }
 	}
-    } else {
-	# set time the subject initiated the assessment, if not already done
-	db_dml session_start {}
-    }
 
     if {![info exists consent_url]} {
 	db_1row session_time {}
@@ -149,7 +147,6 @@
 	}
 
 	as::section_data::new -section_id $section_id -session_id $session_id -subject_id $user_id -package_id $assessment_package_id
-#	ns_log notice "Assessment section_id='${section_id}' session_id='${session_id}' assessnent='${assessment_rev_id}'"
 	db_1row section_data {} -column_array section
 	set display_type_id $section(display_type_id)
 	if {![empty_string_p $display_type_id]} {
@@ -192,7 +189,6 @@
 	if { ![exists_and_not_null item_order] } { set item_order 0 }
 	# add 1 because we want to compare the 1 indexed display number
 	# to the current page
-#	ns_log notice "page_display_per_page = '${page_display_per_page}'"
 	set current_page [expr {$item_order == 0 ? 0 : $item_order / $page_display_per_page + 1}]
 
 	# strip away items on previous section pages
@@ -356,17 +352,14 @@
 
     set default_value ""
     set submitted_p f
-#    ns_log notice "ASSESSMENT.TCL display(submit_answer_p)='${display(submit_answer_p)}'"
     if {$display(submit_answer_p) != "t"} {
-#	ns_log notice "ASSESSMENT.TCL NO seperate submit"
 	# no seperate submit of each item
 	if {$assessment_data(reuse_responses_p) == "t"} {
 	    set default_value [as::item_data::get -subject_id $user_id -as_item_id $as_item_id]
 	}
 	set presentation_type [as::item_form::add_item_to_form -name show_item_form -session_id $session_id -section_id $section_id -item_id $as_item_id -default_value $default_value -required_p $required_p -random_p $assessment_data(random_p)]
 	
     } else {
-#	ns_log notice "ASSESSMENT.TCL YES seperate submit"
 	# submit each item seperately
 	set default_value [as::item_data::get -subject_id $user_id -as_item_id $as_item_id -session_id $session_id]
 	if {![empty_string_p $default_value]} {
@@ -397,7 +390,6 @@
 	set on_submit "{
 	    db_transaction {
 		db_dml session_updated {}
-
 		# save answer
 		set response_item_id \$item_id
                 
@@ -477,8 +469,11 @@
 
     set on_submit "{
 	db_transaction {
-	    db_dml session_updated {}
+            \# check if we already submitted this section!
+            if {\[db_string count_submitted_session \"select count(*) from as_section_data where session_id = :session_id and section_id = :section_id and completed_datetime is not null\" -default 0\] == 0} {
+\#                ad_return_complaint 1 \"Double click detected\"
 
+	    db_dml session_updated {}
 	    # save answers
 	    foreach one_response \$item_list {
 		util_unlist \$one_response response_item_id
@@ -504,6 +499,7 @@
 
 		as::item_type_\$item_type\\::process -type_id \$item_type_id -session_id \$session_id -as_item_id \$response_item_id -section_id \$section_id -subject_id \$user_id -response \$response -max_points \$points -allow_overwrite_p \$display(back_button_p) -package_id \$assessment_package_id
 	    }
+        } 
 	    if {\$section_order != \$new_section_order} {
 		# calculate section points at end of section
 		as::section::calculate -section_id \$section_id -assessment_id \$assessment_rev_id -session_id \$session_id
@@ -520,7 +516,10 @@
     }"
 
     set after_submit "{
-	if {!\[empty_string_p \$new_section_order\]} {
+\# NOTE the code just incrementes section order so when the section order
+\# is greate than the number of items in the list of sections
+\# we know we are done and should finish the assessment
+	if {!\[empty_string_p \$new_section_order\] && \$new_section_order <= \[llength \$section_list\]} {
 	    # go to next section
             if { \$section_to != \"\"} {
                 set section_order \$section_to
@@ -529,7 +528,7 @@
             }
 	    set item_order \$new_item_order
 \#	ad_returnredirect \[export_vars -base assessment {assessment_id session_id section_order item_order password return_url next_asm section_id item_id_list:multiple single_section_id}\]
-	ad_returnredirect \[export_vars -base feedback {assessment_id session_id section_order item_order password return_url next_asm section_id item_id_list:multiple nxt_url total_pages current_page}\]
+	ad_returnredirect \[export_vars -base feedback {assessment_id session_id section_order item_order password return_url next_asm section_id item_id_list:multiple next_url total_pages current_page}\]
 	    ad_script_abort
 	} else {
 	    # calculate session points at end of session
@@ -614,5 +613,6 @@
 
 set form_is_submit [template::form::is_submission show_item_form]
 set form_is_valid [template::form::is_valid show_item_form]
+
 ad_return_template $template
 
Index: openacs-4/packages/assessment/lib/session-items.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/lib/session-items.adp,v
diff -u -r1.13 -r1.14
--- openacs-4/packages/assessment/lib/session-items.adp	15 May 2007 20:14:16 -0000	1.13
+++ openacs-4/packages/assessment/lib/session-items.adp	7 Oct 2007 22:36:53 -0000	1.14
@@ -12,7 +12,6 @@
 	    </b>
       </if>
      </if>
-
 <div class="feedback-message"><if @items.correct_p@ eq 1>
 <if @show_feedback@ eq correct or @show_feedback@ eq all><div class="right">@items.feedback_right;noquote@</div></if></if>
 	    <if @items.correct_p@ eq 0><if @show_feedback@ eq all or @show_feedback@ eq incorrect><div class="wrong">@items.feedback_wrong;noquote@</div></if></if>
@@ -87,7 +86,7 @@
 </if>
 
 <ul> <include src="/packages/assessment/lib/results-messages" session_id="@session_id@" section_id="@section_id@" as_item_id="@items.as_item_id@" &=assessment>    <if @edit_p@ eq 1 and @items.answered_p@ eq t><li><a href="results-edit?session_id=@session_id@&section_id=@section_id@&as_item_id=@items.as_item_id@">#assessment.Add_Comment#</a></li></if>
-	    <if @feedback_only_p@ ne "t" and @assessment_data.type@ ne survey and @items.result_points@ not nil and @showpoints@ eq 1><li><b>@items.result_points@ / @items.points@ #assessment.points#</b></li></if>
+	    <if @feedback_only_p@ ne "t" and @assessment_data.type@ ne survey and @items.result_points@ not nil and @showpoints@ true and @items.points@ gt 0><li><b>@items.result_points@ / @items.points@ #assessment.points#</b></li></if>
 </ul>
 <hr>
 </multiple>
Index: openacs-4/packages/assessment/lib/session-items.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/lib/session-items.tcl,v
diff -u -r1.17 -r1.18
--- openacs-4/packages/assessment/lib/session-items.tcl	15 May 2007 20:14:16 -0000	1.17
+++ openacs-4/packages/assessment/lib/session-items.tcl	7 Oct 2007 22:36:53 -0000	1.18
@@ -19,7 +19,7 @@
 
 set section_list [as::assessment::sections -assessment_id $assessment_id -session_id $session_id -sort_order_type $assessment_data(section_navigation) -random_p $assessment_data(random_p)]
 
-if {[lsearch $section_list $section_id] eq [expr {[llength $section_list]-1}]} {
+if {(![info exists next_url] || $next_url eq "") && [lsearch $section_list $section_id] eq [expr {[llength $section_list]-1}]} {
     set next_url [export_vars -base session {session_id next_url}]
 }
 
@@ -33,14 +33,15 @@
 ad_form -name session_results_$section_id -mode display -form {
     {section_id:text(hidden) {value $section_id}}
 }
-
+ad_form -name Xsession_results_$section_id -mode display -form {
+    {section_id:text(hidden) {value $section_id}}
+}
 set feedback_count 0
 db_multirow -extend { presentation_type html result_points feedback answered_p choice_orientation next_title next_pr_type num content has_feedback_p correct_p view} items session_items {} {
     set default_value [as::item_data::get -subject_id $subject_id -as_item_id $as_item_id -session_id $session_id]
     array set item [as::item::item_data -as_item_id $as_item_id]
 
-    set presentation_type [as::item_form::add_item_to_form -name session_results_$section_id -section_id $section_id -item_id $as_item_id -session_id $session_id -default_value $default_value -show_feedback $show_feedback]
-    
+    set presentation_type [as::item_form::add_item_to_form -name session_results_$section_id -section_id $section_id -item_id $as_item_id -session_id $session_id -default_value $default_value -show_feedback $show_feedback -random_p $assessment_data(random_p)]
 
     if {$presentation_type == "fitb"} {
         regsub -all -line -nocase -- {<textbox as_item_choice_id=} $title "<input name=response_to_item.${as_item_id}_" html
@@ -99,7 +100,7 @@
 
 		if { $presentation_type == "rb" } {
 		    set user_answers [lindex $user_answers 0]
-		 
+
 		    if { [lsearch $correct_answers $user_answers] == -1 } {
 			set correct_p 0
 			if {$show_feedback != "correct"} {
@@ -192,5 +193,5 @@
 	set this(next_pr_type) ""
     }
 }
-
 set showpoints [parameter::get -parameter "ShowPoints" -default 1 ]
+
Index: openacs-4/packages/assessment/lib/session-oracle.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/lib/session-oracle.xql,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/assessment/lib/session-oracle.xql	15 May 2007 20:14:16 -0000	1.2
+++ openacs-4/packages/assessment/lib/session-oracle.xql	7 Oct 2007 22:36:53 -0000	1.3
@@ -15,16 +15,16 @@
 
 <fullquery name="get_latest_session">
      <querytext>
-	select max(o.creation_date), s.session_id 
+	select * from (select max(o.creation_date), s.session_id 
         from as_sessions s, 
         acs_objects o,
         cr_revisions cr
 	where s.subject_id=:user_id
         and s.assessment_id in (select revision_id from cr_revisions where item_id= :assessment_id)
 	and o.object_id = cr.item_id
         and s.session_id = cr.revision_id
-	group by assessment_id, subject_id, session_id
-	limit 1
+	group by assessment_id, subject_id, session_id)
+	where rownum=1
     </querytext>
 </fullquery>
 
Index: openacs-4/packages/assessment/lib/session.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/lib/session.adp,v
diff -u -r1.6 -r1.7
--- openacs-4/packages/assessment/lib/session.adp	15 May 2007 20:14:16 -0000	1.6
+++ openacs-4/packages/assessment/lib/session.adp	7 Oct 2007 22:36:53 -0000	1.7
@@ -22,7 +22,7 @@
 <multiple name="sections">
 
   <fieldset style="padding:10px;margin-bottom:10px"><!-- Section FieldSet -->
-    <legend><b>@sections.title@   <if @assessment_data.survey_p@ ne t> <if @showpoints@ eq 1>(@sections.points@ / @sections.max_points@ #assessment.points#)</p></if> </if></b></legend>
+    <legend><b>@sections.title@   <if @assessment_data.survey_p@ ne t> <if @showpoints@ eq 1 and @sections.max_points@ gt 0>(@sections.points@ / @sections.max_points@ #assessment.points#)</p></if> </if></b></legend>
 
   <if @sections.max_time_to_complete@ not nil><p>(#assessment.max_time# @sections.max_time_to_complete@)</p></if>
 
@@ -40,7 +40,7 @@
 <p><include src="/packages/assessment/lib/actions-results" session_id="@session_id@"></p>
 
 <hr>
-<if @assessment_data.survey_p@ ne t and @assessment_data.show_feedback@ ne none ><b>#assessment.Total_score#:</b> @session_score@ / @assessment_score@ = @percent_score@%</if>
+<if @assessment_data.survey_p@ ne t and @assessment_data.show_feedback@ ne none and @assessment_score@ gt 0><b>#assessment.Total_score#:</b> @session_score@ / @assessment_score@ = @percent_score@%</if>
 
 <if @comments_installed_p@>
 <include src="/packages/assessment/lib/comments-chunk" object_id="@session_id@" />
Index: openacs-4/packages/assessment/lib/session.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/lib/session.tcl,v
diff -u -r1.5 -r1.6
--- openacs-4/packages/assessment/lib/session.tcl	15 May 2007 20:14:16 -0000	1.5
+++ openacs-4/packages/assessment/lib/session.tcl	7 Oct 2007 22:36:53 -0000	1.6
@@ -45,7 +45,8 @@
                  -privilege admin \
                  -party_id $user_id]
 
-set delete_url [export_vars -base asm-admin/session-delete {assessment_id subject_id {orig_session_id $session_id} {return_url [ad_return_url]}}]
+set delete_return_url [export_vars -base ../session {assessment_id}]
+set delete_url [export_vars -base asm-admin/session-delete {assessment_id subject_id {orig_session_id $session_id} {return_url $delete_return_url}}]
 
 set page_title "[_ assessment.View_Results]"
 set context_bar [ad_context_bar [list [export_vars -base sessions {assessment_id}] "[_ assessment.Show_Sessions]"] $page_title]
Index: openacs-4/packages/assessment/sql/oracle/upgrade/upgrade-0.22d3-0.22d4.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/sql/oracle/upgrade/upgrade-0.22d3-0.22d4.sql,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/assessment/sql/oracle/upgrade/upgrade-0.22d3-0.22d4.sql	15 May 2007 20:14:16 -0000	1.2
+++ openacs-4/packages/assessment/sql/oracle/upgrade/upgrade-0.22d3-0.22d4.sql	7 Oct 2007 22:36:53 -0000	1.3
@@ -297,3 +297,9 @@
 /
 show errors;
 	
+alter table as_session_items drop constraint as_sess_items_item_fk;
+alter table as_session_items drop constraint as_sess_items_section_fk;
+alter table as_session_items drop constraint as_sess_items_session_fk;
+alter table as_session_items add constraint "as_sess_items_item_fk" FOREIGN KEY (as_item_id) REFERENCES as_items(as_item_id) on delete cascade;
+alter table as_session_items add constraint "as_sess_items_section_fk" FOREIGN KEY (section_id) REFERENCES as_sections(section_id) on delete cascade;
+alter table as_session_items add constraint "as_sess_items_session_fk" FOREIGN KEY (session_id) REFERENCES as_sessions(session_id) on delete cascade;
Index: openacs-4/packages/assessment/sql/postgresql/assessment-collected-data-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/sql/postgresql/assessment-collected-data-create.sql,v
diff -u -r1.12 -r1.13
--- openacs-4/packages/assessment/sql/postgresql/assessment-collected-data-create.sql	15 May 2007 20:14:16 -0000	1.12
+++ openacs-4/packages/assessment/sql/postgresql/assessment-collected-data-create.sql	7 Oct 2007 22:36:53 -0000	1.13
@@ -199,13 +199,16 @@
 create table as_session_items (
 	session_id	integer
 			constraint as_session_items_session_fk
-			references as_sessions,
+			references as_sessions
+                        on delete cascade,
 	section_id	integer
 			constraint as_session_items_section_fk
-			references as_sections,
+			references as_sections
+                        on delete cascade,
 	as_item_id	integer
 			constraint as_session_items_item_fk
-			references as_items,
+			references as_items
+                        on delete cascade,
 	sort_order	integer,
 	constraint as_session_items_pk
 	primary key (session_id, section_id, as_item_id)
Index: openacs-4/packages/assessment/sql/postgresql/upgrade/upgrade-0.22d3-0.22d4.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/sql/postgresql/upgrade/upgrade-0.22d3-0.22d4.sql,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/assessment/sql/postgresql/upgrade/upgrade-0.22d3-0.22d4.sql	15 May 2007 20:14:16 -0000	1.2
+++ openacs-4/packages/assessment/sql/postgresql/upgrade/upgrade-0.22d3-0.22d4.sql	7 Oct 2007 22:36:54 -0000	1.3
@@ -114,3 +114,10 @@
         return del__action_id;  
 
 end;' language 'plpgsql';       
+
+alter table as_session_items drop constraint as_session_items_item_fk;
+alter table as_session_items drop constraint as_session_items_section_fk;
+alter table as_session_items drop constraint as_session_items_session_fk;
+alter table as_session_items add constraint "as_session_items_item_fk" FOREIGN KEY (as_item_id) REFERENCES as_items(as_item_id) on delete cascade;
+alter table as_session_items add constraint "as_session_items_section_fk" FOREIGN KEY (section_id) REFERENCES as_sections(section_id) on delete cascade;
+alter table as_session_items add constraint "as_session_items_session_fk" FOREIGN KEY (session_id) REFERENCES as_sessions(session_id) on delete cascade;
Index: openacs-4/packages/assessment/tcl/as-item-choice-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/tcl/as-item-choice-procs.tcl,v
diff -u -r1.8 -r1.9
--- openacs-4/packages/assessment/tcl/as-item-choice-procs.tcl	12 Jun 2006 02:49:50 -0000	1.8
+++ openacs-4/packages/assessment/tcl/as-item-choice-procs.tcl	7 Oct 2007 22:36:54 -0000	1.9
@@ -92,6 +92,7 @@
 ad_proc -public as::item_choice::copy {
     -choice_id:required
     -mc_id:required
+    {-copy_correct_answer_p "t"}
 } {
     @author Timo Hentschel (timo@timohentschel.de)
     @creation-date 2004-12-07
@@ -104,7 +105,9 @@
     # Insert as_item_choice in the CR (and as_item_choices table) getting the revision_id (as_item_choice_id)
     db_transaction {
 	db_1row choice_data {}
-
+	if {![string is true $copy_correct_answer_p]} {
+	    set correct_answer_p ""
+	}
 	set new_choice_id [new -title $title \
 			       -mc_id $mc_id \
 			       -data_type $data_type \
Index: openacs-4/packages/assessment/tcl/as-item-type-mc-procs-postgresql.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/tcl/as-item-type-mc-procs-postgresql.xql,v
diff -u -r1.3 -r1.4
--- openacs-4/packages/assessment/tcl/as-item-type-mc-procs-postgresql.xql	15 May 2007 20:14:17 -0000	1.3
+++ openacs-4/packages/assessment/tcl/as-item-type-mc-procs-postgresql.xql	7 Oct 2007 22:36:54 -0000	1.4
@@ -42,7 +42,7 @@
 <fullquery name="as::item_type_mc::render.choices">
       <querytext>
 
-	select c.choice_id, r.title, c.correct_answer_p, c.selected_p, c.fixed_position,
+	select c.choice_id, r.title, c.correct_answer_p, c.selected_p, c.fixed_position,  c.feedback_text,
 	       r2.revision_id as content_rev_id, r2.title as content_filename,
 	       i.content_type
 	from cr_revisions r, as_item_choices c
Index: openacs-4/packages/assessment/tcl/as-item-type-mc-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/tcl/as-item-type-mc-procs.tcl,v
diff -u -r1.22 -r1.23
--- openacs-4/packages/assessment/tcl/as-item-type-mc-procs.tcl	15 May 2007 20:14:17 -0000	1.22
+++ openacs-4/packages/assessment/tcl/as-item-type-mc-procs.tcl	7 Oct 2007 22:36:54 -0000	1.23
@@ -102,6 +102,8 @@
 
 ad_proc -public as::item_type_mc::copy {
     -type_id:required
+    {-copy_correct_answer_p "t"}
+    -new_title
 } {
     @author Timo Hentschel (timo@timohentschel.de)
     @creation-date 2004-12-07
@@ -114,7 +116,12 @@
     # Insert as_item_type_mc in the CR (and as_item_type_mc table) getting the revision_id (as_item_type_id)
     db_transaction {
 	db_1row item_type_data {}
-
+        if {[info exists new_title]} {
+	    set title $new_title
+	}
+	if {[string is false $copy_correct_answer_p]} {
+	    set num_correct_answers 0
+	}
 	set new_item_type_id [new -title $title \
 				  -increasing_p $increasing_p \
 				  -allow_negative_p $allow_negative_p \
@@ -123,7 +130,7 @@
 
 	set choices [db_list get_choices {}]
 	foreach choice_id $choices {
-	    set new_choice_id [as::item_choice::copy -choice_id $choice_id -mc_id $new_item_type_id]
+	    set new_choice_id [as::item_choice::copy -choice_id $choice_id -mc_id $new_item_type_id -copy_correct_answer_p $copy_correct_answer_p]
 	}
     }
 
@@ -148,7 +155,11 @@
 	array set values $default_value
 	set defaults $values(choice_answer)
     }
-
+    db_1row item_type_data {}
+    ns_log notice "
+render mc
+num_correct_answers '${num_correct_answers}'
+"
     if {![empty_string_p $session_id]} {
 	if {[empty_string_p $show_feedback] || $show_feedback == "none"} {
 	    set choice_list ""
@@ -159,15 +170,16 @@
 	} else {
 	    # incorrect correct
 	    set choice_list ""
+
 	    db_foreach get_sorted_choices_with_feedback {} {
 		set title [as::assessment::display_content -content_id $content_rev_id -filename $content_filename -content_type $content_type -title $title]
 		set pos [lsearch -exact -integer $defaults $choice_id]
-		if {$pos>-1 && $correct_answer_p == "t" && $show_feedback != "incorrect"} {
+		if {$num_correct_answers > 0 && $pos>-1 && $correct_answer_p == "t" && $show_feedback != "incorrect"} {
 		    lappend choice_list [list "$title <img src=/resources/assessment/correct.gif> <i>$feedback_text</i>" $choice_id]
-		} elseif {$pos>-1 && $correct_answer_p == "f" && $show_feedback != "correct"} {
+		} elseif {$num_correct_answers > 0 && $pos>-1 && $correct_answer_p == "f" && $show_feedback != "correct"} {
 		    lappend choice_list [list "$title <img src=/resources/assessment/wrong.gif> <i>$feedback_text</i>" $choice_id]
 		} else {		    
-		    if {$correct_answer_p == "t" && $show_feedback != "incorrect" && $show_feedback != "correct"} {		    
+		    if {$num_correct_answers > 0 && [llength $defaults] && $correct_answer_p == "t" && $show_feedback != "incorrect" && $show_feedback != "correct"} {		    
 		        lappend choice_list [list "$title <img src=/resources/assessment/correct.gif>" $choice_id]			
 		    } else {
 		        lappend choice_list [list $title $choice_id]
@@ -181,7 +193,6 @@
 	}
     }
 
-    db_1row item_type_data {}
 
     set display_choices [list]
     set correct_choices [list]
@@ -190,7 +201,24 @@
     db_foreach choices {} {
 	incr total
 	set title [as::assessment::display_content -content_id $content_rev_id -filename $content_filename -content_type $content_type -title $title]
-	lappend display_choices [list $title $choice_id]
+	if {$show_feedback ne "" && $show_feedback ne "none"} {
+		set pos [lsearch -exact -integer $defaults $choice_id]
+	    if {$pos > -1 && $correct_answer_p == "t" && $show_feedback != "incorrect"} {
+		lappend display_choices [list "$title <img src=/resources/assessment/correct.gif> <i>$feedback_text</i>" $choice_id]
+	    } elseif {$pos>-1 && $correct_answer_p == "f" && $show_feedback != "correct"} {
+		lappend display_choices [list "$title <img src=/resources/assessment/wrong.gif> <i>$feedback_text</i>" $choice_id]
+	    } else {		    
+		if {$correct_answer_p == "t" && $show_feedback != "incorrect" && $show_feedback != "correct"} {		    
+		    lappend display_choices [list "$title <img src=/resources/assessment/correct.gif>" $choice_id]			
+		} else {
+		    lappend display_choices [list $title $choice_id]
+		}	
+	    }
+	} else {
+	    lappend display_choices [list $title $choice_id]
+	}
+    
+#	lappend display_choices [list $title $choice_id]
 	if {$selected_p == "t"} {
 	    lappend defaults $choice_id
 	}
@@ -237,7 +265,6 @@
 	set display_choices [concat $display_choices [lrange $wrong_choices 0 [expr $num_answers - [llength $display_choices] -1]]]
 	set display_choices [util::randomize_list $display_choices]
     }
-    
     # now add fixed positions in result list
     if {[array exists fixed_pos]} {
 	set max_pos [expr $num_answers + [array size fixed_pos]]
@@ -466,6 +493,9 @@
     
     if {![as::item::get_item_type_info -as_item_id $as_item_id] \
             || $item_type_info(object_type) != "as_item_type_mc"} {
+	# always set mc title to empty on new mc question
+	# we ask for a title for the mc answer set seperately if
+	# required
         set mc_id [as::item_type_mc::new \
                        -title $title \
                        -increasing_p $increasing_p \
@@ -483,7 +513,6 @@
         }
     } else {
         # old mc item type existing
-        set as_item_id [as::item::new_revision -as_item_id $as_item_id]
         set mc_id [as::item_type_mc::edit \
                        -as_item_type_id $as_item_type_id \
                        -title $title \
@@ -494,7 +523,7 @@
         
         as::item::update_item_type -item_type_id $mc_id -as_item_id $as_item_id
     }
-    ns_log notice "item-add inserting choices!! as_item_id = '${as_item_id}' mc_id='${mc_id}'"
+
     set count 0
     foreach i [lsort -integer [array names choice]] {
         if {![empty_string_p $choice($i)]} {
@@ -509,7 +538,7 @@
                                -correct_answer_p [ad_decode [info exists correct($i)] 0 f t] \
                                -sort_order $count \
                                -percent_score ""]
-            ns_log notice "choice $count added for choice $i $choice($i) choice_id=${choice_id}"
+
         }
     }
     #FIXME add a select one/select all that apply option
@@ -572,7 +601,7 @@
                      [list delete.$id:text(submit) {label "Delete"}]]
         }
          ad_form -extend -name $form_id  -form [list [list choice.$id:text,optional,nospell {label "[_ assessment.Choice] $id"} {html {style {width: 60%;} maxlength 1000}} {value "$value"} ]]
-ns_log notice "--- $id ---"        
+
         if {[info exists correct($id)]} {
             ad_form -extend -name $form_id -form [list [list correct.$id:text(checkbox),optional {label "[_ assessment.Correct_Answer_Choice] $id"} {options $correct_options} {values t} ]]
         } else {
Index: openacs-4/packages/assessment/tcl/as-list-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/tcl/as-list-procs.tcl,v
diff -u -r1.4 -r1.5
--- openacs-4/packages/assessment/tcl/as-list-procs.tcl	26 Sep 2006 00:22:45 -0000	1.4
+++ openacs-4/packages/assessment/tcl/as-list-procs.tcl	7 Oct 2007 22:36:54 -0000	1.5
@@ -65,15 +65,15 @@
 	    set option_section_title [lindex $section 0]
 	    set option_section_id [lindex $section 1]
 	    db_foreach items {
-		select ci.item_id as option_item_id, cr.title as option_item_title, cr.revision_id as option_revision_id
+		select ci.item_id as option_item_id, cr.title as option_item_title, ir.revision_id as option_revision_id
 		
-		from as_items i, cr_revisions cr, cr_items ci, as_item_section_map ism, cr_revisions asr
+		from as_items i, cr_revisions cr, cr_items ci, as_item_section_map ism, cr_revisions ir
 		
 		where ci.item_id = cr.item_id
+                and ir.revision_id = ci.latest_revision
 		and cr.revision_id = i.as_item_id
 		and i.as_item_id = ism.as_item_id
 		and ism.section_id = :option_section_id
-		and asr.revision_id = i.as_item_id
 		
 		order by ism.sort_order
 	    } {
Index: openacs-4/packages/assessment/www/instructions.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/instructions.adp,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/assessment/www/instructions.adp	15 May 2007 20:14:17 -0000	1.2
+++ openacs-4/packages/assessment/www/instructions.adp	7 Oct 2007 22:36:54 -0000	1.3
@@ -6,7 +6,7 @@
   @assessment_data.instructions;noquote@
 </p>
 <p>
-  <if @assessment_data.number_tries@ eq "" or @completed_session_count@ lt @assessment_data.number_tries@>
+  <if @assessment_data.number_tries@ eq "" or @assessment_data.number_tries@ lt 1 or @completed_session_count@ lt @assessment_data.number_tries@>
   <if @unfinished_session_id@ not nil>
     #assessment.Resume_Assessment_Title#
   </if> 
Index: openacs-4/packages/assessment/www/instructions.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/instructions.xql,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/assessment/www/instructions.xql	15 May 2007 20:14:17 -0000	1.2
+++ openacs-4/packages/assessment/www/instructions.xql	7 Oct 2007 22:36:54 -0000	1.3
@@ -9,6 +9,7 @@
         where item_id = :assessment_id
         and assessment_id = revision_id
         and subject_id = :user_id
+        and completed_datetime is not null
     </querytext>
 </fullquery>
 
Index: openacs-4/packages/assessment/www/asm-admin/bulk-mail.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/bulk-mail.tcl,v
diff -u -r1.4 -r1.5
--- openacs-4/packages/assessment/www/asm-admin/bulk-mail.tcl	26 Sep 2006 00:22:46 -0000	1.4
+++ openacs-4/packages/assessment/www/asm-admin/bulk-mail.tcl	7 Oct 2007 22:36:54 -0000	1.5
@@ -51,7 +51,7 @@
     -label [_ assessment.Message] \
     -datatype text \
     -widget textarea \
-    -html {rows 10 cols 80 wrap soft}
+    -html {rows 10 cols 80}
 
 
 element create spam_message format \
Index: openacs-4/packages/assessment/www/asm-admin/item-add.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/item-add.adp,v
diff -u -r1.3 -r1.4
--- openacs-4/packages/assessment/www/asm-admin/item-add.adp	15 May 2007 20:14:17 -0000	1.3
+++ openacs-4/packages/assessment/www/asm-admin/item-add.adp	7 Oct 2007 22:36:54 -0000	1.4
@@ -216,11 +216,13 @@
                 @formgroup.widget;noquote@
            </formgroup>
 &nbsp;&nbsp;<formwidget id="choice.@choice_elements.id@"><br />
-</multiple>
-            </p>
-
-      <br>
-<formwidget id="add_another_choice">
+</multiple></p>
+<formwidget id="save_answer_set"> <label for="save_answer_set">#assessment.Save_this_set_of_answers_for_reuse_later#</label><br />
+<formwidget id="formbutton_add_another_choice"><br />
+<if @choice_sets@ not nil><p>Or use choices from an existing question<br />
+<formwidget id="add_existing_mc_id">
+</p></if>
+<br />
 </fieldset>        
 </div>
 <div>
Index: openacs-4/packages/assessment/www/asm-admin/item-add.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/item-add.tcl,v
diff -u -r1.14 -r1.15
--- openacs-4/packages/assessment/www/asm-admin/item-add.tcl	15 May 2007 20:14:17 -0000	1.14
+++ openacs-4/packages/assessment/www/asm-admin/item-add.tcl	7 Oct 2007 22:36:54 -0000	1.15
@@ -21,6 +21,7 @@
 # Get the assessment data
 as::assessment::data -assessment_id $assessment_id
 
+set folder_id [as::assessment::folder_id -package_id $package_id]
 if {![info exists assessment_data(assessment_id)]} {
     ad_return_complaint 1 "[_ assessment.Requested_assess_does]"
     ad_script_abort
@@ -39,12 +40,7 @@
 #}
 
 set item_types [as_item_type::get_item_types]
-ns_log notice "
-DB --------------------------------------------------------------------------------
-DB DAVE debugging /var/lib/aolserver/openacs-5-3/packages/assessment/www/asm-admin/item-add.tcl
-DB --------------------------------------------------------------------------------
-DB item_types = '${item_types}'
-DB --------------------------------------------------------------------------------"
+
 ad_form -name item-add -action item-add -export { assessment_id section_id after type } -html {enctype multipart/form-data} -form {
     {as_item_id:key}
     {question_text:richtext,nospell {label "[_ assessment.item_Question]"} {html {rows 12 cols 80 style {width: 99%}}} {help_text "[_ assessment.item_Question_help]"}}
@@ -116,12 +112,24 @@
 ##############################################################################
 # Multiple Choice Section
 ##############################################################################
+set choice_sets [db_list_of_lists existing_choice_sets {}]
+if {[llength $choice_sets]} {
+    set choice_sets [concat [list [list "--" ""]] $choice_sets]
+    ad_form -extend -name item-add -form {
+	{add_existing_mc_id:text(select),optional {label "[_ assessment.Choice_Sets]"} {options $choice_sets} {help_text "[_ assessment.Choice_Sets_help]"}}
+    }
+} else {
+    ad_form -extend -name item-add -form {
+	{add_existing_mc_id:text(hidden),optional}
+    }
+}
 
 ad_form -extend -name item-add -form {
-    {add_another_choice:text(submit) {label "[_ assessment.Add_another_choice]"}}
+    {save_answer_set:text(checkbox),optional {label "[_ assessment.Save_this_set_of_answers_for_reuse_later]"} {options {{"" t}}}}
+    {formbutton_add_another_choice:text(submit) {label "[_ assessment.Add_another_choice]"}}
 }
 if {[template::form::is_submission item-add] \
-	&& [template::element::get_value item-add add_another_choice] \
+	&& [template::element::get_value item-add formbutton_add_another_choice] \
 	eq [_ assessment.Add_another_choice]} {
     set num_choices [element::get_value item-add num_choices]
     incr num_choices
@@ -156,7 +164,7 @@
 }
 
 ad_form -extend -name item-add -validate {
-    {item_type {$item_type ne "mc" || [array size choice] > [llength [lsearch -all -exact [array get choice] ""]]} "Please enter at least one choice for multiple choice question."}
+    {item_type {$item_type ne "mc" || [exists_and_not_null add_existing_mc_id] || [array size choice] > [llength [lsearch -all -exact [array get choice] ""]]} "Please enter at least one choice for multiple choice question."}
 }
 ad_form -extend -name item-add -new_request {
     set name ""
@@ -177,7 +185,6 @@
 	set points 0
     }
 
-		    
     if {![exists_and_not_null formbutton_add_another_choice]} {
     # map display types to data types
     switch -exact $item_type {
@@ -263,24 +270,42 @@
 		return
 	    }
 
-	    set folder_id [as::assessment::folder_id -package_id $package_id]
 	    set content_rev_id [cr_import_content -title $filename $folder_id $tmp_filename $n_bytes $file_mimetype [as::item::generate_unique_name]]
 	    as::item_rels::new -item_rev_id $as_item_id -target_rev_id $content_rev_id -type as_item_content_rel
 	}
         # check question type
 	set title [string range $question_text 0 999]
         switch -exact $item_type {
             mc {
-                as::item_type_mc::add_to_assessment \
-                    -assessment_id $assessment_id \
-                    -section_id $section_id \
-                    -as_item_id $as_item_id \
-                    -choices [array get choice] \
-                    -correct_choices [array get correct] \
-                    -after $after \
-                    -title $title\
-                    -display_type $display_type
-            }
+		# title for MC is the name of a saved answer set
+		# always set to empty on a new question and
+		# ask for the title seperately in save-answer-set page
+                set new_mc_id [as::item_type_mc::add_to_assessment \
+				   -assessment_id $assessment_id \
+				   -section_id $section_id \
+				   -as_item_id $as_item_id \
+				   -choices [array get choice] \
+				   -correct_choices [array get correct] \
+				   -after $after \
+				   -title "" \
+				   -display_type $display_type]
+
+		if {[info exists add_existing_mc_id] && $add_existing_mc_id ne ""} {
+		    set add_existing_mc_id [as::item_type_mc::copy -type_id $add_existing_mc_id -copy_correct_answer_p "f" -new_title ""]
+		    if {![db_0or1row item_type {}] || $object_type != "as_item_type_mc"} {
+			if {![info exists object_type]} {
+			    # first item type mapped
+			    as::item_rels::new -item_rev_id $as_item_id -target_rev_id $add_existing_mc_id -type as_item_type_rel
+			} else {
+			    # old item type existing
+			    db_dml update_item_type {}
+			}
+		    } else {
+			# old mc item type existing
+			db_dml update_item_type {}
+		    }
+		}
+	    }
             oq {
                 as::item_type_oq::add_to_assessment \
                     -assessment_id $assessment_id \
@@ -311,13 +336,18 @@
 } -after_submit {
     if {![exists_and_not_null formbutton_add_another_question] \
 	    && ![exists_and_not_null formbutton_add_another_choice]} {
-	ad_returnredirect "[export_vars -base questions {assessment_id}]\&#Q$as_item_id"
-	
-	ad_script_abort
+	set return_url "[export_vars -base questions {assessment_id}]\&#Q$as_item_id"
     } elseif {[exists_and_not_null formbutton_add_another_question]} {
 	set after [expr {$after + 1}]
-	ad_returnredirect "[export_vars -base item-add {after assessment_id section_id}]\#Q$as_item_id"
+	set return_url  "[export_vars -base item-add {after assessment_id section_id}]\#Q$as_item_id"
     }
+    if {[info exists return_url] && $return_url ne ""} {
+	if {[info exists save_answer_set] && $save_answer_set eq "on" && (![info exists add_existing_mc_id] || $add_existing_mc_id eq "")} {
+	    set return_url [export_vars -base save-answer-set {assessment_id as_item_id return_url {mc_id $new_mc_id}}]
+	}
+	ad_returnredirect $return_url
+	ad_script_abort	
+    }
 }
 
 
Index: openacs-4/packages/assessment/www/asm-admin/item-add.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/item-add.xql,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/assessment/www/asm-admin/item-add.xql	15 Apr 2005 17:26:46 -0000	1.2
+++ openacs-4/packages/assessment/www/asm-admin/item-add.xql	7 Oct 2007 22:36:54 -0000	1.3
@@ -30,4 +30,40 @@
       </querytext>
 </fullquery>
 
+
+<fullquery name="existing_choice_sets">
+      <querytext>
+    select distinct title, revision_id from (select substr(title,1,50) as title, revision_id 
+    from cr_items i, cr_revisions r
+    where 
+    i.parent_id = :folder_id
+    and r.title is not NULL
+    and r.revision_id = i.latest_revision
+    and i.content_type = 'as_item_type_mc') c
+    </querytext>
+</fullquery>
+
+<fullquery name="item_type">
+      <querytext>
+
+	select r.target_rev_id as as_item_type_id, o.object_type
+	from as_item_rels r, acs_objects o
+	where r.item_rev_id = :as_item_id
+	and r.rel_type = 'as_item_type_rel'
+	and o.object_id = r.target_rev_id
+
+      </querytext>
+</fullquery>
+
+<fullquery name="update_item_type">
+      <querytext>
+
+		update as_item_rels
+		set target_rev_id = :add_existing_mc_id
+		where item_rev_id = :as_item_id
+		and rel_type = 'as_item_type_rel'
+
+      </querytext>
+</fullquery>
+
 </queryset>
Index: openacs-4/packages/assessment/www/asm-admin/item-edit-general.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/item-edit-general.adp,v
diff -u -r1.3 -r1.4
--- openacs-4/packages/assessment/www/asm-admin/item-edit-general.adp	15 May 2007 20:14:18 -0000	1.3
+++ openacs-4/packages/assessment/www/asm-admin/item-edit-general.adp	7 Oct 2007 22:36:54 -0000	1.4
@@ -41,9 +41,7 @@
               
 
         </span>   
-        
-      <br/>
-        
+         
               <if @formerror.required_p@ not nil>
                 <span class="form-label-error">
               </if>
@@ -193,8 +191,28 @@
               
 
         </span>   
-      <br/>
+       <br />
+<if @item_type@ eq "mc">
+                      
+            <br /><formgroup-widget id="display_type" row=1></formgroup-widget>
+            <br /><formgroup-widget id="display_type" row=2></formgroup-widget>
 
+            <if @formerror.display_type@ not nil>
+              <span class="form-widget-error">
+            </if>
+            <else>
+              <span class="form-widget">                  
+            </else>
+                     
+            <formerror id="display_type">
+                  @formerror.data_type;noquote@
+            </formerror>
+          
+            <p class="form-help-text">
+              
+                <formhelp id="display_type">
+</if>                      
+
 <switch @item_type@>
 <case value="mc">
 <formwidget id="num_choices">
@@ -218,11 +236,15 @@
 </if>
     <br />
 </multiple>
-<formwidget id="add_another_choice">
+<formwidget id="save_answer_set"> <label for="save_answer_set">#assessment.Save_this_set_of_answers_for_reuse_later#</label><br />
+<formwidget id="add_another_choice"><br />
+<if @choice_sets@ not nil><p>#assessment.OrUseChoices#<br />
+<formwidget id="add_existing_mc_id">
+</p></if>
 </case>
 <case value="oq">
             <label for="reference_answer">
-              Reference Answer
+              #assessment.oq_Reference_Answer#
             </label>
 	<formwidget id="reference_answer">
 <p class="form-help-text">        <formhelp id="reference_answer"></p>
Index: openacs-4/packages/assessment/www/asm-admin/item-edit-general.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/item-edit-general.tcl,v
diff -u -r1.16 -r1.17
--- openacs-4/packages/assessment/www/asm-admin/item-edit-general.tcl	15 May 2007 20:14:18 -0000	1.16
+++ openacs-4/packages/assessment/www/asm-admin/item-edit-general.tcl	7 Oct 2007 22:36:54 -0000	1.17
@@ -36,21 +36,33 @@
 set boolean_options [list [list "[_ assessment.yes]" t] [list "[_ assessment.no]" f]]
 set type $assessment_data(type)
 
+ad_form -name item_edit_general -action item-edit-general -export { assessment_id section_id } -html {enctype multipart/form-data} -form {
+    {as_item_id:key}
+    {question_text:richtext,nospell {label "[_ assessment.Question]"} {html {rows 12 cols 80 style {width: 95%}}} {help_text "[_ assessment.item_Question_help]"}}
+    {required_p:text(select) {label "[_ assessment.Required]"} {options $boolean_options} {help_text "[_ assessment.item_Required_help]"}}
+}
+
 set item_type [string range [db_string get_item_type {}] end-1 end]
 set display_type [string range [db_string get_display_type {}] end-1 end]
 
+if { $item_type == "mc"  } {
+	 ad_form -extend -name item_edit_general -form {
+	    {display_type:text(radio),optional
+	    	{label "[_ assessment.singleanswermultipleanswer]"} 
+	    	{options {{"[_ assessment.item_type_mc]" "rb"} {"[_ assessment.item_type_ms]" "cb"}}}
+	    }
+    }
+} else {
+	ad_form -extend -name item_edit_general -form { 
+		{display_type:text(hidden),optional}
+	}
+}
+
 set display_types [list]
 foreach display_type [db_list display_types {}] {
     lappend display_types [list "[_ assessment.item_display_$display_type]" $display_type]
 }
 
-
-ad_form -name item_edit_general -action item-edit-general -export { assessment_id section_id } -html {enctype multipart/form-data} -form {
-    {as_item_id:key}
-    {question_text:richtext,nospell {label "[_ assessment.Question]"} {html {rows 12 cols 80 style {width: 95%}}} {help_text "[_ assessment.item_Question_help]"}}
-    {required_p:text(select) {label "[_ assessment.Required]"} {options $boolean_options} {help_text "[_ assessment.item_Required_help]"}}
-}
-
 if { $type ne "survey"} { 
     ad_form -extend -name item_edit_general -form {
         {points:integer,optional,nospell {label "[_ assessment.points_item]"} {html {size 10 maxlength 10}} {help_text "[_ assessment.points_item_help]"}}
@@ -73,22 +85,36 @@
     {field_code:text(hidden),optional}
     {validate_block:text(hidden),optional}
     {data_type:text(hidden),optional}
-    {display_type:text(hidden),optional}
     {max_time_to_complete:text(hidden),optional}
     {formbutton_ok:text(submit) {label "[_ assessment.Save_and_finish]"}}
 }
 
 
 switch -- $item_type {
     "mc" {
+	set folder_id [as::assessment::folder_id -package_id $package_id]
+	set choice_sets [list [list "--" ""]]
+db_foreach existing_choice_sets {} {
+    set set_title [string trim [regsub {\[.*?\]} [ad_html_to_text $title] {}]]
+    lappend choice_sets [list [expr {$set_title eq "" ? $section_title : $set_title}] $revision_id]
+}
+if {[llength $choice_sets]} {
     ad_form -extend -name item_edit_general -form {
+    {add_existing_mc_id:text(select),optional {label "[_ assessment.Choice_Sets]"} {options $choice_sets} {help_text "[_ assessment.Choice_Sets_help]"}}
+    }
+} else {
+    ad_form -extend -name item_edit_general -form {
+	{add_existing_mc_id:text(hidden),optional}
+    }
+}
+    ad_form -extend -name item_edit_general -form {
         {num_choices:text(hidden)}
+	{save_answer_set:text(checkbox),optional {label "[_ assessment.Save_this_set_of_answers_for_reuse_later]"} {options {{"" t}}}}
         {add_another_choice:text(submit) {label "[_ assessment.Add_another_choice]"}}
     }
-ns_log notice "Add Another = '[template::element::get_value item_edit_general add_another_choice]'"
+ns_log notice "Add Another = '[template::element::get_value item_edit_general add_another_choice]' == '[_ assessment.Add_another_choice]'"
     if {[template::form::is_submission item_edit_general] \
-            && [template::element::get_value item_edit_general add_another_choice] \
-            eq [_ assessment.Add_another_choice]} {
+            && [template::element::get_value item_edit_general add_another_choice] eq [_ assessment.Add_another_choice]} {
         set num_choices [element::get_value item_edit_general num_choices]
         incr num_choices
         element::set_value item_edit_general num_choices $num_choices
@@ -150,7 +176,10 @@
 
 
     set existing_choices [as::item_type_mc::existing_choices $as_item_id]
-
+	if {[llength $existing_choices] && ![info exists num_choices]} {
+	    set num_choices [llength $existing_choices]
+	    template::element::set_value item_edit_general num_choices $num_choices
+	}	
     if {![template::form::is_submission item_edit_general] \
             && ![info exists num_choices]} {
         set num_choices 5
@@ -206,7 +235,8 @@
     set feedback_right [template::util::richtext::create $feedback_right $mime_type]
     set feedback_wrong [template::util::richtext::create $feedback_wrong $mime_type]
     # FIXME fill in reference answer 
-
+} -on_request {
+	set display_type [string range [db_string get_display_type {}] end-1 end]
 } -on_submit {
     set category_ids [category::ad_form::get_categories -container_object_id $package_id]
     if {[empty_string_p $points]} {
@@ -290,63 +320,95 @@
                 -old_section_id $section_id \
                 -new_section_id $new_section_id \
                 -new_assessment_rev_id $new_assessment_rev_id
+                
+           ns_log notice "HAM : $old_display_type : $display_type **********"
+           if { ![string match $old_display_type $display_type] } {
+         	  as::item_display_${display_type}::set_item_display_type -assessment_id $assessment_id \
+           														 -section_id $section_id \
+           														 -as_item_id $as_item_id
+		   }
 	    
 	    set title [string range $question_text 0 999]	
 
             db_dml update_item_in_section {}
             switch -- $item_type {
                 mc {
-                    set num_answers 0
-                    set num_correct_answers 0
-                    foreach c [array names choice] {
-                        if {$choice($c) ne ""} {
-                            incr num_answers
-                        }
-                    }
-                    foreach c [array names correct] {
-                        if {$correct($c) eq "t"} {
-                            incr num_correct_answers 
-                        }
-                    }
-                    set new_item_type_id [as::item_type_mc::edit \
-                                              -as_item_type_id $as_item_type_id \
-                                              -title $title \
-                                              -increasing_p f \
-                                              -allow_negative_p f \
-                                              -num_correct_answers $num_correct_answers \
-                                              -num_answers $num_answers]
-                    db_dml update_item_type {}
-                    # edit existing choices
-                    set count 0
-                    foreach i [lsort [array names choice]] {
-                        if {[string range  $i 0 0] != "_" && ![empty_string_p $choice($i)]} {
-                            incr count
-                            set new_choice_id [as::item_choice::new_revision -choice_id $i -mc_id $new_item_type_id]
-                            set title $choice($i)
-                            set correct_answer_p [ad_decode [info exists correct($i)] 0 f t]
 
-                            db_dml update_title {}
-                            db_dml update_correct_and_sort_order {}
-                        }
-                    }
+		    if {[info exists add_existing_mc_id] && $add_existing_mc_id ne ""} {
+			set new_item_type_id [as::item_type_mc::copy -type_id $add_existing_mc_id -copy_correct_answer_p "f" -new_title ""]
+			if {![db_0or1row get_item_type {}] || $object_type != "as_item_type_mc"} {
+			    if {![info exists object_type]} {
+				# first item type mapped
+				as::item_rels::new -item_rev_id $as_item_id -target_rev_id $add_existing_mc_id -type as_item_type_rel
+			    } else {
+				# old item type existing
+				db_dml update_item_type {}
+			    }
+			} else {
+			    # old mc item type existing
+			    db_dml update_item_type {}
+			}
+		    } else {
 
-                    # add new choices
-                    foreach i [lsort [array names choice]] {
-                       
-                        if {[string range  $i 0 0] == "_" && ![empty_string_p $choice($i)]} {
-                            incr count
-                            set new_choice_id [as::item_choice::new -mc_id $new_item_type_id \
-                                                   -title $choice($i) \
-                                                   -numeric_value "" \
-                                                   -text_value "" \
-                                                   -content_value "" \
-                                                   -feedback_text "" \
-                                                   -selected_p "" \
-                                                   -correct_answer_p [ad_decode [info exists correct($i)] 0 f t] \
-                                                   -sort_order $count \
-                                                   -percent_score ""]
-                        }
-                    }
+			set num_answers 0
+			set num_correct_answers 0
+			foreach c [array names choice] {
+			    if {$choice($c) ne ""} {
+				incr num_answers
+			    }
+			}
+			foreach c [array names correct] {
+			    if {$correct($c) eq "t"} {
+				incr num_correct_answers 
+			    }
+			}
+			# set title to blank for mc answer set
+			# if they unchecked save for reuse
+			# we don't ask for a title, if they did check it
+			# we set it on save-answer-set
+			# with each revision of the mc we decide if its
+			# reusable or not
+
+			set new_item_type_id [as::item_type_mc::edit \
+						  -as_item_type_id $as_item_type_id \
+						  -title "" \
+						  -increasing_p f \
+						  -allow_negative_p f \
+						  -num_correct_answers $num_correct_answers \
+						  -num_answers $num_answers]
+			db_dml update_item_type {}
+			# edit existing choices
+			set count 0
+			foreach i [lsort [array names choice]] {
+			    if {[string range  $i 0 0] != "_" && ![empty_string_p $choice($i)]} {
+				incr count
+				set new_choice_id [as::item_choice::new_revision -choice_id $i -mc_id $new_item_type_id]
+				set title $choice($i)
+				set correct_answer_p [ad_decode [info exists correct($i)] 0 f t]
+
+				db_dml update_title {}
+				db_dml update_correct_and_sort_order {}
+			    }
+			}
+
+			# add new choices
+			foreach i [lsort [array names choice]] {
+			    
+			    if {[string range  $i 0 0] == "_" && ![empty_string_p $choice($i)]} {
+				incr count
+				set new_choice_id [as::item_choice::new -mc_id $new_item_type_id \
+						       -title $choice($i) \
+						       -numeric_value "" \
+						       -text_value "" \
+						       -content_value "" \
+						       -feedback_text "" \
+						       -selected_p "" \
+						       -correct_answer_p [ad_decode [info exists correct($i)] 0 f t] \
+						       -sort_order $count \
+						       -percent_score ""]
+			    }
+			}
+		    }
                 } 
                 "oq" {
                     set new_item_type_id [as::item_type_oq::edit \
@@ -386,7 +448,11 @@
     }
 } -after_submit {
     if {[exists_and_not_null formbutton_ok]} {
-	ad_returnredirect [export_vars -base "questions" {assessment_id section_id }]&\#${as_item_id}
+	set return_url [export_vars -base "questions" {assessment_id section_id }]&\#${as_item_id}
+	if {[info exists save_answer_set] && $save_answer_set eq "on" && (![info exists add_existing_mc_id] || $add_existing_mc_id eq "")} {
+	    set return_url [export_vars -base save-answer-set {assessment_id as_item_id return_url {mc_id $new_item_type_id}}]
+	}
+	ad_returnredirect $return_url
 	ad_script_abort
     }
 }
Index: openacs-4/packages/assessment/www/asm-admin/item-edit-general.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/item-edit-general.xql,v
diff -u -r1.5 -r1.6
--- openacs-4/packages/assessment/www/asm-admin/item-edit-general.xql	15 May 2007 20:14:18 -0000	1.5
+++ openacs-4/packages/assessment/www/asm-admin/item-edit-general.xql	7 Oct 2007 22:36:54 -0000	1.6
@@ -151,4 +151,41 @@
         select sort_order from as_item_choices where choice_id=:n
         </querytext>
 </fullquery>
+
+
+<fullquery name="existing_choice_sets_old">
+      <querytext>
+	select substring(title from 1 for 50) as title, revision_id from (select r.title, r.revision_id, case when m.target_rev_id is not null then 0 else 1 end as sort_key
+    from cr_items i, cr_revisions r
+    left join 
+    (select r1.target_rev_id from
+     as_item_section_map m1, as_item_rels r1, as_assessment_section_map m2,
+     cr_items i2, cr_items i3, cr_items i4
+     where m1.as_item_id = r1.item_rev_id and r1.rel_type = 'as_item_type_rel'
+     and m1.section_id = m2.section_id 
+     and m2.assessment_id = i2.latest_revision
+     and m1.as_item_id = i3.latest_revision
+     and m1.section_id = i4.latest_revision
+     and i2.item_id = :assessment_id) m
+    on m.target_rev_id = r.revision_id
+    where 
+    i.parent_id = :folder_id
+    and r.revision_id = i.latest_revision
+    and i.content_type like 'as_item_type_mc') q order by sort_key
+
+      </querytext>
+</fullquery>
+
+<fullquery name="existing_choice_sets">
+      <querytext>
+    select distinct title, revision_id from (select substr(title,1,50) as title, revision_id 
+    from cr_items i, cr_revisions r
+    where 
+    i.parent_id = :folder_id
+    and r.title is not NULL
+    and r.revision_id = i.latest_revision
+    and i.content_type = 'as_item_type_mc') c
+      </querytext>
+</fullquery>
+
 </queryset>
Index: openacs-4/packages/assessment/www/asm-admin/item-edit-mc.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/item-edit-mc.tcl,v
diff -u -r1.10 -r1.11
--- openacs-4/packages/assessment/www/asm-admin/item-edit-mc.tcl	15 May 2007 20:14:18 -0000	1.10
+++ openacs-4/packages/assessment/www/asm-admin/item-edit-mc.tcl	7 Oct 2007 22:36:54 -0000	1.11
@@ -42,7 +42,7 @@
 
 ad_form -name item_edit_mc -action item-edit-mc -export { assessment_id section_id num_choices } -form {
     {as_item_id:key}
-    {title:text {label "[_ assessment.Title]"} {html {size 80 maxlength 1000}} {help_text "[_ assessment.mc_Title_help]"}}
+    {title:text,optional {label "[_ assessment.Title]"} {html {size 80 maxlength 1000}} {help_text "[_ assessment.mc_Title_help]"}}
 }
 
 if {$type > 1} {
@@ -142,9 +142,9 @@
 	as::assessment::check::copy_item_checks -assessment_id \$assessment_id -section_id \$new_section_id -as_item_id \$as_item_id -new_item_id \$new_item_id
 
 	as::section::update_section_in_assessment\
-                -old_section_id $section_id \
-                -new_section_id $new_section_id \
-                -new_assessment_rev_id $new_assessment_rev_id
+                -old_section_id \$section_id \
+                -new_section_id \$new_section_id \
+                -new_assessment_rev_id \$new_assessment_rev_id
 	db_dml update_item_in_section {}
 	db_dml update_item_type {}
 
Index: openacs-4/packages/assessment/www/asm-admin/one-a.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/one-a.adp,v
diff -u -r1.18 -r1.19
--- openacs-4/packages/assessment/www/asm-admin/one-a.adp	15 May 2007 20:14:18 -0000	1.18
+++ openacs-4/packages/assessment/www/asm-admin/one-a.adp	7 Oct 2007 22:36:54 -0000	1.19
@@ -124,9 +124,3 @@
 
 
 </table>
-
-<if @sections:rowcount@ eq 0>
-<p>
-<font color=red><b>#assessment.add_section_first#</b></font>
-</p>
-</if>
Index: openacs-4/packages/assessment/www/asm-admin/one-a.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/one-a.tcl,v
diff -u -r1.12 -r1.13
--- openacs-4/packages/assessment/www/asm-admin/one-a.tcl	15 May 2007 20:14:18 -0000	1.12
+++ openacs-4/packages/assessment/www/asm-admin/one-a.tcl	7 Oct 2007 22:36:54 -0000	1.13
@@ -81,7 +81,7 @@
 			    -type assessment_response_notif \
 			    -object_id $assessment_id \
 			    -pretty_name   $title \
-			    -url [export_vars -base one-a {assessment_id reg_p}] ]
+			    -url [ad_return_url] ]
 
 db_multirow -extend { section_url } sections assessment_sections {} {
     if {[empty_string_p $points]} {
Index: openacs-4/packages/assessment/www/asm-admin/results-session.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/results-session.adp,v
diff -u -r1.7 -r1.8
--- openacs-4/packages/assessment/www/asm-admin/results-session.adp	15 May 2007 20:14:18 -0000	1.7
+++ openacs-4/packages/assessment/www/asm-admin/results-session.adp	7 Oct 2007 22:36:54 -0000	1.8
@@ -9,7 +9,7 @@
 <h1>@assessment_data.title@</h1>
 <p><span><b>#acs-subsite.Name#:</b> <if @show_username_p@><a href="@session_user_url@">@first_names@ @last_name@</a></if><else>#assessment.anonymous_name#</else></span>
    <span><b>#assessment.Attempt#:</b> @session_attempt@<if @assessment_data.number_tries@ not nil> / @assessment_data.number_tries@</if></span> (<a href="@delete_url@">#assessment.Delete_Attempts#</a>)
-   <if @assessment_data.type@ ne survey><span><b>#assessment.Percent_Score#:</b> @assessment_score@</span></if>
+   <if @assessment_data.type@ ne survey><span><b>#assessment.Percent_Score#:</b> @percent_score@%</span></if>
  <span><b>#assessment.Started#:</b> @session_start@</span>
  <span><b>#assessment.Finished#:</b> @session_finish@</span>
  <span><b>#assessment.Time_spent#:</b> @session_time@</span>
Index: openacs-4/packages/assessment/www/asm-admin/results-users-oracle.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/results-users-oracle.xql,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/assessment/www/asm-admin/results-users-oracle.xql	6 Dec 2005 14:24:34 -0000	1.1
+++ openacs-4/packages/assessment/www/asm-admin/results-users-oracle.xql	7 Oct 2007 22:36:54 -0000	1.2
@@ -1,21 +1,55 @@
 <?xml version="1.0"?>
 <queryset>
-<rdbms><type>oracle</type><version>8.1.6</version></rdbms>
 
-<partialquery name="restrict_start_date">
-      <querytext>
+<fullquery name="assessment_results">
+	<querytext>
+    select  a.title, 
+	a.user_id, a.first_names, a.last_name,
+    to_char(cs.completed_datetime, :format) as completed_datetime,
+    to_char(coalesce(cs.last_mod_datetime, ns.last_mod_datetime), :format) as last_mod_datetime,
+    coalesce(cs.subject_id, ns.subject_id) as subject_id,
+    coalesce(cs.session_id, ns.session_id) as session_id,
+    cs.percent_score,
+    a.last_name || ', ' || a.first_names as subject_name
+ 
+    from (select a.assessment_id, cr.title, cr.item_id, cr.revision_id,
+	  u.user_id, u.first_names, u.last_name
+	  
+	  from as_assessments a, cr_revisions cr, cr_items ci, acs_users_all u
+	  where a.assessment_id = cr.revision_id
+	  and cr.revision_id = ci.latest_revision
+	  and ci.parent_id = :folder_id
+          and u.user_id <> 0 
+	  and exists (
+                      select 1 from acs_object_party_privilege_map
+                      where object_id = :assessment_id
+                      and party_id = u.user_id
+                      and privilege = 'read')) a
+    left join (select as_sessions.*, cr.item_id
+	       from as_sessions, cr_revisions cr
+	       where session_id in (select max(session_id)
+				    from as_sessions, acs_objects o
+				    where not completed_datetime is null
+                                    and o.object_id = session_id
+                                    and o.package_id = :package_id
+				    group by subject_id, assessment_id )
+               and revision_id=assessment_id) cs
+    on (a.user_id = cs.subject_id and a.item_id = cs.item_id)
 
-	and s.completed_datetime >= $start_time
+    left join (select *
+	       from as_sessions
+	       where session_id in (select max(session_id)
+				    from as_sessions, acs_objects o
+				    where completed_datetime is null
+                                    and o.object_id = session_id
+                                    and o.package_id = :package_id
+                                    group by subject_id, assessment_id)) ns
+    on (a.user_id = ns.subject_id and a.assessment_id = ns.assessment_id)
 
-      </querytext>
-</partialquery>
+	where 1=1
+    [list::filter_where_clauses -and -name "results"]
 
-<partialquery name="restrict_end_date">
-      <querytext>
-
-	and trunc(s.completed_datetime) <= $end_time
-
-      </querytext>
-</partialquery>
-
+    order by lower(a.title), lower(a.last_name), lower(a.first_names)          
+	</querytext>
+</fullquery>
 </queryset>
Index: openacs-4/packages/assessment/www/asm-admin/results-users-postgresql.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/results-users-postgresql.xql,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/assessment/www/asm-admin/results-users-postgresql.xql	15 May 2007 20:14:18 -0000	1.2
+++ openacs-4/packages/assessment/www/asm-admin/results-users-postgresql.xql	7 Oct 2007 22:36:54 -0000	1.3
@@ -1,22 +1,56 @@
 <?xml version="1.0"?>
 <queryset>
-<rdbms><type>postgresql</type><version>7.1</version></rdbms>
 
-<partialquery name="restrict_start_date">
-      <querytext>
+<fullquery name="assessment_results">
+	<querytext>
+    select  a.title, 
+	a.user_id, a.first_names, a.last_name,
+    to_char(cs.completed_datetime, :format) as completed_datetime,
+    to_char(coalesce(cs.last_mod_datetime, ns.last_mod_datetime), :format) as last_mod_datetime,
+    coalesce(cs.subject_id, ns.subject_id) as subject_id,
+    coalesce(cs.session_id, ns.session_id) as session_id,
+    cs.percent_score,
+    a.last_name || ', ' || a.first_names as subject_name
+ 
+    from (select a.assessment_id, cr.title, cr.item_id, cr.revision_id,
+	  u.user_id, u.first_names, u.last_name
+	  
+	  from as_assessments a, cr_revisions cr, cr_items ci, acs_users_all u
+	  where a.assessment_id = cr.revision_id
+	  and cr.revision_id = ci.latest_revision
+	  and ci.parent_id = :folder_id
+          and u.user_id <> 0 
+	  and exists (
+                      select 1 from acs_object_party_privilege_map
+                      where object_id = :assessment_id
+                      and party_id = u.user_id
+                      and privilege = 'read')) a
+    left join (select as_sessions.*, cr.item_id
+	       from as_sessions, cr_revisions cr
+	       where session_id in (select max(session_id)
+				    from as_sessions, acs_objects o
+				    where not completed_datetime is null
+                                    and o.object_id = session_id
+                                    and o.package_id = :package_id
+				    group by subject_id, assessment_id )
+               and revision_id=assessment_id) cs
+    on (a.user_id = cs.subject_id and a.item_id = cs.item_id)
 
-	and (s.completed_datetime >= $start_time
-            or s.completed_datetime is null)
-      </querytext>
-</partialquery>
+    left join (select *
+	       from as_sessions
+	       where session_id in (select max(session_id)
+				    from as_sessions, acs_objects o
+				    where completed_datetime is null
+                                    and o.object_id = session_id
+                                    and o.package_id = :package_id
+                                    group by subject_id, assessment_id)) ns
+    on (a.user_id = ns.subject_id and a.assessment_id = ns.assessment_id)
 
-<partialquery name="restrict_end_date">
-      <querytext>
+	where true
 
-	and (date_trunc('day', s.completed_datetime) <= $end_time
-             or $end_time > now ())
+    [list::filter_where_clauses -and -name "results"]
 
-      </querytext>
-</partialquery>
-
+    order by lower(a.title), lower(a.last_name), lower(a.first_names)          
+	</querytext>
+</fullquery>
 </queryset>
Index: openacs-4/packages/assessment/www/asm-admin/results-users.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/results-users.adp,v
diff -u -r1.5 -r1.6
--- openacs-4/packages/assessment/www/asm-admin/results-users.adp	15 May 2007 20:14:18 -0000	1.5
+++ openacs-4/packages/assessment/www/asm-admin/results-users.adp	7 Oct 2007 22:36:54 -0000	1.6
@@ -4,9 +4,11 @@
 
 <include src="/packages/assessment/lib/section-links" assessment_id="@assessment_id@" tab="results">
 <p>@count_all_users@ users in community, @count_complete@ complete responses, @count_incomplete@ incomplete responses</p>
+<listfilters name="results" style="inline-filters"></listfilters>
 <listtemplate name="results"></listtemplate>
 
 <if @assessment_data.anonymous_p@ eq t>
   <h3>#assessment.Responding_Users#</h3>
   <listtemplate name="subjects"></listtemplate>
 </if>
+
Index: openacs-4/packages/assessment/www/asm-admin/results-users.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/results-users.tcl,v
diff -u -r1.10 -r1.11
--- openacs-4/packages/assessment/www/asm-admin/results-users.tcl	15 May 2007 20:14:18 -0000	1.10
+++ openacs-4/packages/assessment/www/asm-admin/results-users.tcl	7 Oct 2007 22:36:54 -0000	1.11
@@ -8,6 +8,7 @@
     assessment_id
     {start_time:optional ""}
     {end_time:optional ""}
+    status:optional,notnull
 } -properties {
     context:onevalue
     page_title:onevalue
@@ -21,13 +22,15 @@
 # Get the assessment data
 as::assessment::data -assessment_id $assessment_id
 
+set package_id [ad_conn package_id]
+set folder_id [as::assessment::folder_id -package_id $package_id]
 if {![info exists assessment_data(assessment_id)]} {
     ad_return_complaint 1 "[_ assessment.Requested_assess_does]"
     ad_script_abort
 }
 
 set user_id [ad_conn user_id]
-set assessment_rev_id $assessment_data(assessment_rev_id)
+
 set page_title "[_ assessment.Results_by_user]"
 set context [list [list index [_ assessment.admin]] [list [export_vars -base one-a {assessment_id}] $assessment_data(title)] $page_title]
 set format "[lc_get formbuilder_date_format], [lc_get formbuilder_time_format]"
@@ -53,19 +56,31 @@
 	regsub -all -- {to_date} $end_time {to_timestamp} end_time
     }
 
+    
     if {![empty_string_p $start_time]} {
 	set start_date_sql [db_map restrict_start_date]
     }
     if {![empty_string_p $end_time]} {
 	set end_date_sql [db_map restrict_end_date]
     }
-    #ad_returnredirect [export_vars -base results-users {assessment_id start_time end_time}]
 }
 
+if { [exists_and_not_null status] } {
+    if { $status == "complete" } {
+        set whereclause "cs.completed_datetime is not null"
+    } elseif { $status == "incomplete" } {
+        set whereclause "cs.completed_datetime is null and ns.session_id is not null"
+    } else {
+        set whereclause "cs.completed_datetime is null and ns.session_id is null"
+    }
+} else {
+    set whereclause "cs.completed_datetime is null and ns.session_id is null"
+}
+
 template::list::create \
     -name results \
     -multirow results \
-    -key sessions_id \
+    -key session_id \
     -elements {
 	session_id {
 	    label {[_ assessment.View_Results]}
@@ -75,7 +90,7 @@
 	    label {[_ assessment.Name]}
 	}
         status {
-            label {#assessment.Status#}
+            label {\#assessment.Status\#}
         }
 	completed_datetime {
 	    label {[_ assessment.Finish_Time]}
@@ -86,19 +101,30 @@
 	    html {align right nowrap}
 	    display_template {<if @results.result_url@ not nil><a href="@results.result_url@">@results.percent_score@</a></if><else></else>}
 	}
-        delete {
-            label {}
-            display_template {<a href=\"@results.delete_url@">[_ assessment.Delete_Attempts]</a>}
-        }
-    } -main_class {
-	narrow
-    } 
+    } -filters {
+	assessment_id {
+	    where_clause {
+		a.item_id = :assessment_id
+	    }
+	}
+	subject_id {
+	    where_clause {
+		cs.subject_id = :subject_id
+	    }
+	}
+	status {
+	    values {{"[_ assessment.Complete]" complete} {"[_ assessment.Incomplete]" incomplete} {"[_ assessment.Not_Taken]" nottaken}}
+	    where_clause {
+            $whereclause
+	    }
+	}
+    } -bulk_actions {"#assessment.Send_Email#" send-mail "#assessment.Send_an_email_to_the_selected users#"} \
+    -bulk_action_export_vars {assessment_id}
 
 
 template::multirow create subjects subject_id subject_url subject_name
 
-db_multirow -extend { result_url subject_url status delete_url } results assessment_results {
-} {
+db_multirow -extend { result_url subject_url status delete_url } results assessment_results {} {
     # to display list of users who answered the assessment if anonymous
     template::multirow append subjects $subject_id [acs_community_member_url -user_id $subject_id] $subject_name
 
@@ -133,15 +159,13 @@
 	} 
 }
 
-# FIXME 
-set dotlrn_installed_p [apm_package_installed_p dotlrn]
-if {$dotlrn_installed_p} {
-    set count_all_users [llength [dotlrn_community::list_users [dotlrn_community::get_community_id]]]
-} else {
-    # TODO get count from subsite
-    set count_all_users 0
-}
-                         
+set count_all_users [db_string q "select count(*) from users u
+                                  where u.user_id <> 0 
+                                  and exists (select 1
+                                      from acs_object_party_privilege_map
+                                      where party_id = u.user_id
+                                      and object_id = :assessment_id
+                                      and privilege = 'read')" -default 0]                 
 set count_complete [template::multirow size subjects]
 set count_incomplete [expr {$count_all_users - $count_complete}]
 ad_return_template
Index: openacs-4/packages/assessment/www/asm-admin/results-users.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/results-users.xql,v
diff -u -r1.3 -r1.4
--- openacs-4/packages/assessment/www/asm-admin/results-users.xql	15 May 2007 20:14:18 -0000	1.3
+++ openacs-4/packages/assessment/www/asm-admin/results-users.xql	7 Oct 2007 22:36:54 -0000	1.4
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <queryset>
 
-<fullquery name="assessment_results">
+<fullquery name="assessment_results_orig">
 	<querytext>
 	select s.session_id, s.subject_id, s.percent_score,
 	       to_char(s.completed_datetime, :format) as completed_datetime,
@@ -21,4 +21,5 @@
 	order by s.completed_datetime
 	</querytext>
 </fullquery>
+
 </queryset>
Fisheye: Tag 1.1 refers to a dead (removed) revision in file `openacs-4/packages/assessment/www/asm-admin/save-answer-set.adp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: Tag 1.1 refers to a dead (removed) revision in file `openacs-4/packages/assessment/www/asm-admin/save-answer-set.tcl'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: Tag 1.1 refers to a dead (removed) revision in file `openacs-4/packages/assessment/www/asm-admin/save-answer-set.xql'.
Fisheye: No comparison available.  Pass `N' to diff?
Index: openacs-4/packages/assessment/www/asm-admin/section-form.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/section-form.tcl,v
diff -u -r1.7 -r1.8
--- openacs-4/packages/assessment/www/asm-admin/section-form.tcl	15 May 2007 20:14:18 -0000	1.7
+++ openacs-4/packages/assessment/www/asm-admin/section-form.tcl	7 Oct 2007 22:36:54 -0000	1.8
@@ -124,7 +124,7 @@
 	}
     }
 } -after_submit {
-    ad_returnredirect [export_vars -base questions {assessment_id}]
+    ad_returnredirect [export_vars -base questions {assessment_id}]&\#S${new_section_id}
     ad_script_abort
 }
 
Index: openacs-4/packages/assessment/www/asm-admin/send-mail-oracle.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/send-mail-oracle.xql,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/assessment/www/asm-admin/send-mail-oracle.xql	1 Feb 2005 22:00:10 -0000	1.1
+++ openacs-4/packages/assessment/www/asm-admin/send-mail-oracle.xql	7 Oct 2007 22:36:54 -0000	1.2
@@ -2,45 +2,51 @@
 <queryset>
     <rdbms><type>oracle</type><version>8.1.6</version></rdbms>
 
-    <partialquery name="dotlrn_all">
+
+    <partialquery name="all">
 	<querytext>
             select '[db_quote $sender_email]' as from_addr,
                '[db_quote $sender_first_names]' as sender_first_names,
                '[db_quote $sender_last_name]' as sender_last_name,
                parties.email,
-               decode(acs_objects.object_type,
-                      'user',
-                      (select first_names
-                       from persons
-                       where person_id = parties.party_id),
-                      'group',
-                      (select group_name
-                       from groups
-                       where group_id = parties.party_id),
-                      'rel_segment',
-                      (select segment_name
-                       from rel_segments
-                       where segment_id = parties.party_id),
-                      '') as first_names,
-               decode(acs_objects.object_type,
-                      'user',
-                      (select last_name
-                       from persons
-                       where person_id = parties.party_id),
-                      '') as last_name,
-               '[db_quote $community_name]' as community_name,
-               '[db_quote $community_url]' as community_url
-            from party_approved_member_map,
+            decode(acs_objects.object_type,
+            'user',
+            (select first_names
+            from persons
+            where person_id = parties.party_id),
+            'group',
+            (select group_name
+            from groups
+            where group_id = parties.party_id),
+            'rel_segment',
+            (select segment_name
+            from rel_segments
+            where segment_id = parties.party_id),
+            '') as first_names,
+            decode(acs_objects.object_type,
+            'user',
+            (select last_name
+            from persons
+            where person_id = parties.party_id),
+            '') as last_name
+            from
                  parties,
-                 acs_objects
-            where party_approved_member_map.party_id = $segment_id
-            and party_approved_member_map.member_id <> $segment_id
-            and party_approved_member_map.member_id = parties.party_id
+                 acs_objects,
+                 users
+            where
+            parties.party_id <> 0
+            and parties.party_id = users.user_id        
             and parties.party_id = acs_objects.object_id
+            and exists (select 1 from acs_object_party_privilege_map m
+                        where m.object_id = $assessment_id
+                        and m.party_id = parties.party_id
+                        and m.privilege = 'read')
+        
+               
 	</querytext>
     </partialquery>
 
-    <partialquery name="dotlrn_responded">
+    <partialquery name="responded">
 	<querytext>
  		select '[db_quote $sender_email]' as from_addr,
                '[db_quote $sender_first_names]' as sender_first_names,
@@ -65,15 +71,13 @@
                       (select last_name
                        from persons
                        where person_id = parties.party_id),
-                      '') as last_name,
-               '[db_quote $community_name]' as community_name,
-               '[db-quote $community_url]' as community_url
-            from party_approved_member_map,
+                      '') as last_name
+            from 
                  parties,
-                 acs_objects
-            where party_approved_member_map.party_id = $segment_id
-            and party_approved_member_map.member_id <> $segment_id
-            and party_approved_member_map.member_id = parties.party_id
+                 acs_objects,
+                 users
+            where
+            parties.party_id = users.user_id                 
             and parties.party_id = acs_objects.object_id
 	    and parties.party_id in (
 		select s.subject_id
@@ -84,7 +88,7 @@
 	</querytext>
     </partialquery>
 
-    <partialquery name="dotlrn_not_responded">
+    <partialquery name="not_responded">
 	<querytext>
 		select '[db_quote $sender_email]' as from_addr,
                '[db_quote $sender_first_names]' as sender_first_names,
@@ -109,22 +113,25 @@
                       (select last_name
                        from persons
                        where person_id = parties.party_id),
-                      '') as last_name,
-               '[db_quote $community_name]' as community_name,
-               '[db_quote $community_url]' as community_url
-            from party_approved_member_map,
+                      '') as last_name
+            from 
                  parties,
-                 acs_objects
-            where party_approved_member_map.party_id = $segment_id
-            and party_approved_member_map.member_id <> $segment_id
-            and party_approved_member_map.member_id = parties.party_id
+                 acs_objects,
+                 users 
+            where
+            parties.party_id <> 0
+            and parties.party_id = users.user_id
             and parties.party_id = acs_objects.object_id
 	    and parties.party_id not in (
 		select s.subject_id
 		from as_sessions s, cr_revisions r
 		where s.assessment_id = r.revision_id
 		and s.completed_datetime is not null
 		and r.item_id = $assessment_id)
+                and exists (select 1 from acs_object_party_privilege_map m
+                        where m.object_id = $assessment_id
+                        and m.party_id = parties.party_id
+                        and m.privilege = 'read')
 	</querytext>
     </partialquery>
 
@@ -133,10 +140,10 @@
  		select '[db_quote $sender_email]' as from_addr,
                '[db_quote $sender_first_names]' as sender_first_names,
                '[db_quote $sender_last_name]' as sender_last_name,
-               parties.email,
+               parties.email
             from parties
-            where parties.party_id = acs_objects.object_id
-	    and parties.party_id in (
+            where
+                parties.party_id in (
 		select s.subject_id
 		from as_sessions s, cr_revisions r
 		where s.assessment_id = r.revision_id
@@ -145,4 +152,15 @@
 	</querytext>
     </partialquery>
 
-</queryset>
\ No newline at end of file
+    <partialquery name="list_of_user_ids">
+	<querytext>
+ 		select '[db_quote $sender_email]' as from_addr,
+               '[db_quote $sender_first_names]' as sender_first_names,
+               '[db_quote $sender_last_name]' as sender_last_name,
+               parties.email
+            from parties
+            where
+                parties.party_id in ([template::util::tcl_to_sql_list $user_ids])
+                </querytext>
+        </partialquery>
+</queryset>
Index: openacs-4/packages/assessment/www/asm-admin/send-mail-postgresql.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/send-mail-postgresql.xql,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/assessment/www/asm-admin/send-mail-postgresql.xql	1 Feb 2005 22:00:10 -0000	1.1
+++ openacs-4/packages/assessment/www/asm-admin/send-mail-postgresql.xql	7 Oct 2007 22:36:54 -0000	1.2
@@ -3,7 +3,7 @@
 <queryset>
    <rdbms><type>postgresql</type><version>7.1</version></rdbms>
 
-    <partialquery name="dotlrn_all">
+    <partialquery name="all">
 	<querytext>
             select '[db_quote $sender_email]' as from_addr,
                '[db_quote $sender_first_names]' as sender_first_names,
@@ -28,20 +28,23 @@
                       (select last_name
                        from persons
                        where person_id = parties.party_id)
-		     else '' end) as last_name,
-               '[db_quote $community_name]' as community_name,
-               '[db_quote $community_url]' as community_url
-            from party_approved_member_map,
+		     else '' end) as last_name
+            from
                  parties,
-                 acs_objects
-            where party_approved_member_map.party_id = $segment_id
-            and party_approved_member_map.member_id <> $segment_id
-            and party_approved_member_map.member_id = parties.party_id
+                 acs_objects,
+                 users
+            where
+            parties.party_id <> 0
+            and parties.party_id = users.user_id        
             and parties.party_id = acs_objects.object_id
+            and exists (select 1 from acs_object_party_privilege_map m
+                        where m.object_id = $assessment_id
+                        and m.party_id = parties.party_id
+                        and m.privilege = 'read')
 	</querytext>
     </partialquery>
 
-    <partialquery name="dotlrn_responded">
+    <partialquery name="responded">
 	<querytext>
  		select '[db_quote $sender_email]' as from_addr,
                '[db_quote $sender_first_names]' as sender_first_names,
@@ -66,15 +69,13 @@
                       (select last_name
                        from persons
                        where person_id = parties.party_id)
-		     else '' end) as last_name,
-               '[db_quote $community_name]' as community_name,
-               '[db_quote $community_url]' as community_url
-            from party_approved_member_map,
+		     else '' end) as last_name
+            from 
                  parties,
-                 acs_objects
-            where party_approved_member_map.party_id = $segment_id
-            and party_approved_member_map.member_id <> $segment_id
-            and party_approved_member_map.member_id = parties.party_id
+                 acs_objects,
+                 users
+            where
+            parties.party_id = users.user_id                 
             and parties.party_id = acs_objects.object_id
 	    and parties.party_id in (
 		select s.subject_id
@@ -85,7 +86,7 @@
 	</querytext>
     </partialquery>
 
-    <partialquery name="dotlrn_not_responded">
+    <partialquery name="not_responded">
 	<querytext>
 		select '[db_quote $sender_email]' as from_addr,
                '[db_quote $sender_first_names]' as sender_first_names,
@@ -113,19 +114,24 @@
 		     else '' end) as last_name,
                '[db_quote $community_name]' as community_name,
                '[db_quote $community_url]' as community_url
-            from party_approved_member_map,
+            from 
                  parties,
-                 acs_objects
-            where party_approved_member_map.party_id = $segment_id
-            and party_approved_member_map.member_id <> $segment_id
-            and party_approved_member_map.member_id = parties.party_id
+                 acs_objects,
+                 users 
+            where
+            parties.party_id <> 0
+            and parties.party_id = users.user_id
             and parties.party_id = acs_objects.object_id
 	    and parties.party_id not in (
 		select s.subject_id
 		from as_sessions s, cr_revisions r
 		where s.assessment_id = r.revision_id
 		and s.completed_datetime is not null
 		and r.item_id = $assessment_id)
+                and exists (select 1 from acs_object_party_privilege_map m
+                        where m.object_id = $assessment_id
+                        and m.party_id = parties.party_id
+                        and m.privilege = 'read')
 	</querytext>
     </partialquery>
 
@@ -136,7 +142,8 @@
                '[db_quote $sender_last_name]' as sender_last_name,
                parties.email
             from parties
-            where parties.party_id in (
+            where
+                parties.party_id in (
 		select s.subject_id
 		from as_sessions s, cr_revisions r
 		where s.assessment_id = r.revision_id
@@ -145,4 +152,16 @@
 	</querytext>
     </partialquery>
 
+    <partialquery name="list_of_user_ids">
+	<querytext>
+ 		select '[db_quote $sender_email]' as from_addr,
+               '[db_quote $sender_first_names]' as sender_first_names,
+               '[db_quote $sender_last_name]' as sender_last_name,
+               parties.email
+            from parties
+            where
+                parties.party_id in ([template::util::tcl_to_sql_list $user_ids])
+	</querytext>
+    </partialquery>
+    
 </queryset>
Index: openacs-4/packages/assessment/www/asm-admin/send-mail.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/send-mail.tcl,v
diff -u -r1.3 -r1.4
--- openacs-4/packages/assessment/www/asm-admin/send-mail.tcl	8 Apr 2005 00:50:40 -0000	1.3
+++ openacs-4/packages/assessment/www/asm-admin/send-mail.tcl	7 Oct 2007 22:36:54 -0000	1.4
@@ -1,115 +1,123 @@
-ad_page_contract {
+# packages/assessment/www/asm-admin/send-mail-to.tcl
 
-    this page offers options for sending email regarding
-    an assessment to various groups
-
-    @param assessment_id
+ad_page_contract {
     
-    @author dave@thedesignexperience.org
-    @date   July 29, 2002
-    @cvs-id $Id:
-} {
-  assessment_id:integer,notnull
-  {to "responded"}  
+    Choose who to send mail to
+    
+    @author Dave Bauer (dave@thedesignexperience.org)
+    @creation-date 2007-07-06
+    @cvs-id $Id$
+
+} -query {
+    {assessment_id ""}
+    {session_id:multiple ""}
+    {return_url ""}
 } -properties {
     context:onevalue
     page_title:onevalue
 }
 
 set package_id [ad_conn package_id]
 set user_id [ad_conn user_id]
-set sender_id [ad_conn user_id]
 
-permission::require_permission -object_id $package_id -privilege create
-permission::require_permission -object_id $assessment_id -privilege admin
+permission::require_permission \
+    -privilege "admin" \
+    -party_id $user_id \
+    -object_id $package_id
 
-# Get the assessment data
 as::assessment::data -assessment_id $assessment_id
-
-if {![info exists assessment_data(assessment_id)]} {
-    ad_return_complaint 1 "[_ assessment.Requested_assess_does]"
-    ad_script_abort
-}
-
 set page_title "[_ assessment.Send_Mail]"
 set assessment_name $assessment_data(title)
 set context [list [list index [_ assessment.admin]] [list [export_vars -base one-a {assessment_id}] $assessment_data(title)] $page_title]
 
-db_1row select_sender_info {}
-set dotlrn_installed_p [apm_package_installed_p dotlrn]
 
-if {$dotlrn_installed_p} {
-    set rel_type "dotlrn_member_rel"
-    set community_id [dotlrn_community::get_community_id]
-    set segment_id [db_string select_rel_segment_id {}]
-    set community_name [dotlrn_community::get_community_name $community_id]
-    set community_url "[ad_parameter -package_id [ad_acs_kernel_id] SystemURL][dotlrn_community::get_community_url $community_id]"
+ad_form -name send-mail -has_submit 1 -form {
+    {subject:text(text) {value $assessment_name} {label "[_ assessment.Message_Subject]"} {html {size 50}}}
+    {message:text(textarea) {label "[_ assessment.Enter_Message]"} {html {rows 15 cols 60}}}
+    {assessment_id:text(hidden) {value $assessment_id}}
+    {formbutton_ok:text(submit) {label "[_ acs-templating.OK]"}}
+}
 
+if {[llength $session_id]} {
+    if {[llength $session_id] == 1} {
+	set session_id [split [lindex $session_id 0]]
+    }
+    set options [db_list_of_lists get_session_user_options "select u.last_name || ', ' || u.first_names,user_id  from acs_users_all u, as_sessions s where s.session_id in ([template::util::tcl_to_sql_list $session_id]) and u.user_id = s.subject_id"]
+    ad_form -extend -name send-mail -form {
+        {user_ids:text(checkbox) {label "[_ assessment.Send_mail_to_the_selected_users]"} {options $options}}
+        {session_id:text(hidden) {value $session_id}}
+    }
+} else {
     set n_responses [db_string n_responses {}]
+
     if {$n_responses > 0} {
-	ad_form -name send-mail -form {
-	    {to:text(radio) {options {
-		{"[_ assessment.lt_Everyone_eligible_to_]" "all"}
-		{"[_ assessment.lt_Everyone_who_has_alre]" "responded"}
-		{"[_ assessment.lt_Everyone_who_has_not_]" "not_responded"}}}
-		{label "[_ assessment.Send_mail_to]"}
-		{value $to}
-	    }
-	}
+        ad_form -extend -name send-mail -form {
+            {to:text(radio) {options {
+                {"[_ assessment.lt_Everyone_eligible_to_]" "all"}
+                {"[_ assessment.lt_Everyone_who_has_alre]" "responded"}
+                {"[_ assessment.lt_Everyone_who_has_not_]" "not_responded"}}}
+                {label "[_ assessment.Send_mail_to]"}
+            }
+        }
     } else {
-	ad_form -name send-mail -form {
-	    {to:text(radio) {options {
-		{"[_ assessment.lt_Everyone_eligible_to_]" "all"}
-		{"[_ assessment.lt_Everyone_who_has_not_]" "not_responded"}}}
-		{label "[_ assessment.Send_mail_to]"}
-		{value $to}
-	    }
-	}
+        ad_form -extend -name send-mail -form {
+            {to:text(radio) {options {
+                {"[_ assessment.lt_Everyone_eligible_to_]" "all"}
+                {"[_ assessment.lt_Everyone_who_has_not_]" "not_responded"}}}
+                {label "[_ assessment.Send_mail_to]"}
+                {value $to}
+            }
+        }
     }
-} else {
-    ad_form -name send-mail -form {
-	{to:text(radio) {options {
-	    {"[_ assessment.lt_Everyone_who_has_alre]" "responded"}}}
-            {label "[_ assessment.Send_mail_to]"}
-            {value ""}
-	}
-    }
 }
 
-ad_form -extend -name send-mail -form {
-    {subject:text(text) {value $assessment_name} {label "[_ assessment.Message_Subject]"} {html {size 50}}}
-    {message:text(textarea) {label "[_ assessment.Enter_Message]"} {html {rows 15 cols 60}}}
-    {assessment_id:text(hidden) {value $assessment_id}}
+ad_form -extend -name send-mail -on_request {
+    if {[info exists options]} {
+        set user_ids [list]
+        foreach elm $options {
+            lappend user_ids [lindex $elm 1]
+        }
+    }
 } -on_submit {
+    acs_user::get -user_id $user_id -array sender
+    set sender_email $sender(email)
+    set sender_first_names $sender(first_names)
+    set sender_last_name $sender(last_name)
     set query ""
 
-    if {$dotlrn_installed_p} {
+    if {[info exists to] && $to ne ""} {
         switch $to {
 	    all {
-                set query [db_map dotlrn_all]
+                set query [db_map all]
             }
 	    
 	    responded {
-		set query [db_map dotlrn_responded]
+		set query [db_map responded]
             }
             
 	    not_responded {
-		set query [db_map dotlrn_not_responded]
+		set query [db_map not_responded]
 	    }
         }
+    } elseif {[info exists user_ids] && [llength $user_ids]} {
+        set query [db_map list_of_user_ids]
     } else {
 	set query [db_map responded]
     }
-    
+ 
     bulk_mail::new \
         -package_id $package_id \
         -from_addr $sender_email \
         -subject $subject \
         -message $message \
         -query $query
 
-    ad_returnredirect [export_vars -base one-a {assessment_id}]
+    if {$return_url eq ""} {
+        set return_url [export_vars -base one-a {assessment_id}]
+    }
+    set redirect_message "[_ assessment.Mail_subject_sent]"
+    ad_returnredirect -message $redirect_message $return_url
     ad_script_abort
-}
 
-ad_return_template
+    
+}
\ No newline at end of file
Index: openacs-4/packages/assessment/www/asm-admin/send-mail.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/send-mail.xql,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/assessment/www/asm-admin/send-mail.xql	1 Feb 2005 22:00:10 -0000	1.1
+++ openacs-4/packages/assessment/www/asm-admin/send-mail.xql	7 Oct 2007 22:36:54 -0000	1.2
@@ -14,15 +14,6 @@
         </querytext>
     </fullquery>
 
-    <fullquery name="select_rel_segment_id">
-        <querytext>
-            select rel_segments.segment_id
-            from rel_segments
-            where rel_segments.group_id = :community_id
-            and rel_segments.rel_type = :rel_type
-        </querytext>
-    </fullquery>
-
     <fullquery name="n_responses">
 	<querytext>
 		select count(*)
Index: openacs-4/packages/assessment/www/asm-admin/session-delete.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/session-delete.tcl,v
diff -u -r1.5 -r1.6
--- openacs-4/packages/assessment/www/asm-admin/session-delete.tcl	15 May 2007 20:14:18 -0000	1.5
+++ openacs-4/packages/assessment/www/asm-admin/session-delete.tcl	7 Oct 2007 22:36:54 -0000	1.6
@@ -9,7 +9,7 @@
 
 permission::require_permission \
     -party_id [ad_conn user_id] \
-    -object_id [ad_conn package_id] \
+    -object_id $assessment_id \
     -privilege admin
 as::assessment::data -assessment_id $assessment_id
 set assessment_name $assessment_data(name)
Index: openacs-4/packages/assessment/www/asm-admin/sessions.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/sessions.adp,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/assessment/www/asm-admin/sessions.adp	26 Sep 2006 00:22:46 -0000	1.2
+++ openacs-4/packages/assessment/www/asm-admin/sessions.adp	7 Oct 2007 22:36:54 -0000	1.3
@@ -1,5 +1,6 @@
 <master>
-  <property name="title">#assessment.All_Users#</property>
+  <property name="title">@page_title@</property>
+  <property name="context">@context@</property>
   <if @assessment_data.html_title@ defined><h2>#assessment.lt_Responses_for_assessm#</h2></if>
   <if @person_name@ defined><h2>#assessment.lt_Responses_of_user_per#</h2></if>
   <p />
Index: openacs-4/packages/assessment/www/asm-admin/sessions.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/sessions.tcl,v
diff -u -r1.3 -r1.4
--- openacs-4/packages/assessment/www/asm-admin/sessions.tcl	15 May 2007 20:14:18 -0000	1.3
+++ openacs-4/packages/assessment/www/asm-admin/sessions.tcl	7 Oct 2007 22:36:54 -0000	1.4
@@ -6,6 +6,7 @@
     
     @author Roel Canicula (roel@solutiongrove.com)
     @creation-date 2006-06-05
+
     @arch-tag: cdb2d596-15fc-45ba-9ce1-d648a49a20b7
     @cvs-id $Id$
 } {
@@ -21,16 +22,16 @@
 permission::require_permission -object_id $package_id -privilege create
 set folder_id [as::assessment::folder_id -package_id $package_id]
 set user_id [ad_conn user_id]
-
-# hack for dotlrn ideally ad_conn subsite_id would pretend dotlrn was a subsite
-if {![apm_package_installed_p dotlrn] \
-	|| [set members_party_id [dotlrn_community::get_community_id]] eq ""} {
-    set members_party_id [application_group::group_id_from_package_id \
-			      -package_id [ad_conn subsite_id]]
-}
-
+set context_object_id $package_id
 set form [rp_getform]
 ns_set delkey $form status
+set page_title [_ assessment.All_Users]
+if {[info exists assessment_id]} {
+    as::assessment::data -assessment_id $assessment_id
+    set context [list [list index [_ assessment.admin]] [list [export_vars -base one-a {assessment_id}] $assessment_data(title)] $page_title]
+} else {
+    set context [list [list index [_ assessment.admin]] $page_title]
+}
 set base_url [ad_return_url]
 
 set actions [list]
@@ -48,11 +49,23 @@
 
 if { [info exists assessment_id] } {
     as::assessment::data -assessment_id $assessment_id
-
+    set context_object_id $assessment_id
     set actions [linsert $actions 0 "[_ assessment.All_Assessments]" ? "[_ assessment.All_Assessments]"]
     lappend actions "[_ assessment.Summary]" [export_vars -base item-stats { assessment_id {return_url [ad_return_url]} }] "[_ assessment.Summary]"
 }
 
+if { [exists_and_not_null status] } {
+        if { $status == "complete" } {
+                set whereclause "cs.completed_datetime is not null"
+        } elseif { $status == "incomplete" } {
+                set whereclause "cs.completed_datetime is null and ns.session_id is not null"
+        } else {
+                set whereclause "cs.completed_datetime is null and ns.session_id is null"
+        }
+} else {
+        set whereclause "cs.completed_datetime is null and ns.session_id is null"
+}
+
 # Check membership
 
 template::list::create \
@@ -120,67 +133,9 @@
 	status {
 	    values {{"[_ assessment.Complete]" complete} {"[_ assessment.Incomplete]" incomplete} {"[_ assessment.Not_Taken]" nottaken}}
 	    where_clause {
-		(case when :status = 'complete'
-		 then not cs.completed_datetime is null
-		 when :status = 'incomplete'
-		 then cs.completed_datetime is null and not ns.session_id is null
-		 else cs.completed_datetime is null and ns.session_id is null end)
+			$whereclause
 	    }
 	}
     }
 
-db_multirow sessions get_sessions [subst {
-    select a.*,
-    to_char(cs.completed_datetime, 'YYYY-MM-DD HH24:MI:SS') as completed_datetime,
-    to_char(coalesce(cs.last_mod_datetime, ns.last_mod_datetime), 'YYYY-MM-DD HH24:MI:SS') as last_mod_datetime,
-    coalesce(cs.subject_id, ns.subject_id) as subject_id,
-    coalesce(cs.session_id, ns.session_id) as session_id,
-    cs.percent_score
- 
-    from (select a.assessment_id, cr.title, cr.item_id, cr.revision_id,
-	  u.user_id, u.first_names, u.last_name
-	  
-	  from as_assessments a, cr_revisions cr, cr_items ci, acs_users_all u,
-          group_member_map g
-	  
-	  where a.assessment_id = cr.revision_id
-	  and cr.revision_id = ci.latest_revision
-	  and ci.parent_id = :folder_id
-	  
-	  and g.group_id = :members_party_id
-	  and g.member_id = u.user_id
-	  and acs_permission__permission_p(cr.item_id, u.user_id, 'read')) a
-
-    left join (select as_sessions.*, cr.item_id
-	       from as_sessions, cr_revisions cr
-	       where session_id in (select max(session_id)
-				    from as_sessions, acs_objects o
-				    where not completed_datetime is null
-	       and o.object_id = session_id
-               and o.package_id = :package_id
-				    group by subject_id, assessment_id )
-               and revision_id=assessment_id) cs
-    on (a.user_id = cs.subject_id and a.item_id = cs.item_id)
-
-    left join (select *
-	       from as_sessions
-	       where session_id in (select max(session_id)
-				    from as_sessions, acs_objects o
-				    where completed_datetime is null
-	       and o.object_id = session_id
-               and o.package_id = :package_id
-  	    group by subject_id, assessment_id)) ns
-    on (a.user_id = ns.subject_id and a.assessment_id = ns.assessment_id)
-
-    where true
-    [list::filter_where_clauses -and -name "sessions"]
-
-    order by lower(a.title), lower(a.last_name), lower(a.first_names)
-}]
-
-
-
-
-
-
-
+db_multirow sessions get_sessions ""
Fisheye: Tag 1.1 refers to a dead (removed) revision in file `openacs-4/packages/assessment/www/asm-admin/sessions.xql'.
Fisheye: No comparison available.  Pass `N' to diff?
Index: openacs-4/packages/assessment/www/asm-admin/toggle-publish.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/toggle-publish.tcl,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/assessment/www/asm-admin/toggle-publish.tcl	15 May 2007 20:14:18 -0000	1.2
+++ openacs-4/packages/assessment/www/asm-admin/toggle-publish.tcl	7 Oct 2007 22:36:54 -0000	1.3
@@ -2,6 +2,7 @@
     Publish or unpublish an assessment
 } {
     assessment_id:integer,notnull
+    {return_url ""}
 }
 
 permission::require_permission \
@@ -26,4 +27,7 @@
     set message "Publish failed. Following section(s) have no questions: ${empty_sections}"
 }
 
-ad_returnredirect -message $message [export_vars -base one-a {assessment_id}]
+if {$return_url eq ""} {
+    set return_url [export_vars -base one-a {assessment_id}]
+}
+ad_returnredirect -message $message $return_url
Index: openacs-4/packages/assessment/www/asm-admin/unzip-file.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/unzip-file.tcl,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/assessment/www/asm-admin/unzip-file.tcl	26 Sep 2006 00:22:46 -0000	1.2
+++ openacs-4/packages/assessment/www/asm-admin/unzip-file.tcl	7 Oct 2007 22:36:54 -0000	1.3
@@ -12,7 +12,7 @@
 permission::require_permission \
     -object_id [ad_conn package_id] \
     -party_id [ad_conn user_id] \
-    -privilege "admin"
+    -privilege "create"
 
 set context [list "[_ assessment.Import_Results]"]
 
Index: openacs-4/packages/assessment/www/asm-admin/export/index.vuh
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment/www/asm-admin/export/index.vuh,v
diff -u -r1.9 -r1.10
--- openacs-4/packages/assessment/www/asm-admin/export/index.vuh	12 Jun 2006 02:49:52 -0000	1.9
+++ openacs-4/packages/assessment/www/asm-admin/export/index.vuh	7 Oct 2007 22:36:54 -0000	1.10
@@ -384,12 +384,12 @@
 		$presentation appendChild $response_str	    
 	        #get rows and cols for painting a textarea (in abs_size is stored as "rows value cols value", we need to add the symbol =) 
                 db_0or1row html_rows_cols "SELECT html_display_options FROM as_item_display_ta WHERE as_item_display_id=:item_display_id"
-                if {![empty_string_p $html_display_options]} {
-		    set rows "[lindex $html_display_options 3]"
-		    set columns "[lindex $html_display_options 1]"
+	        if {![catch {array set html_array $html_display_options} errMsg] && [info exists html_array(rows)] && [info exists html_array(cols)]} {
+		    set rows $html_array(rows)
+		    set columns $html_array(cols)
 		} else {
-		    set rows 5
-		    set columns 25
+		    set rows 15
+		    set columns 55
 		}   
 		#<render_fib>
 		set render_fib [$doc createElement render_fib]
@@ -473,7 +473,7 @@
 		    #<or>
 		    set or [$doc createElement or]
 		    $conditionvar appendChild $or
-		    set list_choice_title $choice_title
+		    set list_choice_title [list $choice_title]
 		    for {set j 0} {$j < [llength $list_choice_title]} {incr j 1} {
 			#<varequal>
 			set varequal [$doc createElement varequal]
@@ -564,7 +564,8 @@
 		    #<or>
 		    set or [$doc createElement or]
 		    $and appendChild $or
-		    set list_choice_title $choice_title
+	            set list_choice_title [list $choice_title]
+                    
 		    for {set j 0} {$j < [llength $list_choice_title]} {incr j 1} {
 			#<varequal>
 			set varequal [$doc createElement varequal]
@@ -628,7 +629,9 @@
 		    set i 0
 		    # [info exists tb__display_id] because for fib item choice_correct_answer_p is null
 		    if { $choice_correct_answer_p == "t" || [info exists tb__display_id] } {
-			set list_choice_title $choice_title
+
+                    set list_choice_title [list $choice_title]
+                    
 			set length_list_choice_title [llength $list_choice_title]
 			
 			if {![info exists tb__display_id]} {
Index: openacs-4/packages/assessment-portlet/assessment-portlet.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment-portlet/assessment-portlet.info,v
diff -u -r1.4 -r1.5
--- openacs-4/packages/assessment-portlet/assessment-portlet.info	15 May 2007 20:14:18 -0000	1.4
+++ openacs-4/packages/assessment-portlet/assessment-portlet.info	7 Oct 2007 22:36:54 -0000	1.5
@@ -7,11 +7,11 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>t</singleton-p>
     
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/assessment-portlet-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/assessment-portlet-2.3.1.apm">
         <owner url="mailto:jopez@galileo.edu">Jose Pablo Escobedo Del Cid</owner>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
 
-        <provides url="assessment-portlet" version="2.3.0"/>
+        <provides url="assessment-portlet" version="2.3.1"/>
         <requires url="assessment" version="0.22d3"/>
 
         <callbacks>
Index: openacs-4/packages/assessment-portlet/www/assessment-portlet-oracle.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment-portlet/www/assessment-portlet-oracle.xql,v
diff -u -r1.5 -r1.6
--- openacs-4/packages/assessment-portlet/www/assessment-portlet-oracle.xql	15 May 2007 20:14:19 -0000	1.5
+++ openacs-4/packages/assessment-portlet/www/assessment-portlet-oracle.xql	7 Oct 2007 22:36:55 -0000	1.6
@@ -5,13 +5,27 @@
 
 <fullquery name="open_asssessments">
 	<querytext>
-	select cr.item_id as assessment_id, cr.title, cr.description, a.password,
+	select * from (select cr.item_id as assessment_id, cr.title, cr.description, a.password,
 	       to_char(a.start_time, 'YYYY-MM-DD HH24:MI:SS') as start_time,
 	       to_char(a.end_time, 'YYYY-MM-DD HH24:MI:SS') as end_time,
 	       to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS') as cur_time,
 	       cf.package_id, p.instance_name as community_name,
-	       sc.node_id as comm_node_id, sa.node_id as as_node_id,
-	       acs_permission__permission_p(a.assessment_id,:user_id,'admin') as admin_p
+	       sc.node_id as comm_node_id, sa.node_id as as_node_id, a.anonymous_p,
+	       acs_permission.permission_p(a.assessment_id,:user_id,'admin') as admin_p,
+    (select count(*) from as_sessions s1,
+         cr_revisions cr1 where
+         s1.assessment_id=cr1.revision_id
+         and cr1.item_id=cr.item_id
+     and s1.subject_id=:user_id
+         and completed_datetime is null) as in_progress_p,
+    (select count(*) from as_sessions s1,
+         cr_revisions cr1 where
+         s1.assessment_id=cr1.revision_id
+         and cr1.item_id=cr.item_id
+     and s1.subject_id=:user_id
+         and completed_datetime is not null) as completed_p,
+         a.number_tries
+
 	from as_assessments a, cr_revisions cr, cr_items ci, cr_folders cf,
 	     site_nodes sa, site_nodes sc, apm_packages p
 	where a.assessment_id = cr.revision_id
@@ -31,7 +45,53 @@
                     and ppm.privilege = 'read'
                     and ppm.party_id = :user_id)
 	order by lower(p.instance_name), lower(cr.title)
+) q where (q.completed_p < q.number_tries) or (q.number_tries=0 or q.number_tries is null)
 	</querytext>
 </fullquery>
 	
+<fullquery name="answered_assessments">
+    <querytext>
+select * from (select ass.*, sc.node_id as comm_node_id, sa.node_id as as_node_id, p.instance_name as community_name,
+acs_permission.permission_p(ass.assessment_id,:user_id,'admin') as admin_p,
+    (select count(*) from as_sessions s1,
+         cr_revisions cr1 where
+         s1.assessment_id=cr1.revision_id and
+         cr1.item_id=ass.assessment_id
+     and s1.subject_id=:user_id
+         and completed_datetime is null) as in_progress_p,
+    (select count(*) from as_sessions s1,
+         cr_revisions cr1 where
+         s1.assessment_id=cr1.revision_id
+         and cr1.item_id=ass.assessment_id
+     and s1.subject_id=:user_id
+         and completed_datetime is not null) as completed_p
+
+
+ from
+  (select cr.item_id as assessment_id, cr.title, cr.description, cf.package_id,
+    a1.number_tries, a1.end_time
+   from as_assessments a, cr_revisions cr, cr_items ci, cr_folders cf,
+      as_assessments a1,
+      (  select distinct s.assessment_id
+         from as_sessions s
+         where s.subject_id = :user_id
+         and s.completed_datetime is not null) s
+         where a.assessment_id = cr.revision_id --
+    and cf.package_id in ([join $list_of_package_ids ", "])
+         and cr.item_id = ci.item_id
+         and ci.parent_id = cf.folder_id
+         and s.assessment_id = a.assessment_id
+    and a1.assessment_id = ci.latest_revision
+       ) ass,
+site_nodes sa, site_nodes sc, apm_packages p
+where sa.object_id = ass.package_id
+and sc.node_id = sa.parent_id
+and p.package_id = sc.object_id
+order by lower(p.instance_name), lower(ass.title)
+) q
+ where (q.number_tries is not null and q.number_tries >0 and q.completed_p >= q.number_tries) or (q.end_time is not null and q.end_time < current_timestamp)
+    </querytext>
+</fullquery>
+
+
 </queryset>
Index: openacs-4/packages/assessment-portlet/www/assessment-portlet-postgresql.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/assessment-portlet/www/assessment-portlet-postgresql.xql,v
diff -u -r1.12 -r1.13
--- openacs-4/packages/assessment-portlet/www/assessment-portlet-postgresql.xql	15 May 2007 20:14:19 -0000	1.12
+++ openacs-4/packages/assessment-portlet/www/assessment-portlet-postgresql.xql	7 Oct 2007 22:36:55 -0000	1.13
@@ -51,4 +51,48 @@
 	</querytext>
 </fullquery>
 
+<fullquery name="answered_assessments">
+    <querytext>
+select * from (select ass.*, sc.node_id as comm_node_id, sa.node_id as as_node_id, p.instance_name as community_name,
+acs_permission__permission_p(ass.assessment_id,:user_id,'admin') as admin_p,
+    (select count(*) from as_sessions s1,
+         cr_revisions cr1 where
+         s1.assessment_id=cr1.revision_id and
+         cr1.item_id=ass.assessment_id
+     and s1.subject_id=:user_id
+         and completed_datetime is null) as in_progress_p,
+    (select count(*) from as_sessions s1,
+         cr_revisions cr1 where
+         s1.assessment_id=cr1.revision_id
+         and cr1.item_id=ass.assessment_id
+     and s1.subject_id=:user_id
+         and completed_datetime is not null) as completed_p
+
+
+ from
+  (select cr.item_id as assessment_id, cr.title, cr.description, cf.package_id,
+    a1.number_tries, a1.end_time
+   from as_assessments a, cr_revisions cr, cr_items ci, cr_folders cf,
+      as_assessments a1,
+      (  select distinct s.assessment_id
+         from as_sessions s
+         where s.subject_id = :user_id
+         and s.completed_datetime is not null) s
+         where a.assessment_id = cr.revision_id --
+    and cf.package_id in ([join $list_of_package_ids ", "])
+         and cr.item_id = ci.item_id
+         and ci.parent_id = cf.folder_id
+         and s.assessment_id = a.assessment_id
+    and a1.assessment_id = ci.latest_revision
+       ) ass,
+site_nodes sa, site_nodes sc, apm_packages p
+where sa.object_id = ass.package_id
+and sc.node_id = sa.parent_id
+and p.package_id = sc.object_id
+order by lower(p.instance_name), lower(ass.title)
+) q
+ where (q.number_tries is not null and q.number_tries >0 and q.completed_p >= q.number_tries) or (q.end_time is not null and q.end_time < current_timestamp)
+    </querytext>
+</fullquery>
+
 </queryset>
Fisheye: Tag 1.9 refers to a dead (removed) revision in file `openacs-4/packages/assessment-portlet/www/assessment-portlet.xql'.
Fisheye: No comparison available.  Pass `N' to diff?
Index: openacs-4/packages/bm-portlet/bm-portlet.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/bm-portlet/bm-portlet.info,v
diff -u -r1.14 -r1.15
--- openacs-4/packages/bm-portlet/bm-portlet.info	15 May 2007 20:14:19 -0000	1.14
+++ openacs-4/packages/bm-portlet/bm-portlet.info	7 Oct 2007 22:36:55 -0000	1.15
@@ -7,14 +7,14 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>t</singleton-p>
 
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/bm-portlet-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/bm-portlet-2.3.1.apm">
         <owner url="http://openacs.org">OpenACS</owner>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
         <vendor url="http://openacs.org">OpenACS</vendor>
 
-        <provides url="bm-portlet" version="2.3.0"/>
+        <provides url="bm-portlet" version="2.3.1"/>
         <requires url="bulk-mail" version="0.5.1d7"/>
-        <requires url="new-portal" version="2.3.0"/>
+        <requires url="new-portal" version="2.3.1"/>
 
         <parameters>
             <parameter datatype="string"  min_n_values="1"  max_n_values="1"  name="pretty_name"  default="#bm-portlet.pretty_name#" description="Name of the bulk mail portlet to display everywhere"/>
Index: openacs-4/packages/calendar/calendar.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/calendar/calendar.info,v
diff -u -r1.35 -r1.36
--- openacs-4/packages/calendar/calendar.info	27 Jun 2007 22:50:08 -0000	1.35
+++ openacs-4/packages/calendar/calendar.info	7 Oct 2007 22:36:55 -0000	1.36
@@ -27,6 +27,7 @@
             <callback type="after-install"  proc="calendar::install::package_install"/>
             <callback type="before-uninstall"  proc="calendar::install::package_uninstall"/>
             <callback type="before-upgrade"  proc="calendar::install::package_upgrade"/>
+            <callback type="after-upgrade"  proc="calendar::apm::package_after_upgrade"/>
         </callbacks>
         <parameters>
             <parameter datatype="number"  min_n_values="1"  max_n_values="1"  name="Attachments"  default="0" description="Allow Files to be Uploaded"/>
Fisheye: Tag 1.1 refers to a dead (removed) revision in file `openacs-4/packages/calendar/tcl/apm-callback-procs.tcl'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: Tag 1.1 refers to a dead (removed) revision in file `openacs-4/packages/calendar/tcl/apm-callback-procs.xql'.
Fisheye: No comparison available.  Pass `N' to diff?
Index: openacs-4/packages/calendar/tcl/calendar-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/calendar/tcl/calendar-procs.tcl,v
diff -u -r1.30 -r1.31
--- openacs-4/packages/calendar/tcl/calendar-procs.tcl	15 May 2007 20:14:21 -0000	1.30
+++ openacs-4/packages/calendar/tcl/calendar-procs.tcl	7 Oct 2007 22:36:55 -0000	1.31
@@ -106,6 +106,8 @@
 	end;
     }
     ]
+    #removing inherited permissions
+    permission::set_not_inherit -object_id $calendar_id
     
     return $calendar_id
     
Index: openacs-4/packages/calendar/www/cal-item-delete-confirm.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/calendar/www/cal-item-delete-confirm.adp,v
diff -u -r1.12 -r1.13
--- openacs-4/packages/calendar/www/cal-item-delete-confirm.adp	15 May 2007 20:14:21 -0000	1.12
+++ openacs-4/packages/calendar/www/cal-item-delete-confirm.adp	7 Oct 2007 22:36:55 -0000	1.13
@@ -4,6 +4,7 @@
     <property name="header_stuff">
       <link href="/resources/calendar/calendar.css" rel="stylesheet" type="text/css">
     </property>
+    <if @link:rowcount@ not nil><property name="&link">link</property></if>
 
     <table>
 
Index: openacs-4/packages/calendar/www/cal-item-delete-confirm.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/calendar/www/cal-item-delete-confirm.tcl,v
diff -u -r1.8 -r1.9
--- openacs-4/packages/calendar/www/cal-item-delete-confirm.tcl	25 Feb 2004 13:07:08 -0000	1.8
+++ openacs-4/packages/calendar/www/cal-item-delete-confirm.tcl	7 Oct 2007 22:36:55 -0000	1.9
@@ -21,4 +21,17 @@
 set cal_item(no_time_p) [dt_no_time_p -start_time $cal_item(start_time) -end_time $cal_item(end_time)]
 
 set date $cal_item(start_date)
+
+# To be replaced by a call to template::head API
+if {![template::multirow exists link]} {
+    template::multirow create link rel type href title lang media
+}
+template::multirow append link \
+    stylesheet \
+    "text/css" \
+    "/resources/calendar/calendar.css" \
+    "" \
+    en \
+    "all"
+
 ad_return_template
Index: openacs-4/packages/calendar/www/cal-item-new.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/calendar/www/cal-item-new.adp,v
diff -u -r1.18 -r1.19
--- openacs-4/packages/calendar/www/cal-item-new.adp	15 May 2007 20:14:21 -0000	1.18
+++ openacs-4/packages/calendar/www/cal-item-new.adp	7 Oct 2007 22:36:55 -0000	1.19
@@ -13,8 +13,8 @@
 <property name="header_stuff">
   <link href="/resources/calendar/calendar.css" rel="stylesheet" type="text/css">
 </property>
+<if @link:rowcount@ not nil><property name="&link">link</property></if>
 
-
 <script type="text/javascript" language="JavaScript">
     function disableTime(form_name) {
           <multiple name="time_format_elms">
@@ -52,7 +52,10 @@
 
 
 <script type="text/javascript" language="JavaScript">
-  // TimePChanged();
-  @js;noquote@
+      if (document.forms["cal_item"].time_p[0].checked == true ) {
+        // All day event
+        disableTime("cal_item");
+      } else {
+        enableTime("cal_item");
+      }
 </script>
-
Index: openacs-4/packages/calendar/www/cal-item-new.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/calendar/www/cal-item-new.tcl,v
diff -u -r1.33 -r1.34
--- openacs-4/packages/calendar/www/cal-item-new.tcl	13 Aug 2007 05:11:26 -0000	1.33
+++ openacs-4/packages/calendar/www/cal-item-new.tcl	7 Oct 2007 22:36:55 -0000	1.34
@@ -21,12 +21,7 @@
 
 set package_id [ad_conn package_id]
 set user_id [ad_conn user_id]
-set js ""
 
-if { [ns_queryget time_p] != 1 && [ns_queryget start_time] == "" } {
-   set js "disableTime('cal_item');"
-}
-
 if {![info exists item_type_id]} {
     set item_type_id ""
 }
@@ -36,6 +31,17 @@
 set calendar_list [calendar::calendar_list]
 set calendar_options [calendar::calendar_list -privilege create]
 
+# To be replaced by a call to template::head API
+if {![template::multirow exists link]} {
+    template::multirow create link rel type href title lang media
+}
+template::multirow append link \
+    stylesheet \
+    "text/css" \
+    "/resources/calendar/calendar.css" \
+    "" \
+    en \
+    "all"
 
 # TODO: Move into ad_form
 if { ![ad_form_new_p -key cal_item_id] } {
@@ -49,10 +55,10 @@
 }
 # TODO: Move into ad_form
 if { [exists_and_not_null cal_item_id] } {
-    set page_title "One calendar item"
+    set page_title [_ calendar.Calendar_Edit_Item]
     set ad_form_mode display
 } else {
-    set page_title "Add a calendar item"
+    set page_title [_ calendar.Calendar_Add_Item]
     set ad_form_mode edit
 }
 
Index: openacs-4/packages/calendar/www/cal-item-view.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/calendar/www/cal-item-view.adp,v
diff -u -r1.29 -r1.30
--- openacs-4/packages/calendar/www/cal-item-view.adp	15 May 2007 20:14:21 -0000	1.29
+++ openacs-4/packages/calendar/www/cal-item-view.adp	7 Oct 2007 22:36:55 -0000	1.30
@@ -4,6 +4,7 @@
 <property name="header_stuff">
   <link href="/resources/calendar/calendar.css" rel="stylesheet" type="text/css">
 </property>
+<if @link:rowcount@ not nil><property name="&link">link</property></if>
 <property name="displayed_object_id">@cal_item_id@</property>
 
 
Index: openacs-4/packages/calendar/www/cal-item-view.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/calendar/www/cal-item-view.tcl,v
diff -u -r1.19 -r1.20
--- openacs-4/packages/calendar/www/cal-item-view.tcl	15 May 2007 20:14:21 -0000	1.19
+++ openacs-4/packages/calendar/www/cal-item-view.tcl	7 Oct 2007 22:36:55 -0000	1.20
@@ -18,10 +18,6 @@
 
 set write_p [permission::write_permission_p -object_id $cal_item_id -creation_user $cal_item(creation_user)]
 
-if {[exists_and_not_null return_url]} {
-    set return_url [ad_urlencode $return_url]
-}
-
 # Attachments?
 if {$cal_item(n_attachments) > 0} {
     set item_attachments [attachments::get_attachments -object_id $cal_item(cal_item_id) -return_url [ad_return_url]]
@@ -48,5 +44,17 @@
 set cal_item_new_url [export_vars -base "cal-item-new" {cal_item_id return_url}]
 set cal_item_delete_url [export_vars -base "cal-item-delete" {cal_item_id return_url}]
 
+# To be replaced by a call to template::head API
+if {![template::multirow exists link]} {
+    template::multirow create link rel type href title lang media
+}
+template::multirow append link \
+    stylesheet \
+    "text/css" \
+    "/resources/calendar/calendar.css" \
+    "" \
+    en \
+    "all"
+
 ad_return_template 
 
Index: openacs-4/packages/calendar/www/view-month-display.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/calendar/www/view-month-display.adp,v
diff -u -r1.18 -r1.19
--- openacs-4/packages/calendar/www/view-month-display.adp	13 Aug 2007 06:37:57 -0000	1.18
+++ openacs-4/packages/calendar/www/view-month-display.adp	7 Oct 2007 22:36:55 -0000	1.19
@@ -48,7 +48,8 @@
                         <a href="@items.event_url@" title="#calendar.goto_items_event_name#">
                         <if @items.time_p@ true>@items.start_time@</if>
                         @items.event_name@
-                        <if @show_calendar_name_p@>
+                        <if @items.num_attachments@ gt 0><img src="/resources/calendar/images/attach.png" alt=""/></if>
+			<if @show_calendar_name_p@>
                           <span class="cal-text-grey-sml"> [@items.calendar_name@]</span>
                         </if>
                         </a>
Index: openacs-4/packages/calendar/www/view-month-display.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/calendar/www/view-month-display.tcl,v
diff -u -r1.21 -r1.22
--- openacs-4/packages/calendar/www/view-month-display.tcl	15 May 2007 20:14:21 -0000	1.21
+++ openacs-4/packages/calendar/www/view-month-display.tcl	7 Oct 2007 22:36:55 -0000	1.22
@@ -22,9 +22,13 @@
     set portlet_mode_p 1
 }
 
+if {![info exists return_url]} {
+    set return_url [ad_urlencode "../"]
+}
+
 if {[info exists portlet_mode_p] && $portlet_mode_p} {
     set page_num_urlvar "&page_num=$page_num"
-    set item_template "\${url_stub}cal-item-view?show_cal_nav=0&return_url=[ad_urlencode "../"]&action=edit&cal_item_id=\$item_id"
+    set item_template "\${url_stub}cal-item-view?show_cal_nav=0&return_url=$return_url&action=edit&cal_item_id=\$item_id"
     set prev_month_template "?view=month&date=\[ad_urlencode \$prev_month\]&page_num=$page_num"
     set next_month_template "?view=month&date=\[ad_urlencode \$next_month\]&page_num=$page_num"
     set url_stub_callback "calendar_portlet_display::get_url_stub"
@@ -117,7 +121,8 @@
     time_p \
     add_url \
     day_url \
-    style_class
+    style_class \
+    num_attachments
 
 # Calculate number of greyed days and then add them to the calendar mulitrow
 set greyed_days_before_month [expr [expr [dt_first_day_of_month $this_year $this_month]] -1 ]
@@ -151,7 +156,8 @@
             "" \
             "" \
             "" \
-            ""
+            "" \
+	    ""
     }
 }
 
@@ -209,7 +215,8 @@
                 0 \
                 "${base_url}cal-item-new?date=[dt_julian_to_ansi $current_day]&start_time=&end_time" \
                 "?view=day&date=[dt_julian_to_ansi $current_day]&$page_num_urlvar" \
-                "calendar-${system_type}Item"
+                "calendar-${system_type}Item" \
+		$num_attachments
         } 
     }
 
@@ -251,7 +258,8 @@
         $time_p \
         "${base_url}cal-item-new?date=[dt_julian_to_ansi $current_day]&start_time=&end_time" \
         "?view=day&date=[dt_julian_to_ansi $current_day]&$page_num_urlvar" \
-        "calendar-${system_type}Item"
+        "calendar-${system_type}Item" \
+	$num_attachments
 }
 
 if { !$exporting_p } {
@@ -285,7 +293,8 @@
             0 \
             "${base_url}cal-item-new?date=[dt_julian_to_ansi $current_day]&start_time=&end_time" \
             "?view=day&date=[dt_julian_to_ansi $current_day]&$page_num_urlvar" \
-            "" 
+            "" \
+	    ""
     }
 
     # Add cells for remaining days outside the month
@@ -312,7 +321,8 @@
                 "" \
                 "" \
                 "" \
-                ""
+                "" \
+		""
         }
     }
 }
Index: openacs-4/packages/calendar/www/view-one-day-display.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/calendar/www/view-one-day-display.adp,v
diff -u -r1.20 -r1.21
--- openacs-4/packages/calendar/www/view-one-day-display.adp	15 May 2007 20:14:21 -0000	1.20
+++ openacs-4/packages/calendar/www/view-one-day-display.adp	7 Oct 2007 22:36:55 -0000	1.21
@@ -12,7 +12,7 @@
 			<td style="vertical-align: top;" class="day-event-1" width="80%" valign="top">
             <div id="day-entry-box">
             <multiple name="items">
-			<div id="day-entry-@items.rownum@" class="day-entry-item @items.style_class@" style="top: @items.top@@hour_height_units@; height: @items.height@@hour_height_units@; @items.style@" onmouseover="showCalItem(this,'@items.height@@hour_height_units@',20);" onmouseout="showCalItem(this,'@items.height@@hour_height_units@',10);"><p><a href="@items.event_url@" title="#calendar.goto_items_event_name#">@items.event_name@</a></p></div>
+			<div id="day-entry-@items.rownum@" class="day-entry-item @items.style_class@" style="top: @items.top@@hour_height_units@; height: @items.height@@hour_height_units@; @items.style@" onmouseover="showCalItem(this,'@items.height@@hour_height_units@',20);" onmouseout="showCalItem(this,'@items.height@@hour_height_units@',10);"><p><if @items.num_attachments@ gt 0><img src="/resources/calendar/images/attach.png" alt="" /></if><a href="@items.event_url@" title="#calendar.goto_items_event_name#">@items.event_name@</a></p></div>
             </multiple>
 			</div><!-- day-entry-box -->
             </td>
Index: openacs-4/packages/calendar/www/view-one-day-display.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/calendar/www/view-one-day-display.tcl,v
diff -u -r1.35 -r1.36
--- openacs-4/packages/calendar/www/view-one-day-display.tcl	15 May 2007 20:14:21 -0000	1.35
+++ openacs-4/packages/calendar/www/view-one-day-display.tcl	7 Oct 2007 22:36:55 -0000	1.36
@@ -16,7 +16,7 @@
 set hour_height_sep 3
 set hour_height_units px
 set bump_right_base 0
-set bump_right_delta 35
+set bump_right_delta 155
 set bump_right_units px
 
 if {[info exists url_stub_callback]} {
@@ -83,7 +83,8 @@
     end_time \
     top \
     height \
-    style
+    style \
+    num_attachments
 
 set previous_intervals [list]
 
@@ -134,7 +135,8 @@
         $pretty_end_time \
         0 \
         0 \
-        "left: ${bump_right_base}${bump_right_units};"
+        "left: ${bump_right_base}${bump_right_units};" \
+	$num_attachments
 
     incr bump_right_base $bump_right_delta
 }
@@ -216,7 +218,8 @@
         $pretty_end_time \
         $top \
         $height \
-        "left: ${bump_right}${bump_right_units};"
+        "left: ${bump_right}${bump_right_units};" \
+	$num_attachments
     
     lappend previous_intervals $start_seconds $end_seconds
 }
Index: openacs-4/packages/calendar/www/view-week-display.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/calendar/www/view-week-display.adp,v
diff -u -r1.15 -r1.16
--- openacs-4/packages/calendar/www/view-week-display.adp	13 Aug 2007 06:37:57 -0000	1.15
+++ openacs-4/packages/calendar/www/view-week-display.adp	7 Oct 2007 22:36:55 -0000	1.16
@@ -33,7 +33,7 @@
               <div class="week-entry-box">
                 <multiple name="items">
 				  <div class="week-entry-item @items.style_class@" style="position: absolute; top:@items.top@@hour_height_units@; left: @items.left@@width_units@; height:@items.height@@hour_height_units@;" onMouseOver="showCalItem(this,'@items.height@@hour_height_units@',20);" onMouseOut="showCalItem(this,'@items.height@@hour_height_units@',10);">
-					<p><a href="@items.event_url@" title="#calendar.goto_items_event_name#">@items.event_name@</a></p>
+					<p><if @items.num_attachments@ gt 0><img src="/resources/calendar/images/attach.png" alt="" /></if><a href="@items.event_url@" title="#calendar.goto_items_event_name#">@items.event_name@</a></p>
 				  </div>
                 </multiple>
 			  </div>
Index: openacs-4/packages/calendar/www/view-week-display.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/calendar/www/view-week-display.tcl,v
diff -u -r1.19 -r1.20
--- openacs-4/packages/calendar/www/view-week-display.tcl	15 May 2007 20:14:21 -0000	1.19
+++ openacs-4/packages/calendar/www/view-week-display.tcl	7 Oct 2007 22:36:55 -0000	1.20
@@ -101,7 +101,8 @@
     style_class \
     top \
     height \
-    left
+    left \
+    num_attachments
 
 # Convert date from user timezone to system timezone
 set first_weekday_of_the_week_tz [lc_time_conn_to_system "$first_weekday_of_the_week 00:00:00"]
@@ -263,7 +264,8 @@
         "calendar-Item" \
         $top \
         $height \
-        $left
+        $left \
+	$num_attachments
 
     set current_weekday $day_of_week
 
Index: openacs-4/packages/calendar/www/view.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/calendar/www/view.adp,v
diff -u -r1.30 -r1.31
--- openacs-4/packages/calendar/www/view.adp	15 May 2007 20:14:21 -0000	1.30
+++ openacs-4/packages/calendar/www/view.adp	7 Oct 2007 22:36:55 -0000	1.31
@@ -3,6 +3,7 @@
 <property name="header_stuff">
   <link href="/resources/calendar/calendar.css" rel="stylesheet" type="text/css">
 </property>
+<if @link:rowcount@ not nil><property name="&link">link</property></if>
 
 <include src="/packages/calendar/www/navbar" view="@view@" base_url="@ad_conn_url@" date="@date@">
 
@@ -18,7 +19,9 @@
     </p>
   
     <p>
-    @notification_chunk;noquote@
+    <if @calendar_personal_p@ false>
+	    @notification_chunk;noquote@
+    </if>
     </p>
     <p>
     <if @admin_p@ true>
Index: openacs-4/packages/calendar/www/view.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/calendar/www/view.tcl,v
diff -u -r1.24 -r1.25
--- openacs-4/packages/calendar/www/view.tcl	15 May 2007 20:14:21 -0000	1.24
+++ openacs-4/packages/calendar/www/view.tcl	7 Oct 2007 22:36:55 -0000	1.25
@@ -53,6 +53,7 @@
     set ansi_day [string trimleft [lindex $ansi_list 2] "0"]
     set end_date [dt_julian_to_ansi [expr [dt_ansi_to_julian $ansi_year $ansi_month $ansi_day ] + $period_days]]
 }
+set calendar_personal_p [calendar::personal_p -calendar_id [lindex [lindex [calendar::calendar_list -package_id $package_id  ] 0] 1] ]
 
 set notification_chunk [notification::display::request_widget \
                             -type calendar_notif \
@@ -61,5 +62,16 @@
                             -url [ad_conn url] \
                            ]
 
+# To be replaced by a call to template::head API
+if {![template::multirow exists link]} {
+    template::multirow create link rel type href title lang media
+}
+template::multirow append link \
+    stylesheet \
+    "text/css" \
+    "/resources/calendar/calendar.css" \
+    "" \
+    en \
+    "all"
 
 ad_return_template 
Index: openacs-4/packages/calendar/www/views-oracle.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/calendar/www/Attic/views-oracle.xql,v
diff -u -r1.6 -r1.7
--- openacs-4/packages/calendar/www/views-oracle.xql	15 May 2007 20:14:21 -0000	1.6
+++ openacs-4/packages/calendar/www/views-oracle.xql	7 Oct 2007 22:36:55 -0000	1.7
@@ -20,7 +20,8 @@
          e.event_id as item_id,
          (select type from cal_item_types where item_type_id= ci.item_type_id) as item_type,
 	 cals.calendar_id,
-	 cals.calendar_name
+	 cals.calendar_name,
+         (select count(1) from attachments where object_id=e.event_id) as num_attachments
          $additional_select_clause
     from cal_items ci,
          acs_events e,
@@ -55,7 +56,8 @@
          e.event_id as item_id,
          (select type from cal_item_types where item_type_id= ci.item_type_id) as item_type,
 	 cals.calendar_id,
-	 cals.calendar_name
+	 cals.calendar_name,
+         (select count(1) from attachments where object_id=e.event_id) as num_attachments
          $additional_select_clause
     from cal_items ci,
          acs_events e,
Index: openacs-4/packages/calendar/www/views-postgresql.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/calendar/www/Attic/views-postgresql.xql,v
diff -u -r1.6 -r1.7
--- openacs-4/packages/calendar/www/views-postgresql.xql	15 May 2007 20:14:21 -0000	1.6
+++ openacs-4/packages/calendar/www/views-postgresql.xql	7 Oct 2007 22:36:55 -0000	1.7
@@ -19,7 +19,8 @@
              e.event_id as item_id,
              cit.type as item_type,
              cals.calendar_id,
-             cals.calendar_name
+             cals.calendar_name,
+             (select count(1) from attachments where object_id=e.event_id) as num_attachments
              $additional_select_clause
     from     acs_activities a,
              acs_events e,
@@ -56,7 +57,8 @@
          e.event_id as item_id,
          (select type from cal_item_types where item_type_id= ci.item_type_id) as item_type,
 	 cals.calendar_id,
-	 cals.calendar_name
+	 cals.calendar_name,
+         (select count(1) from attachments where object_id=e.event_id) as num_attachments
          $additional_select_clause
     from cal_items ci,
          acs_events e,
Index: openacs-4/packages/calendar/www/resources/images/attach.png
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/calendar/www/resources/images/attach.png,v
diff -u -r1.1 -r1.2
Binary files differ
Index: openacs-4/packages/calendar-portlet/calendar-portlet.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/calendar-portlet/calendar-portlet.info,v
diff -u -r1.23 -r1.24
--- openacs-4/packages/calendar-portlet/calendar-portlet.info	15 May 2007 20:14:22 -0000	1.23
+++ openacs-4/packages/calendar-portlet/calendar-portlet.info	7 Oct 2007 22:36:56 -0000	1.24
@@ -7,14 +7,14 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>t</singleton-p>
 
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/calendar-portlet-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/calendar-portlet-2.3.1.apm">
         <owner url="http://openacs.org">OpenACS</owner>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
         <vendor url="http://openacs.org">OpenACS</vendor>
 
-        <provides url="calendar-portlet" version="2.3.0"/>
+        <provides url="calendar-portlet" version="2.3.1"/>
         <requires url="calendar" version="2.1.0b7"/>
-        <requires url="new-portal" version="2.3.0"/>
+        <requires url="new-portal" version="2.3.1"/>
 
         <callbacks>
           <callback type="after-upgrade"  proc="calendar-portlet::after_upgrade"/>
Index: openacs-4/packages/categories/tcl/categories-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/categories/tcl/categories-procs.tcl,v
diff -u -r1.23 -r1.24
--- openacs-4/packages/categories/tcl/categories-procs.tcl	6 Oct 2007 13:51:43 -0000	1.23
+++ openacs-4/packages/categories/tcl/categories-procs.tcl	7 Oct 2007 22:36:56 -0000	1.24
@@ -217,7 +217,22 @@
 
     return $result
 }
+ad_proc -public category::get_mapped_categories_multirow { 
+    {-locale ""}
+    {-multirow mapped_categories}
+    object_id 
+} {
+    Returns multirow with: tree_id, tree_name, category_id, category_name 
 
+    @param object_id object of which we want to know the mapped categories.
+    @return multirow with tree and category information
+    @author Peter Kreuzinger (peter.kreuzinger@wu-wien.ac.at)
+} {
+    if { $locale == ""} {set locale [ad_conn locale]}
+    upvar $multirow mapped_categories
+    db_multirow mapped_categories select {}
+}
+
 ad_proc -public category::get_id { 
     name
     {locale en_US}
@@ -339,7 +354,46 @@
     }
     return $result
 }
+ad_proc -public category::get_children {
+    -category_id:required
+} {
+    Returns the category ids of the direct children of the given category
 
+    @param category_id  category_id 
+    @return list of category ids of the children of the supplied category_id
+    @author Peter Kreuzinger (peter.kreuzinger@wu-wien.ac.at)
+} {
+    set result [list]
+    set child_categories [db_list get_children_ids ""]
+    foreach category_id $child_categories {
+        lappend result $category_id
+    }
+    if {$result eq ""} {set result 0} 
+    return $result
+}                
+
+ad_proc -public category::count_children {
+    {-category_id:required}
+} {
+    counts all direct sub categories
+} {
+    return [db_string select {}]
+}
+                                             
+ad_proc -public category::get_parent {
+    -category_id:required
+} {
+    Returns the category id of the parent category
+
+    @param category_id  category_id 
+    @return category id of the parent category
+    @author Peter Kreuzinger (peter.kreuzinger@wu-wien.ac.at)
+} {
+    set result [db_list get_parent_id ""]
+    if {$result eq "{}"} {set result 0}
+    return $result
+}                
+    
 ad_proc -public category::get_tree {
     category_id
 } {
@@ -376,6 +430,48 @@
     return [list $category_id [category::get_name $category_id $locale] $tree_id [category_tree::get_name $tree_id $locale]]
 }
 
+ad_proc -public category::get_objects { 
+    -category_id
+    {-object_type ""}
+    {-content_type ""}
+    {-include_children:boolean}
+} {
+    Returns a list of objects which are mapped to this category_id
+    
+    @param category_id CategoryID of the category we want to get the objects for
+    @param object_type Limit the search for objects of this object type
+    @param content_type Limit the search for objects of this content_type
+    @param include_children Include child categories' objects as well. Not yet implemented
+    
+    @author malte ()
+    @creation-date Wed May 30 06:28:25 CEST 2007
+} {
+    set join_clause ""
+    set where_clause ""
+    if {$content_type ne ""} {
+        set join_clause ", cr_items i"
+        set where_clause "and i.item_id = com.object_id and i.content_type = :content_type"
+    } elseif {$object_type ne ""} {
+        set join_clause ", acs_objects o"
+        set where_clause "and o.object_id = com.object_id and o.object_type = :object_type"        
+    }
+    return [db_list get_objects {}]
+}
+
+ad_proc -public category::get_id_by_object_title {
+	title
+} {
+    Gets the id of a category given an object title (object_type=category).
+    This is highly useful as the category object title will not change if you change the
+    name (label) of the category, so you can access the category even if the label has changed
+    
+    @param title object title of the category to retrieve
+    @return the category id or empty string it no category was found
+	@author Peter Kreuzinger (peter.kreuzinger@wu-wien.ac.at)
+} {
+	return [db_string get_category_id {} -default ""]
+}
+
 ad_proc -public category::get_object_context { object_id } {
     Returns the object name and url to be used in a context bar.
 
Index: openacs-4/packages/categories/tcl/categories-procs.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/categories/tcl/Attic/categories-procs.xql,v
diff -u -r1.8 -r1.9
--- openacs-4/packages/categories/tcl/categories-procs.xql	23 Mar 2005 22:44:56 -0000	1.8
+++ openacs-4/packages/categories/tcl/categories-procs.xql	7 Oct 2007 22:36:56 -0000	1.9
@@ -1,6 +1,35 @@
 <?xml version="1.0"?>
 <queryset>
+<fullquery name="category::count_children.select">
+        <querytext>
+             select count(*)
+             from categories
+             where parent_id=:category_id
+        </querytext>
+</fullquery>
 
+
+<fullquery name="category::get_children.get_children_ids">
+      <querytext>
+
+		select category_id
+		from categories
+		where parent_id = :category_id
+
+      </querytext>
+</fullquery>
+
+<fullquery name="category::get_parent.get_parent_id">
+      <querytext>
+
+		select parent_id
+		from categories
+		where category_id = :category_id
+		limit 1
+
+      </querytext>
+</fullquery>
+
 <fullquery name="category::get_id.get_category_id">      
       <querytext>
       
@@ -74,6 +103,22 @@
       </querytext>
 </fullquery>
 
+<fullquery name="category::get_mapped_categories_multirow.select">      
+      <querytext>
+      
+	    select co.tree_id, aot.title, c.category_id, ao.title
+	    from category_object_map_tree co, categories c, category_translations ct, acs_objects ao, acs_objects aot
+	    where co.object_id = :object_id
+		and co.category_id = c.category_id
+		and c.category_id = ao.object_id
+		and c.category_id = ct.category_id
+		and aot.object_id = co.tree_id
+		and ct.locale = :locale
+	    order by aot.title, ao.title
+	
+      </querytext>
+</fullquery>
+
 <fullquery name="category::get_mapped_categories.get_filtered">
         <querytext>
                 SELECT category_object_map.category_id
@@ -84,6 +129,24 @@
         </querytext>
 </fullquery>
 
+<fullquery name="category::get_objects.get_objects">
+        <querytext>
+                SELECT com.object_id
+                FROM category_object_map com $join_clause
+                WHERE com.category_id = :category_id $where_clause
+        </querytext>
+</fullquery>
+
+<fullquery name="category::get_id_by_object_title.get_category_id">
+      <querytext>
+
+                select object_id
+                from acs_objects
+                where title = :title
+                and object_type = 'category'
+
+      </querytext>
+</fullquery>
 <fullquery name="category::reset_translation_cache.reset_translation_cache">      
       <querytext>
       
Index: openacs-4/packages/categories/tcl/category-trees-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/categories/tcl/category-trees-procs.tcl,v
diff -u -r1.22 -r1.23
--- openacs-4/packages/categories/tcl/category-trees-procs.tcl	6 Oct 2007 13:51:43 -0000	1.22
+++ openacs-4/packages/categories/tcl/category-trees-procs.tcl	7 Oct 2007 22:36:56 -0000	1.23
@@ -26,6 +26,21 @@
         return [array get tree]
     }
 
+    ad_proc -public get_categories {
+	   {-tree_id:required}
+    } {
+           returns the main categories of a given tree
+    } {
+	   set locale [ad_conn locale]
+           set result [list]
+           set categories [db_list get_categories ""]
+           foreach category_id $categories {
+           	lappend result $category_id
+           }
+           return $result
+           
+    }
+                                                                                
     ad_proc -public map {
         -tree_id:required
         -object_id:required
@@ -216,7 +231,38 @@
 
         return $result
     }
+    ad_proc -public get_trees { object_id } {
+        Get the category trees mapped to an object.
 
+        @param object_id object to get the mapped category trees.
+        @return tcl list of tree_ids
+        @author Peter Kreuzinger (peter.kreuzinger@wu-wien.ac.at)
+    } {
+        set result [list]
+
+        db_foreach get_trees "" {
+            lappend result $tree_id
+        }
+
+        return $result
+    }
+
+    ad_proc -public get_id_by_object_title {
+    	{-title}
+    } {
+        Gets the id of a category_tree given an object title (object_type=category).
+        This is highly useful as the category_tree object title will not change if you change the
+        name (label) of the category_tree, so you can access the category_tree even if the label has changed.
+        Why would you want this? E.g. if you have the category widget and want to get only one specific tree
+        displayed and not all of them.
+
+        @param title object title of the category to retrieve
+        @return the category_tree_id or empty string it no category was found
+    	@author Malte Sussdorff (malte.sussdorff@cognovis.de)
+    } {
+    	return [db_string get_tree_id {} -default ""]
+    }
+    
     ad_proc -public get_mapped_trees_from_object_list { object_id_list {locale ""}} {
         Get the category trees mapped to a list of objects.
         
Index: openacs-4/packages/categories/tcl/category-trees-procs.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/categories/tcl/Attic/category-trees-procs.xql,v
diff -u -r1.9 -r1.10
--- openacs-4/packages/categories/tcl/category-trees-procs.xql	28 Aug 2007 16:30:03 -0000	1.9
+++ openacs-4/packages/categories/tcl/category-trees-procs.xql	7 Oct 2007 22:36:56 -0000	1.10
@@ -11,7 +11,17 @@
       </querytext>
 </fullquery>
 
- 
+<fullquery name="category_tree::get_categories.get_categories">
+       <querytext>
+            select c.category_id as category_id from categories c, category_translations ct
+            where parent_id is null
+		and tree_id = :tree_id
+		and c.category_id = ct.category_id
+		and locale = :locale
+            order by name
+       </querytext>
+</fullquery>
+         
 <fullquery name="category_tree::edit_mapping.edit_mapping">
       <querytext>
       
@@ -36,6 +46,16 @@
       </querytext>
 </fullquery>
 
+<fullquery name="category_tree::get_id_by_object_title.get_tree_id">
+      <querytext>
+
+                select object_id
+                from acs_objects
+                where title = :title
+                and object_type = 'category_tree'
+
+      </querytext>
+</fullquery>
  
 <fullquery name="category_tree::update.check_tree_existence">      
       <querytext>
@@ -59,8 +79,16 @@
 	
       </querytext>
 </fullquery>
+<fullquery name="category_tree::get_trees.get_trees">      
+      <querytext>
+      
+	    select distinct tree_id
+	    from category_object_map_tree
+	    where object_id = :object_id
+	
+      </querytext>
+</fullquery>
 
-
 <fullquery name="category_tree::get_mapped_trees_from_object_list.get_mapped_trees_from_object_list">      
       <querytext>
       
Index: openacs-4/packages/categories/tcl/widget-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/categories/tcl/widget-procs.tcl,v
diff -u -r1.20 -r1.21
--- openacs-4/packages/categories/tcl/widget-procs.tcl	28 Aug 2007 16:30:03 -0000	1.20
+++ openacs-4/packages/categories/tcl/widget-procs.tcl	7 Oct 2007 22:36:56 -0000	1.21
@@ -14,9 +14,24 @@
 namespace eval template::data::transform {}
 namespace eval template::data::validate {}
 
-ad_proc -public template::widget::category { element_reference tag_attributes } {
-    # author: Timo Hentschel (timo@timohentschel.de)
-
+ad_proc -public template::widget::category { 
+    element_reference 
+    tag_attributes 
+} {
+    Display the category widget. This has a multitude of options:
+    <ul>
+    <li>value: Values should be a list of two items: the object_id being viewed and the object_id which the trees are mapped to. 
+    This will get the mapped trees (if no value provided defaults to package_id) and the mapped categories for the object_id. If you
+    do not provide a value, the following options are used:
+    <li>category_application_id></li>
+    <li>category_object_id</li>
+    <li>category_tree_id</li>
+    <li>category_subtree_id</li>
+    <li>category_assign_single_p</li>
+    <li>category_require_category_p</li>
+    </ul>
+    @author: Timo Hentschel (timo@timohentschel.de)
+} {
     upvar $element_reference element
 
     if { [info exists element(html)] } {
Index: openacs-4/packages/dotlrn/dotlrn.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/dotlrn.info,v
diff -u -r1.126 -r1.127
--- openacs-4/packages/dotlrn/dotlrn.info	15 May 2007 20:14:24 -0000	1.126
+++ openacs-4/packages/dotlrn/dotlrn.info	7 Oct 2007 22:36:56 -0000	1.127
@@ -7,19 +7,19 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>f</singleton-p>
     
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/dotlrn-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/dotlrn-2.3.1d1.apm">
         <owner url="http://openacs.org">OpenACS</owner>
         <summary>A Course Management System</summary>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
         <vendor url="http://openacs.org">OpenACS</vendor>
         <description format="text/html">Course Management</description>
 
-        <provides url="dotlrn" version="2.3.0"/>
+        <provides url="dotlrn" version="2.3.1d1"/>
         <requires url="acs-kernel" version="5.3.1a1"/>
         <requires url="acs-lang" version="5.3.1a1"/>
         <requires url="attachments" version="0.10"/>
-        <requires url="new-portal" version="2.3.0"/>
-        <requires url="user-profile" version="2.3.0"/>
+        <requires url="new-portal" version="2.3.1"/>
+        <requires url="user-profile" version="2.3.1"/>
 
         <callbacks>
             <callback type="after-install"  proc="dotlrn::apm::after_install"/>
@@ -31,6 +31,7 @@
             <parameter datatype="string"  min_n_values="1"  max_n_values="1"  name="DefaultSiteTemplate"  default="#new-portal.sloan_theme_name#" description="The name of the default site template"/>
             <parameter datatype="number"  min_n_values="1"  max_n_values="1"  name="AdminChangeSiteTemplate_p"  default="1" description="desc" section_name=".LRN Portal Types"/>
             <parameter datatype="string"  min_n_values="1"  max_n_values="1"  name="admin_page_name"  default="#dotlrn.admin_page_name#" description="The name of the admin page"/>
+            <parameter datatype="string"  min_n_values="1"  max_n_values="1"  name="admin_layout_name"  default="#new-portal.simple_2column_layout_name#" description="The layout of the admin page"/>
             <parameter datatype="string"  min_n_values="1"  max_n_values="1"  name="AutoAddAuthorities"  default="*" description="A comma-separated list of short-names of authorities for which users should be automatically added to .LRN, or '*' for all. In order for users to be auto-added, AutoAddUsersP needs to be set to 1, and this needs to be set to * or include the relevant authority short_names. Example: 'local,ldap'." section_name="Auto-Adding Users to .LRN"/>
             <parameter datatype="number"  min_n_values="1"  max_n_values="1"  name="AutoAddUsersP"  default="0" description="Automatically add OpenACS users to .LRN. 1 = yes, 0 = no. In order for users to be auto-added, this needs to be set to 1, and AutoAddAuthorities needs to be set to * or include the relevant authority short_names." section_name="Auto-Adding Users to .LRN"/>
             <parameter datatype="string"  min_n_values="1"  max_n_values="1"  name="auto_dotlrn_user_email_patterns"  description="Automatic dotLRN user email patterns"/>
@@ -71,6 +72,7 @@
             <parameter datatype="string"  min_n_values="1"  max_n_values="1"  name="group_type_key"  default="dotlrn_community" description="Class Group Type"/>
             <parameter datatype="number"  min_n_values="1"  max_n_values="1"  name="hide_personal_portal_p"  default="0" description="Some systems may wish to keep the personal portal hidden.  Setting this value to 1 will cause dotlrn to exclude navigation to the personal portal from community portals, and disable the entire navbar on non-community portal pages."/>
             <parameter datatype="string"  min_n_values="1"  max_n_values="1"  name="non_member_page_name"  default="#dotlrn.non_member_page_name#" description="The name of the not a member page"/>
+            <parameter datatype="string"  min_n_values="1"  max_n_values="1"  name="non_member_layout_name"  default="#new-portal.simple_2column_layout_name#" description="The name of the not a member page"/>
             <parameter datatype="number"  min_n_values="1"  max_n_values="1"  name="show_portrait_p"  default="1" description="Should we show and solicit user portraits? 1=Yes, 0=No"/>
             <parameter datatype="string"  min_n_values="1"  max_n_values="1"  name="subcomm_pages_csv"  default="#dotlrn.subcomm_page_home_title#,#new-portal.simple_2column_layout_name#,#dotlrn.subcomm_page_home_accesskey#;#dotlrn.subcomm_page_info_title#,#new-portal.simple_1column_layout_name#,#dotlrn.subcomm_page_info_accesskey#;#dotlrn.subcomm_page_calendar_title#,#new-portal.simple_1column_layout_name#,#dotlrn.subcomm_page_calendar_accesskey#;#dotlrn.subcomm_page_file_storage_title#,#new-portal.simple_1column_layout_name#,#dotlrn.subcomm_page_file_storage_accesskey#" description="default page names and layouts for subcomms"/>
             <parameter datatype="string"  min_n_values="1"  max_n_values="1"  name="subcommunities_pretty_name"  default="#dotlrn.subcommunities_pretty_name#" description="what subcomms are called"/>
Index: openacs-4/packages/dotlrn/install.xml
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/install.xml,v
diff -u -r1.15 -r1.16
--- openacs-4/packages/dotlrn/install.xml	15 May 2007 20:14:24 -0000	1.15
+++ openacs-4/packages/dotlrn/install.xml	7 Oct 2007 22:36:56 -0000	1.16
@@ -25,9 +25,17 @@
     <set-parameter package-key="acs-subsite" name="DefaultMaster" value="/packages/theme-zen/lib/lrn-master"/>
 
     <set-parameter-default package-key="dotlrn" name="class_instance_pages_csv" value="#dotlrn.class_page_home_title#,#theme-zen.Zen_2_column#,#dotlrn.class_page_home_accesskey#;#dotlrn.class_page_calendar_title#,#theme-zen.Zen_1_column#,#dotlrn.class_page_calendar_accesskey#;#dotlrn.class_page_file_storage_title#,#theme-zen.Zen_1_column#,#dotlrn.class_page_file_storage_accesskey#"/>
+
     <set-parameter-default package-key="dotlrn" name="club_pages_csv" value="#dotlrn.club_page_home_title#,#theme-zen.Zen_2_column#,#dotlrn.club_page_home_accesskey#;#dotlrn.club_page_calendar_title#,#theme-zen.Zen_1_column#,#dotlrn.club_page_calendar_accesskey#;#dotlrn.club_page_file_storage_title#,#theme-zen.Zen_1_column#,#dotlrn.club_page_file_storage_accesskey#;#dotlrn.club_page_people_title#,#theme-zen.Zen_1_column#,#dotlrn.club_page_people_accesskey#"/>
+
     <set-parameter-default package-key="dotlrn" name="subcomm_pages_csv" value="#dotlrn.subcomm_page_home_title,#theme-zen.Zen_2_column#,#dotlrn.subcomm_page_home_accesskey#;#dotlrn.subcomm_page_info_title#,#theme-zen.Zen_1_column#,#dotlrn.subcomm_page_info_accesskey#;#dotlrn.subcomm_page_calendar_title#,#theme-zen.Zen_1_column#,#dotlrn.subcomm_page_calendar_accesskey#;#dotlrn.subcomm_page_file_storage_title#,#theme-zen.Zen_1_column#,#dotlrn.subcomm_page_file_storage_accesskey#"/>
+
     <set-parameter-default package-key="dotlrn" name="user_portal_pages_csv" value="#dotlrn.user_portal_page_home_title#,#theme-zen.Zen_2_column#,#dotlrn.user_portal_page_home_accesskey#;#dotlrn.user_portal_page_calendar_title#,#theme-zen.Zen_1_column#,#dotlrn.user_portal_page_calendar_accesskey#;#dotlrn.user_portal_page_file_storage_title#,#theme-zen.Zen_1_column#,#dotlrn.user_portal_page_file_storage_accesskey#"/>
+
+    <set-parameter-default package-key="dotlrn" name="admin_layout_name" value="#theme-zen.Zen_2_column#"/>
+
+    <set-parameter-default package-key="dotlrn" name="non_member_layout_name" value="#theme-zen.Zen_2_column#"/>
+
     <set-parameter-default package-key="dotlrn" name="DefaultSiteTemplate" value="#theme-zen.Zen_Theme#"/>
 
     <mount package="dotlrn" mount-point="/dotlrn" instance-name="dotLRN"/>
Index: openacs-4/packages/dotlrn/lib/member-email-confirm.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/lib/member-email-confirm.tcl,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/dotlrn/lib/member-email-confirm.tcl	15 May 2007 20:14:25 -0000	1.2
+++ openacs-4/packages/dotlrn/lib/member-email-confirm.tcl	7 Oct 2007 22:36:56 -0000	1.3
@@ -21,7 +21,7 @@
     -form {
 	{from_addr:text {label "\#dotlrn.From\#"}}
 	{subject:text {label "\#dotlrn.Subject\#"}}
-	{email:richtext {label "\#dotlrn.Email_1\#"}}
+	{email:richtext {label "\#dotlrn.Email_1\#"} {html {rows 20 cols 80 style width:100%}}}
 	{btn_ok:text(submit) {label "[_ dotlrn.OK_Send_Email]"}}
 	{btn_cancel:text(submit) {label "[_ dotlrn.Cancel_Dont_Send_email]"}}
     } -on_request {
Index: openacs-4/packages/dotlrn/lib/member-email.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/lib/member-email.tcl,v
diff -u -r1.3 -r1.4
--- openacs-4/packages/dotlrn/lib/member-email.tcl	15 Dec 2006 22:45:22 -0000	1.3
+++ openacs-4/packages/dotlrn/lib/member-email.tcl	7 Oct 2007 22:36:56 -0000	1.4
@@ -70,7 +70,7 @@
 ad_form -extend -name "member_email" -form {
         {from_addr:text {label "From Address"} {html {size 40}}}
         {subject:text {label "Subject"} {html {size 40}}}
-        {email:richtext,optional {label "Message"} {html {rows 30 cols 80 wrap soft}} {htmlarea_p 0}}
+        {email:richtext,optional {label "Message"} {html {rows 30 cols 80}} {htmlarea_p 0}}
 	{community_id:text(hidden) {value $community_id}}
         {type:text(hidden) {value $type}}
 	{enabled_p:text(hidden) {value $type}}
Index: openacs-4/packages/dotlrn/tcl/community-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/tcl/community-procs.tcl,v
diff -u -r1.199 -r1.200
--- openacs-4/packages/dotlrn/tcl/community-procs.tcl	21 Jun 2007 19:04:56 -0000	1.199
+++ openacs-4/packages/dotlrn/tcl/community-procs.tcl	7 Oct 2007 22:36:56 -0000	1.200
@@ -231,6 +231,7 @@
             set non_member_portal_id [portal::create \
                 -name "$pretty_name Non-Member Portal" \
                 -default_page_name [dotlrn::parameter -name non_member_page_name] \
+                -layout_name [dotlrn::parameter -name non_member_layout_name] \
                 -context_id $community_id \
                 $user_id \
             ]
@@ -239,6 +240,7 @@
             set admin_portal_id [portal::create \
                 -name "$pretty_name Administration Portal" \
                 -default_page_name [dotlrn::parameter -name admin_page_name] \
+                -layout_name [dotlrn::parameter -name admin_layout_name] \
                 -context_id $community_id \
                 $user_id \
             ]
@@ -1035,13 +1037,22 @@
         {-package_id ""}
     } {
         Returns the community id depending on the package_id
-        we're at, or the package_id passed in
+        we're at, or the package_id passed in.
+
+	If no community_id found, return empty_string
+
+	@param package_id PackageID for which to search the community_id for
+	@return community_id of the community where the package is mounted, empty string if not found
     } {
         if {[empty_string_p $package_id]} {
             set package_id [site_node_closest_ancestor_package -default [ad_conn package_id] dotlrn]
         }
 
-        return [util_memoize "dotlrn_community::get_community_id_not_cached -package_id $package_id"]
+	if {$package_id ne ""} {
+	    return [util_memoize "dotlrn_community::get_community_id_not_cached -package_id $package_id"]
+	} else {
+	    return ""
+	}
     }
 
     ad_proc -private get_community_id_not_cached {
Index: openacs-4/packages/dotlrn/www/clone.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/clone.tcl,v
diff -u -r1.8 -r1.9
--- openacs-4/packages/dotlrn/www/clone.tcl	8 Aug 2006 21:26:23 -0000	1.8
+++ openacs-4/packages/dotlrn/www/clone.tcl	7 Oct 2007 22:36:56 -0000	1.9
@@ -75,7 +75,7 @@
     -label [_ dotlrn.Description] \
     -datatype text \
     -widget textarea \
-    -html {rows 5 cols 60 wrap soft} \
+    -html {rows 5 cols 60} \
     -optional \
     -value "[_ dotlrn.A_copy_of] $community_name"
 
Index: openacs-4/packages/dotlrn/www/community-edit.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/community-edit.tcl,v
diff -u -r1.14 -r1.15
--- openacs-4/packages/dotlrn/www/community-edit.tcl	15 Dec 2006 22:45:22 -0000	1.14
+++ openacs-4/packages/dotlrn/www/community-edit.tcl	7 Oct 2007 22:36:56 -0000	1.15
@@ -39,7 +39,7 @@
 
     {description:text(textarea),optional
 	{label "#dotlrn.Description#"}
-	{html {rows 5 cols 60 wrap soft}}
+	{html {rows 5 cols 60}}
 	{help_text "[_ dotlrn.lt_do_not_use_p_tags]"}
     }	
     
Index: openacs-4/packages/dotlrn/www/member-email.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/member-email.tcl,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/dotlrn/www/member-email.tcl	8 Aug 2006 21:26:24 -0000	1.2
+++ openacs-4/packages/dotlrn/www/member-email.tcl	7 Oct 2007 22:36:56 -0000	1.3
@@ -24,7 +24,7 @@
     {email_id:key}
     {from_addr:text {label "From Address"} {html {size 40}}}
     {subject:text {label "Subject"} {html {size 40}}}
-    {email:richtext,optional {label "Message"} {html {rows 30 cols 80 wrap soft}} {htmlarea_p 1}}
+    {email:richtext,optional {label "Message"} {html {rows 30 cols 80}}}
 } -on_request {
 
     set from_addr [cc_email_from_party [ad_conn user_id]]
@@ -53,4 +53,4 @@
     ad_returnredirect "one-community-admin"
     ad_script_abort
 
-}
\ No newline at end of file
+}
Index: openacs-4/packages/dotlrn/www/members.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/members.adp,v
diff -u -r1.24 -r1.25
--- openacs-4/packages/dotlrn/www/members.adp	8 Aug 2006 21:26:24 -0000	1.24
+++ openacs-4/packages/dotlrn/www/members.adp	7 Oct 2007 22:36:56 -0000	1.25
@@ -42,10 +42,13 @@
 
 <listtemplate name="members"></listtemplate>
 
-<h1>#dotlrn.Membership_Requests#</h1>
+<if @admin_p@ eq 1>
+  <if @pending_users:rowcount@ gt 0 or @approval_policy_p@ eq 1>
+    <h1>#dotlrn.Membership_Requests#</h1>
+    <listtemplate name="pending_users"></listtemplate>
+  </if>
+</if>
 
-<listtemplate name="pending_users"></listtemplate>
-
 <if @admin_p@ eq 1 and @subcomm_p@ eq 1 and @n_parent_users@ gt 0>
 
   <hr>
Index: openacs-4/packages/dotlrn/www/members.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/members.tcl,v
diff -u -r1.26 -r1.27
--- openacs-4/packages/dotlrn/www/members.tcl	4 Oct 2007 16:07:05 -0000	1.26
+++ openacs-4/packages/dotlrn/www/members.tcl	7 Oct 2007 22:36:56 -0000	1.27
@@ -31,6 +31,8 @@
 set context [list [list "one-community-admin" [_ dotlrn.Admin]] [_ dotlrn.Manage_Members]]
 set community_id [dotlrn_community::get_community_id]
 set spam_p [dotlrn::user_can_spam_community_p -user_id [ad_get_user_id] -community_id $community_id]
+set approval_policy_p [string eq [group::join_policy -group_id $community_id] "needs approval"]
+
 set referer [ns_conn url]
 set return_url "[ns_conn url]?[ns_conn query]"
 
@@ -73,23 +75,22 @@
 # Actions for Removing Members according to their role
 set rel_types [dotlrn_community::get_roles -community_id $community_id]
 
+set bulk_actions ""
+set bulk_actions_export_vars ""
+set actions ""
+
 if {$admin_p} {
-    set bulk_actions [list "[_ dotlrn.User_Admin_Page]" "member-add-3" "[_ dotlrn.User_Admin_Page]" "[_ dotlrn.Drop_Membership]" "deregister" "[_ dotlrn.Drop_Membership]"]
-    set bulk_actions_export_vars [list "user_id" "rel_type" "referer" "reset"]
+    set bulk_actions [list "[_ dotlrn.Drop_Membership]" "deregister" "[_ dotlrn.Drop_Membership]"]
+    set bulk_actions_export_vars [list "user_id" "referer" "reset"]
     set actions [list "CSV" "members?csv=yes" "[_ dotlrn.Comma_Separated_Values]"]
     foreach role $rel_types {
 		# lappend actions "[_ dotlrn.Remove_all] [lang::util::localize [lindex $role 3]]" "members?reset=1&reltype=[lindex $role 0]" "[lang::util::localize [lindex $role 2]]"
 		lappend actions "[_ dotlrn.Remove_all] [lang::util::localize [lindex $role 3]]" "member-confirm?reset=1&reltype=[lindex $role 0]" "[lang::util::localize [lindex $role 2]]"
     }
-
-} else {
-    set bulk_actions ""
-    set actions ""
-    set bulk_actions_export_vars ""
 }
 
-# Build the list-builder list
-template::list::create -name members -multirow members -key user_id -actions $actions -bulk_actions $bulk_actions -bulk_action_export_vars $bulk_actions_export_vars -elements {
+# Set the elements list
+set elm_list {
         portrait {
             label ""
             html "align right"
@@ -125,24 +126,31 @@
 	} role {
 	    label "[_ dotlrn.Role]"
 	    html "align left"
-	} action {
+	} 
+}
+
+if {$admin_p} {
+    lappend elm_list {action} {
 	    label "[_ dotlrn.Actions]"
 	    html "align left"
 	    display_template {
-		<if @members.user_id@ ne "">
+		<if @members.user_id@ ne \"\">
 		<a href="member-confirm?user_id=@members.user_id@&referer=@members.member_referer@">#dotlrn.Drop_Membership#</a> | 
 		<a href="member-add-2?user_id=@members.user_id@&referer=@members.member_referer@">#dotlrn.User_Admin_Page#</a>
 		</if>
 	    }
 	}
-    } -orderby {
+}
+
+# Build the list-builder list
+template::list::create -name members -multirow members -key user_id -actions $actions -bulk_actions $bulk_actions -bulk_action_export_vars $bulk_actions_export_vars -elements $elm_list -orderby {
 	last_name {orderby last_name}
 	first_names {orderby first_names}
 	email {orderby email}
 	role {orderby role}
-    } -selected_format csv -formats {
+} -selected_format csv -formats {
 	csv { output csv }
-    }
+}
 
 set orderby [template::list::orderby_clause -name "members" -orderby]
 
@@ -160,18 +168,18 @@
     template::list::write_output -name members
 }
 
-# Bulk action User Admin Page
-# Depending on the community_type, we have allowable rel_types
-set rel_types [dotlrn_community::get_roles -community_id $community_id]
-set selection "<select name=\"rel_type\">"
-foreach role $rel_types {
-    append selection "<option value=\"[lindex $role 0]\">[lang::util::localize [lindex $role 2]]</option>"
-}
-append selection "</select>"
-set size [multirow size members]
-if { $size > 0 } {
-    multirow append members "" "" "" "" "" $selection
-}
+# # Bulk action User Admin Page
+# # Depending on the community_type, we have allowable rel_types
+# set rel_types [dotlrn_community::get_roles -community_id $community_id]
+# set selection "<select name=\"rel_type\">"
+# foreach role $rel_types {
+#     append selection "<option value=\"[lindex $role 0]\">[lang::util::localize [lindex $role 2]]</option>"
+# }
+# append selection "</select>"
+# set size [multirow size members]
+# if { $size > 0 } {
+#     multirow append members "" "" "" "" "" $selection
+# }
 
 set user_ids ""
 db_multirow -extend { member_url pending_user_referer } pending_users select_pending_users {} {
Index: openacs-4/packages/dotlrn/www/spam.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/spam.tcl,v
diff -u -r1.26 -r1.27
--- openacs-4/packages/dotlrn/www/spam.tcl	15 May 2007 20:14:25 -0000	1.26
+++ openacs-4/packages/dotlrn/www/spam.tcl	7 Oct 2007 22:36:56 -0000	1.27
@@ -123,7 +123,7 @@
     -label [_ dotlrn.Message] \
     -datatype text \
     -widget textarea \
-    -html {rows 10 cols 80 wrap soft}
+    -html {rows 10 cols 80}
 
 
 element create spam_message format \
Index: openacs-4/packages/dotlrn/www/admin/class-instance-new.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/admin/class-instance-new.tcl,v
diff -u -r1.30 -r1.31
--- openacs-4/packages/dotlrn/www/admin/class-instance-new.tcl	28 Sep 2007 13:07:32 -0000	1.30
+++ openacs-4/packages/dotlrn/www/admin/class-instance-new.tcl	7 Oct 2007 22:36:56 -0000	1.31
@@ -118,7 +118,7 @@
     }
 
     if {${add_instructor}} {
-	set community_id $class_instance_id 
+        set community_id $class_instance_id 
         ad_returnredirect "add-instructor?[export_url_vars community_id referer]"
         ad_script_abort
     }
Index: openacs-4/packages/dotlrn/www/admin/class-new.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/admin/class-new.tcl,v
diff -u -r1.18 -r1.19
--- openacs-4/packages/dotlrn/www/admin/class-new.tcl	8 Aug 2006 21:26:28 -0000	1.18
+++ openacs-4/packages/dotlrn/www/admin/class-new.tcl	7 Oct 2007 22:36:56 -0000	1.19
@@ -56,7 +56,7 @@
     -label [_ dotlrn.Description] \
     -datatype text \
     -widget textarea \
-    -html {rows 5 cols 60 wrap soft} \
+    -html {rows 5 cols 60} \
     -optional
 
 element create add_class subject_key \
Index: openacs-4/packages/dotlrn/www/admin/classes-chunk.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/admin/classes-chunk.tcl,v
diff -u -r1.11 -r1.12
--- openacs-4/packages/dotlrn/www/admin/classes-chunk.tcl	8 Aug 2006 21:26:28 -0000	1.11
+++ openacs-4/packages/dotlrn/www/admin/classes-chunk.tcl	7 Oct 2007 22:36:56 -0000	1.12
@@ -55,7 +55,7 @@
 }
 
 if {![exists_and_not_null referer]} {
-    set referer "classes?[export_vars department_key]"
+    set referer "classes"
 }
 
 set query select_classes
@@ -82,7 +82,7 @@
 set actions ""
 
 if { $can_create } {
-    set actions [list "[_ dotlrn.new_class_1]" "[export_vars -base "class-new" -url { department_key referer }]"]
+    set actions [list "[_ dotlrn.new_class_1]" "[export_vars -base "class-new" -url { department_key referer }]" "[_ dotlrn.new_class_1]"]
 }
 
 template::list::create \
@@ -117,18 +117,14 @@
             label "[_ dotlrn.Actions]"
 	    display_template {
 		<if @can_instantiate@>
-		<nobr>
 		<small>\[
-		<a href="class-instance-new?class_key=@classes.class_key@">[_ dotlrn.new_class_instance]</a>
+            <a href="class-instance-new?class_key=@classes.class_key@&amp;referer=$referer" title="[_ dotlrn.new_class_instance]">[_ dotlrn.new_class_instance]</a>
 		       \]</small>
-		</nobr>
 		</if>
         <if @classes.n_instances@ eq 0>
-		<nobr>
 		<small>\[
-		<a href="class-delete?class_key=@classes.class_key@">[_ dotlrn.lt_Delete_class]</a>
+            <a href="class-delete?class_key=@classes.class_key@" title="[_ dotlrn.lt_Delete_class]">[_ dotlrn.lt_Delete_class]</a>
 		       \]</small>
-		</nobr>
         </if>
 	    }
         }
Index: openacs-4/packages/dotlrn/www/admin/club-new.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/admin/club-new.tcl,v
diff -u -r1.20 -r1.21
--- openacs-4/packages/dotlrn/www/admin/club-new.tcl	8 Aug 2006 21:26:28 -0000	1.20
+++ openacs-4/packages/dotlrn/www/admin/club-new.tcl	7 Oct 2007 22:36:56 -0000	1.21
@@ -42,7 +42,7 @@
 
     {description:text(textarea),optional
 	{label "#dotlrn.Description#"}
-	{html {rows 5 cols 60 wrap soft}}
+	{html {rows 5 cols 60}}
 	{help_text "[_ dotlrn.lt_do_not_use_p_tags]"}
     }	
     
Index: openacs-4/packages/dotlrn/www/admin/community-type.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/admin/community-type.tcl,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/dotlrn/www/admin/community-type.tcl	28 Jul 2004 07:24:12 -0000	1.1
+++ openacs-4/packages/dotlrn/www/admin/community-type.tcl	7 Oct 2007 22:36:56 -0000	1.2
@@ -42,7 +42,7 @@
 
 ad_form -extend -name "new_community_type" -form {
     {pretty_name:text {label "[_ dotlrn.Pretty_Name]"} {html {size 60 maxlength 100}}}
-    {description:text(textarea),optional {label "[_ dotlrn.Description]"} {html {rows 5 cols 60 wrap soft}}}
+    {description:text(textarea),optional {label "[_ dotlrn.Description]"} {html {rows 5 cols 60}}}
 } -validate {
     {community_type
 	{ ![dotlrn_community::type_exists $community_type] || 
Index: openacs-4/packages/dotlrn/www/admin/department-edit.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/admin/department-edit.tcl,v
diff -u -r1.9 -r1.10
--- openacs-4/packages/dotlrn/www/admin/department-edit.tcl	8 Aug 2006 21:26:28 -0000	1.9
+++ openacs-4/packages/dotlrn/www/admin/department-edit.tcl	7 Oct 2007 22:36:56 -0000	1.10
@@ -57,7 +57,7 @@
     -label "[_ dotlrn.Description]" \
     -datatype text \
     -widget textarea \
-    -html {rows 5 cols 60 wrap soft} \
+    -html {rows 5 cols 60} \
     -optional
 
 element create edit_department external_url \
Index: openacs-4/packages/dotlrn/www/admin/department-new.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/admin/department-new.tcl,v
diff -u -r1.11 -r1.12
--- openacs-4/packages/dotlrn/www/admin/department-new.tcl	8 Aug 2006 21:26:28 -0000	1.11
+++ openacs-4/packages/dotlrn/www/admin/department-new.tcl	7 Oct 2007 22:36:56 -0000	1.12
@@ -45,7 +45,7 @@
     -label "[_ dotlrn.Description]" \
     -datatype text \
     -widget textarea \
-    -html {rows 5 cols 60 wrap soft} \
+    -html {rows 5 cols 60} \
     -optional
 
 element create add_department external_url \
Index: openacs-4/packages/dotlrn/www/admin/users-spam.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn/www/admin/users-spam.tcl,v
diff -u -r1.6 -r1.7
--- openacs-4/packages/dotlrn/www/admin/users-spam.tcl	8 Aug 2006 21:26:28 -0000	1.6
+++ openacs-4/packages/dotlrn/www/admin/users-spam.tcl	7 Oct 2007 22:36:56 -0000	1.7
@@ -71,7 +71,7 @@
     -label [_ dotlrn.Message] \
     -datatype text \
     -widget textarea \
-    -html {rows 10 cols 80 wrap soft}
+    -html {rows 10 cols 80}
 
 element create spam_message referer \
     -label [_ dotlrn.Referer] \
Index: openacs-4/packages/dotlrn-assessment/dotlrn-assessment.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-assessment/dotlrn-assessment.info,v
diff -u -r1.3 -r1.4
--- openacs-4/packages/dotlrn-assessment/dotlrn-assessment.info	15 May 2007 20:14:26 -0000	1.3
+++ openacs-4/packages/dotlrn-assessment/dotlrn-assessment.info	7 Oct 2007 22:36:57 -0000	1.4
@@ -7,13 +7,13 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>t</singleton-p>
     
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/dotlrn-assessment-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/dotlrn-assessment-2.3.1.apm">
         <owner url="mailto:jopez@galileo.edu">Jose Pablo Escobedo Del Cid</owner>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
 
-        <provides url="dotlrn-assessment" version="2.3.0"/>
-        <requires url="dotlrn" version="2.3.0"/>
-        <requires url="assessment-portlet" version="2.3.0"/>
+        <provides url="dotlrn-assessment" version="2.3.1"/>
+        <requires url="dotlrn" version="2.3.1"/>
+        <requires url="assessment-portlet" version="2.3.1"/>
 
         <callbacks>
             <callback type="before-uninstall"  proc="dotlrn_assessment::uninstall"/>
Index: openacs-4/packages/dotlrn-bm/dotlrn-bm.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-bm/dotlrn-bm.info,v
diff -u -r1.11 -r1.12
--- openacs-4/packages/dotlrn-bm/dotlrn-bm.info	15 May 2007 20:14:26 -0000	1.11
+++ openacs-4/packages/dotlrn-bm/dotlrn-bm.info	7 Oct 2007 22:36:57 -0000	1.12
@@ -7,14 +7,14 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>t</singleton-p>
 
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/dotlrn-bm-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/dotlrn-bm-2.3.1.apm">
         <owner url="http://openacs.org">OpenACS</owner>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
         <vendor url="http://openacs.org">OpenACS</vendor>
 
-        <provides url="dotlrn-bm" version="2.3.0"/>
-        <requires url="bm-portlet" version="2.3.0"/>
-        <requires url="dotlrn" version="2.3.0"/>
+        <provides url="dotlrn-bm" version="2.3.1"/>
+        <requires url="bm-portlet" version="2.3.1"/>
+        <requires url="dotlrn" version="2.3.1"/>
 
         <parameters>
         <!-- No version parameters -->
Index: openacs-4/packages/dotlrn-calendar/dotlrn-calendar.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-calendar/dotlrn-calendar.info,v
diff -u -r1.17 -r1.18
--- openacs-4/packages/dotlrn-calendar/dotlrn-calendar.info	15 May 2007 20:14:26 -0000	1.17
+++ openacs-4/packages/dotlrn-calendar/dotlrn-calendar.info	7 Oct 2007 22:36:57 -0000	1.18
@@ -7,15 +7,15 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>t</singleton-p>
 
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/dotlrn-calendar-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/dotlrn-calendar-2.3.1.apm">
         <owner url="http://openacs.org">OpenACS</owner>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
         <vendor url="http://openacs.org">OpenACS</vendor>
 
-        <provides url="dotlrn-calendar" version="2.3.0"/>
-        <requires url="calendar-portlet" version="2.3.0"/>
-        <requires url="dotlrn" version="2.3.0"/>
-        <requires url="dotlrn-fs" version="2.3.0"/>
+        <provides url="dotlrn-calendar" version="2.3.1"/>
+        <requires url="calendar-portlet" version="2.3.1"/>
+        <requires url="dotlrn" version="2.3.1"/>
+        <requires url="dotlrn-fs" version="2.3.1"/>
 
         <parameters>
             <parameter datatype="string"  min_n_values="1"  max_n_values="1"  name="main_calendar_package_id"  description="The package_id of calendar mounted right under dotLRN"/>
Index: openacs-4/packages/dotlrn-dotlrn/dotlrn-dotlrn.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-dotlrn/dotlrn-dotlrn.info,v
diff -u -r1.18 -r1.19
--- openacs-4/packages/dotlrn-dotlrn/dotlrn-dotlrn.info	15 May 2007 20:14:27 -0000	1.18
+++ openacs-4/packages/dotlrn-dotlrn/dotlrn-dotlrn.info	7 Oct 2007 22:36:57 -0000	1.19
@@ -7,15 +7,15 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>t</singleton-p>
     
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/dotlrn-dotlrn-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/dotlrn-dotlrn-2.3.1.apm">
         <owner url="http://openasc.org">OpenACS</owner>
         <summary>Helper routines for dotLRN applets</summary>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
         <vendor url="http://openacs.org">OpenACS</vendor>
 
-        <provides url="dotlrn-dotlrn" version="2.3.0"/>
-        <requires url="dotlrn" version="2.3.0"/>
-        <requires url="dotlrn-portlet" version="2.3.0"/>
+        <provides url="dotlrn-dotlrn" version="2.3.1"/>
+        <requires url="dotlrn" version="2.3.1"/>
+        <requires url="dotlrn-portlet" version="2.3.1"/>
 
         <callbacks>
             <callback type="after-install"  proc="dotlrn_dotlrn::apm::after_install"/>
Index: openacs-4/packages/dotlrn-evaluation/dotlrn-evaluation.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-evaluation/dotlrn-evaluation.info,v
diff -u -r1.6 -r1.7
--- openacs-4/packages/dotlrn-evaluation/dotlrn-evaluation.info	15 May 2007 20:14:27 -0000	1.6
+++ openacs-4/packages/dotlrn-evaluation/dotlrn-evaluation.info	7 Oct 2007 22:36:57 -0000	1.7
@@ -7,13 +7,13 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>t</singleton-p>
     
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/dotlrn-evaluation-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/dotlrn-evaluation-2.3.1.apm">
         <owner url="mailto:jopez@galileo.edu">Jose Pablo Escobedo Del Cid</owner>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
 
-        <provides url="dotlrn-evaluation" version="2.3.0"/>
-        <requires url="dotlrn" version="2.3.0"/>
-        <requires url="evaluation-portlet" version="2.3.0"/>
+        <provides url="dotlrn-evaluation" version="2.3.1"/>
+        <requires url="dotlrn" version="2.3.1"/>
+        <requires url="evaluation-portlet" version="2.3.1"/>
 
         <callbacks>
             <callback type="before-uninstall"  proc="dotlrn_evaluation::uninstall"/>
Index: openacs-4/packages/dotlrn-faq/dotlrn-faq.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-faq/dotlrn-faq.info,v
diff -u -r1.17 -r1.18
--- openacs-4/packages/dotlrn-faq/dotlrn-faq.info	15 May 2007 20:14:28 -0000	1.17
+++ openacs-4/packages/dotlrn-faq/dotlrn-faq.info	7 Oct 2007 22:36:57 -0000	1.18
@@ -7,14 +7,14 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>t</singleton-p>
 
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/dotlrn-faq-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/dotlrn-faq-2.3.1.apm">
         <owner url="http://openacs.org">OpenACS</owner>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
         <vendor url="http://openacs.org">OpenACS</vendor>
 
-        <provides url="dotlrn-faq" version="2.3.0"/>
-        <requires url="dotlrn" version="2.3.0"/>
-        <requires url="faq-portlet" version="2.3.0"/>
+        <provides url="dotlrn-faq" version="2.3.1"/>
+        <requires url="dotlrn" version="2.3.1"/>
+        <requires url="faq-portlet" version="2.3.1"/>
 
         <parameters>
         <!-- No version parameters -->
Index: openacs-4/packages/dotlrn-forums/dotlrn-forums.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-forums/dotlrn-forums.info,v
diff -u -r1.15 -r1.16
--- openacs-4/packages/dotlrn-forums/dotlrn-forums.info	15 May 2007 20:14:28 -0000	1.15
+++ openacs-4/packages/dotlrn-forums/dotlrn-forums.info	7 Oct 2007 22:36:57 -0000	1.16
@@ -7,15 +7,15 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>t</singleton-p>
     
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/dotlrn-forums-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/dotlrn-forums-2.3.1.apm">
         <owner url="http://openacs.org">OpenACS</owner>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
         <vendor url="http://openacs.org">OpenACS</vendor>
         <maturity>0</maturity>
 
-        <provides url="dotlrn-forums" version="2.3.0"/>
-        <requires url="dotlrn" version="2.3.0"/>
-        <requires url="forums-portlet" version="2.3.0"/>
+        <provides url="dotlrn-forums" version="2.3.1"/>
+        <requires url="dotlrn" version="2.3.1"/>
+        <requires url="forums-portlet" version="2.3.1"/>
 
         <callbacks>
         </callbacks>
Index: openacs-4/packages/dotlrn-fs/dotlrn-fs.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-fs/dotlrn-fs.info,v
diff -u -r1.29 -r1.30
--- openacs-4/packages/dotlrn-fs/dotlrn-fs.info	15 May 2007 20:14:29 -0000	1.29
+++ openacs-4/packages/dotlrn-fs/dotlrn-fs.info	7 Oct 2007 22:36:58 -0000	1.30
@@ -7,15 +7,15 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>t</singleton-p>
     
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/dotlrn-fs-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/dotlrn-fs-2.3.1.apm">
         <owner url="http://openacs.org">OpenACS</owner>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
         <vendor url="http://openacs.org">OpenACS</vendor>
 
-        <provides url="dotlrn-fs" version="2.3.0"/>
-        <requires url="dotlrn" version="2.3.0"/>
+        <provides url="dotlrn-fs" version="2.3.1"/>
+        <requires url="dotlrn" version="2.3.1"/>
         <requires url="file-storage" version="5.3.0d1"/>
-        <requires url="fs-portlet" version="2.3.0"/>
+        <requires url="fs-portlet" version="2.3.1"/>
 
         <callbacks>
             <callback type="after-upgrade"  proc="dotlrn_fs::install::upgrade"/>
Index: openacs-4/packages/dotlrn-homework/dotlrn-homework.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-homework/dotlrn-homework.info,v
diff -u -r1.10 -r1.11
--- openacs-4/packages/dotlrn-homework/dotlrn-homework.info	15 May 2007 20:14:30 -0000	1.10
+++ openacs-4/packages/dotlrn-homework/dotlrn-homework.info	7 Oct 2007 22:36:58 -0000	1.11
@@ -7,16 +7,16 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>f</singleton-p>
 
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/dotlrn-homework-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/dotlrn-homework-2.3.1.apm">
         <owner url="mailto:dhogaza@pacifier.com">Don Baccus</owner>
         <summary>Provides a homework assignment dropboxes for dotLRN classes.</summary>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
         <vendor url="http://www.furfly.net">furfly.net, LLC</vendor>
 
-        <provides url="dotlrn-homework" version="2.3.0"/>
-        <requires url="dotlrn" version="2.3.0"/>
-        <requires url="dotlrn-fs" version="2.3.0"/>
-        <requires url="new-portal" version="2.3.0"/>
+        <provides url="dotlrn-homework" version="2.3.1"/>
+        <requires url="dotlrn" version="2.3.1"/>
+        <requires url="dotlrn-fs" version="2.3.1"/>
+        <requires url="new-portal" version="2.3.1"/>
 
         <callbacks>
             <callback type="after-install"  proc="dotlrn_homework::apm_callbacks::package_install"/>
Index: openacs-4/packages/dotlrn-homework/www/file-add.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-homework/www/file-add.tcl,v
diff -u -r1.4 -r1.5
--- openacs-4/packages/dotlrn-homework/www/file-add.tcl	8 Aug 2006 21:26:36 -0000	1.4
+++ openacs-4/packages/dotlrn-homework/www/file-add.tcl	7 Oct 2007 22:36:58 -0000	1.5
@@ -52,7 +52,7 @@
 ad_form -extend -name homework_form -form {
 
     {description:text(textarea),optional {label "[_ dotlrn-homework.Description]"}
-                                         {html {rows 5 cols 50 wrap physical}}}
+                                         {html {rows 5 cols 50}}}
 } -validate {
     {upload_file
       { [file size [template::util::file::get_property tmp_filename $upload_file]] <= [ad_parameter "MaximumFileSize"] }
Index: openacs-4/packages/dotlrn-homework/www/version-add.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-homework/www/version-add.tcl,v
diff -u -r1.3 -r1.4
--- openacs-4/packages/dotlrn-homework/www/version-add.tcl	20 Apr 2004 21:13:31 -0000	1.3
+++ openacs-4/packages/dotlrn-homework/www/version-add.tcl	7 Oct 2007 22:36:58 -0000	1.4
@@ -31,7 +31,7 @@
     file_id:key
     {upload_file:file                    {label "[_ dotlrn-homework.lt_version_filename]"}}
     {description:text(textarea),optional {label "[_ dotlrn-homework.lt_version_notes]"}
-                                         {html {rows 5 cols 50 wrap physical}}}
+                                         {html {rows 5 cols 50}}}
 } -edit_request {
 } -validate {
     {upload_file
Index: openacs-4/packages/dotlrn-news/dotlrn-news.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-news/dotlrn-news.info,v
diff -u -r1.13 -r1.14
--- openacs-4/packages/dotlrn-news/dotlrn-news.info	15 May 2007 20:14:30 -0000	1.13
+++ openacs-4/packages/dotlrn-news/dotlrn-news.info	7 Oct 2007 22:36:58 -0000	1.14
@@ -7,14 +7,14 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>t</singleton-p>
 
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/dotlrn-news-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/dotlrn-news-2.3.1.apm">
         <owner url="http://openacs.org">OpenACS</owner>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
         <vendor url="http://openacs.org">OpenACS</vendor>
 
-        <provides url="dotlrn-news" version="2.3.0"/>
-        <requires url="dotlrn" version="2.3.0"/>
-        <requires url="news-portlet" version="2.3.0"/>
+        <provides url="dotlrn-news" version="2.3.1"/>
+        <requires url="dotlrn" version="2.3.1"/>
+        <requires url="news-portlet" version="2.3.1"/>
 
         <parameters>
         <!-- No version parameters -->
Index: openacs-4/packages/dotlrn-photo-album/dotlrn-photo-album.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-photo-album/dotlrn-photo-album.info,v
diff -u -r1.6 -r1.7
--- openacs-4/packages/dotlrn-photo-album/dotlrn-photo-album.info	15 May 2007 20:14:31 -0000	1.6
+++ openacs-4/packages/dotlrn-photo-album/dotlrn-photo-album.info	7 Oct 2007 22:36:58 -0000	1.7
@@ -7,15 +7,15 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>t</singleton-p>
     
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/dotlrn-photo-album-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/dotlrn-photo-album-2.3.1.apm">
         <owner url="mailto:davis@xarg.net">Jeff Davis</owner>
         <vendor url="http://xarg.net">Xarg</vendor>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
 
-        <provides url="dotlrn-photo-album" version="2.3.0"/>
-        <requires url="dotlrn" version="2.3.0"/>
+        <provides url="dotlrn-photo-album" version="2.3.1"/>
+        <requires url="dotlrn" version="2.3.1"/>
         <requires url="photo-album" version="5.2.3"/>
-        <requires url="photo-album-portlet" version="2.3.0"/>
+        <requires url="photo-album-portlet" version="2.3.1"/>
 
         <callbacks>
           <callback type="after-install"  proc="dotlrn_photo_album::install"/>
Index: openacs-4/packages/dotlrn-portlet/dotlrn-portlet.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-portlet/dotlrn-portlet.info,v
diff -u -r1.22 -r1.23
--- openacs-4/packages/dotlrn-portlet/dotlrn-portlet.info	15 May 2007 20:14:31 -0000	1.22
+++ openacs-4/packages/dotlrn-portlet/dotlrn-portlet.info	7 Oct 2007 22:36:58 -0000	1.23
@@ -7,14 +7,14 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>t</singleton-p>
 
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/dotlrn-portlet-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/dotlrn-portlet-2.3.1.apm">
         <owner url="http://openacs.org">OpenACS</owner>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
         <vendor url="http://openacs.org">OpenACS</vendor>
 
-        <provides url="dotlrn-portlet" version="2.3.0"/>
-        <requires url="dotlrn" version="2.3.0"/>
-        <requires url="new-portal" version="2.3.0"/>
+        <provides url="dotlrn-portlet" version="2.3.1"/>
+        <requires url="dotlrn" version="2.3.1"/>
+        <requires url="new-portal" version="2.3.1"/>
 
         <callbacks>
             <callback type="before-uninstall"  proc="dotlrn_portlet::apm::before_uninstall"/>
Index: openacs-4/packages/dotlrn-random-photo/dotlrn-random-photo.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-random-photo/dotlrn-random-photo.info,v
diff -u -r1.4 -r1.5
--- openacs-4/packages/dotlrn-random-photo/dotlrn-random-photo.info	15 May 2007 20:14:32 -0000	1.4
+++ openacs-4/packages/dotlrn-random-photo/dotlrn-random-photo.info	7 Oct 2007 22:36:58 -0000	1.5
@@ -7,12 +7,12 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>f</singleton-p>
     
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/dotlrn-random-photo-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/dotlrn-random-photo-2.3.1.apm">
         <owner url="mailto:gmorales@galileo.edu">Gerardo Morales</owner>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
 
-        <provides url="dotlrn-random-photo" version="2.3.0"/>
-        <requires url="random-photo-portlet" version="2.3.0"/>
+        <provides url="dotlrn-random-photo" version="2.3.1"/>
+        <requires url="random-photo-portlet" version="2.3.1"/>
 
         <callbacks>
             <callback type="after-install"  proc="dotlrn_random_photo::install"/>
Index: openacs-4/packages/dotlrn-static/dotlrn-static.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-static/dotlrn-static.info,v
diff -u -r1.14 -r1.15
--- openacs-4/packages/dotlrn-static/dotlrn-static.info	15 May 2007 20:14:32 -0000	1.14
+++ openacs-4/packages/dotlrn-static/dotlrn-static.info	7 Oct 2007 22:36:58 -0000	1.15
@@ -7,14 +7,14 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>t</singleton-p>
 
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/dotlrn-static-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/dotlrn-static-2.3.1.apm">
         <owner url="http://openacs.org">OpenACS</owner>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
         <vendor url="http://openacs.org">OpenACS</vendor>
 
-        <provides url="dotlrn-static" version="2.3.0"/>
-        <requires url="dotlrn" version="2.3.0"/>
-        <requires url="static-portlet" version="2.3.0"/>
+        <provides url="dotlrn-static" version="2.3.1"/>
+        <requires url="dotlrn" version="2.3.1"/>
+        <requires url="static-portlet" version="2.3.1"/>
 
         <parameters>
         <!-- No version parameters -->
Index: openacs-4/packages/dotlrn-survey/dotlrn-survey.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-survey/dotlrn-survey.info,v
diff -u -r1.8 -r1.9
--- openacs-4/packages/dotlrn-survey/dotlrn-survey.info	15 May 2007 20:14:32 -0000	1.8
+++ openacs-4/packages/dotlrn-survey/dotlrn-survey.info	7 Oct 2007 22:36:59 -0000	1.9
@@ -7,15 +7,15 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>t</singleton-p>
 
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/dotlrn-survey-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/dotlrn-survey-2.3.1.apm">
         <owner url="mailto:dave@thedesignexperience.org">dave bauer</owner>
         <summary>dotLRN applet for Survey package</summary>
         <description format="text/html">dotLRN applet for Survey package</description>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
 
-        <provides url="dotlrn-survey" version="2.3.0"/>
-        <requires url="dotlrn" version="2.3.0"/>
-        <requires url="survey-portlet" version="2.3.0"/>
+        <provides url="dotlrn-survey" version="2.3.1"/>
+        <requires url="dotlrn" version="2.3.1"/>
+        <requires url="survey-portlet" version="2.3.1"/>
 
         <parameters>
         <!-- No version parameters -->
Index: openacs-4/packages/dotlrn-syllabus/dotlrn-syllabus.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-syllabus/dotlrn-syllabus.info,v
diff -u -r1.10 -r1.11
--- openacs-4/packages/dotlrn-syllabus/dotlrn-syllabus.info	15 May 2007 20:14:32 -0000	1.10
+++ openacs-4/packages/dotlrn-syllabus/dotlrn-syllabus.info	7 Oct 2007 22:36:59 -0000	1.11
@@ -7,14 +7,14 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>f</singleton-p>
     
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/dotlrn-syllabus-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/dotlrn-syllabus-2.3.1.apm">
         <owner url="http://openacs.org">OpenACS</owner>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
         <vendor url="http://openacs.org">OpenACS</vendor>
 
-        <provides url="dotlrn-syllabus" version="2.3.0"/>
+        <provides url="dotlrn-syllabus" version="2.3.1"/>
         <requires url="acs-service-contract" version="5.3.1a1"/>
-        <requires url="dotlrn" version="2.3.0"/>
+        <requires url="dotlrn" version="2.3.1"/>
 
         <callbacks>
         </callbacks>
Index: openacs-4/packages/dotlrn-weblogger/dotlrn-weblogger.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/dotlrn-weblogger/dotlrn-weblogger.info,v
diff -u -r1.9 -r1.10
--- openacs-4/packages/dotlrn-weblogger/dotlrn-weblogger.info	15 May 2007 20:14:33 -0000	1.9
+++ openacs-4/packages/dotlrn-weblogger/dotlrn-weblogger.info	7 Oct 2007 22:36:59 -0000	1.10
@@ -7,14 +7,14 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>t</singleton-p>
     
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/dotlrn-weblogger-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/dotlrn-weblogger-2.3.1.apm">
         <owner url="mailto:simon@bcuni.net">Simon Carstensen</owner>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
         <vendor url="http://www.collaboraid.biz">Collaboraid</vendor>
 
-        <provides url="dotlrn-weblogger" version="2.3.0"/>
-        <requires url="dotlrn" version="2.3.0"/>
-        <requires url="weblogger-portlet" version="2.3.0"/>
+        <provides url="dotlrn-weblogger" version="2.3.1"/>
+        <requires url="dotlrn" version="2.3.1"/>
+        <requires url="weblogger-portlet" version="2.3.1"/>
 
         <callbacks>
           <callback type="after-install"  proc="dotlrn_weblogger::install"/>
Index: openacs-4/packages/evaluation/evaluation.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/evaluation/evaluation.info,v
diff -u -r1.28 -r1.29
--- openacs-4/packages/evaluation/evaluation.info	27 Jun 2007 22:56:48 -0000	1.28
+++ openacs-4/packages/evaluation/evaluation.info	7 Oct 2007 22:36:59 -0000	1.29
@@ -10,7 +10,8 @@
     <version name="2.3.1" url="http://openacs.org/repository/download/apm/evaluation-2.3.1.apm">
         <owner url="mailto:jopez@galileo.edu">Jose Pablo Escobedo Del Cid</owner>
         <summary>This package allows the users (professors and students) to use  the system to submit and grade the tasks.</summary>
-        <release-date>2007-06-15</release-date>
+        <release-date>2007-09-08</release-date>
+
         <description format="text/html">This package allows the professors and TAs to assign tasks to the students and to grade them, and to the students to upload their answers and see their grades.</description>
         <maturity>0</maturity>
         <package_instance_name>#evaluation.Evaluations#</package_instance_name>
Index: openacs-4/packages/evaluation/www/evaluation-view.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/evaluation/www/evaluation-view.tcl,v
diff -u -r1.5 -r1.6
--- openacs-4/packages/evaluation/www/evaluation-view.tcl	8 Aug 2006 21:26:41 -0000	1.5
+++ openacs-4/packages/evaluation/www/evaluation-view.tcl	7 Oct 2007 22:36:59 -0000	1.6
@@ -116,7 +116,7 @@
     }
     {comments:text(textarea)
 	{label "[_ evaluation.Comments_1]"}
-	{html {rows 4 cols 40 wrap soft}}
+	{html {rows 4 cols 40}}
 	{value $comments}
     }
     {evaluation_date:date,to_sql(linear_date),from_sql(sql_date)
Index: openacs-4/packages/evaluation/www/task-view.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/evaluation/www/task-view.tcl,v
diff -u -r1.14 -r1.15
--- openacs-4/packages/evaluation/www/task-view.tcl	8 Aug 2006 21:26:41 -0000	1.14
+++ openacs-4/packages/evaluation/www/task-view.tcl	7 Oct 2007 22:36:59 -0000	1.15
@@ -79,7 +79,7 @@
 
     {description:richtext,optional  
 	{label "[_ evaluation.lt_Assignments_Descripti]"}
-	{html {rows 4 cols 40 wrap soft}}
+	{html {rows 4 cols 40}}
     }
 
     {due_date:date,to_sql(linear_date),from_sql(sql_date)
Index: openacs-4/packages/evaluation/www/admin/evaluations/evaluations-edit.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/evaluation/www/admin/evaluations/evaluations-edit.tcl,v
diff -u -r1.12 -r1.13
--- openacs-4/packages/evaluation/www/admin/evaluations/evaluations-edit.tcl	8 Aug 2006 21:26:42 -0000	1.12
+++ openacs-4/packages/evaluation/www/admin/evaluations/evaluations-edit.tcl	7 Oct 2007 22:36:59 -0000	1.13
@@ -37,7 +37,7 @@
 			   <input type=text name=grades.@evaluated_students.party_id@ value=\"@evaluated_students.grade@\" maxlength=\"6\" size=\"4\"> } ] \
 		  edit_reason \
 		  [list label "[_ evaluation.Edit_Reason_]" \
-		       display_template { <textarea rows="3" cols="15" wrap name=reasons.@evaluated_students.party_id@></textarea> } \
+		       display_template { <textarea rows="3" cols="15" name=reasons.@evaluated_students.party_id@></textarea> } \
 		      ] \
 		  show_student_p \
 		  [list label "[_ evaluation.lt_Allow_the_students_br]" \
Index: openacs-4/packages/evaluation/www/admin/evaluations/student-list.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/evaluation/www/admin/evaluations/student-list.tcl,v
diff -u -r1.22 -r1.23
--- openacs-4/packages/evaluation/www/admin/evaluations/student-list.tcl	8 Aug 2006 21:26:42 -0000	1.22
+++ openacs-4/packages/evaluation/www/admin/evaluations/student-list.tcl	7 Oct 2007 22:36:59 -0000	1.23
@@ -257,7 +257,7 @@
 	 display_template {<center> <input type=text name=grades_wa.@not_evaluated_wa.party_id@ maxlength=\"6\" size=\"3\"> <if @simple_p@ eq 1> <br> $max_grade max</if></center>} ] 
 lappend elements comments \
     [list label "[_ evaluation.Comments]" \
-	 display_template { <textarea rows="3" cols="15" wrap name=comments_wa.@not_evaluated_wa.party_id@></textarea> } \
+	 display_template { <textarea rows="3" cols="15" name=comments_wa.@not_evaluated_wa.party_id@></textarea> } \
 	] 
 lappend elements show_answer \
     [list label "[_ evaluation.see_grades]" \
@@ -347,7 +347,7 @@
 	 display_template { <center><input type=text name=grades_na.@not_evaluated_na.party_id@ maxlength=\"6\" size=\"3\"> <if @simple_p@ eq 1><br>$max_grade max.</if></center>}]
 lappend elements comments \
     [list label "[_ evaluation.Comments]" \
-	 display_template { <textarea rows="3" cols="15" wrap name=comments_na.@not_evaluated_na.party_id@></textarea> } \
+	 display_template { <textarea rows="3" cols="15" name=comments_na.@not_evaluated_na.party_id@></textarea> } \
 	]
 lappend elements show_answer \
     [list label "[_ evaluation.see_grades]" \
@@ -447,7 +447,7 @@
 	 display_template {<center> <input type=text name=grades_na.@class_students.party_id@ maxlength=\"6\" size=\"3\"> <if @simple_p@ eq 1><br>$max_grade max.</if></center>}]
 lappend elements comments \
     [list label "[_ evaluation.Comments]" \
-	 display_template { <textarea rows="3" cols="15" wrap name=comments_na.@class_students.party_id@></textarea> } \
+	 display_template { <textarea rows="3" cols="15" name=comments_na.@class_students.party_id@></textarea> } \
 	]
 lappend elements show_answer \
     [list label "[_ evaluation.see_grades]" \
Index: openacs-4/packages/evaluation/www/admin/tasks/task-add-edit.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/evaluation/www/admin/tasks/task-add-edit.tcl,v
diff -u -r1.29 -r1.30
--- openacs-4/packages/evaluation/www/admin/tasks/task-add-edit.tcl	15 Dec 2006 22:45:31 -0000	1.29
+++ openacs-4/packages/evaluation/www/admin/tasks/task-add-edit.tcl	7 Oct 2007 22:36:59 -0000	1.30
@@ -197,7 +197,7 @@
 
     {description:richtext,optional  
 	{label "[_ evaluation.lt_Assignments_Descripti]"}
-	{html {rows 4 cols 40 wrap soft}}
+	{html {rows 4 cols 40}}
     }
 
     {due_date:date,to_sql(linear_date),from_sql(sql_date),optional
Index: openacs-4/packages/evaluation/www/view/evaluation-view.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/evaluation/www/view/evaluation-view.tcl,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/evaluation/www/view/evaluation-view.tcl	8 Aug 2006 21:26:43 -0000	1.2
+++ openacs-4/packages/evaluation/www/view/evaluation-view.tcl	7 Oct 2007 22:37:00 -0000	1.3
@@ -113,7 +113,7 @@
     }
     {comments:text(textarea)
 	{label "[_ evaluation.Comments_1]"}
-	{html {rows 4 cols 40 wrap soft}}
+	{html {rows 4 cols 40}}
 	{value $comments}
     }
     {evaluation_date:date,to_sql(linear_date),from_sql(sql_date)
Index: openacs-4/packages/evaluation/www/view/task-view.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/evaluation/www/view/task-view.tcl,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/evaluation/www/view/task-view.tcl	8 Aug 2006 21:26:43 -0000	1.2
+++ openacs-4/packages/evaluation/www/view/task-view.tcl	7 Oct 2007 22:37:00 -0000	1.3
@@ -79,7 +79,7 @@
 
     {description:richtext,optional  
 	{label "[_ evaluation.lt_Assignments_Descripti]"}
-	{html {rows 4 cols 40 wrap soft}}
+	{html {rows 4 cols 40}}
     }
 
     {due_date:date,to_sql(linear_date),from_sql(sql_date)
Index: openacs-4/packages/evaluation-portlet/evaluation-portlet.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/evaluation-portlet/evaluation-portlet.info,v
diff -u -r1.9 -r1.10
--- openacs-4/packages/evaluation-portlet/evaluation-portlet.info	15 May 2007 20:14:33 -0000	1.9
+++ openacs-4/packages/evaluation-portlet/evaluation-portlet.info	7 Oct 2007 22:37:00 -0000	1.10
@@ -7,12 +7,12 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>t</singleton-p>
     
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/evaluation-portlet-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/evaluation-portlet-2.3.1.apm">
         <owner url="mailto:jopez@galileo.edu">Jose Pablo Escobedo Del Cid</owner>
-        <release-date>2007-03-27</release-date>
+        <release-date>2007-09-08</release-date>
 
-        <provides url="evaluation-portlet" version="2.3.0"/>
-        <requires url="evaluation" version="2.3.0"/>
+        <provides url="evaluation-portlet" version="2.3.1"/>
+        <requires url="evaluation" version="2.3.1"/>
 
         <callbacks>
             <callback type="after-install"  proc="evaluation_portlet::after_install"/>
Index: openacs-4/packages/faq/faq.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/faq/faq.info,v
diff -u -r1.21 -r1.22
--- openacs-4/packages/faq/faq.info	27 Jun 2007 22:51:41 -0000	1.21
+++ openacs-4/packages/faq/faq.info	7 Oct 2007 22:37:00 -0000	1.22
@@ -12,14 +12,14 @@
         <owner url="mailto:jennie@ybos.net">Jennie Kim Housman</owner>
         <owner url="mailto:wirth@ybos.net">Elizabeth Wirth</owner>
         <summary>Manage simple and categorized Question and Answer style FAQs with WYSIWYG and notification functionalities.</summary>
-        <release-date>2007-06-15</release-date>
+        <release-date>2007-07-11</release-date>
         <vendor url="http://ybos.net">Ybos Corporation</vendor>
         <description format="text/html">Handles frequently asked questions Q&amp;A presentation.  Can be one Q&amp;A per page or all presented flat.  Straightforward application with room for improvement. Support for notification as well as WYSIQYG Editor and Categories - both optional. Category trees are displayed flat. No multiple filters.</description>
         <maturity>2</maturity>
         <package_instance_name>#faq.FAQs#</package_instance_name>
 
         <provides url="faq" version="5.2.0d5"/>
-        <requires url="acs-kernel" version="5.3.1a1"/>
+        <requires url="acs-kernel" version="5.3.2"/>
         <requires url="categories" version="1.1"/>
         <requires url="notifications" version="5.3.0d1"/>
 
Index: openacs-4/packages/faq/sql/postgresql/faq-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/faq/sql/postgresql/faq-create.sql,v
diff -u -r1.5 -r1.6
--- openacs-4/packages/faq/sql/postgresql/faq-create.sql	1 Apr 2004 22:52:46 -0000	1.5
+++ openacs-4/packages/faq/sql/postgresql/faq-create.sql	7 Oct 2007 22:37:00 -0000	1.6
@@ -142,9 +142,4 @@
 
 
 \i faq-package-create.sql
-
-
-
-
-
-
+\i faq-sc-create.sql
Index: openacs-4/packages/faq/sql/postgresql/faq-drop.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/faq/sql/postgresql/faq-drop.sql,v
diff -u -r1.3 -r1.4
--- openacs-4/packages/faq/sql/postgresql/faq-drop.sql	17 May 2003 10:33:37 -0000	1.3
+++ openacs-4/packages/faq/sql/postgresql/faq-drop.sql	7 Oct 2007 22:37:00 -0000	1.4
@@ -2,6 +2,15 @@
 -- @author wirth@ybos.net
 --openacs port @samir.symphinity.com
 
+--drop triggers
+drop trigger faq_sc__itrg on faq_q_and_as;
+drop trigger faq_sc__dtrg on faq_q_and_as;
+drop trigger faq_sc__utrg on faq_q_and_as;
+
+drop function faq_sc__itrg ()
+drop function faq_sc__dtrg ()
+drop function faq_sc__utrg ()
+
 --drop functions
 drop function faq__new_q_and_a (integer,integer,varchar,varchar,integer,varchar,timestamptz,integer,varchar,integer);
 drop function faq__delete_q_and_a (integer);
Fisheye: Tag 1.1 refers to a dead (removed) revision in file `openacs-4/packages/faq/sql/postgresql/faq-sc-create.sql'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: Tag 1.1 refers to a dead (removed) revision in file `openacs-4/packages/faq/sql/postgresql/upgrade/upgrade-5.2.0d4-5.2.0d5.sql'.
Fisheye: No comparison available.  Pass `N' to diff?
Index: openacs-4/packages/faq-portlet/faq-portlet.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/faq-portlet/faq-portlet.info,v
diff -u -r1.21 -r1.22
--- openacs-4/packages/faq-portlet/faq-portlet.info	15 May 2007 20:14:35 -0000	1.21
+++ openacs-4/packages/faq-portlet/faq-portlet.info	7 Oct 2007 22:37:00 -0000	1.22
@@ -7,14 +7,14 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>t</singleton-p>
 
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/faq-portlet-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/faq-portlet-2.3.1.apm">
         <owner url="http://openacs.org">OpenACS</owner>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
         <vendor url="http://openacs.org">OpenACS</vendor>
 
-        <provides url="faq-portlet" version="2.3.0"/>
+        <provides url="faq-portlet" version="2.3.1"/>
         <requires url="faq" version="5.2.0d4"/>
-        <requires url="new-portal" version="2.3.0"/>
+        <requires url="new-portal" version="2.3.1"/>
 
         <parameters>
             <parameter datatype="number"  min_n_values="1"  max_n_values="1"  name="faq_portlet_force_region"  default="1" description="the portal region to put the faq portlet into"/>
Index: openacs-4/packages/file-storage/tcl/file-storage-callback-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/file-storage/tcl/file-storage-callback-procs.tcl,v
diff -u -r1.7 -r1.8
--- openacs-4/packages/file-storage/tcl/file-storage-callback-procs.tcl	30 Jan 2007 14:05:24 -0000	1.7
+++ openacs-4/packages/file-storage/tcl/file-storage-callback-procs.tcl	7 Oct 2007 22:37:00 -0000	1.8
@@ -109,6 +109,15 @@
     return "/file/$item_id/$name"
 }
 
+ad_proc -public -callback search::url -impl file_storage_object {
+    -object_id:required
+} {
+    Return the URL to the file_storage_object
+} {
+    set item_id [content::revision::item_id -revision_id $object_id]
+    set name [db_string item "select name from cr_items where item_id = :item_id" -default ""]
+    return "[ad_url]/file/$item_id/$name"
+}
 
 ad_proc -public -callback datamanager::copy_folder -impl datamanager {
      -object_id:required
Index: openacs-4/packages/forums/lib/message/post.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/forums/lib/message/post.tcl,v
diff -u -r1.16 -r1.17
--- openacs-4/packages/forums/lib/message/post.tcl	6 Jul 2007 12:13:25 -0000	1.16
+++ openacs-4/packages/forums/lib/message/post.tcl	7 Oct 2007 22:37:01 -0000	1.17
@@ -37,7 +37,7 @@
 	{label "[_ forums.Subject]"}
     }
     {message_body:richtext(richtext) 
-	{html {rows 20 cols 60 wrap soft}}
+	{html {rows 20 cols 60}}
 	{label "[_ forums.Body]"}
     }
     {forum_id:integer(hidden)
Index: openacs-4/packages/forums/lib/message/thread-chunk-oracle.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/forums/lib/message/thread-chunk-oracle.xql,v
diff -u -r1.4 -r1.5
--- openacs-4/packages/forums/lib/message/thread-chunk-oracle.xql	15 Mar 2005 20:06:45 -0000	1.4
+++ openacs-4/packages/forums/lib/message/thread-chunk-oracle.xql	7 Oct 2007 22:37:01 -0000	1.5
@@ -28,7 +28,7 @@
                    state,
                    user_id,
                    parent_id
-            from  $table_name
+            from  $table_name t
             where forum_id = :forum_id
             and   tree_sortkey between tree.left(:tree_sortkey) and tree.right(:tree_sortkey)
             order by $order_by
@@ -48,7 +48,7 @@
                    state,
                    user_id,
                    parent_id
-            from   $table_name
+            from   $table_name t
             where  forum_id = :forum_id
             and    tree_sortkey between tree.left(:tree_sortkey) and tree.right(:tree_sortkey)
             order  by $order_by
Index: openacs-4/packages/forums/lib/message/thread-chunk.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/forums/lib/message/thread-chunk.tcl,v
diff -u -r1.6 -r1.7
--- openacs-4/packages/forums/lib/message/thread-chunk.tcl	15 May 2007 20:14:39 -0000	1.6
+++ openacs-4/packages/forums/lib/message/thread-chunk.tcl	7 Oct 2007 22:37:01 -0000	1.7
@@ -90,6 +90,7 @@
 db_multirow -extend { posting_date_pretty direct_url number parent_number parent_direct_url reply_p viewed_p open_p} responses $query {} {
     set open_p t
     set tree_level [min [expr {$tree_level - $message(tree_level)}] 10]
+    set posting_date_ansi [lc_time_system_to_conn $posting_date_ansi]
     set posting_date_pretty [lc_time_fmt $posting_date_ansi "%x %X"]
     set direct_url "$direct_url_base\#$message_id"
     set number [expr [lsearch $message_id_list $message_id] + 1]
Index: openacs-4/packages/forums/tcl/form-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/forums/tcl/form-procs.tcl,v
diff -u -r1.8 -r1.9
--- openacs-4/packages/forums/tcl/form-procs.tcl	15 May 2007 20:14:40 -0000	1.8
+++ openacs-4/packages/forums/tcl/form-procs.tcl	7 Oct 2007 22:37:01 -0000	1.9
@@ -39,7 +39,7 @@
         -label [_ forums.Body] \
         -datatype richtext \
         -widget richtext \
-        -html {rows 20 cols 60 wrap soft style {width:100%}} \
+        -html {rows 20 cols 60 style {width:100%}} \
         $optional_switch
 
 }
@@ -102,7 +102,7 @@
 } {
   template::element create $form_name ${prefix}to_email \
     -label [_ forums.Email] \
-    -datatype text \
+    -datatype email \
     -widget text \
     -html {size 60}
 
@@ -116,7 +116,7 @@
     -label [_ forums.Your_Note] \
     -datatype text \
     -widget textarea \
-    -html {cols 80 rows 10 wrap hard}
+    -html {cols 80 rows 10}
 }
 
 ad_proc -public forums::form::search {
@@ -155,7 +155,7 @@
       -label [_ forums.Charter] \
       -datatype richtext \
       -widget richtext \
-      -html {cols 60 rows 10 wrap soft} \
+      -html {cols 60 rows 10} \
       -validate { {expr [string length $value] <= 4000 } {#forums.charter_max_chars#} } \
       -optional
 
Index: openacs-4/packages/forums/tcl/forums-callback-procs-oracle.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/forums/tcl/Attic/forums-callback-procs-oracle.xql,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/forums/tcl/forums-callback-procs-oracle.xql	28 Jan 2006 15:39:03 -0000	1.1
+++ openacs-4/packages/forums/tcl/forums-callback-procs-oracle.xql	7 Oct 2007 22:37:01 -0000	1.2
@@ -35,9 +35,8 @@
       <querytext>
         select subject, content, format
         from forums_messages
-        where message_id=:message_id 
--- lets just get the message instead of the whole thread
--- replace with a connect by
+        start with message_id=:message_id 
+        connect by prior message_id = parent_id
       </querytext>
     </fullquery>
 
Index: openacs-4/packages/forums/tcl/forums-callback-procs-postgresql.xql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/forums/tcl/Attic/forums-callback-procs-postgresql.xql,v
diff -u -r1.1 -r1.2
--- openacs-4/packages/forums/tcl/forums-callback-procs-postgresql.xql	28 Jan 2006 15:39:03 -0000	1.1
+++ openacs-4/packages/forums/tcl/forums-callback-procs-postgresql.xql	7 Oct 2007 22:37:01 -0000	1.2
@@ -35,9 +35,9 @@
       <querytext>
         select subject, content, format
         from forums_messages
-        where message_id=:message_id 
--- lets just get the message instead of the whole thread
--- replace with a connect by
+        where message_id=:message_id or (tree_sortkey between tree_left(:tree_sortkey) and tree_right(:tree_sortkey))
+        and forum_id=:forum_id
+        order by tree_sortkey
       </querytext>
     </fullquery>
 
Index: openacs-4/packages/forums/www/message-email.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/forums/www/message-email.adp,v
diff -u -r1.10 -r1.11
--- openacs-4/packages/forums/www/message-email.adp	8 Aug 2006 21:26:53 -0000	1.10
+++ openacs-4/packages/forums/www/message-email.adp	7 Oct 2007 22:37:01 -0000	1.11
@@ -2,13 +2,15 @@
   <property name="title">#forums.Email_Message# @message.forum_name;noquote@ - @message.subject;noquote@</property>
   <property name="context">@context;noquote@</property>
   <property name="header_stuff">
-    <link rel="stylesheet" type="text/css" media="all" href="/resources/forums/forums.css" />
-    <link rel="alternate stylesheet" type="text/css" media="all" title="flat" href="/resources/forums/flat.css" />
-    <link rel="alternate stylesheet" type="text/css" media="all" title="flat-collapse" href="/resources/forums/flat-collapse.css" />
-    <link rel="alternate stylesheet" type="text/css" media="all" title="collapse" href="/resources/forums/collapse.css" />
-    <link rel="alternate stylesheet" type="text/css" media="all" title="expand" href="/resources/forums/expand.css" />
+    <link rel="stylesheet" type="text/css" media="all" href="/resources/forums/forums.css">
+    <link rel="alternate stylesheet" type="text/css" media="all" title="flat" href="/resources/forums/flat.css">
+    <link rel="alternate stylesheet" type="text/css" media="all" title="flat-collapse" href="/resources/forums/flat-collapse.css">
+    <link rel="alternate stylesheet" type="text/css" media="all" title="collapse" href="/resources/forums/collapse.css">
+    <link rel="alternate stylesheet" type="text/css" media="all" title="expand" href="/resources/forums/expand.css">
   </property>
 
+  <if @link:rowcount@ not nil><property name="&link">link</property></if>
+
   <p>#forums.lt_Email_a_copy_of_the_f#</p>
 
   <div id="forum-thread">
Index: openacs-4/packages/forums/www/message-email.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/forums/www/message-email.tcl,v
diff -u -r1.13 -r1.14
--- openacs-4/packages/forums/www/message-email.tcl	15 Mar 2005 20:06:45 -0000	1.13
+++ openacs-4/packages/forums/www/message-email.tcl	7 Oct 2007 22:37:01 -0000	1.14
@@ -53,4 +53,48 @@
 lappend context [list "./message-view?message_id=$message(message_id)" "$message(subject)"]
 lappend context [_ forums.Email_to_a_friend]
 
+if {![template::multirow exists link]} {
+    template::multirow create link rel type href title lang media
+}
+
+template::multirow append link \
+    stylesheet \
+    text/css \
+    /resources/forums/forums.css \
+    "" \
+    [ad_conn language] \
+    all
+
+template::multirow append link \
+    "alternate stylesheet" \
+    text/css \
+    /resources/forums/flat.css \
+    "flat" \
+    [ad_conn language] \
+    all
+
+template::multirow append link \
+    "alternate stylesheet"  \
+    text/css \
+    /resources/forums/flat-collapse.css \
+    "flat-collapse" \
+    [ad_conn language] \
+    all
+
+template::multirow append link \
+    "alternate stylesheet" \
+    text/css \
+    /resources/forums/collapse.css \
+    "collapse" \
+    [ad_conn language] \
+    all 
+
+template::multirow append link \
+    "alternate stylesheet" \
+    text/css \
+    /resources/forums/expand.css \
+    "expand" \
+    [ad_conn language] \
+    all
+
 ad_return_template
Index: openacs-4/packages/forums/www/message-post-confirm.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/forums/www/message-post-confirm.adp,v
diff -u -r1.15 -r1.16
--- openacs-4/packages/forums/www/message-post-confirm.adp	8 Aug 2006 21:26:53 -0000	1.15
+++ openacs-4/packages/forums/www/message-post-confirm.adp	7 Oct 2007 22:37:01 -0000	1.16
@@ -2,13 +2,15 @@
 <property name="title">#forums.Confirm_Post_to_Forum# @forum.name;noquote@</property>
 <property name="context">@context;noquote@</property>
   <property name="header_stuff">
-    <link rel="stylesheet" type="text/css" media="all" href="/resources/forums/forums.css" />
-    <link rel="alternate stylesheet" type="text/css" media="all" title="flat" href="/resources/forums/flat.css" />
-    <link rel="alternate stylesheet" type="text/css" media="all" title="flat-collapse" href="/resources/forums/flat-collapse.css" />
-    <link rel="alternate stylesheet" type="text/css" media="all" title="collapse" href="/resources/forums/collapse.css" />
-    <link rel="alternate stylesheet" type="text/css" media="all" title="expand" href="/resources/forums/expand.css" />
+    <link rel="stylesheet" type="text/css" media="all" href="/resources/forums/forums.css">
+    <link rel="alternate stylesheet" type="text/css" media="all" title="flat" href="/resources/forums/flat.css">
+    <link rel="alternate stylesheet" type="text/css" media="all" title="flat-collapse" href="/resources/forums/flat-collapse.css">
+    <link rel="alternate stylesheet" type="text/css" media="all" title="collapse" href="/resources/forums/collapse.css">
+    <link rel="alternate stylesheet" type="text/css" media="all" title="expand" href="/resources/forums/expand.css">
   </property>
 
+  <if @link:rowcount@ not nil><property name="&link">link</property></if>
+
 <include src="/packages/forums/lib/message/post" forum_id="@forum_id@" 
                              &parent_message="parent_message"
                              anonymous_allowed_p="@anonymous_allowed_p@"
Index: openacs-4/packages/forums/www/message-post.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/forums/www/message-post.adp,v
diff -u -r1.11 -r1.12
--- openacs-4/packages/forums/www/message-post.adp	8 Aug 2006 21:26:53 -0000	1.11
+++ openacs-4/packages/forums/www/message-post.adp	7 Oct 2007 22:37:01 -0000	1.12
@@ -3,13 +3,15 @@
 <property name="context">@context;noquote@</property>
 <property name="focus">message.subject</property>
   <property name="header_stuff">
-    <link rel="stylesheet" type="text/css" media="all" href="/resources/forums/forums.css" />
-    <link rel="alternate stylesheet" type="text/css" media="all" title="flat" href="/resources/forums/flat.css" />
-    <link rel="alternate stylesheet" type="text/css" media="all" title="flat-collapse" href="/resources/forums/flat-collapse.css" />
-    <link rel="alternate stylesheet" type="text/css" media="all" title="collapse" href="/resources/forums/collapse.css" />
-    <link rel="alternate stylesheet" type="text/css" media="all" title="expand" href="/resources/forums/expand.css" />
+    <link rel="stylesheet" type="text/css" media="all" href="/resources/forums/forums.css">
+    <link rel="alternate stylesheet" type="text/css" media="all" title="flat" href="/resources/forums/flat.css">
+    <link rel="alternate stylesheet" type="text/css" media="all" title="flat-collapse" href="/resources/forums/flat-collapse.css">
+    <link rel="alternate stylesheet" type="text/css" media="all" title="collapse" href="/resources/forums/collapse.css">
+    <link rel="alternate stylesheet" type="text/css" media="all" title="expand" href="/resources/forums/expand.css">
   </property>
 
+  <if @link:rowcount@ not nil><property name="&link">link</property></if>
+
 <include src="/packages/forums/lib/message/post" forum_id="@forum_id@" 
                              &parent_message="parent_message"
                              anonymous_allowed_p="@anonymous_allowed_p@"
Index: openacs-4/packages/forums/www/message-post.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/forums/www/message-post.tcl,v
diff -u -r1.34 -r1.35
--- openacs-4/packages/forums/www/message-post.tcl	15 Mar 2005 20:06:45 -0000	1.34
+++ openacs-4/packages/forums/www/message-post.tcl	7 Oct 2007 22:37:01 -0000	1.35
@@ -66,6 +66,50 @@
 # Template variables
 #
 
+if {![template::multirow exists link]} {
+    template::multirow create link rel type href title lang media
+}
+
+template::multirow append link \
+    stylesheet \
+    text/css \
+    /resources/forums/forums.css \
+    "" \
+    [ad_conn language] \
+    all
+
+template::multirow append link \
+    "alternate stylesheet" \
+    text/css \
+    /resources/forums/flat.css \
+    "flat" \
+    [ad_conn language] \
+    all
+
+template::multirow append link \
+    "alternate stylesheet"  \
+    text/css \
+    /resources/forums/flat-collapse.css \
+    "flat-collapse" \
+    [ad_conn language] \
+    all
+
+template::multirow append link \
+    "alternate stylesheet" \
+    text/css \
+    /resources/forums/collapse.css \
+    "collapse" \
+    [ad_conn language] \
+    all 
+
+template::multirow append link \
+    "alternate stylesheet" \
+    text/css \
+    /resources/forums/expand.css \
+    "expand" \
+    [ad_conn language] \
+    all
+
 if {![string equal [template::form::get_button message] "preview"]} {
     set context [list [list "./forum-view?forum_id=$forum_id" [ad_quotehtml $forum(name)]]]
 
Index: openacs-4/packages/forums/www/message-view.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/forums/www/message-view.adp,v
diff -u -r1.32 -r1.33
--- openacs-4/packages/forums/www/message-view.adp	5 Jun 2007 17:33:50 -0000	1.32
+++ openacs-4/packages/forums/www/message-view.adp	7 Oct 2007 22:37:01 -0000	1.33
@@ -4,16 +4,21 @@
   <property name="displayed_object_id">@message_id@</property>
 
   <property name="header_stuff">
-    <link rel="stylesheet" type="text/css" media="all" href="/resources/forums/forums.css" />
-    <link rel="stylesheet" type="text/css" media="print" href="/resources/forums/print.css" />
-    <link rel="alternate stylesheet" type="text/css" media="all" title="flat" href="/resources/forums/flat.css" />
-    <link rel="alternate stylesheet" type="text/css" media="all" title="flat-collapse" href="/resources/forums/flat-collapse.css" />
-    <link rel="alternate stylesheet" type="text/css" media="all" title="collapse" href="/resources/forums/collapse.css" />
-    <link rel="alternate stylesheet" type="text/css" media="all" title="expand" href="/resources/forums/expand.css" />
-    <link rel="alternate stylesheet" type="text/css" media="all" title="print" href="/resources/forums/print.css" />
+    <link rel="stylesheet" type="text/css" media="all" href="/resources/forums/forums.css">
+    <link rel="stylesheet" type="text/css" media="print" href="/resources/forums/print.css">
+    <link rel="alternate stylesheet" type="text/css" media="all" title="flat" href="/resources/forums/flat.css">
+    <link rel="alternate stylesheet" type="text/css" media="all" title="flat-collapse" href="/resources/forums/flat-collapse.css">
+    <link rel="alternate stylesheet" type="text/css" media="all" title="collapse" href="/resources/forums/collapse.css">
+    <link rel="alternate stylesheet" type="text/css" media="all" title="expand" href="/resources/forums/expand.css">
+    <link rel="alternate stylesheet" type="text/css" media="all" title="print" href="/resources/forums/print.css">
     <script type="text/javascript" src="/resources/forums/forums.js"></script>
-    @dynamic_script;noquote@
+    <script type="text/javascript" src="/resources/forums/dynamic-comments.js"></script>
+    <script type="text/javascript">@dynamic_script;noquote@</script>
   </property>
+
+<if @link:rowcount@ not nil><property name="&link">link</property></if>
+<if @script:rowcount@ not nil><property name="&script">script</property></if>
+
 <h1>@page_title;noquote@</h1>
   <iframe width="0" height="0" border="0" style="width:0; height:0; border:0;" id="dynamic" name="dynamic" src="about:blank" title=""></iframe>
 
Index: openacs-4/packages/forums/www/message-view.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/forums/www/message-view.tcl,v
diff -u -r1.37 -r1.38
--- openacs-4/packages/forums/www/message-view.tcl	15 Jun 2007 11:53:51 -0000	1.37
+++ openacs-4/packages/forums/www/message-view.tcl	7 Oct 2007 22:37:01 -0000	1.38
@@ -101,8 +101,6 @@
 set thread_url [export_vars -base forum-view { { forum_id $message(forum_id) } }]
 
 set dynamic_script "
-  <script type=\"text/javascript\" src=\"/resources/forums/dynamic-comments.js\"></script>
-  <script type=\"text/javascript\">
   <!--
   collapse_symbol = '<img src=\"/resources/forums/Collapse16.gif\" width=\"16\" height=\"16\" ALT=\"collapse message\" border=\"0\" title=\"collapse message\">';
   expand_symbol = '<img src=\"/resources/forums/Expand16.gif\" width=\"16\" height=\"16\" ALT=\"expand message\" border=\"0\" title=\"expand message\">';
@@ -111,11 +109,83 @@
   rootdir = 'messages-get';
   sid = '$message(root_message_id)';
   //-->
-  </script>
 "
 
 if {$forum(presentation_type) eq "flat"} {
     set display_mode flat
 }
 
-set page_title "#forums.Thread_title#"
\ No newline at end of file
+# stylesheets
+if {![template::multirow exists link]} {
+    template::multirow create link rel type href title lang media
+}
+
+template::multirow append link \
+    stylesheet \
+    text/css \
+    /resources/forums/forums.css \
+    "" \
+    [ad_conn language] \
+    all
+
+template::multirow append link \
+    stylesheet \
+    text/css \
+    /resources/forums/print.css \
+    "" \
+    [ad_conn language] \
+    print
+    
+template::multirow append link \
+    "alternate stylesheet" \
+    text/css \
+    /resources/forums/flat.css \
+    "flat" \
+    [ad_conn language] \
+    all
+
+template::multirow append link \
+    "alternate stylesheet"  \
+    text/css \
+    /resources/forums/flat-collapse.css \
+    "flat-collapse" \
+    [ad_conn language] \
+    all
+
+template::multirow append link \
+    "alternate stylesheet" \
+    text/css \
+    /resources/forums/collapse.css \
+    "collapse" \
+    [ad_conn language] \
+    all 
+
+template::multirow append link \
+    "alternate stylesheet" \
+    text/css \
+    /resources/forums/expand.css \
+    "expand" \
+    [ad_conn language] \
+    all
+
+# js scripts
+if {![template::multirow exists script]} {
+    template::multirow create script type src charset defer content
+}
+
+template::multirow append script \
+    "text/javascript" \
+    "/resources/forums/forums.js"
+
+template::multirow append script \
+    "text/javascript" \
+    "/resources/forums/dynamic-comments.js"
+
+template::multirow append script \
+    "text/javascript" \
+    "" \
+    "" \
+    "" \
+    $dynamic_script
+
+set page_title "#forums.Thread_title#"
Index: openacs-4/packages/forums/www/moderate/message-delete.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/forums/www/moderate/message-delete.adp,v
diff -u -r1.10 -r1.11
--- openacs-4/packages/forums/www/moderate/message-delete.adp	8 Aug 2006 21:26:53 -0000	1.10
+++ openacs-4/packages/forums/www/moderate/message-delete.adp	7 Oct 2007 22:37:01 -0000	1.11
@@ -2,16 +2,12 @@
   <property name="title">#forums.Confirm_Delete# @message.subject;noquote@</property>
   <property name="context">#forums.delete#</property>
   <property name="header_stuff">
-    <link rel="stylesheet" type="text/css" media="all" href="/resources/forums/forums.css" />
+    <link rel="stylesheet" type="text/css" media="all" href="/resources/forums/forums.css">
     <script language="JavaScript" type="text/javascript" src="/resources/forums/forums.js"></script>
-    <script type="text/javascript"><!--
-      collapse_symbol = '<img src="/resources/forums/Collapse16.gif" width="16" height="16" ALT="-" border="0" title="collapse message">';
-      expand_symbol = '<img src="/resources/forums/Expand16.gif" width="16" height="16" ALT="+" border="0" title="expand message">';
-      loading_symbol = '<img src="/resources/forums/dyn_wait.gif" width="12" height="16" ALT="x" border="0">';
-      loading_message = '<i>Loading...</i>';
-      rootdir = 'messages-get';
-      sid = '5999';
-      //-->
-  </script></property>
+    <script type="text/javascript">@dynamic_script;noquote@</script>
+  </property>
 
+<if @link:rowcount@ not nil><property name="&link">link</property></if>
+<if @script:rowcount@ not nil><property name="&script">script</property></if>
+
   <include src="/packages/forums/lib/message/delete" &message="message" confirm_p="@confirm_p@" return_url="@return_url@" />
Index: openacs-4/packages/forums/www/moderate/message-delete.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/forums/www/moderate/message-delete.tcl,v
diff -u -r1.10 -r1.11
--- openacs-4/packages/forums/www/moderate/message-delete.tcl	17 Dec 2003 15:45:31 -0000	1.10
+++ openacs-4/packages/forums/www/moderate/message-delete.tcl	7 Oct 2007 22:37:01 -0000	1.11
@@ -18,4 +18,43 @@
 # Select the stuff
 forum::message::get -message_id $message_id -array message
 
+set dynamic_script "
+  <!--
+  collapse_symbol = '<img src=\"/resources/forums/Collapse16.gif\" width=\"16\" height=\"16\" ALT=\"collapse message\" border=\"0\" title=\"collapse message\">';
+  expand_symbol = '<img src=\"/resources/forums/Expand16.gif\" width=\"16\" height=\"16\" ALT=\"expand message\" border=\"0\" title=\"expand message\">';
+  loading_symbol = '<img src=\"/resources/forums/dyn_wait.gif\" width=\"12\" height=\"16\" ALT=\"x\" border=\"0\">';
+  loading_message = '<i>Loading...</i>';
+  rootdir = 'messages-get';
+  sid = '$message(root_message_id)';
+  //-->
+"
+# stylesheets
+if {![template::multirow exists link]} {
+    template::multirow create link rel type href title lang media
+}
+
+template::multirow append link \
+    stylesheet \
+    text/css \
+    /resources/forums/forums.css \
+    "" \
+    [ad_conn language] \
+    all
+
+# js scripts
+if {![template::multirow exists script]} {
+    template::multirow create script type src charset defer content
+}
+
+template::multirow append script \
+    "text/javascript" \
+    "/resources/forums/forums.js"
+
+template::multirow append script \
+    "text/javascript" \
+    "" \
+    "" \
+    "" \
+    $dynamic_script
+
 ad_return_template
Index: openacs-4/packages/forums-portlet/forums-portlet.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/forums-portlet/forums-portlet.info,v
diff -u -r1.12 -r1.13
--- openacs-4/packages/forums-portlet/forums-portlet.info	15 May 2007 20:14:41 -0000	1.12
+++ openacs-4/packages/forums-portlet/forums-portlet.info	7 Oct 2007 22:37:01 -0000	1.13
@@ -7,15 +7,15 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>t</singleton-p>
     
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/forums-portlet-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/forums-portlet-2.3.1.apm">
         <owner url="http://openacs.org">OpenACS</owner>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
         <vendor url="http://openacs.org">OpenACS</vendor>
         <maturity>0</maturity>
 
-        <provides url="forums-portlet" version="2.3.0"/>
+        <provides url="forums-portlet" version="2.3.1"/>
         <requires url="forums" version="1.3d5"/>
-        <requires url="new-portal" version="2.3.0"/>
+        <requires url="new-portal" version="2.3.1"/>
 
         <callbacks>
         </callbacks>
Index: openacs-4/packages/fs-portlet/fs-portlet.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/fs-portlet/fs-portlet.info,v
diff -u -r1.21 -r1.22
--- openacs-4/packages/fs-portlet/fs-portlet.info	15 May 2007 20:14:41 -0000	1.21
+++ openacs-4/packages/fs-portlet/fs-portlet.info	7 Oct 2007 22:37:01 -0000	1.22
@@ -7,14 +7,14 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>t</singleton-p>
     
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/fs-portlet-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/fs-portlet-2.3.1.apm">
         <owner url="http://openacs.org">OpenACS</owner>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
         <vendor url="http://openacs.org">OpenACS</vendor>
 
-        <provides url="fs-portlet" version="2.3.0"/>
+        <provides url="fs-portlet" version="2.3.1"/>
         <requires url="file-storage" version="5.3.0d1"/>
-        <requires url="new-portal" version="2.3.0"/>
+        <requires url="new-portal" version="2.3.1"/>
 
         <parameters>
             <parameter datatype="number"  min_n_values="1"  max_n_values="1"  name="ShowParametersLinkP"  default="1" description="Should we link to the file-storage instance's parameter settings page?"/>
Fisheye: Tag 1.1 refers to a dead (removed) revision in file `openacs-4/packages/imsld/catalog/imsld.es_GT.ISO-8859-1.xml'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: Tag 1.1 refers to a dead (removed) revision in file `openacs-4/packages/imsld/lib/choice-select.adp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: Tag 1.1 refers to a dead (removed) revision in file `openacs-4/packages/imsld/lib/imsld-master.adp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: Tag 1.1 refers to a dead (removed) revision in file `openacs-4/packages/imsld/lib/imsld-master.tcl'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: Tag 1.1 refers to a dead (removed) revision in file `openacs-4/packages/imsld/sql/postgresql/upgrade/upgrade-1.1d-1.2d.sql'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: Tag 1.1 refers to a dead (removed) revision in file `openacs-4/packages/imsld/www/admin/monitor/properties-frame.adp'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: Tag 1.1 refers to a dead (removed) revision in file `openacs-4/packages/imsld/www/resources/imsld.css'.
Fisheye: No comparison available.  Pass `N' to diff?
Fisheye: Tag 1.1 refers to a dead (removed) revision in file `openacs-4/packages/imsld/www/resources/imsld.js'.
Fisheye: No comparison available.  Pass `N' to diff?
Index: openacs-4/packages/imsld/www/resources/viewed.ico
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/imsld/www/resources/viewed.ico,v
diff -u -r1.1 -r1.2
Binary files differ
Index: openacs-4/packages/lars-blogger/lars-blogger.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/lars-blogger/lars-blogger.info,v
diff -u -r1.43 -r1.44
--- openacs-4/packages/lars-blogger/lars-blogger.info	15 May 2007 20:14:42 -0000	1.43
+++ openacs-4/packages/lars-blogger/lars-blogger.info	7 Oct 2007 22:37:02 -0000	1.44
@@ -7,15 +7,15 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>f</singleton-p>
     
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/lars-blogger-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/lars-blogger-2.3.1.apm">
         <owner url="mailto:lars@pinds.com">Lars Pind</owner>
         <summary>Individual or collaborative web logs.</summary>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
         <vendor url="http://www.openacs.org">OpenACS</vendor>
         <description format="text/html">Weblog creation and management with notifications, RSS, trackpack, technorati, blogroll, pings, archives, draft and published entries, includable templates for presenting on other pages, and permissioning for multiple users.</description>
         <maturity>0</maturity>
 
-        <provides url="lars-blogger" version="2.3.0"/>
+        <provides url="lars-blogger" version="2.3.1"/>
         <requires url="acs-datetime" version="5.2.2"/>
         <requires url="acs-tcl" version="5.3.1a1"/>
         <requires url="categories" version="1.1"/>
Index: openacs-4/packages/new-portal/new-portal.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/new-portal/new-portal.info,v
diff -u -r1.30 -r1.31
--- openacs-4/packages/new-portal/new-portal.info	15 May 2007 20:14:46 -0000	1.30
+++ openacs-4/packages/new-portal/new-portal.info	7 Oct 2007 22:37:02 -0000	1.31
@@ -8,14 +8,14 @@
     <singleton-p>t</singleton-p>
     <auto-mount>portal</auto-mount>
 
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/new-portal-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/new-portal-2.3.d2.apm">
         <owner url="http://openacs.org">OpenACS</owner>
         <summary>Portals.</summary>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
         <vendor url="http://openacs.org">OpenACS</vendor>
         <description format="text/plain">New Portal Package aka NPP. Portals are used to aggregate content from different sources within a single page.  Props to Ian Baker for &quot;Portal&quot;.</description>
 
-        <provides url="new-portal" version="2.3.0"/>
+        <provides url="new-portal" version="2.3.d21"/>
         <requires url="acs-kernel" version="5.3.1a1"/>
 
         <callbacks>
Index: openacs-4/packages/new-portal/sql/oracle/api-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/new-portal/sql/oracle/api-create.sql,v
diff -u -r1.43 -r1.44
--- openacs-4/packages/new-portal/sql/oracle/api-create.sql	15 May 2007 20:14:47 -0000	1.43
+++ openacs-4/packages/new-portal/sql/oracle/api-create.sql	7 Oct 2007 22:37:02 -0000	1.44
@@ -267,7 +267,8 @@
             -- now insert the pages from the portal template
             for page in (select *
                          from portal_pages
-                         where portal_id = portal.new.template_id)
+                         where portal_id = portal.new.template_id
+                         order by sort_key)
             loop
 
                 v_page_id := portal_page.new(
Fisheye: Tag 1.1 refers to a dead (removed) revision in file `openacs-4/packages/new-portal/sql/oracle/upgrade/upgrade-2.3.1d1-2.3.1d2.sql'.
Fisheye: No comparison available.  Pass `N' to diff?
Index: openacs-4/packages/new-portal/sql/postgresql/api-create.sql
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/new-portal/sql/postgresql/api-create.sql,v
diff -u -r1.15 -r1.16
--- openacs-4/packages/new-portal/sql/postgresql/api-create.sql	15 May 2007 20:14:47 -0000	1.15
+++ openacs-4/packages/new-portal/sql/postgresql/api-create.sql	7 Oct 2007 22:37:03 -0000	1.16
@@ -132,7 +132,7 @@
 
 select define_function_args('portal__new','portal_id,name,theme_id,layout_id,template_id,default_page_name,default_accesskey,object_type;portal,creation_date,creation_user,creation_ip,context_id');
 
-create function portal__new (integer,varchar,integer,integer,integer,varchar,varchar,varchar,timestamptz,integer,varchar,integer)
+create or replace function portal__new (integer,varchar,integer,integer,integer,varchar,varchar,varchar,timestamptz,integer,varchar,integer)
 returns integer as '
 declare
     p_portal_id                     alias for $1;
@@ -226,6 +226,7 @@
         for v_page in select *
                       from portal_pages
                       where portal_id = p_template_id
+		      order by sort_key
         loop
 
             v_page_id := portal_page__new(
Fisheye: Tag 1.1 refers to a dead (removed) revision in file `openacs-4/packages/new-portal/sql/postgresql/upgrade/upgrade-2.3.1d1-2.3.1d2.sql'.
Fisheye: No comparison available.  Pass `N' to diff?
Index: openacs-4/packages/new-portal/tcl/portal-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/new-portal/tcl/portal-procs.tcl,v
diff -u -r1.182 -r1.183
--- openacs-4/packages/new-portal/tcl/portal-procs.tcl	13 Aug 2007 06:10:27 -0000	1.182
+++ openacs-4/packages/new-portal/tcl/portal-procs.tcl	7 Oct 2007 22:37:03 -0000	1.183
@@ -145,7 +145,11 @@
 
     set page_name_list [list $default_page_name]
     set page_accesskey_list [list $default_accesskey]
-    set layout_name_list [list "#new-portal.simple_2column_layout_name#"]
+    if { [string eq $layout_name ""] } {
+        set layout_name_list [list "#new-portal.simple_2column_layout_name#"]
+    } else {
+        set layout_name_list [list $layout_name]
+    }
     
     if {![empty_string_p $csv_list]} {
         set page_name_and_layout_list [split [string trimright $csv_list ";"] ";"]
Fisheye: Tag 1.1 refers to a dead (removed) revision in file `openacs-4/packages/new-portal/tcl/test/new-portal-test-procs.tcl'.
Fisheye: No comparison available.  Pass `N' to diff?
Index: openacs-4/packages/news-portlet/news-portlet.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/news-portlet/news-portlet.info,v
diff -u -r1.19 -r1.20
--- openacs-4/packages/news-portlet/news-portlet.info	15 May 2007 20:14:50 -0000	1.19
+++ openacs-4/packages/news-portlet/news-portlet.info	7 Oct 2007 22:37:03 -0000	1.20
@@ -7,13 +7,13 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>t</singleton-p>
     
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/news-portlet-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/news-portlet-2.3.1.apm">
         <owner url="http://opeancs.org">OpenACS</owner>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
         <vendor url="http://openacs.org">OpenACS</vendor>
 
-        <provides url="news-portlet" version="2.3.0"/>
-        <requires url="new-portal" version="2.3.0"/>
+        <provides url="news-portlet" version="2.3.1"/>
+        <requires url="new-portal" version="2.3.1"/>
         <requires url="news" version="5.2.0d6"/>
 
         <callbacks>
Index: openacs-4/packages/photo-album/www/album-add.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/photo-album/www/album-add.tcl,v
diff -u -r1.4 -r1.5
--- openacs-4/packages/photo-album/www/album-add.tcl	18 Nov 2003 22:59:03 -0000	1.4
+++ openacs-4/packages/photo-album/www/album-add.tcl	7 Oct 2007 22:37:03 -0000	1.5
@@ -40,7 +40,7 @@
 template::element create album_add description -html { size 50 } \
   -label "[_ photo-album._Album]" -datatype text -optional
 
-template::element create album_add story -html {cols 50 rows 4 wrap soft} \
+template::element create album_add story -html {cols 50 rows 4} \
   -label "[_ photo-album._Album_1]" -datatype text -widget textarea -optional
 
 if { [template::form is_request album_add] } {
Index: openacs-4/packages/photo-album/www/album-edit.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/photo-album/www/album-edit.tcl,v
diff -u -r1.4 -r1.5
--- openacs-4/packages/photo-album/www/album-edit.tcl	18 Nov 2003 22:59:03 -0000	1.4
+++ openacs-4/packages/photo-album/www/album-edit.tcl	7 Oct 2007 22:37:03 -0000	1.5
@@ -47,7 +47,7 @@
 template::element create edit_album description -html { size 50} \
   -label "[_ photo-album._Album]"  -datatype text -optional
 
-template::element create edit_album story -html { cols 50 rows 4 wrap soft } \
+template::element create edit_album story -html { cols 50 rows 4 } \
   -label "[_ photo-album._Album_1]" -datatype text -widget textarea -optional
 
 
Index: openacs-4/packages/photo-album/www/photo-add.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/photo-album/www/photo-add.tcl,v
diff -u -r1.6 -r1.7
--- openacs-4/packages/photo-album/www/photo-add.tcl	29 Jun 2004 10:18:45 -0000	1.6
+++ openacs-4/packages/photo-album/www/photo-add.tcl	7 Oct 2007 22:37:03 -0000	1.7
@@ -44,7 +44,7 @@
 element create photo_upload description -html { size 50} \
   -label "[_ photo-album._Photo]" -optional -help_text "[_ photo-album.lt_OPTIONAL_Displayed_wh]" -datatype text
 
-element create photo_upload story -html { cols 50 rows 4 wrap soft } \
+element create photo_upload story -html { cols 50 rows 4 } \
   -label "[_ photo-album._Photo_1]" -optional -help_text "[_ photo-album.OPTIONAL]" -datatype text -widget textarea
 
 element set_properties photo_upload album_id -value $album_id
Index: openacs-4/packages/photo-album/www/photo-edit.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/photo-album/www/photo-edit.tcl,v
diff -u -r1.4 -r1.5
--- openacs-4/packages/photo-album/www/photo-edit.tcl	18 Nov 2003 22:59:03 -0000	1.4
+++ openacs-4/packages/photo-album/www/photo-edit.tcl	7 Oct 2007 22:37:03 -0000	1.5
@@ -59,7 +59,7 @@
 template::element create edit_photo description -html { size 50} \
   -label "<#_Description#>" -help_text "Displayed when viewing the photo" -optional -datatype text
 
-template::element create edit_photo story -html { cols 50 rows 4 wrap soft } \
+template::element create edit_photo story -html { cols 50 rows 4 } \
   -label "<#_Story#>" -optional -datatype text  -help_text "Displayed when viewing the photo" -widget textarea
 
 template::element create edit_photo submit_b -widget submit \
Index: openacs-4/packages/photo-album-portlet/photo-album-portlet.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/photo-album-portlet/photo-album-portlet.info,v
diff -u -r1.7 -r1.8
--- openacs-4/packages/photo-album-portlet/photo-album-portlet.info	15 May 2007 20:14:52 -0000	1.7
+++ openacs-4/packages/photo-album-portlet/photo-album-portlet.info	7 Oct 2007 22:37:04 -0000	1.8
@@ -7,13 +7,13 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>t</singleton-p>
     
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/photo-album-portlet-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/photo-album-portlet-2.3.1.apm">
         <owner url="mailto:davis@xarg.net">Jeff Davis</owner>
         <vendor url="http://xarg.net">Xarg</vendor>
-        <release-date>2007-04-22</release-date>
-	<provides url="photo-album-portlet" version="2.3.0"/>
+        <release-date>2007-09-08</release-date>
+	<provides url="photo-album-portlet" version="2.3.1"/>
         <requires url="photo-album" version="5.2.3"/>
-        <requires url="new-portal" version="2.3.0"/>
+        <requires url="new-portal" version="2.3.1"/>
 
         <callbacks>
             <callback type="after-install"  proc="photo_album_portlet::after_install"/>
Index: openacs-4/packages/profile-provider/profile-provider.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/profile-provider/profile-provider.info,v
diff -u -r1.11 -r1.12
--- openacs-4/packages/profile-provider/profile-provider.info	15 May 2007 20:14:52 -0000	1.11
+++ openacs-4/packages/profile-provider/profile-provider.info	7 Oct 2007 22:37:04 -0000	1.12
@@ -7,12 +7,12 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>t</singleton-p>
     
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/profile-provider-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/profile-provider-2.3.1.apm">
         <owner url="http://openacs.org">OpenACS</owner>
         <vendor url="http://openacs.org">OpenACS</vendor>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
 
-        <provides url="profile-provider" version="2.3.0"/>
+        <provides url="profile-provider" version="2.3.1"/>
         <requires url="acs-service-contract" version="5.3.1a1"/>
 
         <callbacks>
Index: openacs-4/packages/random-photo-portlet/random-photo-portlet.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/random-photo-portlet/random-photo-portlet.info,v
diff -u -r1.5 -r1.6
--- openacs-4/packages/random-photo-portlet/random-photo-portlet.info	15 May 2007 20:14:52 -0000	1.5
+++ openacs-4/packages/random-photo-portlet/random-photo-portlet.info	7 Oct 2007 22:37:04 -0000	1.6
@@ -7,12 +7,12 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>f</singleton-p>
     
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/random-photo-portlet-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/random-photo-portlet-2.3.1.apm">
         <owner url="mailto:gmorales@galileo.edu">Gerardo Morales</owner>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
 
-        <provides url="random-photo-portlet" version="2.3.0"/>
-        <requires url="dotlrn" version="2.3.0"/>
+        <provides url="random-photo-portlet" version="2.3.1"/>
+        <requires url="dotlrn" version="2.3.1"/>
 
         <callbacks>
             <callback type="after-install"  proc="rphoto_portlet::after_install"/>
Index: openacs-4/packages/static-portlet/static-portlet.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/static-portlet/static-portlet.info,v
diff -u -r1.20 -r1.21
--- openacs-4/packages/static-portlet/static-portlet.info	15 May 2007 20:14:53 -0000	1.20
+++ openacs-4/packages/static-portlet/static-portlet.info	7 Oct 2007 22:37:04 -0000	1.21
@@ -7,14 +7,14 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>f</singleton-p>
 
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/static-portlet-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/static-portlet-2.3.1.apm">
         <owner url="http://openacs.org">OpenACS</owner>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
         <vendor url="http://openacs.org">OpenACS</vendor>
 
-        <provides url="static-portlet" version="2.3.0"/>
-        <requires url="dotlrn" version="2.3.0"/>
-        <requires url="new-portal" version="2.3.0"/>
+        <provides url="static-portlet" version="2.3.1"/>
+        <requires url="dotlrn" version="2.3.1"/>
+        <requires url="new-portal" version="2.3.1"/>
 
         <parameters>
             <parameter datatype="string"  min_n_values="1"  max_n_values="1"  name="static_admin_portlet_pretty_name"  default="#static-portlet.admin_portlet_pretty_name#" description="the name for the static admin portlet in the UI"/>
Index: openacs-4/packages/static-portlet/www/element.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/static-portlet/www/element.tcl,v
diff -u -r1.15 -r1.16
--- openacs-4/packages/static-portlet/www/element.tcl	15 Dec 2006 22:45:43 -0000	1.15
+++ openacs-4/packages/static-portlet/www/element.tcl	7 Oct 2007 22:37:04 -0000	1.16
@@ -53,7 +53,7 @@
 ad_form -name static_element -form {
     element_content_id:key
     {pretty_name:text(text)     {label "[_ static-portlet.Name]"} {html {size 60}}}
-    {content:richtext(richtext)     {label "[_ static-portlet.Content]"} {html {rows 15 cols 80 wrap soft}}}
+    {content:richtext(richtext)     {label "[_ static-portlet.Content]"} {html {rows 15 cols 80}}}
 }
 
 if {[lsearch $templates $type] >= 0} {
Index: openacs-4/packages/survey-portlet/survey-portlet.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/survey-portlet/survey-portlet.info,v
diff -u -r1.8 -r1.9
--- openacs-4/packages/survey-portlet/survey-portlet.info	15 May 2007 20:14:54 -0000	1.8
+++ openacs-4/packages/survey-portlet/survey-portlet.info	7 Oct 2007 22:37:04 -0000	1.9
@@ -7,14 +7,14 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>t</singleton-p>
 
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/survey-portlet-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/survey-portlet-2.3.1.apm">
         <owner url="mailto:dave@thedesignexperience.org">dave bauer</owner>
         <summary>Survey package portlet for new-portal</summary>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
         <description format="text/html">Survey package portlet for new-portal</description>
 
-        <provides url="survey-portlet" version="2.3.0"/>
-        <requires url="new-portal" version="2.3.0"/>
+        <provides url="survey-portlet" version="2.3.1"/>
+        <requires url="new-portal" version="2.3.1"/>
         <requires url="survey" version="5.0.1"/>
 
         <parameters>
Index: openacs-4/packages/theme-selva/theme-selva.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/theme-selva/theme-selva.info,v
diff -u -r1.18 -r1.19
--- openacs-4/packages/theme-selva/theme-selva.info	15 May 2007 20:14:54 -0000	1.18
+++ openacs-4/packages/theme-selva/theme-selva.info	7 Oct 2007 22:37:04 -0000	1.19
@@ -8,14 +8,14 @@
     <singleton-p>f</singleton-p>
     <auto-mount>theme-selva</auto-mount>
 
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/theme-selva-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/theme-selva-2.3.1.apm">
         <owner url="http:/www.weg.ee.usyd.edu.au">Rafael Calvo</owner>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
         <vendor url="http://www.weg.usyd.edu.au"></vendor>
         <maturity>0</maturity>
 
-        <provides url="theme-selva" version="2.3.0"/>
-        <requires url="dotlrn" version="2.3.0"/>
+        <provides url="theme-selva" version="2.3.1"/>
+        <requires url="dotlrn" version="2.3.1"/>
 
         <callbacks>
             <callback type="after-upgrade"  proc="theme_selva::apm::after_upgrade"/>
Index: openacs-4/packages/theme-zen/theme-zen.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/theme-zen/theme-zen.info,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/theme-zen/theme-zen.info	15 May 2007 20:14:55 -0000	1.2
+++ openacs-4/packages/theme-zen/theme-zen.info	7 Oct 2007 22:37:05 -0000	1.3
@@ -8,14 +8,14 @@
     <singleton-p>t</singleton-p>
     <auto-mount>theme-zen</auto-mount>
 
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/theme-zen-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/theme-zen-2.3.1.apm">
         <owner url="http:/www.weg.ee.usyd.edu.au">Rafael Calvo</owner>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
         <vendor url="http://www.weg.usyd.edu.au"></vendor>
         <maturity>0</maturity>
 
-        <provides url="theme-zen" version="2.3.0"/>
-        <requires url="dotlrn" version="2.3.0"/>
+        <provides url="theme-zen" version="2.3.1"/>
+        <requires url="dotlrn" version="2.3.1"/>
 
         <callbacks>
             <callback type="after-install"  proc="theme_zen::apm::after_install"/>
@@ -28,6 +28,7 @@
             <parameter datatype="string"  min_n_values="1"  max_n_values="1"  name="CssUrl"  default="/resources/theme-zen/css/color/blue.css" description="default css_url"/>
             <parameter datatype="string"  min_n_values="1"  max_n_values="1" name="dotLRNToZenMap"  default="#new-portal.simple_1column_layout_name# #theme-zen.Zen_1_column# #new-portal.simple_2column_layout_name# #theme-zen.Zen_2_column# #new-portal.simple_3column_layout_name# #theme-zen.Zen_3_column#" description="list of old layout/new layout names used to update and existing .LRN site"/>
             <parameter datatype="string"  min_n_values="1"  max_n_values="1"  name="GenericCommunityTab"  default="0" description="Use a generic name for the community tab"/>
+            <parameter datatype="string"  min_n_values="1"  max_n_values="1"  name="logoImageAttributes" default="src /resources/theme-zen/images/global/dotLRN-logo.gif alt .LRN width 82 height 45" description="List of name value pairs for HTML attributes for the image tag of the logo"/>
         </parameters>
 
     </version>
Index: openacs-4/packages/theme-zen/lib/lrn-master.adp
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/theme-zen/lib/lrn-master.adp,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/theme-zen/lib/lrn-master.adp	15 May 2007 20:14:55 -0000	1.2
+++ openacs-4/packages/theme-zen/lib/lrn-master.adp	7 Oct 2007 22:37:05 -0000	1.3
@@ -16,7 +16,9 @@
   <div id="skiptocontent"><a href="#content-wrapper" title="#theme-zen.skip_to_main_content#" accesskey="k">#theme-zen.skip_to_main_content#</a></div>
   <div id="header">
     <div id="logo">
-      <img src="/resources/theme-zen/images/global/dotLRN-logo.gif" alt=".LRN" width="82" height="45" />
+      <if @img_attrib@ not nil>
+        <img @img_attrib;noquote@>
+      </if>
     </div>
     <div id="header-navigation">
       <ul class="compact">
Index: openacs-4/packages/theme-zen/lib/lrn-master.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/theme-zen/lib/lrn-master.tcl,v
diff -u -r1.3 -r1.4
--- openacs-4/packages/theme-zen/lib/lrn-master.tcl	7 Jun 2007 14:26:33 -0000	1.3
+++ openacs-4/packages/theme-zen/lib/lrn-master.tcl	7 Oct 2007 22:37:05 -0000	1.4
@@ -18,6 +18,14 @@
     set system_url ""
 }
 
+# Logo
+array set attributes [parameter::get_from_package_key -package_key "theme-zen" -parameter logoImageAttributes]
+set img_attrib ""
+foreach name [array names attributes] {
+    append img_attrib " $name=\"$attributes($name)\""
+}
+
+
 # Get user information
 set sw_admin_p [acs_user::site_wide_admin_p -user_id $untrusted_user_id]
 if { $untrusted_user_id != 0 } {
Index: openacs-4/packages/theme-zen/tcl/navigation-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/theme-zen/tcl/navigation-procs.tcl,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/theme-zen/tcl/navigation-procs.tcl	15 May 2007 20:14:56 -0000	1.2
+++ openacs-4/packages/theme-zen/tcl/navigation-procs.tcl	7 Oct 2007 22:37:05 -0000	1.3
@@ -30,60 +30,68 @@
 namespace eval zen {
 
     ad_proc -public portal_navbar {
-	
+        
     } {
-	A helper procedure that generates the Navbar, ie the tabs,
-	for dotlrn. It is called from the zen-master template.
+        A helper procedure that generates the Navbar, ie the tabs,
+        for dotlrn. It is called from the zen-master template.
     } {
-	set current_url [ad_conn url]
+        set current_url [ad_conn url]
         set dotlrn_url [dotlrn::get_url]
 
-	# Set up some basic stuff
-	set community_id [dotlrn_community::get_community_id]
+        # Set up some basic stuff
+        set community_id [dotlrn_community::get_community_id]
 
-	# Get user information
-	set sw_admin_p 0
-	set user_id [ad_conn user_id]
-	set untrusted_user_id [ad_conn untrusted_user_id]
-	if { $untrusted_user_id != 0 } {
-	    set user_name [person::name -person_id $untrusted_user_id]
-	    set pvt_home_url [ad_pvt_home]
-	    set pvt_home_name [_ acs-subsite.Your_Account]
-	    set logout_url [ad_get_logout_url]
-	    
-	    # Site-wide admin link
-	    set admin_url {}
-	    
-	    set sw_admin_p [acs_user::site_wide_admin_p -user_id $untrusted_user_id]
-	    
-	    if { $sw_admin_p } {
-		set admin_url "/acs-admin/"
-		set locale_admin_url "/acs-lang/admin"
-		set dotlrn_admin_url "${dotlrn_url}/admin/"
-	    } else {
-		set subsite_admin_p [permission::permission_p \
-					 -object_id [subsite::get_element -element object_id] \
-					 -privilege admin \
-					 -party_id $untrusted_user_id]
-		
-		if { $subsite_admin_p  } {
-		    set admin_url "[subsite::get_element -element url]admin/"
-		}
-	    }
-	} else {
-	    set login_url [ad_get_login_url -return]
-	    set user_name {}
-	}
-	
-	set navbar "<ul>"
+        # Get user information
+        set sw_admin_p 0
+        set dotlrn_admin_p 0
+        set user_id [ad_conn user_id]
+        set untrusted_user_id [ad_conn untrusted_user_id]
+        if { $untrusted_user_id != 0 } {
+            set user_name [person::name -person_id $untrusted_user_id]
+            set pvt_home_url [ad_pvt_home]
+            set pvt_home_name [_ acs-subsite.Your_Account]
+            set logout_url [ad_get_logout_url]
+            
+            # Site-wide admin link
+            set admin_url {}
+            set dotlrn_admin_url ""
+            
+            set sw_admin_p [acs_user::site_wide_admin_p -user_id $untrusted_user_id]
+            set dotlrn_admin_p [permission::permission_p \
+                                   -party_id $user_id \
+                                   -object_id [dotlrn::get_package_id] \
+                                   -privilege admin]
+            if { $dotlrn_admin_p } {
+                set dotlrn_admin_url "${dotlrn_url}/admin/"
+            }
+            
+            if { $sw_admin_p } {
+                set admin_url "/acs-admin/"
+                set locale_admin_url "/acs-lang/admin"
+            } else {
+                set subsite_admin_p [permission::permission_p \
+                                         -object_id [subsite::get_element -element object_id] \
+                                         -privilege admin \
+                                         -party_id $untrusted_user_id]
+                
+                if { $subsite_admin_p  } {
+                    set admin_url "[subsite::get_element -element url]admin/"
+                }
+            }
+        } else {
+            set login_url [ad_get_login_url -return]
+            set user_name {}
+        }
+        
+        set navbar "<ul>"
 
-	set tabs_list [list]
+        set tabs_list [list]
         set which_tab_selected -1
         set which_tab 0
         set home_tab -1
 
-	foreach {url name accesskey} [parameter::get_from_package_key -package_key "theme-zen" -parameter "AdditionalNavbarTabs" -default ""] {
-	    lappend tabs_list [list $url $name $accesskey]
+        foreach {url name accesskey} [parameter::get_from_package_key -package_key "theme-zen" -parameter "AdditionalNavbarTabs" -default ""] {
+            lappend tabs_list [list $url $name $accesskey]
             if { $current_url == $url ||
                  $current_url == "$dotlrn_url/index" && $name eq "#dotlrn.Home#" } {
                 set which_tab_selected $which_tab
@@ -92,17 +100,17 @@
                 set home_tab $which_tab
             }
             incr which_tab
-	}
+        }
 
-	if { $sw_admin_p } {
-	    lappend tabs_list [list $dotlrn_admin_url #dotlrn.Administration# #dotlrn.Administration_Accesskey#]
+        if { $dotlrn_admin_p } {
+            lappend tabs_list [list $dotlrn_admin_url #dotlrn.Administration# #dotlrn.Administration_Accesskey#]
             if { [string first $dotlrn_admin_url $current_url] != -1 } {
                 set which_tab_selected $which_tab
             }
             incr which_tab
-	}
+        }
 
-	if { [exists_and_not_null community_id] } {
+        if { [exists_and_not_null community_id] } {
             set type [dotlrn_community::get_community_type_from_community_id $community_id]
             if { $type eq "dotlrn_community" || $type eq "dotlrn_pers_community" } {
                  set community_message_key "#dotlrn.subcommunities_pretty_name#"
@@ -115,16 +123,16 @@
                  set community_access_key #dotlrn.dotlrn_class_instance_access_key#
             }
 
-		if { ![parameter::get_from_package_key -package_key "theme-zen" -parameter "GenericCommunityTab" -default "0"] } {
-			# show title of the community instead of community type
-			# pretty name
-			set community_message_key [dotlrn_community::get_community_name $community_id]
-		} 
+                if { ![parameter::get_from_package_key -package_key "theme-zen" -parameter "GenericCommunityTab" -default "0"] } {
+                        # show title of the community instead of community type
+                        # pretty name
+                        set community_message_key [dotlrn_community::get_community_name $community_id]
+                } 
 
-	    lappend tabs_list [list [dotlrn_community::get_community_url $community_id] $community_message_key $community_access_key]
+            lappend tabs_list [list [dotlrn_community::get_community_url $community_id] $community_message_key $community_access_key]
             set which_tab_selected $which_tab
             incr which_tab
-	} 
+        } 
 
         # DRB: If we haven't found a tab to select, use the previous value if one
         # exists, otherwise don't select any tab.  Don't write to the database for
@@ -133,37 +141,37 @@
         if { $which_tab_selected == -1 } {
             set which_tab_selected [ad_get_client_property dotlrn which_tab_selected]
         } else {
-	    ad_set_client_property -persistent f dotlrn which_tab_selected $which_tab_selected
+            ad_set_client_property -persistent f dotlrn which_tab_selected $which_tab_selected
         }
 
         # DRB: Let the subnavbar proc know whether or not the home tab has been selected.
 
-	ad_set_client_property -persistent f dotlrn home_tab_selected_p \
+        ad_set_client_property -persistent f dotlrn home_tab_selected_p \
             [expr { $which_tab_selected == $home_tab }]
 
-	ns_log Debug "TABS" $tabs_list
+        ns_log Debug "TABS" $tabs_list
 
         # DRB: don't understand how the access keys were named in mark's template...
 
         set which_tab 0
-	foreach tab_entry $tabs_list {
+        foreach tab_entry $tabs_list {
             foreach {url name accesskey} $tab_entry {}
-	    if { $which_tab == $which_tab_selected } {
-		append navbar "\n<li id=\"main-navigation-active\"><a href=\"$url\" title=\"[_ theme-zen.goto_tab_name]\" accesskey=\"$accesskey\">[lang::util::localize $name]</a></li>"
-	    } else {
-		append navbar "\n<li><a href=\"$url\" title=\"[_ theme-zen.goto_tab_name]\" accesskey=\"$accesskey\">[lang::util::localize $name]</a></li>"
-	    }
-	    incr which_tab 
-	}
-	
-	append navbar "\n</ul>"
+            if { $which_tab == $which_tab_selected } {
+                append navbar "\n<li id=\"main-navigation-active\"><a href=\"$url\" title=\"[_ theme-zen.goto_tab_name]\" accesskey=\"$accesskey\">[lang::util::localize $name]</a></li>"
+            } else {
+                append navbar "\n<li><a href=\"$url\" title=\"[_ theme-zen.goto_tab_name]\" accesskey=\"$accesskey\">[lang::util::localize $name]</a></li>"
+            }
+            incr which_tab 
+        }
+        
+        append navbar "\n</ul>"
 
     }
 
     ad_proc -public portal_subnavbar {
         {-user_id:required}
         {-control_panel_text:required}
-	{-link_all 0}
+        {-link_all 0}
         {-pre_html ""}
         {-post_html ""}
     } {
@@ -175,7 +183,7 @@
         set dotlrn_url [dotlrn::get_url]
         set community_id [dotlrn_community::get_community_id]
         set control_panel_name control-panel
-	set control_panel_url "$dotlrn_url/$control_panel_name"
+        set control_panel_url "$dotlrn_url/$control_panel_name"
            
         if { $community_id eq "" } {
             # We are not under a dotlrn community. However we could be
@@ -184,7 +192,7 @@
             set link "[dotlrn::get_url]/"
             
             if {[dotlrn::user_p -user_id $user_id] &&
-	        [ad_get_client_property dotlrn home_tab_selected_p] } {
+                [ad_get_client_property dotlrn home_tab_selected_p] } {
                 # this user is a dotlrn user, we've selected the home tab,
                 # show their personal portal subnavbar, including the control panel link
                 set portal_id [dotlrn::get_portal_id -user_id $user_id]
@@ -203,9 +211,9 @@
             # some defaults
             set text [dotlrn_community::get_community_header_name $community_id] 
             set control_panel_name one-community-admin
-	    # link is important : it sets the options_set value, which will be used later to select the current page
+            # link is important : it sets the options_set value, which will be used later to select the current page
             set link [dotlrn_community::get_community_url $community_id]
-	    set control_panel_url "$link/$control_panel_name"
+            set control_panel_url "$link/$control_panel_name"
 
             # figure out what this privs this user has on the community
             set admin_p [dotlrn::user_can_admin_community_p \
@@ -238,37 +246,37 @@
         }
 
        #AG: This code belongs in the portal package, near portal::subnavbar.  For display reasons we need to do this
-	#as a ul instead of a table, which portal::subnavbar returns.  Obviously we shouldn't be letting display-level
-	#stuff decide where we put our code, but first we'll need to mod the portal package accordingly.
+        #as a ul instead of a table, which portal::subnavbar returns.  Obviously we shouldn't be letting display-level
+        #stuff decide where we put our code, but first we'll need to mod the portal package accordingly.
 
         # DRB: the portal navbar stuff should return multirows which are then formatted by
         # the appropriate template, rather than include HTML as it does now.
 
-	if { [catch {set page_num [ad_get_client_property dotlrn page_num]}] || $page_num eq "" || ![string is integer $page_num] } {
-	    set page_num [ns_queryget page_num]
-	    #Strip out extra anchors and other crud.
-	    #page_num will be empty_string for special pages like
-	    #My Space and Control Panel
-	    regsub -all {[^0-9]} $page_num {} page_num
-	}
-	
-	
+        if { [catch {set page_num [ad_get_client_property dotlrn page_num]}] || $page_num eq "" || ![string is integer $page_num] } {
+            set page_num [ns_queryget page_num]
+            #Strip out extra anchors and other crud.
+            #page_num will be empty_string for special pages like
+            #My Space and Control Panel
+            regsub -all {[^0-9]} $page_num {} page_num
+        }
+        
+        
         set subnavbar ""
-	db_foreach list_page_nums_select {} {
-	    if {[string equal $page_num $sort_key]} {
-		append subnavbar "\n<li id=\"sub-navigation-active\"><a href=\"$link?page_num=$sort_key\" title=\"[_ theme-zen.goto_portal_page_pretty_name]\" accesskey=\"$accesskey\">$pretty_name</a> </li>"
-	    } else {
-		append subnavbar "\n<li><a href=\"$link?page_num=$sort_key\" title=\"[_ theme-zen.goto_portal_page_pretty_name]\" accesskey=\"$accesskey\">$pretty_name</a> </li>"
-	    }
-	 }
+        db_foreach list_page_nums_select {} {
+            if {[string equal $page_num $sort_key]} {
+                append subnavbar "\n<li id=\"sub-navigation-active\"><a href=\"$link?page_num=$sort_key\" title=\"[_ theme-zen.goto_portal_page_pretty_name]\" accesskey=\"$accesskey\">$pretty_name</a> </li>"
+            } else {
+                append subnavbar "\n<li><a href=\"$link?page_num=$sort_key\" title=\"[_ theme-zen.goto_portal_page_pretty_name]\" accesskey=\"$accesskey\">$pretty_name</a> </li>"
+            }
+         }
 
-	if  { $community_id ne "" && $admin_p } {
-	    if {[string match "*/one-community-admin*" [ad_conn url]]} {
-		append subnavbar "\n<li id=\"sub-navigation-active\"><a href=\"${link}one-community-admin\" title=\"[_ theme-zen.goto_admin_page]\" accesskey=\"[_ theme-zen.goto_admin_page_accesskey]\">[_ theme-zen.admin]</a></li>"
-	    } else {
-		append subnavbar "\n<li><a href=\"${link}one-community-admin\" title=\"[_ theme-zen.goto_admin_page]\" accesskey=\"[_ theme-zen.goto_admin_page_accesskey]\">[_ theme-zen.admin]</a></li>"
-	    }
-	}
+        if  { $community_id ne "" && $admin_p } {
+            if {[string match "*/one-community-admin*" [ad_conn url]]} {
+                append subnavbar "\n<li id=\"sub-navigation-active\"><a href=\"${link}one-community-admin\" title=\"[_ theme-zen.goto_admin_page]\" accesskey=\"[_ theme-zen.goto_admin_page_accesskey]\">[_ theme-zen.admin]</a></li>"
+            } else {
+                append subnavbar "\n<li><a href=\"${link}one-community-admin\" title=\"[_ theme-zen.goto_admin_page]\" accesskey=\"[_ theme-zen.goto_admin_page_accesskey]\">[_ theme-zen.admin]</a></li>"
+            }
+        }
 
         if { $subnavbar eq "" } {
             return ""
Index: openacs-4/packages/theme-zen/www/admin/upgrade.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/theme-zen/www/admin/upgrade.tcl,v
diff -u -r1.2 -r1.3
--- openacs-4/packages/theme-zen/www/admin/upgrade.tcl	15 May 2007 20:14:56 -0000	1.2
+++ openacs-4/packages/theme-zen/www/admin/upgrade.tcl	7 Oct 2007 22:37:05 -0000	1.3
@@ -41,6 +41,16 @@
         -parameter DefaultMaster_p \
         -value "/packages/theme-zen/lib/lrn-master"
 
+    parameter::set_default \
+        -package_key dotlrn \
+        -parameter non_member_layout_name \
+        -value "#theme-zen.Zen_2_column#"
+
+    parameter::set_default \
+        -package_key dotlrn \
+        -parameter admin_layout_name \
+        -value "#theme-zen.Zen_2_column#"
+
     # Poached from dotlrn's package instantiate callback.
 
     set site_template_id [db_string select_st_id {}]
Index: openacs-4/packages/user-profile/user-profile.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/user-profile/user-profile.info,v
diff -u -r1.11 -r1.12
--- openacs-4/packages/user-profile/user-profile.info	15 May 2007 20:15:01 -0000	1.11
+++ openacs-4/packages/user-profile/user-profile.info	7 Oct 2007 22:37:05 -0000	1.12
@@ -7,13 +7,13 @@
     <initial-install-p>f</initial-install-p>
     <singleton-p>t</singleton-p>
 
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/user-profile-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/user-profile-2.3.1.apm">
         <owner url="http://openacs.org">OpenACS</owner>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
         <vendor url="http://openacs.org">OpenACS</vendor>
 
-        <provides url="user-profile" version="2.3.0"/>
-        <requires url="profile-provider" version="2.3.0"/>
+        <provides url="user-profile" version="2.3.1"/>
+        <requires url="profile-provider" version="2.3.1"/>
 
         <parameters>
         <!-- No version parameters -->
Index: openacs-4/packages/weblogger-portlet/weblogger-portlet.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/weblogger-portlet/weblogger-portlet.info,v
diff -u -r1.8 -r1.9
--- openacs-4/packages/weblogger-portlet/weblogger-portlet.info	15 May 2007 20:15:01 -0000	1.8
+++ openacs-4/packages/weblogger-portlet/weblogger-portlet.info	7 Oct 2007 22:37:05 -0000	1.9
@@ -8,14 +8,14 @@
     <singleton-p>t</singleton-p>
     <auto-mount>weblogger-portlet</auto-mount>
 
-    <version name="2.3.0" url="http://openacs.org/repository/download/apm/weblogger-portlet-2.3.0.apm">
+    <version name="2.3.1" url="http://openacs.org/repository/download/apm/weblogger-portlet-2.3.1.apm">
         <owner url="mailto:simon@bcuni.net">Simon Carstensen</owner>
-        <release-date>2007-04-22</release-date>
+        <release-date>2007-09-08</release-date>
         <vendor url="http://www.collaboraid.biz">Collaboraid</vendor>
 
-        <provides url="weblogger-portlet" version="2.3.0"/>
-        <requires url="lars-blogger" version="2.3.0"/>
-        <requires url="new-portal" version="2.3.0"/>
+        <provides url="weblogger-portlet" version="2.3.1"/>
+        <requires url="lars-blogger" version="2.3.1"/>
+        <requires url="new-portal" version="2.3.1"/>
 
         <callbacks>
             <callback type="after-install"  proc="weblogger_portlet::after_install"/>