Last Modified 2008-04-28 by Ben Klang

Backward Compatibility Breaking Horde Issues (aka Horde 4.0 TODO)

  • Fix cloning behavior (See Bug 1410).
    • Remove 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 $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.
    • Similarly, don't pass objects by reference ( function foo(&$bar) )
    • Move share edit form into framework package to make it extendable.
    • Convert all configuration files to XML format (or to a unified conf.yaml, or an annotated conf.php - either way, something the config interface can universally manage and generate)
    • Remove IMP_IMAP_Search:: and Ingo_IMAP_Search::.
    • Remove imap_reopen() call in IMAP_Search::.
    • 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)
    • Remove hack to fix app-specific Notification_Listeners that output <p> instead of <li> (in Notification/Listener/status.php).
    • Prefix all classes with Horde_ that don't have that prefix yet (also see http://www.php.net/manual/en/userlandnaming.php).
    • Filter all input through filter extension or library.
    • Use phone form fields, i.e. in Turba.
    • Use exceptions instead of PEAR_Errors.
    • Clean up Horde::loadConfiguration() mess.
    • 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. This is done in 3.2 but the API should be modified to remove the $lifetime argument from get() and exists(). When checking for cache data the check should only be that the data is not expired. Garbage collection should automatically remove expired data.
    • Don't let Horde_Crypt_pgp methods check for secure connection.
    • Remove pref_api BC files
    • Fix Horde_Cache_file:: to accept mixed $data, instead of just a string.
    • Use file_put_contents() exclusively.
    • Refactor Horde_iCalendar
      • Users shouldn't have to deal with property names, formatting, escaping, versions, etc.
      • Make getType() return values consistent.
      • Consistent return types (array vs. timestamp) in _parse*() methods.
      • Move date/time parsing methods to Horde_Date::.
    • Remove pre-Horde_Alarm reminder scripts and supporting classes
    • Clean up horrible Share reference workarounds (http://bugs.horde.org/ticket/?id=5086, http://bugs.horde.org/ticket/?id=5422)
    • Make editors horde-wide configurable, maybe a preference
    • Store all date/time information as UTC and convert to user's timezone
    • Have IMAP_Cache:: use SessionObjects instead of directly accessing the session.
    • Make sure that Horde_Compress_* use streams instead of requiring full files in memory.
    • Have some sort of Horde_URL object used to create/work with URLs (will deprecate Util::addParameter(), Util::removeParameter()).

MIME issues

  • Remove deprecated code in MIME_Headers::
    • Remove BC mime_drivers code in MIME_Viewer::, IMP_Contents::, MIMP_Contents::.
    • Make MIME::_rfc822encode() a public function.
    • Make MIME_Viewers responsible for retrieving part contents (so they can determine whether or not contents should be retrieved at all and/or cached).
    • Don't link MIME icons to Viewers - show icons no matter what viewers are installed/enabled/etc.


  • Use/learn from http://www.php.net/~helly/php/ext/spl/
    • Specifically DirectoryIterator, SPLFileInfo, SplFileObject, ...
    • Implement and enforce VFS permissions, at least in the backends which do not enforce permissions themselves ('sql' and in some cases 'file').


  • 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?
    • Remove print.js in favor of just window.print


  • Remove IMP_Template, Ingo_Template, and Gollem_Template.
    • Replace all templates with a Horde_View class, with a default of simple PHP templates
    • Introduce templates for ALL HTML generated in libraries
    • Figure out how to handle templates for framework packages
    • Default HTML Horde_View should escape all output (htmlspecialchars)


  • Bug 4221.
    • Bug 3271 - more specifically, how to deal with addition of configspecial tags. Of course, this depends on what changes are made to Horde's configuration design.
    • Un-stall all tickets with Horde 4/IMP 5/etc. milestones

To discuss

  • Template system (Horde_Template? something else?)
    • 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.
      • Performance a consideration? http://pooteeweet.org/blog/538/
    • RemoveGlobals
    • Project/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 Project/HordeSpaces where necessary).
    • Remove imp['uniquser'] ?
    • Horde4Config
    • Per-variable session locks? http://thwartedefforts.org/2006/11/11/race-conditions-with-ajax-and-php-sessions/
    • Use 1 login screen for all apps? (i.e. Horde_Login:: library)
    • Use hash() instead of md5 or sha1 directly for speed (http://us.php.net/manual/en/function.hash.php)
    • Deal w/CSS namespace clashing issues in portals (see, e.g., http://bugs.horde.org/ticket/?id=5831). Prefix all css rule names with the application name (.horde-header)?