Add a text history restorer feature (version control of text fields).

Add time-out warning in text-editing GUI.

The HTMLArea text field editor is no longer supported and has been replaced with Xinha.

imCMS now automatically upgrades the database on startup. When upgrading from version 3.0 or later, no manual running of SQL scripts is required.

The default character encoding has been changed from windows-1252 to UTF-8.

Remove permission check when saving document.

Add more options for insert link in Xinha editor.

Xinha, insert link. Internal link should go to alias, if existing.

Increased max length of words in "Search keywords".

Improved security and speed when saving a document.

Increase width for treekey-field in menu administration.

Remove the charcount-addon to Xinha since it slows down IE.

Made it possible to remove a role added to a LDAP-user.

Add medium and strong filters (for Word and HTML-code) in Xinha.

Changed HTML to Editor/HTML in text-editing GUI.

Fixed problem that adminbuttons disappear when hovered in IE

Fixed a crash when trying to add a link to a document that doesn't exist.

Created new "dual list" user interface for setting document categories.

Created a new user interface for editing menus. Menus are now edited on a separate page from the containing text document.

Menus can now be sorted in order of published datetime.

The "Edit permissions for new documents" was wrongly displayed for non-text documents.

Made it possible to prevent multiple user sessions.

Skip UnicodeUpgrade for non-imCMS tables.

Properly report cause of exceptions.

Remove invalid template group assignments.

Store calendar language file as UTF-8.

Change so that admin language for new users are set by DefaultLanguage.

Implemented "profiles" in My Pages for connecting meta-id for parent doc with a name (profile) instead, when creating new documents.

Properly close PDF document after use.

Added secondary LDAP support.

The template administration user interface would crash if demo template directory was missing. It will now be created if needed.

Use english language error page if no user language is available.

The maximum length for a category name was changed from 50 characters to 128.

Make sure JSP menu tag shows the same menu items that the old menu parser does.

Add RSS-support to Lists in imCMS.

Made it possible to search for documents by child_id.

Made it possible to set and get the format of a TextField.

Made it possible to search for text documents by template.

Present search result in order of relevans.

Added API method Image.toHtmlTag() for generating the html tag for an Image.

Added title attribute to `<img>` with the same content as the alt attribute.

Removed non-XHTML compatible border attribute from `<img>`, instead passing through style, class, and usemap attributes from the `<imcms:image>` in the template.

Line breaks in text fields now generate `"<br />"` instead of `"<BR>"`, providing XHTML compatibility.

UserService.saveUser(User) did not respect the UserAdmin role.

Added "by published datetime" sorting to menus.

Fixed "NullPointerException in FrequencyOrderedBag" crash.

Fixed crash caused by menuitems not being properly removed when deleting a document.

Fixed crash caused by documents not being removed from the cache when their template was deleted.

Fixed image preview in the file administrator.

Added capability to send HTML mail.

Mails now use UTF-8 encoding.

Fixed a typo in TEMPLATE_SYNTAX.TXT.

Fixed a bug preventing users with the UserAdmin role from editing users through the API.

Fixed a bug making it impossible to change sort keys for menu items through the API.

Made the error page output less redundant by only displaying one stack trace.

Fixed bug that made it impossible to create new documents if there was a category-type defined.

Made option "linked for unauthorized users" work in searches as well as in menus.

Fixed bug that caused template ids not to be cloned when cloning text documents. This means that for example changing the template for a newly created text document also changes the template of the parent in the cache.

Fixed error when running api example "document_search.jsp"

Fixed bug that excluded documents without a valid archived datetime from search result.

Made the list returned by DocumentService.getDocuments(SearchQuery) modifiable.

Fixed bug when trying to sort search result on "meta_headline". Added new non-tokenized field "meta_headline_keyword" to use for sorting on document headlines.

Upgrade imcode-db to version 0.3.

Fixed missing version number in help links.

Fixed a bug which prevented sort keys for menuitems from being saved.

You can now search in PDF files, as well as in Microsoft Word, Excel, and Powerpoint files.

Performance has been improved, so searching for documents should be much faster.

Fixed a NullPointerException when browsing search result, for example when searching for images.

Fixed a problem with image filenames containing spaces.

Fixed an exception when entering an invalid text document id for an include.

Fixed a bug where menus would cache their documents, so changes to documents would not be visible in menus immediately.

You can now search for users by role, title, company, and email address.

Made sure that temporary upload files are removed in a timely manner.

Fixed a bug where a superadmin which was also useradmin couldn't edit all roles for a user.

Fixed a bug where the file manager would fail to change directories if the webapp was situated in a symlinked path.

Documents are now lazily loaded, so as to not retrieve more from the database than is needed.

Removed the unused addon property from build.properties.template.

Image-paths are URL-encoded to fix problems with image-paths containing non-ASCII characters.

Users with "restricted 1/2" permissions on a page could not save a text document if it linked to documents the user couldn't link to.

