xowf::test_item::Question_manager method replace_pool_questions (public)

 <instance of xowf::test_item::Question_manager[i]> replace_pool_questions \
    [ -answer_obj answer_obj ] [ -exam_obj exam_obj ]

Defined in packages/xowf/tcl/test-item-procs.tcl

Replaces all pool questions for the exam by random items. In case there were replacement items, set/update the property "question" for the individual answer_obj.

Switches:
-answer_obj
(optional)
the workflow instance of the answer workflow
-exam_obj
(optional)
the exam objject to which the answer_object belongs to

Partial Call Graph (max 5 caller/called nodes):
%3 test_create_test_items create_test_items (test xowf) xowf::test_item::Question_manager instproc replace_pool_questions xowf::test_item::Question_manager instproc replace_pool_questions test_create_test_items->xowf::test_item::Question_manager instproc replace_pool_questions

Testcases:
create_test_items
Source code:
if {[$answer_obj property question] ne ""} {
  ns_log notice "answer_obj $answer_obj has already a 'question' property"  [lsort [dict keys [$answer_obj instance_attributes]]]
  return
}
set exam_question_names [$exam_obj property question]
set form_objs [:load_question_objs $exam_obj $exam_question_names]

#
# Make sure to normalize all names to ease comparison
#
set original_question_names [:qualified_question_names $form_objs]

set replaced_form_objs {}
set position 0
set seeds [$answer_obj property seeds]
foreach form_obj $form_objs {
  #ns_log notice "YYY check item_type '[$form_obj property item_type]' // [$form_obj instance_attributes]"
  if {[$form_obj property item_type] eq "PoolQuestion"} {
    set replaced_form_obj [:replace_pool_question  -position $position  -seed [lindex $seeds $position]  -pool_question_obj $form_obj  -exam_question_names $exam_question_names]
    set exam_question_names [lreplace $exam_question_names $position $position  [:qualified_question_names $replaced_form_obj]]
    lappend replaced_form_objs $replaced_form_obj
  } else {
    lappend replaced_form_objs $form_obj
  }
  incr position
}
#ns_log notice "YYYY OLD NAMES [join $original_question_names { }]"
#ns_log notice "YYYY UPD NAMES [join $exam_question_names { }]"
if {![:list_equal $original_question_names $exam_question_names]} {
  ns_log notice "YYYY store question names in user's answer workflow"
  $answer_obj set_property -new 1 question $exam_question_names
  #$answer_obj set_property -new 1 question_ids [lmap obj $replaced_form_objs {$obj item_id}]
}
XQL Not present:
Generic, PostgreSQL, Oracle
[ hide source ] | [ make this the default ]
Show another procedure: