CHANGES.txt (unformatted text; opens in new window)

Below is the latest version of CHANGES.txt

$Id: CHANGES.txt,v 1.324 2016/06/28 14:38:47 peter Exp $

### Release 1.0.0 - 2016-06-29 / 2016062900 ###

Finally: Website@School 1.0.0 is released!

This release is dedicated to Dirk Schouten, the Website@School Project Leader,
who passed away on June 29, 2015, after a short illness.

For many years Dirk has devoted virtually all of his time and energy
to the project: dreaming up ideas for new modules, finding donors for
funding, coordinating translator activities, and writing the
comprehensive Website@School manual. His efforts were recognised when
he was appointed Member in the Order of Orange-Nassau by her Majesty
the Queen of The Netherlands in 2012. Dirk was and will remain an
inspiration to us all. He will be greatly missed.

- import/update of all translations
- new translations (work in progress): Hindi, Slovak.
- preparations for the upcoming new release

- changes in demodata: replaced the placeholder for 'news' with an
  instance of the aggregator; replaced placeholders for newsletter and
  newsletter archive with redirects to newsletter in showcase
- modernised HTML-headers in install.php

- new feature: statistics: overview of pageviews, per area or for all areas

- added to the CREDITS.txt and donors.php: two donors
- imported the original mime.types that was the basis of the mapping between
  file extensions and mime types in filelib.php. This file was retrieved from
  revision=104298&view=co Original date: 2004-07-15.
- imported up-to-date mime.types file from
  revision=1742054&view=co Original date: 2016-05-03. According to the
  header this file has been placed in the public domain for unlimited
  distribution. [devel/import/mime.types].
