+ : new feature - : deprecated feature * : bugfix or changed code Bug numbers are references to bugs in http://www.achievo.org/bugzilla [names] are references to people in the AUTHORS file. Changed in ATK 6.1 ------------------ + Added select method to atkNode which returns an instance of the atkSelector class which can be used to fluently build a selectDb expression to retrieve a single row, all rows or the row count. (PHP5 only!) [Peter] + Added support for custom templates in the admin actions. [Ruud] + Added generic Ajax DHTML dialog support to ATK (see atkDialog). [Peter] + Added support for add dialogs. If you set the NF_ADD_DIALOG on a node you will be presented with a DHTML popup dialog for entering a new record instead of a separate page. Can also be used for atkOneToManyRelations and replaces the AF_ONETOMANY_EMBED functionality. Works automatically if the NF_ADD_DIALOG flag is set on the destination node but can also be enabled using the AF_ONETOMANY_ADD_DIALOG flag. Please note that this functionality should only be used for simple nodes with only a few attributes and no tabs or sections. [Dennis, Patrick, Peter] + Added support for "add or copy" dialogs. This special type of dialog makes it possible for the user to select whatever he/she want to create a new record or copy an existing record. The user is presented with a dropdown of records to select from and can also select nested atkOneToManyRelations that need to be included in the copy process (or not). This functionality can be enabled by setting the NF_ADDORCOPY_DIALOG flag on the node or by specifying it using the AF_ONETOMANY_ADDORCOPY_DIALOG flag on an atkOneToManyRelation. [Dennis, Patrick, Peter, Tjeerd] + Added atkExtendableShuttleRelation; a shuttle relation which can be extended with so called controls. Base classes for these controls are included. Controls can be used, for example, to filter content in fields. Will in the near future replace the normal atkShuttleRelation. [Tjeerd, Peter] + Added action caching support to atkFrontController. [Peter] + Added command line support for test.php file in atk skel. [Guido] + Implemented caching of query results by node and filter in atkmanytomanyrelation to prevent multiple identical query executions during a single request. [Patrick, Tjeerd] + Added functions addOption and removeOption to 'atklistattribute' for easy adding and removing options from a dropdown [Jeroen] + Added the actionhandler attributeEditHandler which provides a dialog for editing one attribute for multiple records at the same time. The new action can be used by calling the new atkNode method addDialogMRA() with 'attributeedit' as its argument, which will render an extra button next to the MRA dropdown [Dennis]. + Made it possible to extend atkTimeZoneAttribute by calling its methods non- static. [Tjeerd] + Added atkvardump Smarty modifier for debugging template variables. [Boy] + Added setLanguage method to atkLanguage. [Ivo] + Added Smarty string resource for parsing String based templates. [Boy] + Added support for editing records using a DHTML popup dialog. [Dennis] + Added support for JavaScript record actions (specify javascript: at the beginning of the action URL). [Peter] + Override prototype.js's String.evalScripts method so that JavaScript gets executed in the window context. [Peter] + Added query execution time info to the debug for more accurate performance data in oci9 database driver. [Patrick] + Added getAttributeNames() method to atkNode. [Peter] + Added support for menu images in atkmodernmenu class. [Lineke] + Added a new class atkTableRendererGrouped. Renders a table with collapsable/ expandable groups. [Edgar] + Added atkDataNode which can be used for nodes that don't retrieve their data from the database. [Peter] + Added atkManyToManyListRelation, a new view for the many-to-many relation where the selection is done using a multiple-select select element. [Peter] + Added rmdirRecursive to atkFileUtils to 'rm -rf' any given directory. [Jeroen] + Added an atkUrlVault class to protect applications against url tampering. Needs testing, so is not yet applied to ATK's own urls. [Ivo] + Added {atkdispatchfile} plugin for use in forms in Smarty templates. [Sandy] + Added fluent interface (method chaining) to addFlag, removeFlag, addOnChangeHandler, setForceInsert, setForceUpdate, addDestinationFilter, addOption, removeOption and addDependee methods. [Guido] + Added setOptions($options, $values) method to replace the complete set of options/values in atkListAttribute. [Guido] + Added atkDb::getValue function to get a single value (first row, first column) from a resultset. The getValue function accepts an sql query string. [Guido] + Added setAttributeOrder method to atkNode. [Guido] + Added Indonesian translation. [Deus] + Added option to set the administrator and guest password as an md5 hash in the config file for a little more security. [Guido] + Added adminFooter() support to atkTreeNode. [Guido] * Fixed XSS vulnerability, PHP_SELF was replaced with atkSelf, which does some anti-XSS on PHP_SELF before returning. [Ivo] * Improved the way sections are injected into add, edit and view fields. [Peter] * Improved read-only mode of atkOneToOneRelation (don't display as table but display in-line, also check destination NF_READONLY flag). [Peter] * Improved view mode of atkOneToOneRelation (display in-line). [Peter] * atkTmpFile now is able to recursively create the directory structure for the temporary file if the directory doesn't already exist. [Peter] * Fixed debug output in atkTestReporter. [Patrick] * Fixed non-object error in atkTextAttribute. [Patrick] * Fixed example test module in atk skel. [Guido] * Fixed several testcases. [Guido] * Fixed PHP notices. [Guido, Ivo] * Added class="btn_ok" to confirm button in atkNode class by default, similar to the cancel button, which has class="btn_cancel". Included the class "btn_ok" into the style.css of the achievo_modern and steelblue themes. [Patrick] * Fixed memory leak when config_debug is -1. Added debug level -1 to comments in config.inc.php [Jeroen,Sandy] * Fixed Italian language file. [Fabio] * Fixed attributes display in add screen when using an atkOneToManyRelation. In some cases all attributes were always hidden. [Dennis, Guido] * atkTime datatype returns time array by default with leading zero. [Boy] * atkDateTimeAttribute does not have an AF_SEARCHABLE flag anymore by default. [Peter, Dennis] * atkDurationAttribute now supports the AF_OBLIGATORY flag again. [Ivo] * Improved detection of clicks on the recordlist row or clicks on inputs, etc. in the recordlist row. [Peter] * Moved prototype.js overrides to separate JavaScript file. [Peter] * Removed the first preUpdate call (it was called twice due to a merge error). This fixes the problem that in the preUpdate the atkorgrec is not filled with nodes with the NF_TRACK_CHANGES flag. [Boy, Lineke] * Refactored the atkTableRenderer (backwards compatible). Functionally decomposed the render method. [Edgar] * Added getAttributeNames() method to atkMetaPolicy. [Peter] * Altered storage type for atkMultiSelectAttribute from 'string' to 'text' because 'string' appeared to be too small. [Patrick] * Don't eval response twice when showing a dialog. [Edgar, Peter] * Moved showTab() call to atkNode instead of atkPage. [Edgar, Peter] * Made more code adhere to naming conventions and global function fixes. [Ivo] Deprecation list: halt -> atkhalt getmicrotime -> atkDebugger::getMicroTime elapsed -> atkDebugger::elapsed session_level -> atkSessionManager::newLevel session_form -> atkSessionManager::formState session_vars -> atkSessionManager::sessionVars atk_get_trace -> atkGetTrace session_url -> atkSessionManager::sessionUrl href -> atkHref getDispatchFile -> atkController::getPhpFile / atkSelf * Cleaned up the way the dispatch file was determined for menus. [Ivo] * Fixed descriptor not showing in edit page title. [Guido] * Fixed several styling issues in win2k theme. [Guido] * When using AF_RELATION_AUTOLINK on a relation, a link is no longer displayed if there is no selected record. [Guido] * Attributes having the AF_SEARCHABLE flag will now always be searched in atkNode::searchDb() calls. * Fixed adminHeader() support in atkTreeNode. [Guido] Changed in ATK 6.0 ------------------ + Added a method to enable/disable the halt_on_error method so database errors can also handled by a custom errorhandler. [Wim,Martin] + Added atkFrontController and atkDataHolder. [Peter,Martin,Boy,Tjeerd] + Added wizard functionality. A wizard can be constructed containing atkNode classes. Class atkWizard supports all atkActions but it is mainly tested for add, edit and admin actions. [Maurice] + Added class atkController which controls which page to load and the sending of post and get vars. Several methods from atkNode have been moved to this class. Most importantly, methods for dispatching, page rendering and url creating are moved. [Maurice, Lineke] + Added getPostVar function which simply returns the _REQUEST params array or a specific param when a key is given as parameter. [Maurice] + Added atkWizardController class which is responsable for typical control actions for nodes being used with atkWizard. [Maurice] + Added member var m_renderBoxVars to atkActionHandler which is an array + Added 'get' functions to atkPage for javascript and stylesheets. [Maurice] + Implemented reuse of handlers in atknode::getHandler method, which is also necessary when you want to save member vars before you use them at a later time in your pageload. [Maurice] + Added style class for atkShuttleRelation. [Angelo] + Added atkCaptchaAttribute for use with e.g guestbooks to prevent spam. [Nico] + Added m_displayShowAll var to atkNavigator, so you can configure if you want to show the 'show all' link in the navigation [Wim, Nico] + Devided render part in the atkrecordlist class into a specific render part and a part which collects all needed data for rendering. This way it's easy to display a recordlist in a different layout. [Wim] + Added pre-action support in atkNode and atkActionListener classes. [Patrick] + Added support to the LDAP authentication class for searching in multiple locations (DN's) instead of one base DN as it was previously [Wim]. + Added function checkKeyDimension() in the atkManyToManyRelation class to fix a problem with local / remote keys being a multi-dimensional array which resulted in invalid queries (mostly occurred in combination with atkmanyboolrelation / atkshuttlerelation). [Wim] + Added the function getAttributes to get all the attributes of a node in an array. [Dennis-Jan] + Added {atkscript} Smarty plug-in (can be used to register a JavaScript file from within a template). [Peter] + Added {atkdatefield} Smarty plug-in (can be used to embed date controls in pages, based on the atkDateAttribute). [Peter] + Added {atkthemeimg} Smarty plug-in (can be be used to retrieve the path of theme images). [Ivo] + Added atkClassLoader::addOverloader, removeOverloader and hasOverloader methods to overload any class that is instantiated using atknew or atkinstance. [Boy, Ivo] + Added the ability to use a bracket-template in the value for default values in the atkImportHandler. [Ivo] + Added functionalitiy to atkOpenDocumentWriter to support styles in tags of generated documents. Html styles are converted to XML: bold, italic and underline are supported (any combination is possible with IE-generated html; for now, only the italic/bold combination is supported for FireFox-generated html code). [Jeroen] + Added JSON serialization/deserialization support, available as static methods of class atk.utils.atkJSON and available as Smarty modifier. [Peter] + atkButton now takes an optional parameter '$cssclass' that sets the css class for the button. [Harrie] + Added include/exclude parameters to atkNode::updateDb. [Peter] + DocumentWriter: convert Html bullets (fck-editor) to XML (tab + *) Only 1 level deep supported (deeper levels in html will be converted to level 1 in the generated document). [Jeroen] + Added function assignRecordByNodeAndSelector($nodename, $selector, $prefix = "") in atkDocumentWriter to allow a record to be assigned to the document by just supplying the nodename and selector as strings. This eliminates the need to do the atkGetNode, selectDb and assignDocumentSingleRecord calls over and over again. [Guido] + Added a space between the hours and minutes dropdown box of an atkDurationAttributes edit output. [Guido] + Added AF_PASSWORD_NO_ENCODE flag for atkPasswordAttribute, allows you to disable the encoding of passwords using the md5 algorithm. Moved the encoding also to a separate method (encode) which allows the use of different algorithms. [Peter] + Added getDb method to atkAttribute (retrieves the db instance from the owner instance with a fallback to the default db instance). [Peter] + Added escapeSQL method to atkAttribute (uses the correct database instead of the default database). [Peter] + Added support for many-to-many relations to atkMetaPolicy. Example: $policy->hasMany('people', array('through' => 'organisations_people')); By default the shuttle relation will be used, you can specify type bool(ean) in the options array for a many-bool relation. [Peter] + Added achievo_modern theme. [Norman,Boy] + Added selectable records override to atkManyBoolRelation and atkShuttleRelation. Usage: create a function named _selection($record, $mode) in your node and return the selectable records. [Peter] + Added AF_MANYTOONE_LAZY flag to atkManyToOneRelation, this flag makes it possible to lazy load a many-to-one record in list mode. This is required if your destination node uses a different database. [Bart, Peter] + Added some unittests. (bug #615) [Yury] + Added display function for fck attribute to prevent html tags from being encoded. [Guido] + Added atkIpAttribute for entering ip's (optionally with wildcards). [Peter, Guido] + Added atkGetClientIp() function for retrieving the client's ip address, this includes a check for webservers behind a load balancer etc. [Peter] + Made atkinstance() resolve the classname before using it, thereby enabling the use of overloaders for ATK singletons. [Boy] + atkFileAttribute: File mangling template can now reference all fetched values. Added support for _filename magic method in owner node to generate custom filenames. [Peter] + atkMetaNode now recognizes $filter var for setting a default filter. [Peter] + Bundled 'prototype window' class library. [Lineke] + Added AF_BOOL_OBLIGATORY flag to force AF_OBLIGATORY behaviour on atkBoolAttributes. [Peter] + Added setPostvars function to the atkActionHandler class. [Sandy] + The theme engine now recognizes custom action_[action].tpl template files. If they do not exist, the default action.tpl template is used. [Ivo] + Added min/max-date functions for atkDateTimeAttribute. [Jeroen] + Added new 'basic' theme, which is completely layoutless, and as much html-table-less as possible (mostly divs and spans). It is intended as a new basetheme (instead of the 'default' theme). Derived themes can be completely styled using CSS. [Ivo] + Added setMasterNode()/getMasterNode() to atkRecordList. This enables rendering of the recordlist of node X inside an action of node Y. [Ivo] + Modules can now provide a custom recordlist.tpl or .css. (bug #718) [Yury] + Recordlist navigation now contains a summary showing current records and total number of records ('Record 26-50 out of 261'). (bug #710) [Yury, Ivo] + Added support for atkTimeAttribute in atkImportHandler. [Dennis] + In atkImportHandler you aren't obligated anymore to select an identifier field. [Dennis] + Added basic URL-validation to atkUrlAttribute (only performed when AF_VALIDATE_URL flag is set). (bug #652) [Jeroen] + Added 'acceptUrl' function to atkUrlAttribute to specifiy which types of URL are accepted: relative, absolute and/or anchor URL. [Jeroen] + Added Mysql Cluster Master/Slave support. [Sandy] + Added recursive rmdir to atkFileAttribute. [Peter] + Added atkCreateStampAttribute for tracking record creation date. [Rich] + Added atkTextMarker utility class that can handle hiding elements of a string. Useful for building parsers/compilers/validators that do temporary string manipulations. [Ivo] + Support for custom authentication types. [Martin] + Added support for setting the security alias using var $securityAlias = ... in the meta node or specifying it in the arguments array. [Peter] + Added support for setting the security map using var $securityMap = ... in the meta node or specifying it in the arguments array. [Peter] + Added getAttributeOrder method to atkNode. [Peter] + Added support for editable attributes in recordlists. [Peter] + Added NF_NO_SORT flag for nodes (to disable sorting). [Peter] + Added new CSS dropdown menu. [Boy] + Added none option to search field of non-obligatory atkManyToOneRelation. [Peter] + Added static dateArrayToDateTime method to atkDateTimeAttribute. [Peter] + Added overlib javascript library. [Peter] + Added support for setting a security map in the meta node. [Peter] + Added partial_url method for creating partial dispatch URL's. [Peter] + Added support for partials to atkAttribute, atkManyToOneRelation, atkAddHandler and atkEditHandler. [Peter] + Added force update support to atkMetaPolicy. [Peter] + Added support for adding any attribute using the meta policy. [Peter] + Added selectable records override to atkManyToOneRelation. Usage: create a function named _selection($record, $mode) in your node and return the selectable records. [Peter] + Added selectable records override to atkManyBoolRelation. Usage: create a function named _selection($record, $mode) in your node and return the selectable records. [Peter] + Added (Ajax based) dependency mechanism between attributes. [Peter] + Added populate function to atkManyToOneRelation to populate the record with the descriptor field values or all data if only the primary key is available. [Peter] + Added descriptor handler support to atkNode and atkRelation. [Peter] + Added setForceInsert method to atkAttribute (works just the same as setForceUpdate, only then for inserts). [Peter] + Added $excludes / $includes parameters to updateDb. [Peter] + Added mock function for selectDb in atMockNode. [Dennis] + Added onchange handler for atkNumberAttribute. [Dennis] + Added busy with Ajax request indicator (theme can add element with id 'atkbusy' somewhere to indicate an Ajax request is being performed. [Peter] + Added descriptor to stacktrace array. [Peter] + Added charset option to database configuration. [Peter] + Added atkTriggerListener, which can handle pre/post(Add|Update|Delete) calls on records. Different from atkActionListener is that this means the trigger is truely called for all actions on the record(s). [Martin,Peter] + Added auto-complete support to atkManyToOneRelation. [Dennis,Martin,Peter] + Added setNoneLabel method to atkManyToOneRelation for specifying the label to use for the empty selection (for cases where you can't use the default translation). [Peter] + Added support for atkonetomanyrelation to use other fields of the ownerinstance than the primary key(s). [Lineke] + Changed handling of flags in atkUrlAttribute. Use ANCHOR|ABSOLUTE to accept anchor, absolute url and the combination (absolute URL followed by anchor) Created separate validateUrl function. [Jeroen] + Introduced new SESSION_PARTIAL flag to indicate for partial URL's where the current stack level data must be re-used without overwriting certain fields. [Dennis,Peter] + Sessionmanager can set a cookie which spawns multiple subdomains (eg .ibuildings.nl so you can be logged on to a.ibuildings.nl and to b.ibuildings.nl). Param set with $config_cookiedomain. [Wim] + Added script for restoring the focus after Ajax requests. [Peter] + Added setTabIndex function to atkNode for changing the tab order. [Sandy] + Added overlibmws JavaScript library. [Peter] + Added 'web20' theme, the first theme without frames, with Web 2.0 colors, rounded corners and partial XHTML 1.0 Strict compliance. [Boy] + Added support for port-specification for the mysqli driver. [Peter,Dennis] + Added {atkloadscript} Smarty plug-in (can be used to register javascript code to run at the body onLoad event). [Boy] + Added parts of Zend Framwork to atk/ext. Used for processing RSS feeds. [Jeroen] + Added DEBUG_NOTICE flag which only gets shown in debug level 3 or higher and made PHP notices use it. [Boy] + Added fpassthru convenience method to atkTmpFile. [Ivo] + Added atkIndexPage to ui directory. This class can be used to generate an index page which loads up your app. [Boy] + Added atkwarning and atknotice functions, used to add warnings and notices to your debug log. [Boy] + Added a new fileutils class where can copy a skell to a specific location and you can create a destination at once for example ../dir/subdir/sudir2 [Dennis-Jan] + Added feature to parse a directory name by a template. [Dennis-Jan] + Added selected record override to atkManyToOneRelation and Usage: create a function named _selected($record, $mode) in your node, enable AF_MANYTOONE_LAZY and return the selected record. [Peter] + Added true test database support incl. support for fixtures. [RenevO, Peter] + Added auto-completion support for many-to-one relation search. [Peter] + Added atkGetMimeTypeFromFileExtension to atkFileTools - to get the right mimetype for the given filename. [Harrie] + atkMysqlDb's metadata() method now supports 'database.tablename' format for the $table parameter. (bug #708) [Yury] + Added atkTagAttribute for tagging of records. [Dennis] + Added atkStateAttribute for selecting US states. [KevinLW] + Added support for specifying a node action handler using the module prefix for the node. [Peter] + Added support for specifying a ATK class path for the node action handler instead of an object instance. [Peter] + Added testcase for database clustering functionality. [Dennis-Jan,Peter] + Added $before parameter to atkPage's register_script method. [Ivo] + Added addCSSClass, getCSSClasses, getCSSClassAttribute methods to atkAttribute to customize the CSS class names of each attribute. (Not supported yet by all attributes, at least atkAttribute and atkTextAttribute work.) [Ivo] + Refactored atkModule to make it possible to easily change the default node location (added method getNodeFile). [Peter] + Added $config_use_browser_language configuration option to control whatever ATK should use the browser language or the language specified in the configuration file. [Peter] + Added support for using multiple test databases in case your app. uses multiple development/production databases. [Peter] + Added support for setSequenceValue to OCI DB drivers. [Peter] + Added support for indexed navigation in the atkMetaNode by using the member variable index. + Added integrity violation check to atkManyToOneRelation. NOTE: this might cause problems if your application sometimes tries to save incorrect values for atkManyToOneRelation fields. [Patrick,Peter] + Added atkQuery::addExpression method to add arbitrary SQL expressions to the select statement. [Peter] + Added atkExpressionAttribute which makes it possible to display the result of arbitrary SQL expressions as an attribute. [Peter] + Added support for filenames without an extension in the atkFileAttribute. (bug #791) [Sandy] + Added savepoint support to ATK DB layer (only supported when using one of the OCI drivers for now). [Peter] + Added support for postMeta function which will be called after the meta function when the attributes have been added to the node (when using an atkMetaNode). [Peter] + Added support for passing flags as the third parameter to atkListAttribute. [Peter] + Added atkAttribute::postInit method which is called at the end of atkNode's init method. [Peter] + Added function removeFilter to atkNode. [Patrick, Dennis] + An attribute can now specify it's own initial value by implementing it's initialValue method. Note: this means you should always call parent::initial_values in your initial values override if you want to use the attribute's own initial value. [Peter] + Added support for atkManyToOneRelation to be able to the value of the primarykeyfield directly, instead of having to pass it as an array. [Peter, Dennis] + Added JSON JavaScript library for encoding / "decoding" JavaScript objects to JSON and vice versa. [Peter] + Added atkCleanPath function for cleaning a given path. [Peter] + Added winxp theme. [Lineke] + Added atkconfig plugin for setting a smarty var with config variable. [Lineke] + Added $returnbehaviour parameter to session_form() method. [Ivo] + Added $levelskip parameter to atNode/atkController's feedbackUrl() methods. [Ivo] + Added atkDistinctFilter filter that can be added to a node to make all its queries be performed with 'distinct' clause. [Ivo] + Added support for more then one primary key in the atkmanytomany relation. [Ivo, Sandy] + Created atkGetUser, getUser is deprecated now. Added atkGetUserId() to retrieve id of currently logged-in user [Jeroen, Sandy] + Allowed override of mysql default columntypes by config, for example: $config_db_mysql_default_text_columntype = 'longtext'. [Boy] + Database authorisation does now support authentication to other databases than the default database. [Peter] + Added toggleForeignKeys method to atkDb which can be used to enable or disable the foreign keys in the database. Only supported by the Oracle drivers for now. [Peter] + Added atkSecurityListener class which can be used to listen for atkSecurityManager login/logout events. [Peter] + Added getContent/setContent methods to atkPage. [Peter] + Added atkCreatedByAttribute. (bug #747) [Yury] + Added setLinkFilter method to atkManyToManyRelation which makes it possible to filter the currently selected records both on load and delete. [Peter] + Added $levelskip parameter to atkNode's redirect() method [Sandy] + Added edit header functionality to the edit handler and the action template (default theme). Similar to the existing admin header functionality. [Patrick] + Adding atkTabbedPane to create subtabs on a form. [Yury] + Added expandable/collapsable sections. Usage: instead of simply specifying a tab name you can also specify it's section using "tab.section". [Dennis] + Added setInitialHidden and isInitialHidden to atkAttribute and adapted the edit handler accordingly. Where AF_HIDE hides the attribute completely (even from the source), this feature will only make the attribute invisible. [Patrick] + Added multiselecthandler. This handler shows a mra action for selecting multiple records, unlike the selecthandler which selects one record. Send atktarget, atktargetvar and atktargetvartpl to the multiselectaction, where atktarget is the target url, atktargetvar is the variable in the url which will be filled according to the selected records and atktargetvartpl is the template which is used to fill the atktargetvar. [Lineke] + Adding atkState class to store a value as a cookie or in the session. [Yury, Peter, Dennis] + Added rl_try JavaScript function which can try multiple actions on a record in the recordlist. Very handy to add an onclick handler on recordlist items (e.g. onclick="rl_try('{$listid}', {$row.rownum}, ['select', 'edit', 'view'], false);"). [Peter] + The atkQuery class now uses a fluent interface. (php5 only). [Ivo] + Added atkString datatype. (php5 only). [Boy] + Added autoload feature. ATK will now try to load classes for you if you forget to include them. (php5 only). [Boy] + The atkcustomrecordlist attribute is extended to support some standard export types (csv, excelcsv, html). [Patrick] + Added setComment function to atkradioattribute. This can be used for comments per option and are placed beneath each option. [Lineke] + Added Japanese translation (partial). (bug #506) [James] + Added atk.datatypes.atkarray with multidimensional replace function. [Patrick] + Added support for saving entered datetimes in UTC. [Peter] + Added atkNode::preAddToEditArray method: The preAddToEditArray method is called from within the editArray method prior to letting the attributes add themselves to the edit array, but after the edit record values have been collected (a combination of the current record, initial/edit values and the forced values). This makes it possible to do some last-minute modifications to the record data and possibly add some last-minute attributes etc. [Peter] + Added cookie data to the debug information. Also did some code cleaning. [Guido, Dennis] + Added atkTriggerError method, improves upon triggerError by extracting some of the fields directly from the attribute object and by reading the attribute's label from the attribute which makes for better translations in error messages. [Peter] + Added setInitialValue method to atkAttribute which makes it possible to set the intial value for an attribute without the need to implement the initial_values method or overriding the attribute itself. [Peter] + Added atkMetaPolicy::remove method to remove automatically added attributes. Doesn't work for manually added attributes! [Peter] + Added atkRegisterNodeHandlerClass which acts as a small wrapper around atkRegisterNodeHandler because if you want to specify a class you don't want to pass a reference. [Peter] + Added support for externaly setting the storage / load type of an attribute. This makes it possible to use real attributes as dummies (no loading or saving) in add/edit forms. [Peter] + Added support for showing a warning message when leaving the page without saving or cancelling. To enable this functionality please set $config_lose_changes_warning to true. [Peter] + Added new lesson (10) to the demo application to demonstrate ajax dependencies. [Ivo] + Added atkManyToOneRelation::setUseFilterForAddlink method to control whatever the destination filter should be added to the add link when the NF_RELATION_AUTOLINK flag is set. [Peter] + Added theme resource, allows you to include other Smarty theme templates using {include file="theme:template.tpl} syntax. The resource will make sure you get the correct file from the correct directory (even works for overrides at the theme level). [Peter] + Added support for showing debug messages for Ajax requests. [Peter] + Added support for module specific help files (in help/ subdir of module). [Rene, Ivo] * Fixed CSV row count in atkImportHandler. [Peter] * atkMetaPolicy::add, atkMetaPolicy::setType now support an array of attribute names as argument for the attribute name parameter. [Peter] * atkManyToOneRelation now shows the none label when viewing the value read-only and nothing is selected. [Peter] * Fixed path handling in atkTestCase when running single tests. [Patrick] * Fixed bug in atkcustomrecordlist. When a field has the flag AF_HIDE_LIST it will not be visible in the csv export. [dennisjan] * Fixed issue with O2M and M2O relations where sometimes not all possible values were shown. [Peter,Boy,Tjeerd] * atkTime now only returns integers for getHours, getMinutes, etc. [Boy] * Added ability to register modifiers. [Boy] * Changed function exportFile for IE7. If IE => inline to attachment [Koen] * Fixed atkSaveHandler rollback/commit behaviour. [Peter] * Fixed atkOci8Db/atkOci9Db rollback/commit behaviour. [Peter] * ZendPlatform 3.x session clustering id compatibility. ZP3.x uses a hyphen in their session id which conflicted with the isValidSessionId function. [Martin] * Added file_exists() check to atkFileAttribute before calling the filesize() function to prevent unnecessary error messages. [Patrick] * Fixed calendar-runner. Two different types of date field (one where you input the date and another one where you input the date using the date selection boxes could cause problems because the Calendar object was re-used). [Peter] * Fixed export handling of (extended) search values. [Peter] * Changed onChange event for radioattrbiute to onClick event. It still uses the m_onchangecode just like the other attributes. [Lineke] * Improved attribute security, attributes can now be shown in edit / read-only state or hidden based on record data. [Peter] * atkQuery conditions are now always surrounded by braces to make sure OR conditions in other conditions can't influence the global atkQuery conditions. [Peter] * Fixed saving Embeded o2m relations using transactional databases. Added commit() statemement after saving. [Martin] * Refactored some functionality from atkSecurityManager to the auth_interface class which allows for greater control from within authorization classes. [Peter] * Fixed automatic enable/disable of recordlist checkboxes. [Peter,Martin] * Record-level allowed check is now also being performed in the respective action handlers. [Peter] * atkNode::redirect now has a parameter to immediately exit after the redirect. This can prevent weird side effects because the script would normally continue to run after the redirect. [Peter] * atkDb::selectDb/countDb don't set distinct on by default. In most cases this is not needed. And the cases which do need this can turn it on manually using an attribute which does so. (bug #755) [Peter] * atkTestCase:: clear node repository etc. between each test method because test methods may *never* influence each other. [Peter] * If there is not selection possible for an atkManyToOneAttribute show the none label. Even if obligatory. [Peter] * Improved partial refresh support for attributes. Attributes can now refresh an arbitrary number of fields using JavaScript code. This is necessary for atkOneToOneRelations etc. [Peter] * Owner instance is now set in attributes using setOwnerInstance. [Peter] * Improved ATK test suite output. [Peter] * Improved default Oracle date format. [Peter] * When field.focus fails we catch the error so the user doesn't see the error. [Dennis-Jan] * Some code cleanup for the mysqli driver. [Martin] * check constraint violations are now seen as user errors by the Mysqli driver. [Martin] * atkTestSuite doesn't display notices anymore. [Peter] * atkNode::deleteDb now properly checks if there is something to delete or not. [Peter] * Fixed PHP notices in atkNumberAttribute. [Peter] * Refactored DB cloning functionality to atkDb class. [Peter] * A module can now specify it's default fixture path (by implementing getFixturePath). [Peter]* Fixtures are now searched for in a subdirectory of the test case if no module or path is specified. [Peter] * In case of a ML node and physical_delete flag of the atkfileattribute the file were delete twice. But the second it generates an error. [Dennis-Jan] * Changed the dispatch.php in the skel to use atkcontroller object. Note, the old method ($obj->dispatch) stills works but is deprecated. It is recommended to use the new dispatch.php from the skel directory. [Lineke] * Some functional decomposition of atkSaveHandler [Maurice] * Added the ability to override an actionHandler class in function atkNode::callHandler. [Maurice] * Added notification for trigger events (eg preAdd, postAdd). [Maurice] * Added some checks in atkSessionManager to see if the stack really contains an atknodetype param. [Maurice] * Added check in atkUi::title to see if de node was really created. [Maurice] * Added fieldprefix for javascript in atkmanyboolrelation. [Lineke] * atkManyBoolRelation does not use AMDAE anymore, php now supports multi- dimensional arrays (might break in older php versions). [Lineke] * atkManyToManyRelation now adds tablename before remoteKey when deleting. [Lineke] * On an error atkSaveHandler now determines if it was in admin or add mode. A new hidden var 'atkprevaction' is posted in add and edit pages to find out. This fixes failed validation to display the wrong page. [Maurice] * Function dispatch_url now checks if parameter $atkaction contains a value. [Maurice] * Added atkprevaction check to _checkIntegratedSave method in atkonetomanyrelation which fixes an error when using the AF_ONETOMANY_EMBED flag which assumes that postvars other than atkaction, atknodetype, atkprimkey are atkattributes. [Maurice] * Better inplementation of dispatch_url function. [Maurice] * Moved execution of preUpdate trigger to begin of updateDb function. This way changing the record in the preUpdate function will have effect. [Lineke] * It is now possible to change the php_file to which is posted in forms. [Lineke] * atkShuttleRelation does not use AMDAE anymore, php now supports multi- dimensional arrays (might break in older php versions). [Lineke] * Fix in atkShuttleRelation: if the field in the intermediairy node pointing to the destination node is a regular atkAttribute instead of an atkManyToOneRelation, it will now work. [Ivo] * When updateDb fails it has to return false in stead of true. [Dennis-Jan] * Bugfix in atknode, atkmlsplitter and atkManyToOneRelation (m_joinaliases removed from the code) [Sandy, Peter] * Fix a potential php warning in atkImportHandler. [Harrie] * Fixed minor html/4.01 transitional compatibility issue in atkPage. [Guido] * A password should only be generated if a username is given. [Guido] * Added the auth_enablepasswordmailer var to the template so login,tpl can now detect if it should show the Password forgotten button. [Guido] * Replaced tbsooo's meth_misc_alert calls by atkerror statements to improve debugging. [Guido] * Fixed bug in tbsooo which caused the SaveXmlToDoc function to fail due to the -u option in the zip command (thanks Dennis-Jan for pointing me into this direction). [Guido] * Fixed bug in atkMssqlQuery, it no longer has an ambiguous column error when fields in an atkManyToOneRelation have the same name as fields in the master node. [Ivo] * Fixed the atkFormatAttribute, it can now handle multiple delimiters. [Ivo] * When encountering data that doesn't match the format in atkFormatAttribute, the expected format is now displayed in the error message. [Ivo] * Fixed the login image of the macoslike theme. [Ivo] * Bugfix: filenames need to be escaped before they are added to the db in the atkFileAttribute. [Sandy] * When an atkFileAttribute is obligatory but somehow empty and no new file is uploaded, but an existing file is selected, the atkFileAttribute won't ignore this selection anymore. [Guido] * The atkThemeCompiler should not attempt to compile a theme without the required themedef.inc file or without any files at all. [Guido] * Errors shown above the debug log now also use the monospace font. [Guido] * Entering a level in the sessionstack more than 1 level above the current stack top is now prevented by changing the level to the currenttoplevel + 1. This solves the occurance of mislocated stack data and/or stack gaps in this scenario. [Guido] * The atkImportHandler would hide attributes that don't use addToQuery, but as long as they properly handle parseStringValue, they are usable, so this restriction is removed. [Ivo] * I18N now also works for the atkMetaManyToOneRelation. [Boy] * Made debugger pass atkLevel() as prevlevel to debug window, thereby making it more likely to show debugging, although still not 100%. [Boy] * Performed some functional decomposition on atkOutput, adding the getDebugging and sendCachingHeaders methods. [Boy] * Fixed PHP5 issue in Smarty Compiler (block functions). [Peter] * The exportFile function now also sends content description, transfer encoding and content length headers. It also automatically detects the correct mime type and sends that as a header. [Boy] * Fixed notices in meta relations, grammar and policy. [Boy] * atkMetaPolicy now detects presence of 'is_' and 'has_ ' in fieldnames and automatically creates relationships. [Boy] * atkMetaPolicy now by default makes integers with a length of 1 use the atkBoolAttribute, and fields named 'country' use the atkCountryAttribute. [Boy] * atkMetaNodes with an NF_ML flag now automatically have an atkMlSelectorAttribute. [Boy] * Made ATK ignore select queries that are built with an empty fieldset. [Boy] * Made ATK force quoting of field names that are reserved names like 'from'. [Boy] * Fixed adding of extension after 'file mangle' of atkFileAttribute. [Boy] * Performed functional decomposition on atkDateAttribute, adding following methods to API: setFormatEdit, setFormatView, setDateMax, setDateMin. [Boy] * Replaced unused default config 'javascript_confirmation' with: 'recordlist_javascript_delete'. [Boy] * Made embedded mode of atkOneToManyRelation work with multilanguage nodes. [Boy] * Decomposed getting of HTML for embedded buttons of atkOneToManyRelation to _getEmbeddedButtons. [Boy] * Fixed PHP notices and a warning in atkDateAttribute. [Guido] * Fixed incorrect language identifier date_invalid (should be error_date_invalid) in atkDateAttribute. [Guido] * The restrictions that apply to an atkPasswordAttribute should only be tested when a new password was entered. [Guido] * Improved debugging and error handling in atkOpenDocumentWriter->store() function. [Guido] * Only relevant attributes should be loaded/updated when generating/mailing a new password. [Guido] * Added JavaScript based listener support for atkDateAttributes. [Peter] * Added support for modifying the date range (minimum / maximum) of an atkDateAttribute using JavaScript. [Peter] * Improved atkDateAttribute / calendar integration (calendar now knows everything it needs to know to adjust the field boxes). [Peter] * Because the FCK editor does not always agree with tabbing and no longer becomes editable if you switch (only in firefox), a custom method is added to enable all fck-editors. [Jeroen] * Added name element in FckEditor-code so that we can access the frame from the parent (code change request emailed to fckeditor.net) [Jeroen] * Performed functional decomposition on atkAdminHandler's adminPage method, rendering of admin recordlist is now done by renderAdminList method. [Boy] * If a recordlist does not have actions, and is not searchable, the action column is no longer shown. (bug #556, #686, #774) [Boy, Yury, Marlon, Ivo] * Made atkQuery::create() return query object instantiated with atknew instead of with a normal 'new', making it possible to call it without first importing the query class. [Boy] * Fixed a bug in atkNodeValidator where it didn't properly quote reserved names. [Boy] * The atkFileAttribute now uses 'filename' in display instead of 'orgfilename' which caused the strange behaviour of still showing the file you had just deleted until you went out of edit mode for the record and back again. [Boy] * If there are only 2 supported languages or less, atkMlSelectorAttribute hides itself. [Ivo] * When you remove a file when the atkFileAttribute has the AF_FILE_NO_SELECT flag, the file will now no longer be displayed in admin pages. [Dennis-Jan] * Loading of tabs when the first tab is not the selected one is now smoother. [Jeroen, Ivo] * Fixed a lot of multi-database issues. [Peter] * Debugger now directly looks at $_REQUEST['atkstackid'] instead of atkStackId() (fixes issue with lost debugger data). [Peter] * Fixed obligatory check in metadata of oci8/9 database driver. [Peter] * Fixed relation detection in atkOneToOneRelation. [Peter] * Properly initialize attributes in atkMLSplitter (set owner instance and call init method). [Peter] * Moved required-image from handler to template ({$field.obligatory}). Note that custom 'editform.tpl' templates should take this into account. [Ivo] * Fixed use of cache id in delete method of atkOneToOneRelation. [Boy] * Made atkMultiSelectAttribute's db2value method return an empty array when there is no value instead of an array with 1 empty value. [Boy] * Made it possible to specify top frame height and menu frame width in themes with the 'frame_top_height' and 'frame_menu_width' attributes in the themedefinition. [Boy] * Made app.php check wether a menu exists before attempting to instantiate it, if it does not exist it throws an error and renders a plain menu. [Boy] * Fixed broken preUpdate call in updateDb (preUpdate was called after the update query was already created). [Peter] * Fixed saving 0 value in atkNumberAttribute as 0 instead of NULL. [Peter] * Removed edit/delete actions in the atkFileEditor when a file isn't writable. [Sandy] * Don't add link surrounding e-mail adres if mode is "csv" in display function of atkEmailAttribute. [Peter] * atkTotalizer now adds subtotals for all subtotalfields when it's the last record. [Sandy] * atkOneToOneRelation: when destination record already exists, do not create a new row in destinationrecord [Ivo, Jeroen] * atkOneToOneRelation now respects AF_HIDE_LIST flag if AF_ONETOONE_INTEGRATE flag is set. Properly prefix row attribute names for list view to prevent overwriting columns from the master node. [Peter] * Search API improvements: Refactored atkNode search conditions to applySearchConditions() method, cleaned up some search code, made every column in list mode have its own search method. [Ivo] * atkNode's setIndex method now also works on atkManyToOneRelations (uses the descriptor to match the alphabet). [Ivo] * atkFileAttribute: Silently ignore that a file has already been removed when the AF_FILE_PHYSICAL_DELETE flag is set. [Peter] * Tbsooo converted apostrophe (' -> \') from XML file for TBS functions. This causes corrupt document: convert it back to ' in documentwriter [Jeroen] * Fixed problem with tabs which caused 1:1 relation tabs not to be shown. [Peter] * Performance: fixed unnecessary instantiation of 1:1 relation destinations. [Peter] * By default, translation debugging is now disabled. You can use $config_debug_translations to enable them. [Peter] * Changed hardcoded 'userid' to use auth_userfield config in reloadUser method of atkSecurityManager. [Boy] * Updated prototype and scriptaculous to latest stable version (1.5 and 1.7). [Lineke,Peter] * atkFileAttribute: fixed bug in atkFileAttribute; if AF_OBLIGATORY and AF_FILE_NO_SELECT flags where both set you always had to upload a new image. [Bart, Peter] * atkProfileAttribute now uses getUser() instead of $g_user global. [Boy, Ivo] * Fixed error when calling text() on an attribute that isn't added to a node yet. [Guido] * Fixed problem when adding styles to old sxw format documents in atkOpenDocumentWriter. [Guido] * the atkPopup target should be passed through session_url in case the sessionid is passed through urls. [Guido] * If $_SESSION[atkconfig("identifier")] is not an array, we assign an empty array to it to prevent session initialisation errors. [Peter, Guido] * Fixed obligatory field checking for attributes of the atkOneToOnerelation's destination node by merging the validation errors from the destination node with the ownerinstance's errors right after performing the validation. [Guido] * Fixed sudden resize of editarray when the colorpicker gets focussed and unfocussed in the Outlook theme. [Guido] * Fixed style problem where the first column would be stretched to almost the full pagewidth, while other columns need that space much more than the first column. [Guido] * Fixed a problem where attributes whould be hidden from a list because atkNode falsely determines you do not have the tab rights needed to see those attributes. (bug #615) [Yury] * Fixed performance problem due to incorrect selectDb parameter in atkExportHandler. [Guido] * Fixed several PHP Notices. [Guido] * Added ability to implement a getExportAttributeGroup($attrname) function in a node to implement custom grouping in atkExportHandler. [Guido] * Fixed problem in atkOneToOneRelation causing the record not to be inserted when it should be. [Guido] * Fixed deprecated text() calls. [Guido] * Fixed problem with the serialization of select fields in the prototype library. [Peter] * Fixed small bug in Smarty Compiler which causes nameless tag attributes to be interpreted as an integer (sometimes) even though the value is surrounded by quotes. Also added some fixes for invalid quotes surrounding attribute names. [Peter] * Fixed bug in recordlist: added missing (empty) cell above search button if no records are found. [Bart] * Fixed support for atkDateTimeAttribute in oci8 driver. (bug #596) [Renato] * Altered phpMailer to support CC header when using mail() function. [Bart] * Fix for corrupt OpenOffice documents generated bij tbsooo: zip -m sometimes caused corrupt files. -d has better results it seems. [Ivo, Jeroen] * Moved getTable method from atkMetaNode to atkNode. [Peter] * Fixed 'Content-Type' header in exportFile() method, so browsers can determine the correct file type when downloading/opening. [Jeroen] * atkDocumentWriter: Convert bullets to ' -' (tabs mess up layout), add extra line after starting,bullet-list, replace bold and italic tags within
  • . [Jeroen] * atkNode's allowed() method now also accepts a modulename in its action parameter (module.node.action syntax). (bug #698) [Yury] * Fixed bug: in an atkManyToOneRelation, all destination fields would be loaded instead of only the ones we need. (bug #702) [Yury] * Fixed atkManyToManyRelation's hide() method. (bug #691) [Yury] * Fixed bug: don't add empty cell to header if search button is not displayed + add empty cell when recordlist orientation=right. (bug #703) [Bart] * Fixed sorting in recordlists when there are atkOneToManyRelations in the list. (sort of, code needs improvement). [Ivo] * When adding records for an atkManyToManyRelation based relation, Initial_values() should be called on the linknode, not on the destination node. [Guido] * Fixed bug in atkescape which would be too sticky if escaping between different nodes. [Ivo] * Fixed reference copy bug in atkColumnConfig and added testcase. (bug #717) [Yury] * Improved debug message on unknown mysql database error. (bug #715) [RainerG] * Added mode param to addtoquery function in the oneToOneRelation. [Sandy] * Removed redundant double quote in html input element. [Bart] * Fixed copy for atkManyToManyRelation with destination primKey other than "id" (not fixed for owner-side) and fixed where clause for checking if records already exist [Ivo, Jeroen] * Fixed warning in atkManyToOneRelation (after searching) [Peter, Jeroen] * Fixed smartsearching in atkMlAttribute [Peter,Jeroen] * Functionally decomposed showTr. [Jeroen] * Fixed bug in atkColumnConfig which caused the setOrderBy to be misinterpreted. [Peter] * Fixed OCI auto-increment/sequence information in metadata. [Peter] * Fixed setting m_mode in atkDb. This should always be done for atkMockDb to work. [Lineke] * Fixed csv export for atkNodes. [patrick] * Changed functionality for 'count distinct' in atkMysqlQuery (count did not count correctly when some of the fields where NULL) [Peter] * Improvements to error reporting of importing and added ability to add multiple fields for the entire import ('allfields'). [Boy] * Added id to field td. [Boy] * atk_array_merge now supports 'unlimited' arrays. [Peter] * Moved traces to debug level 3. [Peter] * Added helper method to atkTmpFile class for reading the complete file in a string. [Peter] * Added ability to add flags to atkMetaPolicy::hasMany(). [Boy] * Fixed handling of record in embeded one-to-many relation. [Peter] * Fixed handling of NULL values of atkNumberAttribute (and other attributes which specify AF_NO_QUOTES). [Peter] * Now using the edit format for date attributes if AF_DATE_STRING flag is set. [Peter] * Admin handler now uses action of node (instead of simply assuming action 'admin'). [Peter] * Fixed handling of null values in db2value method of atkDateTimeAttribute [Peter] * Don't display duplicate descriptors in title session backtrace. [Peter] * Drop-down menu now checks all rights of underlying menuitems. [Peter] * dispatch_url now also supports multi-level arrays as parameters. [Peter] * Fixed / improved searching for atkDateAttribute. [Peter] * Added search support to atkDateTimeAttribute (only atkDateAttribute based at this time). [Peter] * Fixed title retrieval for node UI. [Peter] * Fixed Internet Explorer support in drop-down menu. [Peter] * Fixed handling of initial_values (where applied a second time if an error occured in the addition form). [Peter] * Fixed fetchValue method of atkDateTimeAttribute. [Peter] * Deprecated atkMail class (atk/utils). [Peter] * Added proper ordering support to atkManyToOneRelation (depending on the order of the destination node). [Peter] * Fixed that selectDb always loads the primary key fields even if they are not part of the includes list (or are part of the excludes list). [Peter] * Fixed that actionhandler always takes the postvars and the partial values of the node (in the setNode) call, because most of the times handlers are called using their action_... function instead of handle. [Peter] * Fixed db2value method of atkManyToOneRelation (now calls db2value on destination attributes). Warning: this change might give you problems if you depend on the old (incorrect) behaviour! [Peter] * Check if a certain multi-record-action is allowed on a record. [Peter] * Added excludes/includes option to atkNode::updateRecord function. [Peter] * atkFileAttribute uses more complete record for filename mangling. [Peter] * atkManyBoolRelation does not require atkManyToOneRelations in the intermediate node anymore. [Peter] * Logout link in menu is now configurable. [Peter] * Statefulness of DHTML tabs is now configurable. [Peter] * Fixed no stat error in atkDirectoryTraverser. [Peter] * atkListAttribute: check empty array with count instead of comparison to an empty array. [Peter] * Added possibility for adding an additional deletion filter for the store() function of the atkmanytomanyrelation. [Dennis] * atkTableRenderer supports adding an id field to a TD. [Dennis] * atkManyToOneRelation can be configured to have AF_RELATION_AUTOCOMPLETE flag by default, by setting the value for $config_manytoone_autocomplete_default to true). [Dennis] * The atkManyToOneRelation is now configured to always use auto-completion support if AF_LARGE flag is set. This can be overriden (application-wide) by setting $config_manytoone_autocomplete_large to false. (bug #411) [Peter] * Improved placeFocus() JavaScript method (now focuses the real first form element, instead of a somewhat guess). [Peter] * Fixed support for returning the newly created record for a many-to-one relation even after an edit-after-add action has been performed. [Peter] * Added $mergeSelectors parameter to atkNode::confirmAction (defaults to true to be backwards compatible). [Peter] * Use select mode for retrieval of records for atkManyToOneRelation. [Peter] * Fetch descriptor fields early for atkManyToOneRelation so that they can be displayed in the title bar etc. [Dennis,Peter] * A table cell can now have a Row and Col Span in the atkTableRenderer. [Sandy] * Bug fix, if going from edit mode to view for the same record the current tab is only shown if it still exists in edit mode. [Dennis,Peter] * Bug fix, handle saved form data at the session manager level instead on a lower level (which caused all sorts of problems, e.g. forgotten data, data that shouldn't be there etc.). [Dennis,Peter] * If add handler is called directly the user can return to a new add form after saving the first one. [Dennis,Peter] * Properly handle attribute postvars in add, save, edit and update handler after getting back from for example the select handler. [Dennis,Peter] * In advanced search labels are always shown (before AF_NO_LABEL was used to determine if a label should be shown). [Lineke] * Made the new 'modern' menu the default menu in new installations. [Boy] * Fixed: Open Office document generator. On some systems unzip and zip would return -1 instead of 0 on succesfull completion. However, no actual information found on the internet to back this up). [Dennis, Guido] * atkImportHandler now uses charset from languagefile to convert the imported file to the correct charset. [Lineke] * Fixed some tests. [Sandy] * Tests are only harvested in the testcases directory. [Sandy] * Moved atkselector from the default sessionmembers to the pagevars as it should not be propagated to deeper session levels. [Dennis-Jan] * Added ability to pass default to getAttribute method of atkTheme and made atkTheme search for icons with extension .png and .jpeg too, preferring png over gif and gif over jpeg. [Boy] * Made atkPage output XHTML valid, made ATK support themes defining the doctype as a theme attribute, made ATK support a page.tpl, which is a general template to render a page in. [Boy] * Made login page use login.css if available and made login form more XHTML compliant. [Boy] * Added loadDispatch method to atkNode, which loads the output in atkOutput but doesn't actually flush anything and make it support a dispatch.tpl template if available. [Boy] * Made index.php support themes with 'useframes' attribute (defaults to true), loading themes with this attribute set to false without frames, please update your index.php from atk/skel/index.php. [Boy] * atkPlainMenu now supports themes and configurations which set a different 'menufile' (defaults to menu.php) and different 'menu_params' (defaults to 'target="main"'). [Boy] * atkPlainMenu now has getMenu member function which returns the menu without sending it to the output stream. [Boy] * Made url functions session_vars and session_url output & instead of & to ensure XHTML compliance. [Boy] * Added atkGetModules() function. [Jeroen,Boy] * Exporthandler now decodes export to charset in languagefile. Added parameter to customrecordlist to set decoding on or off. [Lineke] * Showtitlerow checkbox is now taken into account in customrecordlist. Added parameter to customrecordlist to set showtitlerow. [Lineke] * Changed display function of onetomanyrelation and manytomanyrelation to correctly show data in csv export (without html). [Lineke] * Added assignExportData magic method to atkNode to add extra data to the CSV export. This lets you use a custom query to add extra info to the export. [Lineke] * Made testreporter support finding and running the test for a single class, in ATK notation (module.mymodule.utils.utilclass) by using the 'class' REQUEST variable. If found, the framework won't traverse the entire application, but just check for a testcase in the underlying testcases directory and load that testcase up. Example: test.php?class=atk.ui.atkpage which will load up atk/ui/testcases/class.test_atkpage.inc. [Boy] * Security: Fixed cross-site scripting (xss) vulnerability in Login screen and any other screen that made use of the makeHiddenPostvars method. (bug #697) [Ivo] * It is only allowed to set the focus if the node allowes it. [Dennis-Jan] * Fixed OCI db driver unique constraint information in metadata (only use the unique flags for fields that are unique on their own). [Peter] * Use createQuery on the node db instance to create a query object for unique field set validation instead of using the default db instance. [Peter] * atkManyToOneRelation::populate now support list of attribute names. [Peter] * Bugfix in importhandler, mb_convert_encoding function is not always present. So we check if the function exists. [Lineke] * Bugfix: atkMessageQueue messages are now also displayed in adminpages. [Ivo] * Bugfix: atkformdata should be kept in the session because the window might be forked. [Jeroen,Peter] * Remember atktab in atkformdata because it might be changed in the current edit session. [Jeroen,Peter] * Bugfix: atkMysqliQuery should enclose the FROM clause in parentheses due to changes in MySQL 5.0.15 to make MySQL more compliant with the standard. See: http://bugs.mysql.com/bug.php?id=13551 [Dennis] * Fixed issue in MySQL driver which caused connections to be re-used even though we connect to a different database. [Peter] * Fixed some PHP5 notices. [Peter] * Added getAttributes function to the atkStringParser, same as getFields but if a relation is referenced using a dot only returns the attribute name before the dot. [Sandy,Peter] * Fixed bug in the atkFileAttribute that made Apache segfault when uploading 2 or more files (and use a template). [Sandy,Peter] * Added array initialization in class.atkdb.inc due to PHP5 notice. [Patrick] * AtkMlWrapper attribute clone fix: check phpversion and use right clone method based on this (check http://www.acko.net/node/54) [Nico] * AtkMlWrapper getRecordForLng fix: first check if record is empty [Nico] * Fixed: Saving a node with a atkmanytomanyrelation sometimes caused an SQL error. [Dennis] * When $config_authentication is set to "none", a login box is no longer displayed. (bug #771) [Marlon] * When $config_authentication is set to "none", a forced login with a username is no longer possible (so it becomes impossible to impersonate a non-existing user). (bug #772) [Marlon] * Replaced deprecated DB_ACCESSDENIED with DB_ACCESSDENIED_DB constant in several drivers. (bug #640) [Ivo] * Added missing include in atkManyToOneTreeRelation. (bug #680) [Guido] * Bugfix: Added missing $page = &atkInstance("atk.ui.atkpage"); statement in atkModernMenu. (bug #778) [Guido] * Optimized atkTheme->getIconFileFromModuleTheme when $this->m_theme['modulefiles'] is not set. [Guido] * Fixed several php notices. [Guido,Ivo] * atkQuery::betweenCondition method now supports a $quote parameter to toggle the use of quotes in the condition. (defaults to true). (bug #678) [Yury] * Fixed bug when NF_CACHE_RECORDLIST was used. (bug #681) [Yury] * When NF_EDITAFTERADD is used, the 'save' button now displays 'save and edit' so the user knows what will happen. (bug #684) [MichaelZ] * Updated Italian translation. [Fabio] * Updated Dutch translation. [Guido, Lineke. Ivo] * Updated German translation. (bug #685) [MichaelZ] * Fixed translation of tab names in error messages in an edit form. In such a message only the tab_$tabname translation was attempted, now it also tries to translate $tabname itself. [Guido] * Changed display in "plain" mode for the atkManyToManyRelation and the atkOneToManyRelation. This displaymode will now give a comma-seperated list of the linked records descriptors in the destinationnode (just like CSV mode does). [Guido] * Added atkiputils class which provides functions to validate ip numbers and convert them from strings to 32bit numbers and back. [Guido] * Fixed AF_UNIQUE checking; an empty value for a unique field should not generate an error about the value not being unique. [Guido] * Fixed validation break when a custom validate function on a node triggers an error. This caused errors not to be shown until the custom validate function didn't trigger errors anymore. [Guido] * Added NF_TREE_AUTO_EXPAND flag to atkTreeNode. This flag causes the tree to be expanded automatically when loaded. [Guido] * Changed achievo_modern and outlook themes to remove the padding/margin from the atkManyBoolRelation and atkOneToManyRelation display output. [Guido] * Make sure Sender is set in atkMailer class so that the Return-Path header in the e-mail message has a proper value. [Patrick] * Fixed selectDb optimization and php notice in atkViewHandler. [Guido] * Updated action_admin() api in atkTreeNode. [Guido] * Fixed pre mysql 5 problem in the dbconfigs user grants testcase. [Guido] * atk*Db->connect should return the doConnect() result. [Guido] * The atkMysqlDb::disconnect method now closes the MySQL link. [Marlon, Peter] * Renamed registerNodeHandler to atkRegisterNodeHandler and renamed getNodeHandler to atkGetNodeHandle. Old functions are still available but deprecated. Also, atkRegisterNodeHandler gets handler parameter by reference in stead of by value. If you want to set register the name of the handler in stead of the object itself, you should pass the name in a variable. [Lineke] * Make sure ATK really saves and loads NULL values as NULL in/from the database instead of empty strings. [Peter] * atkNodeValidator should only skip the current record for unique constraints if the validation mode is not 'add'. [Peter] * Fixed IE7 support for ATK drop-down menu. [Peter, Almer] * Fixed translation of labels in the atkPrintableRecordlist. [MichaelA] * Refactored atkNumberAttribute::getSearchCondition for re-use. [Peter] * Fixed bug in atkDateAttribute where db instance was retrieved using atkGetDb instead of $this->getDb. [Peter] * Fixed searching for dates. [Peter] * Improved Autonumbering in the atkFileAttribute. (bug #792) [Sandy] * Added passing of preferred extension to iconPath method of atkTheme. [Boy,Laurence] * Order in atkNode::selectDb can now completely be disabled by passing false for the order parameter. This means even the default order is not used. [Peter] * atkDateTimeAttribute atkDateAttribute and atkTimeAttribute now use NULL instead of 'NULL' when checking for empty fields. [Dennis, Peter] * The default value for empty time fields in atkDateTimeAttribute has changed from date("H:s") to "". [Dennis] * Fixed: The validation function of atkDateTimeAttribute now first transforms the datestring into an array (if it isn't allready) before passing the data to the validation function of dateAttribute and timeAttribute. This prevents the time-part of the string from being corrupted. [Dennis] * Added an extra check in formselect.js if an action is set. [Dennis] * Added onload script updateSelectable() in atkrecordlist.js to prevent a user from being able to post the MRA form without selecting an action first. [Dennis] * Fixed: validateUniqueFieldSets() check did not handle manytoonrelations correctly. [Peter,Dennis] * Fixed translation of 'error_uniquefieldset', 'this fields' should have been 'these fields'. [Dennis] * Fixed: translation of tabs in error messages. [Dennis] * In atkAttribute the registerDependees function is now only called if the attribute is not hidden. [Peter, Dennis] * When addListColumn is called in the atkM2ORelation, the flag AF_FORCE_LOAD is added to the attribute itself, to make sure the added listcolumns are loaded. [Peter,Dennis] * Fixed reference copy bug in atkActionHandler. The $handler parameter that is passed to action_...() overrides is now a true reference. [Ivo] * Overhauled the way the atkSaveHandler handles redirects; when validation fails, the user is no longer redirected to hardcoded 'admin' or 'add' pages, but to the previous action, whichever that was. [Ivo] * Added atkTimeZoneAttribute for selecting a timezone. Translations for each timezone are placed in the ATK language files. [Dennis] * atkDateTimeAttribute now supports the combination of an atkDateAttribute with AF_DATE_STRING flag and the normal atkTimeAttribute. [Peter] * atk_var_dump now uses var_dump internally so that references are displayed properly. [Peter] * atkNode::editArray: fallback to postvars is only done if a field really is not set in the defaults record. [Peter] * Fixed typo in test/class.atktestsuite.inc (bug #806) [Yury, Patrick] * Fixed htmlentities bug in atkAttribute (bug #807) [Yury] * Fixes in atkOneToOneRelation validation: Only add 'atkerror' record when 1:1 relation contains error. And array_merge returns 'null' when one of the arguments is not an array (cast to array fixes this) [Jeroen] * Sort m_cascadingAttribs after removing an attribute. The loop in deleteDb will fail if keys are not successive. [Jeroen] * Force update on attribute, when it is in the include-list of updateDb (if 'needsUpdate' returns false, but attribute is in $includes, update it anyway) [Jeroen] * The module of an atkNode is now also available in the constructor of the node through the atkModule::getModuleScope() method. [Peter, Dennis] * Refactored handling the view mode of attributes in atkAttribute, atkNode, atkEditHandler and atkViewHandler. Added class atkViewEditBase between the atkActionHandler and the atkEditHandler / atkViewHandler which contains methods only used by the Edit and View handlers. [Yury, Dennis, Peter] * Refactored the tooltip functionality for attributes. [Yury] * Sections in atkNode get an id instead of a number. [Patrick] * Sections with only hidden attributes are hidden completely. [Patrick, Peter] * Sections which are unhidden will appear expanded. [Patrick, Peter] * Added atkArrayDiff which returns differences (atkArrayCompare returned true on differences) [Jeroen] * $quote_style must default to ENT_COMPAT, not to null [Jeroen] * Added ability to pass parmeters to atknew for constructor of class you are trying to create. [Boy] * Improved displaying of error messages in OCI8 driver. [Boy] * Added ability to specify interval instead of steps in atkTimeAttribute. [Boy] * NF_LOCK now works when a database is used that supports transactions. [Ivo] * Remove stripslashes from db2value in atkAttribute. It is no longer needed and selectDb's went wrong when fields contain slashes [Ivo, Jeroen] * Updated FCK editor to latest version (2.41). [Harrie] * Fixed corrupted images of outlook theme. [Dennis] * ATK buttons now have a default class of "btn" if no explicit class has been specified. [Peter] * Fixed detection of database type for atkTextAttribute. [Peter] * Improved binding of variables in atkOci9Db driver. [Peter] * Improved atkAttribute::partial_refresh method, now only refreshes if a new value has been selected for the depended field and a field will be still marked as erroneous after a refresh. [Peter] * Updated some of atkImportHandler's code to the 21st century. [Peter] * atkMessageQueue::addMessage now supports a second parameter $type which can be set to AMQ_SUCCESS, AMQ_FAILURE or the default AMQ_GENERAL depending on the kind of message. [Peter] * {atkmessages} Smarty plug-in now fills $atkmessages with an array for each entry containing the message and the type (as string, e.g 'success', 'failure' or 'general'). Updated themes to reflect this change. [Peter] - Deprecated method to set the selected value for an atkListAttribute. Please use the setInitialValue method or the already existing intial_value meachanism instead. [Peter] - Removed old treeicon code from atkTreeNode. [Guido] - Temporarily removed the 'generate title row' checkbox in atkExportHandler as it isn't yet implemented. [Guido] - Removed default theme's action_view.tpl as it basically is no different than the default action.tpl. [Ivo] - Removed unused summary string ($total) from atkNavigator. [Guido] - Removed dirty hack from atkManyToOneRelation for the return $value of the select handler (select link) or add handler (add link). This hack still exists for the classic AF_LARGE mode. [Dennis, Peter] - Removed atksecure from colorpicker.inc. [Lineke] - Removed unneeded function call from newNode function. [Maurice] - Removed unneeded global $vars from atkModule::newNode and atkModule::nodeOverloaders. [Maurice] - Removed unused code in atkDataDecode function. [Lineke] - Deprecated atkWysiwygAttribute (in favor of atkFckAttribute). [Ivo] - Deprecated "mysql41" db driver. (use the "mysqli" driver instead). [Peter] Changed in ATK 5.6 ------------------ + Added phpmail extension, now you can easily create html mails even with attachments through an mail object. [Dennis-Jan] + Changed atkFckAttribute's HTML based resourcemanager into a PHP based version to support themes [Wim] + Added ajax powered smart search functionality for performing arbitraty searches on any node. [Peter] + Added atkMessageQueue class for adding user notification messages. [Patrick] + Added atkMlWrapper for turning any attribute into an internationalisation enabled attribute. [Ivo] + Added atkCalculatorAttribute for adding columns with calculated values. [Ivo] + Added atkShuttleRelation. [Ivo] + Added atkRowCounter for sequentially numbering rows. [Ivo, Przemek, JorgeG] + Added atkUrlAttribute for representing urls in the database. (bug #604) [Przemek] + Added atkUpdatedByAttribute for keeping track of which user has modified a record. (bug #457) [Yury, Ivo] + Added 'macoslike' theme. [Marcel] + Added 't3skin' theme (Typo3 style). [Ivo] + Added setText method to atkLanguage. [Sandy] + Added atkMailer class for sending html mails (uses phpMailer software). [Peter, Dennis-Jan] + Added atkPluginTestCase class for easier testing of Smarty plugins. [Ivo] + Added support for row and col spans in the atkTableRenderer. [Sandy] + Added NOLOAD constant for use in atkAttribute's loadType() method. [Ivo] + Added ability to set a CSS class per row, column or cell in atkTableRenderer. [Guido] + Added reloadapp(); function which can be used to reload all the frames in the application. [Boy] + Added support for user-level language setting. [Boy] + All relationships based on atkManyToManyRelation now have better localKey and remoteKey detection. The use of setRemoteKey and setLocalKey is no longer necessary if the foreign keys have the same name as the relation with _id appended to it. [Ivo] + Added atkManyBoolRelation::setCols() method to set the number of columns containing checkboxes. [Ivo] + Added new lesson (9) to demo application to demonstrate many-to-many relationships. [Ivo] + Added setToolbarSet() method to atkFckAttribute to change the displayed toolbars. [Ivo] + Added setAutonumbering() method to atkFileAttribute to turn on autonumbering of files when files are uploaded with an already existing filename. [Ivo] + atkPage::register_style() and the {atkstyle} plugin now accept a 'media' parameter. [Peter] + Added processFile() method to atkFileAttribute, to override in derived classes when processing (such as resizing) needs to be done on uploaded files. [Ivo] + Added setLabel() method to atkAttribute to override the default label. [Ivo] + atkNode::selectDb now performs a distinct select by default to prevent duplicate records from being retrieved. The $distinct parameter can be set to false to revert to the old behaviour. [Ivo] + Added ability to use overloaders for all classes instantiated using atknew(). [Boy] + Added optional $module parameter to atkUI and atkTheme methods that retrieve path information about theme files. [Ivo] + Added atkArrayNvl function allowing you to retrieve a value from an array when you're not sure whether it exists or not. If the value cannot be found, null (or an optional different default value) is returned. [Guido,Ivo] + Added a '<< Back' button to the Select screen in order to give a user the ability to cancel the selection of a record. [Guido] + Added ability to set the following password restrictions: minimum length, minimum number of uppercase characters, minimum number of lowercase charactes, minimum number of uppercase and lowercase characters together, number of numbers and the number of special characters. [Guido] + Added atkPasswordAttribute->generatePassword function which replaces the deprecated makePassword function. generatePassword is an object-function which generates passwords using the given length and restrictions set on the attribute. It is also possible to specify wheter the generated password should be easy to remember or as random as possible. [Guido] + Added Password forgotten option to allow users to regain access by asking the atk application to mail back a new password. To enable this feature, $config_auth_usernode, config_auth_emailfield and $config_auth_enablepasswordmailer should be set. (bug #471) [Guido] + Added module configuration (module name & path list) to mailed error reports. [Guido] + Added array support for the $params parameter dispatch_url. [Peter] + Added search support for the atkDateTimeAttribute. [Peter] + Added prototype/scriptaculous js libraries for Ajax functionality. [Peter] + The atkNode->genericPage method can now draw multiple boxes at once. [Guido] + Added Greek translation (el.lng). [Velissariou] + Added 'deselect' link to atkManyToOneRelation to deselect the current record when AF_LARGE is set. (bug #431) [Ivo] + Added auto wildcard detection in atkAttribute which allows the user to use wildcards (*) in any search string. (bug #611) [Ivo] * Fixed bug in the mysql41 driver. The linkid wasn't cleared after closing the db connection which caused unexpected behaviour. [Martin] * Significant performance enhancement in atkNode::searchDb(). Only string/text type fields are searched now. [Ivo] * Rewrote theme engine, with the following improvements: + Full inheritance: themes can now derive from eachother so they only need to define the differences from the base theme. + Fully automatic theme structure scanning. Themedef.inc no longer needs to define which templates/styles/images etc. it implements. (bug #543) + Support for module specific theme files. + Supports themes in modules. ($config_defaulttheme = "modname.themename"); * atkTheme/atkThemeCompiler codebase is about half as big. * Compiled themefiles are now better human readable. * Bug where "highlight" attribute definitions would not be loaded is fixed. * When displaying an image with the atkFileAttribute a random number is added to the img src tag in order to prevent browser caching. [Wim] * Changed the copydb method by filtering the executetriggers and added support for different modes. [Dennis-Jan, Peter] * Introduced atkeditlng url variable which can be passed along to force ML attributes to display a specific language. [Boy] * Fixed a bug in the 'remove current file' feature of atkFileAttribute when AF_FILE_PHYSICAL_DELETE was set. [Ivo] * Fixed CSV import handler for date values and other complexer attribute types. (bug #502) [Ivo] * In CSV import sample, the raw value is no longer displayed if it is equal to the parsed value. [Ivo] * Fixed import of atkManyToOneRelation values from CSV files. (bug #669) [Ivo] * atkNode's validateFilter method can now cope with sql 'IN' operator. [Yury] * Also collect timing info at debuglevel 0 for mailreports. [Boy] * Fixed php warning in atkMlNumberAttribute. [Ivo] * Fixed error in triggerError method when atkLanguage was not imported. [Ivo] * Fixed table definition of lesson 7 of the demo application. [Ivo] * Fixed bug where postDelete trigger would be called twice. [Peter, Sandy] * The preDelete trigger will now be called separately for each (to be) deleted record (instead of being called only once with the complete recordset). THIS CHANGE IS NOT BACKWARDS COMPATIBLE! [Peter, Sandy] * Fixed loading of the correct tab when 'atktab' is passed in the URL. [Boy] * Fixed loading of tests from modules outside the application root which would sometimes do tests twice. [Boy] * atkManyToManyRelation based relations can now be properly hidden in forms. (bug #666) [Yury] * atkManyToManyRelation based relations now only retrieve those fields used in the descriptor and primary key. (bug #666) [Yury] * atkManyToManyRelation based relations no longer insert bogus records when the intermediary node had a separate primary key. (bug #338) [Ivo] * Refactored atkManyBoolRelation's store(), hide(), searchCondition(), search() and isEmpty() methods to atkManyToManyRelation as these methods are not atkManyBoolRelation specific. [Ivo] * Fixed bug in the atkManyToManyRelation when the filter isn't set. [Sandy] * The atkdebugger is now passed an atkprevlevel of 0 instead of the originating atklevel (which caused it to lose its debugging info). [Boy] * atkMLSplitter now uses atklng variable instead of deprecated lng variable. [Boy] * Fixed atkBoolRelation; if unchecked, the value is 0 instead of NULL. [Sandy] * Added baseclass include for the atkMockQuery. [Martin] * Fixed a notice that users with Norton Internet Security or other popup blockers (that remove headers) may see. [Ivo] * Link id is no longer passed to mysql error functions if it is null. [Boy] * Fixed creating sequences in postgresql. [Sandy] * Postgresql records are now fetched in PGSQL_ASSOC mode (only associative array instead of numerical indexes). This should save a lot of memory. For applications that rely on the numerical record indexes (EVIL!) you can set $config_pgsqlfetchmode = PGSQL_BOTH in your configfile. [Sandy] * Replaced deprecated postgresql function calls with the correct calls. Note that the postgresql driver now requires PHP 4.2. (bug #349) [Thom] * Added type="text/css" attribute to