• last updated 5 hours ago
Constraints: committers
Constraints: files
Constraints: dates
added title for "inclass-exam-submit"

  1. … 2 more files in changeset.
add titles to first/next/previous quesion buttons

  1. … 3 more files in changeset.
added tailored title for "logout button, fixed typos in message catalog

  1. … 2 more files in changeset.
Support for pool questions in the test-item family


- select random questions from some folder

(Currently siblings, i.e., folders of the same package instance)

- one exam can have multiple pool questions, potentially from other pools

- pools can be links to other folders (which are no siblings)

- The current folder can be used as well as a pool folder. In this

case, other not-used items can be selected as replacement items

given these match the specified filter characteristics

- Question filtering

* filter by item type:

allow one to select from all/some/some item types

(mc, sc, short text, reordering, composite, ...):

use as replacement items only examples of these types

* filter by minutes and/or points:

use as replacement items only items with matching points/minutes

* filter by language:

use as replacement items only items in a certain language

* Filter per item name pattern:

use as replacement items only items matching a name.

When (short-) names are used systematically, one can e.g.

use the date in the name and specify only items from e.g.

one year ago, via "*2020*", or from some chapter "*ch01", ...

Certainly, it is also possible to use different item

folders for this

Potential further steps:

- Currently, exams containing pool questions are treated as

