+ Backward Compatibility Breaking Horde Issues (aka Horde 4.0 TODO)[[toc]]*+ Backward Compatibility Breaking Horde Issues (aka Horde 4.0 TODO) * Fix cloning behavior (See Bug 1410). * Remove deprecated code in IMAP_Tree::. * Move IMP_IMAPClient:: to Horde. * Merge IMP_Thread:: to IMAP_Thread::. * Refactor IMP_IMAPClient:: and IMAP_ACL::. * Encrypt deprecations in Horde_Crypt_pgp::. * Use one place for clear text sendmail error messages. * rename files in imp/templates/prefs to more sensible defaults (e.g. draftsfolderselect.inc, not folderselect.inc) * Remove deprecated code in MIME_Headers:: * Remove {{$foo = &new Foo();}} calls and replace with {{$foo = new Foo();}} - The former is deprecated as of PHP 5 and causes errors when strict code checking is on. * Remove IMP_Template::. *Remove app-specific 'stripe.js' files. *Move share edit form into framework package to make it extendable. * Convert all configuration files to XML format.* Replace horde's popup.js with IMP's version.* Remove IMP_IMAP_Search:: and Ingo_IMAP_Search::. * Remove imap_reopen() call in IMAP_Search::. * Make getType() return values consistent in iCalendar::. * Move date/time parsing methods from iCalendar:: to Horde_Date::. * Remove BC mime_drivers code in MIME_Viewer::, IMP_Contents::,MIMP_Contents::, Troll_Contents::.MIMP_Contents::. * Checkboxes in Horde_Form that are marked as required should be required to be checked. * Remove IMP_SpellChecker::. * Add a single function for changing the language (handle the bindTextDomain() call also) * Make MIME::_rfc822encode() a public function.* Remove app-specific 'open_calendar.js' files and extra code in Horde's open_calendar.js.* Remove hack to fix app-specific Notification_Listeners that output <p> instead of <li> (in Notification/Listender/status.php). * Prefix all classes with Horde_ that don't have that prefix yet (also see http://www.php.net/manual/en/userlandnaming.php).* Global Prototype/Scriptaculous libraries.* Filter all input through filter extension of library. * Use Horde_Template for all templates. * Escape all template tags by default. * Use phone form fields, i.e. in Turba. * Clean up Horde::loadConfiguration() mess. * Consistent return types (array vs. timestamp) in Horde_iCalendar::_parse*() methods. * Clean up VFS_sql to use '/' as the root of the VFS instead of ''. This will make it behave like the other VFS backends without code to do the conversion. * Set the cache expiration time when the entry is set ++ !JavaScript * Remove last traces of enter_key_trap.js * Remove code like hideable.js that is encapsulated by Prototype (or whatever js toolkit 4.0 uses standard) * Global Prototype/Scriptaculous libraries. * Remove app-specific 'stripe.js' files. * Remove app-specific 'open_calendar.js' files and extra code in Horde's open_calendar.js. * Replace horde's popup.js with IMP's version. * Basically consolidate _all_ js present in multiple apps * Put core javascript into a package so it can be versioned/upgraded? ++ Bugs * Bug 4221. ++ To discuss * use __autoload() instead of require_once * Using a global __autoload() function is not good practice for a framework because you can only have one __autoload function - I'm not in favor of it (ChuckHagenbuch). * Using it in Horde apps as opposed to the framework is an option, but still leaves us all of the framework requires. * http://php.net/spl-autoload-register is a potential solution. With PHP 5.1.x (or 5.2, or ...) as a minimum version requiring SPL should be okay. * RemoveGlobals * HordeSpaces * Require UTF-8 support * Remove confusing mess of hooks and other ways of muddling logins (especially with IMP), and replace them _all_ with the preauthenticate and postauthenticate hooks + appropriate examples for things like vhosting. * Clean up tobackend/frombackend hooks - either remove them, or name them better, or document when and where they need to be called. * Get rid of 'realms' (replace with HordeSpaces where necessary). * Remove imp['uniquser'] ? * Horde4Config * Per-variable session locks? http://thwartedefforts.org/2006/11/11/race-conditions-with-ajax-and-php-sessions/