Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
ba8781dd
Commit
ba8781dd
authored
Nov 12, 2012
by
Vik Paruchuri
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Modify to store scores instead of correct/incorrect, remove student ability to edit response
parent
6a313fd5
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
38 additions
and
23 deletions
+38
-23
common/lib/xmodule/xmodule/js/src/selfassessment/display.coffee
+1
-0
common/lib/xmodule/xmodule/self_assessment_module.py
+37
-23
No files found.
common/lib/xmodule/xmodule/js/src/selfassessment/display.coffee
View file @
ba8781dd
...
...
@@ -59,6 +59,7 @@ class @SelfAssessment
save_answer
:
(
event
)
=>
event
.
preventDefault
()
if
@
state
==
'initial'
@
answer_area
.
attr
(
"disabled"
,
true
)
data
=
{
'student_answer'
:
@
answer_area
.
val
()}
$
.
postWithPrefix
"
#{
@
ajax_url
}
/save_answer"
,
data
,
(
response
)
=>
if
response
.
success
...
...
common/lib/xmodule/xmodule/self_assessment_module.py
View file @
ba8781dd
...
...
@@ -33,8 +33,8 @@ log = logging.getLogger("mitx.courseware")
# attempts specified in xml definition overrides this.
MAX_ATTEMPTS
=
1
# Set maximum available number of points.
Should be set to 1 for now due to assessment handling,
#
which only allows for correct/incorrect
.
# Set maximum available number of points.
#
Overriden by max_score specified in xml
.
MAX_SCORE
=
1
class
SelfAssessmentModule
(
XModule
):
...
...
@@ -68,13 +68,19 @@ class SelfAssessmentModule(XModule):
"""
Definition file should have 4 blocks -- prompt, rubric, submitmessage, hintprompt,
and one optional attribute, attempts, which should be an integer that defaults to 1.
and two optional attributes:
attempts, which should be an integer that defaults to 1.
If it's > 1, the student will be able to re-submit after they see
the rubric. Note: all the submissions are stored.
the rubric.
max_score, which should be an integer that defaults to 1.
It defines the maximum number of points a student can get. Assumed to be integer scale
from 0 to max_score, with an interval of 1.
Note: all the submissions are stored.
Sample file:
<selfassessment attempts="1">
<selfassessment attempts="1"
max_score="1"
>
<prompt>
Insert prompt text here. (arbitrary html)
</prompt>
...
...
@@ -96,16 +102,16 @@ class SelfAssessmentModule(XModule):
else
:
instance_state
=
{}
# Note:
assessment responses are 'incorrect'/'correct'
# Note:
score responses are on scale from 0 to max_score
self
.
student_answers
=
instance_state
.
get
(
'student_answers'
,
[])
self
.
assessment
=
instance_state
.
get
(
'assessment
'
,
[])
self
.
scores
=
instance_state
.
get
(
'scores
'
,
[])
self
.
hints
=
instance_state
.
get
(
'hints'
,
[])
self
.
state
=
instance_state
.
get
(
'state'
,
'initial'
)
# Used for progress / grading. Currently get credit just for
# completion (doesn't matter if you self-assessed correct/incorrect).
self
.
score
=
instance_state
.
get
(
'score'
,
0
)
self
.
_max_score
=
instance_state
.
get
(
'max_score'
,
MAX_SCORE
)
self
.
attempts
=
instance_state
.
get
(
'attempts'
,
0
)
...
...
@@ -131,6 +137,7 @@ class SelfAssessmentModule(XModule):
'initial_message'
:
self
.
get_message_html
(),
'state'
:
self
.
state
,
'allow_reset'
:
allow_reset
,
'max_score'
:
self
.
_max_score
,
}
html
=
self
.
system
.
render_template
(
'self_assessment_prompt.html'
,
context
)
...
...
@@ -141,7 +148,7 @@ class SelfAssessmentModule(XModule):
"""
Returns dict with 'score' key
"""
return
{
'score'
:
self
.
score
}
return
{
'score'
:
self
.
get_last_score
()
}
def
max_score
(
self
):
"""
...
...
@@ -149,13 +156,22 @@ class SelfAssessmentModule(XModule):
"""
return
self
.
_max_score
def
get_last_score
(
self
):
"""
Returns the last score in the list
"""
last_score
=
0
if
(
len
(
self
.
scores
)
>
0
):
last_score
=
self
.
scores
[
len
(
self
.
scores
)
-
1
]
return
last_score
def
get_progress
(
self
):
'''
For now, just return score / max_score
For now, just return
last
score / max_score
'''
if
self
.
_max_score
>
0
:
try
:
return
Progress
(
self
.
score
,
self
.
_max_score
)
return
Progress
(
self
.
get_last_score
()
,
self
.
_max_score
)
except
Exception
as
err
:
log
.
exception
(
"Got bad progress"
)
return
None
...
...
@@ -285,10 +301,14 @@ class SelfAssessmentModule(XModule):
"""
if
(
self
.
state
!=
self
.
ASSESSING
or
len
(
self
.
student_answers
)
!=
len
(
self
.
assessment
)
+
1
):
len
(
self
.
student_answers
)
!=
len
(
self
.
scores
)
+
1
):
return
self
.
out_of_sync_error
(
get
)
self
.
assessment
.
append
(
get
[
'assessment'
]
.
lower
())
try
:
self
.
scores
.
append
(
int
(
get
[
'assessment'
]))
except
:
return
{
'success'
:
False
,
'error'
:
"Non-integer score value"
}
self
.
state
=
self
.
REQUEST_HINT
# TODO: return different hint based on assessment value...
...
...
@@ -304,14 +324,12 @@ class SelfAssessmentModule(XModule):
with the error key only present if success is False and message_html
only if True.
'''
if
self
.
state
!=
self
.
REQUEST_HINT
or
len
(
self
.
assessment
)
!=
len
(
self
.
hints
)
+
1
:
if
self
.
state
!=
self
.
REQUEST_HINT
or
len
(
self
.
scores
)
!=
len
(
self
.
hints
)
+
1
:
return
self
.
out_of_sync_error
(
get
)
self
.
hints
.
append
(
get
[
'hint'
]
.
lower
())
self
.
state
=
self
.
DONE
# Points are assigned for completion, so always set to 1
points
=
1
# increment attempts
self
.
attempts
=
self
.
attempts
+
1
...
...
@@ -320,9 +338,8 @@ class SelfAssessmentModule(XModule):
'selfassessment_id'
:
self
.
location
.
url
(),
'state'
:
{
'student_answers'
:
self
.
student_answers
,
'
assessment'
:
self
.
assessment
,
'
score'
:
self
.
scores
,
'hints'
:
self
.
hints
,
'score'
:
points
,
}
}
self
.
system
.
track_function
(
'save_hint'
,
event_info
)
...
...
@@ -353,17 +370,14 @@ class SelfAssessmentModule(XModule):
def
get_instance_state
(
self
):
"""
Get the current
assessment, points,
and state
Get the current
score
and state
"""
#Assign points based on completion. May want to change to assessment-based down the road.
points
=
1
state
=
{
'student_answers'
:
self
.
student_answers
,
'assessment'
:
self
.
assessment
,
'hints'
:
self
.
hints
,
'state'
:
self
.
state
,
'score
'
:
point
s
,
'score
s'
:
self
.
score
s
,
'max_score'
:
self
.
_max_score
,
'attempts'
:
self
.
attempts
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment