##  CHANGES                                                     OKUSON package
##                                               Frank Lübeck / Max Neunhöffer
##


This file documents the changes between released versions of OKUSON.

How to apply an update of OKUSON to earlier releases:
-----------------------------------------------------

          See the separate file UPGRADE for upgrades.

Changes from 1.5.1 to 1.5.2
* Moodle export: wider string input fields in questions
  (in many cases they will now have equal length)

Changes from 1.5.0 to 1.5.1
* Fixes handling of `sheetnr` argument in `MoodleExport`.

* Switch to better random function.

Changes from 1.4.5 to 1.5.0
* New script 'scripts/ExportToMoodle.py' to export OKUSON sheets to 
  Moodle questions, including a new short chapter in the manual.

* New script to import people from an RWTH "Anmeldeverfahren" into 
  OKUSON (only useful at RWTH Aachen, e.g. when you also use
  Moodle)

Changes from 1.4.4 to 1.4.5
* New pseudo tags <IfTime> and <IfFileExists> for web pages, content
  is only included in page during specified time, respectivly if a 
  specified file exists. 

* New configuration entry <HashSalt> in Config.xml which can be 
  used for better password hashes.

* Added example files 'datasecurity.tpl' and 'impressum.tpl',
  these may need adjustments for use at other places than RWTH Aachen,
  but you get the idea.

Changes from 1.4.3 to 1.4.4

* 'python' is now called explicitly as 'python2' in all scripts.

* New placeholders in <PDFTemplate>: (%Group%), (%LastName%), (%FirstName%) 

* Added configuration elements <ProtectedFiles>  for password protected
  files. An example how such files are accessed is in the new file
  html/protected.html.

Changes from 1.4.2 to 1.4.3

* Added configuration elements <ValidateRegistration>,
  <ValidateRegistrationMail> and <ValidEmailAddresses>
  to defend spam registrations (see manual Section 8.1).

* Added viewport <meta> tags to all template files (improves
  appearance on small screens/tablets/smartphones).

Changes from 1.4.1 to 1.4.2

* Adusted the link to the MathJax script as suggested on
  www.mathjax.org.

* Made more webpages nicer on small screens (mobile phones).

Changes from 1.4 to 1.4.1

* Changed a few more links to relative ones (missed in version 1.4).
* Made some more details of webpages configurable via CSS (e.g., the width
  of text fields in web forms).
* Various small changes to program generated HTML, sample web pages and CSS
  to make an OKUSON site better usable on small touch devices (in particular
  in combination with the MathJax version of exercise sheets).
* Improved layout of answer fields in exercise sheets in pdf and HTML
  (e.g., in HTML only full anwers with check box will move to next line
  and the answer text is also clickable).
* Log file now also contains original IP addresses of requests in case
  the OKUSON server is accesssed via a (e.g., https-)proxy server.
* Made check boxes for persondata.* data better usable (see last example
  in appendix A.4).
* Few additions to the documentation.
* Removed some artifacts from old CVS version control.

Changes from 1.3-fix1 to 1.4

* Introduced StarMCScore similar to the existing StarHomeScore
  (provided by Sebastian Thomas).
* Changed all links in sample web pages and programs to relative ones.
  This allows to put an OKUSON server behind a proxy server, e.g.,
  'nginx' configured for https-access (passwords and data are transferred
  encrypted).
* Introduced an experimental MathJax mode for the exercise sheets. 
  This is not offered by default, uncomment in html/exquery.tpl.
  When this is used it may be necessary to change some LaTeX exercise code
  such that it leads to a sensible translation to HTML (see manual section
  "MathJax support").
* Some smaller changes in CSS layout.

Changes from 1.3 to 1.3-fix1

* make it impossible to guess the cookie of an logged in administrator
  (suggested by Tobias Boelter)
* corrected a few typos in filenames for error messages
* Added two sample plugins 'filter' and 'mailer' provided by Marc Ensenbach.


Changes from 1.2-fix2 to 1.3

* Fixed the problem that the custom export tags %c, %v and %h didn't
  work correctly if sheet names were not equal to the sheet numbers.
  (Reported by Timo Hanke)
* Some new files in the 'scripts' subdirectory:
    SendEmail.py          send email to all participants (individually,
                          such that they don't see other email addresses)
    startNOSERVER.py      a utility for scripts with access to all
                          current data of a server
    RWTHCampus2people.py  automatically registers participants using data
                          from the RWTH Campus system (.csv format)
                          It generates random initial passwords.
                          This is RWTH specific but probably slight variations
                          could be useful in other places.
    SendInitPasswords.py  writes mails to inform automatically registered
                          participants about their initial password
    exampleMailSendInitPasswords   example mail template
    README.RWTH_Campus    infos how to use registration via RWTH Campus
                          together with OKUSON
* Added <EMailHeaderFunction> in Config.xml. This function should generate
  a salutation which can be used by scripts which generate emails to the
  participants.
* Added <KeptData> element in Config.xml. This allows to specify data
  which are not allowed to be changed by the participant via
  the SubmitRegChange function. This can be used if certain data
  were imported from somewhere else.
* Added a check for negative score to ignore <ExamGrade ../> in that case
  (as promised in the comments of Config.xml); reported by Sebastian Mayer.
* Allow access to ShowDetailedScoreTable with tutor authentification.
* Set passwd information for group 0 such that a password must be given
  explicitly for group 0 for accessing it via  /tutors.html.
* Added a script scripts/getexamresults.py for input of exam results
  for data/exams.txt.
* Added %[nr]r to custom export for exam registrations.
* Removed and added some buttons in administration .tpl files.
* Corrected some HTML errors in plugins (done by Marc)
* Extended publicstatistics plugin with chart function (done by Marc)
* Included scheine plugin by Ingo
* Included personalizedcoversheets plugin by Ingo
* Added english template pages in "html.english".

Changes from 1.2-fix1 to 1.2-fix2

* Moved repository to svn.

Changes from 1.2 to 1.2-fix1

* Problems with compiling the rxp parser with gcc 4 and with python 2.5
  seem to be resolved by newest svn-version of pyRXP (provided by
  Robin Becker).

Changes from 1.1-fix5 to 1.2

* Change highscoretable sample plugin to only consider non-guest IDs
* Allow configuration of multiple choice scores for wrong and correct answers.
  Allow default values in the configuration file. Make lower limit of score
  for a multiple choice exercise configurable in the Exercise element with 
  a default option in the configuration file.
  [-> One can now set the maximal and minimal score of a question to 0
   to take it out of the grading. 
   -> It is now possible to have MC questions which count more than others.] 
* Included Marc Ensenbachs publicstatistics plugin in the plugin samples.
* Use the configuration option "RestrictToOwnGroup" also in the per person
  homework score page for tutors. If this option is off, then a tutor may
  also edit the homework scores of a participant not in his group.
* Patched pyrxp.c on Max's web page to allow for compilation with GCC >=4.0
* Moved "SeedFromId" to the Utils module such that Exercises does not need
  import WebWorkers
* Documented how to force a page break between exercises in a pdf-sheet.
* Now the custom export returns a list sorted by ID's, and it excludes
  the guest ID's (as promised for <GuestIdRegExp> in Config.xml).
* Corrected bug that in custom export %0e included all exams instead
  of exam number 0 only.
* Made the text width for pdf-pages (and text images) a bit smaller 
  such that filed exercise sheets are better readable and the punch holes
  are outside the text.
* Fixed a bug that two threads running in parallel could use the same
  "uniquename" for file locking. This bug could lead to crashes of the
  server!
* Add the possibility to customize the date/time format that is used for
  displaying date and time. The format can be specified with the configuration
  option "DateTimeFormat".
* Fix display problem of the table on the global statistics page(s).
* Fix marking of wrong ids on the free homework input form.
* Change css style sheets to foreground color black.
* Fixed compilation of pyRXP with gcc 4.0 and later.
* Allow the administrator to put people into overbooked groups by ignoring the
  maximal group size.


Changes from 1.1-fix4 to 1.1-fix5

* Changed MIME type for *.ps files to 'application/postscript'.
* Give a little bit more personal information back after successful
  registration to an exam to better detect caching bugs in browsers.
* Incorporated Marc's free homework input form. This is available under
  /HomeworkFree and uses one more configuration switch "RestrictToOwnGroup".
* Incorporated Ingo's patch ik2 to allow PersonDataField and friends in
  generic pages without available personal data.
* Incorporated Ingo's patch ik3 for a tag <GroupSelection/> which allows
  for mouse selection of the group. Added documentation.
* Incorporated Ingo's patches ik4 to ik6 to add a framework for extensions
  called "plugins". See okuson/server/plugins.sample for examples. Note that
  there is no documentation for this available apart from the code itself. :-)


