Index: openacs-4/packages/xowf/catalog/xowf.de_DE.ISO-8859-1.xml
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/xowf/catalog/xowf.de_DE.ISO-8859-1.xml,v
diff -u -r1.2.2.47 -r1.2.2.48
--- openacs-4/packages/xowf/catalog/xowf.de_DE.ISO-8859-1.xml 5 Apr 2021 18:02:55 -0000 1.2.2.47
+++ openacs-4/packages/xowf/catalog/xowf.de_DE.ISO-8859-1.xml 23 Apr 2021 17:56:16 -0000 1.2.2.48
@@ -197,8 +197,9 @@
automatische Einsicht nicht m�glich
Randomisierung f�r Pr�fung geeignet
Randomisierung f�r Pr�fung nicht geeignet (keine Zufallsauswahl "immer" verwenden)
- %achievedPoints% (gerundet %rounded%) von m�glichen %totalPoints% Punkten, %percentage%%, Note: %grade%
- %achievedPoints% von m�glichen %totalPoints% Punkten, %percentage%%, Note: %grade%
+ %achievedPoints% (gerundet %achievedPointsRounded%) von m�glichen %achievablePoints% Punkten, %percentage%%, Note: %grade%
+ %achievedPoints% von m�glichen %achievablePoints% Punkten, %percentage%% (gerundet %percentageRounded%%), Note: %grade%
+ %achievedPoints% von m�glichen %achievablePoints% Punkten, %percentage%%, Note: %grade%
Name enth�lt zumindest ein ung�ltiges Zeichen
Index: openacs-4/packages/xowf/catalog/xowf.en_US.ISO-8859-1.xml
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/xowf/catalog/xowf.en_US.ISO-8859-1.xml,v
diff -u -r1.2.2.47 -r1.2.2.48
--- openacs-4/packages/xowf/catalog/xowf.en_US.ISO-8859-1.xml 5 Apr 2021 18:02:55 -0000 1.2.2.47
+++ openacs-4/packages/xowf/catalog/xowf.en_US.ISO-8859-1.xml 23 Apr 2021 17:56:16 -0000 1.2.2.48
@@ -217,8 +217,9 @@
randomization for exam ok
randomization for exam NOT ok ("always" should not be used)
- %achievedPoints% (rounded%rounded%) of possible %totalPoints% points, %percentage%%, grade: %grade%
- %achievedPoints% of possible %totalPoints% points, %percentage%%, grade: %grade%
+ %achievedPoints% (rounded %achievedPointsRounded%) of possible %achievablePoints% points, %percentage%%, grade: %grade%
+ %achievedPoints% of possible %achievablePoints% points, %percentage%% (rounded %percentageRounded%%), grade: %grade%
+ %achievedPoints% of possible %achievablePoints% points, %percentage%%, grade: %grade%
Name contains at least one invalid character
Detailed Configuration
Index: openacs-4/packages/xowf/lib/edit-interaction.wf
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/xowf/lib/edit-interaction.wf,v
diff -u -r1.1.2.9 -r1.1.2.10
--- openacs-4/packages/xowf/lib/edit-interaction.wf 5 Mar 2021 08:53:00 -0000 1.1.2.9
+++ openacs-4/packages/xowf/lib/edit-interaction.wf 23 Apr 2021 17:56:16 -0000 1.1.2.10
@@ -10,6 +10,8 @@
# {entry -name New.Item.TextInteraction -form en:edit-interaction.wf -query p.item_type=Text}
#
+set :policy ::xowf::test_item::test-item-policy-edit
+
Action initialize -proc activate {obj} {
set name [$obj name]
if {[$obj is_new_entry $name]} {
Index: openacs-4/packages/xowf/tcl/test-item-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/xowf/tcl/test-item-procs.tcl,v
diff -u -r1.7.2.121 -r1.7.2.122
--- openacs-4/packages/xowf/tcl/test-item-procs.tcl 5 Apr 2021 18:02:55 -0000 1.7.2.121
+++ openacs-4/packages/xowf/tcl/test-item-procs.tcl 23 Apr 2021 17:56:16 -0000 1.7.2.122
@@ -2179,15 +2179,15 @@
}
}
- if {0 && $autograde} {
- lappend form_field_objs \
- [$wf create_raw_form_field \
- -name _online-exam-total-score \
- -spec number,label=#xowf.Total-Score#] \
- [$wf create_raw_form_field \
- -name _online-exam-grade \
- -spec number,label=#xowf.Grade#]
- }
+ # if {0 && $autograde} {
+ # lappend form_field_objs \
+ # [$wf create_raw_form_field \
+ # -name _online-exam-total-score \
+ # -spec number,label=#xowf.Total-Score#] \
+ # [$wf create_raw_form_field \
+ # -name _online-exam-grade \
+ # -spec number,label=#xowf.Grade#]
+ # }
lappend form_field_objs \
[$wf create_raw_form_field \
@@ -2284,15 +2284,15 @@
$p set_property -new 1 _online-exam-seconds \
[expr {[dict get $duration toClock] - [dict get $duration fromClock]}]
- if {0 && $autograde && $total_points > 0} {
- set final_score [expr {$total_score/$total_points}]
- $p set_property -new 1 _online-exam-total-score $final_score
-
- set d [list achievedPoints $total_score achievablePoints $total_score totalPoints $total_point]
- set grade [$grading_scheme grade -achieved_points $d]
- dict incr grade_count $grade
- $p set_property -new 1 _online-exam-grade $grade
- }
+ # if {0 && $autograde && $total_points > 0} {
+ # set final_score [expr {$total_score/$total_points}]
+ # $p set_property -new 1 _online-exam-total-score $final_score
+ #
+ # set d [list achievedPoints $total_score achievablePoints $total_points totalPoints $total_points]
+ # set grade [$grading_scheme grade -achieved_points $d]
+ # dict incr grade_count $grade
+ # $p set_property -new 1 _online-exam-grade $grade
+ # }
}
if {$state eq "done"} {
@@ -3669,19 +3669,30 @@
nx::Class create Grading {
:property {percentage_boundaries {50.0 60.0 70.0 80.0}}
- :method calc_grade {-points -achieved_points} {
+ :method calc_grade {-percentage -points -achieved_points} {
#
# Return a numeric grade based on achieved_points dict and
# percentage_mapping. On invalid data, return 0.
#
# achieved_points: {achievedPoints 4.0 achievablePoints 4 totalPoints 4}
# percentage_mapping: {50.0 60.0 70.0 80.0}
#
- if {[dict exists $achieved_points totalPoints] && [dict get $achieved_points totalPoints] > 0} {
- set percentage [format %.2f [expr {
- ($points*100/
- [dict get $achieved_points totalPoints]) + 0.00001
- }]]
+ if {![dict exists $achieved_points achievablePoints] && [dict exists $achieved_points totalPoints]} {
+ ns_log warning "test_item::grading legacy call, use 'achievablePoints' instead of 'totalPoints'"
+ dict set achieved_points achievablePoints [dict get $achieved_points totalPoints]
+ }
+ if {![info exists percentage]} {
+ if {[dict exists $achieved_points achievablePoints] && [dict get $achieved_points achievablePoints] > 0} {
+ set percentage \
+ [format %.2f [expr {
+ ($points*100/
+ [dict get $achieved_points achievablePoints]) + 0.00001
+ }]]
+ }
+ } else {
+ ns_log notice "USE PROVIDED percentage '$percentage'"
+ }
+ if {[info exists percentage]} {
set grade 1
set gradePos 0
foreach boundary ${:percentage_boundaries} {
@@ -3705,47 +3716,98 @@
return [dict get $achieved_points achievedPoints]
}
}
+
+ :method complete_dict {achieved_points} {
+ #
+ # This is a transitional method, just for defensive programming
+ # to make sure, nobody elese uses the legacy field... should
+ # disappear soon.
+ #
+ if {![dict exists $achieved_points achievablePoints] && [dict exists $achieved_points totalPoints]} {
+ ns_log warning "test_item::grading legacy call, use 'achievablePoints' instead of 'totalPoints'"
+ dict set achieved_points achievablePoints [dict get $achieved_points totalPoints]
+ }
+ foreach key {
+ achievedPoints
+ achievablePoints
+ } {
+ if {![dict exists $achieved_points $key]} {
+ ns_log warning "test_item::grading dict without $key: $achieved_points"
+ ::xo::show_stack
+ dict set achieved_points $key 0
+ }
+ }
+ dict with achieved_points {
+ dict set achieved_points achievedPointsRounded [format %.0f $achievedPoints]
+ set achievablePoints [format %.2f $achievablePoints]
+ set achievedPoints [format %.2f $achievedPoints]
+ set percentage [format %.2f [expr {$achievablePoints > 0 ? ($achievedPoints*100.0/$achievablePoints) : 0}]]
+ dict set achieved_points percentage $percentage
+ dict set achieved_points percentageRounded [format %.0f $percentage]
+ }
+ #ns_log notice "R=$achieved_points"
+ return $achieved_points
+ }
+
}
Grading create ::xowf::test_item::grading::wi1 -percentage_boundaries {50.0 60.0 70.0 80.0} {
:public object method print {-achieved_points:required} {
+ set achieved_points [:complete_dict $achieved_points]
+ set grade [:grade -achieved_points $achieved_points]
+ dict with achieved_points {
+ set panelHTML [_ xowf.panel_achievied_points_wi1]
+ return [list panel $panelHTML csv [subst {$achievedPoints\t$achievedPointsRounded\t$percentage%\t$grade}]]
+ }
+ }
+ :public object method grade {-achieved_points:required} {
+ set achieved_points [:complete_dict $achieved_points]
if {[dict exists $achieved_points achievedPoints]} {
- set totalPoints [format %.2f [dict get $achieved_points totalPoints]]
- set achievedPoints [format %.2f [dict get $achieved_points achievedPoints]]
- set rounded [dict get $achieved_points achievedPointsRounded]
- set percentage [format %.2f [expr {$totalPoints > 0 ? ($achievedPoints*100.0/$totalPoints) : 0}]]
- set grade [:grade -achieved_points $achieved_points]
- set panelHTML [_ xowf.panel_achievied_points_wi1]
- return [list panel $panelHTML csv [subst {$achievedPoints\t$rounded\t$percentage%\t$grade}]]
+ dict with achieved_points {
+ return [:calc_grade -points $achievedPointsRounded -achieved_points $achieved_points]
+ }
}
}
+ }
+
+ Grading create ::xowf::test_item::grading::wi1p -percentage_boundaries {50.0 60.0 70.0 80.0} {
+
+ :public object method print {-achieved_points:required} {
+ set achieved_points [:complete_dict $achieved_points]
+ set grade [:grade -achieved_points $achieved_points]
+ dict with achieved_points {
+ set panelHTML [_ xowf.panel_achievied_points_wi1p]
+ return [list panel $panelHTML csv [subst {$achievedPoints\t$percentage%\t$percentageRounded%\t$grade}]]
+ }
+ }
:public object method grade {-achieved_points:required} {
+ set achieved_points [:complete_dict $achieved_points]
if {[dict exists $achieved_points achievedPoints]} {
- set achieved [dict get $achieved_points achievedPoints]
- set rounded [dict get $achieved_points achievedPointsRounded]
- return [:calc_grade -points $rounded -achieved_points $achieved_points]
+ dict with achieved_points {
+ return [:calc_grade -percentage $percentageRounded -achieved_points $achieved_points]
+ }
}
}
}
+
Grading create ::xowf::test_item::grading::wi1_noround -percentage_boundaries {50.0 60.0 70.0 80.0} {
:public object method print {-achieved_points:required} {
if {[dict exists $achieved_points achievedPoints]} {
- set totalPoints [format %.2f [dict get $achieved_points totalPoints]]
- set achievedPoints [format %.2f [dict get $achieved_points achievedPoints]]
- set percentage [format %.2f [expr {$totalPoints > 0 ? ($achievedPoints*100.0/$totalPoints) : 0}]]
- set grade [:grade -achieved_points $achieved_points]
- set panelHTML [_ xowf.panel_achievied_points_wi1_noround]
- return [list panel $panelHTML csv [subst {$achievedPoints\t$percentage%\t$grade}]]
+ set achieved_points [:complete_dict $achieved_points]
+ set grade [:grade -achieved_points $achieved_points]
+ dict with achieved_points {
+ set panelHTML [_ xowf.panel_achievied_points_wi1_noround]
+ return [list panel $panelHTML csv [subst {$achievedPoints\t$percentage%\t$grade}]]
+ }
}
}
:public object method grade {-achieved_points:required} {
if {[dict exists $achieved_points achievedPoints]} {
- set achieved [format %.2f [dict get $achieved_points achievedPoints]]
- #ns_log notice "XXXX $achieved_points -> [list calc_grade -points $achieved -achieved_points $achieved_points]"
- return [:calc_grade -points $achieved -achieved_points $achieved_points]
+ set achieved_points [:complete_dict $achieved_points]
+ return [:calc_grade -points $achievedPoints -achieved_points $achieved_points]
}
}
}
@@ -3826,6 +3888,7 @@
#
::xowiki::policy1 copy ::xowf::test_item::test-item-policy-publish
::xowiki::policy1 copy ::xowf::test_item::test-item-policy-answer
+ ::xowiki::policy1 copy ::xowf::test_item::test-item-policy-edit
#
# Add policy rules as used in two demo workflows. We are permissive
@@ -3857,6 +3920,12 @@
message-dismiss {{item_id read}}
}
}
+ test-item-policy-edit contains {
+ Class create FormPage -array set require_permission {
+ revisions admin
+ diff admin
+ }
+ }
#ns_log notice [::xowf::test_item::test-item-policy1 serialize]
#ns_log notice ===================================