Studs MVC Framework+ Changelog

version 0.9.8 (10/16/2006)

	* added language toggle to Golflog demo

	* added strip_tags to golflog string inputs to prevent XSS

	* added PlaceholderAwareProperties which will do parameter replacement on load

	* added support of type override on studs html:form taglib

	* added support for nested properties in studs forms by using an
	  alternate character (•) for the '.', which is restored on form submit

	* calls to bubble_exception() now put an entry in error_log since there
	  is a chance they won't make it up high enough to be visible

	* allow studs html:form taglib to generate form if not already present

	* add studs taglib for html:option

	* add spring MVC like action controllers (SimpleFormController)

	* added multiline to the studs html text tag to get textarea output

	* rename wrap() method to ref() for clarity

	* fix compatibility errors with PHP5 regarding passing by reference

	* add LogLevel TRACE

	* cleaned up the loading of the servlet context in extreme situations

	* fix problem with session cookie path when mod_rewrite is used

	* start session in Action when isTokenValid() is called, if not already started

version 0.9.7 (07/20/2005)

	* Automatic reload of Studs configuration file if changed [Studs]

	* improved handling of DTD validation for web.xml and struts-config.xml [General]

	* get_qualified_class() migrated to Clazz::getQualifiedName() and optimized [Horizon]

	* umask() behaves consistently, globally setting the file create permissions [General]

	* confirmed that the ternary operator works in EL and documented it [Phase]

	* throw exception if web.xml cannot be read in the include path [Stratus]

	* it is possible to eliminate index.php from URL and use mod_rewrite instead [Stratus]

	* modified EL processing so that arrays can be referenced as foo.bar or
	  foo[bar] so that cases where native arrays are used in place of HashMap
	  will still comply with JSTL EL syntax [Phase]

	* changed from Hashtable to HashMap across application [General]

	* changes are detected in the Studs config files (struts-config.xml) and
	  the ActionServlet is automatically reloaded if their timestamps have been
	  modified [Studs]

	* fixed bug in Assert that caused assertFalse() to fail [Horizon]

	* reimplemented the phase string taglib [Phase]

	* fixed token handling in form taglib so that now they are usable [Studs]

	* redirect taglib can take url as body [Phase]

	* enabled more flexibility in specifying configuration directories [General]

	* halt with better message when servlet work directory is not writable
	  [Stratus]

	* enabled handling of multivalued paramaters in Studs [Studs]

	* added HtmlCheckboxTag and HtmlPasswordTag [Studs]

	* ActionForm generator [Studs]

	* Fixed a parse error when ASP-style tags are enabled [Phase]

version 0.9.6 (06/27/2005)

	* PHP5 compatibility, which included changes for new reserved words,
	  handling of the E_STRICT deprecation errors [General]
  
	* Added more unit tests, including a mock for testing the Phase compiler
	  [General]

	* Enhanced golflog application, adding delete for add editors [Examples]

	* fixed problem with BeanUtils#describe() that was causing a server error
	  [Horizon]

	* fixed a problem with exception report that would bleed page content on
	  top of error report [Stratus]

	* fixed FormatMessageTag taglibrary thanks to Timur Vafin [Phase]

	* added Studs template taglibrary, ported from Struts, thanks to Timur
	  Vafin [Studs]

version 0.9.5 (04/06/2005):

	* changed Object#clone() to Object#makeCopy() to support PHP5 [General]

	* changed clone() to wrap() to support PHP5 [General] 

	* updated copyright to include 2005, correct e-mail address [General]

	* fixed collisions between generated function names in parent file and
	  include file for Phase compiled files by wrapping functions in a
	  namespaces [Phase]

	* fixed a dropped reference of the HttpSession because of incorrect use
	  of a static variable in the getSession() method; also added creation
	  time as attribute of session so session is aware of its state
	  [Stratus]

	* fixed probem in HttpConnector#fatalErrorWatchdog which prevented the
	  capturing of fatal errors in many scenarios [Stratus]

	* added several additional Studs taglibs, including html:cancel,
	  html:select, html:optionsCollection [Studs]

	* addded scope support for ActionMessages so that they can be passed
	  via the HttpSession and then cleaned up by the HtmlMessagesTag
	  [Studs]

	* fixed problem with Studs param keys that used '.' as PHP transposes
	  the '.' into '_' and therefore functionality such as "Cancel" was not
	  working correctly [Studs]

	* implemented BeanUtils#copyProperties and BeanUtils#describe for
	  copying common properties from one bean to another

	* added more uses of BeanUtils classes to replace procedural code
	  blocks [General]

	* added a new example, golflog, which more widely demonstrates the use
	  of Studs [General]

	* added file locking to the application context writer to prevent
	  collisions [Stratus]

	* opened up application context for reading/writing in the PageContext [Stratus]

	* changed HttpServletRequest#getParameterMap() to return a Hashtable
	  instead of a native array, so that the EL resolver could correct
	  syntax for that was not consistent with Sun's EL [Phase]

	* reimplemented a PhaseException if attempting to set a property on a
	  taglib class that does not exist [Phase]

version 0.9.4 (09/13/2004)

	* On some systems, $_SERVER['QUERY_STRING'] is not set if a query
	  string is not present, so santiy check was added to avoid a notice
	  error [Stratus]

	* Fixed problem with the logic in the setSuspended() method of
	  HttpServletResponse() which was discarding valid response output in
	  cases when at least two internal forwards
	  (ApplicationDispatcher#doForward()) were used consecutively
	  [Stratus]

	* Added the calc.tld file to the repository by putting it in the
	  directory with the class files and updated the build script to put it
	  in the proper place when packaging [Examples]

	* Fixed missing exception in FileWriter when file cannot be opened for
	  writing [Horizon]

	* Provide better error message when 'work' directory does not exist/is
	  not writable [Phase]

	* Added a quick hack to allow the digester to check the validity of an
	  XML document against a known DTD.  Both the web.xml and
	  struts-config.xml are now validated [Horizon, Studs, Stratus]

	* The retrival of the cached servlet context was fixed, so the servlet
	  container no longer reinitiaizes itself on every request [Stratus]

	* Added html:link tag to studs taglib for generating global-forward and
	  action-mapping aware links [Studs]

	* Corrected problem that was causing all servlets to be initialized
	  twice if set to load-on-startup in web.xml [Stratus]

	* The phase parser now skips over tags which it does not know anything
	  about, rather than throwing a fatal error attempting to call a method
	  on a non-object [Phase]

	* The output buffering used to capture PHP fatal errors has now be
	  reimplemented, this time capturing almost all possible errors,
	  including the ones that could be thrown during servlet initialization
	  if load-on-startup is used [Stratus]

	* Added preliminary unittest code which provides the very core
	  TestCase, TestSuite, and a TextUI runner [Horizon]

	* Drastically cleaned up phpdoc comments and @package tags so as to
	  produce consistent API documentation [General]