Changes from 1.1-fix3 to 1.1-fix4

* Fixed a bug with locale.str in ExportResults.
* Explained the scoring of interactive exercises in the manual (was only in
  sample web page before).
* Two corrections in the documentation of <GroupsOverview />.
* New attribute 'nodisplay' for <GroupsOverview />, for example to exclude
  the default group "0" from the listing.
* Custom export of person data: added format switch for including the 
  custom data; added variant of homework export which includes the stored 
  details (scores for the individual exercises).
* New feature of example solutions to written exercises, which are displayed
  with the written exercises as soon as the sheet is closed. See Manual 
  section 5.2.
* Inserted a suggestion by Marc to display the prefix of the multiple
  choice question in the statistics page for a certain variant.
* Create a switch "InteractiveMode". If this is 1 (default is 0), then the
  resulting points are shown in the multiple choice sheets already before
  the closing time of the sheet, if the user already has submitted once.
  This is intended for interactive exercises only.
* Display a message when a browser submits impossible values. The values
  are ignored as before this change.
* Improved the help text of the "schein.py" script.
* Fix "Show Global Statistics for group" in administrator menu, allow
  access for tutors not only from administrators hosts, and allow
  administrator access after login.
* Allow registration if the first password is the administrator password,
  even if registration is switched off.
* New configuration option "MaxStringInputLength" to give the maximal length
  of the input in string fields in multiple choice exercises.
* New mime types .avi, .rm.
* Forcing PGM output from ghostscript to avoid non-antialiased images with
  big LaTeX input (should not make a difference for most people).

Changes from 1.1-fix2 to 1.1-fix3

* Fixed an embarrassing bug in "CleanWeb", introduced in 1.1-fix2. Pages
  containing certain elements (like <LastName>) did no longer work.
* Fixed a small typo in html/edithomeworkperson.tpl (a double colon).


Changes from 1.1-fix1 to 1.1-fix2

* Made a small change to the RandObj class in SimpleRand because of an
  integer overflow occuring in Python 2.2 (was no problem in 2.3).
  Should not be visible.
* Fixed all (???) places where user entered data (last name, first name,
  studies, email, wishlist, string answers, persondata) is put back
  on some web page, which is sent out. To avoid cross site scripting
  attacks we replace "<" by "&lt;", ">" by "&gt;" and "&" by "&amp;"
  in those places. This should never hurt and should make cross site
  scripting attacks at least a bit harder.
* Amended the manual with respect of TEXT elements in EXERCISE elements:
  Only a prefix and a postfix to all questions are considered, not TEXTs
  between questions, even for the case order="f". (Sorry Axel!)
  The behaviour of OKUSON was not changed, only the documentation changed.
* Added a warning that OKUSON is not running with the non-official version
  2.3+ of python shipped with Suse Linux 9.0.
* Fixed the handling of LaTeX texts in exercises to fix a bug reported
  by Daniel Robertz which showed up, when TeX comment lines were at the
  end of the LaTeX input. TeX comments now are filtered out completely.