auto-correctable (which implies automated exam-review (Einsicht), when

from the question pools only question from strictly closed questions

are selected (MC, SC, Ordering). Depending on the detailed settings,

also other item types could be possible (via correct-when), but this

requires a deeper analysis of every question, which is so far not


- Categorized items: technically, the infrastructure is mostly here to

allow also filtering by categories. This would allow one to select

e.g. from technical questions, case examples, knowledge transfer

questions, research-oriented questions... which are orthogonal to

the filtering currently available. Every lecturer can define

own categories depending on their needs, we could provide

university-wide category-trees, etc. Of course, one could also

define separate pools for these purposes, but categorizing is

probably more convenient and more flexible.

- Performance: when question pools become large (500+ questions) and

the cohorts as well (500+), the current version might require more

tuning. The only critical time is the exam-start, where the random

question placeholders have to be resolved for every student. The

approach from this weekend uses basic caching, but maybe this has to

be extended.

- Protecting selected questions: Question pools are more detached from

an exam than single exercises, a lecturer might have in mind. One

should not allow one to delete questions/question pools when these are

in use. Probably deletion should be a move to a trash-can, which is

actually, an issue for all exams, but getting more important with

pool questions.

- Handling of potential duplicates: When items are pulled from a

question pool, a replacement item is selected by making sure that

this item does not occur already in the query selection. Therefore,

one can safely draw two questions from the same question pool

without fearing that a student gets the same question twice.

This duplicate checking might require some fine-tuning:

* the system checks for duplicates in an exam via POOL/NAME.

* if a lecturer uses two pool-questions in an exam pointing to the same pool,

the systems makes sure, the same question is not used twice.

* however, if a teacher adds a question q1 to pool1 and the same question to pool2,

these two instances have different item ids and are regarded as two different

questions. One could make a test for only checking NAME (without POOL),

but then it might be the case that certain questions are not accepted

although these are different, because they have the same name.

- Statistics: so far, i have not provided any special answer

statistics for treating pool questions.

  1. … 10 more files in changeset.
Added support for tailored messages when autosave is rejected

Optionally, the AJAX call from autosave can be answered with

a JSON structure containing a "feedback". If this is provided, this

is presented to the user. The mechanism can be extended in the

future to include some reason code, etc. for further automatic

processing in JavaScript.

With this change, the inclass-exam-answer workflow will use this

to comminicate the reasone for rejected autosave operations in

situations, where the examtime is up.

  1. … 4 more files in changeset.
provide means for omit the audio alarm control in the countdown timer

  1. … 4 more files in changeset.
better control of browser built-in spellcheck

- xowiki: added property "spellcheck" to formfield classes "textarea" and "text_fields"

- xowf: allow per-exam to activate/deactivate spellcheck in these widget classes

  1. … 6 more files in changeset.
allow user to open exam answering in multiple tabs in try-out mode

improve comment

add a 10sec grace period to allow typing until the last seconds (but not longer)

Improved handling of autosaved revisions

- reject autosave attempts when time for a student is up

(works for synchronized and non-synchronized exams)

- include submissions with autosaved content in exam protocol (even when state is "initial")

  1. … 3 more files in changeset.
Handling of mutual overwrites in answer workflows

Mutual overwrites occur in answer workflows when a user manages to

open multiple browswer instances/or tabs on the same exam.

In case there was an mutual overwrite, the position as provided by the

instance attributes might deviate from the position, based on which

the actual form data was generated. So, for validating and updating

one has to change the position to the one from the form data (when

this differs). Note that the randomizer depends on property

"position" as well.

The new version avoids that the user might accidencially overwrite his

data and closes on mutual overwrite automatically the older instance


Bumped version number to 5.10.0d38

  1. … 2 more files in changeset.
provide means to show submissions of students per test item

  1. … 2 more files in changeset.
fix typo

decativate prevention of multiple tabs for exam protocol (and maybe other listings)

fix last commit (many thanks to Thomas Renner)

added support for pagination buttons, visited buttons and flagged buttons

  1. … 6 more files in changeset.
make question manager configurable

added functionality to prevent opening the same exam in multiple tabs

  1. … 1 more file in changeset.
fix passing of question number

Added substitution values for short text answers

This change adds the possibility to provide randomized substitution values to short

text questions via value sets.

Value sets are a means for a content developer to provide multiple matching answers which are inserted into the text before an exercise is shown to the end user. One can e.g. provide for a calculation exercise several input and some output values, such that the students get different calculation exercises provided. These values can also be used for the correct-when clauses.

The content developer can use percent-code delimited elements when defining the exercise:


Assume, you want to download a %x.what% with the size of %x.size% over a %x.type% connection with a rate of %x.rate% from %univ%.


and also in "correct when"




the value sets can be provided via an extra field for the short-text questions and have the form

of a Tcl dict:


univ {WU-Vienna TU-Vienna "University of Vienna"}

x {

{type "ADSL" rate "256 kbit/s" size "235 MB" secs 5300 what "Powerpoint file"}

{type "ADSL" rate "512 kbit/s" size "5.6 MB" secs 91 what "PDF file"}

{type "4G" rate "80 Mbit/s" size "270 MB" secs 27 what "PDF file"}

{type "4G" rate "40 Mbit/s" size "650 MB" secs 32 what "Lecturecast Video" }

{type "5G" rate "1 Gbit/s" size "520 MB" secs 4 what "Powerpoint file" }

{type "5G" rate "1 Gbit/s" size "1.5 GB" secs 12 what "Lecturecast Video" }



In this example, every student will get a randomly chosen value for the university (%univ%)

and matching elements containing the answer (e.g. download time of "270 MB" over "80 Mbit/s" is 27 seconds).

The download time is used in the correct when part, such that auto-correction can be applied.

When a student answers this exercise, the system provides random choices that are substituted in the text.

For every variable ("univ", "x", ..) different random values are used for the student.

Certainly, for other students, other numbers and results will be provided.

Note, that this value sets can be used for numeric an non-numeric exercises.

Current limitations:

- only defined for short-text questions (can be in general also for other question types)

- no elaborate user interface for entering value sets (or a thorough validator) is provided.

  1. … 1 more file in changeset.
don't use numbers as object names for actions; don't show "1" for navigation, when there is a single question

  1. … 1 more file in changeset.
add option to show student IP address during the exam

  1. … 3 more files in changeset.
fix typo

Improve handling of cases, where the exam was closed, but some exam-takers have not submitted their results.

Essentially this change avoids an error message and repeated messages, which might

come form autosaving or other ajax calls.

enable question-form resolving again.

improve comment

Undo change from 15 Dec, since it breaks shuffling

Improved handling of link and child resources of forms

- test-item-procs: use resolve context to resolve e.g. images in the context of the original form

(many thanks to Thomas Renner for the suggestion)

- added extra argument "-context_obj" to substitute_markup to ease client code

- reduced the db interactions by using form_info for form generation

  1. … 4 more files in changeset.
added example-usage of set_css_property -querySelector