Searches on the "phase" field of a document, such as "phase:published" or "phase:new", would search based on the time that the document was indexed, not the time of the search. Such queries are now rewritten on the fly to fix this.

If there was an error while deploying, the deploy failed completely. Now the deploy succeeds, and the error appears in the browser instead.

Fixed a problem with default values in the SQL script for MySQL 5.

Ignore IPv6 and other non IPv4-addresses instead of choking on them.

Added MySQL sample to server.properties.

The upgrade SQL script diff-2-3.sql did not work in some cases, due to some foreign keys to the 'users' table changing name.

The imCMS advertisement at the top of every page was not output when the `html` tag contained attributes.

An attempt to reduce ThreadDeath errors with Tomcat has been done, by providing only commons-logging-api and calling LogFactory.releaseAll() on shutdown.

Source is now included for our own libraries.

The ddlutils and commons-betwixt libraries have been updated to newer non-released versions from the Apache Subversion repository, so we don't have to keep the ddlutils version patched by us.

Removed deprecated features "conference", "billboard", "chat", "shop", "poll", "qengine", "fortune". Warning! If you are using these features, all data for them will be deleted in the upgrade!

imCMS may now also be run on MySQL. In theory it may run on any DBMS which has a JDBC 3.0 compliant driver, but this has not been tested.

The setting LdapUserAttribute.CountyCouncil in server.properties has been replaced by LdapUserAttribute.Province.

Many methods no longer throw NoPermissionException, notably most accessors of Document and its subclasses. Permissions are instead checked when saving the document.

The text editor now runs the MS Word-code removal filter every time you paste.

Linking a document for which you had no permissions was impossible regardless of whether the document was "linkableByOtherUsers".

This has been worked around so that you can add a document by entering its id, if a search for that id doesn't match another document.

The reset button in the text editor did not work.

Removed broken undo/redo support in the text editor until properly supported by upstream.

Integrated jsCalendar (http://www.dynarch.com/projects/calendar/) for selecting datetimes.

If a user with "restricted 1" or "restricted 2" permissions created a document, the default "default template" was ignored.

Added a new default tab "Create new" to "My pages", which doesn't list documents, but allows creating new documents.

The text editor ctrl-key combinations would ignore the alt-key.

A non-numeric prefix in a tree menu sort key would cause an exception.

Copying a document did not copy its menus.

If a category type was changed it would not affect editing cached documents.

Accessing /servlet/Version now prints the versions of java, the servlet container, and the database along with the imCMS version.

It was impossible to delete some directories in the file manager.

Disconnect from database when the webapp is shut down.

Pressing "Add" or "Remove" when assigning templates to template groups with no templates listed would throw an exception.

Refactored login/access_denied.jsp and login/no_permission.jsp into login/index.jsp.

Renaming templates to already existing name would throw an exception.

Allow superadmin to edit his/her own roles.

Removed "List new/modified documents", and moved its functionality to the search form.

If a role was removed, editing permissions for a cached document with that role would throw an exception.

Prevent multiple users from being created with the same name.

Users with the useradmin role could edit any user under certain conditions.

Scheduled indexing may now be disabled by setting IndexingSchedulePeriodInMinutes in server.properties to 0.

Build index in subdirectories of WEB-INF/index instead of in WEB-INF/index.new.

For each reload of the webapp a new background indexing thread would be started, leading to multiple concurrent indexings. This has been worked around so that an indexing thread terminates if it notices that the index has been changed.

Some error pages were shown as html code.

Fixed spurious NullPointerExceptions in "LRUMap.reuseMapping()" due to unsynchronized access.

Documents were not removed from the index when deleted.

Increased space for system message to 1000 characters.

Added the method DatabaseService.getDataSource() for accessing the underlying DataSource.

The login page now passes along parameters "next_meta" and "next_url", either of which can be used to redirect the user after login.

Added the following methods to com.imcode.imcms.api.Document:

- Document.getKeywords()
- Document.setKeywords(Set)
- Document.isLinkableByOtherUsers()
- Document.setLinkableByOtherUsers(boolean)
- Document.isSearchDisabled()
- Document.setSearchDisabled(boolean)

Deprecated the method TextDocument.MenuItem.getManualNumber(), and added the replacement methods TextDocument.MenuItem.setSortKey(Integer) and TextDocument.MenuItem.getSortKey().

Added method TextDocument.MenuItem.setTreeKey(TreeKey).

Deprecated methods Document.setStatus(int) and Document.getStatus(). Added the replacement methods Document.setPublicationStatus(PublicationStatus) and Document.getPublicationStatus() and the class Document.PublicationStatus.

Deprecated methods Document.setPermissionSetIdForRole(Role,int) and Document.getPermissionSetIdForRole(Role). Added the replacement methods Document.setPermissionSetTypeForRole(Role,DocumentPermissionSetType) and Document.getPermissionSetTypeForRole(Role) and the class DocumentPermissionSetType.

Deprecated method DocumentPermissionSet.getType() with no replacement.

Deprecated methods User.setCountyCouncil(String) and User.getCountyCouncil(). Added the replacement methods User.setProvince(String) and User.getProvince().

Added method DocumentService.deleteDocument(Document).

Added method UserService.getUser(int).

You can now set the creator of a new Document.

Added class LuceneQuery which allows using the Lucene API directly.

Including a non-existent path using an include-tag would throw a NullPointerException.

SQL DDL is now generated from XML source using Apache DdlUtils.

SQL procedures previously stored in the database are now loaded from disk. Many of them have been removed.

Refactored parts of the database layer into a separate library named imcode-db.

Removed the tools classes and extracted libraries imcode-util and imcode-ant-tasks.

A document is always fetched from the database inside of a transaction.

JSPs are now compiled during the build to find errors.

Checkstyle is run during the build to find style errors.

Building with a platform default encoding other than iso-8859-1 would fail.

A ServletContextListener is used to start up, instead of a load-on-startup servlet.

The links on the first welcome page will now be accurate regardless of context path.

Fixed a NullPointerException when trying to view a textpage containing a filedocument-image that had been deleted.

Made `<?imcms:include file="..."?>` recursively parse tags.

UserService.getUser(String) now returns null for non-existing users.

Added "Save" and "Save and close" buttons to text editor.

When including other documents, the TextDocumentViewing in the request was replaced, so that subsequent TextDocumentViewings in the including document came from the included document.

Fixed a problem where a user would lose all his roles when editing himself.

There was a mistake made with the ContentManagementSystem.runAsSuperadmin(ContentManagementSystemRunnable) method so it actually did not work at all.

Fixed a security hole that could let an attacker overwrite any file in the system.

Only read permission on a document was required to add it to a menu. Now at least restricted 2 is required.

Fixed a bug that made it impossible to set "edit texts" permission for restricted 1 or 2.

Fixed a bug that would cause text in text fields to be interpreted as velocity code when displayed for editing.

Made enter submit a text field when using "rows='1'".

Fixed a javascript error when editing texts and using the formats attribute.

The text editor would insert spurious `<br />`-tags when the text was empty. They are now removed when saving and when switching formats.

Fixed an exception when trying to edit a non-existing document.

Allow velocity code in all tag attributes. See TEMPLATE_SYNTAX.TXT for details.

Whitespace in label-attributes are now normalized, i.e. consecutive runs of whitespace are replaced by a single space. This is a workaround for newlines in the label-attribute not being handled correctly in some places.

Fixed a bug where deleted documents would remain in the cache.

Allow role names of up to 60 characters, and display more than three roles at a time.

Fixed a bug that caused text in templates to be interpreted as velocity code when displayed for editing.

Updated jTDS to version 1.0.

Fixed a problem where references to removed documents were retained in menus, causing NullPointerExceptions.

Added package `com.imcode.imcms.api.contrib`, containing class DateTextFieldTextDocumentComparator, contributed by Anders Flodell and Pontus Amberg at Vetenskapsrådet.

Added class ContentManagementSystemRunnable and method ContentManagementSystem.runAsSuperadmin(ContentManagementSystemRunnable) to allow code that has been signed by an administrator to run with superadmin-privileges.

The following things are required to run code with superadmin-privileges:

- KeyStorePath
  in server.properties must be the path of a keystore.
- The class implementing ContentManagementSystemRunnable must be signed (e.g. inside a signed jar-file).
- All certificates used for signing the class must be found in the keystore.

See http://java.sun.com/docs/books/tutorial/jar/sign/ for more information about signing jar files.

Made it possible to edit categories through the API.

Added methods setName(), setDescription(), and setImage() to Category.

Added method DocumentService.saveCategory(Category).

Deprecated method DocumentService.createNewCategory(String, String, String, CategoryType). Use Category.Category(String, CategoryType) and DocumentService.saveCategory(Category) instead.

Methods UserService.getRole(int) and UserService.getRole(String) no longer require superadmin-permissions.

Methods TextDocument.Menu.addDocument(Document) and TextDocument.Menu.removeDocument(Document) erroneously required edit-permissions for the document added or removed, instead of the menu document as intended.

Added fields `section_id`, `category`, `category_type`, and `category_type_id` to search index.

Added the constants Document.LifeCyclePhase.NEW, Document.LifeCyclePhase.APPROVED, Document.LifeCyclePhase.DISAPPROVED, Document.LifeCyclePhase.PUBLISHED, Document.LifeCyclePhase.ARCHIVED, and Document.LifeCyclePhase.UNPUBLISHED, to be used as values in searches on the field "phase".

The java code in the tools directory were not built with source="1.4" and target="1.4". This caused parts of imCMS to break when compiled with java 1.5 and run on java 1.4.

New url format for documents: /imcms/1001 instead of /imcms/servlet/GetDoc?meta_id=1001. The old format still works, but this means that relative links in pages are likely to break.

To alleviate broken relative links, /imcms/GetDoc?meta_id=1001 now works as well as /imcms/servlet/GetDoc?meta_id=1001.

We're now using jTDS instead of Microsofts JDBC driver. The Microsoft driver may still somewhat work, but it is strongly recommended that you use jTDS instead. To do this, change the following values in server.properties:

- Set JdbcDriver to net.sourceforge.jtds.jdbc.Driver
- Set JdbcUrl to jdbc:jtds:sqlserver://host:port/;AppName=imCMS;DatabaseName=databasename substituting correct values for host, port, and databasename.

We require javamail 1.3 or later, but Tomcat 4.1.30 and earlier includes javamail 1.2, which overrides our included implementation (GNU classpathx javamail).

If you're using Tomcat 4.1.30 or earlier, you can do one of three things:

- Recommended: Upgrade Tomcat to version 4.1.31 or later.
- Remove mail.jar and activation.jar from tomcat/common/lib. If you use any web applications that require any of them, you can put them in the WEB-INF/lib directory of those applications. imCMS will use its own implementation.
- Replace mail.jar in the directory tomcat/common/lib with mail.jar from JavaMail 1.3 or later. JavaMail can be downloaded from http://java.sun.com/products/javamail/downloads/

If you are using another servlet engine that includes an older implementation of javamail, similar action may be required.

Specifically, the new url format is contextpath prefix document-id, e.g. /imcmsprefix1001. The prefix can be set with the setting DocumentPathPrefix in server.properties. The default is /. Comment this out to disable the new url format.

The latest documents requested from the database are now cached in memory. This makes imCMS much faster, but means that changes to the database won't be seen. The maximum number of documents cached can be set using DocumentCacheMaxSize in server.properties. The default is to cache at most 100 documents.

All the class-files that used to live in WEB-INF/classes are now packaged in one jar file in WEB-INF/lib.

Some objects were put in sessions when editing documents, and never removed. These are now removed when no longer needed. This might reduce memory usage a bit.

A new function called "My pages" gives you an easy overview of your documents. It is accessible through the "admin" button for users which have any role that has permission to access "My pages".

A new better html editor (http://www.dynarch.com/projects/htmlarea/) which also supports Mozilla browsers has been incorporated.

The search page now allows much more advanced searches.

File extension "dot" is now recognized as a Microsoft Word file.

File extension "ppt" is now recognized as a Microsoft Powerpoint file.

Updated the look of the user interface a bit, notably the adminbuttons and the template dialog.

One can now on the permission page set a default template to be used for new text documents.

Don't display a broken image for an empty image field.

Fixed problem with previewing images with non-ASCII characters in the name in the image browser.

Don't show button to upload images if lacking permission to do so.

Changed certain file uploading error messages to be somewhat clearer.

Fixed a problem where users were allowed to access the document "page info" without proper permissions.

Set creation date to "now" for copies of documents.

Fixed help message on "file edit page".

The OK button on the document "page info" page was unclickable in Safari on Mac due to a javascript.

Hide categories on "page info" page if none exist.

Added shortcut buttons to set dates to "Now" on "page info" page.

The creator and some dates were not set properly for copied documents.

Removed misleading instructions on how to create documents.

Fixed problem with data for browser documents not being saved on creation.

Missing schemes are now automatically added to urls.

The link checker now handles relative and schemeless urls.

When editing menus, for each menu display two numbers.

One number is the number of documents a visitor to the site would see in the menu, and the other number is the number of documents the current user can see when editing the menu.

Allow setting the link target when editing a file document.

Added the file TEMPLATE_SYNTAX.TXT containing a basic reference to the template tags.

Local includes can now be made using `<?imcms:include path="/relative/to/context/path"?>`. These don't require a http-request to localhost as url-includes do, are a magnitude more efficient, and don't spam the access-log.

Jakarta Velocity can now be used in templates, between `<?imcms:velocity?> ... <?/imcms:velocity?>` tags. See the file TEMPLATE_SYNTAX.TXT for details.

Attributes pre and post can now be used on `<?imcms:menu?>`.

Attributes in tags can now be html-escaped, like so: `<?imcms:text label="&quot;quoted text&quot;"?>`.

New attribute for `<?imcms:menu?>`: defaulttemplate - specify the name of a template to use for new text documents created in this menu.

New attribute for `<?imcms:text?>`: formats - specify what editor modes are available.

New attribute for `<?imcms:text?>`: rows - indicate the preferred number of rows to the editor.

When something went wrong during initialization, a useless generic "NoClassDefFoundError" was given.

Certain html files were not viewable in the file manager.

Fixed a problem in the diff-1.10.2-1.11.sql database upgrade script.

Fixed an error when trying to edit a user.

Make sure a useradmin only can list users he can edit.

Sometimes when using the file administrator, some files would be unremovable. Trying to remove them will now give a rather nasty error message instead of failing silently. This still needs improvement.

The link checker is now multithreaded, and one can choose to list only broken links. Also, one can specify a range of document ids to check.

Use a default value of 1440 (24 hours) for IndexingSchedulePeriodInMinutes if missing from server.properties.

Reversed sort order of "List new/updated pages".

Allow to set no roles for users, leaving only the "Users"-role.

Fixed a problem with mismatched filenames in the chat on case-sensitive filesystems.

Empty passwords are no longer allowed for external authentication, e.g. LDAP.

Updated the look of the "Edit external user" page.

Fixed a problem with modified date of a document only being updated on every second save.

The checksums in WEB-INF/version.txt are now in WEB-INF/checksums.txt instead, and are not output by the "Version" servlet.

Made a "RebuildIndex" servlet for rebuilding the index, and fixed the "Restart" servlet to do a more thorough/proper restart of imCMS.

Don't allow removing a template group that contains templates.

Don't print password to log when failing to log in to an LDAP server.

List users in order of last name and first name instead of by id.

Created package `com.imcode.util` with generic non-imCMS-specific utilities:

ChainableReversibleNullComparator
  Moved here from `com.imcode.imcms.api.util`
ComparatorWrapper
  Moved here from `com.imcode.imcms.api.util`
HumanReadable
  Get human readable byte sizes and time spans.
ImageSize
  Get the size of an image in somewhat more efficient manner than ImageIO.read().
MultipartHttpServletRequest
  Extends HttpServletRequest for file upload with support from Jakarta Commons-FileUpload.

Users can now change their own attributes.

Added classes:

Role
  Represents a user-role.
SaveException
  Thrown when something can't be saved.
AlreadyExistsException
  Extends SaveException.
TextDocumentViewing
  Accessible in included JSPs and velocity code. Represents one viewing of a text document.

Changed classes:

MaxCategoriesOfTypeExceededException
  Extends SaveException
CategoryAlreadyExistsException
  Extends AlreadyExistsException
CategoryTypeAlreadyExistsException
  Extends AlreadyExistsException
UserAlreadyExistsException
  Extends AlreadyExistsException
RoleAlreadyExistsException
  Extends AlreadyExistsException

Deprecated classes:

com.imcode.imcms.api.util.ChainableReversibleNullComparator
  Moved to `com.imcode.util`
com.imcode.imcms.api.util.ComparatorWrapper
  Moved to com.imcode.util

Added methods:

ContentManagementSystem.fromRequest(ServletRequest)
  Get the ContentManagementSystem.
Document.setPermissionSetIdForRole(Role,int)m
  Replaces Document.setPermissionSetForRole(String,int)
Document.getPermissionSetIdForRole(Role)
  Get the permission set id for a role
DocumentService.getSection(String)
  Get a section by name.
Section.getId()
  Get the id for a section.
TextDocument.Menu.getVisibleDocuments()
  Returns the documents visible in the menu.
TextDocument.Menu.getVisibleMenuItems()
  Returns the menuitems visible in the menu.
User.getRoles()
  Get the user's roles.
User.setRoles(Role[])
  Set the user's roles.
User.hasRole(Role)
  Returns true if the user has the role.
User.addRole(Role)
  Add a role to the user.
User.removeRole(Role)
  Remove a role from the user.
UserService.createNewRole(String)
  Create a new role
UserService.deleteRole(Role)
  Delete a role, requires superadmin permission.
UserService.getAllRoles()
  Returns all roles in the system, requires superadmin permission.
UserService.getAllUsersWithRole(Role)
  Get all users with the given permission.
UserService.getRole(int)
  Get a role by id, requires superadmin permission.
UserService.getRole(String)
  Get a role by name, requires superadmin permission.
UserService.saveRole(Role)
  Save changes to the role, requires superadmin permission.
UserService.createNewUser(String, String)
  Create a new user.
UserService.saveUser(User)
  Save a new or existing user, requires superadmin permission.
User.set*
  Added a bunch of setters.
User.get*
  Added a few missing getters.

Changed methods:

DocumentService.saveChanges(Document)
  Throws SaveException instead of MaxCategoriesOfTypeExceededException.
TextDocument.setInclude(int,TextDocument)
  Now requires you to call DocumentService.saveChanges() afterwards.
TextDocument.Menu.getDocuments()
  Returns the same documents as can be seen when editing the menu.
TextDocument.Menu.getMenuItems()
  Returns the same menuitems as can be seen when editing the menu. No longer throws NoPermissionException.
UserService.addNewRole(String)
  Returns the new role.

Undeprecated methods:

TextDocument.setTemplate(Template)
  Use when you don't care about setting a template group.

Deprecated methods:

Document.setPermissionSetForRole(String,int)
  Use Document.setPermissionSetIdForRole(Role,int).
User.getRoleNames()
  Use User.getRoles()
User.hasRole(String)
  Use User.hasRole(Role)
UserService.deleteRole(String)
  Use UserService.deleteRole(Role)
UserService.getAllUserWithRole(String)
  Use UserService.getAllUsersWithRole(Role)
UserService.getRoleNames(User)
  Use User.getRoles()
UserService.getAllRolesNames()
  Use UserService.getAllRoles()
UserService.setUserRoles(User,String[])
  Use User.setRoles(Role[])
UserService.addNewRole(String)
  Use UserService.createNewRole(String) and UserService.saveRole(Role)

Removed methods:

DocumentService.createAndSaveNewTextDocument(Document)
  Use DocumentService.createNewTextDocument() and DocumentService.saveChanges(Document)
DocumentService.createAndSaveNewUrlDocument(Document)
  Use DocumentService.createNewUrlDocument() and DocumentService.saveChanges(Document)

Unit tests are now enabled in the build by default.

Target "copy-web" in an addon build.xml is now run when running the "web"-target in the main build.xml.

Use jsp for "edit text" page.

Added a unique index on column "login_name" in table "users".

Compileable with java 1.5.

Updated jars to the latest versions, and made sure all have understandable names with version numbers.

Getting the size of an image was very slow.

The column "role_id" in the table "roles" is now an identity column, and "role_name" is varchar(60).

Don't update menus in database if they don't differ from the cache when saving a text-document.

Fixed a problem where clones of users would share the same set of roles.

Added possibility to set permissions for roles.

Fixed hardcoded urls to the documentation site in the default template.

Removed table "roles_permissions", no longer needed.

All users are now always considered to have the "Users" role regardless of what the database says.

Made an ant-target "distcheck" for verifying that the source distribution is buildable.

Made it easier to build with LDAP enabled

Texts are doubly indexed: With and without HTML-tags.

Introduced the concept of LifeCyclePhase for a DocumentDomainObject (indexed as "phase"), corresponding to what users think of as "status".

A group can now be used as the to-address of e-mails.

The changelog (previously CHANGES.TXT, now CHANGES.HTML) is now generated from an xml-file using an xsl-stylesheet.

In the fix to bug 2452 in 1.11.0, we changed the way files in file documents are saved to disk, forgetting backwards-compatibility. Administrators had to remove the "_se"-suffix from all files under "WEB-INF/uploads", or the files would not be found after an upgrade. This was fixed so the "_se" suffix is recognized again, and will be automatically removed when the file document is saved. Removing the suffix from the files on upgrade is still recommended.

On a related note, don't show "WEB-INF/uploads" in "FileAdmin" by default.

Made "/RD/*"-paths (as seen in the log) work again.

The "SelectMethod" in the JdbcUrl in "server.properties" MUST be set to "SelectMethod=cursor", otherwise you will get the error "Can't start a cloned connection while in manual transaction mode." when you try to save a document. This is due to the new transaction code. The default used to be "SelectMethod=direct".

Made it possible to upload several files in one filedocument.

Fixed a race condition that could cause menus to be cleared when editing a text-document.

File-extension "xls" on uploaded files is now recognized as a Microsoft Excel Spreadsheet.

Fixed a problem with viewing uploaded PDF files with Adobe Acrobat 6.0.1.

Fixed exception when trying to create an HTML-document.

Changed some swedish names for different document types.

Some form elements looked strange in "page info" in Internet Explorer 5.2 on Macintosh.

Fixed a bug that made it hard to remove images.

Show file-size on file-document-files and images.

Distinguish directories in "FileAdmin" with gray background color, sort files and directories in alphabetical order, and make file-sizes more readable.

Fixed a bug making it impossible to delete a text-document with more than one menu.

HTML is now removed from text-fields before indexing, so a search for "foo bar" will now also find "<em>foo</em> bar".

Changed swedish name of text-document, "Ny sida" to "Textsida".

Image-preview in old image archive was broken.

Submitting the form several times (i.e. by double-clicking) when creating a new document no longer results in an error message and several documents created.

Put the imCMS-commercial html-comment (imcms_message.html) before the <html>-tag instead of the before doctype declaration.

Disallow editing of user "user".

Fixed a bug that made it impossible to create a category.

Fixed a bug that prevented changing a category-type from multi-choice to single-choice.

Database connections are now tested before use. This allows imCMS to survive database server restarts.

"IndexingSchedulePeriodInMinutes" in "server.properties" now controls the time period between reindexings in minutes.

Reindexing is no longer performed on startup unless needed.

Added a little note about running SQL-scripts to INSTALL.TXT.

The admin button is now visible for users with role "Useradmin" again.

Category now implements Comparable. Compares by name, ignoring case.

UserService.getUser(String) no longer requires superadmin permissions.

Added classes: - MailService - provides methods for sending e-mail. - Mail - represents a mail to be sent with MailService. Uses javax.activation.DataSource for attachments. - MailException - thrown by MailService. - FileDocument - represents a filedocument - FileDocument.FileDocumentFile - represents a single file in a filedocument. Implements javax.activation.DataSource.

Added methods: - ContentManagementSystem.getMailService() - - DocumentService.createNewFileDocument() - - DocumentService.getXmlDomForDocument() - returns an org.w3c.dom.Document representing a document. Currently only works with text-documents. - Image.getSrc(String contextPath) - returns image-src with contextPath prepended. - Image.getSrcRelativeToContextPath() - returns image-src without contextPath prepended. - Image.getSize() - returns the size of the image in bytes. - User.getId() - returns the user id. - User.isDefaultUser() - returns true if the user is the default user ("user/user"). - DocumentPermissionSet.getEditMenusPermission() - returns true if this permission-set allows editing of menus. - DocumentPermissionSet.setEditMenusPermission(boolean) - sets whether this permission-set allows editing of menus.

Removed methods: - Image.getSrc() - use Image.getSrc(String contextPath) or Image.getSrcRelativeToContextPath() - Image.getSrcUrl() - use Image.getSrc(String contextPath) or Image.getSrcRelativeToContextPath() This was necessary to completely remove imCMS dependence on a specific context path.

Removed deprecated fields: - Document.Comparator.ACTIVATED_DATETIME - use Document.Comparator.PUBLICATION_START_DATETIME

Removed deprecated methods - Document.setModifiedDateTime(Date) - use Document.setModifiedDatetime(Date) - Document.getModifiedDateTime() - use Document.getModifiedDatetime() - Document.getCreatedDateTime() - use Document.getCreatedDatetime() - TextDocument.getMenuSortOrder() - use Menu.getSortOrder() - TextDocument.setMenuSortOrder(int) - use Menu.setSortOrder(int) - DocumentPermissionSet.getEditHeadlinePermission() - use DocumentPermissionSet.getEditDocumentInformationPermission() - DocumentPermissionSet.setEditHeadlinePermission(boolean) - use DocumentPermissionSet.setEditDocumentInformationPermission(boolean) - DocumentPermissionSet.getEditableMenuDocumentTypeNames() - removed, returning type-names is broken.

The document-deletion procedure is now run in an transaction.

It's now possible to send attachments with mails. This uses the Java Activation Framework (javax.activation) and JavaMail API implementations from the GNU classpathx project.

Replaced imCMS own image-parsing routines with javax.imageio.ImageIO

Started to change the database API to allow for transactions.

Text document menus are now saved inside a transaction.

Added constants for use in search-strings: - TextDocument.TYPE_ID - UrlDocument.TYPE_ID

Added methods: - boolean User.isSuperAdmin() - boolean User.canEdit(Document) - String[] User.getRoleNames() - DocumentService.createNewTextDocument(Document) - DocumentService.createNewUrlDocument(Document)

Deprecated methods: - DocumentService.createAndSaveNewTextDocument(Document) - DocumentService.createAndSaveNewUrlDocument(Document)

The ldap implementation should no longer be dependent on Microsoft Active Directory. Rewrote a big part of the ldap-configuration in "server.properties": - "LdapUserName" is replaced by "LdapBindDn", - "LdapUserObjectClass" is set to "inetOrgPerson" by default. - "LdapUserIdentifyingAttribute" is replaced by "LdapUserAttribute.LoginName" which is only required if not using 'uid' in the "inetOrgPerson" objectclass. Ldap-attributes can now be arbitrarily mapped to user-properties. See the comments in "server.properties" for details.

Fixed a bug where removing a single phone number from a user had no effect.

Use dos-style line-endings in the text-files in the zip file, and unix-style line-endings in the tarball.

Instead of empty strings, use "localhost" for default database-host and "imcms" for default database-name.

Added method Image.isEmpty() to determine whether an image is empty or not.

Image.getWidth() and Image.getHeight() now return the actual size of the image as it will be displayed, instead of 0, unless the actual size couldn't be determined.

Fixed a bug which caused includes to be done with the included document in adminmode.

Image-tags containing filedocument-images are hidden from users without permissions to the filedocument.

Fixed a mistake which prevented the imCMS-advertisement in "imcms_message.html" from being output at the beginning of every page.

Allow files with extensions "jsp" and "js" to be edited in the file administrator ("FileAdmin").

Build a zip file/tarball so people don't have to download more than one file.

Fixed a number of problems with the conference login.

Fixed a bug with the linkeditor in browsers other than Internet Explorer.

Made the html-editor optional through the use of a cookie.

Fixed a bug with creating external links in the html-editor.

Fixed a couple of bugs related to creating new conferences and new conference-users.

Made listing many users somewhat quicker.

Fixed exception and possible menu-deletion when trying to readd an already existing document to a menu sorted by "manual" order.

Included both english and swedish sql scripts in the distribution.

Filedocuments of types "png", "gif", or "jpeg" can now be used as images.

Completely redid the image-selecting interface to allow for the new filedocuments-as-images paradigm.

Replaced dropdown for selecting document publisher with a user-select dialog, and made the document creator settable in the same manner.

Allow filedocument filenames of up to 255 characters, truncating somewhat intelligently if needed.

Only show links to documents which the user has at least read permission on, or which are visible to non-authorized users.

Fixed exception when adding documents to a menu sorted by "manual" order.

Setting the modified time of a document is now possible, but it will still be updated the next time the document is modified.

The label attribute now works for the include-tag: <?imcms:include label="Include label"?>

The outputdescription-attribute of the documentcategories tag now takes two values, "true" or "only": - "true": <?imcms:documentcategories outputdescription="true"?> will output "categoryname - categorydescription" - "only": <?imcms:documentcategories outputdescription="only"?> will output "categorydescription" - Not present: <?imcms:documentcategories?> will output "categoryname".

The file "host.properties" is gone, and everything is put in "server.properties".

Worked a little more on indexing robustness.

Made the indexing work at a lower priority.

Remove documents from the index when deleted.

Fixed a bug in the linkchecker where some broken links would be flagged as OK.

If "SessionCookieDomain" is set in "server.properties", a second JSESSIONID cookie will be set with the given domain.

Added methods TextDocument.getTextFields(), TextDocument.getImages(), and TextDocument.getIncludes()

Added accessors Document.setVisibleInMenusForUnauthorizedUsers(boolean visibleInMenusForUnauthorizedUsers) and Document.isVisibleInMenusForUnauthorizedUsers()

Added accessor Document.setCreator(User creator)

Added method Document.getDocumentPermissionSetForUser()

Added accessors TextDocument.Menu.getSortOrder() and TextDocument.Menu.setSortOrder(int sortOrder)

Added method TextDocument.getMenus()

Removed user-"categories".

Refactored the code for creating and editing documents.

Only show links to documents which the user has at least read permission on, or which are visible to non-authorized users.

Fixed exception when adding documents to a menu sorted by "manual" order.

Remove documents from the index when deleted.

Made the indexing a little more robust.

Simple/advanced view toggle for docinfo.

Admin-pages will now work on non-javascript-enabled browsers.

All admin-pages now use the new blue/white look.

The link checker will now also check linked images and urls in text-fields.

"Administer conferences" functionality moved to "List new/updated pages".

The session counter now counts sessions, not logins. This means that each visitor is only counted once per browser session, instead of once when entering the site and then again when logging in.

New template tag: <?imcms:contextpath?> will be replaced by the "context path" of the webapp. The context path is the root path to the webapp, usually the name of the webapp preceded by a slash, for example "/imcms". This is useful when one wants to construct an absolute URL. Example: <img src="<?imcms:contextpath?>/images/imCMSpower.gif" alt="Powered by imCMS">

The webapp should now be possible to rename without having to change any templates.

We now return correct HTTP status codes: 404 for "Not found", and 403 for "Forbidden/Permission denied".

Changed database parameters to allow for different database-drivers: The parameters "Url", "Host", "Port", "DatabaseName" in imcms/WEB-INF/conf/server.properties were replaced by the single option "JdbcUrl", which for the Microsoft JDBC driver maps to the old parameters as follows: jdbc:microsoft:sqlserver://<Host>:<Port>;DatabaseName=<DatabaseName>

The "MaxConnectionCount" in server.properties is ignored by the Microsoft JDBC Driver, unless one sets the driver parameter "SelectMethod" to "cursor". To do this, append ";SelectMethod=cursor" (note the semicolon) to the JdbcUrl. The default is "SelectMethod=direct", and this causes the MS JDBC driver to clone connections internally. See http://support.microsoft.com/default.aspx?scid=kb;EN-US;313220 for more information.

Conference, billboard, and chat should now work on case sensitive filesystems, for example on linux.

Reindexing of documents is now scheduled every 24 hours from startup. Reindexing is done to a new directory, "imcms/WEB-INF/index.new", which replaces the current index "imcms/WEB-INF/index" when complete.

Moved the apisamples from "/apisamples/" to "/imcms/docs/apisamples/".

DocumentService.saveChanges(Document) is now synchronized as a poor mans transaction to prevent database conflicts.

Added method DocumentService.getCategoryType(int categoryTypeId)

Added method DocumentService.createNewCategoryType(String name, int maxChoices)

Added method DocumentService.createNewCategory(String name, String description, String imageUrl, CategoryType categoryType)

Added method TemplateService.getAllTemplateGroups()

Added accessors Template.getId() and TemplateGroup.getId().

Added convenience method DocumentService.parseLuceneSearchQuery(String) which returns a SearchQuery parsed according to Lucene syntax, see http://jakarta.apache.org/lucene/docs/queryparsersyntax.html

Cleaned up the file organization in the project.

Renamed all the ant-targets using more consistent names.

The API now has its own connection pool, so developers using the API can't accidentally starve the system of connections.

Jakarta Velocity (http://jakarta.apache.org/velocity/) can now be used in admintemplates and JSP-pages.

Searchable tokens in the index may now only consist of letters, digits, and underscores, instead of non-whitespace. This makes html index a little bit better, so that for example <b>bold</b> is indexed as two words ("b" and "bold").