* Added new <Version/> element to display the OKUSON version. Added this
  to all sample pages at the bottom.
* Added a manual section, explaining how to deliver non-template files with 
  the OKUSON server.
* Made a page with result statistics for single group available to
  tutor of that group.
* Fixed a bug with the generic export functionality (concerning exercise 
  results).
* Created favicon.ico, because browsers ask for it.


Changes from 1.1 to 1.1-fix1

* Documented 'maxsize' entry in file groupinfo.txt
* Fixed bugs in helper scripts resulting from export format changes.
  (distribute.py, numbergroups.py and prettyprintgroupdist.py).
* Fixed bug that showed up when tutors changed their password (groupinfo.txt
  was messed up and the server did no longer start).
* Fixed bug in display of <GroupOverview/> element, which prevented custom
  group data from being displayed properly.
* In case of non-individual exercises display future sheets for admins.
* Report XML parsing errors correctly without putting the whole file
  twice into the log.


Changes from 1.0-fix3 to 1.1

* Generic and easy to extend export function in admin menue via format string, 
  accompanied by a script 'scripts/sortselect.py' for sorting and filtering.
* 'testexercise' now displays 'Overfull \hbox'es from LaTeX log file.
* New switch <IndividualSheets> in Config.xml and <If[No]IndividualSheets>
  for .tpl files. (Switch defaults to 1, if set to 0,  no password is needed 
  for sheets and PDF sheets don't use table.)
* Substituted the <GroupInfo1> to <GroupInfo9> and related tags by more 
  flexible <GroupData key="..."> tags.
* Substituted the <PersonData1> to <PersonData9> and related tags by more 
  flexible <PersonData key="..."> tags.
* Substituted the <User1> to <User9> by more flexible <ConfigData key="...">
  configuration options (allows an arbitrary number of additional data and
  a better naming).
* Introduced a "LINEDICT" type for leaves in AsciiData module, for storing
  whole dictionaries with string values.
* Allow change of .tpl files without restarting the server: If a .tpl file 
  has changed and can be parsed then the internal parse tree of the template 
  is updated before it is used.
* Added 'value = ""' for string input fields, if nothing was entered before.
  This hopefully avoids pre-filled-in fields by "intelligent" browsers.
* Changed authentication for statistics. Login is no longer necessary.
* Fixed two bugs with ExamGradingFunction reported by Thorsten.
* Put a hint to "schein.py" into the manual.
* Handle additional info to "Studiengang" better
* Header and Footer configurable (change from Ingo)
* Introduced a switch in Config.py to allow/disallow registration.
* Introduced a switch in Config.py to allow/disallow exam registration.
* Introduced a switch in Config.py to allow/disallow group choice during
  registration.
* Implemented group choice during registration.
* Implemented group change during semester.
* Introduce a switch in Config.py to allow/disallow group change after
  registration.
* Make administrator menu a function (AdminMenu) to allow different behaviour
  according to login status.
* Make cookies persistent (resolution (13 weeks) and login status (60 minutes).
* Simplify/unify authentication code (AuthenticateAdmin is gone).
* Better statistical displays (thanks to Lehrstuhl A)
* Display of exam registration status (thanks to Lehrstuhl A).
* Star homework exercises (do not count in the denominator, thanks to LAFM).
* Maximal possible homework score (thanks to LAFM).
* Fixed bug with non-uniform distribution of variants in the case of
  3 variants.
* Sort order by TotalMCScore, TotalHomeScore, and TotalScore (thanks to LAFM).
* Logrotate script to keep logfile data small
* Helper script to make stickers for (paper) database.
* Implemented maximal size of tutoring groups.
* Fixed some bugs in "schein.py" helper script.
* Improved format of log messages (timestamps), User-Agent
* Fixed bug with unequal distribution of variants in case of 3 variants.
* Input field names now contain the sheet name to prevent browsers from
  filling in answers from old sheets.
* Display of correct solution even if participant selected "no answer"
  after closure of sheet.
* OKUSON now counts globally the number of exams and exports accordingly.
* Export of additional score info from exams.
* Generic script "sortselect.py" to handle exported data efficiently with
  respect to selecting subsets of people and sorting.
* New tags <IfExamRegistered> and <IfNotExamRegistered> to display 
  registration status in a generic way.
* Homework scores and exam scores can be floats. Exports and display
  of floats is according to locale. Only file store scores always with
  . instead of , as decimal point.
* Improved random behaviour for exactly three variants.
  ATTENTION: DO NOT USE DATA OF SUBMISSIONS FROM OLDER VERSIONS!!!


Changes from 1.0-fix2 to 1.0-fix3

* Striping comments from LaTeX code in alt-attributes of images
  (-> can now safely add references and solutions in exercise comments)
* Resolve a subtle bug with non-thread-safeness of the pyRXP XML parser
  (there is now a global pyRXP Lock object and the interface to the parser
   has been improved).
* Fix a bug within pyRXP which led to memory leaks during online validation
  of outgoing pages.
* Added Thorsten's statistic functions.
* Added Ingo's suggestion for tag <AvailableIDs /> (not in standard templates!)
* Fix timeout-functionality by only using timeouts in Python 2.3 and higher.
  Upgrading to Python 2.3 is now recommended to avoid hanging threads.
* Acknowledgements in the manual.
* Added Ingo's patches to support maximal possible scores and displaying
  them. 
* New script "showdiffsintemplates" to do what it says.
* Small layout change in "regchange2.tpl".
* Small layout change in display of maximal points to avoid German words
  in code.
* Documentation of new tags.
* Documentation of statistic functions.
* Fixed a bug in the evaluation of choice questions where selecting
  no answer is the correct solution reported by Axel.
* Fixed a bug in the statistic function for the noninteractive case.

 
Changes from 1.0-fix1 to 1.0-fix2
---------------------------------

* Added little feature in server/fmTools/AsciiData.py not related to OKUSON
* Tweaked the thread management to avoid two possible problems:
  - leftover threads if connection stays open
  - make worker threads "daemonic" such that they exit if the main thread does

Changes from 1.0 to 1.0-fix1
----------------------------

* Small layout change in html.sample/edithomeworkperson.tpl.
* Fix of bug for "c" ("choice") questions.


Changes from 1.0-pre4  to  1.0
------------------------------

* added support for ExamGradingFunction to automatically calculate messages
  and grades for results of exams. This should now complete the support
  for exams.
* added 'Content-Disposition' header line for PDF sheets
* fixed nasty bug in scripts/distribute.py
* documentation of external data formats as far as the user is concerned
* documentation of internal data formats as far as necessary for automatic
  grading functions and for overview
* documentation of automatic grading
* documentation of handling of exams
* documented missing interface elements
* added an example of needed resources
* chapter with customization examples
* cleanup pyRXP directory after build
* allow group number 0 in tutor input pages
* added some utilities to 'scripts' subdirectory
* improved 'testsheet' for optionally using the NoTable template (-n option)
* guest IDs are no longer members of groups (in cache in GroupInfo objects)
* sorting of IDs consistent (numerical if possible)
* little paragraph about usage of TEXINPUTS (e.g., for exercises containing
  images)
* made tutors page more user friendly by adding name column and separating
  lines
* added a script to remove a person from all data files when server
  is *not* running. Please pay ATTENTION to your data when using this!
* fixed bug with SHEETS element in .bla files reported by Ingo
* now floating point entries are allowed in homework excercises (this uses
  new "FLOAT" and "NUMBER" types in the AsciiData module
* changed log entries: validation only logs message if not successful,
  and for main user/sheet dependend pages a log-message now shows the id
  and sheet number (before the standard webserver line)
* the builtin webserver now waits some maximal number of seconds on
  terminating threads (set via BuiltinWebServer.TERMWAIT, default 3 sec)
* with 'testsheet' the questions of interactive exercises are now separated
  by a thin empty line

Changes from 1.0-pre3  to  1.0-pre4
-----------------------------------

* remove sending of "Location" header at administrator login to please opera
* fixed validity bug in /doctypehelp.tpl
* added correction of "Content-length" header in NoValidFunction after
  removal of validation icon, this fixes a nasty behaviour with opera
* added explicit Path to Set-Cookie header
* introduced PDF template without table for courses without interactive
  exercises and attribute for using it; added some corresponding alternative
  .tpl files (called .tpl.nointeractive)
* added pseudo elements for getting radio button and check box corresponding
  to persondataX components
* new pseudo element for select options with persondataX values
* made group 0 a valid group, so it doesn't need the groups.txt file in case
  of just one group (but put an entry with password in groupinfo.txt to use
  the /tutors.html interface)

Changes from 1.0-pre2  to  1.0-pre3
-----------------------------------
Attention: The following four configuration options are new in the file
           Config.xml.sample:
             DocumentRoot, GroupInfoFile, GradingFunction, GradingActive,
             and GuestIdRegExp.
           They are all optional and have sensible defaults.

* removed bug with double use of <Semester/>.
* introduced the 'openfrom' attribute for sheets, including admin
  access to not yet open sheets via administrator menu.
* sensible messages for 'start' when server already running and for 'stop'
  when no server is running.
* introduced on the fly validation of delivered XHTML pages to the 
  BuiltinWebServer, in OKUSON's Server nonvalid files are written to 
  temporary directories and in that case the validator icon is removed.
  Corrected a few errors detected by this in html.sample directory:
    adminlogin.tpl, generalinfo.tpl, results.tpl, sheet.tpl
* improved the <Results > element used in html/results.tpl, now the
  consideration of each of the interactive resp. homework exercises can 
  can be switched off.
* remove temporary files for PDF sheets.
* removed bug that made page with distribution into exercises classes nonvalid
* added export of people for distribution into groups
* added helper scripts to facilitate distribution in a semi-automatic way
* document this process in the manual under "Managing Participants"
* distribution into exercise classes should now be ready for usage
* added configuration option 'DocumentRoot', this changes "Config.xml"!
* added a few sanity checks at startup 
* added export facility for people including group membership, documented
* added sort functionality for export of people
* added option to send personal message to participant via admin menu
* re-styled administrator's menu
* moved files in server/Tools to a subpackage 'fmTools'
* added data structure for general information on tutoring groups, new 
  entry GroupInfoFile in "Config.xml"!
* added convenient deletion of private messages by administrator
* several improvements (we think) in sample OKUSON.css style sheet
* new optional configuration options "GradingFunction" and
  "GradingActive", which allow automatic grading.
* display of grades based on automatic decision via the GradingFunction 
  in the result page.
* added feature to register (and unregister) for exams
* export of registered participants for exam via administrator menu
* only allow super-password access from administrator enabled client hosts
* pages for tutors to change group password and to enter homework results
  for people in their group, by sheet and by person (for all sheets)
* introduce guest ID (usually 100000) via a configuration option
  GuestIdRegExp (optional, defaults to ^$ which matches only the empty
  id). Guest IDs do not appear in exports and one can authenticate to
  them with any password, even the empty one.
* added export of results including multiple choice, homework, and exams
* corrected a nasty bug with "choice" exercises
* added possibility to resubmit all submissions for a sheet to correct
  potential errors in the "correct solutions".
* made output at startup shorter (not every loaded web page is shown)
* add optional attribute "maxhomescore", not used up to now
* corrected loading of extra LaTeX headers in all cases
* improved testexercise and testsheet scripts, can now use other image viewer
* much more complete documentation

Changes from 1.0-pre1  to  1.0-pre2
-----------------------------------
* removed bug with redisplaying sheets including previous submissions.
* the ./stop and ./restart scripts no longer need the administrator
  password (thereby removing a problem with passwords containing '&'
  characters)
* changed default for access of BuiltinWebServer: from all hosts

