Community  »  Applications  »  Turba

Changes by Release



[jan] Officially support PHP 7.


[jan] SECURITY: Fix open redirects.
[jan] Fix creating address books with the external API.


[mjr] Fix importing vCard LABEL fields (Bug #14584).
[mjr] Fix saving sync preference when no default address book exists (Bug
[mjr] Fix removing virtual address books when calling the removeUserData API
      (Bug #14577).
[jan] Fix fatal error if group contacts from an LDAP server don't exist


[jan] Remove left over from 10-years-old code (Bug #14521).


[mjr] Fix regression in sorting contacts by a name field (Bug #14471).
[mjr] Fix regression in saving tags (Bug #14463).


[mjr] Fix synchronizing email fields in certain cases (Bug #14301).
[jan] Continue removing user data if a source doesn't have an __owner field.
[mjr] Fix over-agressive filtering of search results when searching via the API
      (Bug #13945).


[jan] Update Portuguese translation.
[jan] Update Basque translation.
[mjr] Fix searching via the API when specifying fields and not specifying
[mjr] Require Horde_Perms::DELETE for including an address book  as sync-able.


[mjr] Fix persisting tags when moving or copying a contact to another address
      book (Bug #14312).
[mjr] Fix resetting state when changing sync_book prefs and device has forced
[mjr] Fix synchronizing contact notes via ActiveSync when no truncation value
      is requested by the client (Bug #14307).


[mjr] Honor alternative_name mapping (Bug #14280).
[mjr] Fix dealing with orphaned virtual address books.
[jan] Update Greek translation (Limperis Antonis <>).


[jan] Fix building search query if some fields are set for strict search (Bug
[jan] Use access rules compatible with both Apache 2.2 and 2.4.
[mjr] Fix splitting tags over ActiveSync (Bug #14218).
[mjr] Fix searching within virtual address books (Bug #14155).
[mjr] Fix import of vCard with single component via API.


[mjr] Fix regression in removing all contacts from a single address book in the
      SQL driver (Bug #14145, Guenter Bartsch


[mjr] Fix fatal test error related to Content_Tagger.


[mjr] Better prevention of importing duplicate contacts with same email
      addresses via the API (Bug #14119).
[mjr] Remove object reference from Content when object is deleted (Bug #14112).
[mjr] Remove tags from Content when tagged object is deleted (Bug #14112).
[mjr] Allow API to search all email type fields when calling getField().
[mjr] Fix removing all contacts owned by a specific user.
[jan] Fix inserting and updating photos with Oracle backends.
[mjr] Fix incorrectly populating email field when importing vCard (Bug #14046).


[mjr] Fix issue where sidebar links point to incorrect address book.


[jan] Fix error when removing user data.


[jan] Don't try to load Content application if tags are disabled.
[mjr] Fix adding tags to new contacts (Bug #13884).
[jan] Fix waiting for replication on LDAP backend.


[jan] Fix export format of tags to vCard 3.0 categories (Bug #13800).


[jan] Use the SHOW permission to determine the sidebar address book list.


[jan] Export nicer display names for users and resources via WebDAV.
[jan] Export custom owner and read-only properties via WebDAV.
[jan] Fix exporting contacts without __uid attributes via WebDAV.
[jan] Fix importing empty birthdays/anniversaries from vCard.
[mjr] Fix defaulting to the defined search fields when searching via the API.
[mjr] Fix broken EAS synchronization due to incorrect setting of the
      Categories field.


[jan] Fix duplicate searching in address books without owner field.
[jan] Fix duplicate search form (, Bug #13528).
[mms] Make case-insensitive API e-mail search work on non-ASCII data (Request
[jan] Fix listing group members that contain colons in their IDs.


[jan] Display correct address books in WebDAV folders.
[jan] Fix displayed CardDAV URLs for shared address books (Bug #12380).
[mms] Only include e-mail addresses that match the search string in the return
      from the search() API call (Request #12480).
[mjr] Fix exporting tags via vCard and ActiveSync (Bug #13393).
[mjr] Add EAS client created shares to the sync_books preference (Bug #13359).
[mjr] Add missing API support for searchTags API (Bug #13362).
[mjr] Fix issue that caused contacts to be tagged with a broken username.


[jan] Fix fatal error if importing CSV data with date fields.


[mjr] Fix another regression with exporting photos in vCard when we are
      ignoring empty values.


[mjr] Fix regression with exporting photos in vCard when we are ignoring empty
[jan] Update Polish translation (Maciej Uhlig <>).
[jan] Update Japanese translation (Hiromi Kimura <>).


[jan] Export composite attributes to vCard too.


[jan] Don't export binary fields to CSV/TSV.
[mms] Fix search in Facebook driver.
[jan] Add script to import contacts from Open-Xchange.
[jan] Don't remove missing contacts from distributions lists in Kolab backends
      (Bug #12861).
[jan] Support binary fields (photos) in Kolab backends.
[mjr] Fix importing certain vCards to sources only using the 'email' attribute
      (Bug #12955).
[jan] Make shares table compatible with Oracle.
[jan] Export free/busy URL to vCard (Request #12915).
[mjr] Fix listTimeObjects API when format_in attribute parameter is changed
      from default (Bug #11891).
[mjr] Add API support for supporting multiple addressbooks via ActiveSync.
[jan] Remember currently open tab when switching or saving contact views
      (Request #12609).
[jan] Replace categories with tags (Request #9544).


[mjr] Fix pagination of search results (Bug #13047).
[mjr] Don't output empty properties for CardDAV requests (Bug #12782).
[jan] Update Korean translation (Deokgon Kim <>).
[jan] Fix portal serach block response when no contacts have been found
      (dulinux <>, Bug #13044).


[jan] Fix importing vCard fields with lowercase TYPE attributes (Bug #13006).
[jan] Store full name in Kolab contacts.
[jan] Fix distribution list support in Kolab driver (Bug #12450).


[jan] SECURITY: Fix XSS vulnerabilities when deleting address books.
[jan] Fix exporting selected contacts (Bug #12759).
[mms] Improved UI when viewing search results from Advanced Search.
[mms] Remove features from UI when VFS is not available or disabled.
[mjr] Fix filtering Facebook driver results (Bug #12739).
[jan] Gracefully deal with columns removed from the backend.


[jan] Fix fatal errors if DAV support is disabled (Bug #12481).
[mjr] Fix deleting multiple contacts via the API (Bug #12554).
[mjr] Fix issue generating contact hashes from EAS contacts that could prevent
      duplicate contact detection from working when certain properties have
      empty values (Bug #12506).


[jan] Import and export UID vCard attributes (Bug #12427).
[mjr] Honor the 'browse' setting when attempting empty searches.
[jan] Set generic 'phone' attribute when importing from vCard (Bug #12329).
[mjr] Add API methods for using history modification sequences.


[jan] Fix searching in LDAP address books (Bug #12297).


[mms] Back button in smartmobile view for group member returns to group entry,
      not browse list.
[mms] Fix resetting smartmobile entry page when viewing more than 1 contact.


[mjr] Update the default SQL schema.
[jan] Fix incorrect dependencies.


[jan] Add CardDAV server support.
[mjr] Update the default SQL source schema (Request #11993).
[mms] Add links to group members on smartmobile entry page.
[mms] Add group icon to group contacts in smartmobile browse view.
[jan] Allow to search all search fields at once in basic searching.


[mms] SECURITY: Fix XSS vulnerability on smartmobile contacts details page
      (João Machado <>).
[jan] Fix importing certain phone fields from vCard (Bug #12178).
[mjr] Fix issues with importing contacts via ActiveSync when no default_dir
      pref is set (Thomas Jarosch <>, Bug #12188)
[mjr] Fix ActiveSync global address book searches when using LDAP as backend
      (Bug #12089).


[jan] Update French translation (Paul De Vlieger
[jan] Fix emptying shared address books.
[jan] Fix importing of LDIF data (Bug #11972).


[mjr] Avoid sending broken datetime values to ActiveSync.
[jan] Update Basque translation (Ibon Igartua <>).
[jan] Update French translation (Laurent Foucher
[jan] Mark Kolab folder as default when changing default address book


[jan] Add free-text country attributes and use them in default Kolab backend
      (Request #11692).
[gwr] Fix handling empty dates in the Kolab driver (Bug #11691).
[jan] Use encoded UIDs as IDs in Kolab driver.
[jan] Fix searching shares for duplicates.
[mjr] Fix calling decode_attribute hook when exporting to ActiveSync
      (, Bug #11678).
[jan] Update Slovak translation (Jozef Sudolský <>).


[jan] Update Polish translation (Krzysztof Kozera <>).
[jan] Update Dutch translation (Arjen de Korte <>).


[jan] Allow searching for 'emails' attributes (Bug #11185).
[jan] Fix LIKE matching of attributes in Kolab driver.
[mms] Convert turba minisearch block to the Horde AJAX framework.
[jan] Support 'emails' attribute in smartphone view (Bug #11544).
[jan] Attach share owner to all address book titles (Bug #11528).
[jan] Fix exporting from browse view (Bug #11526).
[jan] Return to the same page after running actions from the browse view.


[jan] Support importing contacts via API if using 'emails' attributes (Bug
[jan] Support 'emails' attribute with ActiveSync.
[jan] Fix marking contacts as deleted in the history if deleting shared address
      books (Bug #11480).
[jan] Set gender field values literally to 'male' or 'female'.
[jan] Drop preference which address books to display.
[gwr] Mark the initial default share as such with the Kolab backend.
[gwr] Always mark the initial share as default addressbook.
[mms] Initial implementation of smartmobile view.


[jan] Use Horde 5 action bar.


[jan] Add configuration example for Kolab/IMAP address books.
[jan] Update icon set.
[jan] Fix searching multiple names via the API.
[jan] Fix searching and listing clients via the API.


[mms] Import API call now throws an ObjectExists exception when a duplicate is
[jan] Add parameters to specify field size of phone and email fields.


[jan] Fix sorting of columns in preferences (Bug #10795).
[jan] Remove user's address books when removing users, independent from address
      book permissions.
[mms] Fix infinite loop if array was passed to delete API call.
[mms] Fix descending sorting of result lists.
[mms] Return to same page when deleting contact from browse view.
[mjr] Add ability to return count of objects matching search in place of full
      result set.
[jan] Update Turkish translation (İstanbul Technical University).
[jan] Fix strict searching in favourites driver (Bug #11207).


[jan] Update Swedish translation (Per Olof Ljungmark <>).
[jan] Update Italian translation (Emilien <>).
[jan] Fix number of contacts in a list that cannot be displayed.
[jan] Update Slovak translation (Marika Schvarczova
[jan] Update Czech translation (Michal Foist <>).


[jan] Fix decode_attribute hook when exporting to vCard (, Bug
[jan] Update Hungarian translation (Zoltán Németh <>).
[jan] Only connect to LDAP driver for read/write requests (Dominique Lalot
      <>, Request #11082).
[mjr] Fix bug that caused time shifting of contact birthday and anniversary
      values from ActiveSync devices for users in certain timezones.


[mjr] Ensure contact lists are always populated with their members (Bug
[jan] Fix SyncML compatibility with work/home phone numbers and newer Funambol
      clients (Bug #10912).
[mjr] Implement more flexible ActiveSync synchronization of names and
[jan] Fix address book sorting in preferences (Bug #10897).
[mms] Improve navigation when editing group entries.


[jan] Set VOICE parameter when exporting phone numbers to vCard (Request
[jan] Fix importing vCards with empty X-ANNIVERSARY attributes (Bug #10557).
[jan] Update Japanese translation (Hiromi Kimura <>).


[mjr] Add the ability to specify the fields to return from contacts/search.
[jan] Fix importing contacts with composite fields.
[jan] Fix LDAP connection test (Bug #10554).
[gwr] Avoid including the owner name into the default share (Kolab backend).


[rla] Turba LDAP Driver now only rewrites changed attributes (Bug #9343).
[mjr] Run attribute values through decode_attribute hook when exporting.
[mjr] Ensure encode_attribute hook is called on imported objects.
[mjr] Improve handling of removeUserData.
[mjr] Honor auto_create configuration setting (, Bug
[jan] Don't allow to search binary fields.


[jan] Fix attribute name for assistant phone (Bug #10449).


[jan] Add missing migration script (Bug #10436).


[mjr] Fix issue with synchronizing deleted contacts (Bug #10422).
[jan] Fix searching for duplicates on some databases (Bug #10383).
[mjr] Add and support more attributes by default.


[mjr] Fix obtaining default share via Turba's API (, Bug #10393).
[mjr] Force ActiveSync device reset after sync_books pref is changed
      (Request #10342).


[jan] Pass contact object to decode_attribute hook (, Bug
[jan] Complete fix for importing LDIF files (Bug #10139).


[rla] Support multiple address books in search portal block (Request #8786).
[mjr] Fix importing LDIF files (Bug #10139).
[mjr] Fix issue introduced in 3.0.1 that caused contact images to not display
      (Bug #10050).
[jan] Fix editing of multiple contacts at once (Bug #10085).
[jan] Enable homeAdress and workAdress composite fields by default.


[jan] Fix exporting department attribute over ActiveSync.
[mjr] Fix adding contacts with a category selected.


[jan] Fix LDAP schema checking (Bug #9826).
[jan] Fix creating temporary files with open_basedir restrictions.
[mjr] Fix importing objects with categories (Bug #9841).
[mjr] Fix merging duplicate contacts (Bug #9828).
[mjr] Allow unsetting the GAL and Client Address Book settings (Bug #9843).


[mjr] Fix deletion of virtual address books (Bug #9779).
[jan] Fix saving searches to virtual address books (Bug #9776).
[mjr] Datatree share to SQL upgrade script refactored for Horde 4.
[jan] Move all executable scripts to bin/ and prefix with turba-.
[jan] Add fields to all addresses if multiple passed to addField() API method
      (Request #3482).


[mjr] Fix issue that caused the inability to preview contact images while
      uploading (Bug #9702).


[jan] Update installation and upgrade instructions.
[gwr] Adapted the Kolab driver to Horde 4.
[mjr] Fix issue that caused erroneous file listings for objects in sources
      without a __uid value.
[cjh] Fix storing of binary fields.
[mjr] Fix/refactor IMSP driver.


[mjr] Fix the listTimeObjects API for shared sources (Bug #9649).
[jan] Fix importing contacts with SyncML (Simon Bühler, Bug #9641).


[jan] Provide default configuration files instead of .dist versions.
[jan] Create a default address book if the user doesn't own any yet.
[jan] Rename sources.php to backends.php.
[mjr] If default addressbook is not browsable, try one from the addressbook pref
      (Request: 6536).
[jan] Add duplicate search and merging.
[mjr] The listTimeObjects API now returns categories for each source
      individually instead of returning only the categories available
      (Request #8504).


[mjr] Fix issue that caused erroneous file listings for objects in sources
      without a __uid value.
[jan] Allow to export photo/logo fields to vCard without MIME type.
[jan] Support X-EPOCSECONDNAME fields of Nokia phones.
[jan] Add upgrade scripts for next-generation SQL share driver.
[jan] Fix splitting up names when exporting to N properties of vCards.
[jan] Only set the encoding parameter for binary data in vCards, if data is not
      empty (Bug #9413).
[jan] Fix searching for fields matching an email address if using 'emails'
      attribute instead of 'email' (Bug #9472).
[jan] Use personal address books first if determining the default one (Valentin
      Vidic, Request #9367).
[jan] Use name format preference not only for paging, but for sorting too
      (Request #8806).
[jan] Fix photo corruption when exporting to vCard 3.0 (Bug #9100).


[jan] Correctly export FN vCard property if 'alternative_name' is set, but not
      'name' (Bug #9207).
[jan] Fix import of addresses from LDIF (Axel Jurak, Bug #9215).
[jan] Speed up browsing of long address books.


[jan] Remove deleted contacts from distribution lists in the same address book.
[mjr] Allow creation of default, personal address book when other read-only
      sources are present.
[mjr] Log in history when deleting all of a user's contacts (Bug #8755).
[jan] Only export non-empty fields if exporting manually.
[jan] Add export to vCard 3.0.
[jan] Only synchronize those fields that are supported by the client
      (Request #6658, requires Horde 3.3.7).


[jan] Fix syntax of MSSQL scripts (Bug #8664).
[jan] Add preference for the name format to use for sorting (Request #6721).
[jan] Condense whitespace in composite fields (Request #8654).
[jan] Add and fix Oracle-specific SQL scripts.
[jan] Add Croatian translation (Matej Vela <>,
      Iva Rumora <>).
[mjr] Fix permission checking for virtual address books.
[jan] Update deleted attributes during synchronization (,
      Request #6658).
[jan] Support X-ANNIVERSARY, X-CHILDREN, and X-SPOUSE vCard fields
      (Request #8074).
[jan] Fix copying and moving of image fields (Ryu <>, Bug #8523).
[jan] Don't return an error on empty LDAP search results (Bug #8595).
[jan] Replace PHP5-only code from the LDIF exporter (Bug #8586).


[mms] Upgrade prototype.js to v1.6.1.
[jan] Fix synchronization with output compression enabled (Bug #7769).
[mjr] Fix contacts being deleted during synchronization when moved from one
      address book to another (, Bug #8487).
[mjr] Add new API method for retrieving the default share for a source.
[jan] Don't overwrite the compositing fields, when importing composite fields.
[cjh] Fix searches for multiple strict fields and at least one non-strict field
      (, Bug #7876).
[mjr] Specific timeobject categories are now only advertised when they are
      present in a configured source.


[jan] SECURITY: Escape output in test.php.
[jan] Add script to import contacts from SquirrelMail database.
[gwr] Correct support for the freebusy URL in Kolab.
[gwr] Add photo support for the Kolab driver.
[jan] Import broken vCards from Synthesis clients (Bug #7407).
[cjh] Add two retries to find a contact after adding it (Bug #7478).
[cjh] Add a PostgreSQL-specific upgrade script for 2.2.1 to 2.3
      (, Bug #7462).
[jan] Don't overwrite empty address books preference when creating new shares
      (Bug #7399).
[mms] Upgrade prototype.js to v1.6.0.3.


[jan] Change group field in shares table to work with LDAP groups (Bug #6883).
[jan] Fix exporting address books with country fields as vCards (Bug #7372).
[mjr] Make sure we use all address books when searching via the api and the
      user's addressbooks pref is empty (Bug #7357).
[mjr] Correctly calculate the age of time objects (Bug #7330).


[jan] Improve vCard EMAIL field parsing (Bug #7281).
[jan] Correctly import and export address extensions (Bug #7279).
[jan] Export full country names to vCard addresses.
[jan] Respect precedence of multiple vCard properties (Request #7122).
[jan] Remove deleted address books from address book preference (Request #6938).
[jan] Export LABEL properties to vCard if address fields are available.
[gwr] Add support for storing public PGP keys when using Kolab.
[gwr] Add support for adding addresses from IMP when using Kolab.
[jan] Add configuration option for an alternative name field.
[jan] Add support for image fields to SQL driver (requires Horde 3.3).
[jan] Add more default field mappings for CSV import (Request #6901).
[jan] Update field names for Outlook 2003 export (Request #6901).
[jan] Improve logic which entries to show in the sidebar menu.
[jan] Add support for the category form field (Request #6884).
[jan] Fix sorting so that sort order is always reflected correctly,
      independent of name format.
[jan] Add Basque translation (Euskal Herriko Unibertsitatea EHU/UPV
[jan] Add ability to mark a contact as your own and API method to export it.
[jan] Fix importing phone numbers from Synthesis clients (Bug #7011).
[mjr] Fix issue with searching composite fields when the number of search terms
      is less than the number of composed fields (Bug #6796)
[cjh] Allow importing multiple address into an email field if allow_multi
      is set to true on the field in attributes.php (Bug #6897).
[mjr] Remove user permissions on all shares when deleting a user.
[jan] Fix searching of client address books that have been disabled in the
      preferences (Bug #6961).
[mjr] Fix issue with removeUserData api that caused the deleted user's
      address books to not be deleted as well as remove an erroneous error
      notification (Bug #6969).
[cjh] Fix the column selector/sorter in IE (Bug #6912).


[jan] SECURITY: Escape output in test.php.


[cjh] SECURITY: Escape contact names in the contact display view.
[jan] Fix importing of certain phone numbers from vCard (Bug #6744).
[mjr] Correct a function declaration in the 2.1_to_2.2_sql_schema.php upgrade
      script that was causing fatal errors.


[mjr] Fix importing email addresses from CSV files to be consistent with what
      we allow to be entered via the UI. (Bug #6725)
[cjh] Improve resource usage in datatree_to_sql share migration script
      (Bug #6740).


[cjh] Fix editing contacts that were accessed by UID (Bug #6672).
[cjh] Apply fix for to prototype.js
      (Request #6590).
[cjh] Add an upgrade script for the new SQL share driver (Request #6109).
[cjh] Include composite fields in data exports (Bug #6517).
[gwr] Add distribution list support to the Kolab driver.
[cjh] Add vCard/syncing support for a large number of additional attributes
      (, Request #6573).
[cjh] Update composite fields in LDAP DNs (, Bug #6575).
[mjr] Fix paging in search results.
[cjh] Allow setting default values for attributes.
[cjh] Show a browse link in the address book list for each address book
      (, Request #6613).
[mjr] Fixed a bug that caused field values to get mismatched with the column
      names when a single DB field is mapped to multiple Turba fields.
[mjr] Fix changing sort order on the search view.
[jan] Add preference to choose address books for synchronization.
[jan] Improved importing of names from vCards (Bug #6568).
[jan] Fix incomplete copying and moving of attributes to composite fields
      (Bug #6565).
[gwr] Fix the relation of key/uid within the Kolab driver.
[gwr] Export/import of the emails attribute (Bug #6504).
[mas] Encode DN correctly when exporting to LDIF. (Bug #6518).
[gwr] Fix virtual address books when using shares.
[gwr] Fix searching for the Kolab driver.
[cjh] Replace the address book column sorter with a Scriptaculous-based one;
      fixes re-ordering columns in some cases (Bug #6444).
[jan] Always return to the last view after saving a contact.
[jan] Correctly determine default address books in the API (SyncML, WebDAV).
[jan] Add categories imported through the API (SyncML, WebDAV).
[jan] Store categories as strings.
[cjh] Show who created or made the last change to a contact along with the date
      (Request #6305).
[mjr] Prevent overwriting contact entries with the upgrade script (Bug #6308).


[cjh] SECURITY: Fix unchecked access to contacts in the same SQL table
      (Bug #6208) (CVE-2008-0807).
[jan] Add configuration to more flexibly parse full names into the name parts.


[jan] SECURITY: Fix privilege escalation in Horde API.
[mjr] Degrade gracefully when no VFS is configured.
[cjh] Fixed the share flattening upgrade script.
[mjr] Fixed issue that caused mangling of composite fields when moving or
      copying contacts from one address book to another (Bug #6058).
[mjr] Fixed issue that caused listTimeObjects to only return objects from a
      single address book when using a shared SQL source.
[cjh] Update address book management UI to match other groupware apps.
[jan] Trim composite field values before saving to the backend (Bug #5979).
[mjr] Fixed issue where composite fields with 'attribute' value set were not
      getting set in the backend when being imported via the API. (Bug #5978)
[mjr] Time object categories are now automatically detected.
[mjr] Fix issue that caused listTimeObjects API to miss returning objects when
      the date range crosses over into the next year.
[jan] Improved portability of the upgrade script (Bug #5949).
[mjr] Added anniversary support to the listTimeObjects API.


[jan] Fix birthday calculation on years before 1970 with DST (Bug #5791).
[jan] Implement WebDAV DELETE.
[jan] Change default SQL scheme to match with RFC 2426 (vCard 3.0) as closely
      as possible.
[cjh] Add $matchBegin to the clientSearch API method (,
      Request #5860).
[cjh] Avoid variable names that might interfere with function variables in
      sources.php.dist examples (Bug #5840).
[jan] Add clientFields() API method.
[mjr] More efficient fetching of entries when using the listTimeObjects API.
[jan] Move all Turba-specific hook examples from Horde's config/ directory.
[cjh] Fix generation of UIDs with PHP 5.2+.
[cjh] Handle categories when converting to and from vCards
      (, Bug #5648).
[cjh] Catch searches that seem non-empty but really aren't (Bug #5612).
[mjr] Fix fatal errors when no share enabled sources are present.
[mjr] Fix issue with naming new contact lists that was causing database errors,
      missing part of the contact list name, and other oddities.


[cjh] Add support for approximate searches, if the underlying backend and Horde
      code support them (Request #2901).
[cjh] Add a print link for contacts (Request #2800).
[cjh] Shared Address Books are now stored in a flat namespace so that they
      do not rely on the hierarchical (i.e. DataTree) properties of the
      Horde_Share API (Bug #4960).
[cjh] If names are displayed "Lastname, Firstname", sort composite name
      fields by lastname (Request #3909).
[cjh] Show an overlay while running a search (Request #3154).
[cjh] Add Anniversary, Spouse, and Children fields and support them in
      vCard import/export (, Request #5059).
[cjh] Add LDIF import/export support (, Request #2506).
[jan] Provide birthdays as events to external calendars (Request #723).
[mjr] Add driver to create address books from current user's Horde_Group
[jan] Allow to search through API for matches at word boundaries only
      (requires Horde 3.2).
[cjh] Phase out old ObjectView class in favor of proper forms in
      lib/Forms and views in lib/Views.
[cjh] Support for dereferencing LDAP aliases (,
      Request #4532).
[mas] Conform to WCAG 1.0 Priority 2/Section 508 accessibility guidelines.
      (Request #4080)
[cjh] Support vCard initials and salutation fields if present in the Turba
      backend (, Request #4248).
[cjh] Don't show empty tabs if a contact does not have a full name (Bug #4243).
[mjr] Add support for removing user data from backend storage when user is
      removed from Horde.
[jmf] Sort listings on multiple columns.
[cjh] Show numeric and alpha pagers at the top of listings, not the bottom
      (Bug #1312).
[jan] Add multidomain support for Kolab servers (, Request #3579).
[jan] Use the same rendering code for contact details in the list views like
      in the contact views.
[jan] Allow editing of composite fields (,, Request #2529).
[mjr] IMSP driver now has Horde_Share support.
[cjh] Add dynamic filtering of lists of contacts.
[mdj] Add support for split read/write database.
[mdj] Add failover support for SQL backend.
[mjr] Add virtual address book support.
[jan] Add driver to list most favourite recipients.


[cjh] SECURITY: Fix unchecked access to contacts in the same SQL table
      (Bug #6208) (CVE-2008-0807).


[jan] SECURITY: Fix privilege escalation in Horde API.


[mjr] Fix some fatal errors caused by the IMSP driver when deleting certain
      contacts and while adding contacts to lists in certain cases.
[mjr] Fix adding contacts to a new contact list in a source other than the
      source the contacts being added are from.
[jan] Fix paging through search results from another than the default address
      book (Bug #5137).
[cjh] Fix copy/moving contacts to a new contact list (Bug #5144).


[jan] Fix character set encoding of exported vCards.
[mjr] Fix fatal error when exporting to vCard.
[cjh] Organize basic search form from left to right (Request #4914).
[jan] Fix links to only show contacts or lists, or both.
[mjr] Don't remember the lastly selected address book in the session, if it
      was not browseable.
[mjr] Fix bug that caused counting the number of contacts in a shared SQL
      source to return the count of the user's default address book instead.
[mjr] Fix bug that caused the wrong address book to be deleted when replacing
      an address book during import.


[jan] Support departments in vCard's ORG properties (,
      Request #4285).
[cjh] Fix LDAP driver check for whether objects need to be renamed (Bug #4468).
[jan] Fix generation of mailto: links if IMP is not installed (Bug #4334).
[jan] Show error message if imported file didn't contain contacts (Bug #4260).
[jan] Remember the lastly selected address book during the session.
[jan] Add categories from imported contacts to the user's categories.


[mjr] Fix addressbook.php script - don't attempt to submit the form with
      invalid addressbook selections.
[cjh] Add documentation for the filter parameter in sources.php.dist and an
      example for retrieving data from two different tables (Manilal K M
[cjh] Centralize code for building RDNs (Request #3966).
[cjh] Pass objects by reference to hooks so modifications can stick (Bug
[jan] Fix compose links in portal if using compose popups in IMP (Bug #3923).


[cjh] Be consistent in working with lowercase attribute names for the
      LDAP driver (Bug #2440).
[mjr] Fix create_default_histories.php and public_to_horde_share.php scripts
      to prevent creation of bogus shares.
[mjr] Fix create_default_histories.php script to work with shared sources.
[jan] Add 1.2 to 2.x upgrade script for Oracle.
[jan] Fix script to create default histories, necessary for synchronization.
[jan] Fix loading of CLI library in the public_to_horde_share.php script.
[mjr] Fix losing session when editing address books with disabled cookies.
[cjh] Show the copy/move dropdown any time there is an editable address book
      that's not the current one (Bug #3588).
[jan] Don't show warning after dealing with contacts from a non-browseable
      address book (Bug #3587).
[jan] Fix configuration example for birthday fields.


[ben] Better support for MS-SQL


[mjr] Default to showing the 'A' page when browsing address books that contain
      more than the 'perpage' number of entries.
[jan] Add Icelandic translation (Bjorn Davidsson <>).
[mjr] Fix paging when viewing search results.
[mjr] Only show actions that make sense for the current source.
[mjr] All IMSP address books, including dynamically configured sources are now
      uniquely identified across all users internally.
[jan] Reverse sorting order if clicking on column name (,
      Request #2484).
[jan] Add option to keep name field unformatted (,
      Request #2441).
[mas] Use summary notifications for contact changes instead of one notice for
      each change. (Bug #2764)
[jan] Add CLI script to import vCard data.
[cjh] Split checking of LDAP field syntax and checking of required fields
      (, Bug #2626).
[mjr] Horde_Share support added. SQL Driver only for now.
[cjh] Update objectclasses when saving LDAP entries created by other clients
      (, Bug #2405).
[cjh] Charset-aware handling of LDAP DNs (Bug #2395).
[cjh] Get rid of cached search results entirely, and move more display
      code into Turba_ListView, simplifying a number of different
      codepaths and avoiding servercide when using Advanced Search.
[mjr] Turba_Object and Turba_Driver objects are now responsible for
      checking permissions for the sources they represent.  This allows
      concrete Turba_Driver objects to override Horde Perms and perform
      their own permission checking (by checking ACLs for example).
[cjh] "readonly" and "admin" source hash entries are deprecated. Permissons
      are set through the Horde Perms UI now.
[cjh] Avoid adding exact duplicates during import
      (, Bug #1892).
[cjh] Honor the delete confirmation preference when displaying a
      contact (Bug #1315).
[cjh] If the comments API is available, comments can be attached to
      contacts (Request #1492).
[cjh] Users can select which address books they wish to use, and in
      which order they will be displayed (Request #1650).
[cjh] Contacts can now be added to lists stored in any address book
      (Request #1561).
[cjh] Introduce a "browse" setting on sources, seperate from the "export"
      setting, to allow differentiation of browseable and exportable
[jan] Add permissions to restrict number of contacts per address book.
[cjh] Add exporting of multiple vCards in one file through the export
      interface (Frank Rosquin <>).
[mjr] Added support for adding and deleting IMSP addressbooks via the options
      interface (Request #1578)
[mjr] Show previous search results whenever returning to the search page.
[cjh] Handle encoding of postalAddress fields to use $ for newlines, going
      either by attributes.php or by the LDAP schema itself (Edward Rudd
      <>, Request #2).
[mjr] Search terms on composite fields are now taken as a space delimited
      list of strings that are each OR'd against each field making up the
      composite field  and then cumulatively AND'd together.
[jan] Show warnings from CSV imports.
[jan] Add "Add" and "Search" entries to sidebar menu.
[jan] Return to original browse view after finishing group editing.
[jan] Add submenu with address books to sidebar.
[jan] Allow to specify charset of imported CSV files.
[cjh] Pass the Turba_AbstractObject to attribute hooks to allow access to
      other attribute values (for example, to build a field's value out of
      other fields).
[jan] Show list of edited contacts below edit form when editing several
      contacts at once.
[jan] Add VFS support to attach files to contacts.
[jan] Allow to edit several contacts at once.
[jan] Retrieve only required fields from backend.


[cjh] Close several XSS vulnerabilities with address book and contact data.


[jan] Fix source selection in some API methods (,
      Bug #2623).
[jan] Fix warnings in columns preference screen.
[mjr] Check for global IMSP configuration and use if present.
[mas] Restore BC in searching using SQL driver. (Bug #2419)


[jan] Add Turkish translation (Servet Güney <>, Ahmet Öztürk


[jan] Don't show "Add" icon if no writeable address books exist.
[jan] Don't show "Browse" icon and list if no browseable address books exist.
[jan] Add example how to use a field for Horde's category system.
[cjh] Allow uid to be used in key generation (especially useful for LDAP
      backends that want to use uid in the DN) (Bug #2027).
[mjr] Fix bug where search results are not displayed when no browseable
      addressbooks exist and bug where the browse attribute is ignored for
      addressbooks that are set as default, allowing a non-browseable
      addressbook to be browsed (Bug #1959).
[jan] Import and export of birthdays with vCards (, Bug #1269).
[jan] Fix mini search portal block with non-ascii search strings (Bug #1605).
[cjh] Add a generic SQL upgrade script, replacing the MySQL-specific
      version (Bug #1781).
[mjr] Use addressbook name as part of cache key to prevent breaking similar
      searches on different IMSP addressbooks.
[cjh] Use bind variables in the SQL driver (, Bug #1651).
[mjr] Fix API search() method to correctly deal with contacts containing
      multiple email-type fields (Bug #1284).
[cjh] Fix _read() for multiple objects in the LDAP driver (Bug #1520).
[mjr] Cache IMSP search results when sending multiple IMSP searchaddress
      commands for the same search.
[cjh] Show actions at the top and bottom of contact listings (Bug #1458).
[jan] Add shortcut icon (favicon.ico).
[mjr] Show Contacts and Show Groups links now work correctly with IMSP driver.
[jan] Don't include names in email fields of distribution lists retrieved
      through the "search" API method (Bug #1384).


[jan] Fixed warning in browse view (Bug #1363).


[jan] Fixed some javascript errors when clicking on the column headers to
      resort contact listings (Bug #1313).
[cjh] Quote LDAP DN entries according to RFC 1485 (Bug #1146).
[cjh] When importing vCard 3.0 ADR fields, try to build a composite entry for
      workAddress or homeAddress, and keep the street address in workStreet or
      homeStreet (Bug #1109).
[jan] Implement OR searches in IMSP driver (Michael Rubinsky
      <>, Bug #1256).


[jan] Create compose links for all email addresses at once in contact listings
      (requires IMP 4.0.2).
[jan] Open compose windows from the portal's minisearch block in the correct
      frame (Bug #1293).
[jan] Several performance optimizations.
[jan] Don't return empty result sets in search API (Bug #1210).
[cjh] Support TLS connections to LDAP servers (Bug #1149).


[cjh] UIDs need to be stored in the History system with a turba: prefix and
      with the contact owner so as not to confuse different instances of the
      same contact (if two users both have a contact in their seperate
      addressbooks in a private source, they should have unique histories for
      those contacts).
[cjh] Improve error and permission checking.


[cjh] Prevent copying/moving of groups (Bug #935).
[cjh] Fix IMSP groups (Michael Rubinsky <>)
[jan] Fix propagating of monthdayyear fields (Bug #920).
[jan] Fix SOAP namespace for API method signatures.
[cjh] Change to Turba::getMenu(), fixes the menu on the Options screen (Bug
[jan] Fix some javascript errors with IE 5.0.


[cjh] Don't overwrite form data with object defaults when editing if
      validation fails (Bug #883).
[cjh] Use source permissions if they are present, and if not, fall back to the
      old source admin array (Bug #853).
[cjh] Ignore any __-prefixed attribute in building search criteria (Bug #877).


[mms] Fixed the delete API to not exit with error if the item to be deleted
      is not found in the first source provided.
[cjh] Removed miniwindow.php; it simply provided a frame around Turba
      with a close button.


[jan] Allow to group fields into tabs.
[mms] Link email address in object view.
[cjh] Merge the code for Turba_Source and Turba_Driver into simply
[jan] Add Persian (Western) translation (Vahid Ghafarpour
[jan] Add configuration option to require certain fields in the LDAP driver.
      (Tarjei Huse <>).
[cjh] Support custom field mappings in CSV exports, and add an Outlook export
[cjh] Allow replacing your addressbook with an imported one (Francois Marier
[cjh] Don't show source selection dropdowns in cases where there would only be
      one choice (Francois Marier <>).
[cjh] Turba's API has been consolidated somewhat, with a unified import method
      replacing add, addContact, and import_vcard.
[jan] Add access keys.
[cjh] Add Kolab drivers (Stuart Bing� <>).
[cjh] The alphabetic pager now has an "All" option.


[cjh] Show an alphabetic pager for browsing address books (Mike Bydalek
[cjh] Rename LDAP objects when their DN changes (Tarjei Huse
[cjh] Add exporting of VCards from the browse/search view (Mike Bydalek
[cjh] Initial IMSP driver (Michael Rubinsky <>).
[cjh] Use Horde_UI_Pager to page browse results (Joel Vandal
[cjh] Basic support for setting permissions on Turba sources (Joel Vandal
[cjh] Unify search and advanced search code to use a much more similar
      interface (Joel Vandal <>).
[cjh] Javascript delete confirmation is now available as a preference ("W.
      David Betts" <>).
[cjh] Searching composite fields, and other complex generated searching, now
      works with the LDAP driver.
[cjh] Track addition, modification, and deletion of contacts with the Horde
      History:: API.
[cjh] Use arbitrary search support to include searching of composite fields.
[cjh] Turba_Drivers are now capable of arbitrary searches, including unlimited
      nested combinations of AND and OR searches.
[cjh] Add the ability to link fields in the backend into a composite field,
      which is not editable, but which displays the correct value.
[cjh] Add the ability to move or copy contacts to a separate addressbook.
[cjh] Display multiple email addresses more intelligently (John Dalbec
[cjh] Allow setting a limit on the number of queries returned by an LDAP
      search (Andrew Morgan <>).
[cjh] Add edit/delete links in browse views.
[cjh] Preference for default directory for searches, etc. (Richard Heggs
[mms] Add support for listing/adding/retrieval of public keys.
[cjh] Use the new PrefsUI class.
[jon] Adapt to the new Horde::img() syntax.
[cjh] Use the new Notification system.
[jan] Remove the standard value for the language preference. The language to
      fall back to should be set Horde wide in lang.php instead.


[jan] Close XSS when setting the parent frame's page title by javascript (cjh).
[jan] Fix warning with LDAP backends.


[jan] Fix distribution lists.


[cjh] Check permission when adding and deleting objects (Bug #671).
[jan] Fix bug in LDAP driver with dn values not being UTF8 encoded (Bug #378).
[jan] Fix sorting by columns in browse view.
[cjh] Use prepare/execute in the SQL driver to support large fields on Oracle
      and other databases (Matt Selsky <>).
[jan] Don't create distribution list if process gets cancelled (Bug #377).


[jan] Add Galician translation (Rafael Varela Pet <>, Guillermo
      Mendez <>).


[jan] Fix importing of vCard 2.1 data that contains commas (needs Horde 2.2.4).
[jan] Make sorting order dependent of the name format (Sergey Zhukov
[jan] Add Arabic (Syria) translation (Platinum Development Team
[jan] Add Macedonian translation (Stojan Pesov <>).
[jan] Add Romanian translation (Eugen Hoanca <>, Marius
      Dragulescu <>).
[cjh] Remove dependency on class not in Horde 2.x.


[cjh] Use the 'objectclass' entry from LDAP sources instead of defaulting to
[jan] Add Catalan translation (Angels Guimer� <>).
[jan] Add a preference for viewing names as Lastname, Firstname (Marc Jauvin
[jan] Add Latvian translation (Kaspars Kapenieks <>).
[cjh] Close several small XSS vulnerabilities (Mitja Kolsek
[cjh] Fix problems with cached search results from different backends.
[jan] If an LDAP directory is configured to use utf8 encoding, encode
      attributes when adding them to the directory (cjh).
[jan] Add Turba_List::remove() (cjh).
[jan] Add Turba_Object::fromvCard() (cjh).
[jan] Add a registry script for Turba (Michael Cochrane
[jan] Add distribution list support (Michael Cochrane
[jan] Add personal LDAP address book HOWTO and example (cjh).
[jan] Add generic add, delete, get, list API functions for specific fields
[jan] Add Turba::addParameter().
[jan] Add Lithuanian translation (Darius Matuliauskas <>).
[cjh] Add a miniwindow interface that can be used in popups from other
[cjh] Add preferences-based addressbook capability for small, private
[cjh] Make sure vCard email addresses are imported as just the email address,
      not as Personal Info <>.
[cjh] Add Turba::getBareAddress() for converting "Personal Info
      <>" into just
[jan] Add Bulgarian translation (Miroslav Pendev <>).
[cjh] Add links to MapQuest from address fields.
[jan] Pass contact name to compose link in display view.
[jan] Replace <?= with <?php echo to remove the short_open_tags requirement
[jan] Fix preference for default view.
[jan] Add import/export filter for TSV, Mulberry and Pine (Liam Hoekenga


[jan] Add Hungarian translation (Laszlo L. Tornoci <>).
[jan] Add Norwegian Nynorsk translation (Per-Stian Vatne <>).
[jan] Add Slovenian translation (Jure Krasovic <>).
[jan] Add Japanese translation (B.J. Black <>).
[cjh] Add an optional parameter to set the LDAP protocol version.
[cjh] Close a potential problem with register_globals On and $js_onLoad.
[jan] Add Portugal Portugues translation (Nuno Loureiro <>).
[cjh] Add a Browse interface for easily listing all contacts.
[cjh] Change some button inputs to submits and remove some javascript.
[cjh] Source-wide filters with LDAP are always AND-ed.
[cjh] Remove awkward To:, Cc:, Bcc: message composition interface and clean
      up UI.
[cjh] Delete empty attributes instead of just leaving them unchanged.
[cjh] Log SQL and LDAP queries at LOG_DEBUG.
[cjh] Don't generate LDAP searches with 'attr=**' in them for empty values
      (use attr=*).
[cjh] Say "Edit 'entry'" instead of just "entry" in the mouseover text for
      search results which are editable.
[cjh] Add a local LDAP directory example.
[cjh] Don't store objects in the search results session cache; a bit slower,
      but seems to be much more reliable.
[cjh] Vastly improve search results handling - store them in the session,
      don't add duplicate results, let people use the back button, etc.
[cjh] Fix the column select javascript.
[cjh] Add list mouseover effect (Ronnie Garcia <>).
[cjh] Fix results problem with advanced.php and old results.
[cjh] Patches to tweak the LDAP driver to handle things a bit more correctly
      (HiCkS <>).
[cjh] Add and use TURBA_TEMPLATES constant.
[cjh] Use $registry->get() for all Registry information.
[jan] Add 'admin' entry to the sources hash to give write access on readonly
      addressbooks to certain logged in users.
[jon] Enable the "portability" option in the SQL driver.
[jan] Add preferences page and user preference to select the columns that shall
      be displayed in the search results.
[jan] Add Estonian translation (Toomas Aas <>).
[jan] Add Slovak translation (Leo Mrafko <>).
[jon] Enable the "portability" option in the SQL driver.
[jan] Add Ukrainian translation (Andriy Kopystyansky <>).
[jan] Add Danish translation (Martin List-Petersen <>).
[jan] Fix bug "This person is already in your addressbook.".


[jan] Add Norwegian Bookmal translation (Oystein Steimler <>).
[avsm] Add .htaccess files to deny access to data directories.
[jan] Add Finnish translation (Leena Heino <>).
[cjh] Avoid adding duplicate entries through the add API method.


[rich] Include rewritten and reorganized documentation.
[rich] License under Horde APL.
[cjh] Make email addresses clickable in displayed objects.
[bjn] Change 'en' and 'en_EN' locales to 'en_US' (default).
[cjh] Vastly improve error reporting when adding an object fails.
[jan] Add Brazilian Portuguese translation (Carlos Daniel Kibrit
[jan] Add Greek translation (Stefanos I. Dimitriou <>).
[jan] Add Swedish translation (Andreas Dahl�n <>).
[jan] Add Korean translation (J.I Kim <>).
[cjh] Remove duplicate entries from multiple sources from
      turbaExpandAddresses() results.
[cjh] Don't show the addressbook select widget on the search page if there's
      just one to search from.


[cjh] Add an optional 'strict' configuration array definining fields which
      must always be matched exactly.
[jan] Add API function to get info about the fields.
[jan] Add source configuration to select which fields should be searchable by
[cjh] Allow OR searches.
[cjh] Pass full email addresses (with names) to messages being composed
      (Lars Nummedal <>).
[jan] Add Polish translation.
[jan] Add mapping of date/time fields to the import feature.
[jan] Add support for date fields (e.g. birthdays).
[jan] turbaExpandAddresses() now returns all email addresses that belong
      to a contact.
[jan] Show the fields in edit and display view dynamically based on what's
      provided by the backend.
[jan] Add Italian translation (Giovanni Meneghetti <>).
[jan] Add import/export ui based on the new Data class.
[cjh] Add Traditional Chinese translation (David Chang <>).
[cjh] Add Czech translation (
[cjh] Add Russian translation (Ignat Ikryanov <>).
[cjh] Add $conf['menu']['apps'] support and a help link.
[cjh] Make incremental building up of search results works again in both
      search and advanced search.
[cjh] Add Alias to default fields (Marc Jauvin <>).
[cjh] Use the *url() functions more consistently to make sure that
      cookie-less sessions work.


[cjh] Add some more error checking to the searching and LDAP driver.
[cjh] Add config/attributes.php to provide nice labels for directory
[cjh] Adding German translation from Jan Schneider <>.
[cjh] Allow LDAP Sources to define a filter always included in searches
[jon] Preserve the search parameters after a search is performed.
[jon] Allow the registry to handle Turba's configuration values.
[jon] HORDE_BASE is now defined in lib/base.php instead of config/conf.php.
[max] Adding source retrieval API function.
[cjh] Adding Dutch translation from Jan Kuipers <>.
[jon] Adding French translation from Sam Przyswa <>.
[cjh] Add gettext infrastructure.
[cjh] Define the HORDE_BASE constant in config/conf.php, and use it when
      referring to any of Horde's files.
[cjh] Bring the advanced search page up to date, and add it to the menu.
[jon] Retired config/menu.txt in favor of config/menu.php.  This file follows
      a new format based on native PHP data structures.
[max] Expand API to allow adding addresses to an addressbook.
[cjh] Add the first API function (expanding addresses) for Turba in
[cjh] Add and Delete now work for the LDAP driver.
[cjh] Fix wap contacts searching.
[cjh] Turba now uses Horde authentication instead of its own. This means
      that whatever auth method you are using for Horde will be used to
      authenticate to Turba, and in return you get single sign-on with any
      other apps using Horde authentication.
[cjh] Working addObject() and removeObject() SQL driver methods.
[cjh] Move Turba_Source::getMyObject() to Turba_Source::getObject(); nothing
      was using the old getObject() call anymore.
[cjh] If you set $params['bind_dn'] and $params['bind_password'] for an LDAP
      source, Turba will bind as the specified dn to the LDAP server,
      letting you add/edit entries.
[cjh] Update capatilization to match Horde/PEAR standards.
[cjh] register_globals = Off fixes.
[cmc] Add a display object page, fix a ldap bug with the dn, add
      a read function to the turba source class (Done by Christian
      M. Couder (cmc) <>).
[cjh] Add an advanced search page contributed by Christian Couder
[cjh] Bring the WML templates up to date with recent changes.
[cjh] Make the LDAP server port configurable and make sure the parameter
      appears in the example sources.
[cjh] Implemented edit functionality for the SQL driver.
[cjh] Moved the filter() functionality (and supporting functions) into
      Turba_List, where it really belongs.
[cjh] We now actually use Turba_List, Turba_AbstractObject, Turba_ListView,
      and many other pieces of the class hierarchy that were previously only
      referenced in the object model.
[cjh] Clean up the sql Driver implementation a bit. Now, if the source is
      private, the __owner criteria must match the current user, instead of
      using __key. __key should uniquely identify each object, and shouldn't
      be what user that object belongs to.
[cjh] Reorganize the class hierarchy a bit - use Object instead of Contact,
      and a few other naming changes.
[cjh] Merged WAP functionality into search.php. If a WAP browser is
      detected, a slimmed-down wml interface will be used that only displays
      names and (callable) phone numbers.


[cjh] Fix bug where searches with no results would tack on an empty row.
[cjh] Conversion to CSS.
[cjh] Cleanup, modernization.
[jon] Silence session_start warnings.
[jon] Use Horde::url() in place of the deprecated buildURL() function.
[cjh] Use new session model and $horde['session_name'].
[cjh] Fixed message sending javascript to work with multiple addresses.
[jon] Allow directory sources to be set 'read-only' (non-editable).
[jon] Added a 'public' flag to the $cfgSources entries.
[jon] Contact attributes are configurable via config/attributes.php.
[jon] Renamed the source configuration hash to $cfgSources (from just
[jon] Moved from config/ldap.php to config/sources.php.
[jon] Converted Chuck's existing class stubs into a PEAR-style lib/ tree.