- quick and dirty tool mimemerge.php for merging mime.types into filelib.php
- re-arranged the logic that checks filename extensions and -mimetypes in
  filelib.php, filemanager.class.php main_file.php (and also in

- moved queue_area_node_alert() from PageManager to waslib.php for general use
- new feature: we now send alerts when a new post to an althing is submitted
- new feature: we now send alerts when a new newsletter article is submitted
- bugfix: althing moderation never yielded an alert

- new feature: Session Tool allows for killing existing sessions,
  to be used when a user's browser has crashed or accidently closed
  and a page/section was still locked.
- new permission in Admin for Session Tool (value 2048)

- remove FK constraint on locked pages/sections from table 'nodes';
- bump internal version from 2015041100 to 2016051700

- new feature: alert manager: add/edit/delete alerts

- added context-sensitive help link for alerts
- added context-sensitive help link for theme ruta

- bump internal version from 2015033100 to 2016041100 after adding favicon

- added download option for log message table [toolslib.php]
- added prune function to log message viewer [toolslib.php]

- added support for favicon.ico in main site configuration

- Upgraded CKEditor from 4.4.5 to 4.5.8 (latest and greatest), including both
  the full source file and the already smaller, stripped sources in

- addition to snapshots module: the slideshow is now interactive;
  navigation is now possible with cursor keys and spacebar 

- final version of search module

- all 12 modules now have a working interface for search:
  2 x NOP:    mypage, redirect
  8 x 1-on-1: aggregator, confab, crew (workshop), htmlpage,
              mailpage, search, sitemap, snapshots
  2 x 1-on-N: althing, newsletter

- added two search pages to global demodata
- added search support to newsletter module
- bugfix: redacted posts could be seen in full by specifying ?post=n [althing]

- new module: search
- lots of changes in all other modules to accomodate search
- minor tweaks

- both profile and password dialog require additional authorisation
  to prevent passers by changing a user's profile [mypage]

- new module: mypage
- added new module mypage to demodata too
- small changes in hotkeys in admin.php because ~D is now [~Done]
- converted login dialogs to responsive html 5 (mobile first)

- moved get_skin_names() and get_editor_names() from usermanager.class.php
  to waslib.php in order to reuse that code in the MyPage module
- added redirect to global $USER for easier editing of profile in MyPage

- updated license.html and about.html to be more responsive too
- removed old-fashiond HTML-comment trick for STYLE tags [theme.class.php]
- new theme Ruta

- theme Frugal is completely responsivified both in changed code
  and style information [base.css, theme.class.php]

- removed meta http-equiv Content-Style-Type from theme.class.php
  because text/css is the default anyway
- moved Content-Script-Type from meta http-equiv to http headers
  allthough it may be a little suplerfluous nowadays
- keep http-equiv Content-Type so charset UTF-8 is obvious when 
  document is at rest
- removed http-equiv MSSmartTagsPreventParsing alltogether
- removed the old-fashioned comment/script transition
- "description" and "keywords" are now user-editable instead of
  hard-coded in theme.class.php
- cosmetics
- added CFG->language_key to html root tag

- added newsletter.html to context-sensitive help [manual.php]

- bugfix: there was an error in the access control: some permissions
  did not cascade properly [pagemanager.class.php]

- new module: newsletter

- bugfix: dbsession_remove_obsolete_sessions() violated a FK constraint;
  we now first release the lock and subsequently drop the session record.

- removed calls to cron_send_queued_alerts() from main_admin.php and
  pagemanager.class.php because we now have a 'real' cron function.
  This needs to be setup though: /cron.php should be called periodically
  for this to work smoothly (say: at least once per day), preferably
  every hour.

- re-arranged code in main_file.php to easily check user file availabilty

- added support for cron jobs: two new options in site configuration
- cron.php now actually works and calls $module_cron for appropriate modules

- funnel-mode is causing headaches combined with pagination; we now
  no longer enforce funnel mode on the pagination feature.

- added functionality to Email class:
  . we can now handle multiple alternative message bodies automatically
  . it is now possible to add bot plain and related attachments
  . there is now a function to prepare a full message body without
    actually sending it

- add support for mysqli interface:
  . new classes DatabaseMysqli and DatabaseMysqliResult [mysqli.class.php]
  . mysql/mysqli-specific code in Install Wizard

- bugfixes:
  . typo in wasentry_script_name() [init.php, install.php]
  . replaced deprecated eregi() and ereg_replace() with preg_match
    and preg_replace() [translatetool.class.php, email.class.php,
  . renamed password_hash() to was_password_hash() to prevent nameclashes
    [loginlib.php, usermanager.class.php]
  . re-arranged function call to stop warning about pass by reference
    [theme.class.php, filemanager.class.php]

### Release 0.90.6a - 2014-11-17 / 2014111700 ###

- showstopper in upgrade routine: wrong database engine for additional
  tables. Fixed in mysql.class.php.
- Release 0.90.6 is NOT published.

### Release 0.90.6 - 2014-11-11 / 2014111100 ###

- minor tweaks in various translations
- added to the CREDITS.txt: translators, donors and others
- final preparations for new release

- Added 9 new languages: fil, fry, it, pap, ro, sh, vi, bg and ur.
- Updated available translations for the other languages

- Demodata for Aggregator is now complete (i.e. with demo snapshots too)
- Minor tweaks

- Added logo + link for four new donors:
  . Stichting Blindenhulp
  . Landelijke Stichting voor Blinden en Slechtzienden
  . Rotterdamse Stichting Blindenbelangen
  . Stichting tot Verbetering van het Lot der Blinden
- Added demodata for Workshop (CREW) as much as possible.
- Bugfix: no longer a hard-coded clear:both in aggregator pages
- Partial demodata for Aggregator added.

- Added CKEditor 4.4.5 too (latest and greatest), including both the
  full source file and the already smaller, stripped sources in
- Added option 'ckeditor3' to list of available editors in user manager
  and site configuration, including 12 translations.
- Core version bumped due to change in config; forces update to new version.
- Added refresh button to confab moderation NoMessage dialog
- Added a contact form to the showcase in the demodata

- Updated CKEditor 3.6.2 ->
- Removed the old source file from devel, added new one instead.

- re-arranged moderation dialog; split into two parts [confab]
- some code rearranged [confab]
- up to date translations in confab
- added special wide class to admin_base.css for use in confab moderation
- all accesskeys are now in upper case [dialoglib.php]
- added download button to confab report
- added full sitemap to showcase
- added redirect to website@school to showcase

- added moderation option to confab
- added style support for zebra-type listings to admin_base and admin_lowvision
- added Dutch translation of Confab
- minor tweaks and typos in other translations

- added report selections to report a la Althing [confab_admin.php]

- added hotkeys to general login dialogs [loginlib.php]
- added hotkeys to the Confab join dialog too [confab_view.php]

- added dynamic resizing to Visual interface to make the best use
  of available screen real estate
- Visual interface is now complete (in 4 different CSS-flavours)
- added support for minimised version visual.min.js in

- more progress with Visual interface: automatic updates now work
  with XMLHttpRequest.

- some progress with the Visual interface but still unfinished

- added new variable to class Theme: $silent_mode: allows modules to
  suppress the regular $theme output if set to TRUE [theme.class.php]
- added access keys to the input fields in Talk-screen [confab_view.php]
- done with the Braille interface

- bugfix; we now force our own session_expiry timeout [dbsession.php]
- yet another confab-field added to database: message_from_id can keep
  track of partcipant colour display (attributes) in Visual interface

- more or less done with the Braille interface
- code cleanup [confab_view.php]
- started with Visual interface

- basic functionality of Braille interface now works

- we now also accept 'friendly parameters' in login [main_index.php]
- it is now possible to gain access to the Confab via the passcode
- Confab login works

- we no longer show the uneditable conversation_id in config dialog
- added fields to keep track of userlist updates in Confab
- minor cosmetics

- added get_cookie_string() to validate/retrieve cookie in waslib.php

- reporting function in confab added
- minor cosmetics and typos

- added confab-specific demodata, currently visible via 'report'
  (work in progress...)

- start of confab module

- a small refinement in the error message display in loginlib dialogs:
  we now show the word 'Message:' and the message in bold for users
  who have style switched off (graceful degradation).
- we now attempt to logout the user in case of an error_exit()
- we now switch to a new area whenever one is specified in Page
  Manager. Furthermore, as a service, we open up the path to the
  specified node (if any) setting the tree view to custom. In
  combination with the login-feature that propagates the parameters,
  we can now send a 'deep link' by mail and let a user login and
  navigate to the correct place within the tree of an area. Handy for
  tending to moderations in the Althing module.

- many, many changes in loginlib.php. Highlights:
  . we now are able to propagate path_info GET[] parameters during login;
  . the dialog boxes have all been styled via program/styles/login.css;
  . we no longer use HTML tables for layout (makes for a much nicer
    view with styling switched off, also more friendly for the visual
  . we now recognise the correct path while (re)setting session cookies,
    allowing multiple instances of was running simultaneous in sibling
    directories on the same domain;
  . processing of POSTed credentials now also checks for utf8 validity
    (mostly by employing validate_dialogdef());
  . garbage collection is also performed after succesfull change of
  . we now set the focus to input fields near the end of the body rather
    than via onload() in the body tag;
  . added a few relevant keywords for this application via  meta-tags;
  . many cosmetic changes and code cleanup.
- correct cookie path via session_set_cookie_params() in main_index.php,
  main_admin.php and main_file.php
- new feature in index.php: we can now login on-the-fly on our way to
  an intranet which requires valid username/password. If the area is
  still not available (non-existig or no permissions), the infamous
  error 080 is returned after all.

- new parameter for text input fields: autocomplete="off" [dialoglib.php]

- Bugfix: the Theme::get_address() routine did not properly handle
  magic quotes in $_GET[] and $_SERVER[]; fixed.
- Bugfix: the AdminOutput::get_address() had the same issue: also
- Two get_address() routines replaced with a single function
  get_page_address_url() in waslib.php, keeping wrappers for compatibility.
- Removed translation for 'URL' because get_page_address_url() no
  longer prefixes the address with that translation.
- Bugfix: a stupid typo in html_a() in htmllib.php.

- added another parameter to the view-routine of the Althing-module:
  we can now show an individual post from the Althing via parameter
  'post'. This is used in the alert e-mail messages.

- Another change in the User Interface: we now show the module nickname
  next to the page_id, but only if user has edit permissions for that
  page. There is room for improvement here.
- Added nicknames for all existing modules in English, Dutch.

- Change in User Interface of Page Manager: now the title of a section
  opens/closes the section rather than opening the basic properties
  dialogue. Considerans: once a section exists it is far more likely
  that the section will be opened/closed rather thand edited. One can
  always use the pencil icon to go to the edit dialogue anyway.
- Another change in the User Interface of Page Manager: in the
  treeview all pages (not sections) now have a (nick)name for the
  module associated with that page. This nickname is translatable and
  it could be empty. Also, in the title (mouseover) the full name of
  the module is now visible.

- workaround for an issue in utf8validate(): PHP crashes if the
  string to test (via a Reqular Expression) is too long; implemented
  an alternative algoritm for longer strings [utf8lib.php]

- workaround for known issue in file(1) with .css-files [filelib.php]
- added .css as an allowable extension to installer [tabledata.php]
  and also to the updater [updatelib.php]. We can now upload
  .CSS-files to the datadirectory.

- added multiple file upload adding the "multiple" attribute in the
  File Manager; it is now possible to select multiple files in a
  single file input widget
- added automatic resizing of uploaded images to more convenient via a
  configurable dimension.
- added new site configuration option: resize_dimension (default:
  800px). Includes update of existing installations (core version
- various changes and additions in translation texts, notably in File
  Manager (add a file) and Site Configuration.

- bugfix in redirect-routine in main_admin.php

- framing error: changed 'blog' to 'weblog' (blog is weblog without the "we")
- added debugging info in generated BSSS per area/section/page

- minor cosmetics in Althing moderation: it is no longer an error to have an
  empty remark if nothing (marbles, visibility) changed anyway
- also added a feedback message in the case that nothing was changed
- minor cosmetics in Mailpage: we now have the same regime as Althing
  for Cancel buttons, etc.

- added Dutch translation of Althing (a lot of work)
- returned main menu in demo data to Search (get rid of 'Find')
- changed the MyPage-page into a section as a modules showcase
  with MyPage now as the first page in that section
- bugfix in updatelib: the options of the althing were not set
  in an upgrade/install of the module.

- added real pictures to Althing demo
- minor tweaks in Althing demo data & code
- re-arranged modules showcase: now under Find (previously Search) | Modules

- added context-sensitive help for modules, themes [manual.php]
- changed dimensions of the help pop-up from 640x480 to 760x570
  and also added scrollbars and resize option [main_admin.php]

- Althing reporting tool done. The Althing module is now feature complete.

- started with report function: first draft is working more or less

- still more tweaks in Althing: the post header now is completely configurable
- re-arranged the default post header layout
- added graphics for navigation up/down in Althing overview
- the link after submitting a post now actually works (if the post is
- shortened some translations

- minor tweaks in Althing
- added debug-parameter to InstallWizard via install.php?debug=1
- minor changes in althing demodata, tweaks in althing language 
- added sort and show/hide option in althing overview

- done with althing alerts: we now send alerts too when a post is
  published by a moderator.
- minor tweaks & cosmetics

- minor cosmetics in althing_admin.php: cleanup email lists
- save new post in althing_view.php
- added new file with common constants & routines: althing_common.php
- cosmetics in add a post dialog: toggle to show/suppress BBCode help
- added sending of alerts for 6 of the 8 cases: this really works
- bbcode help can now be made visible/hidden by clicking the title
- still work in progress, but almost there (thankyou-screen)

- althing: work in progress:
  . add  a post dialog works (including link to File Manager for
    registerd users)
  . detailed explanation of available BBCode
  . validation of new posts (including BBCode syntax check)

- various tweaks to the demodata, showing off BBCode-conversion to HTML
- althing overview is done, including styling via a separate CSS-file 
- preparations for creating a form to add a post are underway, but
  still: work in progress

- some code added for BBCode-handling: rendering & validating
- better display of Althing messages in althing_view() (still work in progress)
- small enhancement: user language now also displays language key in
  the edit user dialog [usermanager.class.php]
- althing_view_show_post() is still work in progress

- new feature: if a page/section is locked by another session the user can
  forcefully unlock (and relock) the page/section if the user_id's of both
  sessions are the same. This solves the problem of crashing browsers that
  leave nodes locked until the crashed session times out (which might take
  too long to be user friendly). [pagemanager.class.php, waslib.php]
- althing: removed loooong explanations from submenu items; we do have
  a manual for that
- moderation details screen: a few changes to win some screen real estate:
  . moderations: xx is and marbles are now on a single line
  . all radio buttons are now on a single line
  . the remark-field is limited to a single line
- any empty post header lines (in the translation) are not displayed.
  the layout of the post details is now completely configurable via
  the Translate Tool.
- added a preliminary 4th submenu option 'report' to Althing
- removed even more cruft from the various submenu dialogs
- Cancel in all submenu dialogs now return to the Althing Content dialog

- added $fragment-parameter to html_a() in htmllib.php
- basically done with the admin-interface of the Althing, only a few stubs
  are left (and also the Dutch translation). Next step: althing_view().

- Althing: change in the tabledefinitions: we now recognise three different
  values for initial visibility: 0=hidden, 1=registered users visible,
  anonymous cowards hidden, 2=visible. Althing configuration dialog is
- added the post moderation dialog, including a complex interaction between
  two sets of two radiobuttons that together identify (and allow the
  moderator to change) the publication status and the visibility. Short
  explanation: you cannot UNpublish a post that has been visible, ever,
  even if it was only for a very short while.
- added more sort options to the moderation list dialog: we can now
  also sort on the three visibility status-values:
  visible/hidden/unpublished or vice versa.
- we also show the mtime in a (sortable) column: this shows the date
  of last modification/moderation.
- added yet another demo-posting from an angry anonymous coward in
  reaction to the moderation action that Maria did earlier that night.
  This example/demo is beginning to get realistic.
- removed the clickable date because it cluttered the screen; you
  can now zoom in on a particular post by clicking the ID in the 1st
- the sort order is retained while in the moderation detail screen,
  which makes that the links 'Next' and 'Previous' follow the
  chosen sort order.

- added some more demodata and also created special permissions for
  members of the Seniors group so they can manage the demo-althing.

- minor tweaks in althing_admin.php
- added a preliminary set of demodata to Althing module including translation
- added another field to the althings table to calculate display_id only once

- minor cosmetics in Page Manager
- new mailpage is now complete, including the Dutch translation
- removed the submenu (mis)feature from Page Manager; we now have the
  new module interface with submenu options and all.

- many changes in mailpage addresses add/edit/delete but still work in progress

- we now always show the edit menu when editing content via the interface
  <module>_show_edit() and <module>_save(), even though it may
  distract the user (just a little).

- obsoleted file htmlpage.class.php (long overdue)
- some more code cleanup in htmlpage-module
- added CSRF-prevention and [Done] button module Sitemap
- added CSRF-prevention and [Done] button module Redirect
- added CSRF-prevention and [Done] button module Snapshots
- added CSRF-prevention and [Done] button module Aggregator
- added CSRF-prevention and [Done] button module CREW
- added CSRF-prevention and [Done] button module Mailpage (work in progress)
- cosmetics: a little more space in tabular dialogs in the ACL-Mmanager.

- undone two changes in show_menu_groupcapacity() and
  show_menu_group() in groupmanager.class.php because it added 'clutter'
- added CSRF-prevention to 7 dialogs in PageManager
- change in datadefinition: added field options to modules table
- changed module interface: added extra options field in
  <module>_show_edit() and <module>_save().
- updated install.php to handle new modules options while reading the manifest
- bumped internal version to 2014050500; this forces an upgrade which
  alters the database adding the options field to the module table
- modified the html-page module to work with the new module interface
- added CSRF-protection and [Done] button to htmlpage-module
- added two options to mailpage manifest, including translations in
  modules' language file (all very much work in progress)
- added preliminary update function for existing mailpages (adding
  two options to module table; see mailpage_upgrade() in
- a little code cleanup in the htmlpage module

- added CSRF-prevention to all 4 dialogs in File Manager
- added CSRF-prevention to all 3 dialogs in Translate Tool
- added CSRF-prevention to all 3 dialogs in ACL Manager
- added [Done] button to all 3 dialogs in ACL Manager
- added CSRF-prevention to all dialogs in UserManager
- added [Done] button to all dialogs in UserManager
- added CSRF-prevention to all dialogs in GroupManager
- added [Done] button to all dialogs in GroupManager
- added a link to the group's 'basic properties' in show_menu_groupcapacity()
  in order to make navigation easier between group/capacities and
  basic group properties.
- added a link to the 'Groups' overview in show_menu_group()
  in order to make navigation easier between basic group properties
  and the groups overview.

- added utility routines to prevent CSRF [dialoglib.php, waslib.php]
- added CSRF-prevention to:
  . Area Manager
  . Theme Configuration in AreaManager (via ConfigAssistant)
  . Site configuration (via ConfigAssistant)
  . Module manager (via ConfigAssistant)
- added thousands separators in upload dialog [filemanager.class.php].
- added [Done] button to upload dialog too
- added [Done] button to create directory [filemanager.class.php]

- added a new standard button 'done' in preparation of a massive
  change of the way most dialogs in W@S will behave: the current
  [Save] button will leave the user in the (saved and refreshed)
  dialog whereas the new [Done] button will save the data and
  subsequently leave the dialog. This is the answer to a feature
  request for 'save + edit again' notably in modules and also
  in the Theme configuration. This addition brings a lot of small
  changes in many source files and the addition of a button_done.gif
  icon file.
- various dialogs in PageManager now have three buttons:
  [Save] [Done] [Cancel]: add page/section, edit page/section basic,
  edit page/section advanced. This includes 'following' the user
  when a page, section or small subtree is moved to another area
  and the user presses [Save]. (If she moves a node to another
  area and presses [Done] she stays in the 'old' area.
- Still to come: add [Done] buttons to page Content dialogs (via
  module interface).
- Added the [Done] button to various other dialogs throughout
  the system:
  . AreaManager
  . Theme Configuration in AreaManager (via ConfigAssistant)
  . Site configuration (via ConfigAssistant)
  . Module manager (via ConfigAssistant)

- new feature in AdminOuput: we now also have a submenu to add to
  ($output->add_submenu()). The submenu is simply appended to the
  menu (at the end) allowing a module to add menu items below the
  main menu with 'Basic'. 'Advanced' and 'Content'. [main_admin.php]

- bugfix: we can now create tables without any keys definition in
  the tabledef [mysql.class.php:480]

- bugfix: wrong language domains caused untranslated menu-items in
  new languages (without $progdir/install/languages/$LL dir) under

### Release 0.90.5 - 2013-07-11 / 2013071100 ###

- final tweaks before release (updatelib.php:update_core_20130711())

- minor tweaks in varius stylesheets (input styling)
- preparations for more tweaks in styling added [dialoglib.php]

- all buttons now also have a class 'button' [dialoglib.php]
- re-arranged styling for skins to use 'button' class
- modified all default styles for existing themes to add
  styling for input elements
- minor changes in existing skins too, also with button style

- re-arranged location of contact page in demodata
- added a demo of the redirect module (combined with contact page)
- extra parameter 'friendly_url' now also available in demodata()
- better failsafe loading of translations in install (always load 'en' too)
- added Dutch translations for demo of mailpage in demodata()
- minor cosmetics

- almost done with the mailpage module including Dutch translation.
- added demodata for the mailpage module in quicklinks (top)

- additional validation in mailpage email address
- we now suppress the destination listbox if there's only a single option

- functional version of mailpage_view()

- small improvements in buttons [dialoglib.php]
- interim-version of mailpage_view()

- finished with the 'tokens' for visitor forms; added tokenlib.php
- temporarily increased version number to force database update for tokens

- added new table 'tokens' to keep track of instances of visitor's forms
- prepared for core update routine update_core_2013mmddxx() [updatelib.php]

- added mailpage module
- done with the admin-part of the mailpage module already

- added new language Greek (el)
- added new language Finnish (fi)
- added new language Russian (ru)
- added new language Swedish (sv)
- updated all existing translations (based on distribution version 0.90.4)

- minor tweaks in crew readme.txt

- tweaks in the CREW module
- added a tool to generate minimised javascript code [devel/tools/minjs.php]
- added code to create crew.min.js in crew module [devel/tools/]
- unpacks in a subdir automatically [devel/tools/]
- the 'running code download' also unpacks in subdir [crewserver.php]

- bumped year in copyright messages where necessary
- added special code to make a downloadable
  in /program/modules/crew/ [devel/tools/]

- fixed a few typos in the CREW module
- corrected the message color in Theme Frugal [base.css]

- added support for maximum # of shops and # of workers/shop via error
  code 1008: this disables all buttons etc. except [Cancel] [crew.js]

- added an (arbitrary) limit on document size: 65536 characters [crew_view.php]
- done with a preliminary version of CREW module (but no websocket server yet)

- added missing html_tag_close() [htmllib.php]
- added new standard button Edit [dialoglib.php and style/transalation files]
- new utility function hmac() according to RFC2104 [waslib.php]
- added Dutch translation for CREW-odule

- typos in crew module
- simplified the intro text for crew in module manager
- added a few has_module_*() permission functions [useraccount.class.php]
- rearranged internal structure of cached ACLs in Useraccount

- added preliminary version of crew module
  (Collaborative Remote Educational Workshop)

- added helptopic 'modulemanager' [manual.php]
- implemented module manager [modulemanagerlib.php]

- new theme: Cornelia

- noscript-addition to SnapshotViewerInline (graceful degradation)
- new module: aggregator (but still without demodata)

- moved routine get_module_records to waslib.php

- new class SnapshotViewerInline added in preparation for upcoming aggregator

- [install.php] added the site reply-to: address to the demodata interface
- new theme: Sophia

- added SIDN to the list or donors

- various bugfixes:
  . [main_admin.php] get_div_parameters() again correctly shows
    bullets (bug introduced in 0.90.4)
  . [waslib.php] get_friendly_parameter() now accepts parameter value '0'
  . [waslib.php] was_node_url() correctly now conveys friendly value '0'
  . [main_file.php] main_file() better check on tricks with /../ in path
  . [filemanager.class.php] file_url() better encodes file url
- new module: redirect
- moved two fields (link_href and link_target) to new module redirect
  from edit advanced node properties
- moved all translations (link_href and link_target) from admin.php
  to redirect.php for all available languages.

- new module: snapshots

### Release 0.90.4 - 2012-04-19 / 2012041900 ###

- [main_admin.php] selective number of bullets in message list
- bumped year in copyright messages where necessary
- corrected a few typos in translations
- [translatetool.class.php]: standardise on \n as EOL character
- more preparations for upcoming release
- more donors and translators in CREDITS

- minor tweaks and typos
- translation updates for de, es, fr, pl, tr and zh
- additional languages: ar, da, fa, hu, pt
- more translations for: de, zh
- manifest updated for en and nl language
- preparations for the upcoming new release:
  bumped internal version to 2012041900
- minor adjustments in the skins: we now only display the phrase
  'Messages' in the braille skin.
- we now use separate CSS-files for braille and textonly instead
  of admin_high_visibility.css 

- more support for skins in area manager, translate tool, group
  manager, file manager, user manager and acl manager.
- more fine tuning in alt-text translations
- skins now also provide toplevel navigation items
- additional style sheet for 'big' skin (PoC)
- additional style sheet for 'lowvision' skin (PoC)
- minor cosmetics

- we now show the word 'Messages' in the yellow message area to make
  it easier for the vision impaired to identify error messages 
- changed a lot of alt texts to better convey the meaning of
  icons, ie. what is the effect of clicking on the icon rather than a
  description of a pretty picture (see

- typo in translation: not implemented -> not YET implmemented.

- better message stating module manager and statistics are not yet implemented
- [main_admin.php] added display of donor logos to the start centre
- added new theme 'axis'

- [theme.class.php]: done with Bazaar Style Style Sheets
- [filemanager.class.php]: bugfix: do caseINsensitive check on filename ext.

- [updatelib.php, tabledefs.php]:
  . added field 'style' to table 'nodes' (for Bazar Style Style Sheets)
  . replaced field 'high_visibility' with field 'skin' in table 'users' and
    updated existing users in database:  high_visibility=FALSE -> skin='base'
    and high_visibility=TRUE -> skin='textonly'
- renamed variables $high_visibility to $text_only throughout preparing
  for the introduction of skins
- [usermanager.class.php] relaced field 'high_visibility' with 'skin'
  in the edit user dialog
- added a 'proof of concept' for the braille skin

- [about.html]: the logo now links to the project website

- imported CKEditor 3.6.2 (Minimum setup, ie. without source tree,
  samples, etc)
- imported the original CKEditor 3.6.2 source tarball in the
  devel/imports directory
- statement of chosen license for CKEditor added to
- updated several files in order to add ckeditor as an editor choice
  (this includes the install wizard and the demo data)
- started with an update routine to change the acceptable settings
  for editors in existing installations.

- [base.css, admin_base.css] minor omissions corrected

- [rosalina.class.php]: typo in construction of (single) logo

- [index.php, file.php]: re-arranged check for and redirect to maintenance.html
- [manual.php]: we now offer a choice of manuals if more than one is installed

### Release 0.90.3 - 2011-09-30 ###

- removed obsolete file area.class.php from repository
- removed obsolete file module.class.php from repository
- [updatelib.php]: added two files to list of obsolete files
- [updatelib.php]: renamed the update routine to match the new release version
- last minute update of Spanish: now completely up to date for 0.90.3
- Updated the list of contributors in CREDITS.txt
- Bumped version/release/release date to 2011093000 / 0.90.3 / 2011-09-30

- updated existing language files for Spanish, Chinese, French
- added new language Polish
- added new language files for German, Turkish
- replace icons for account manager and help button with new versions kindly
  supplied by Greg Whitaker
- [dialoglib.php]: additional input validation (UTF-8)

- [demodata.php]: bufix: some demo nodes (siblings) had identical sort orders
- removed obsolete file node.class.php from repository
- removed obsolete file modulelib.php from repository
- [updatelib.php]: we now check for obsolete files too
- minor cosmetic changes

- [pagemanager.class.php]: get rid of current area if it is no longer there
- [pagemanager.class.php]: bugfix: sort order is now calculated
  correctly when inserting a new page/section
- [updatelib.php]: added one-time fix for mixed-up sort orders in
  existing nodes
- New configuration item 'pagemanager_at_end' allows inserting new
  nodes at the top or appending at the bottom of a (sub)section in
  the Page Manager.

- [groupmanager.class.php] re-arranged some code, mainly dealing with
  group_delete() and group_save() (deletion of group/capacities) and
  also some cosmetics
- [groupmanager.class.php] added additional warning when user tries to
  delete her own group/capacity 
- [areamanager.class.php]: we now also remove the empty data directory

- renamed datadir_is_empty() to userdir_is_empty()
- minor cosmetics
- added function userdir_delete() and we now remove the (empty)
  userdirectory when the user account is deleted
- [groupmanager.class.php]: we now enforce that the files must ber
  removed before the group can be deleted. Also, the user cannot
  delete a group of which she is a member. Order of delete rearranged
  to satisfy FK contraints

- [instal.php] better test on JPG Support/JPEG Support specified by gd_info()
- [waslib.php]: added small routine to test for (user)files in data directory
- [usermanager.class.php]: additional checks before deleting user account,
  including blocking of delete own account; cosmetics
- [filemanager.class.php]: minor UTF8-related changes + cosmetics
- Global search and replace to change all references to the LOG_XXXX
  constants (replaced with WLOG_XXX) to circumvent a stupid difference
  between *nix and win platforms (see task_logview() in toolslib.php
  for more information).

- [updatelib.php] Incorporated changes to nodes.modules_id in upgrade routine.
- version.php: bumped internal version from '2011051100' to '2011092100' in
  preparation for the upcoming release '0.90.3'.
- fixed two warning messages (E_STRICT) by explicitly defining objects
  $CFG and $PERFORMANCE to be of type stdClass (/index.php, /admin.php,
  /file.php, /cron.php, /program/init.php).
- [areamanager.class.php] fixed error in deletion of area (unknown
  table 'user_areas', see also 2009-12-03)
- [usermanager.class.php] Streamlined deletion of user account;
  renamed routine and user records are now deleted in the correct order.

- [tabledefs.php] Removed the foreign key constraint for nodes.owner_id.
- [tabledefs.php] Removed the foreign key constraint for areas.cuser_id.
- [tabledefs.php] Removed the foreign key constraint for areas.muser_id.
- [htmlpage_tabledefs.php] Removed the foreign key constraint for htmlpages.cuser_id.
- [htmlpage_tabledefs.php] Removed the foreign key constraint for htmlpages.muser_id.
- [sitemap_tabledefs.php] Removed the foreign key constraint for sitemaps.cuser_id.
- [sitemap_tabledefs.php] Removed the foreign key constraint for sitemaps.muser_id.
- [guestbook_tabledefs.php] Removed the foreign key constraint for m_guestbooks.cuser_id.
- [guestbook_tabledefs.php] Removed the foreign key constraint for m_guestbooks.muser_id.
- [mysql_class.php] Improved/streamlined create_table_sql()
- [install.php] and [demodata.php]: adjusted the order of things so we
  do not violate FK constraints on initial install
- Fixed FK constraint in nodes.module_id by allowing NULL values in
  case of a section; adapted pagemanager too.

- [tabledefs.php] Removed the foreign key constraint for nodes.parent_id.

- Resized several fields in database to stay within MySQL/InnoDB key
  limits of 767 bytes with charset utf8mb4 [see updatelib.php]:
  . areas.path: varchar(240) => varchar(60)
  . varchar(240) => varchar(80)
  . groups.groupname: varchar(255) => varchar(60)
  . groups.path: varchar(240) => varchar(60)
  . log_messages.remote_addr: varchar(255) => varchar(150)
  . login_failures.remote_addr: varchar(255) => varchar(150)
  . varchar(240) => varchar(80)
  . sessions.session_key: varchar(255) => varchar(172)
  . varchar(240) => varchar(80)
  . varchar(240) => varchar(80)
  . users.path: varchar(240) => varchar(60)
  . users.username: varchar(255) => varchar(60)
  . varchar(240) => varchar(80)
  . users_properties.section: varchar(240) => varchar(80)
 This applies to both the update routine and the tabledefs for
 a new installation.
- Adapted dialogdefs in areamanager for new shorter path
- Adapted dialogdefs in groupmanager for new shorter path and name
- Adapted comments in dbsessionlib for new shorter session_key
- Adapted dialogdefs in usermanager for new shorter path and name
- waslib.php: made sanitise_filename() UTF-8 aware

- main_admin.php: added a special intermediate screen for those
  intranet-users that accidently hit admin.php (prevents some confusion)

- theme.class.php: removed all references to WAS_SCRIPT_NAME:
   we now use was_node_url() instead.
- theme.class.php: better UTF-8 sanity check in get_address()
- witemap_view.php: better handling of preview_mode

- waslib.php: many important changes in the way node_id and/or
  area_id and other paramters is conveyed to index.php; we now accept
  calls like /was/index.php/35/photo/5/Picture_of_our_field_trip.html
  but also (still) the equivalent /was/index.php?node=35&photo=5.
  See get_requested_node() and was_node_url() for more information.
- install.php: improved educated guesses in get_default_install_values()
- waslib.php: slight changes to the was_node_url() code so we can use
  this routine for areas too
- theme.class.php and rosalina.class.php: changed to use was_node_url()
  and removed a few superfluous routines (Theme::friendly_bookmark()
  and ThemeRosalina::rosalina_href()).

- install.php: we now use trick with an invisible img to determine
  whether we can use the friendly URL feature
- added a few more keywords to the demo data of frugal theme demodata

- install.php and init.php: added complex routines to make sure that
  we use the correct value of the currently executing script. See the
  (long) comment for install_script_name() in install.php
- waslib.php: streamlined internal url handling (was_url(), was_file_url())

- minor additions to install wizard: better processing of demo data

- refined context-sensitive help in tools menu

- minor tweaks in schoolyard theme

- theme.class.php: added html-class 'current' to LI-tag in navigation bar too
- theme.class.php: extra html-classes 'activepage' and 'activesection' in menu
- added theme 'schoolyard' (designed by David Prousch, May 2006) to

- installer: make demo data more accessible for additional themes
  and modules; we now also keep track of nodes, groups and users
- added theme 'rosalina' (based on HV Menu by Ger Versluis 
  ( to Website@School

- pagemanager.class.php: fixed a bug in calculate_updated_sort_order():
  the calculations went wrong when sorting within a subsection

- corrected a stupid typo in demodata.php
- streamlined the fetching of module_id's in demodata.php
- theme.class.php: show area in breadcrumbtrail for quicklinks too

- pagemanager.class.php: better error handling in connecting and
  disconnecting modules and nodes
- sitemap module:
  . added an optional header and introductory text to sitemap
  . various cosmetic changes
- added a real sitemap to the demodata, including a non-blank
  header and introduction (in all languages)

- waslib.php: renamed function build_tree() to tree_build and
  changed the function calls everywhere else (theme.class.php,
  pagemanager.class.php, aclmanager.class.php, main_index.php)
- waslib.php: moved routine calc_tree_visibility() from
  theme.class.php because it is even useful outside the theme
- renamed calc_tree_visibility() to tree_visibility() and changed calls
- added initial version of the sitemap module

- theme.class.php: various cosmetics regarding the separators between
  quicklinks at the top/bottom of the page

- waslib.php: added a routine was_url() to qualify relative URLs
- theme.class.php:
  . the [Go] button is now always visible (reverses
    earlier decision to embed it in noscript-tag)
  . autosubmit now works with this.form.submit() instead of
    by naming the form
  . added class variables for separators in quicktop, quickbottom,
    breadcrumb trail (easier to change)
  . we can now indicate which menu to show via additional paramter
    menu_id in get_menu()
  . code cleanup / increased readablity
  . bugfix: we now actually obey the global 'friendly_url'
    configuration parameter
  . modified friendly_bookmark() to deal with UTF-8 and diacriticals
    in a slightly less ASCII-centric way

- theme.class.php: we now add the area name to the breadcrumb trail
- theme.class.php:
  . prepare the jump menu in the constructor (saves a trip to the
    database); adds an additional variable $jumps to the class   
  . minor cosmetics

- theme.class.php: the [Go]-button in the area jump-menu now only
  appears when the user has switched JavaScript 'off', otherwise we
  autosubmit the form.

### Release 0.90.2 - 2011-05-11 ###

- configassistant.class.php: cosmetics in formatting of float parameter
- theme.class.php: always indicate UTF-8 via http-equiv too
- theme.class.php: minor cosmetics
- version.php: bump release and release date to 0.90.2 and 2011-05-11
  (the internal version was already bumped two days ago)

- init.php: we now always include utf8lib.php with essential UTF-8 utilities
- mysql.class.php: corrected stupid typo in dump().
- useraccount.class.php: yet another stupid typo (in Useraccount())
- updatelib.php: database conversion from charset 'whatever' and
  collation 'whatever_whichever_ci' to 'utf8' and 'utf8_unicode_ci'
  (or 'utf8mb4' and 'utf8mb4_unicode_ci').
- version.php: bumped internal version from '2011020100' to '2011051100' in
  preparation for the upcoming release '0.90.2'. 

- mysql.class.php:
  . cosmetic/documentation changes
  . added code for full / partial utf8 support (partial <5.5.3, full 5.5.3+)
  . set charset to utf8 or utf8mb4 on connect()ing to the database
  . also remember the MySQL-version in the backup (dump())

- install.php: https on a non-standard port yielded the wrong port number
- utf8lib.php: added a function to map characters with diacriticals to
  plain ASCII as far as possible
- install.php: added the utf8_strtoascii() mapping when generating
  data directories; makes it more readable for some languages compared to
  simply deleting all multibyte UTF-8 characters
- demodata.php: better UFT-8 support and better sanitised directory names

- added Chinese translation (based on 0.90.1)
- updated Spanish translatation: now also based on 0.90.1

- loginlib.php: explicitly go to 'index.php' in 'home' link in login
- install: added some more comments for translators in Ennglish
  languages files 
- added French translation (based on 0.90.1)
- we now refer interested parties to for
  a full overview of credits (see CREDITS.txt).

- install.php:
  . suppress PHP-errors when realpath, opendir are outside
    the open_basedir tree
  . more checks on possible UTF-8 issues
  . added warning for obsolete MySQL-version (< 4.1) in
    database and compatibility screens (including
    Dutch and Spanish translation (partial))
- filenmanager: added the untranslated path to directory
  overview in task_list_directory()
- dialoglib.php:
  . slight change of the meaning of ~ as hotkey-indicator:
    we now only accept ASCII-characters. UTF-8 characters
    are silently ignored.
- main_admin.php: we now go explicitly to 'index.php'
  when navigating to the pulic area so a bare CFG->www_short
  will not take us to say index.html or default.htm.
- pagemanager.class.php: same for the preview function:
  explicit link to index.php.   

- install.php:
  . UTF-8 support for password validation routine
  . UTF-8 aware use of substr()
- uitf8lib.php:
  . added function utf8_substr()

- install.php: 
  . more support for UTF-8 in save_database()
  . additional input checks on absurd lengths

- install.php: all input (GET/POST) is now checked for UTF-8 conformance

- created utf8lib.php with essential routines for handling UTF-8
  (based on Unicode 6.0.0, February 2011)
- install.php:
  . we now explicitly check user input for valid UTF-8
  . added 'accept-charset=UTF-8 to all forms (perhaps superfluous)
  . improved caseINsensitive check for the 'I Agree' prompt

- install.php: added http-equiv Content-Type: text/html; charset=UTF-8

- bugfix: there was a problem with the database dump:
  NULL-values were not properly dumped.
- clarification: all relevant fields in the database
  can accomodate an IP-address of 15 or 39 characters
  because the relevant fields are varchar(255)
- finetuning the message-id header field in email class
- updated INSTALL.txt with instructions for upgrading
  and installing the manual
- replaced email address for submission of translations
  (in the translate tool)

### Release 0.90.1 - 2011-03-09 ###

- bugfix: a newly added language in the translate tool
  was always labeled 'active' even when the box was
  unchecked; fixed in translatetool.class.php
- re-arranged the status overview table in updatelib.php:
  we now have additional columns for release date and
- a new language without a corresponding manifest but
  added/created locally can now exist in the database
  without raising an error in the update status overview  
- changes in /program/version.php:
  . Bumped WAS_RELASE from 0.90.0 to 0.90.1
  . Bumped WAS_RELEASE_DATE from 2011-02-01 to 2011-03-09
  . WAS_VERSION remains unchanged at 2011020100
- bumped release/release date in various manifests too
  (languages, modules, themes).

- done with install_theme() and install_module():
  we can now install new themes and modules
- corrected a few typos
- added the Spanish translation of v0.90.0 to CVS
- bumped all versions and releases of all existing
  languages, themes and modules to
  2011020100 / 0.90.90 /  2011-02-01 in order to
  make it clear to which core version a particular
  subsystem belongs. Old (internal) versions:
  frugal: 2008022000, htmlpage: 2008112500,
  en: 2010092700, nl: 2010092700. This requires
  a manual update in the update manager (which is
  in fact a no-op).

- added more clarification in htmlpage_install.php
  about inner workings
- corrected a few typos
- modified a few translations in 'en' and 'nl'
- added the routine for updating existing modules
- started on install_theme() and install_module()

- added some more clarification in frugal_install.php
  about the inner workings of the call-back routines
- we can now call the theme_upgrade() call-back from
  the Update Manager (updatelib.php).

- streamlined the update status overview in updatelib.php
- added code to update and install additional language packs
  in updatelib.php.

- updated version of manual.php

- bugfix: typo in /program/manual.php

- the new Project Home Page is now at;
  many, many sourcefiles modified to include the new location
  (mainly in copyright messages)

### Release 0.90.0 - 2011-02-01 ###

Today the complete development of WebsiteAtSchool was transferred
to CVS at the development site BerliOS (,
using the current version (which we used to call 0.1.7).

We now start with a new phase in the development, i.e. a publicly
visible CVS-server and official releases etc. This is a good
opportunity to bump both the internal version and the external
version (release) and start with a more or less clean slate.

Furthermore, we will be generating a first 'official' release today.

Changes in /program/version.php:
- Bumped WAS_RELASE from 0.1.7 to 0.90.0
- Bumped WAS_VERSION from 2010122100 to 2011020100
- Bumped WAS_RELEASE_DATE from 2010-01-20 to 2011-02-01
Changes in /program/lib/updatelib.php:
- Added logic to update existing database versions to 2011020100

*******                                                   *******
*******                                                   *******

- changed development colours to something more appropriate
- completely overhauled version of devel/tools/
  we can now generate 'official' releases too
- updated copyright/license message in scripts in devel/tools
- bumped release from 0.1.6 to 0.1.7 just to test the release
  procedure. After checking in version.php we need to add a
  revision tag with 'cvs rtag release-0_1_7 was' and see what

- added a simple counter/index to translate tool: makes it
  easier to refer to a particular translate string on the phone
- added a devel tool to identify changed and added strings
  between versions in a convenient single HTML-page
  ( in the tools directory)
- corrected a stupid typo in English and Dutch translations
- bumped version from 0.1.5 to 0.1.6

- Changed bottom line in main_admin.php: we now only display
  the execution time, # of queries and TOD when in debug-mode.
- Removed the (empty demo-like) stubs in the group manager and
  user manager indicating configurable modules per user/group.
  This makes it easier to create realistic screenshots for the
  upcoming manual.
- Bumped release from 0.1.4 to 0.1.5

- completed the automatic execution of the update manager
  (called whenever there is a mismatch in the core version)
- added update manager to tools menu
- bugfix: removed double escape in version check icon in start center
- bumped release from 0.1.3 to to 0,1,4
- bumped version from 2010120800 to 20101221 (just for testing purposes)

- started with support for automatich update wizard
  (driven by internal version number mismatch)
- bumped version to 0.1.3

- bugfix: missing closing '>' in buttons in install.php
- bumped release to 0.1.2
- bugfix: error with deleting of sections/nodes in pagemanager.

- bugfix: if CFG->www_short is empty, the link to the public
  site was broken [main_admin.php]
- bumped release to 0.1.1

- mass update of all source files, now with the correct
  copyright text and link to license.html etc. (continued)
- renamed DatabaseResult to DatabaseMysqlResult to prevent name
  clashes once DatabasePostgresql and DatabasPostgresqlResult
  once these are written
- cleaned up various files (removed obsolete chunks of dead code)
- added the 'registered trademark' message to the loginlib
- removed the old (wrong) logo from the standard theme
- updated base.css to increase height of quickbottom div
- added a rel link to /program/graphics/favicon.ico (in
- bumped external version from 0.0.7 to 0.1.0
- bumped internal version from 2010092700 to 2010120800

- cleanup of init.php; streamline the error_exit() routine
- mass update of all source files, now with the correct
  copyright text and link to license.html etc.
- various cosmetics
- added link to on-line license.html in LICENSE.txt too

- added the final version of license.html with all the legalese
- added /program/about.html with 'Appropriate Legal Notices'
- modified the installer to check for the exact version of license.html
- added global definition: WAS_ORIGINAL in version.php
- added some more logic to the online version check
- bumped release from 0.0.6 to 0.0.7
- added a few graphics files for 'powered by' and 'based on'
- added a new logo file of 284x71 (instead of 248x53)
- incorporated the 'powered by' and 'based on' graphics in install.php
- incorporated new logo in install.php
- header height in base_admin.css from 53 to 71 pixels for new logo
- added link to about.html via appropriate_legal_notices() in install.php
- added link to about.html via appropriate_legal_notices() in main_admin.php
- modified the translatable text in footer: we now force the English
  'powered by' (or 'based on') even in other languages.
- added an explanation for creating modified versions in '/program/about.html'
- also changed the address for new users from to

- raised the priority of logmessage when a virus is detected
  in filemanager.virusscan()

- we now use UTF-8 in the default Theme class; send it
  to browser via http-headers
- stupid typo in Theme class corrected (bugfix)
- new function: log view (in tools menu)
- added two more job permissions and changed existing:
  we now have separate permissions for translate tool,
  backup an logview.

- minor cosmetics: we now have a database backup named
  host-database-prefix-date-time (either .zip or .sql)
- we now have a 'hidden' feature that allows for downloading
  the uncompressed .sql by specifying 'download=sql' instead
  of 'download=zip'.

- bugfix in rfc2047_qstring(): we now keep UTF8-tails together
  with the first octet in the sequence in the same 'encoded-word'
- completed backup function in tools menu

- implemented a (database-specific) database/SQL-dump in mysql class
- first draft of database dump downloader in tools (no check on user perms yet)
- minor cosmetics

- moved a few mail-related routines from waslib to email.class
- adapted loginlib: we now use email class to send mail
- added a header implying that we send UTF-8 in login dialog too
- added an extra download feature: file.php/websiteatschool/languages
  now returns a ZIP-file with all user-defined translations of
  active languages

- added a supersimple mailer class in email.class.php
- adapted translatetool to use this new email class
- minor cosmetics

- fixed some bugs in filemanager.class.php
- preliminary changes in interfacing to mail() command (viruscan)
- cosmetics

- implementation of RFC2047-style quoted-printable
  mail header extensions in translate tool

- implementation of conversion to quoted printable according
  to RFC2045 section 6.7 (waslib.php)
- adapted routine to submit translatations to deal with
  quoted printable message
- (finally) converted the program's native language to
  UTF-8, at least in AdminOutput in main_admin.php
  (we still need to deal with UTF-8 in the database)

- translatetool.class.php: we can now really save user
  translation files under CFG->datadir/languages/
  (submit of translations is still work in progress)
- (later) initial version of sending translation works
  (more or less).
- added a cache reset to $LANGUAGE to force re-read of
  the userfile just written

- minor changes in language.class.php:
  . we now cache a list of _all_ (active+inactive) languages
  . removed obsolete and unused routine get_languages()
  . renamed get_language_names() to get_active_language_names()
- minor changes in files which relied on the old language.class.php
- nasty bug: a '.' in a fieldname yields a '_' in $_POST. Huh?
  workaround: use a ':'

- translatetool: 
  . we now have visible codes in the translation dialog.
  . we also have fields for metadata (per full_domain)
  . still work in progress

- translatetool: we can now show a domain menu in the edit translation
  dialog but otherwise it is still work in progress

- translatetool: we can now add new languages and edit existing ones
  but it still work in progress

- translatetool is work in progress

- changed the way languages are handled: we now store the
  name of the language expressed in the language itself in
  the languages table which required a change in the tabledefs
- bumped version from 2010070700 to 2010092700 because of the
  changes in the database (table definition of 'languages').

(after the summer break)
- bugfix (finally) in language class where valid translations
  were overwritten in memory when another phrase key was not found.

- we now have a distinction between browsing files limited by
  filename extension and uploading files limited by extension.
  bottom line: in the file/image/flash browser the user can only
  see and upload selected files, in the file _manager_ the user
  can upload selected files but see _all_ files, including 'forbidden'
  files (eg. some random script uploaded by an intruder)
- new feature: if a file is detected (in filemanager) which would
  currently not pass the test for allowable upload, the entry in the
  filemanager listing is displayed with the CSS error class and
  the preview links are completely disabled, preventing the user from
  accidently previewing a rogue file.

- now suppress menu too in filebrowser/imagebrowser (via .CSS)
- started with support for new job 'flashbrowser' (cousin of 'imagebrowser')
- added support for three new configuration parameters that limit
  the allowable file extensions (as a shorthand for allowable file
- bumped version from 2010063000 to 2010070700 because of the three
  new configuration options in the installer

- initial version of thumbnail-based file/image browser (still incomplete)

- added check on GD in installer
- added a hint to print the summary page in installer

- bumped WAS_VERSION from 2010052400 to 2010063000 because of
  a typo last week (it should have read 2010062400 but the actual
  value was 2010052400). Also, the new default value for 
  'thumbnail_dimension' decreased from 150 to 100 pixels.
- added support for thumbnails in the basic style sheet (based
  on the new default dimension of 100).

- added generation of thumbnails to file upload routine in file manager
- added more about limits (file size, upload size) in file upload explanation
- minor cosmetics
- bumped WAS_VERSION from 2010051300 to 2010062400 because of new
  configuration option 'thumbnail_dimension'

- re-arranged code and added new file /program/lib/filelib.php

- filemanager extended so it can double as a filebrowser via
  job=filebrowser and image browser via job=imagebrowser
- linked FCKEditor to the filebrowser and imagebrowser

- draft version of link browser combined in filemanager (filebrowser)

- done with file upload except for 1 small thing (sanitise file type)
- minor cosmetics here and there

- renamed new parameter 'files_upload_count' to 'upload_max_files'
- bumped WAS_VERSION from 2010051200 to 2010051300 because of this
- minor cosmetics here and there
- implemented F_FILE in dialoglib

- added comptibility check for Safe Mode (should be 'Off') in
- added support for clamscan anti-virus in install.php
- added extra configuration options in site config for clamscan
- added configuration option fo maximum number of simultaneous uploads
- bumped WAS_VERSION from 2010010700 to 20100512 because of extra
  site configuration options

- almost done with filemanager; what remains is file upload implementation

- added file delete confirmation dialog to filemanager

- filemanager: added a Javascript one-liner to select all files
- filemanager: we can now add (create) subdirectories

- filemanager:
  . directory listing layout done
  . sort option for three columns (ascending or descending)
  . human-readable filesize
  . various stubs for delete and add file/dir
  still work in progress though

- filemanager: navigation basically works but still: work in progress

- filemanager is still work in progress

- added some more navigation to file manager

- traded filemanagerlib.php for filemanager.class.php

- for now done with main_file.php: we can serve files from
  the data directory using the correct (?) mime types etc.

- Oops. Bug in tabledefs: there was no unique index on
  areas.path. Fixed.
- Done with download of source code: we now recognise
  file.php/websiteatschool/program (program code) and
  file.php/websiteatschool/manual (manual in current language)
- More oops. Another bug in tabledefs: we didn't have
  the unique index on path for users and groups either. Fixed.
- Busy with file.php: validation and access control done.

- started on file.php and download of source in .ZIP-file

- created a new class Zip (in /program/lib/zip.class.php)
  which allows for creating ZIP-archives on the fly, including
  Deflate compression, file and archive type comments and zipping
  from memory or from existing file.

- removed a lot of superfluous files from /program/lib/fckeditor
- suppressed the option 'fcksource=true' in dialoglib: the
  user that sets that parameter in $_GET gets the plain text area
  instead of the source-variation of FCKeditor (which is mostly
  deleted from /program/lib/fckeditor and wouldn't work anyway).

- added the full tarball FCKeditor_2.6.5.tar.gz to devel/imports
  so we have the original source nearby
- added type F_RICHTEXT as a gateway to the FCKeditor in dialoglib
- first steps to actually incorporate FCKeditor 2.6.5 in directory
  /program/lib/fckeditor ia CVS import function. We consider the
  extensions gif png swf pfx and fla to be binary files, the rest
  done via -ko.

- added view-only field in edit user that shows the data directory
- removed the 'advanced' option from the edit user menu because
  there is no 'advanced' dialog (yet)
- added editor selection to basic user properties, choices are:
  plain and fckeditor
- added the logic for groups path parameter
- added r/o view of data dir name in edit function in areamanager
- added r/o view of data dir name in edit function in usermanager
- added r/o view of data dir name in edit function in groupmanager
- corrected some typos
- added unique index on path field in areas table
- bumped version from 2010010600 to 2010010700 because of
  changed tabledefinition
- added the data path to the add area dialog
- update demodata so we have readable area data dirs now instead of

- we now also make subdirectories 'users' and 'groups' in the
  data directory (next to 'areas' and 'languages') in the
- we no longer record the words 'areas' and 'users' and 'groups' in the
  path fields in the corresponding tables, dirs are strictly separated
- added global configuration option for generating friendly URLs
  instead of querystrings
- added routine to sanitise filenames to waslib (used in creating
  datadirectories for areas, users and groups)
- we now check to see if the user tries to install with a username
  that is also used in the demodata
- we now actually create the datastructures in the datadir for
  all demo-data users, groups and also the areas
- bumped version from 2009120300 to 2010010600 because of
  changed tabledefinitions
- added more translation texts for new config items
  'friendly_url' and 'editor'
- fixed a few typos

- done with pagemanager class
- removed obsoleted pagemanagerlib.php

- almost done with pagemanager class

- 'playing' with stylesheet: we now see line-through on
  'dimmed' links in high-visibility mode (works for funnel mode)

- added funnel mode support to AdminOut

- very busy re-arranging code in page manager

- changed the has_..._permissions() routines in useraccount:
  we now test for 1 or more permissions, not an exact match
  anymore: ($perm & $mask) != 0 versus ($perm & $mask) == $mask.

- finally decided on the issue of 'per-area' datadirectories:
  we simply use $CFG->datadir/areas/<area_id>
- reworked the permissions in the area manager
- we no longer allow changes in the path property of areas;
  the field isn't even shown anymore.

- finally got rid of the tables users_areas and users_nodes
  because they are now replaced by the acls-tables.
- removed fields job_permissions and permissions from users table
  because they are now replaced by the acls-tables.
- implementing acls in the useraccount class (work in progress)
- bumped version from 2009102100 to 2009120300 because of
  changed/removed tables
- removed PERMISSION_VIEW from useraccount.class.php because
  it is now replaced by ACL_ROLE_INTRANET_ACCESS
- removed PERMISSION_ADMIN (which was added 2008-10-01) from
  area manager. It still needs to go from pagemanager.

- added an item to the CMS dialog in the installer
  to query the user for a generic demonstration data password
  (will be assigned to all demo accounts)

- done with demodata: we now have a public area with
  16 pages and 6 sections and a private area with 8 pages
  and 3 sections, alltogether in 2 languages (en and nl).

- demodata() now adds 3 areas, 4 groups and 8 users in 2 languages
- demodata() now also adds many nodes in 2 languages (work in progress)
- reduced the htmlpage_demodata() and frugal_demodata()
  to no-ops because all demodata is already inserted in the main
  demodata() routine.

- finished logic for datadirectory name based on dataroot
  and quasi-random subdirectory (to obfuscate the datadir
  if it happens to be located within the document root)
- we now create an empty index.html in both dataroot and
  datadir to prevent leakin information if dataroot is
  located within document root.
- added creation of subtree 'languages' to datadirectory,
  also with empty index.html files

- re-arranged the interface via manifest-files: we now
  fill the array manifests[] (plural), just like tabledefs[]
- main logic for installing is done, only thing left to do
  is insert demodata
- quick fix in set defaults for cms_dir

- yet another changed tabledef: bumped version from
  2009102000 to 2009102100
- we now install themes and languages too (not just modules)

- bumped version to from 2009101600 to 2009102000 because
  of changed tabledefs 'modules', 'themes' and 'languages'
- added manifest files for languages 'en' and 'nl'

- changed manual.php: we made a start with linking topics 
  and subtopics to html-files under /program/{$language}/
- changed handling of help_topic in install wizard (subtopics)
- we now actually create the data directory if it doesn't exist
- we now return a link to check for new versions rather than
  the simple assumption 'OK' in the compatibility dialog in the
  install wizard

- removed fields manifest_script and install_script from modules
  table; if necessary we can construct these from the manifest or
  use 'well known' script names (like 'tabledefs.php' and
- Bumped version from  2009061100 to 2009101600 because of change
  in the datadefinition of the modules table.
- We now are able to install modules via their manifest
  (but not yet demodata)

- extra debugging in database library and mysql class
- almost done with actual installer

- added more documentation to functions
- added functionality to write config.php (if filesystem permits)

- added a check on already installed
- added optional version check in compatibility screen

- the installer is still work in progress but all the dialogs are done

- more checks/validation in the installer

- re-arranged the code in install.php: we now have the InstallWizard class
- re-arranged the order of the funnel: we now require valid
  databaase credentials before we leak any information
- added delays to the database validation if something goes
  wrong, to scare off the spooks

- added suppress_output mode to AdminOutput class

- installer: work in progress

- installer: work in progress

- installer: work in progress
- added an ad-hoc image for an OK-button

- installer: work in progress

- added style for previous and next buttons to admin_base.css + icon

- we now require a new password twice when adding a new user
- code cosmetics

- done with pagemanager permissions in usermanager and groupmanager;
  we can now store and retrieve permissions on node level.
- added minor cosmetics in the expanding/collapsing of areas in
  aclmanager: we now always keep the section to expand/collapse
  visible on the current screen by setting the offset to the offset
  of that area
- updated translations

- after a lot of time I finally got the pagemanager permissions in
  the ACL Manager right: we can now actually save the settings via
  a complex dialog (for the programmer) that deals with screens
  (in long lists) and also allows for opening and closing areas.

- more work on the pagemanager permissions dialog, including
  walking the node tree in an area (work in progress)

- moved pagination code to AdminOutput()

- we now have fully implemented the 'related-acls' feature for
  the user intranet access dialog and the user admin access dialog.
- some more streamling in the install.php to navigate in tabledefs and

- we now also delete user associations with a group/capacity when
  a capacity is removed from a group in the groupmanager
- (special request) we now have a jump-menu in the theme via which
  a visitor can jump to any area available to her (logged-in users
  also see private areas if they have permission)
- added a users+groups summary to the account manager intro screen
- added support for user privileges intranet and also user privileges
  for admin, the latter including the related feature
- various typo's corrected

- we can now manipulate a user's group memberships: view, add, delete

- completed pagination routine with a limit on links to show
- changed default number of links to show to 7 (was 5)

- added pagination to users list in user manager
- added configuration parameters for pagination to $CFG via config
- added 'memory' to users list: after editing you return to list/screen
  you started from (if possible)
- bump version to 2009061100

- added function for sorted list of languages to $LANGUAGE
- saving basic properties of user now works

- minor tweaks in loginlib in order to reuse the password/salt-code
- added 'add user'
- added 'delete user'
- started with 'edit user'
- added more Dutch translations, again

- done with acl for admin jobs
- fine-tune in groupc apacity menu: suppress pagemanager link
  if this group/capacity has no permission for page manager
- more or less done with users overview (but Dutch translations lack)

- code cleanup in group manager
- more logging in group manager
- some small convenient enhancements to the install.php
  making it easier to keep track of the logging
- delete group function now works
- added more Dutch translations

- we can now save group data, including checks on ACLs etc.

- busy with implementing ACL-configuration starting with intranet permissions
- added more and more information to the demodata: now with an acls-record
  for every user and every group/capacity.

- typo in tabledefs; bumped version to 2009052600

- added a breadcrumb trail to the admin output object because
  we really need this to remember where we are in the account manager
- added list of users per group-capacity (task=capacityoverview)
- minor cosmetics (inluding correction of type in name Helen
- busy with the navigation between various screens dealing
  with group-capacity properties

- added some 55 dummy-users and 15 dumy-groups to demodata
  in order to 'play' with the account manager
- we now are able to add new groups, including up to 8
  capacities per group  

- group manager: we can now show a list of existing groups and
  group-capacities including clickable links
- addded some group data to the demodata
- bumped the version to 2009051900 to make sure that the demodata
  is re-created in the testversion

- updated logo's, now with ®
- added new icon for account manager
- moved usermanager around together with the group manager;
  there is now a top-level accountmanager for users and groups

(after some two months of thinking we're back with more)
- start with better access control via 6 new tables
- added three tables for additional group-based access control
- obsoleted two tables (users_areas and users_nodes) and
  some fields in the users table: the functionality is now
  available via ACLs.
- bumped versions to 0.0.5 and 2009041500
- Deprecated  the 'unsigned' attribyte in tabledefs because this is
  a non-standard feature which MySQL happens to implement but
  other DBMSs might not. In general 2^31 integers should suffice

- rearranged code for calculating the URL for version checker on
  project's website
- added support for Bazaar Style Style Sheets on static level and
  on area level (not yet on node level; todo)

- fixed bug in dialog_validate(): viewonly fields should not need to 
  be validated because they are not supposed to change anyway
- added routine for manipulating/editing the main site configuration
  (via ConfigAssistant)
- got rid of get_configuration(): we now use get_properties() for the
  main config too
- done with the area manager except 1 little detail (the handling
  of the data directory)
- added support for datatypes 'l' (picklist) and 'r' (radio) in
  ConfigAssistant; the type 'c' (checklist) still needs to be done

- bumped version internal number to 2009031400 because of significant
  changes in the database (the extended configuration table format)
- added begin of support for 'Cascading Cascading Style Sheets'
  or 'Bazaar Style Style Sheets'.
- added yet more demodata to show the possibilities of the area manager

- almost done with area manager; we only need to copy the
  theme parameters when adding a new area
- rearranged/renamed some phrases in order to keep at least
  a little overview

- added a configassistant class as a quick tool for editing generic
  configuration data (first used in editing theme properties in

- moved all code dealing with area management to seperate class

- added functionality to delete areas
- started with functionality to add areas

- added fields mtime, muser_id, ctime, cuser_id to areas table
- bumped internal version to 2009022500
- bumped external version to 0.0.4
- added copy of webmaster account to account 'textmaster' to demodata:
  easy checking text interface with permissions of webmaster
- optimising queries on 'nodes' table by adding an index on field 'area_id'

- (finally) started with configuration manager
- added has_site_permissions() to user class so we can use access
  control in area manager
- moved some code from pagemanagerlib to waslib so we can reuse it

- incorporated a stub with base.css so we can see what a page will
  look like (more or less)
- minor cosmetics in the demo data

- more navigation in base theme: now tree-like menu
- added language files en and nl to frugal theme
- minor cosmetics

- added table themes_areas_properties
- added more demo data, including a quicklinks top + bottom in hidden sections
- changes in the built-in theme object
- bumped internal version to 2008120800
- added some more functionality to the built-in theme object

- removed global $NODE and $AREA; we use a local variable $area
  in main_index() and information about the node is to be found in
  the local variable $tree
- obsoleted file area.class.php
- obsoleted file modulelib.php
- obsoleted file module.class.php

- moved some more code from pagemanagerlib.php to waslib.php
- we no 'fix' circular references in function is_under_embargo()
  (this should be fixed and properly done in a database repair tool
  or something)

- moved build_tree() to waslib because it is used from main_index()
  too and not just from main_admin()

- some files re-arranged and renamed: e.g. /program/lib/adminlib.php
  now lives in /program/main_admin.php
- added stubs to /cron.php (which call /program/main_cron.php)
  and /index.php (which call /program/main_index.php)
- removed adminlib.php from CVS repository because it is now obsolete
- added begin of support for Apache's PATH_INFO feature for specifying
  area and node like index.php/aaa/nnn or index,php/nnn. This does
  pose a few problems with relative urls... to be fixed

- yet another change to the database: modules table
- version bumped to 2008112500

- added more logic to the garbage collection and expiry of obsolete
- added unconditional garbage collection after successful login
- added a default value for session_expiry to demodata
- renamed global config option sessionname to session_name throughout
- version bumped to 2008112400 because of change in demodata

- first attempt to actually save htmlpage content
- version bumped to 20081121 because of change in data definition

- added three stubs for modules: htmlpage, mypage and guestbook
- we now actually delegate the task of editing content to the module
  admin code

- we now take readonly into account when deleting nodes
- documentation in dialoglib
- minor cosmetics

- save advanced node properties now working (except moving a non-empty
  subtree to another area)
- bumped internal version number (WAS_VERSION) from 2008020100 to
  2008111000. This forces an error message/condition code 050, which
  means that the database is not in sync with the program. Normally,
  this would mean that an updater should be executed which changes
  the database structure. In the development phase we simple need to
  reload the demodata. Naturally I changed the version number in the
  demodata too.
- I also bumped the external version number from 0.0.1 to 0.0.2, just
  to gain some experience with changing versions.
- Added a FAQ about condition code 050.
- Added a field 'locked_since' to the nodes table, allowing to make
  the 'sorry, record is locked' message even more friendly

- minor changes:
  . default visibility for a new page is now 'hidden' as per Dirk's
  . field order in basic node properties now has module as last
    in the list
  . a 'default node' now loses the default node bit when the node
    is moved to another parent (preventing ending up with two
- added a class 'current' to options in the menu (currently there
  are two menus: the area menu and the node edit menu). The current
  item is underlined (via CSS).

- we now manipulate the sort order in such a way that the sort order
  of other nodes is increased/decreased in order to make room for the
  moved node.

- added stubs for module_connect() and module_disconnect() so we can
  actually link a module to a node (and unlink too, obviously)
- we can now almost save the data from the basic properties dialog
  (everything except the sort order by itself)

- we can now fill the dialogs for editing a node with data from database
- added Dutch translations for all prompts etc.

- rearranging the translations in /program/languages/em/admin.php
- minor change in admin_basic.css so we can indent options in a drop down list (tree)
- added a comment feature to the English translation file admin.php:
  this allows for communicating the purpose and context of strings to
  the translators
- completeted the dialogs for basic and advanced editing of nodes (but
  not yet the actual saving etc.)

- removed PERMISSION_NODE_EDIT_CHILD from useraccount class, changed
  into PERMISSION_NODE_EDIT_NODE because that makes more sense, I
- started with edit a node dialogs
- cosmetics  

- cleaning up code (it takes time to condense rough code and make it
  more elegant)
- added better logging to the alert feature
- on special request: now new nodes are added at the top of their
  section rather than at the end (some logic is more logic than other
- we play a special trick when adding a node: we force switch to
  custom view with all ancestors opened and any other sections

- added a routine that churns out alert messages every now and then
- added more logging + alert to change default routine
- minor cosmetics

- we now can add new sections and pages
- we now accumulate alerts when a new page/section is added

- a small diversion in the past week: add tables for alert function
  (alerts, alerts_areas_nodes)
- updated demodata to 'play' with alerts
- added function to lock records of nodes table, alerts table

- added even more functionality to dialoglib.php + documentation
- first attempt to do a dialog in pagemanager (no save yet) with new lib

- added more functionality to dialoglib.php

- added dialoglib.php

- moved some html-utilities to new file /program/lib/htmllib.php
- added some links + translations to the start center
- first start on 'add a section' code

- re-arranged icons, added new icons for visible/invisible page
- modified page preview to use a one-time access code via md5-hash 
- documented all routines in pagemanagerlib.php, code cleanup
- implemented the 'set home' function for nodes

- changed layout of node tree a little bit:
  . add a node is now displayed at the top of the tree
  . we no longer show sort_order and node_id in the anchor text
    (we do show the node_id in the mouse-over (title) though)
- added logic to switch between collapsed, customised, expanded
  tree view
- we now have stubs in place for all tasks in pagemanager, 
  including preview
- we can now use index.php to show a preview (stub)

- many changes in page manager: we now have an almost working tree
  view that can expand and collapse

- inserted a new permission: PERMISSION_ADMIN. If this bit is set in
  the user's permissions (either site, area or node), the user has at
  least one permission bit set to manipulate the site, area or node.
  It is more or less shorthand for 'one of the permission bits is
- we now have an area menu in pagemanager

- a few tweaks in adminlib.php (http-equiv headers)
- added a help topic in help button in navigation in adminlib.php

- moved workhorse /program/admin.php to /program/lib/adminlib.php
  to avoid confusion with file names (which 'admin.php' do you mean?)
- further documented adminlib.php, tweaked the page layout

- basic dispatcher in admin.php done
- change in datadefinition: added field job_permissions to user table
- change in datadefinition: added field high_visibility to user table
- added support for high visibility via additional stylesheet
- basic admin.php navigation is more or less done

- further refined page layout for admin.php
- added a basic version checker at

- started with admin.php

- added shortcuts for $CFG->www and $CFG->progwww

- changed $NODE, $AREA and $THEME into objects
- added support for redirecting users if they accidently request a
  page with an external link
- made a start with a base class for themes
- started with a minimalistic theme called 'frugal'
- created start of a theme factory
- minor cosmetics

- changed the creation of the $DB global object: we now use a
  database factory

- removed some of the trigger_error() calls in
  waslib/calculate_node(); only database errors now emit to screen if
  debug is TRUE; the rest now use logger(...,LOG_DEBUG) which writes 
  to the database in itself.
- we now kick unauthorised users/passersby out of protected areas with
  a fatal error 070 (cannot find node in area). They should login the
  regular way IMHO. I re-used error code '070' on purpose in order not
  to leak information about protected areas.

- changed name of config parameter for language from 'language' to
  'language_key' to stay in sync with other (database) fields dealing
  with language codes.
- moved all code dealing with translations and languages to a
  separate file and into a special class.

- cleaned up loginlib.php, added more documentation
- added logger() which logs important events in the database

- done with t() and supporting routines
- added en and nl translations for loginlib.php

- busy with translating strings via function t()

- changed interface for last_insert_id() method: use table+field instead of sequencename
- added new table login_failures
- loginlib.php now also implements the blacklist feature and the failures counters

- login mostly works, except blacklisting/failure counts
- added confirmation mail to user after succesful change of password

- added a javascript alert in every login dialog (near the end)
- created a random password/laissez passer-generator

- changed password requirements in loginlib: now min 6 chars etc.
- rearranged code in loginlib
- added more demodata to play with

- first draft of WAS-logo incorporated in login dialog

- still working on login/logout and various failure modes and also
  on the 2-step laissez-passer + bypass routine

- still working on login/logout and various failure modes

- started with login/logout routines, added file loginlib.php

- rearranged some code
- we now always read the complete config table in core
- added more config parameters in demodata
- refined session handling code
- added if_exist_session() type of routine to make sure
  we are not fooled by spurious cookies

- added tabledef for users, sessions
- added more support routines for database manipulation to waslib.php
- added a new file dbsessionlib.php

- renamed db_quoted() to db_escape_and_quote() to make the effect
  more obvious
- we now know the $node and the $area and even the $theme to use
- re-arranged some code; moved to waslib.php
- added even more demodata to 'play' with index.php
  and we added a clickable breadcrumb trail (that was _easy_).

- renamed the quote() method to escape() in Database class because it
  may add confusion; the difference between escaping apostrofs and
  adding apostrofs around a string in order to insert into the
  database like in db_quote().
- added a simple test-routine to dump data from the database

- added optional parameters $limit and $offset to Database->query() method
- we are now able to determine a valid area based on the user's request of
  'area' and 'node'.

- some more database manipulation routines added

- evade the magic in magic_quotes_sybase by issuing a fatal error,
  circumvent the magic in magic_quotes_gpc() with function magic_unquote()
- changed the format of demodata from SQL-statements to nested arrays

- added version check in init.php: the database version MUST match the
  code version, or else...

- started with demodata.php to play with

- added a simple tabledef dumper to install.php so we can see tabledefs
  in a tabluar form
- more tabledefinitions in tabledefs.php

- added much to the main tabledefs.php

- added a subtree under /program/install for tabledefs of the main
  system and also places for storing language specific demo data
- started with main tabledefs
- quick and dirty testcode in install.php to excercise/test the

- moved a lot of test code from install.php to /devel/test directory
  so I can 'play' with various subsystems without interfering with the
  real code. Currently /deve/test/test.php is focused on excercising
  the Database class.

- added an extra dummy parameter to $DB->last_insert_id() as hook for
  future extension with other database drivers
- added a function $DB->table_exists()
- added a test with some 128 fielddefs in install.php (for now)

- added $DB->debug (default FALSE), can be set via constructor
- added $DB->drop_table()
- added $DB->create_table() using 'generic' (not MySQL-specific) datadefinition
- added another file to 'play' with: /program/install.php
- moved diff_microtime() to init.php

- added new object type DatabaseResult to deal with queries returning data
- added a few more stubs in index.php to casually test Database/DatabaseResult-classes

- documented $CFG->debug
- got a few more methods working in mysql.class.php + q&d tests in index.php

- experiments with the 'poor mans' database factory were more or
  less successful: the code works, but phpdoc fails badly when
  the same class is defined multiple times within the same package.
  However, a postgresql-driver in a separate @packages does work
  with phpdoc. Oh well.
- re-arranged some code in the Database-class: we now have a separate
  method to connect to the server and open the database, we no
  longer do that from the constructor. Also, we no longer bail out
  on MySQL-errors because we can expect errors during install and
  we don't want to bail out at that point.
- added error and errno to Database class which store the results
  from the underlying database, handy to find out what, exactly, went
- added the parameter $CFG-debug in init.php
- moved the unset($CFG) from config(-example).php to index.php in
  order to make certain that we won't be fooled by a stray global
  set via $_GET or whatever user input
- added a fake microtime() function in case it doesn't exist in the
  environment. The fake version uses a fractional part of 0.0 but is
  otherwise 100% compatible with the real microtime() string format.
  The reported time will be off by at most 2 seconds, oh well.
- Added a global object to record the performance, including the
  time of start and stop of the script execution. Could be used to
  identify bottlenecks.
- rearranged the order of code in init.php
- added error_reporting depending on the value of $CFG->debug.
- brought the call to the new Database class in line with the new
  class definition
- removed the calls to error_exit() from the Database class; they
  do not belong there.
- documented the format of the release date variable in version.php to
  include the full seconds-resolution ISO 8601 date
- added more error checking in Database class via $DB->errno and

- made a start with databaselib.php and mysql.class.php
- some tweaking in version.php: now record full release date+time

- re-arranged the comments in config-example.php, hopefully clarifies

- added init.php
- added version.php: keeps track of version of php-files (for
  comparison with database to determine necessary update actions)

- added preliminary versions of README, INSTALL, etc.
- completed a quick and dirty script to generate documentation with
- completed a script to generate both distribution version and
  development version of W@S

- committed a first version of /index.php and config-example.php to
  CVS; we have now actually started creating program code
Author: Peter Fokker <peter (at) websiteatschool (dot) eu>
Last updated: 2016-06-29