* Skins are attached to skinset rather than site objects
* Each site can have multiple skinsets
* Skinsets can inherit from each other
* Added subclasses of imagemgr and skinmgr that mount on root/manage
* added flushMailQueue to send mail objects contained in the mail queue (ie. app.data.mailqueue)
* added call for flushMailQueue from the scheduler function
* changed mail.send() to mail.queue() in sendNotification functions
* since site preferences are stored as xml the corresponding code had to be adjusted
* currently, no notification is sent if a story's status changes from offline to online (abuse factor is too high)
* there's only one global notification skin used for the mail body
* the sender is always set to sys_email to avoid the bounce problem we already had with registration mails
- moved constant definitions into separate file constants.js
- renamed checkEmail() to evalEmail()
- removed string check functions since they are replaced with AntvilleLib methods
- modified formatTimestamp to use AntvilleLib, site preferences are xml-encoded now
- added constructor functions for Message, Exception and MailException objects, changed interface of getMessage()
- added Method buildAlias() which is called by buildAliasFromFile(), now gets the destination collection as second argument
- modified getRole: use switch() instead of if/else if
- added method extractContent that extracts submitted story/comment content from req.data
- added method sendMail()
* myfile will become "myfile" w/o filetype
* myfile.foo will become "myfile" w/ filetype "foo"
* myfile.foo.bar will become "myfile" w/ filetype "bar"
* .myfile will become "myfile" w/ filetype "myfile"
* .myfile.foo will become "myfile" w/ filetype "foo"
* ".myfile.foo.bar" will become "myfile" w/ filetype "bar"
filenames beginning with a period thus will be transformed into generic ones to avoid them being
invisible on certain operating systems and/or to avoid possible exploits.
thus, lists of sites sorted alphabetically are now rendered by root/renderSitelist() by extra call in root/list_action() making it possible to put response.prevpage inside root/list.skin.
(note: the macro calls renderSitelist() with appropriate arguments and simply outputs res.data.sitelist immediately. maybe this is not what one could call a clean implementation?)
- changed default-formats for dates (short and long) in formatTimestamp()
- removed rescueing of req.data.submit and req.data.save in rescueText(). this means that a user who lost the session while writing a story will be redirected to the story-form instead of directly saving the story.
loading the full story index anymore and is usually faster than loading the site
and all its substories.
* Rely more on default values when constructing Hashtables and Vectors. The first
time go with the default size, then just use the last size as initial size for the new
ones. This is because adjusting the capacity of a Vector or Hashtable with less
then 1000 objects is usually a no-brainer performance-wise.