Skip to end of metadata
Go to start of metadata


This page contains macros or features from a plugin which requires a valid license.

You will need to contact your administrator.

Sakai 2.9

Released: November 2012

Release Dates

Sakai 2.9 release dates:

2.9.0 - 7 November 2012

2.9.1 - 11 February 2013

2.9.2 - 01 June 2013

2.9.3 - 22 August 2013

About Sakai

Sakai software is a Java-based, service-oriented web application that provides a variety of capabilities supporting teaching and learning, portfolios, research, and ad-hoc project collaboration. The Sakai is typically deployed using Apache Tomcat as its servlet container and scalability is achieved by running multiple instances of Tomcat in a clustered environment, each deploying a copy of the Sakai. It integrates with a variety of external authentication services including CAS, Kerberos, LDAP, Shibboleth and WebAuth. A single database, usually MySQL or Oracle, provides a transactional store of information while file storage is typically delegated to NAS or SAN solutions. In most production settings, the Sakai relies on a back-end student information system (SIS) to provide it with student and course information, which the Sakai consults via provider APIs.

What's new


Sakai 2.9 contains significant performance improvements, updated technical infrastructure, hundreds of bug fixes (over 600 bug fixes and over 20 security improvements), and it sports a new, updated look and feel, including smoother navigation, with a new neo-portal skin. Significant features have been added to the Resources, Gradebook, and Section Info tools in core Sakai. Major additions and improvements have been made to the “Indies,” including Lessons, which is now turned on by default, Samigo Test & Quizzes, Profile 2, Forums and Messages. 



• CK editor inclusion improves accessibility
• Accessibility improvements to the brand new NeoPortal
• Significantly improved the accessibility of dynamic menus in the resources tool
• For a complete and in-depth analysis of all accessibility improvements to Sakai 2.9.0 visit the Accessibility Working Group’s webpage

Instructor can submit assignment on behalf of a student -  SAK-7475 - Getting issue details... STATUS

Basic LTI (IMS Learning Tools Interoperability)
•  Support for Basic LTI was upgraded from version 1.3 to 2.0 in Sakai 2.9.0 and 2.9.1 
•  Support for Basic LTI was upgraded from version 2.0 to 2.1 in Sakai 2.9.2 . Please see LTI - Release 2.1.0 Notes

Delegated Access

• Delegated Access Tool - not OOTB - new Contrib Tool

• Statistics and Grading (check all cases where you can grade (bulk grading, etc))
• Require users to post before they can read posts - setting per forum -  MSGCNTR-411 - Getting issue details... STATUS
• Word count for messages
• Improved permissions settings layout -  MSGCNTR-542 - Getting issue details... STATUS
• Checks for, and prevents, duplicate Forum and Topic names
• Profile picture displays next to each post -  MSGCNTR-584 - Getting issue details... STATUS
• Option to set open (show) and close (hide) dates -  MSGCNTR-309 - Getting issue details... STATUS
• Options to duplicate forum and duplicate topic
• The term "threads" changed to "conversations" throughout UI
• In Topic menu, "Display Entire Message" option changed to "Display Message Content"
• Topic menu always displays at top of Topic screen (previously, it displayed beneath breadcrumbs when in "Display Subject Only" mode and at the top when in "Display Entire Message" mode.


Drop highest, drop lowest and keep highest grade options -  SAK-19964 - Getting issue details... STATUS
• Hide/show columns in All Grades page -  SAK-19731 - Getting issue details... STATUS
• PDF export option added -  SAK-20118 - Getting issue details... STATUS
• Institutionally defined final course grade export, in addition to existing grade export options -  SAK-22204 - Getting issue details... STATUS   (New in Sakai 2.9.2)


•  Ability to define and import a group with a CSV file. -  SAK-21407 - Getting issue details... STATUS
• Randomly assign users to a set of groups (maintainer specifies the desired group size or the desired number of groups) -  SAK-22253 - Getting issue details... STATUS

Help Documentation (new for Sakai 2.9.1 and updated in Sakai 2.9.3)

Sakai online Help has been updated to reflect tool changes between 2.8.x and 2.9.x


• Ability to set a language different than the system default on a site level.

Lessons - Lessons (formerly Lesson Builder)
•  New part of core Sakai !!!
•  Student-centric features added including allowing students to create pages and comment on pages.
•  An anonymous option is available.
•  Support for IMS Common Cartridge import. Version 1.1 for 2.9.0 and version 1.2 for 2.9.1. Support for IMS Basic LTI tools have been added.


• New permissions settings to allow finer-grained control over who may send to generic recipient groups -  MSGCNTR-401 - Getting issue details... STATUS

• Ability to hide groups from specified roles. An example use case is to have a group with learning disabilities which may need private communications. -  MSGCNTR-438 - Getting issue details... STATUS

• BCC (blind cc option)


NeoChat - experimental tool - being piloted at smaller installations. For information contact

• NeoChat is a new social network chat tool which has not been thoroughly vetted for performance at large scale.  

Neo-portal and updated skin - (for more information see Sakai 2.9 portal changes and see Sakai 2.9 and Sakai 10 skin guide for updates in Sakai 2.9.2)
• Provides an improved user interface design, including collapsible toolbar navigation enhanced with descriptive icons, and direct navigation to a tool from the site navigation bar. 


Profile 2 
• Once logged in, a user can go to profile settings from My Workspace or by clicking the icon in the top right corner. 
• Ability to create a new site with selected connections. -  PRFL-388 - Getting issue details... STATUS
• More flexiblity with preferences, searching and privacy. 

• Provides zip expansion of uploaded files. -  KNL-273 - Getting issue details... STATUS
• Allows export of files to zip format. (System property setting required.
• Optional URL shortening for resource access

Section Info 
• Ability to select a date when the sections tool is open for student viewing. -  SAK-20612 - Getting issue details... STATUS
• Now allows students to view their section information.


• Unpublished sites can be published with a single click. -  SAK-22732 - Getting issue details... STATUS
• Language preferences are now supported at the local worksite level, overriding system-wide language default.
Import from Site updates links to content correctly - SAK-16568 - Getting issue details... STATUS

Tests & Quizzes (Samigo) 
• Easier distinction between published and working copies of quizzes. - SAM-894 - Getting issue details... STATUS
• Ability to set score for students who have not submitted their work. -  SAM-904 - Getting issue details... STATUS

• After a Test has been published, random question ordering option within Part. -  SAM-1328 - Getting issue details... STATUS
• Can now place due date on Schedule tool -  SAM-1121 - Getting issue details... STATUS
• A new matrix survey question type has been added.
• Scientific and complex number notation support. -  SAM-1221 - Getting issue details... STATUS

• Grader's comments included in Export -  SAM-1323 - Getting issue details... STATUS
• Additional enhancements

Turnitin Integration 

• Add the new options from TII 2.9.2 in the Assignments Tool. 
• Target a repository, target databases
• An institution can choose which settings are available via

Updated Editor
CKEditor 3.6.2 has replaced the FCKEditor as the default.
• CKEditor provides major accessibility improvements, speed increases, Word-format-stripping by default, and works better with most mobile devices.
• Addition of Math Editing in CK Editor - Added in 2.9.2 -  SAK-23266 - Getting issue details... STATUS  


Web Content Tool (updated in 2.9.2)  
• Technical upgrade to Web Content Tool, using JSR-168 Portlet -  SAK-12563 - Getting issue details... STATUS
• Improved management of embedded web sites -  SAK-21624 - Getting issue details... STATUS

Administration and System Management

• Improved stability, security, and sustainability.
• Tomcat 7/Java 6 recommended configuration and support for Java 7.
• Well over 700 bug fixes and several dozen security fixes. 
• New security infrastructure introduced in Sakai 2.9.2 (off by default, to allow piloting) - KNL-1015 - Getting issue details... STATUS   

• Support for delegated administration has been added. (Not OOTB, but support to plug in feature is included.) 
• Ability to host uploaded content on a separate domain. - Implementation Documentation
• Improved caching for performance -  KNL-532 - Getting issue details... STATUS
• Has been enhanced to support Polls, Basic LTI, Questions Pools and Assignment supplements.
• Bulk CSV user management support has been added.
• Improvements to configuration management and system documentation. 




Detailed Feature List

 Click here to expand...


BasicLTIBLTI-119Improve IMS Learning Tools Interoperability Support (Basic LTI, IMS CC 1.1 Support, Full LTI)This is an umbrella JIRA to capture a series of improvements to the LTI support in Sakai. At a high level, the following are the tasks:

- Build an administrator user interface that allows creation of new Basic LTI tools without using an XML descriptor
- Build an instructor user interface to create BLTI virtual tools for placement in Lesson Builder
- Add support for BLTI to Lesson Builder, integrated with the new LTI Service
- Add support for importing and exporting BLTI placements - similar to what was done for Moodle 2.1 -
- Add support for dynamic URL remapping and instructor custom parameter configuration per the soon-to-be released Basic LTI 1.1 best practices.

The UI for this will look a *lot* like the Moodle Basic LTI Module and the ATutor Basic LTI support. In particular you can see the use cases of the Administrator UI and the Instructor UI. ATutor is more like what the Sakai UI will be like as ATutor supports instructor custom properties ( new Basic LTI 1.1 best practice) as well as instructor configured tools.



This will also lay down some workflow and data model elements that will be needed for Full LTI - mostly about tool lifecycle. I won't yet build the Full LTI user interface, profiles, and services - but I will put elements in place and have UI hooks that will make Full LTI provisioning, launch, import, and export come in pretty easily.
BasicLTIBLTI-104Version specified for provided jarsthe root dependency management specifies versions for servelet-api and commons-logging - both of these are provided by sakai-standard-tool and intorduce risk of dependency drift in the future
BasicLTIBLTI-123Add Support for new IMS POX-Style ServicesAdd support for the emerging IMS Plain Old XML (POX) services for outcomes, roster, etc.
BasicLTIBLTI-156Site info External Tools generates 'unexpected error'Error in Site info:

When the user clicks on External Tools the page says an unexpected error has occurred. Please find the screenshots of the error in the attachments.
Kernel - K1KNL-934Authz performance issuesHere is the patch file for our (VT) local changes to the authz service to support that query change (discussed in the TCC meeting).

Since the parameter order had to be tweaked to accomodate our change, and since we implemented a static role-key cache to support the hardcoding of role key values into the query, the patch is somewhat complicated.

There's also a change to ehcache.xml that I'm not certain is related to the function of this patch at all, but I wanted to get this patch to you right away rather than spending a bunch of time verifying things.

Will and I worked together on redesigning the query itself, starting from a suggestion by Richard Quintin. Jihane did most of the work on implementing the role key cache, I believe. This patch tweaks the query for all DB implementations, but Oracle is the only one we've tested at production scale.

I'm guessing some actual stats on the improvement this query makes in performance would be worthwhile. I will try to dig those up from my email archive or I might resort to recalculating them if need be. It should be relatively straightforward to do so.

The patch applies cleanly against kernel 1.2.6 (the one paired with Sakai 2.8.1). My understanding is that this query or the role key cache would need to be made optional if this were to be included in 2.9. I'm guessing Will and/or Jihane are better equipped to help out with that effort than I would be. Otherwise, let me know what else I can do to help the effort to get this work into the community code.
Kernel - K1KNL-970Update default role permissions in sakai_realm.sql for Lesson Builder, SiteStats, and roleswapWhen you first add Lessons to a site - in this case a project site - the default permissions are still missing. I know we talked about this a while back and was not sure if this was done in kernel configuration scripts or conversion scripts - but I tried this on the current 2.9 Longsight Server today and it is still unfixed. I checked out a copy of 2-9-x last week and it was still unfixed.

So I am putting it in because I could not find the JIRA that tracks this and I just don't want us to forget about it.
Kernel - K1KNL-629Allow content from CHS to be filtered when servedSAK-13492 has details of how the kernel can filter served up content.
This is useful initially to add headers and footers to HTML fragments created by the FCKEditor in resources.
Kernel - K1KNL-742Add new Messages permissions to sakai_realm.sqlA new feature was added to the Messages tool in MSGCNTR-401 that introduced new permissions that need to be added to the sakai_realm script:

Patch attached for sql additions. Please let me know if there is a different route I need to take to get these permissions added for ootb sakai. Thanks!
Kernel - K1KNL-897Admin Worksite Setup - Unpublished sites not appearing in listWhile experimenting on the nightly server (, I noticed that a new site I created as "unpublished" was not appearing at all in My Workspace > Worksite Setup. It was appearing as a "tab" up top, since I called the site "A test site" so it was alphabetically available. However, it should also be listed in the "Worksite Setup" area since an admin should be able to view all sites, not just published sites. (Like a faculty member can see his/her published and unpublished sites if they are the site owner/maintain/instructor role.)

I opened a new browser and could reproduce the behavior. I logged out and logged back in and it still happened. I created a new site ("A test site 2"), also unpublished, and it wasn't listed either. I created another ("A test site 3"), this one published, and it did appear in the list.

Please see the screenshot for the visual.
Kernel - K1KNL-807ContentHosting should post an event whenever a change is made in the availability of a resourcePlease add a new event "content.upd.visibility" that will be posted whenever a previously shown resource becomes hidden, whenever a previously hidden resource becomes shown, and whenever release and/or retract dates for a resource are added, changed or deleted.
Kernel - K1KNL-919Delegated Access Sakai patchesThe following patch need to be in Sakai for the delegated access tool to work properly

This patch do not modify the user experience in any way unless the system has enabled the delegated access tool.
Kernel - K1KNL-946Standardize parsing of property values in sakai.propertiesThere currently are multiple strategies invoked for parsing property values in One of the side-effects of these multiple approaches is that they split comma-separated parameters up in different ways with regards to white-space, some of which are not as well equipped variations as others (e.g., SAK-9447). We should standardize on how white-space is treated in, and provide developers with uniform methods for parsing their parameters.
Kernel - K1KNL-342Allow ToolListener to be configured to use a path other than /tools/I was doing a little bit of development and had ny tool registration files in /WEB-INF/tools/ which is wrong (should be in /tools/) the ToolListener doesn't warn when it can't find the folder (or it doesn't register any files). So I've added some logging at WARN level as if you have the ToolListener but not tool registration files you can probably remove the listener (or add a tool registration file in the correct place.

I also allowed for the tool registration folder to be configurable with a context init parameter (defaulting to /tools/), context listeners can't have configuration directly so we have to use a context init parameter.
Kernel - K1KNL-356Automatically remove dropboxes for users who aren't members of the siteSAK-7964 Was the original issue.

When a user is added to a site a dropbox is created for them, however if they leave the site the dropbox remains even if the user didn't ever upload anything into it.

The attached patch removes empty dropboxes of users who are no longer members of the site.
Kernel - K1KNL-655Upgrade to Ehcache to 1.7.2We're using ehchache 1.6.0 at the moment. This is now 2 year old. Also later versions have a smaller memory footprint:

"Update: Ehcache 2.0 will introduce a new implementation for MemoryStore based on a custom ConcurrentHashMap. This version provides fast iteration and does away with the need for the keyArray thus bringing memory use back down to pre 1.6 levels. And with other memory optimisations made to Element in 1.7, memory use will actually be considerably lower than pre 1.6 levels."
Kernel - K1KNL-885The group property to enable Site Info to see groups should be moved out of site-manage and into kernel-apiIn order for a group to show up in the Manage Groups part of Site Info, it must have the property:


This is defined in:
site-manage-util/util/src/java/org/sakaiproject/site/util/ public static final String GROUP_PROP_WSETUP_CREATED = "group_prop_wsetup_created";

Therefore, other tools that want to create groups with this property must either take a chance that the property won't change and hard code it themselves, or use the constant from the site manage utils, creating a hard dependency.

Ideally, this property would be moved to the kernel.
Kernel - K1KNL-893KNL-532 AuthenticationCache cache not serializedClick here for more information.
Kernel - K1KNL-895No way to override/clear the propertyI have an installation defined with the property in

I also have a and file for specific overrides.

On a particular instance I want to disable the force secure setting as I am running http only.

However there is no way to do that. If I set the value to a blank value (in local or, ie as an override) in an attempt to clear it, then it throws a NumberFormatException.

So once the setting has a value it must always have a value, AND forces URLs to be https. The code should be adjusted so that a blank value negates any previous value that has been set.
Kernel - K1KNL-817rename method in BaseContentService is actually copy/removeThe "rename" method in BaseContentService does not actually rename resources or collections. It copies them and then removes the old copy. This may work all right for relatively small files and collections, but for large files and collections this can create I/O throughput issues as well as potential risks in multi-volume storage setups, when all that is needed is to update a few fields in existing database records. We've recently been experiencing performance problems on application servers struggling to keep up with multiple large "rename" activities on directories full of multi-gigabyte files, which quickly saturates the NFS I/O throughput available on that application server.
Kernel - K1KNL-705CLONE - The ability to move a site to a recycle bin and then purge it after a set period of timeThis is a set of patches that add some interesting behaviour to site deletions.

It adds the capability for sites to be softly deleted, and after a set period of time, purged from the system. The way it works is thusly:

A maintainer of a site deletes that site. If this is enabled, the user receives a message about this instead of the normal message. The site is then, for all intents and purposes, deleted. It does not show in any lists and users cannot navigate to it. However the site still exists and is completely intact with all content and user lists. Users with the appropriate permission (site.visit.softly.deleted) can manually navigate to the url. They get a message that the site is due to be purged but can still act on the site, perhaps retrieving content.

Normal users of a softly deleted site cannot access the site at all.

After a configured grace period, a Quartz job purges softly deleted sites from the system.

In addition, another permission is added, site.del.softly.deleted. This allows users with this permission to issue another removeSite call, perhaps from a webservice or similar, and that will manually purge the site from the system.

# enable soft site deletions when a site is deleted normally
# if true, they will be softly delete and then purged after 30 days
# if false, thet will be deleted immediately
# defaults to false.

# the number of days to keep softly deleted sites until they are purged.
# if not set and site.soft.deletion=true, defaults to 30 days.

There are a couple of components touched by this, and for trunk, there are two patches per component (I haven't merged the patches together sorry). Simply apply the -trunk patch, then the -trunk-2 patch.
Kernel - K1KNL-976MultiRefCacheEntry is not serializableClick here for more information.

Lesson Builder

Lesson BuilderLSNBLDR-32Lesson Builder has dependencies on contrib toolsThe LessonBuilder code has dependencies on contrib tools (yaft and mneme). Core tools should never depend on contrib tools -- see lessonbuilder/pom.xml:


These dependencies should be removed for the 2.9 release
Lesson BuilderLSNBLDR-69Regression : Change links broken in current 1.4.x @107763On 2.9.0-b05 it works if you create a quiz, hit "Change quiz", however on 1.4.x after what I believe after this commit:

nothing happens clicking this link. I don't think it's only limited to quizzes. This only happens in the 1.4.x when


It works in the trunk and on the 2.9 QA servers (running b05)

It looks like this is because there is an onclick="return false" in the anchor now. And the jquery click handler is stopping it now in ui.js.
$('.add-quiz-link, #change-quiz').click(function(event){
if (!picker) return true;
Lesson BuilderLSNBLDR-15Revise LB poms so that we can perform separate API and tool releasesAs discussed in the LA project planning meeting one change we intend to make for 2.9+ is to perform API releases independently and ahead of tool releases. In the case of LB, sometime after code freeze we would release sakai-lessonbuilder-api-1.0 (or 1.2 whatever you want). In order to do this we will need to replace the api's current <parent> (the LB base pom) with a purepom-like "sakai api" pom that will be released first so that an LB api release can actually be performed (currently, you can't do a release of an api that has a snapshot dependency on its own project base pom). Ideally, once we hit code freeze, we release the kernel apis, then all the tool apis. We should then be able to better reflect version-wise the actual steady state of most project apis. LB tool 1x tool releases should then be able to bind to lessonbuilder-api-1.0 for the life of the 1x series.
Lesson BuilderLSNBLDR-11Prep LessonBuilder poms for off-cycle releasesPrepping LessonBuilder poms to utilize the release plugin. Also tidy up the poms as necessary.

1. Change the <groupId> to org.sakaiproject.lessonbuilder. LB's coordinates will adhere to the pattern adopted for other indies, which is reflective of broader Maven naming practices including that practiced by Apache.

2. Change trunk versionId to 1.3-SNAPSHOT. This is necessary because it reflects accurately the unstable nature of trunk and is required in order for Maven to deploy snapshot artifacts to the snapshot repo.

3. Set up LB so that we can deploy binaries to the snapshot repo. Basically boilerplate additions to the base pom. Add <distributionManagement>, <repositories>, <pluginRepositories> and <reporting> declarations to base pom. Update the current Jenkins job to deploy snapshot updates.

4. Add an assembly which provides a Tomcat-overlay zip of LB. As I noted in LA we will not substitute an assembly for a full source check out of LB but the assemblies have proven quite useful to msub deployers such as Steve Swinsburg. Plus, if we ever get the app store concept going a zip of LB binaries will prove quite useful. Again, this code, a pom file and deploy.xml is largely boilerplate. It takes about 5 minutes to write.

5. Set LB up to use the release plugin. Involves swapping out the master pom for the edu-tool purepom like other indies. We have 2.6, 2.7, 2.8, 2.9 versions of purepoms. I expect that LB will benefit from use of the release plugin (which the purepoms provide) which provides the ability to generate off-cycle releases in a simple, nay trivial manner.

6. Tidy up the poms. For example, substitute standard Maven variables such as ${project.groupId} and ${project.version} where appropriate for LB's own "internal" dependencies.

7. Delete tool/src/maven2 folder. It is now redundant as updated sakairsf 0.8-SNAPSHOT artifacts exist.
Lesson BuilderLSNBLDR-7Breadcrumb trail titles and Index titles don't update when user changes page titles in settingsBreadcrumb trail titles and Index titles don't update when user changes page titles in settings

See short screencast video of Rutgers instance:

(Attached screenshots of Ithaca College's instance.)
Lesson BuilderLSNBLDR-8Inconsistent and icorrect use of Custom Sakai Maven variablesThe tool pom references version properties from master/pom.xml. As maven variables have a scope of the pom their in this will cause some plugins to fail. Also the versions are inconsistent and sometimes incorrect:


sakai.version <> sakai.samigo.version



sakai.version <> message center version

Dependency management should be used rather than inheriting custom variables
Lesson BuilderLSNBLDR-28Oracle auto ddl problem with LessonBuilder tablesI've seen those errors in my log:

2011-08-12 16:47:32,905 WARN main org.sakaiproject.springframework.orm.hibernate.AddableSessionFactoryBean - Unsuccessful schema statement: create table lesson_builder_comments (id number(19,0) not null, itemId number(19,0) not null, pageId number(19,0) not null, timePosted timestamp not null, author varchar2(36 char) not null, comment clob, UUID varchar2(36 char) not null, html number(1,0) not null, primary key (id))
java.sql.SQLException: ORA-00904: : invalid identifier

at oracle.jdbc.driver.DatabaseError.throwSqlException(
at oracle.jdbc.driver.T4CTTIoer.processError(
at oracle.jdbc.driver.T4CTTIoer.processError(
at oracle.jdbc.driver.T4C8Oall.receive(

2011-08-12 16:37:33,902 WARN main org.sakaiproject.springframework.orm.hibernate.AddableSessionFactoryBean - Unsuccessful schema statement: alter table lesson_builder_comments add comment clob
java.sql.SQLException: ORA-00904: : invalid identifier

at oracle.jdbc.driver.DatabaseError.throwSqlException(
at oracle.jdbc.driver.T4CTTIoer.processError(
at oracle.jdbc.driver.T4CTTIoer.processError(

all the error seems to be related with clob fields.
Lesson BuilderLSNBLDR-59Common Cartridge Import - IssueWhile CC import,

1. IMS CC 1.1 - error: Unable to create file while importing Common Cartridge: 100 copies already exist:
2. IMS CC 1.0 - Assessment is migrated in to tests and quiz but no question appeared.

Note: IMS cc 1.1 working fine in BlackBorad 9.1
Lesson BuilderLSNBLDR-80Help pages displaying underneath when adding textWhen the instructor starts with a brand new 'Lesson', and clicks 'Add Text', 'Add Assignment', etc, the help page for Lesson Builder displays behind the add item.

From Site Info -> Edit Tools, add Lessons
Click on Lessons -> Add Text
Add text and save

The help page is displayed while adding text and after text has been added.
In order to get rid of the background help page, the browser needs to be refreshed.
Lesson BuilderLSNBLDR-107Fatal Error Showing When Adding Student Comments Tool in LessonsClick here to for more information.
Lesson BuilderLSNBLDR-97MP3s are not uploadable in LessonsTried to add an mp3 file to lessons, both under Add Multimedia and Add Resource. Received the following error:

Unable to add resource: org.sakaiproject.exception.ServerOverloadException id=failed to write file from stream to database

I then recorded a file on Win7, which Windows saved as a wma file. This file uploads, and when clicked on, opens a new window, a pop-up displays asking if I want to open with the Windows Media Player. Of course, this does not work on the MAC.

Currently, there seems to be no way to make audio files available to all students. MP3 files should be supported in case the instructor wants to give audio instructions or wants students to upload audio recordings.

To reproduce:
Click on Lessons, then either choose Add Multimedia or Add Resource
Upload an mp3 file

Error message displays
Lesson BuilderLSNBLDR-120Comments tool displays a page or more of unrelated contentTested on - Sakai Revision: 114139 (Kernel 1.4.0-SNAPSHOT)- Server

Tested also on - tags/sakai-2.9.0-rc01 QA on Oracle - Built: 09/27/12 11:28 - Sakai tags/sakai-2.9.0-rc01 (Kernel 1.3.0-rc01)- Server qa3-us

To reproduce:

1) Add Lessons tool to a site
2) Choose "More Tools" -> "Add Comments Tool"

Results: Text editor box with two Submit buttons followed by a number of things including the text below, preceeded by the two Submit button comment entry and followed by a number of things which I've enclosed as screenshot page3.png, page4.png, page5.png, page6.png.

Page "2", text on page with Comment submission:

Require that the student submit this assessment.
Require that the student submit this assignment.
Require that the student submit a posting to this topic.
Require that the student use this item
Require that the student receive
points on this assessment.
points on this assignment.
Require that the student <b>Pass</b> this assignment
Require that the student receive at least a
Require that the student receive a Checkmark
Title must not be blank.
This must be a Youtube URL
Item Name must not be blank
Page Title must not be blank.
Edit Quiz
Edit Quiz Settings
Edit Assignment
Edit Forum Topic
Edit external tool
Number of pages must be a number
Title must contain a number
Site CSS
System CSS
Points must be set to a valid number.
The width and height must be positive numbers, i.e. "500" or "500px," or a percentage below 100%
You may not have a height or width larger than 100%.
Lesson BuilderLSNBLDR-24Allow subpages to be time released independently of their parent pages.Allow subpages to be time released independently of their parent pages. Currently the only way to time release content is to have each branch of material in a LB tool placement. This could get very unwieldy.


MailsenderMSND-60When an email has an attachment, a stracktrace is thrownClick here for more information.

Messages & Forums

Messages & ForumsMSGCNTR-403 Grading Forums - Easier way to view all messages from one person and enter grade in one screen, or view list of all users with counts of posts and grade entry boxMake grading by Forum/Topic easier
Messages & ForumsSAK-14081 The word count of the messages (threads) text in forums has to be evaluated and stored in the databaseStrip the html tags from the text and evaluate the word count for all the messages in the forums. Add an additional column in the table 'mfr_message_t', to store the word count of the messages.
Messages & ForumsMSGCNTR-516Catalan translation for sakai 2.9Updates to the catalan translation
Messages & ForumsMSGCNTR-6523.0 conversion scripts missing semicolonThe following statement is missing a semicolon in the 2.8 --> 3.0 conversion scripts (and incidentally the 2.9 sakai conversion scripts):

alter table MFR_TOPIC_T modify CONTEXT_ID varchar(255)
Messages & ForumsMSGCNTR-86Permission level names are not internationalizedCustomizing the permision levels in DF for instance by changing the owner permission to:

-- owner type
'00000000-0000-0000-1111-000000000000', 'admin',
SYSDATE(), 'admin', SYSDATE(),
'', 'sakai_messageforums',
'Manager Permission Level', 'Manager Permission Level', 'Manager
Permission Level');


-- owner permission level
null, 0, '00000000-0000-0000-0000-111111111111', SYSDATE(), 'admin',
SYSDATE(), 'admin',
'Manger', '00000000-0000-0000-1111-000000000000', 1, 1, 0, 1, 1, 1, 1,
1, 1, 1, 1, 1, 0, 1);

On gets the following errors:

1) roles are not mapped to the default permission level as defined in
2) setting a role to the permission produces errors in the UI.
Messages & ForumsMSGCNTR-109Display photo alongside name in Forums tool when viewing responses to threadLike Moodle, 'twould be good to have ones photo (from 'Profile') displayed in miniturised form alongside ones name in the Forums tool.

This would be on the page where one views responses to a posed topic, ie, next to

Re: TOPIC_HERE - Marshall, Adam (Jul 17, 2007 10:04 AM)

I leave it to the tool author to decide upon positioning!
Messages & ForumsMSGCNTR-683Performance issue due to duplicate forums iterated over in the DiscussionForumTool.getForums()In org.sakaiproject.tool.messageforums.DiscussionForumTool.getForums(), a List of DiscussionForum's called 'tempForums' gets populated with duplicates and soon gets iterated over:
for (DiscussionForum forum: tempForums) {

This loop has a nested loop that iterates over topics, so for some sites with lots of topics, the tempForums loop takes an excessive amounts of time often causing users to wait several minutes to do most actions within the forums tool. By removing duplicates (in java code), I've cut the loading time for a forum with 500 topics from ~1 minute to ~5 seconds.
Messages & ForumsMSGCNTR-711Search Content producer needs to implement PortalUrlEnabledProducerAs it returns real urls it needs to implement this method
Messages & ForumsMSGCNTR-426Page size incorrect with new CKEditorThe page size is doing the double window iframe issue when the page has the new CKEditor
Messages & ForumsMSGCNTR-231Ability to create Forum Topics/Forums based on groups.Private, group based discussions are a common use of Forums across institutions. Unfortunately the permissions that need to be configured for each Forum/Topic are complex and tedious.

To configure a private group Forum/Topic requires setting all student's (and any other group) permissions' set to none and then to set the specific group to be a contributor. These steps are multiplied by the number of groups. This is a relatively common task that is very complex.

Would it be possible to simplify the process to "create a group topic" that simply presented a list of existing groups/roles and then assumes all of these settings?

I appreciate your consideration.

--- Updated Wednesday June 16, 2010 - Denver Sakai Conference
Messages & ForumsMSGCNTR-529MSGCNTR-528 Add conditional descriptive text in entry page to guide usersThe entry page is where a site organizer (or similar role) structures the forum interaction. Although the auto-created default forum and topic are a help, we have found that users still need a bit of guidance. Propose to add help text/links that will the user in the following circumstances:

1. Default forum and topic
"Use Forum Settings and Topic Settings to change the title and other details of this forum.
New forums and topics can only be created by you or someone with your level of access.
Use Template Settings to set up a template for all new forums."

2. Childless forum
(displayed below childless forum) "You need to add at least one topic for the forum above to be active. <link>Create a topic?</link>"

3. No Forums (either defaults have not been created or all have been deleted)
"No forums have been created. <link>Create a forum?</link>"

4. All forums are draft
"Note: All forums are draft. Forums saved as drafts cannot be seen by all participants. "

5. All topics are draft
"Note: All topics are draft. Topics saved as drafts cannot be seen by all participants. "

6. No topics
"Note: You need to add at least one topic."
(displayed below childless forum) "You need to add at least one topic for the forum above to be active. <link>Create a topic?</link>"

7. All Forums or all topics are draft, or there is just forums (no topics). Stock MSGCNTR does not display a message to access user saying that no forums are available.
(displayed to access type user)"There may be forums that are not yet available for participation. Contact the site owner if you have questions about the status of a forum."

For reference to BRD: Req 1 "Add conditional descriptive text to guide users through topic creation"
Messages & ForumsMSGCNTR-555register Messages tool as group-aware when starting PermissionHelperThis is cloned from SAK-19819:

Permission helper will only show group options if invoked with "groupAware" attribute set to Boolean.TRUE
Messages & ForumsMSGCNTR-636More than 1000 topics in Forums causes Oracle failureWe're seeing an ORA-01795, which can be caused by any query that has IN (.....) list, in production.

Caused by: org.hibernate.exception.SQLGrammarException: could not execute query
at org.hibernate.exception.SQLStateConverter.convert(
at org.hibernate.exception.JDBCExceptionHelper.convert(
at org.hibernate.loader.Loader.doList(
at org.hibernate.loader.Loader.listIgnoreQueryCache(
at org.hibernate.loader.Loader.list(
at org.hibernate.loader.hql.QueryLoader.list(
at org.hibernate.hql.ast.QueryTranslatorImpl.list(
at org.hibernate.engine.query.HQLQueryPlan.performList(
at org.hibernate.impl.SessionImpl.list(
at org.hibernate.impl.QueryImpl.list(
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(
... 101 more
Caused by: java.sql.SQLSyntaxErrorException: ORA-01795: maximum number of expressions in a list is 1000

This can be traced back to line 677 of

This query needs to check for more than 1000 taskIds, and if so, break the query into several IN () statements, for example: ... IN (x,y,z) OR IN (x1, y1, z1) OR IN (x2, y2, z2) ...
Messages & ForumsMSGCNTR-647Create sequence statement missing from conversion scriptClick here for more information.
Messages & ForumsMSGCNTR-691NPE caused Forum messages not searchable under server-client search configClick here for more information.
Messages & ForumsMSGCNTR-524Strange behavior when grading forum postingsCreate a forum and topic. Link your topic to a gradebook item.
Make a post to the topic.
The grading behavior seems strange.
First, click on the topic and then "Display Entire Message". Click the "Grade" link for the message. A new browser window opens with the grading widget. If you then enter a grade and submit, the window refreshes with a success message and all of the form fields are empty.
Now try grading from the actual message view. The grading thickbox appears, but it is cut off and has a scrollbar. You are unable to scroll enough to use the buttons. See screenshot.

This occurs in both FF and Safari using Nightly - sakai/trunk on Oracle - Built: 06/21/11 12:00 - Sakai Revision: 93919.
PollsPOLL-151Catalan translation for sakai 2.9 (polls)Updates to the catalan translation.
PollsPOLL-137Accessibility: Polls tool brings up the FCKEdit instead of the CKEditorThe polls tool didn't switch over to the CKEditor on qa1-nl when the default WYSIWYG editor was set to the CKEditor.

To reproduce:
1. Log into qa1-nl
2. Verify other tools use CKEditor (go to add an assignment page and check the WYSIWYG editor)
3. Switch to the polls tool and go to the "Add a poll" page.
4. Check the WYSIWYG editor
 KERN-149Ability to set privacy settings on different parts of profileYou should be able to specify for each key in your profile file whether it's publicly visible or visible for your connections only.
Profile2PRFL-388 Allow user to create a worksite containing a selection of users from their connections[we decided to limit this to a user's connections and forget about search results for now]

[note: Sakai administrators should specify the default tool set required for sites of type "project" in toolOrder.xml and/or use with the wsetup.home.toolids properties (seeSakai 2.8 configuration)]

Allow user to create a worksite containing a selection of users from search matches. It seems to make sense to be able to select a number of hits from a connection search and just click a button to create a project site with those members. The site could be created and site invites (maybe including a connection request) could be sent out via emails containing a link signalling assent. A quartz job could periodically check for positive responses and add the user into the site.

Something like this would really enhance the research collaboration aspects of Sakai.
Profile2PRFL-7762.9 Oracle conversion script has an errorThis sql:
-- PRFL-612 add avatar image url column to uploaded and external image records
alter table PROFILE_IMAGES_T add RESOURCE_AVATAR varchar2(4000) not null;

Gives this error:
>[Error] Script lines: 701-703 ----------------------
ORA-01758: table must be empty to add mandatory (NOT NULL) column
Script line 703, statement line 2, column 13
Profile2PRFL-632Catalan translation for sakai 2.9 (profile2)Catalan translation updates for sakai
Profile2PRFL-695Update Spanish translations files in trunk, 1.5.xI can provide different patches or you can assign me the Jira to make the changes in

The goal is to have Profile2 fully translated to spanish in Sakai 2.9+
Profile2PRFL-730Searching on Common interest is case sensitiveWhen searching profiles, search term is case-sensitive and should be case-insensitive

Click on Profile -> Search
Select Common interest and enter a term you know will be found, but use a different case
Click Search - no results found

Now enter the same term in the correct case and click Search
Now results display


Searched on rollins because a couple of users had this as a favorite author
No results found
Entered Rollins and now I have results

Reset Password & Account Validation

Reset Password & Account ValidationRES-25Catalan translation for sakai 2.9 (reset-pass)Catalan translation updates for sakai
SamigoSAM-1236Catalan translation for sakai 2.9 (samigo)Updates for catalan bundles
SamigoSAM-15422.8 2.9 conversion for mysql missing ;there is a semicolon missing after the SAM-1255 update
SamigoSAM-1793Regresion: GradingService.validate no longer accepts , as a decimalAll UI documentation indicates that , is a valid numerical separator for numbers in numeric questions but as of 2.9 these are no longer accepted.

More seriously accessing the answers of a test where , was used by a student results in a UI error
SamigoSAM-1401"Delivery Date is not of correct format" is seen even if the date is in correct formatHere is how to reproduce:

1. Login to Sakai.
2. Without going to Assessment Settings page. Create an assessment and add some questions.
3. In Edit Assessment page, click on "Publish" link directly.
4. You will see an error asking you to select a retract date.
5. Select the date and click on "Save and Publish".
6. The error "Delivery Date is not of correct format: mm/dd/yyyy hh:mm:ss:aa." is seen.

Note: this error can only be seen if there is an error happens at step 4.
SamigoSAM-691Exported assessment does not want to import againExported an assessment, when trying to import it into another site, get error:

There was an error importing this assessment. Ensure that the file is correctly formatted IMS QTI. Error java.lang.RuntimeException: java.lang.RuntimeException: resourceId is null

Attach content package
SamigoSAM-822Timer does not continue to count down when 5 minutes popup window appears.Click here for more information.
SamigoSAM-998Audio recordings play automatically in Safari on Mac.This is reported by Stanford (CW-2708):

In Safari on a mac, if you go to the grading page to grading audio questions, all audio recordings play back at the same time, e.g. An instructor loads a grading page with 10 answers and all audio files play simultaneously.
SamigoSAM-1099Samigo uses old version of Apache PoiSamige uses poi-3.5-Final this version of poi is now more than 2 years old and there have been significant bug fixes and performance improvements. It seems the latest stable release (3.7) is compatible with Samigo
SamigoSAM-1232Accessibility: Many Question Types Marked-Up Entirely As a Level 5 HeadingThe entire markup for many question types as delivered in Test and Quizzes are the child of the level 5 heading that starts at the question number text. This might have been an accident, but if it was done to make the entire question appear in bold font it is inappropriate.

Some adaptive technologies include all of the child text as the heading; this means the JavaScript code that appears in the child script elements is also announced (see TQHeadingsListExample.png (attached)). Also, as the screen-reader user navigates through the parts of the question, each part is announced as a level 5 heading which is very distracting and adds to the chatter that they have to tune out when trying to decide what is the real content they need to pay attention to.


Only have the "Question x of y d.dd Points" part be the level 5 heading that precedes the question text. Use CSS as appropriate to keep the existing bold font styling.
SamigoSAM-1347Importing assessment with (large) attachments as ZIP file fails with error messageThis is reported by Stanford (CW-2812):

Steps to repro:
1. Create an assessment with at least one part, at least one question in the part, and at least one attachment for each part and question.
2. Export the assessment as a ZIP file.
3. Import the exported assessment.

Observe: Get error message on page: "There was an error importing this assessment. Ensure that the file is correctly formatted IMS QTI. "
Expect: No error, ZIP imported

Expected result:
UI change on student side
For File Upload question type:
-Change the limit to 100MB. There is slight change in wording "(Maximum file size: 100MB)". Please see attachment "StudentFileUploadModified.png". Please note, the limit (100MB) is set in the So it can be changed.

UI change on instructor side
-The current error message appears on the landing page (please see attachment "ImportErrorOriginal.png")
-The modified error message should appear on the Import Assessment page (please see attachment "ImportErrorModified.jpg")
-Text of error message: "<ZIP file name> could not be imported because there is a file size limit of 100MB per import."

-Please also change the instructional text to say "Choose an IMS QTI-compliant XML file or an IMS Content Packaging ZIP file from your computer."
(please see attachment "Import.jpg")
SamigoSAM-1435When a student is dropped from a site/course, s/he is still included in in-progress and submitted countsIf a student drops a course or is manually removed from a site, his or her attempts are still reflected in the submitted and in-progress counts shown for published assessments on the main Assessments screen. As a result, when the instructor access the total scores page, the number of students who have submitted will be < than the "submitted" account, which is concerning to instructors.

To reproduce.

1. Publish a new assessment.
2. Log in as a student and take the assessment.
3. Log in as instructor and note the submitted count is 1 and one student has a submission on the total scores page.
4. Now remove the student from the site.
5. Return to T&Q. Not that teh submitted count is still 1. However, when you click the link to go to the total scores page, no submissions are visible.
SamigoSAM-1429if instructor takes an assesment in student/access view, in-progress and/or submitted count is incrementedWhile in student/access view mode, if the instructor starts an assessment, this will cause it to count as an in-progress assessment. If the instructor submits in student view, the submission count is incremented by 1, which can be misleading. The in-progress and submitted counts shown on the main assessment screens should not include attempts made by the instructor in student view.

1) Create an assessment and publish it
2) Click on 'Enter student view'
3) Take the publish assessment and save an answer but do not hit submit
4) Logout and close browser
5) Go back into the course as the instructor
6) In T&SB it shows an In Progress of 1 now
7) Now return to student view and submit the assessment. The "Submitted" count us incremented by one on main assessments page.
SamigoSAM-1512problems with "show feedback" and "feedback immediate" on character "Hi

If we have a test configurated with "feedback inmediate" and it has a fill in blank question whose correct answer contains the character ", when student, during assessment, selects "show feedback" it always shows the wrong feedback because the question's correct answer has been stored with &quot; instead of character ".

The question text to reproduce this could be:

'How many fingers do you have in your hand? {"five"}'

Sometimes the question's correct answer that it's stored is &quot;five&quot;. When it happens, if student, during assessment, selects "show feedback" always gets the wrong feedback despite of writing the correct answer.

We think it is a bug. Thanks
SamigoSAM-1734Duplicated explanation for buttonsThe following explanation for buttons is duplicated:

Random access to questions from a Table of Contents. (There are "Next" and "Previous" buttons on each page for navigation.) (There are only "Next" buttons to go forward. There is NO Table of Contents page.)

in random_access of
SamigoSAM-1139Calculated questionsAt the moment the calculated question type is missing in Samigo, i.e. the ability to have questions which contains variables, a method of setting the range of those variables and the number of questions to be generated of that type.
eg. what is {x} + {y} where 0 < x < 100 and 0 < y < 50

i.e., integration with equation editors.
SamigoSAM-1257Move action labels to CommonMessages bundlesAt AuthorBean.getPendingSelectActionListX (X=Æ, 1, 2) methods I've seen that two properties bundles are used: AuthorMessages and CommonMessages. From my point of view, it would better if the AuthorMessages key would be moved to CommonMessages because that will ease translationa&updates and i18n testing. Additionally, all of them are related to actions (print, preview and so on), so they can probably general, which is the purpose of CommonMessages.
SamigoSAM-1278SAM-1277 Cleanup Javascript importsA Javascript import should just be:

<script type="text/javascript">

Some tags are just <script>. Others add the deprecated Language="JAvaScript". This patch cleans it up.
SamigoSAM-1620statistics do not show when random draw from pool is usedWhen an assessment involves random draw from pool, no statistics link shows. This is a problem. Both total score and score per question are still meaningful, although interpreting them is slightly different than if you're not using a random draw.
SamigoSAM-1130Emailing test takers in Chrome or Safari causes stacktraceThe feature that allows instructors to email test-takers in Tests & Quizzes causes a stacktrace in Chrome or Safari. To reproduce:

In Chrome or Safari, go to Tests and Quizzes and view the scores of a published test. (At least one user must complete the test first.)
Click on the "Email" link under one of the users' names.
Click "Send"

This will cause a stacktrace.

I did some poking around and found the problem is caused by the "clickEmailLink()" javascript function on the totalScores.jsp (and some other pages as well). The problem boils down to the fact that the script tries to submit a form and then also load a different web page in the same script. Firefox and Internet Explorer seem to be able to handle this, but Chrome and Safari won't. They'll either load the page or submit the form, but not both. In the current configuration, Chrome/Safari don't submit the form. Since the form isn't submitted, Sakai doesn't know who the recipient of the email is supposed to be. When it tries to send it, it finds a null email address which causes a stacktrace.

I tried to reshuffle the script to make it work in Chrome/Safari, but almost any changes caused the script to break in Firefox. Firefox would tend to stop navigating back to the totalScores page with any change. I'm not familiar enough with the inner workings of Tests and Quizzes to know what other solution to attempt.
SamigoSAM-1140NPE from mailerClick here for more information.
SamigoSAM-1237Show images attached when viewing printable versionShow images attached when viewing printable version, in this way, users can print the complete quizz with referenced images included.
SamigoSAM-1249Email feature in Submission Status sends feedback to wrong addressSee the following screencast:

If a user forgets to click send or cancel a previously started message and clicks on the Email link in Submission status, the previous addressee gets the message.

Observed on QA3 and on our Delaware production environment (Sakai 2.8.0 (Kernel 1.2.1))

UD Jira reference: UDSAKAI-433
SamigoSAM-1255Grading default should be that student's identities can be seen by gradersDuring the LA conference we had discussions after the SAMigo BoF about how anonymous grading is still the default OOTB for Samigo, which causes much instructor confusion.

I think may agreed that the default should be that student's identities can be seen by graders.

I'd be interested to hear use cases around why anonymous grading (something I perceive to be a bit of an edge case) should be the default OOTB.
SamigoSAM-1385Importing Tests from Site doesn't clear out "Release To" infoWhen you import tests from another site, the Release To information doesn't get cleared out and set to the current site. This prevents students from viewing the test if the test is published from the direct drop down "Publish" link.

To Reproduce:

1) Create 2 sites
2) 1st site: create a test with at least 1 question
3) 2nd site: import from 1st site (Site Info)
4) In dropdown, click publish and publish test
5) Become student in the 2nd site and notice the test doesn't show up
SamigoSAM-1398Default the "Release to" to Site if the imported assessment release to groupThis is similar to Here are how to reproduce the issue:

1. In site A, create an assessment and release it to groups.
2. Export that assessment.
3. In site B, import that assessment.
4. Go to the setting page of the imported assessment. You will see nothing is selected in the "Release To" section.

Desired behavior:
The "Release To" should be set to the site.
SamigoSAM-1555Anonymous setting still reveals some identifying infoI have a survey in Samigo which I set to anonymous, however when I go through and have a look at the answers in a response, I see at the bottom a link to email the person who submitted it, with their first name.
SamigoSAM-1779IE9: Student unable to record for audio questionUsing IE9, a student cannot record for an audio question.
Tested on both and

To reproduce:
As the instructor, create a test with an audio question
Publish the test

As the student, log in using IE9
Open the test and try to record for the audio question
SamigoSAM-1216HTTP Status 500 Error when downloading audio file from audio question in Tests & QuizzesClick here for more information.
SamigoSAM-1468Duplicate file name breaks donwload zipWe had a case where a student uploaded 2 files with the same name as part of an file upload question.

This causes the download zip to fail with an error:

011-11-10 15:37:56,013 ERROR TP-Processor236 - duplicate entry: Pretorius_Willem-petrus_prtwil005_IS2011B_PRTWIL005.accdb duplicate entry: Pretorius_Willem-petrus_prtwil005_IS2011B_PRTWIL005.accdb
at javax.servlet.http.HttpServlet.service(

1) the download all shouldn't assume the name us unique.
2) The catch needs to finer so that subsequent files get added to the zip
SamigoSAM-1641Float comparison errorsFindbugs identifies a number of places where floats are compared using ==

in the form:

data.getFinalScore() != originalFinalScore

Due to the way floats are represented in binary this could fail as no precision is specified.


use commons-math Precision.equals(Float 1, Float 2, Float eps)

The question is what degree of precision should we allow?
SamigoSAM-1841Calculated questions does not accept valid Formula, and doesn't report why, eitherI created this calculated question:

Two cars left from the same point at the same time, one traveling East at {x} mph and the other traveling South at {y} mph. In how many minutes will they be {z} miles apart? Round to the nearest minute.


For the abc formula, I used:

SQRT({z}^2/({x}^2+{y}^2)) * 60

The system rejects that, saying that it is missing a parenthesis. It isn't. When I adjusted it by removing the outermost pair of parens (just as a test even though I think that makes the calculation not work) the formula field was still pink, but there was no error explanation for why.
SamigoSAM-1905samigo / FCK editor question text always appears boldThe question text in samigo always appears in bold. If a instructor wants to place emphasis (by using bold) on a word or statement in the question it does not render properly on the student/preview assessment side. While creating the questions it appears that the text shows up properly. Using the headings of h4 or h5 also do not render properly. There is a notable difference when using h2 and h3.


1) Create an assessment
2) In the question text bold a choice word or small statement but not the entire question
3) Save the question - NOTE: it appears properly when creating the assessment.
4) Next preview the assessment / publish assessment and login as a student
5) The question is bold and the emphasis you placed in earlier is not noticeable
SamigoSAM-1234email command compromises anonymityWe set up a test to be graded anonymously, as part of a survey.

When grading, at the bottom of each test is a link "email ...." where .... is the name of the person submitting the test. This is a bad idea.
SamigoSAM-1393Timer starts even if the username and password is not correctThis is reported by IU:

1) Create a timed assessment using a username and password (under the high security in settings).
2) As a student attempt to take this assessment entering the incorrect username and password combination
3) Wait a few minutes and try step 2 again but this time use the correct username and password
4) Notice that the timer had already started prior to you accessing the assessment
SamigoSAM-1205SAMigo integration with Respondus LockDown BrowserSAMigo integration with locked browsers. Contributed by Respondus.
SamigoSAM-1440Samigo has some heavy queries when a user first enteres the tool, we need to make sure these queries limit by SITE_IDWe have identified the following Samigo queries when a user first clicks on the tool inside of a site. These queries are not limiting by SITE_ID and thus are pulling all published assessments, this is not scaling at all in our environment where we have thousdands of sites and tens of thousands of published assessments.

Here are the problem queries that we have identified:

select publishedf0_.ASSESSMENTID as col_0_0_, publishedf0_.FEEDBACKDELIVERY as col_1_0_, publishedf0_.FEEDBACKAUTHORING as col_2_0_, publishedf0_.EDITCOMPONENTS as col_3_0_, publishedf0_.SHOWQUESTIONTEXT as col_4_0_, publishedf0_.SHOWSTUDENTRESPONSE as col_5_0_, publishedf0_.SHOWCORRECTRESPONSE as col_6_0_, publishedf0_.SHOWSTUDENTSCORE as col_7_0_, publishedf0_.SHOWSTUDENTQUESTIONSCORE as col_8_0_, publishedf0_.SHOWQUESTIONLEVELFEEDBACK as col_9_0_, publishedf0_.SHOWSELECTIONLEVELFEEDBACK as col_10_0_, publishedf0_.SHOWGRADERCOMMENTS as col_11_0_, publishedf0_.SHOWSTATISTICS as col_12_0_ from SAM_PUBLISHEDFEEDBACK_T publishedf0_

select assessment0_.PUBLISHEDASSESSMENTID as col_0_0_, count(assessment0_.ASSESSMENTGRADINGID) as col_1_0_ from SAM_ASSESSMENTGRADING_T assessment0_ group by assessment0_.PUBLISHEDASSESSMENTID

select publisheds0_.ASSESSMENTID as col_0_0_ from SAM_PUBLISHEDSECTION_T publisheds0_, SAM_PUBLISHEDSECTIONMETADATA_T publisheds1_ where publisheds0_.SECTIONID=publisheds1_.SECTIONID and publisheds1_.LABEL='AUTHOR_TYPE' and publisheds1_.ENTRY='2' group by publisheds0_.ASSESSMENTID
SamigoSAM-1120Audio Files in Assignments get cut off when played in Firefox/QuicktimeThis is reported by Stanford (CW-2740):

There has been a longstanding issue with Firefox cutting off playback of audio recording files (.au). I just got a ticket from Ken Romeo, reporting that he had students upload mp3 files using the File Upload question type. These files also experience the same problem as the audio recording files, in that they play for a few seconds then get cut off when using the Firefox browser.
SamigoSAM-1259Bad concatenation procedureJean-François Levêque has found some issues related with concatenating strings to make a complete UI message:
samigo-app/src/webapp/jsf/author/publishAssessment.jsp has:
<h:outputText value="#{assessmentSettingsMessages.cancel_message_1}
#{assessmentSettingsMessages.cancel_message_3}" escape="false"/>
SamigoSAM-1835Student able to submit second assessment after due dateThe setting for late submissions accepted states that late submissions will only be allowed for students who do not have a prior submission:

Late submissions WILL be accepted after the due date. However, this applies only to students who have not submitted their work prior to the due date. They will be given one chance to do so and their submission will be tagged as late.

Currently, with this option checked and a due date, students can submit another submission after the due date even if they have a previous submission.

To reproduce:
Create an assessment with a due date, 2 submissions and Late allowed
Publish the assessment

As the student, take and submit the assessment before the due date
Before the due date, start the test a second time
Leave the test open until the due date passes
After the due date has passed, submit the assessment

Student is allowed to submit even though it is after the due date and one submission was already made before the due date.
SamigoSAM-925NPE occurs in DeliveryBean.timeExpiredClick here for more information.
SamigoSAM-1828Unexpected Error with Partial Credit with Multiple ChoiceClick here for more information.
SamigoSAM-1693NPE exporting to spreadsheetSeen in production:

caused by: java.lang.NullPointerException
at org.sakaiproject.tool.assessment.ui.bean.evaluation.ExportResponsesBean.getSpreadsheetData(
at org.sakaiproject.tool.assessment.ui.bean.evaluation.ExportResponsesBean.exportExcel(
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(
at sun.reflect.DelegatingMethodAccessorImpl.invoke(
SamigoSAM-787Incorrect internationalization in survey questions1) Select language to english.
2) In any assessment add a question of survey type. Select Answer: Disagree, Agree.
3) Change the language (for example spanish)
4) Edit the above assessment. You can see the answer with values: Disagree, Agree instead of En desacuerdo, de acuerdo witch is the same in spanish.
SamigoSAM-2004sam.assesment.remove logged with null contextWhen a working copy is deleted a null context is passed to the event service:

| 455106270 | 2012-11-04 09:20:26 | sam.assessment.remove | assessmentId=13953 | ~vula2a~dhorwitz | m | NULL |
SamigoSAM-1783Unable to record in IE9 or FFOn, I tried to record an audio question, both on IE9 and FF9. IE9 will NOT allow me to record, but no errors pop up.

On FF9, I did receive an error and am wondering if this may be part of the problem in SAM-1779.

I'm uploading a screenshot of the error which displays on nightly2, (which does not appear when recording using FF on 2.9 b07).

To reproduce:
Create a test with an audio question and publish it

As the student, begin the test, click on 'Click to record your answer...'
Click the 'Record' button in the pop-up
SearchSRCH-53Catalan translation for sakai 2.9 (search)Updates the catalan bundless
AdminX and AdminLite
Contrib: AdminX and AdminLiteADMX-11update the pom.xml files to make adminlite compile with recent 2.9+ sakai codeThis is to update the group id of several project, e.g. velocity, courier, etc inside the pom.xml.

Big Blue Button

Contrib: Big Blue ButtonBBB-88Email link to a meeting will always show status unavailableThis was tested on 1.0.7-rc2

I created a project site (BBB demo for Walsh), added Meetings, created a meeting, invited sean.

The BBB notification email is below. After I started the meeting, sean clicked on the link which is supposed to take him to the meeting. he logged into Sakai and went to the correct project site and meetings tool, but the meeting which was in progress for me was listed as unavailable to him. See screen cap "from email link".

If he clicked into the project site, navigated to meetings and clicked on the meeting, it showed as available. See screen cap "same session directly"

So it looks like email notification links don't work but you have to log into Sakai and navigate to the meeting.


Contrib: BlogWowBW-126Create a BlogWow 1.1.0 tied to Sakai 2.9-SNAPSHOTPoms need to be modified to build against Sakai 2.9
Contrib: BlogWowBW-131Blogwow tool fails to startup in sakai 2.9.x due to missing jarread the comments in EVALSYS-1170 to understand the issue. The spring jar is no longer in shared after 2.9, so you must include it in your war file
Contrib: DashboardDASH-230generate a build profile to make trunk dashboard code build-able with Sakai 2.9There is some compile problem with current dashboard trunk code and sakai 2.9.x code base. Need to add a build profile to support 2.9 build
Contrib: DashboardDASH-246change the Dashboard 1.0.x pom.xml files to use Sakai 2.9-SNAPSHOT versionThe Dashboard 1.0.x branch now refers to Sakai 2.10-SNAPSHOT. We agreed to have it point to Sakai 2.9-SNAPSHOT and create new tag after merging recent fixes. Hence Sakai 2.9 users can download the new Dashboard tag without pom.xml modifications.
Contrib: DashboardDASH-231dashboard build problem with Sakai trunk code after purepom changesDue to some recent Sakai trunk change related to purepoms, the Dashboard trunk can no longer build with Sakai 2.10 trunk.

Here is the explanation from Matthew Jones:

"Quick summary:
- If you have an indie, switch parent from purepoms to master. If you have some apis dependencies inherited through compile scope, these might be overridden by dependencyManagement in master so you may need to define more dependencies.

2) Purepoms were removed from 2.9 and trunk after 2.9.0-b03 a few months ago. If your contrib tool still uses a purepoms for 2.9 or 2.10 snapshot it will no longer be able to find these artifacts. ( Old artifacts for 2.9-SNAPSHOT and 2.10-SNAPSHOT were in These artifacts were up to 5 months old. We had changed to deploying all artifacts releases and snapshots to maven central/sonatype, so if your tool had this repository defined you need to update it.

Ideally your tool can use a fixed release version of 2.9 (like 2.9.0-b05). That would be ideally what your parent looks like:
You can use the version 2.9-SNAPSHOT which is in the repository, but 2.10-SNAPSHOT currently would require your users to download and build sakai-trunk-all to use. (As mentioned in Step #1)

It was also noticed that some projects had dependencies defined in their "api's" with no scope defined (so it got compile) and when the api was a dependency in something else (like the impl or the tool) those other dependencies would be pulled in as transisitive dependencies. However, since all api's are now defined in the master dependencyManagement as "provided", your tools dependencies may have to have these api's explicitly defined.


Say you're the dashboard project and you used to inherit from purepoms. Switching to master alone will cause some dependencies to not be found. This is because in the dashboard-api there is:

After switching to master, this scope becomes "provided" instead of "compile" as it isn't defined here, and it won't work when you include it in impl. So you'd need to define these as provided in impl.

Evaluation System

Contrib: Evaluation SystemEVALSYS-1170Evaluation tool fails to startup in sakai 2.9.x due to missing jarIn sakai 2.9.x, the spring-webmvc jar is no longer deployed to shared, and RSF depends on that jar being available. For 2.9 and later, evaluation-tool war needs to include the spring-webmvc jar.
Contrib: Evaluation SystemEVALSYS-1151Pom issues in 1.4 evaluationtag 1.4.0-B01The current evaluation 1.4.0-B01 tag has a couple of issues:

There is no profile for sakai 2.9.
The evaluation dependencies in the poms are for the 1.3 version of Evaluation.
Contrib: Evaluation SystemEVALSYS-1208Admin Search Feature displays nothingAdmin Search feature appears to be broke -- how to reproduce:
1) Select Administrate
2) Select Search
3) empty page is displayed

Nothing is displayed in logs as far as I can see

Sakai Kaltura Extension

Contrib: Sakai Kaltura ExtensionSKE-35Add support for HTML5 playback of mediaNeed to add support for the Kaltura HTML5 compatible player (which does not use flash). The flash player will be used by default when flash is supported but the kaltura player will be used otherwise.
Contrib: TextbookTXB-222textbook trunk is not compilable with Sakai 2.9 code baseI tried to compile tbook trunk with sakai 2.9.x, and got the following error:

[INFO] -------------------------------------------------------------
[INFO] -------------------------------------------------------------
[ERROR] /Users/zqian/dev_29x/sakai/tbook/impl/src/test/org/sakaiproject/tbook/logic/test/stubs/[28,7] org.sakaiproject.tbook.logic.test.stubs.FakeUser is not abstract and does not override abstract method getModifiedDate() in org.sakaiproject.user.api.User
[ERROR] /Users/zqian/dev_29x/sakai/tbook/impl/src/test/org/sakaiproject/tbook/logic/test/stubs/[40,7] org.sakaiproject.tbook.logic.test.stubs.FakeSite is not abstract and does not override abstract method setSoftlyDeleted(boolean) in
[INFO] 2 errors
[INFO] -------------------------------------------------------------


RSFRSF-3Release RSF 0.7.6 to provide support for site languageSakaiRSF 0.7.5 has not supported site language in Sakai 2.9.
Currently, it is reported as a issue via SAK-22392 and LSNBLDR-94.

SakaiRSF 0.7.6 will resolve those issues by the fix of .
So, could you release it?


SakaiSAK-19964 Gradebook drop highest and/or lowest to keep highest grade for studentAdd keep highest, drop highest/lowest feature to gradebook
SakaiSAK-20118Build a new portal for Sakai 2.9Generate a pdf from the Gradebook for printing
SakaiSAK-19813 Build a new portal for Sakai 2.9Build a new portal for Sakai 2.9 while retaining the current portal. Make it possible to stay with the current portal with a mer property change. Take inspiration from the OAE design experience as well as other LMS products.

This is a high-level JIRA and the task will evolve over the next six months as design ideas are proposed, prototyped, and adjusted.
SakaiSAK-22236 Update default skinRutger's new skin for 2.9 is the inspiration for this new update.
SakaiSAK-8589Ability to upload a zip file containing documents and grades for a particular assignment - the reverse of the current Download All featureSee attachment on this page: SAK-8589 - Getting issue details... STATUS
SakaiSAK-800 Upload, download and extract Zip archive files in Sakai Resources ToolIn situations where WavDAV cannot be used to manage resources, it would be useful if a number of files and folders could be uploaded and downloaded into/from the Resources tool using archive files (e.g., .zip, .gz, .sit). The zip archive would then be extracted automatically on the server, resulting in the addition of the files and folders that constituted the contents of the zip archive. If one wanted to download a collection of files and/or folders, then one could go through a picking process, select the desired items, choose the type of archive, and then download it.
SakaiSAK-22392 Changing language in course site when refreshed in SiteSet site language to French France. Enter site Info tool (Information du site), click on 'page order' (ordre des pages) and then click the refresh button and the language changes to English for all items within this tool.
SakaiSAK-3186 Add dynamic language support and add language (locale) choice to user preferencesCurrently Sakai can support only one language locale, statically configured at system startup. There is great demand (e.g. Europe, Canada) for the ability to dynamically display different languages from the same Sakai instance. I've attached a document describing the functionality and design.
SakaiSAK-21183QuickPublish option for sitesAllow the '! Unpublished Site' badge that is shown at the top of the tool menu to be a link so that when the instructor clicks on it, the course gets published. 

We've inserted this link with xsl-portal and I've attached a screenshot of what it looks like. 

At it's most basic, the js that makes this work is: 

function publishSite(siteId) { 
    var reqUrl = '/direct/batch?_refs=/direct/site/'+siteId+'/edit&_method=PUT'; 
    var resp = $.ajax({ 
      type: 'POST', 
      data: 'published=true', 
      url: reqUrl, 
      success: function() { location.reload(); } 
SakaiSAK-21201SAK-17880 Set CKEditor as default for 2.9 releaseFollowing TCC vote, the CKEditor has been chosen as the default rich text editor for the 2.9 release. This needs to be set as the default in the config module as well as the EditorRegistry in portal.
SakaiSAK-20713Provide 2.9 compatible set of example skins2.9 Neo portal is temporarily hardwired to a skin in portal for development. Provide a set of example skins analogous to the ones in the standard portal for the Neo Portal. Then the Neo portal can be modified to participate in skin selection.

The neo portal will add a prefix to the site skin of "neo-" - so the too.css URL when the neo portal is in effect will be


If you make a site skin "engineering" the path under neo will be


And if you go back to the old portal the URL will be:


This way, if you install 2.9 and set the portal back to the old templates, you do not have to move your skins at all. If you want to use neo, you need new skins with the "neo-" prefix for each skin.

There is also a new property (yay) to allow you to change the prefix that is added to the skin name to be something other than "neo-":


As an example, you might want to put all the neo skins in a subfolder - so you would change the prefix to be

SakaiSAK-20612 Allow closing section info tool until a release dateOur instructors want to able to close section join until to a release date. In this way, student won't be able to join to a section until that date happens.
SakaiSAK-21564Clean up POMs for 2.9Upon discussion with various institutions and SCAs, the decision has been taken by the CLE team to flatten the POM hierarchy for the tools within the CLE release. Combined with work such as SAK-21389, SAK-21397, and KNL-861, this is expected to help rationalize the release process.

There is substantial rationale and there are various suggestions (to be detailed here and in Confluence), but the first step is to re-parent all tools in the release to master. This should have very little impact on the the tool POMs other than allowing significant duplication to be removed (repositories, dependencyManagement, and plugin configuration).

Other likely steps include:
1. Splitting materials to differentiate between the "corporate POM" (used to set base organization and configuration information) and the actual version/dependency management -- both are in master now, forcing configuration like source layout on projects wishing to simply defer version management.
2. Using POM imports to include dependencyManagement sections across projects without inheriting or forcing shared items into master.
3. Setting up "dependency aggregation" POMs for the most common/useful sets of dependencies. These can be added as a simple dependency that transitively includes others. The best example is an analogue to sakai-edu-tool, where a single dependency could provide compile-time support for all of the modules covered by purepoms.

-- more to come here --
SakaiSAK-21160SAK-21135 Sakai 2.9 Schedule Accessibility ReviewPerform an accessibility review of the Schedule tool as released in Sakai 2.9
SakaiSAK-22783SAK-22707 Unify applicationContext.xml files in gradebook 2.9Two different applicationContext.xml files are present in gradebook. They startup order is not defined so either may be chosen when Sakai starts up. For the 2.9 release they will be merged to be identical. For 2.10 one should be eliminated.
SakaiSAK-21136SAK-21135 Sakai 2.9 Home Tool Accessibility ReviewPerform an accessibility review of the Sakai 2.9 release's home tool.
SakaiSAK-21859add shortened url properties to 2.8 and 2.9 branchesadd shortened url properties to 2.8 and 2.9 branches. These are only present in trunk but the tool is available since 2.8 so the default properties in both 2.8 and 2.9 need to be updated.
SakaiSAK-213282.9 portal chat doesn't seem to keep users upI connected to a site from two browsers with different users, one the site owner and the other Access. New users show in "in this site" for about 30 sec and then disappear. Is this expected?

I also had Sakai Administrator show in my site for 30 sec. Unless someone else was logged in as admin, I don't think that's real.
SakaiSAK-20669Add catalan translation for 2.9Catalan translation for trunk
SakaiSAK-21138SAK-21135 Sakai 2.9 Assignments Accessibility ReviewPerform an accessibility review of the Assignments Tool
SakaiSAK-21137SAK-21135 Sakai 2.9 Announcements Tool Accessibility ReviewPerform an accessibility review of the announcements tool.
SakaiSAK-22667Synoptic Announcements ordering issuesBoth in 2.8 and 2.9 trunk.

Announcements in the Synoptic center are not being displayed in a chronological order. In 2.8 we see messages are being grouped by sites and in 2.9 the order seems random (message from 12.58 is above message from 12.59)
SakaiSAK-22444Edit tools no longer highlighting when adding tools (regression from 2.8)On 2.8 (and likely before) when tools were added with Edit Tools, a span highlight were added around tools that were added. The text even indicated that the tools added were highlighted. However in 2.9 and trunk there is no longer the span added no highlighting for newly added tools, they look the same as tools that exist in the site. So something was lost between 2.8 and 2.9 somewhere.

Tested on nightly and (doesn't work) as well as 2.8.x instance (works).
SakaiSAK-20544problem of returning to Site Info default view in new neo portalUpdate: The current plan is to disable this and mark as as "experimental" for both 2.9 and trunk.

The new neo portal introduced a "Add Tool" link at the bottom of tool navigation panel. Click on it, it would direct user to Edit Tools page.

Refresh the page to return to Site Info list view (default view).

Choose Edit Site Information, save change and finish.

The page refreshes, but show the Edit Tools view.
SakaiSAK-21224When adding a portfolio template, the numbers are missing from the stepsChecked 2.8.1 and 2.9 - neither version has the #s for the 'Steps' when adding a portfolio template.

To duplicate:
1) Click Portfolio Templates from the menu
2) Click Add

Only 'Step' displays

This version, 2.7.2 contains the 'Step # of #' when adding a portfolio template.
LocalSakaiName - RELEASE - Sakai 2.7.2 - Server localhost
SakaiSAK-21664Please add lesson builder name to tools_es.propertiesPlease add lesson builder to I'd appreciate doing it in both 2.8.x and 2.9.

I believe the correct name is "Lecci\u00F3nes".
SakaiSAK-22331Activate short urls for resources by defaultAs per

Short urls for resources will be enabled by default including the randomised URL shortener.
SakaiSAK-21648100% fr_FR translation for portalPlease merge this translation back into 2.9 and 2.8.

If the subversion merge fails, please replace the old file with the new one from trunk.
SakaiSAK-21251Modify configuration option to enable/disable neoportal chat to default to falseThe new chat functionality deployed with the Sakai 2.9 neoportal needs to be configurably enabled/disabled, with the default option disabled. The property (already defined) is:
SakaiSAK-21024Gradebook 1.0 All Grades Row Alignment Issue in Select BrowsersISSUE: When there is a long name in the gradebook (version 1.0), the name field will wrap to a second line, but the corresponding grade row for the student does not expand in kind in Internet Explorer (and some also report issues with Firefox 5.0 on PC). Therefore, the gradebook table is out of alignment as the professor scrolls down the list of names.

It looks like this issue had been addressed in the past (?) but is back or some other change may have overwritten the specific fix?

Sakai Environments:
Can reproduce this issue on our local Sakai 2.8.1 instance as well as the nightly 2.9 server (

Client Operating Systems:
Windows Vista
Windows 7 32-bit
Windows 7 64-bit (IE 8 32-bit, IE 8 64-bit, IE 9)

Client Browsers (with issues):
Internet Explorer 9 (32-bit on Windows 7 - compatibility view off): Yes -- seeing the problem
Internet Explorer 9 (32-bit on Windows 7 - compatibility view on): Yes -- seeing the problem
Internet Explorer 8 (64-bit on Windows 7 64-bit - compatibility view off): Yes -- seeing the problem
Internet Explorer 8 (64-bit on Windows 7 64-bit - compatibility view on): Yes -- seeing the problem
Firefox 5.0.x (Windows Vista): a reliable info systems faculty member reports the issue; we don't have other Vista systems to test
Firefox 5.0.x (Windows 7 32-bit): Mixed results; a reliable support staff member reports the display issue, our tests on other system so far cannot replicate

Client Browsers (gradebook displays fine):
Firefox 5.0.x (Windows 7 32-bit): Mixed results; a reliable support staff member reports the display issue, our tests on other system so far cannot replicate
Firefox 3.6.x (Windows 7 32-bit): no issue (the gradebook rows expand properly)
Safari 5.1 (Windows 7 32-bit): no issue (the gradebook rows expand properly)
Chrome Beta Channel (Windows 7 32-bit): no issue (gradebook rows expand properly)
Firefox 5.0.1 (Mac 10.6): no issue (gradebook rows expand properly)
Safari 5.1 (Mac 10.6): no issue (gradebook rows expand properly)

See screenshots for how the problem appears in the Gradebook in Internet Explorer 8.0 on Windows 7 64-bit. Same behavior happens in IE9, too.

Thank you for addressing this "All Grades" display issue.
SakaiSAK-20089Require Java 1.6This is a parent issue to track the work for requiring Java 1.6 in Sakai 2.9.

From the list:

2.8: recommend 1.6 - code compiles in 1.5
2.9: require 1.6 - no guarantee that code will compile/run in 1.5

If we want to drop 1.5 then we need to make sure that the
code compiles after adjusting Maven's compiler plugin
settings from 1.5 to 1.6. Last time I checked (early
December) the kernel failed to build due to an issue with
kernel util's due to "unmappable character
for encoding UTF-8 (53 cases)."

Yep lets get any required modifications committed into trunk, and enforce 1.6 as soon as possible so we can iron anything out early.

Let's make this a 2.9 blocker and work on this at least as soon as 2.8.0 is released.
SakaiSAK-21517Site Info group helper accepts empty site titleCreate a group in adhoc groups with the title " " (1 empty space)

Sakai 2.8 and before: group is saved
2.9 and later a stack trace is thrown from the kernel about an empty name

Solution:the group helper should trim the imput before checking if a value has been entered
SakaiSAK-21842Port CKEditor support to 2.7.xThere is some desire to run CKEditor with CLE 2.7.x. This functionality should not be committed to the maintenance branches, but could be used from feature branches. Ideally, those wanting this functionality would upgrade to 2.8 or 2.9, where it is already present, but this may not be possible for local reasons.
SakaiSAK-22179Release Sakai 2.8.2This will track everything for the 2.8.2 release.

Release process:

Release order:

The above release order is being reviewed and condensed onto the 2.8.2 release page above.
SakaiSAK-21369Create compatibility patch for IE10We decided on the email list that issues relating to IE9 should attempted to be fixed for Sakai 2.9. The best fix for this seems like it would be to set compatiblity mode to IE9 so that when IE10 comes out we're at least ready for that.
SakaiSAK-22709Possible NPE in GradebookServiceHibernateImplSeen when calling code in a custom entityProvider:

2012-10-02 14:52:20,614 INFO TP-Processor3 - entityExists(fe7927a0-ae7b-416a-adea-f6ceb5640e62)
at org.sakaiproject.component.gradebook.GradebookServiceHibernateImpl.fixingPointsEarned(
at org.sakaiproject.component.gradebook.GradebookServiceHibernateImpl.getTotalPointsEarnedInternalFixing(
at org.sakaiprojec

In edu-services 1.1.6 (2.8.2) though code analysis shows its still present in trunk and 2.9

if(gradeMap != null)
Double rightPercent = gradeMap.getValue(letterGrade);
BigDecimal rightPercentBD = new BigDecimal(rightPercent);

If gradeMap.getValue(letterGrade); returns null this will NPE
SakaiSAK-22288Move trunk Portal, Skin, Tutorial Tool into the 2-9-x branchAt the TCC meeting in Atlanta, we decided to move the current trunk of portal into the 2-9-x branch to get the new skin as well as all of the fixes to many JIRAs. Of course there is some likelihood of regression so this will require special vigilance in QA for the 2.9 tag that incorporates the new trunk of portal.

Things to watch:

- CSS tweaks need to be verified as to not having regressions

- Another accessibility pass would be nice - I don't think there are too many accessibility regressions

- Tools functioning in the PDA portal since the inlining algorithm has been adjusted

We need a dev test pass and then some focused QA once the branch is moved into 2-9-x.
SakaiSAK-21165please add a pattern to the PDA portal exception listPlease add the pattern /uvbview$ to the list of URLs that the PDA portal should pass through unchanged. This URL is created by the Ajax feature in RSF. As far as I can tell, all users of RSF's built-in Ajax support will match this pattern. Without this change, RSF's Ajax calls do not work when the PDA portal is in use. (More realistically, we have to ask all sites to add a property to

This is a problem for version 1.4 of Lesson Builder, but could come up in any tool using RSF. UVBProducer, which produces this URL, is referred to in Assignment 2, Evaluation, Gradebook, and Lesson Builder. However I haven't tested the applications other than Lesson Builder to see whether it's actually an issue and this pattern actually fixes them.

Since 2.8.1 is intended to be friendly to Lesson Builder, it would be useful to retrofit this to 2.8.1, as well as trunk and 2.9.
SakaiSAK-19760SAK-19083 Review the order of styles and scripts in the portal (portalstyles.css portal.css)There are a number of Web Page performance optimizations recommendations via Chromes Developer tools. One of the critical recommendations is to optimize the order of styles and scripts. This allows parallelization of downloads by the web browser.


If the optimization is just a question of re-ordering a Velocity template then it is well worth the effort. If not this Jira can be considered documentation for the Sakai 2.9 life cycle.

Doing some really rough maths.
50 ms saved per page x 3,000,000 users x 20 (logins) x 50 pages ~ 42,000 hours saved per year.

Generated by Chrome - Developer tools - Audit

The following external CSS files were included after an external JavaScript file in the document head. To ensure CSS files are downloaded in parallel, always include external CSS before external JavaScript.

SakaiSAK-20843Prep portal for off-cycle releasesIn order to perform off-cycle releases of OSP and other major CLE capabilities, a number of CLE projects that OSP is either directly or transitively dependent upon will also need to be prepped for off-cycle releases so that SNAPSHOT dependencies can be eliminated prior to performing an OSP release. Portal is one such project.

Both OSP (osp/xsltcharon, osp/portal) and Metaobj (tool & util -> portal-api) are dependent on the portal.  Leaving aside the issue of moving osp's portal stuff to the portal project (which has been suggested in the past), I would like to make the following changes to the portal trunk poms:

1. Change the <groupId> to org.sakaiproject.portal.  Portal coordinates will adhere to the pattern adopted for other indies, which is reflective of broader Maven naming practices including that practiced by Apache.  <artifactId> and <version> would not be changed.  It's also easier to debug/review binaries in the repo (either local or remote) when they all can be found in


then the current scattered arrangement of


3. Set up portal so that we can deploy binaries to the snapshot repo. Basically boilerplate additions to the base pom. Add <distributionManagement>, <repositories>, <pluginRepositories> and <reporting> declarations to base pom. Update the current Jenkins job to deploy snapshot updates.

4. Add an assembly which provides a Tomcat-overlay zip of LB. As I noted in LA we will not substitute an assembly for a full source check out of Sakai trunk but the assemblies have proven quite useful to msub deployers such as Steve Swinsburg. Plus, if we ever get the app store concept going a zip of portal binaries will prove quite useful. Again, this code, a pom file and deploy.xml is largely boilerplate. It takes about 10 minutes to write.

5. Set up portal to use the release plugin. Involves swapping out the master pom for the purepom like other indies. We have 2.6, 2.7, 2.8, 2.9 versions of purepoms. I expect that portal will benefit from use of the release plugin (which the purepoms provide) given the advent of the new neo portal.  The release plugin, as you know, provides the ability to generate off-cycle releases in a simple, nay trivial manner.

6. Tidy up the poms. For example, substitute standard Maven variables such as ${project.groupId} and ${project.version} where appropriate for portal's own "internal" dependencies.

7. Portal is bundling up a copy of the portlet-api-1.0.jar (available in /shared/lib) in the following *.wars. Include portlet-api in <dependencyManagement> and adjust the <scope> to "provided" in order to eliminate bundling up the jar in the *.war files.


8. Update portal dependency declarations in other projects: master, metaobj and OSP.

9. Implement any necessary build profiles. As discussed in LA one change we intend to make for 2.9+ is to perform API releases independently and ahead of tool releases. In the case of portal, sometime after code freeze we would release the portal apis.  In order to do this I envision replacing the api's current <parent> with a purepom-like "sakai api" pom that will be released first so that a portal api release can actually be performed (currently, you can't do a release of an api that has a snapshot dependency on its own project base pom). Ideally, once we hit code freeze, we release the kernel apis, then all the tool apis. We should then be able to better reflect version-wise the actual steady state of most project apis.  We'll need some additional build profiles to better segregate releasing apis and then everything else.

The lead portal comitter, Chuck Severance, supports this effort.
SakaiSAK-18654Forms : problem with date format when editing the date field with jsf date widget if your locale is fr_FR, don't test the format date for europen locale param.context : If your locale is fr_FR
when you want to use the date widget to add a new date in a OSP form , if you click on the date widget icon, the date format wich is returned is always mm/dd/yyyy even if you want an other format like dd/mm/yyyy.
I found that the calendar2.js is always called, regardless of the local parameter.

I think that the problem is in the file :
in version 2.6x, line 171: we find
if (format.getLocaleDateFormat() == DateWidgetFormat.DD_MM_YYYY())

after having modify with:
if (format.getLocaleDateFormat().equals(DateWidgetFormat.DD_MM_YYYY()))
the format detection is correct and the good : calendar1.js is called for europeens (fr_FR, es, nl etc..)
SakaiSAK-18952Web services for SamigoAdd web services to interact with Samigo.
SakaiSAK-19847problem in error workflow in adding rosters in Site infoClick here for more information.
SakaiSAK-19909ical files are invalid if an event description contains a newlineI exported an ical file from Sakai and ran it through:

I got the following error:

Error: Error was: Error at line 254: Illegal property [SARAH]
Cause: Caused by: Illegal property [SARAH]
Context for line 254:
251: UID:98ad7fcc-c63d-47f7-aeda-c68422302cd8
252: DESCRIPTION:Timetable for the induction is attached but may change. A har
253: d copy will be available in your induction packs on the 5th October. Sarah
255: ORGANIZER:CN=Sarah%20Norman defines what should appear in organizer field - it should be a URI
SakaiSAK-20674Parse OpenURL requests to add book to reading listEnhance the citation helper to allow it to parse citation addition requests in a similar way to the Google Schoolar integration that exists at the moment. - OpenURL specification.
Sir Louie project:
SakaiSAK-20801sendTemplateUseNotification has institution specific data in the email that is sent when a site is created from a templateThe sendTemplateUseNotification method in SiteAction is called when a site is created from a template, and sends an email to the tempalte owner. However the email contains information that is institution specific:

buf.append("Alliance Team\n");

It just so happens that we (ANU) contributed this feature in SAK-12868, however it has not been converted over to the email template service so this issue remains.

This line should be removed, but ideally this should be converted to use email template service like the rest of the emails in Site Manage.
SakaiSAK-20958config.extraPlugins seems to have stopped loadingThe ckeditor config.extraPlugins doesn´t appear to be loading plugins. I used the new feature, "wysiwyg.editor=ckeditor" to load the ckeditor, but as I try to load the wiris plugin, nothing is loaded. I´ve inspected the stack at that point and the plugin name is being provided correctly, but does not load the external js n such.


Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.html or

CKEDITOR.editorConfig = function( config )
// Add WIRIS to the plugin list
config.extraPlugins += (config.extraPlugins.length == 0 ? '' : ',') + 'ckeditor_wiris';

// Add WIRIS buttons to the "Full toolbar"
// Optionally, you can remove the following line and follow
config.toolbar_Full.push(['ckeditor_wiris_formulaEditor', 'ckeditor_wiris_CAS']);
SakaiSAK-20957Users deleted from the system throw errors in the logsIf you create a user, add them to a site then delete them from the system via the Admin Users tool, then go to the site you will get:

2011-08-02 13:54:33,838 WARN http-8081-Processor22 - SiteParticipantHelper.prepareParticipants: user not defined b52ec79d-940d-4124-9f21-29092796616c

The same thing for external users (i.e. from LDAP)
SakaiSAK-21110Remove cacheTTL code from JLDAP provider as it has no bearing in the JLDAP cacheSteps to replicate:

1) Set a very high cacheTTL in jldap-beans.xml
2) Start sakai
3) Go to memory tool
4) Look for JLDAP cache and notice TTL is still set to default 300
SakaiSAK-21407 Allow import of group membership from CSV fileThis is a patch to add an Import from file option in the Group Membership page of Site Info to take CSV of group membership. If the group exists (match on title) the users are added. If the group does not exist, it is created and the users added. The users must first exist in the site they are being added to.

This work was completed on behalf of Ultraline Technologies (
SakaiSAK-21303Internal variable names are displayed.When no realms match the search condition, "$topMsgPos - $btmMsgPos of $allMsgNumber" is displayed.
See attached NoRealms.PNG.

Steps to reproduce:
1. Go to Admin workspace / Realms
2. Enter a search term (e.g. "abc") and press Enter.

This issue has occurred since the fix via SAK-18807.
SakaiSAK-21313Date/time is displayed using system locale.See attached PodDate.PNG.
In spite of having set site language to English, the date/time is displayed in Japanese.

It should be displayed using site language (or preference).
SakaiSAK-21403The group property to enable Site Info to see groups should be moved out of site-manageIn order for a group to show up in the Manage Groups part of Site Info, it must have the property:


This is defined in:
site-manage-util/util/src/java/org/sakaiproject/site/util/ public static final String GROUP_PROP_WSETUP_CREATED = "group_prop_wsetup_created";

Therefore, other tools that want to create groups with this property must either take a chance that the property won't change and hard code it themselves, or use the constant from the site manage utils, creating a hard dependency.

Ideally, this property would be moved to the kernel.
SakaiSAK-21430Allow for customisable tool iconsThis is a request to allow customisable tool icons. Currently, every tool of the same type gets the same icon. For example, if you have a number of web content tools, they all have the same icon. See screenshot.

I propose that when rendering the tool list, the portal checks for a tool property (tool-class). The value of this is then output into the markup for the tool, e.g.:

<span class="toolMenuIcon icon-sakai-iframe TOOL-CLASS-HERE">Web Content</span>

Corresponding CSS would need to be added to portal.css for the actual styling to occur.

This is the approach taken in uPortal.
SakaiSAK-21495Allow guest access on a site by site basisCurrently, you can control guest access on a system-wide basis with the setting nonOfficialAccount=true/false (introduced in SAK-13389 ).

However, sometimes you want to make exceptions on a course-by-course basis.

The attached patch will allow a site property ( AllowedNonOfficial ) to override the setting and allow guest access on a site-by-site basis.
SakaiSAK-21009Cannot set section time while use non-English locale.While setting time of a section in non-English locale, it will generate a RuntimeException. Its hint is "A bad date made it through validation! This should never happen!". But unfortunately, it happens.
In /sections/sections-app-util/src/java/org/sakaiproject/tool/section/jsf/ convertStringToTime(String str, boolean am), An suffix either "AM" or "PM" is added according to the param. And the result string will be parsed to date by user locale(new ResourceLoader().getLocale(), line 197). Since not all locale use AM/PM (zh_CN for example), it will cause a "never happen" exception.

The solution of this bug is just change the line 197
SimpleDateFormat sdf = new SimpleDateFormat(pattern, new ResourceLoader().getLocale());
to US locale which use AM/PM
SimpleDateFormat sdf = new SimpleDateFormat(pattern, Locale.US);
SakaiSAK-21395Page Order tool allows adding of tools to a site that are not appropriate for the site typeThe Page Order helper within Site Manage allows you to add ANY tool to a site, including those designed only for My Workspace. It seems to bypass the configuration.

For example I can add the Account, Profile and user Preferences tool to a normal project site. In addition the list doesn't show the normal site tools that I am allowed to add (like Forums for example)

IMO the ability to add pages via Page Order is redundant as you can do the same using Site Info > Edit Tools.
SakaiSAK-21428Bad formatting of navbar in 'new template' viewIf you click 'New template' in Email Template Service you get a half rendered nav bar.

This is because of <div class="navIntraTool"></div> which should not be present for that particular page.
SakaiSAK-21500SAK-21352 OSP Wizards: Adding page to wizard causes unexpected error1. Log in to QA3-US
2. Create a project site with OSP Wizards tool
3. In Wizards, create a new wizard (either sequential or hierarchical), follow basic wizard creation routine
4. On "Step 3: Add Pages," add a page to your wizard
5. Give the new wizard page a title
6. Click "Save Changes"

Sakai will display an unexpected error. When you refresh the Wizards tool, the wizard will be successfully created, but the page will not have been added. Wizard page adding is working properly on Rutgers's implementation of 2.8.1.

Importing a sequential wizard that has pages does not cause the error. Adding more pages to the imported wizard also causes the error.
SakaiSAK-21929SAK-19842 'Secure Connection Failed' error when clicking "what's this" under Resources -> Copyright AlertUnder Resources, clicking on "what's this" beside Copyright Alert gives the following error:

Secure Connection Failed
An error occurred during a connection to
SSL received a record that exceeded the maximum permissible length.
(Error code: ssl_error_rx_record_too_long)

URL of pop-up:

I tried editing the URL and getting rid of the second '/' after 8086, and pasting it in a new window (can't edit the pop-up), but still get the same error.
SakaiSAK-21582Simplified Chinese translation for Announcement 2.8.1Based on 2.8.1
Translate all keys according to default properties.
Remove unused keys according to default properties.
Improve translation.
SakaiSAK-21595SAK-21594 Get common to build site "site:site" mvn targetmvn release are failing because there are two empty tests in common.

These empty tests cause failure in Maven sites


I am deleting the commented-out tests
SakaiSAK-21910i18n date/time enhancement and swedish language bundle - patchesUmbrella issue for all internationalization patches coming from UMU/SU in Sweden.
SakaiSAK-22073RIS files starting with Byte Order Mark (BOM) fail to import the first citation.A text file which starts with a Byte Order Mark (BOM) doesn't import correctly, the first citation in the list fails to import. As mentioned in the Wikipedia article Notepad on Windows will add a BOM to UTF-8 files.

Attached is the same list twice, once with a UTF-8 BOM (EF BB BF) and one without. You can see the BOM in a hexdump of the file:

$ hexdump -n 16 Paleo6a-bom.txt
0000000 ef bb bf 54 59 20 20 2d 20 4a 4f 55 52 0d 0a 41
SakaiSAK-22282Proposed patch to support group submissions.Ability to turn on/off Group Submission feature ( must be set in

This patch makes changes allowing Site Groups to act as submitters of an Assignment instead of an individual. Any individual in the group may make submissions/changes and all members of the group are emailed notifications on submissions. All behaviors on individual submissions can be applied to Group Submissions such as Grading, Resubmissions, Grade Release, Downloads, Uploads, etc. One grade is designated for the entire Group and all individuals receive this grade in the Gradebook (A future patch is expected to include a mechanism to alter an Individual's grade from the Group's grade).

Ability to turn on/off Visible Date feature ( must be set in

This patch also includes an optional visible date feature. If visible date set, student can see assignment but can not submit/save yet. This feature is driven by a need for us to show students upcoming tasks but not allow them to act on them until the open date.
SakaiSAK-22439Updated mongolian translations for some toolsMigrated from SAK-22097.

Bayanaa added a comment - 30-Jul-2012 17:13
I've fixed and attached translation bundle files for the following:

I kindly request your assistance in putting them into the trunk version. Thank you.
SakaiSAK-22476Some projects reference caret Maven repositories and if they are down they slow the buildSome projects are still referencing the caret maven repos. They are currently down and its taking me ages to build Sakai with a clean repo. They are referencing RSF which has been migrated to the Sakai repo anyway so they are redundant and unnecessary.

All references to them should be removed.


[INFO] ------------------------------------------------------------------------
[INFO] Building sakai-gradebook-app-ui
[INFO] task-segment: [clean, install, sakai:deploy]
[INFO] ------------------------------------------------------------------------
[INFO] [clean:clean {execution: default-clean}]
[INFO] Deleting directory /Users/erkel/dev/sakai/src/2.8.x/gradebook/app/ui/target
[INFO] [resources:resources {execution: default-resources}]
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[WARNING] Unable to get resource '' from repository CARET-Maven2 ( Error transferring file: Operation timed out
[WARNING] Unable to get resource '' from repository caret-dev ( Error transferring file: Operation timed out
995b downloaded (standard-war-POM-3.pom)
SakaiSAK-20443The transformation between xserver fields and sakai fields does not bear in mind the code ' 020 ' that corresponds to ' ISBN 'On having recovered a book from a server xserver, this sends to us the ISBN in the code 020 , but on having examined the register of the citation there appears the field empty 'ISBN'.
Examining the file xserver2sakaibrary.xsl we see that 022 identifies the code both with ISSN and with ISBN, when it corresponds to this one 020.
The soluction has been:
<!-- GET ISSN/ISBN -->
select="datafield[(@tag='022' or @tag='020') and @ind1=' ' and @ind2=' ']/subfield[@code='a']">
<xsl:value-of select="text()" />
SakaiSAK-20765Catalan translation of OSP:Matrix needs to be upgradedCatalan translation of OSP:Matrix needs to be upgraded. There are minor mistakes in the translation.
SakaiSAK-20766Catalan and Spanish translation of Roster need to be upgradedCatalan and Spanish translation of Roster need to be upgraded.
SakaiSAK-20908Upgrade Java version to JDK 7.xRelase of JDK 7.0 is right atound the corner with a a lot of anticipated feature including JVM support for other languages. I have tried to complied 2.8.x FRAMEWORK against release candidate and it was SUCCESSFUL with unit tests.
Full profile for sakai 2.8.x failed. I see one error here which may be just package location movement. I am anticipating no more than a couple for more errors in compilation. deployment may be another deal.
Here is the relevant build log.
[INFO] -------------------------------------------------------------
[ERROR] /home/mustansar/source/sakai-2.8.x/profile2/util/src/java/org/sakaiproject/profile2/util/[49,31] error: package com.sun.image.codec.jpeg does not exist
[ERROR] /home/mustansar/source/sakai-2.8.x/profile2/util/src/java/org/sakaiproject/profile2/util/[50,31] error: package com.sun.image.codec.jpeg does not exist
[ERROR] /home/mustansar/source/sakai-2.8.x/profile2/util/src/java/org/sakaiproject/profile2/util/[143,6] error: cannot find symbol
[ERROR] class ProfileUtils
/home/mustansar/source/sakai-2.8.x/profile2/util/src/java/org/sakaiproject/profile2/util/[143,33] error: cannot find symbol
[INFO] 4 errors
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] Compilation failure

/home/mustansar/source/sakai-2.8.x/profile2/util/src/java/org/sakaiproject/profile2/util/[49,31] error: package com.sun.image.codec.jpeg does not exist
/home/mustansar/source/sakai-2.8.x/profile2/util/src/java/org/sakaiproject/profile2/util/[50,31] error: package com.sun.image.codec.jpeg does not exist
/home/mustansar/source/sakai-2.8.x/profile2/util/src/java/org/sakaiproject/profile2/util/[143,6] error: cannot find symbol
class ProfileUtils
/home/mustansar/source/sakai-2.8.x/profile2/util/src/java/org/sakaiproject/profile2/util/[143,33] error: cannot find symbol
SakaiSAK-20961Common project release fails due to errors when rendering Maven reportsThe release plugin fails on common (trunk, 1.0, 1.1) when generating Javadocs with the following error. This is due as Matthew points out to the presence of two commented out test classes.

[INFO] Loading source files for package org.sakaiproject.api.common.type...
[INFO] Loading source files for package
[INFO] Constructing Javadoc information...
[INFO] 1 error
[INFO] 2 warnings
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [INFO] Error during page generation
[INFO] Embedded error: Error rendering Maven report:
[INFO] Exit code: 1 - javadoc: warning - No source files for package org.sakaiproject.api.common.type
[INFO] javadoc: warning - No source files for package
[INFO] javadoc: error - No public or protected classes found to document.
[INFO] Command line was: /usr/lib/jvm/java-6-sun- -J-Xmx1024m -J-Xms168m "-J-Xms168m -J-Xmx1024m -J-XX:PermSize=128m -J-XX:NewSize=64m" @options @packages
[INFO] Refer to the generated Javadoc files in '/home/arwhyte/svn/common/branches/common-1.0.x/target/checkout/target/site/testapidocs' dir.
SakaiSAK-21015Announcements - please restore the listing of announcements to show newest to oldestISSUES:
In previous versions of Sakai (even earlier versions of 2.8), the Announcements tool would always list the most recent announcement first (sorted descending order by date). Now, it appears that this default behavior has shifted to showing oldest to newest instead (sorting ascending order by date).

I am writing to ask that the previous behavior -- sorting in descending order -- be returned to Sakai 2.8.x and 2.9.x. This is desired behavior which helps site managers and participants stay aware of the most recent information first. This is generally accepted as best practice for organizing announcement information, especially in classes. At our campus, faculty have complained about this new sorting and I expect that faculty at other campuses would have the same response.

In an earlier build of Sakai 2.8 (rc3 on as of Aug 12, 2011 at 12:30 PM US Pacific) still has the previous sorting enabled. I am not sure where the bug or change was introduced, but hope that this information helps the community fix this display problem.

Thank you so much for looking into this issue.
SakaiSAK-21168SAK-21124 Identify the config by changing the SCS to support tracking of config itemsFind all the config values by updating the SCS to allow tracking
Also update the SCS to allow change listeners and live config changes
SakaiSAK-21284DAV "MOVE" operation is implemented as copy/removeThe doMove() operation in implements a move as a copy followed by a remove. This causes all files so "moved" to be recreated in the storage volume before the old copies are deleted. And so in every case, the application server must read the full content of each file and write it back out again. In a shared storage situation, particularly a multiple-volume one, this creates several risks. And when multiple MOVE operations are issued in sequence (eg a user using a DAV client to move 10 folders to another location), several threads are kicked off which can result in complete saturation of the server's I/O system and/or NFS connection.

ContentHostingService provides a "rename" method which may or may not be appropriate for the needs of the DAV server, and in addition that method is also implemented in this manner (copy then remove-- see KNL-817), however, this implementation presents a big risk when dealing with multiple multi-gigabyte files.
SakaiSAK-21353chat took down our systemchat took down our system this evening. On some of the front ends, we found ClusterEventTracking at 100% and not much else happening. We also had continuing GCs, which I assume are related, though I can't prove it. Note that I'm just guessing that the following patch will solve the problem. It's an unambiguously good idea, but I find it hard to believe that this alone caused all the problems. As far as I can see, one ChatDelivery is created for each message, and I don't think we have that high a rate of message deliveries for this alone to kill us, but I've found that fixing the problems I know about makes it easier to find the ones I don't know about...

The problem was in org.sakaiproject.courier.impl.BasicCourierService.deliver( This code inserts items to be delivered (ChatDelivery objects) into a list for each destination. It checks to see if a given message is already in the list, using contains. Contains uses equal. One thinks of equal as low-overhead, but in this case it it not.

ChatDelivery objects have the message to be delivered. It is either the ID of a message or the actual object. Equals on ChatDelivery objects checks whether the underlying message ID's are equal. Unfortunately it does this using getMessage().getId(). This causes the message to be loaded if what you currently have is just the ID number. Since all we want is the ID number in the first place, this is unnecessary. The problem is that this code is called from inside the event handling systems's event delivery code. That code is single threaded, and has to be fast. It shouldn't be doing DB queries, particularly via Hibernate.

The solution is obvious. Add a method getMessageId which returns the ID if we have it, and does getId() if what we have is the object. So no DB queries.
SakaiSAK-21377Feed causes NPE.NullPointerException is caused when the feed icon is clicked.
See attached NPE.PNG.

It is caused because the rome library was upgraded to 1.0 via SAK-20125.
rome-1.0.jar needs to be placed into the class-path (e.g., CATALINA_HOME/shared/lib) as reported to .
SakaiSAK-21421CLONE - Bug in JSF i18nThe options to select the amount of items shown always appear in English, all the tag releases I've tried have this bug. This happens because the page renderer file ("") calls a bundle file that does not exist ("org.sakaiproject.jsf.bundle.pager"). It exists in the trunk version though, but there are two groups of i18n files there. There are two options to solve the problem, to add the "bundle" folder to the tag versions or to modify the PageRenderer file and make it point to the other files ("org.sakaiproject.jsf.Configuration"). Either way, one of the bundles should be removed, for simplicity and correction's sake.

This affects some pages in Samigo, Assignments and some more tools probably.
--- CLONE is above ---

The paging widget in Section Info shows only English.
See attached SectionInfo.PNG.
It has occurred since r93466 via SAK-20294.
SakaiSAK-21507Accessibility: The three skip navigation links do not work in Safari or Chrome(1) In Safari and Chrome the focus will never stop on the skip navigation links.
(2) Even when the skip navigation links are activated using the access key assigned to them, the display scrolls to the link's target but the focus does not.

And yes, I configured Safari to "Press Tab to highlight each item on a webpage" to do my testing. In both Safari and Chrome, the other links (tools list, etc.) do get focus.
SakaiSAK-21502Accessibility: Skip Navigation links aren't visible to allow access to sighted keyboard only usersThe three skipNav links (Jump to content, Jump to tools list, and Jump to worksite list (located at the top of the portal body)) do not become visible when they receive keyboard focus.

The skipNav links work great for screen-reader users. However they aren't very usable to another important class of keyboard only users -- those who can see and don't use screen-readers. This means that they can't tell what the links are for and are left to wonder why tabbing into the window doesn't seem to do anything.

As a compromise between keeping the visual design free of the skip navigation links, and making them accessible to keyboard only users, CSS can be configured to hide the skip navigation links until they receive focus. An example of this technique can be found on the ATAC's Web site: (visit the page and then press the tab key until the "Skip Main Navigation" link text appears). Once a keyboard only user starts tabbing through the page, the skip navigation link will receive focus and CSS can make it become visible. An example of how to code CSS to do this in Sakai would be to replace the empty #skipNav rule in portal.css with:

#skipNav a.skip:focus, #skipNav a.skip:active {
width: auto;
outline: black dotted thin;
position: static !important;
margin-left: 10px;
font-size: 1.5em;
SakaiSAK-21553Unable to invite guest reviewer by email for matrix cellWhen trying to invite a guest reviewer by adding the user's email, I just receive an error message stating: 'The user was not found'

To reproduce:
As the coordinator, create a matrix allowing users to choose their own reviewers

As the participant, do some work in the matrix cell, adding a reflection, adding a file, etc
Click Request Feedback
On the Request Feedback page, enter the email address of someone not associated with the site or server under the 'Invite Reviewers by User ID or invite guests by Email Address' section
Click Add

Error message displays
SakaiSAK-21754disable presence in !error siteI recommend disabling presence in !error in both the default configuration and upgrade scripts.

insert into SAKAI_SITE_PROPERTY values ('!error', 'display-users-present', 'false');

It's not a good idea to show users the names of other users, except in their own site. While probably not technically a FERPA violation, because other users can't tell much about them, some universities allow students to hide themselves completely for cases like stalking. So it's really a bad idea to show the names of other users who are online.
SakaiSAK-21846Typo when copying a URL in ResourcesWhen selecting a URL for copying, the following alert is presented, complete with typo:

Remeber to click Ctrl+C. This link only selects the URL.
SakaiSAK-21857Gradebook Entity Provider missing from 2.8.xThe gradebook entity provider is not initializing on 2.8.x instances of Sakai. It is appearing properly in 2.8.1.

This is being caused by the bean definition for the entity provider being missing from gradebook/app/sakai-tool/src/webapp/WEB-INF/applicationContext.xml. This definition has been missing in all 2.8 versions, however it was working in the past because during build-time the applicationContext.xml at gradebook/app/ui/src/webapp/WEB-INF was actually being used instead. This can be confirmed by building a 2.8.1 and 2.8.x gradebook separately and then inspecting the applicationContext.xml files in the src/ and target/ locations for gradebook/app/sakai-tool and gradebook/app/ui.
SakaiSAK-22021Accessibility: The ARIA Landmarks presented by the Neoportal are not all uniqueThe ARIA landmarks as presented by the Neoportal are very useful. However, multiple "navigation" landmarks are present and are not distinguished. Landmarks should be meaningfully and uniquely labeled so the user can tell them apart and can tell which navigation landmark they want to move to. For example of what a screen-reader user will see currently, see the attached image unLabeledLandmarks.png.

The ARIA landmarks can be easily labelled by adding an aria-label attribute to each element that has the role="navigation" attribute.

For example:
<h1 class="skip" id="sitetabs" role="navigation" aria-label="Worksites begin here">Worksites begin here</h1>
SakaiSAK-22118Add method to get assignment list from CategoryDefinitionThe gradebookservice provies two methods for getting the categories,

List<Category> gradebookService.getCategories


List<CategoryDefinition> gradebookService.getCategoryDefinitions

However the Javadocs for the getCategories method says:
This method cannot be used outside of the gradebook because it returns the org.sakaiproject.tool.gradebook.Category object. If you require info on the categories from a consumer outside the gradebook, use getCategoryDefinitions(String)

The issue here is that using getCategoryDefinitions does not provide a corresponding getAssignmentList method like the Category does. And you can't use the Category method outside of the gradebook since it isn't shared.
SakaiSAK-22111Move all of the 'custom' plugins for CKEditor to an external plugins directoryIt looks like we can create an external plugins directory according to this guide:

And then do something to add all of these external directories like it describes. This would make it so it's still easy to upgrade CKEditor and that the plugins are separate.

// get path of directory ckeditor
var basePath = CKEDITOR.basePath;
basePath = basePath.substr(0, basePath.indexOf("ckeditor/"));
(function() {
CKEDITOR.plugins.addExternal('helloworld',basePath+'myplugins/helloworld/', 'plugin.js');
SakaiSAK-22138Assignments - URL Submission AttachmentsAssignments - URL Submission Attachments
When a student attaches a URL for an assignment submission, the attached URL works in Sakai's interface.
However, the confirmation email notification sent to the student for the submission breaks the URL's link by hyperlinking two more characters: "(1" is appended to the URL which breaks the link.
See screen captures (assignment_submission_url.jpg & assignment_confirmation_url_email.jpg).
SakaiSAK-22168Clean up Web ServicesThis will hold a few changes to web services in the name of cleanup.
SakaiSAK-22199Improve the PDA Portal in its detection of Situations to *not* inline the tool contentCurrently, the PDA portal loks at the request URI and applies a regular expression to the URL and if the Regex matches - do not do inlining. There is a property that allows sites to adjust the regex without patching or recompiling:


You can also do a tool-by tool bypass


This turns out not to be sufficient. We also need a regex that will allow inline-bypass based on the existance of something in the query string, or even the requested or returned content type. SO this JIRA adds two new properties with suitable defaults:


Both of these can be scoped down to a tool by adding a Sakai tool id to the property name.

You will know that these need adjustment when you are testing a tool in the PDA portal and start to see broken images, missing CSS, missing Javascript, or failing AJAX requests that are using local URLs that get turned into


I will check this code in and leave the JIRA open so folks can do a bit of testing.
SakaiSAK-20428Options form of incorrect type can be saved on a presentation, which cannot be corrected by userWhen a user uses multiple tabs or windows within the same session, it is possible to save the wrong type of form as the options form for a presentation. This will typically make the portfolio non-functional due to violating an expectation of the template that the form will be of a given schema. This also cannot be corrected by the user, since there is an implicit options form per presentation, and it cannot be detached.

Steps to reproduce are:

1. Create a portfolio against a template with an options form type selected.
2. Complete the options (Required Settings).
3. Complete a content form in the portfolio.
4. Return to the Summary page (TAB 1).
5. In another window or tab (same browser/session), navigate to the Add/Edit Content page for that portfolio (TAB 2).
6. Begin editing the options form (TAB 1).
7. Begin editing the content form (TAB 2).
8. Click Save on the options form (TAB 1).


The form that should belong to the presentation is saved and attached as the options form. If the form for the item is of a different type than the options form, the portfolio will be unrecoverable. Each time the user attempts to edit the options form, the other form will be edited, and cannot be detached. The user then has to create a new portfolio and reselect all artifacts.


Check the type of the form attempting to be saved as the options form for a presentation.

Expected Result after fix:

An error report should occur and the portfolio should remain functional. If the stack trace is visible, there will be a message about simultaneous editing.


This isn't a perfect solution in that it doesn't resolve all of the errors that can arise from editing forms in multiple tabs. However, it does avoid the situation where the user cannot continue to work on a given portfolio.
SakaiSAK-20521Upgrade to Quartz 1.6.6; leverage quartz in <dependencyManagement> in master pom; remove <version> declarations in tools to avoid version driftThere are a few projects (osp, syllabus, warehouse, samigo) that declare a dependency on Quartz 1.5.2 while all other projects have updated to Quartz 1.6.6. Update these dependencies (including <groupId> to org.opensymphony.quartz) and leverage quartz's inclusion in the master pom's <dependencyManagement> removing the version in relevant projects to avoid version drift.
SakaiSAK-20565Portal now has a dependency on Profile 2 & Presence serviceThe PCServiceEntityProvider in the new portal has a runtime dependency on profile2 - this is a specific tool implementation and schools should be able to run Sakai without Profie2 in their build. It also breaks the Cafe build

The presence one is more ambiguace - I would think we may want to premote the service to kernel for 2.0
SakaiSAK-20598Adjust SAKAI_PERSON_T hibernate mapping for type="text" and larger sizeFrom recent discussions, the SAKAI_PERSON_T table is not created on MySQL5InnoDBDialect.
Hibernate is not setting the column types as text, even though:
<property name="notes" column="NOTES" type="string" length="4000" />

It was proposed that the type be changed to text and length increased to 75000. This will force a mediumtext on MySQL and clob on Oracle. From the list:

On 19/05/2011, at 12:11 PM, John Bush wrote:
increasing the length while using type of string breaks oracle, increasing length while using type of text works universally. current settings break mysql when using the innodb5 dialect. im suggesting type=text length=75000 or more, which requires oracle start using clobs but works for mysql all dialects, db2 , and oracle

Need some investigation into the feasibility of using clobs directly. And also a conversion for both MySQL and Oracle.
SakaiSAK-20715Slowness/performance issues in Matrices toolWe are experiencing severe performance issues using the Matrices tool, primarily when clicking on Edit properties, but also when a user just tries to click on the matrix link to open it. Data has been collected from 3 different computers, using 2 different matrices from 2 different sites. I am attaching images of the two matrices, an exported zip file from the matrix causing us the most significant problems and a spreadsheet outlining the tests and times it took for certain matrix functionality.
The design of the matrix including the number of rows and columns, number of users, and forms is also provided.
SakaiSAK-22376From value checked for null but not empytThe check on the template from value checks for null values but not empty ones.
SakaiSAK-22484Sakai 2.9.x randomly sends users to Mobile ViewHi,

just a few minutes ago we observed this bug.

In the log just

2012-08-14 13:26:30,743 WARN ajp-bio-8019-exec-14 org.sakaiproject.util.ResourceLoader - bundle 'sitenav' missing key: 'sit_toggle_nav_exp' from: org.sakaiproject.util.ResourceLoader.get(

appears and I don't believe that the missing key message is related to this bug.

What I did was to be inactive in Sakai for about 55 minutes. I dismissed the logout warning and the next clicks on any link within Sakai caused the mobile view to be displayed (even the "Options" buttons within tools).



-----Ursprüngliche Nachricht-----
Von: [] Im Auftrag von Omer A Piperdi
Gesendet: Montag, 13. August 2012 23:37
Betreff: [Building Sakai] Sakai 2.9.x randomly sends users to Mobile View

We upgraded our Sakai to 2.9.x last week.. Things seem normal.. We are seeing odd behavior, when I user in inactive for a while and click any link, it switched to 'Mobile View' in the user browser..

Have anyone seen this before?

SakaiSAK-22567Accessibility: There are multiple accessibility issues with required fields on the new user page of the Users ToolIssue 1:

the meaning of the asterisk / required field indicator is not explained before the form that uses it.


Include text before the form explaining the the required field indicator. (e.g., All required fields are marked with an asterisk (*) )

Issue 2:

The required form field indicator is not part of the form control's label.


Move the asterisk inside the label.

Change this:
<label for="eid">User Id</label>
<input type="text" id="eid" name="eid">

<label for="eid"><span>*</span> User Id</label>
<input type="text" id="eid" name="eid">
SakaiSAK-19001Remove Mercury Portal from Sakai 2.8Remove the mercury portal from the build for 2.8.
SakaiSAK-19149The long description is listed as required but is not when editing.In the Glossary tool, to An asterisk indicates the long description field that is required but no check is made on that field.

The problem exists only when editing but works correctly when creating.

This problem exists because the FCKEditor code in place a <br />.
Even if the long description field is blank, verification based on the length of character finds a few and ignore the white. Here as an attachment a patch that solves this problem.
SakaiSAK-19162Visual indicator on tool icon when site is minimized needs to be stronger.When in minimized mode for a site and moving between tools. The tool icon on the left hand side is not strongly highlighted. Perhaps a small border will help with navigation. This is a nice to have/must have, as it helps peoples internal model of where they are in the application.
SakaiSAK-19267Rename properties in SAK-12489 (Captcha for new user accounts)Because eventually we might want to add captcha support to other tools, the property names in this SAK should be prefixed with "user.". Then they can be toggled independently of other captcha's

Change to:

user. recaptcha.enabled=false
SakaiSAK-19301Show Last updated timestamp in Site InfoThe University of Virginia adds the "Last Updated" timestamp to the bottom of the participant list in Site Info (just under the "Update Participants" button).

This patch is contributed for consideration.
SakaiSAK-19354Long title for a presentation throws errors including JDBC ExceptionsClick here for more information.
SakaiSAK-19476Update Webdav instructions for 2.8The Aula virtual environment is used by 9000 spanish students. The dev team spent a considerable time updating instructions in Spanish to be totally reliable for their population which includes Linux and other environments. I will ask for their webDav instructions to be placed here and then perhaps Rutgers can review and upate for 2.8.
SakaiSAK-19518Hierarchical wizard: Problem adding multiple categories, subcategoriesUnable to add another top-level category in hierarchical wizard

Clicked Wizards -> Add -> Hierarchical Wizard
Completed first two steps
Step 3 of 3: Click 'Add Category', fill out title and click Save
Add a page or two under category 1

Beside Wizard name, click on 'Add Category' link again, fill out title and click Save
Step 3 of 3 page loads again and category 2 does not display

One subcategory can be added to a category, but trying to add more than one does not work
SakaiSAK-19559Accessibility: "Jump to Worksite List" Skip Navigation Link Present on Login PageThe portal includes three "Skip Navigation" links (Jump to Content, Jump to Tools List, and Jump to Worksite list). These links are very useful and should be maintained. However, no worksite list is present until a user has logged in. The "Jump to Worksite list" skip navigation link should be suppressed until a user has logged in.
SakaiSAK-18011Page title does not support special charactersWhen creating a page with title léon, the title is converted to l&eacute;on where as the description, keywords etc are not.
SakaiSAK-19831Text input for alias e-mail address in mail archive allows text greater than 99 characters.The text input for the e-mail address is allowed to be greater than the checked for limit of 99 characters. Please limit this via the GUI as well.
SakaiSAK-19866Auto-groups - ability to assign users randomlyAbility to randomly assign students in a site to a group automatically
based on either specified number of groups per site, or specified number
of students per group. This would greatly facilitate creating small
groups (i.e. peer review or collaborative student groups) in large
SakaiSAK-20236Can trigger java.lang.StackOverflowError via crafted e-mail address inputClick here for more information.
SakaiSAK-18838Conditional Release doesn't appear to be working for any conditions that are based on Gradebook settingsAfter putting in Chuck's patch for CR-4 I was able to test the specific conditions.

The only ones that work are grade is greater than, grade is less than, grade is blank, and grade is non-blank.

The others do not work.

Items with the following conditions always seem to be displayed to students:
due date has not passed
is not included in the course grade
is not released to students

Items with the following conditions never seem to be displayed to students:
due date has passed
is included in the course grade
is released to students

(I thought it odd that all three of the 'nots' always show ...)
SakaiSAK-17572Add basicLTI propert settings to *.sakai.propertiesAdd the following default properties. Do not define a secret.

# Enable the Producer
# Default=false

# BasicLTI Producer-enabled tools

# BasicLTI Producer secret

# Indicates whether or not we allow web-service logins.
# Default=false so folks are forced to add this in their local properties file.

# BasicLTI Producer setting
SakaiSAK-18655mvn -Ppack-demo install fails for Windows Vista on the 2.7.0 source codeRunning mvn -Ppack-demo install fails with the error
Could this be todo with the path transversal / and \

for C:\Users\Alan\Desktop\sakai-2.7.0\pack-demo/target/pack-demo

INFO] Building Sakai Pack Demo
[INFO] task-segment: [install]
[INFO] ------------------------------------------------------------------------
[INFO] [site:attach-descriptor]
[INFO] [install:install]
[INFO] Installing C:\Users\Alan\Desktop\sakai-2.7.0\pack-demo\pom.xml to C:\Users\Alan\.m2\repository\org\sakaiproject\pack-demo\2.7.0\pack-demo-2.7.0.pom
[INFO] [antrun:run {execution: pack-demo-clean}]
[INFO] Executing tasks
[delete] Deleting directory C:\Users\Alan\Desktop\sakai-2.7.0\pack-demo\target\unpack
[unzip] Expanding: C:\Users\Alan\.m2\repository\tomcat\tomcat\tomcat\5.5.28\ into C:\Users\Alan\Desktop\sakai-2.7.0\pack-demo\target\unpack
[delete] Deleting directory C:\Users\Alan\Desktop\sakai-2.7.0\pack-demo\target\unpack\apache-tomcat-5.5.28\webapps
[mkdir] Created dir: C:\Users\Alan\Desktop\sakai-2.7.0\pack-demo\target\unpack\apache-tomcat-5.5.28\webapps\ROOT
[echo] Executing cd ../;mvn clean
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] An Ant BuildException has occured: Execute failed: CreateProcess: mvn -Dmaven.tomcat.home=C:\Users\Alan\Desktop\sakai-2.7.0\pack-demo/target/pack clean error=2
SakaiSAK-18742Selecting two column layout for a page throws an Exception with a bug report for the end user - 2.6.x DEMOClick here for more information.
SakaiSAK-18870Add method to AnnouncementService API to get merged announcementsWith the current AnnouncementService API you can get the messages for a given channel. However, this does not include any merged announcements, ie from other sites. In addition, getting the announcements for a user's channel returns nothing.

The logic to merge the lists is inside AnnouncementAction.getMessages. This should be split out into an API method.
SakaiSAK-18910Matrices / rendering bugThe problem is that simple and nested lists (both unordered and ordered) in the cell guidance fields are not being indented at all, even when a list is nested within a list. The lists display properly in the FCK editor and in the Edit Cell view but not when the cell is rendered to the end user. I have attached a document with screen shots and some sample FCK source to reproduce the problem.
SakaiSAK-18924invited reviewers who are not a member of the site cannot see or open the attachment.If a participant adds a form to a matrix cell and the form contains an attachment, invited reviewers who are not a member of the site cannot see or open the attachment. Reviewers should be able to see everything a participant adds to a cell.

To reproduce:

1. Create a new matrix.
2. In Matrix properties, set the default reflection form to "Reflection - Standard". Then set the default feedback form to "Feedback - Standard" and enable the setting: "Allow participant to send feedback invitations to additional reviewers"
3. Publish the matrix.
4. Log in as a participant.
5. Open a cell and add a reflection form. Type some text in the FCK editor and add an attachment to the form.
6. Save the reflection.
7. Click Request Feedback and request feedback an oncourse user that is not in the site.
8. Log out
9. Log into the email of the the invited Reviewer.
10. Locate the feedback invitation and click the link. You should be prompted to log in. Be sure to use the login and password for the invited reviewer.
11. You should be taken directly to the cell with the reflection form. Open the form. The attachment link is not visible.
SakaiSAK-16568Copied content links point to original site when 'Import from Site' option is usedThe new option in the Rich Text Editor, Sakai Entity Link, is not working properly when imported through sites. It points to the original site and any students that do not have permission to that site will be given an error. The links always refer back to the originating site.
SakaiSAK-21059Upgrade Assignment 1 Integration with TurnItIn 2.9.2Add the new options from TII 2.9.2 in the Assignment 1 UI. Also, make it so an institution can choose which settings are available via
SakaiSAK-21675Help tool contents (html) should be overridden easierThe help tool contents (help documents) are stored in jar files in shared/lib. If someone wants to modify the contents of these they have to either repackage the jars or rebuild the tools help files. It would be nice if the help tool would check for modifications to individual files from a local path something like:

ServerConfigurationService.getSakaiHomePath() + "/help/"+help.location

Ideally a new registration could also be provided here would could override all of it, but this would satisfy a lot of customization that we have that are just minor text changes without actually adding/removing help documents.
SakaiSAK-21922SAK-21908 In wiki tool, non-latin (Japanese/Chinese) characters are not supported while export site members in PDF file.To show the bug:
1. Create a Wiki page contains non-latin(Chinese, in my case) content. You can just copy some Chinese characters from
2. Enter "info" page of the Wiki page. In "Views and Feeds", click "PDF". The exported PDF file render Chinese characters incorrectly.
Screen shots can be found in attachment.

In folder rwiki/rwiki-impl/impl
1. Modify
Add an entry: fop.pdf.default.font=AR PL UMing CN
"AR PL UMing CN" is a Chinese font. In Linux, it can be installed via "ttf-arphic-uming'
Admin can set this to any font he/she like, only if the font is installed in the OS.

2. Modify pom.xml
Update Apache FOP version from 0.9.3 to 1.0

3. Modify src/java/uk/ac/cam/caret/sakai/rwiki/component/service/impl/fop.cfg.xml
Add some code to let FOP auto detect System fonts.

4. Modify src/java/uk/ac/cam/caret/sakai/rwiki/component/service/impl/xhtml2fo.xslt
Set fo:root font to DEFAULT_FONT

5. Modify src/java/uk/ac/cam/caret/sakai/rwiki/component/service/impl/
Update the FOP related code to couple with FOP 1.0.

6. Modify src/test/uk/ac/cam/caret/sakai/rwiki/component/service/impl/test/
Remove a test case which would not pass compile check due to changes of FOP API

I modify the code based on Sakai 2.8.1. The source and "diff" are in the attachment(without
Also, you can see the effect after fix the bug as attachment
SakaiSAK-22379wrong email sender/receiver for the official site creation notification emailBefore SAK-20801, when the official instructor of a course creates a course, an email is sent from the instructor to the system support account.

However, now the same email is sent from the support account to the instructor instead, which result the loss of bookkeep emails in the system support queue.
SakaiSAK-21739Enforce uniqueness on template key + localeUniqueness is not being enforced on template key + locale. If only one of each template should be present in the db, we should enforce uniqueness in the db.
SakaiSAK-21389Calendar & Assignment have circular dependenciesThe CalendarAction and AssignmentAction classes have circular API dependencies, which prevents an automated, indie build process. The CalendarAction class needs the assignments to grab assignment attachments. Could the Calendar have the Assignment attachment reference at the time the Calendar entry is created? Or maybe there's a different approach that would separate these two.
SakaiSAK-21683Remove duplicate descending indexes for mysqlEmail Archive and Announcement contain ascending and descending versions of the same index. However, according to mysql

An index_col_name specification can end with ASC or DESC. These keywords are permitted for future extensions for specifying ascending or descending index value storage. Currently, they are parsed but ignored; index values are always stored in ascending order.

The DESC indexes are therefore duplicates that serve no purpose in mysql and should be removed.







SakaiSAK-15832site unavailable message should mention how to join a site (if the site is itself joinable)if a non site participant goes to a joinable site before joining, there should be instructions on what to do.
SakaiSAK-10393Worksites need to support locale preferencesWorksites (especially course-sites) need to support a language/locale preference that trumps the language/locale of the user and of the system. Specific application for this include language-based courses.

Suggested implementation:
Set new SAKAI_SITE_PROPERTY flag: = [locale-identifier]

The LOCK_LOCALE property could be set in the Worksite Setup tool using a checkbox. If set, the locked locale would be equal to the user's current language/locale preference.
SakaiSAK-22592Accessibility: Page Reorder Tool in Customize Tabs Has Visual Indication of Keyboard focus IssueOnce a site has been moved from the "Favorite Sites" column to the "Active Sites" column, it can't be moved back to the "Favorite Sites" column using only the keyboard when it is in the top position of the "Active Sites" column. The keyboard interaction bugs effectively make it unusable for keyboard only users on the "Customize Tabs" page of the "My Workspace: Preferences" tool.

Here is a brief (1 minute) video of the issue:

I'm guessing the problem is because of the locked "My Workspace" entry in the "Favorite Sites" column is locked into position preventing the normal insertion of a site in first position of the "Active Sites" column's attempt to move into the "Favorite Sites" column.


The issue is 99% solved. However, there is no visual indication of focus when using the keyboard to navigate between sites in IE 9. In Firefox a dark black outline signifies the active site.

Recommended remediation:

provide visual indication of focus for active site in IE, similar to Firefox.
SakaiSAK-22748SAK-22747 Accessibility: Tabbing of of the "X" close icon in the more sites drawer closes the drawerThe more sites drawer in the neoPortal worksites menu closes when a user attempts to use a keyboard to move focus off of the "X" close drawer icon.

Why it's an issue:
The keyboard only user and screen-reader user should be able to navigate to and explore all of the controls in the more sites drawer. One common technique used by screen-reader users to learn about the available controls is by tabbing through them. The screen-reader user needs to be able to cycle through all of the options in a modal dialog simply by tabbing through them. Controls should never be activated simply by tabbing onto the control or by tabbing off of the control.

The only keyboard interaction that should activate the close icon to close the drawer is when the enter key is pressed while the close icon has focused. This will happen by default, as it is the default browser operation to activate the onclick handler on links and buttons when the enter key is pressed on them.

The following piece of code should be removed:

jQuery('#otherSitesMenu a').last().keydown(function (e) {
if(e.keyCode == 9 && !e.shiftKey) {
SakaiSAK-17891Upgrade to Tomcat 6We should spend some time investigating the deployment of Sakai on Tomcat 6, possibly for 2.8 or 2.9.



Stuck threads use excessive CPUClick here for more information.
SakaiSAK-18760Upgrade to Tomcat 7Since release of JPA2 and Servlets 3.0. More so because of Servlet 3.0 there are major changes anticipated in existing web frameworks as perhaps new frameworks are on the way. The most compelling feature seems to beAsynchronous processing support in Servlet 3.0. Since as of now there is no success of moving to tomcat 6 at least it is pre QA.
Sakai team could perhaps move to Tomcat 7 directly . It may take a short while for many web frameworks to catch up to tomcat 7 and there may be more child Jiras associated with this update/feature but it will significantly reduces technical debt of sakai.
SakaiSAK-18337container login with two buttons only works for the main portal pageWe're looking at support for CAS. But we have some users who aren't in CAS. I turned it on with two login buttons. It works OK for the main portal page. But if you go directly to a URL, you are sent to CAS. That won't work for people with local accounts.

The attached file has a prototype patch. I doubt you want to use it as is, but it will give you an idea of what needs to be done:

1) Login should go directly to CAS for the main portal, otherwise to xlogin.

2) Xlogin needs the two buttons, unless it's called from the main portal.

I do the two buttons as links. xlogin still has the local login form, but it starts out hidden. The local login button unhides the form using Javascript.This is almost certainly not the way you want to do it for real.

Of course this means that you don't get transparent SSO into URLs, which may defeat some of the reason to use CAS. My sense is that CAS may need a way to put an extra button on it that calls back to the application. Or possibly login should check for the cookie indicating a CAS ticket, and go directly to CAS if it finds one. (Of course that could cause problems for our privileged users. They may have a CAS ticket from another application, but want to login to Sakai as an admin.)

It seems to me that if we're serious about CAS it needs more thought.
SakaiSAK-21204My Workspace -> Preferences -> Notifications have missing keysOn the Notifications page, (My Workspace -> Preferences -> Notifications), Announcements and the Email Archive both have a "missing key"

Announcements: [missing key (mre): annc-noti-prefs prefs_description]
Email Archive: [missing key (mre): mailarchive-noti-prefs prefs_description]
SakaiSAK-22551need a way to bypass PDA hacking for RSF applicationwith Lessons 1.4 trunk, set agent string to IOS. Add comments to a site. Comments won't display.

We need to do an ajax call to Comments.html. It used to do /sakai/sakai-lessonbuildertool-tool/faces/Comments with an argument to tell my producer what site it is in. However with the newest RSF, RSF itself needs to know the site. The only way I've been able to do that is to use /portal/tool/NNNN/Comments. That works OK except that if the browser is IOS, the portal mangles the result. I tried using faces/Comments with various extra parameters to specify the tool ID, but couldn't find anything that works.

the situation is complicated because I'd like this to work with 2.8 without requiring sites to patch the core code.
SakaiSAK-22739Email template insert violate unique key and hence stops tomcat restartClick here for more information.


University of MichiganUMICH-614update MyCourses trunk pom files for latest Sakai artifact versionsMyCourses trunk cannot build with Sakai 2.9(.x). Several dependencies inside the pom.xml need update. coursemanagement-api is one example.
University of MichiganUMICH-590Site Types for creating new sites should not include Portfolios and should include GradToolsStudent sitesThe site-manage/site-manage-tool/tool/src/webapp/tools/sakai.siteinfo.xml should be modified to customize the default UM site types as follows:

<configuration name="siteTypes" value="course,project,GradToolsStudent" />
<configuration name="privateSiteTypes" value="GradToolsStudent" />

This UM custom changed was missed in the 2.7.2A upgrade and needs to be re-instated.

Until this regression is fixed, users are incorrectly given the option to create portfolio sites and are not given the option to create GradTools sites.

Note that for the 2.9 release, we can put modified tool registrations in ${sakai.home}/tools - thanks to KNL-342

Sakai 2.9.3 Changes

 Click here to expand...

Summary of Highlights
  • Over 100 Jira issues resolved!
  • AntiSamy security infrastructure is now on high setting by default (most secure setting). It was introduced in Sakai 2.9.2 but off by default until proven in production
  • WebDav - Improved WebDav-client support and compatibility
  • Gradebook API fix - A problem in the Gradebook API was introduced in 2.9.1 and discovered after the release of 2.9.2. It primarily affected Contrib tools (like JForum and Mneme) and when using groups with gradebook items, it also affected the Lessons tool.  SAK-23733 - Getting issue details... STATUS
  • Lessons - better support for multimedia types and compliance with software license requirements. The removal of the JW Player library, which had a license incompatible with ECL v2 (Educational Community License version 2, a variant of the Apache version 2 license).  LSNBLDR-216 - Getting issue details... STATUS
  • Lessons - better support for group management and sub-pages.  LSNBLDR-255 - Getting issue details... STATUS
  • Samigo Fill-in-the-blank question type did not properly handle student feedback if the instructor manually changed the student grade for the item.  SAM-973 - Getting issue details... STATUS
  • Assignments - instructor not able to assign grades for unsubmitted assignments when using groups - SAK-23755 - Getting issue details... STATUS
  • Help documentation updated 
  • Basic LTI changes - LTI - Release 2.1.1 Notes

List of Issues Fixed

T Key Summary

Sakai 2.9.2 Changes 

 Click here to expand...

Summary of Highlights
  • Over 160 Jira issues resolved!
  • Addition of AntiSamy security infrastructure (off by default until proved in production environments).
  • Support for Math symbols in the Rich text editor (aka CK Editor)
  • Institutional gradebook export function
  • Export of quizzes using IMS QTI browser is fixed for Chrome browsers (still works in other browsers)
  • Fix of serious WebDav bug which can result in data  exists in 2.9.0 and 2.9.1 was discovered and fixed. May occur when moving or renaming a file or folder.
  • Fixed Roster tool. Threw error in many sites after upgrade from 2.8 to 2.9.

List of Issues Fixed

T Key Summary

Sakai 2.9.1 Changes

 Click here to expand...

T Key Summary Component(s)

System requirements

 Click here to expand...

Operating system (OS) choices

Sakai is OS neutral. It is typically run on any of the numerous Linux distributions. Examples of common Linux distributions include as CentOS, Debian GNU/Linux, Fedora, Gentoo Linux, Red Hat Enterprise Linux (RHEL), SuSe Linux, Ubuntu. Sakai can also run on Mac OS X server, Microsoft Windows and Sun Solaris. Operating systems other than Linux are not nearly as well tested, and all of the community QA servers are running Linux, so this is generally the recommendation.


Sakai 2.9.0 has been tested most thoroughly with Oracle's Java SE 6, a.k.a. Java 1.6 . It also should be compatible with Java SE 7, aka Java 1.7 . Certain files, such as *.jsp and *.jws, require compilation so downloading and attempting to use only the run time environment (JRE 6.0 or JRE 7.0) will not suffice. If you find Sun's version and naming conventions confusing, see Sun Java SE Naming and Versions for an outline of their practices.


Oracle's Sun Java J2SE 5.0 (a.k.a Java 1.5) has completed the EOL process and is no longer supported. If are still running Java 1.5 please note that security vulnerabilities exist in JDK/JRE 5.0 updates 1.5.0_17 and earlier.

Application server choices

Apache Tomcat 7 is the recommended, and most thoroughly tested servlet container, and is most often used with a web server like Apache Http Server. Several schools run their Tomcats with Windows IIS and nginx proxies without issue. A few schools such as Hong Kong University of Science and Technology and the Universidad de Guadalajara report have deployed Sakai on JBoss, in the past. 

Sakai 2.8.0 and previous releases require Tomcat 5.5 out of the box but can be configured in custom builds to run under Tomcat 7. Tomcat 7 is the requirement for running Sakai 2.9.0+. There are some changes to the Tomcat configuration required to get Sakai to startup in the source or binary form under Tomcat 7. Please see this page for more information!

Websphere deprecated

In Sakai 2.7.0 a Websphere module was included in the release in order to facilitate deployment to a Websphere/Db2 production environment; however, support has waned and the Websphere option is currently considered deprecated.


Database choices

Sakai production installations typically run either Oracle 10g/11g or MySQL 5.1/5.5. It should be noted that Sakai is not limited to these database choices and integration with other RDBMS systems is not difficult. In the past at least one installation used Microsoft SQL Server while requests for PostgreSQL integration are occasionally raised on the Sakai developers list. However, to date no one in the Sakai Community has stepped forward to support alternatives to either Oracle or MySQL, a prerequisite for adding additional database options to the release.

IBM DB2 Deprecated

Support for IBM Db2 was added for the Sakai 2.7.0 release but for 2.8.0 DB2 conversion scripts were not updated or tested and are currently considered deprecated, including for 2.9.x.
A demo version of Sakai includes HSQLDB; it should never be deployed in production.

Clustering, file storage and load balancing strategies

A typical Sakai cluster is comprised of one or more application servers running one or more instances of Tomcat 7 operating either in standalone mode or behind the Apache HTTP 2.2 web server. Each Tomcat instance runs a full copy of the Sakai. The cluster is backed by a single database providing a transactional store of information.

Storing binary content outside the database is a configurable option in Sakai and highly recommended from a performance standpoint. Most Sakai schools with sizable user populations opt for network-attached storage (NAS) or storage area network (SAN) solutions. Load balancing is provided by Apache (using mod_jk, mod_proxy_balancer or mod_proxy_ajp) or dedicated hardware solutions such as F5 BIG-IP, NetScaler or Zeus.


External Authentication choices

The Sakai can integrate with a variety of external authentication services including CAS, Kerberos, LDAP, Shibboleth and WebAuth.

Integrating with student information systems

Sakai Community institutions have integrated their Sakai installations with Banner, Datatel and Peoplesoft as well as a variety of home-grown student information systems (SIS).

Sakai has two basic approaches to integrating data from external systems. Most sites use a combination of these approaches. The first approach is to use the internal Sakai "provider" APIs. These APIs are places for Sakai to "consult" while Sakai is running. There are APIs for User Identity, User Directory, Course Listing and User Roles.

User Identity API: allows Sakai to call local code to validate users when they log into the system. This commonly uses Kerberos, Active Directory or LDAP to validate the user's credentials.

User Directory API: allows user information such as name and e-Mail address to be retrieved from an external system such as LDAP or X.509. The User Directory API has provisions to allow the local site to make decisions when to display student information in order to meet FERPA requirements. Each institution has different interpretation of FERPA so the precise FERPA decisions are delegated to the User Directory API.

Course Listing API: consulted when the instructor is creating a course site - this API returns the list of externally stored rosters for which the current user is the instructor. The user can select from one or more of these external rosters to associate with the course they are creating.

User Role API: is consulted when users log in to determine which external rosters they user is a member of and what their role is within those rosters. The Sakai internal configuration is updated if there are any changes to an individual's roster status.

The above API's are "pull" APIs--they are consulted when the user logs in or tries to take some action. The Course List API described above does not auto-populate courses.

If there is a desire to "push" information into Sakai there are two approaches - Quartz and web services.

Sakai utilizes an internal batch system called Quartz that provides a cron-like capability within Sakai. Quartz is used by creating a Java class that does the necessary work and then having Quartz schedule the regular execution of that Java code.

A more common approach to pushing configuration information into Sakai is through web services. Any of Sakai's APIs can be accessed by web services. Web service access points have been developed for many of the common Sakai APIs used for configuration. These SOAP web services can be called from PHP, Python, Perl, Java, .NET or any other language. Sakai web service data structures are kept simple to insure the widest possible interoperability with as many languages as possible. Administrators often build scripts to pull data from their SIS system and populate Sakai with that data. These scripts may be automated using cron or manually executed by the administrator at the proper time during a semester.

This combination of pull/push configuration capabilities allows for a very wide range of integration possibilities for the Sakai.

Browser compatibility

Sakai 2.9 is designed to work with modern browsers. You should be safe with the latest versions of Firefox (Mozilla), Safari (Apple), Chrome (Google), and with IE 10, IE 9 (Microsoft Internet Explorer aka IE) and IE 8. Sakai CLE does not work with IE 7 and earlier nor with Firefox 10 and earlier.



 Click here to expand...


Download Info

For information about downloads please see the release page:


There are two ways to acquire Sakai source code. You can choose to download a packaged *.zip or *tar.gz file from Sakai's release page or check out the code directly from our code repository using Subversion's (SVN) source control management system.

Demo archive
The Sakai Demo is a pre-built version of Sakai with Apache Tomcat and a simple configuration, perfect for a quick and easy demo of Sakai. The demo is NOT intended for large scale implementations. It is suitable only for evaluating the software and running small pilot implementations on a single server.

Binary archive
The Sakai Binary is a pre-built version of Sakai without Apache Tomcat, jar dependencies, or extra configuration files. Download the Binary release if you want to just drop the Sakai bundle into a pre-existing Tomcat environment.

Source archive
The Sakai Source includes Sakai portal, tool and service source code. Start from Source if you plan to make any code-level changes to your Sakai system.

Source checkout
Sakai source code can also be checked out anonymously from our SVN repository. The latest development work is located in /trunk; stable releases can be found in /tags, while maintenance, experimental and other work are located in /branches.

For example, to checkout a stable Sakai 2.9.1 release tag issue the following Subversion terminal command:

svn co sakai-2.9.1

Maintenance branch
The latest bug fixes for a particular release can be found in our maintenance branches. Please note that certain maintenance branch fixes require database schema changes. You can check out the maintenance branch by issuing the following Subversion terminal command:

svn co sakai-2.9.x

2.9 Indies

Information on 2.9 indies can be found here: Indie release order - 2.9

Information on 2.9 indies can be found here: Indie release order - 2.9


 Click here to expand...


Installation tip

Sakai is highly customizable for your local institution's needs It is recommended that you review the default Sakai properties to get the most out of your experience. Comments explaining the properties often point to a more detailed explanation in Jira.

Default Sakai Properties for 2.9.3 

Default Sakai Properties for 2.9.2 

Default Sakai Properties for 2.9.1

Default Sakai Properties for 2.9.0

Demo install

Sakai 2.9 install guide (demo)

Binary install

Sakai 2.9 install guide (binary)

Source install

Maven Build and Deploy (2.x - 3.x)


Lessons tool - special installation instructions

Lesson tool

Sakai 2.9.3
For large installations with a million Lessons items or more, Lessons may break since the id generated cannot go high enough. To fix you can use the following statements. Please see LSNBLDR-284 - Getting issue details... STATUS for more information.

alter table lesson_builder_items modify gradebookId varchar(100); 
alter table lesson_builder_items modify altGradebook varchar(100); 

alter table lesson_builder_items modify gradebookId varchar2(100 char); 
alter table lesson_builder_items modify altGradebook altGradebook varchar2(100 char);

Sakai 2.9.4 (and a note about Lessons with 2.8.x)


If you are running the Lessons that comes with Sakai 2.9.x, database upgrades are handled automatically. No special instructions are needed.


 If you install Lessons yourself, we recommend using the most recent tag. This is currently 1.4.2.  If you install it yourself, you need to be concerned about database schema updates.  We recommend starting once with auto.ddl on. That will handle most database updates for you. The exceptions are in the following files:

 If you are moving from a copy of lessons older than the 1.4.0 tag:

* simplepage.pre29-to29.sql

If you are moving to the 1.4.2 tag from any previous version, and are using mysql: 

* simplepage.for-2.9.2.sql [mysql only] 

If you are unable to use auto.ddl, see the README files in the Lessons source. It will explain how to generate a database update script to go between any two versions of the source.

For the convenience of sites running 2.8, we generate binaries for 2.8. See


Deprecations, Removals and Warnings





2.9.0Citations/Google Scholarretired
Google has discontinued Sakai support in Google Scholar with the new Google Scholar UI introduced earlier this year. This was confirmed directly with Google. For more information, see a sakai-dev post from May 2012:
For now, the problem can be fixed by adding a "sciui=2" parameter to the Google Scholar URL to force the old Google Scholar UI, but it's not clear how long Google will keep the old interface available.
2.9.0NeoChatdisabledNeoChat is a new feature in 2.9.0. We recommend leaving neochat disabled in a production environment until performance and usability tests are completed

Open 2.9-related issues worth noting





Issue documentation SAK-22891 - Getting issue details... STATUS Sakai's context sensitive help was not updated in 2.9.0 and therefore contains the 2.8 release help information. creation SAK-22994 - Getting issue details... STATUS Worksite Setup tool won't display extra site types from SiteTypeProvider during the new course site creation
2.9.0Conversion script issueSamigo (Test and Quizzes) SAM-787 - Getting issue details... STATUS Not all languages are included in the conversion at this time, only English, Spanish and Catalan.
2.9.0n/aFirefox browser with WebDav instructions SAK-22588 - Getting issue details... STATUS Links to OS specific instructions don't work on Firefox. Mozilla issue, not a Sakai issue. w/noteSwitching languages may require clearing browser cache SAK-22568 - Getting issue details... STATUS Some Sakai features require clearing your browser cache for the change to be reflected.
2.9.0no fix for Citations Helper plannedCKEditor - Some plugins not supported

SAK-17886 - Getting issue details... STATUS

SAK-21667 - Getting issue details... STATUS

Currently Citations Helper and Entity Picker plugins are not supported in CKEditor. It's expected that iSyllabus SAK-22283 - Getting issue details... STATUS will replace the functionality of

the Entity Picker, but no news on what will happen with Citations.

2.9.0 CKEditor - Configuration Changes SAK-22113 - Getting issue details... STATUS

Because we wanted to try to make it easier to configure CKEditor via an external file, the ckeditor.launch.js configuration for external plugins moved to the bottom of the file, and external plugins

have their own folder in "ckextraplugins". These include wordcount, an updated movie player and support for After The Deadline (if you set up the server) in Mysql Conversion Script SAK-22911 - Getting issue details... STATUS MFR_AREA_T is wrong case and can cause issue in conversion script, use conversion script in trunk or 2.9.x
2.9.3 Samigo SAM-2201 - Getting issue details... STATUS AssessmentGradeInfoProvider isAssignmentDefined results in many thousands database queries

Heads up for planned changes post 2.9.0 

2.10Events SAM-658 - Getting issue details... STATUS Major change to events.


Open 2.x tickets

For listings of all open 2x-related issues see:

Blocker Critical Major Minor, trivial


 Click here to expand...


Upgrading from an earlier version of Sakai typically involves a database conversion (for which scripts are supplied with the release), an update to custom skins and possibly changes to any custom code.

1.0 Database Conversions

A database conversion is typically required in order to upgrade from one Sakai version to another. Database conversion scripts - in distinct versions for MySQL and Oracle, respectively - are found in the reference/docs/conversion folder of the release or in our SVN repository.

In the same directory you will also find conversion scripts for earlier Sakai releases. Migration from an earlier version will require the successive application of all intermediate scripts (see the following table). You cannot, for example, move from 2.6.1 to 2.9.0 by applying a single script. You will need to run 6 or 7 scripts all in a row.

(warning) Note for oracle, some of the scripts will leave your indexes in an invalid state because of LONG->CLOB conversion. You will need to run this script to find the invalid/unusable indexes, THEN run the result of this script to alter these indexes.

select 'alter index '||index_name||' rebuild online;' from user_indexes where status = 'INVALID' or status = 'UNUSABLE'; 
-- Run the resulting SQL commands this script generates if any)

(warning) As a general rule, be sure to read through the conversion scripts before applying them. The conversion scripts are generic in the sense that they do not take into account any special customizations you may have made - such as new roles, or the deployment of additional tools or if you are migrating from 2.4.x - and they may complicate your migration with unintended consequences if you execute them blindly.

(minus) For conversions prior to 2.6 please see the 2.8 install guide. Conversions from much older are not very well supported or tested but should still work.


Upgrade Step







Use scripts updated in 2.6.x branch (r65964+). Include fixes for SAK-16751 - Getting issue details... STATUS , SAK-16753 - Getting issue details... STATUS and SAK-16809 - Getting issue details... STATUS . If you are upgrading from 2.5 please review SAK-15597 - Getting issue details... STATUS for an important property setting issue (not a database conversion issue).

2.6.0 to 2.6.x



SAK-16668 - Getting issue details... STATUS : if you upgraded to Sakai 2.6.0 PRIOR to 1 Sept 2009 you must run this conversion to update data types in ASN_MA_ITEM_T and ASN_NOTE_ITEM_T.

2.6.0 to 2.6.x



SAK-17219 - Getting issue details... STATUS , SAK-16548 - Getting issue details... STATUS : Matt Jones (UMich) reports that the original 2.6.0 to 2.6.1 conversion script for the assignment_content table "is inefficient, potentially locks tables and performs too many scans, especially if there are hundreds of thousands of rows." Matt has revised both the MySQL and Oracle conversion scripts to improve their performance.

2.6.0 to 2.6.x



SAK-16847 - Getting issue details... STATUS : adds asn.share.drafts to SAKAI_REALM_FUNCTION.

2.6.0 to 2.6.x



SAK-10512 - Getting issue details... STATUS : updates existing entries in SAKAI_PERSON_T setting the field locked to false if currently NULL.

2.6.0 to 2.6.1



Rollup of 2.6.0-2.6.x conversion scripts 001-004 above.

2.6.1 to 2.6.2



no schema changes

2.6.0 to 2.6.x



SAK-14482 - Getting issue details... STATUS : replace the "mercury" site's sakai.assignment tool (deprecated since 2.5.0) with the sakai.assignment.grades tool.
















2.7.1 to 2.8.0 database conversion.




Starting up sakai-2.8.0 in order to populate an empty database (auto.ddl=true) can result in certain tools relying on Hibernate to generate indexes to fail to do so. Check database and then run this script to add missing indexes.

2.8.1sakai_2_8_0-2_8_1_mysql_conversion.sqlsakai_2_8_0-2_8_1_oracle_conversion.sqlConversion from 2.8.0 to 2.8.1 can result in lost mail messages. See SAK-21305 - Getting issue details... STATUS for details on how to fix.This should only affect cases for which 2.8.0 was actually RUN in production, not if 2.8.0 is just one step in your upgrade process.
2.9.0sakai_2_9_0_mysql_conversion.sqlsakai_2_9_0_oracle_conversion.sqlFor languages other than English, Catalan and Spanish please see SAM-787 - Getting issue details... STATUS .






LTI 2_1_0_mysql_conversion.sql







10.0sakai_10_mysql.sqlsakai_10_oracle.sqlPlease note, the Oracle conversion scripts should be taken from trunk at the moment, including for the conversion to 10.0 - Neal Caidin - 14-October-2014
10.2no conversion needed for MySqlsakai_10_1-10_2_oracle_conversion.sql 
10.3no conversion needed for MySqlsakai_10_2-10_3_oracle_conversion.sql 
10.4no conversion needed for MySqlno conversion needed for Oracle 

2.0 Other Database Conversions

Sakai also includes data and schema conversions outside the standard scripts to address data integrity issues for assignments, content hosting and email archive. Below is a quick summary and overview of the process for each tool.

2.1 MailArchive conversion (2.5 -> 2.6)

SAK-13584 - Getting issue details... STATUS , SAK-16554 - Getting issue details... STATUS : Sakai 2.6 improvements to the Message API require that implementers upgrading from a pre-2.6 version of Sakai run both the 2.6.0 conversion scripts and a second script that can be found in the mailarchive module in order to update your existing mail archive data to take advantage of the 2.6 Email Archive performance improvements.
-- SAK-13584 Further Improve the Performance of the Email Archive and Message API. Note you have to run a bash conversion script on your old mail archive data for it to
-- appear in the new mail archive. The script is in the source as Please see the SAK for more information on this script or SAK-16554 for
-- updates to this script.
 	  	        SUBJECT                   ASC
 	  	        SUBJECT           VARCHAR (255) NULL,
	  	        BODY              LONGTEXT NULL

2.2 Assignments Tool conversion

(warning) This conversion was a part of the post-2.4 assignments branch so those migrating from a version already running this can disregard this step.

SAK-11821 - Getting issue details... STATUS : The assignment service previously permitted the creation of duplicate submission objects (i.e. two or more submissions for the same student and assignment). While the UI should prevent this from happening, at various stages in the evolution of the Assignments code, bugs, race conditions or other failures have led to duplicate objects being created. This conversion seeks to reconcile those duplicates and add database constraints to prevent this is the future.

In summary, the conversion script is necessary to

  1. Remove existing duplicate submission records, if any
  2. Prevent future submission duplicates by applying unique constraint on the ASSIGNMENT_SUBMISSION table
  3. Improve performance of the Assignment tool

The conversion script does the following to the existing ASSIGNMENT_SUBMISSION table in Sakai database:

  1. read in all tuples as AssignmentSubmission object, parse out data such as submitter_id, submit_time, submitted, and graded, and stores those attributes as separate columns in the ASSIGNMENT_SUBMISSION table;
  2. Runs though the table, combine and remove submission duplicates (tuples with same "context" and "submitter_id" combination);
  3. apply the unique constraint of "context" + "submitter_id" to ASSIGNMENT_SUBMISSION table.

There is a README file with detailed instructions on this process at

2.3 Content Hosting

Migrating from 2.4 to 2.5 requires adding several columns to the database tables used by the Content Hosting Service (the service used by the Resources tool, Dropbox, filepicker and WebDAV). The conversion scripts contain DDL statements to accomplish those changes. You need to run these conversions scripts (or perform the equivalent operations manually) and then convert your existing Resources via one of the methods outlined below, before you will gain the performance improvements Sakai 2.5 offers.

The new columns added to the database tables support a switch from XML serialization to "binary-entity" serialization, and enable Resources to perform faster and use less memory. One of the key areas this impacts is improving the performance of quota calculations.

There are two methods for converting existing Resources, with the first being the recommended option, as it enables all performance improvements when completed:

  1. Run the conversion utility, which can be run on a live system. (See readme for more details.)
    • (warning) Systems running oracle should read the email threads copied to the comments section below.
  2. Let the code convert each Resource as it is accessed.
    • (warning) This is only recommended for implementations with small datasets, such as pilot deployments; otherwise you should use the above conversion utility.
    • (warning) While some performance benefits from the binary-entity serialization can be realized immediately using this method, others, such as the quota calculation improvements will not be available until all Resources have been accessed and converted.

Based on the state of the data in the Content Hosting Service tables, it will start up in one of two modes:

  1. Binary only - If the code detects on start-up that all of the XML fields are null – as would be the case after running the conversion utility – it will run in binary mode. The means the system will only read and write using binary-entity serialization, and you will be able to fully realize all the performance enhancements that it offers.
  2. Dual mode - If the code detects there is still data in the XML fields – as would be the case if the conversion utility has not be run – it will run in dual mode. This means the system will be capable of reading both XML-serialized and binary-entity-serialized resources, but will write using only binary, and will convert any XML data it encounters into binary data. This gives you some of the performance benefits of binary-entity serialization without running the conversion utility, but you will never get the quota-calculation improvements unless all Resources end up converted.

3.0 Portfolios (OSP) permission settings

OSP was turned off by default in Sakai 10 and removed entirely in Sakai 11.

SAK-13205 - Getting issue details... STATUS : if you are upgrading from a pre-2.5.0 version of Sakai, then you need to force conversion of the OSP permissions by setting osp.upgrade25=true in your file. (See also discussion.)

4.0 The Link Tool has been removed starting with Sakai 10

5.0 Upgrading the Sakai skin

 Sakai skin

Guide to creating skins for Sakai 2.9 and Sakai 10

This guide will help you tailor the Sakai 2.9 appearance.  It will walk you through the process, listing out the options, pointing out the decisions you will need to make to better fit the needs of your institution.

Although presented as a skinning guide, since what you want to use and how you want to use it is also in the mix, we will be covering a bit of what functionality is involved. Instead of a separate guide for Sakai 10 - will add an addendum for that version.

Sakai 10 Addendum

Incorporate the changes below into your skin. Another alternative is to just proceed as below for 2.9 by copying the Sakai 10 /neo-default skin and editing it. This may be more attractive option if your 2.9 skin is a minimal departure from the default 2.9.

Note: If you are upgrading from 2.8 or 2.7 to 10, just use the 2.9 guide. The addenda will not be needed.


The biggest change involved changing the individual tool menu definitions to use sprites. In order to do this the portal markup needed to be changed. See the Subversion tab at:

SAK-23463 - Getting issue details... STATUS

The easiest possible thing may be to apply the /reference diffs to your skin, or maybe even do it manually. They are extensive, but well defined/contained. Not making these changes will result in strange looking menus. 

Other minor issues

Some of these have made it into the 2.9.x branch, so you may have already addressed them. Again - take a look at the subversion tab to see what changed.

SAK-23528 - Getting issue details... STATUS  - avoid overlapping x in presence window in IE8

SAK-23540 - Getting issue details... STATUS   - fix display of "more sites" panel for unregistered users

SAK-23089 - Getting issue details... STATUS  -  style update to avoid text wrapping in file selector

SAK-23820 - Getting issue details... STATUS  - better login screen for smaller devices

SAK-25531 - Getting issue details... STATUS SAK-24418 - Getting issue details... STATUS SAK-26185 - Getting issue details... STATUS  - various changes to the portal tutorial tool

SAK-22651 - Getting issue details... STATUS  - small change to make reordered more usable to keyboard only users

SAK-25826 - Getting issue details... STATUS  - direct link panel rendering changes

SAK-25977 - Getting issue details... STATUS  - contain images rendered in portlets to avoid cropping and/or scrollbars

Finally, the default Sakai 10 skin is a flat skin with no gradients. To take a look at the small changes that make up this see:

SAK-26207 - Getting issue details... STATUS SAK-26185 - Getting issue details... STATUS SAK-26207 - Getting issue details... STATUS SAK-26277 - Getting issue details... STATUS






Sakai 2.9.2 Addendum

A wrapper for single column tools was added for 2.9.2 to avoid float drops when using the portlet version of the web content tool.

<div id="innercontent">

The corresponding css should be added to the portal.css of your institution. In neo-default it is:
/* second wrapper for content - needed by SAK-12563 */
#innercontent {
    float: left;

Sakai 2.9.1 Addendum

There were several changes to the markup and/or the skin for 2.9.1, as well as some things I ran across when I was making a skin for Michigan. These will be listed here. I will get to them 05/25/13.

Old portal  (defaultskin)

You may have excellent reasons to choose the old portal that will run in 2.9 with no problem. If so, please refer to the guide for 2.8 [1]. The good news is that not much has changed in 2.9 for defaultskin, so there will be almost nothing to adapt from your 2.8 installation, and only a little from 2.7. The bad news is that little has changed.

New portal (neoskin)

The new portal represents a substantial departure in Sakai.  You will not be able to edit your 2.7 or 2.8 skin and produce a 2.9 neo portal skin without going mad. The good news is that the 2.9 neo portal is the simplest, best documented and most skinnable portal yet.

Neo portal functional choices

If upgrading from 2.7 (or want to reexamine the choice you made for 2.8) these are some things that have an impact on appearance. 

  • Enable the role switcher? For what types of sites? For what roles? What values? [2]
  • Enable the timeout alert? With what time value? [3]
  • Enable collapsible side menu? [4]
  • Categorized “more sites” drawer? or flat?
  • Portal chat? Not enabled in 2.9 by default.

Features that may make it into 2.9 or that you may consider merging in.

  • Portal tutorial [5]
  • Direct link and URL shortener 

Skin choices

  • One skin or several? If several you may consider having a primary theme, and others that are just variations.
  • Need to differentiate site types? Do you have courses, projects, tutorial, and/or other site types and need to subtly make them different? [6]
  • Do you want to make the gateway quite different? [7]
  • What login will you be using? Login internal to Sakai, some CAS login? Both?

Getting started

Get a UX person with a strong practical design experience to work with! Then sequester yourselves and produce some options that your stakeholders can check out. Do not get committees involved, life is short (and ars longa). Here is a simple guideline: everything is skinnable, but some things are easier than others. We will get to this soon.

The mechanics

If you are primarily a front-end developer download the demo version of 2.9 that you can download, unzip and run with a few clicks.  To get the demo version – go to the release page for Sakai 2.9 and download and unpack it. As of this writing there is no demo version yet because it has not been released - will update this when that happens.

Start the demo server, this will expand the files we are interested in so that you can work with them.

The skin files are contained in <server folder>/webapps/library/skin:

Skins for defaultskin rendering engine

  1. default (default skin for defaultskin rendering engine)
  2. default-horiz
  3. examp-u
  4. gen-u
  5. oae
  6. rtl
  7. some-u
  8. ux

Skins for neoskin rendering engine 

  1. neo-default (default skin for neoskin rendering engine)
  2. neo-default-horiz
  3. neo-default29 (deprecated)
  4. neo-examp-u
  5. neo-gen-u
  6. neo-oae (for use in hybrid environments with OAE)
  7. neo-rtl
  8. neo-some-u
  9. neo-ux (deprecated)

and an images folder, as well as tool_base.css

Of the skins for the neoskin rendering engine neo-default29 and neo-ux are not supported and are included just for historical reasons. Note: The default and neo-default skins are required for some things to function correctly (x-login, site info display), do not delete.

Each skin has the following structure.


images (folder containing images used by the skin)
portal.css (styles the portal – will be doing most work here)
pda.css (for the mobile portal)
tool.css (styles the tools, overriding or filling gaps in tool_base.css)
access.css (no need to bother with this) [8]
portalchat.css (no need to bother with this) [9]

Choosing a skin to start of from
  • Browse to your server at http://localhost:8080/portal, login as admin (pwd: admin).
  • Create 7 sites.
  • Go to Administration workspace and in the Sites tool given them all different skins - use the list below, but omit the neo- prefix - the portal will add the correct link because you are using the neo portal.

Available and supported skins are (use text below):

  • neo-default
  • neo-default-horiz
  • neo-examp-u
  • neo-some-u
  • neo-gen-u
  • neo-rtl (if you are working in a right lo left language context)
  • neo-oae
Here are some screenshots:





neo-gen-u (embarrasing!)






Now you can navigate to the different sites and examine the different skins. Some may be closer to your design than others. Choose the one that seems like the best candidate. Since the portal changes quite a bit depending on whether you are logged in or not you should check it out as a “not logged in” user:

  1. go again to the Admin Workspace
  2. go to Sites
  3. find the!gateway site and click on the link
  4. give it the skin you are checking out
  5. log out and examine the logged out page with this skin.       
Setting up a new skin

For simplicity’s sake, we are going to assume you have selected neo-default as the skin you are going to use as your base.

  1. Copy neo-default skin folder, rename. Make sure your new skin folder name has a “neo-“ prefix.
  2. Stop the server
  3. Edit <your_server_location>/sakai/
  4. Search for word “skin”
  5. Make sure that skin.default=<your_new_skin_name minus the "neo-" prefix>
  6. Restart the server – now all sites and any new sites will use your skin (change the!gateway site to it if you did it following instructions above)
Some useful tools
  • Firebug: essential [10]
  • CSS Editor (syntax coloring, auto formatting, syntax completion, something like Aptana [11])
  • CSS validator [12]
  • Gradient [13], box shadow [14] and border-radius [15] generator.

The basics (about 1-2 hours all told, really)

We are going to add a few logos, change the palette.  Line numbers and affected CSS of neo-default/portal.css are included. The selector is also included so that you can search on it.


The logos in your new skin display at the top left both in the gateway and the logged in portal (below the logo on left, over a gradient for the navigation bar, and at right the current site tab):

Create a logo with a transparency (png recommended). Call it logo.png, put in your_skin/images.The original logo.png is 80 wide, 43 high. The bounding box is 100 x 50.  You can tweak both dimensions a little bit as needed. The CSS for this starts in line 132 of neo-default/portal.css for the gateway:

#headerMin #mastLogo {
    display: block;
    background-image: url(images/logo.png);
    background-repeat: no-repeat;
    background-position: 8px 4px;
    float: left;
    width: 100px;
    height: 50px;

and in line 330 for the logged in user:

#linkNav ul.topnav {
    list-style: none;
    padding: 8px 0 5px 155px; /* matches the width of the toolMenu*/
    margin: 0;
    width: 100%;
    background: transparent url(images/logo.png) 8px 4px no-repeat;
Palette: portal

For the palette in general there are a number of places in neo-default/portal.css that you need to touch. A lot of them could have been grouped/refactored, but were left duplicated in the default for clarity. Below only those places that you need to change because they play nicely with the Sakai palette but may not be too complimentary with yours. You can make more changes if you want of course.

Top bar is a gradient defined in lines 98-107:

#headerMax, #headerMin {
    background: #009DCE;
    background: -moz-linear-gradient(top, #009DCE 0%, #007EA5 100%);
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#009DCE), color-stop(100%,#007EA5));
    background: -webkit-linear-gradient(top, #009DCE 0%,#007EA5 100%);
    background: -o-linear-gradient(top, #009DCE 0%,#007EA5 100%);
    background: -ms-linear-gradient(top, #009DCE 0%,#007EA5 100%);
    background: linear-gradient(top, #009DCE 0%,#007EA5 100%);
    border-bottom: 1px solid #007194;

Use the gradient generator [13] to create a gradient that meets your branding needs. Paste your gradient code in the declaration above.

Important note:
realize that this leaves IE 8 with a flat color. If you are ok with that, do check that the flat color (the background: #009DCE above) is appropriate and provides a good contrast. If not (you have a large installed IE 8 base), use background images. The use of IE filters is not recommended.

Current site tab (the "Administrative" button in above screenshot) is defined in 357-369.

ul.topnav li.nav-selected {
    background: #008DB9;
    background: -moz-linear-gradient(top, #008DB9 0%, #007194 100%);
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#008DB9), color-stop(100%,#007194));
    background: -webkit-linear-gradient(top, #008DB9 0%,#007194 100%);
    background: -o-linear-gradient(top, #008DB9 0%,#007194 100%);
    background: -ms-linear-gradient(top, #008DB9 0%,#007194 100%);
    background: linear-gradient(top, #008DB9 0%,#007194 100%);
    border: 1px solid #005A76;
    -moz-border-radius: 3px;
    -webkit-border-radius: 3px;
    border-radius: 3px;

Aside from the gradient you may want to supply a border that matches it.  The same border color can be used for the tab hover rendering beginning in line 350:

 ul.topnav li.nav-menu:hover, ul.topnav li.more-tab:hover {
    border: 1px solid #005A76;
    -moz-border-radius: 3px;
    -webkit-border-radius: 3px;
    border-radius: 3px;


Login form elements also make use of gradients in 196-210:

 #loginLink1, #loginLink2, form#loginForm input#submit {
    display: block;
    border-radius: 5px;
    padding: 4px 6px;
    text-align: center;
    text-decoration: none;
    background: #008DB9;
    background: -moz-linear-gradient(top, #008DB9 0%, #007194 100%);
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#008DB9), color-stop(100%,#007194));
    background: -webkit-linear-gradient(top, #008DB9 0%,#007194 100%);
    background: -o-linear-gradient(top, #008DB9 0%,#007194 100%);
    background: -ms-linear-gradient(top, #008DB9 0%,#007194 100%);
    background: linear-gradient(top, #008DB9 0%,#007194 100%);
    border: 1px solid #005A76;

and their :hover states in lines 214 & c.

#loginLink1:hover, #loginLink2:hover, form#loginForm input#submit:hover {
    background: #007194;
    text-decoration: none;

Again – replace colors as needed, with a gradient, a flat color, or background images.  This controls the login elements, no matter what login configuration you are using.

The tool menu is very neutral color wise. The exceptions here are the hover state and the “current tool” state

The first one is a gradient value for the following selector in lines 759-779:

#toolMenu li a:hover, #subSites li a:hover, #toolMenu li a:focus, #subSites li a:focus {...}

The “current tool” is just a color value for the selector in lines 731-734

#toolMenu li.selectedTool a {}



Note: the tool menu can also be minimized, the “current tool” rendering is at lines 1546 & c with the selector

.sakaiMinimizePageNavigation #toolMenu li.selectedTool a, .sakaiMinimizePageNavigation #toolMenu li a:hover, .sakaiMinimizePageNavigation #subSites li a:hover,.sakaiMinimizePageNavigation #toolMenu li a:focus, .sakaiMinimizePageNavigation #subSites li a:focus {
    background: #9cd1e8;

You will also need to touch the buttons on the “more sites” tray. To see this you will need to create at least 10 sites.  Easiest way to do this is to go to one of your sites and Site info > Duplicate and then visit the “More sites” will then see something like this:

The site button rendering is defined in lines 565-585 of this selector:

ul#otherSiteList li, ul.otherSitesCategorList li {

The hover state of the “Other sites” menu (that contains the View all Sites, Add New Site) is a Sakai blue that you can change in lines 540-542 for this selector:

#otherSitesMenu li a:hover, #siteStatus a:hover, #siteStatus a:focus {

You will want to change the site status box and children, available in lines 822-843.  For the following selectors:

#siteStatus {

#siteStatus a {

They affect color of text and color of link in the capture below:

The “Unpublished Site” text and the “(Publish Now)” link appear on unpublished sites. To display, go to a site, thenSite info > Manage Accessand change to leave as draft.

Notice the minimize control on the left, also a nice Sakai blue. The easiest thing to do would be to open it in Photoshop and grey-scale it.

Also – if you look at the above image you will see the double arrow reload icon. That and the help icon that are displayed in the tool title bar are images that live at skin_name/images (reload.gif and help.gif, as well as their hover state analogues reload_h.gif and help_h.gif). Substitute with any other image (gif or png) as long as you stay with the same dimensions if the Sakai blue does not agree. If you take a look at the neo-some-u skin you will see that they have been greyscaled.

Finally, there is the tool title. In the default skin there is a thin Sakai blue line at the bottom.

that you can change to suit in lines    51-62:

#col1of2 .portletTitleWrap, #col2of2 .portletTitleWrap {

#col1of2 .portletMainWrap, #col2of2 .portletMainWrap {

#col1 .portletTitleWrap {

And that is it for the portal!  

Palette: mobile portal

Sakai has a simple mobile portal you can see if you go to:


The palette there is fairly simple.  Let’s take a look. All line and selector references are to neo-default/pda.css


The only three areas of concern are:

  1. the top bar gradient blocked in yellow at right  (lines 39 &c, 259 & c)

#pda-portlet-menu {

The footer (scroll down to bottom to see) looks like the header in neo-default, but you can make it different - see lines 230 &c and 355 &c.

#pda-footer {

2. The regular buttons (blocked in red), lines 90 &c,

#pda-portlet-menu li.loginLink,#pda-portlet-menu li.logoutLink, #switch-link-w,.helpLink {

3. The only tricky one is the back button blocked in purple at right. What I did was screenshot a regular button, Photoshop liquefy the left edge to make it pointy, slice the resultant image in three, making them backgrounds to the<li>, the<span>and the<a>that altogether make up the button. Take a look at the CSS in lines 68-89. Pretty horrible!

Important note: the pda.css serves two types of clients, small mobile webkit, and everything else. The experience of an iPhone or an Android default browser will be quite different than the one of an iPad or a regular browser. Taking care of the three items above will do the job - but do test with

  1. any/all of the browsers Sakai tests on
  2. an iPhone, Android device, or iPhone/Android emulators
Palette: tools

The default palette for the tools has been kept fairly neutral as well, but there are some things you may want to touch. The following references neo-default/tool.css

Standard links (lines17-30).

A-historical links (lines 42-49) - these are links that have an href="#" so click one and all look visited. For ever. So we male a:link and a:visited the same color:

.specialLink a:link, .specialLink a:visited {

.specialLink a:hover {

Item links (76-90 – create an announcement and see the list):

.itemAction a, .itemAction a:link {

Tool toolbar links

.navIntraTool a, .navIntraTool a:link { (lines 109-119)


.navIntraTool a:link:hover, #actionToolbar a:link:hover {  (lines 702-704)

You might want to change the color of links that appear in table headers as well. In neo-default they are black (see below). If so, the relevant CSS is here:

.listHier th a:link, .listHier th a:visited {
    color: inherit;
    text-decoration: none;

as well as the table header sorting link hover (which is Sakai blue in neo-default)

.listHier th a:hover {
    color: #a00000

Finally – there are some background colors that may not marry well to your institutional palette:

Table row treatments:

The light blue for a selected row is at lines 396-398:

tr.selectedSelected {
    background: #eff

the darker blue hover is at lines 334-336:

table.lines tr:hover {
    background-color: #DEEEFF

Finally, button types of things have the Sakai color as well in the labels. To change this, edit the declaration of this selector at line 1155:

input[type="submit"], input[type="button"] {

. . . . . . .

color: #2683BC !important;

And that is it! It will be a good idea to spend a few hours poking around to see if these few changes meet your needs, and where you see something you feel must be changed, locate where in the CSS it needs to change with Firebug help. Keep in mind that you have 3 areas with 3 sheets: portal (portal.css), tool (tool.css) and mobile (pda.css)

Getting more involved

Adding a mast head

If your design needs a masthead you can add it.


There are many different canvases that can carry this. If we take a look at the above example (neo-some-u/portal.css) you can see that the Rosie the Riveter image and the text comes from lines 138-146.

 #mastBanner {
    background: url("images/logo_back.png") no-repeat scroll 0 0 transparent;
    float: left;
    height: 95px;
    width: 390px;
#mastBanner img {
    display: none;

In the default skin #mastBanner is hidden. Here it is displayed, given a height and a width and a background image referenced.

The parent container #mastHead  (lines 117-122) sets up the background color and provides a height (the children are all floated, so an explicit height is needed for the parent container):

#mastHead {
    clear: both;
    display: block;
    background: none repeat scroll 0 0 #F4BC2D;
    height: 95px;



In this horrid example from neo-default-horiz/portal.css we are using two canvases (#mastLogo and #mastBanner) that were hidden in the default skin; here is a screenshot from Firebug displaying the structure:

#mastLogo  produces the Cthulhu head:

#headerMax #mastLogo {
    display: block;
    background: transparent url(images/logo.png) 4px 0px no-repeat;
    width: 100px;
    height: 100px;

Note the absolute positioning that allows the unearthly tentacles to drape over the navigation bar menacingly.

#mastBanner produces the mythic university text:

#mastBanner {
    width: 450px;
    height: 100px;
    float: left;
    margin-left: 0px;
    background-image: url(images/banner.png);
    background-repeat: no-repeat;
    background-position: 0 15px;

Like the Rosie the Riveter example, the parent of both these blocks needs to have a height equal to the highest of them, because they are both floated.

Both neo-default-horiz and neo-some-u skins have different mast-head treatments depending on whether the user is logged in or not. This is achieved by contextualizing #mastHead and it’s children – are they contained in not logged in (#headerMin) or logged in (#headerMax) headers? This allows you to alter the graphics, dimensions, anything depending on the logged in state.

Adding a background image

You can add a background image to the portal. Take a look at neo-examp-u and neo-oae below. In the first the image is a large slab, in the second it is a thin strip that gets repeated horizontaly.

In both cases the image is the background of the body (lines 3 &c of neo-oae/portal.css):

 body.portalBody {
    width: 100%;
    padding: 0;
    font-family: 'Helvetica Neue', Arial, sans-serif;
    font-size: .8em;
    margin: 0;
    background-color: #093b52;
    background-image:  url(images/page_bg_water.jpg);

and then setting margins on the #container (lines 25 & c of neo-oae/portal.css):

 #container {
    background: #fff;
    margin: 0 100px;
    -webkit-box-shadow: 0px 2px 5px rgba(50, 50, 50, 0.25);
    -moz-box-shadow:  0px 2px 5px rgba(50, 50, 50, 0.25);
    box-shadow: 0px 2px 5px rgba(50, 50, 50, 0.25);
    border:1px solid #ccc;
   -moz-border-radius: 0 0 10px 10px;
   -webkit-border-radius: 0 0 10px 10px;
   -khtml-border-radius: 0 0 10px 10px;
    border-radius: 0 0 10px 10px;

The base Sakai portal layout is fluid. So given the prevalent screen size plus the fact that users can minimize the tool you can probably use pretty wide margins – but keep an eye on some tools that need a bit of width (chat and resources come to mind).

Finally – everything in the portal and most everything in the tool is addressable.  Use Firebug to see what defines what and then change it. As an example of an extreme makeover take a look at the neo-rtl skin. Go to the admin workspace, choose Sites and add that skin to a site so that you can check it out. In any case, here is a screenshot. The colors/images are the same, but everything has been moved around.

Other things of note

Some features may be enabled but you will not be able to see them. The default rendering for these features is pretty neutral, but in case you want to take a look and maybe change here they are listed.

Time-out alert

This gets displayed to users who are about to loose their session. It looks like this alarming thing:

And you can change it in lines 1568 &c on this selector in neo-default/portal.css:

#timeout_alert_body {

No javascript alert

This is a message that gets displayed to users that do not have Javascript enabled. It gets displayed fixed at the bottom of the viewport so that it is visible always but does not cover anything else. 

To change it (this is on neo-default/portal.css) it is in lines 1644-1659 on the selector:

#portal_js_warn {

Jump-to links visible on focus

Sakai has always had jump-to links that allow a user to hop to specific parts of the portal via acceskeys. In order to help users who are not visually impaired and use the keyboard as the primary navigation device these are now visible when the user tabs into them.

In the neo-default skin these display over the logo:

But you can get creative:

The links are defined in lines 1459 & c. on this selector in neo-default/portal.css:

#skipNav a.internalSkip:focus, #skipNav a.internalSkip:active {

Presence Window and icon

If your installation is going to use Presence (displays who is in a site), you might want to touch that as well – the icon/control that toggles the window is pretty hidden in neo-default skin at bottom right. With absolute and fixed positioning you can move them anywhere in the portal where they will not cover anything else up.

As an example, make sure presence is enabled (display.users.present=true  in take a look at a site with the neo-examp-u skin. Go there as two different users in two different browsers. You will see:

and if you click on the guy icon you will see the following ("The instructor" is a link to the chat room because The Instructor is in a chat room):

Below you can see that the control icon to display the Profile/Preferences/Add new site can be changed.

In this case we have combined a cog and the little person to indicate that this is both a link to settings and a link to profile.


To see what changed specifically to do this, view the Subversion commits for SAK-22472 - Getting issue details... STATUS  



That is about it. More could be said – but hopefully this will get you started. If you have any questions please post to If you discover any bugs or have suggestions, create a Jira with reference (and/or portal) as the components.




 Click here to expand...


1.0 Create a file

The file is a central configuration file that is typically stored in a /sakai subdirectory relative to the Tomcat home directory ($CATALINA_HOME). It is a non-XML text file containing a series of key/value pairs that is read using the load method of Settings in govern everything from setting your institution's name to configuring your database. All settings in are read on startup; any changes you make subsequently will only take effect when you restart web application server. You may want to create a file in the same directory as Properties listed in override 

For a source installation the default file is located in the config module:


(warning) The bin package does not include a file. This is a deliberate exclusion; it eliminates the possibility of overwriting a local file if a bin package is opened over an existing Sakai installation.

If you need to override the default settings you must create your own file either from scratch or from a known working copy adding new key/value settings in order to customize your installation. We recommend that you review the file included in the source installation or in the appropriate maintenance branch.

The default location for your local file is $CATALINA_HOME/sakai. This folder is not created by Maven during the build and deployment process, so you will have to create it manually or via a script. You can also store Sakai's configuration files outside of your web application server's file hierarchy. For example, in a development environment you may find yourself frequently reinstalling Tomcat and unless you create a build script to automate the Tomcat installation and configuration process avoiding having to recreate $CATALINA_HOME/sakai and each time has its advantages.

To locate your properties file outside of your web application server environment modify the Java startup command or the JAVA_OPTS environment variable and set a system property named sakai.home. Make sure your external location is readable and writable by your web application server.

(info) For list of settings see the Sakai Properties Reference; for detailed documentation on the full variety of possible settings, see the sakai_properties.doc in /reference/docs/architecture/sakai_properties.doc.

2.0 Configure home page tool set per site

Tool collections for the home page can be configured for each site type. However, if the wsetup.home.toolids.* property is not set, the Worksite setup tool will default to the following set of tools for the home page:, sakai.summary.calendar, sakai.synoptic.announcement,, sakai.synoptic.messagecenter. Synoptic tools will be added or dropped from home page depending on whether their linked tool exists in the site or not. See SAK-15504 - Getting issue details... STATUS and SAK-16747 - Getting issue details... STATUS for more details.

3.0 Work site setup group helper

A new group helper is enabled by default (see SAK-13413 - Getting issue details... STATUS for more details). Site maintainers can now create groups based on sections and roles. To switch back to the old 2.5 style of group helper (ad-hoc only), one needs to add following setting in = sakai-site-manage-group-helper 

4.0 Session timeout warning

Sakai includes a property called inactiveInterval@org.sakaiproject.tool.api.SessionManager, which dictates the length of inactive time before a users session times out and allows for the enabling of a session timeout warning. Session status is now checked by the Sakai portal. If the remaining session time is less than the warning time (say 10 minutes). When a session expires, the any page requests are redirected to the URL indicated by the loggedOutUrl sakai property. See SAK-13987 - Getting issue details... STATUS SAK-8152 - Getting issue details... STATUS for more details.

To enable the session timeout warning, set the following properties in your local with a time interval of your choosing:


5.0 Configure email

Enabling Sakai to both send and receive email requires setting a number of properties in In order to send mail Sakai requires the address (name or IP) of an external SMTP server that will accept mail from Sakai:

Sakai's SMTP server is Apache James for Sakai 10 and earlier and SubEthaSMTP from 11. Most sys admins prefer running a standard mailer like Postfix on port 25 and configuring it to forward requests to Sakai. You may also currently have a mailer service running on port 25 (Linux usually has it running by default). So consider setting Sakai's SMTP service to run on a different port (e.g., 8025) in order to avoid conflicts.

To enable Sakai to receive mail you'll need to set the following properties:

# flag to enable or disable SMTP service for incoming email (true | false)

# dns addresses used by SMTP service for incoming email. (only supported on versions <= Sakai 10)

# SMTP port on which incoming SMTP service listens.  
# Recommend running on 8025, and using a standard mailer on 25 to forward mail to Sakai.
# Default=25.

Additional settings can be enabled to add support emails for a variety of tasks.

# Email support address used in incoming email rejection messages.
# A variation on this that's used in some places instead of the one above! Best to set both of them
#To change the postmaster address in general
# Email address to send errors caught by the portal, and user bug reports in response.

# Email address used as the "from" address for any email sent by Worksite Setup tool or Site Info tool.

# Send an email to the user when the user is added.

#For msgcntr notifications
#Whether or not to send the real address as msgcntr notifications
msgcntr.notification.user.real.from=true (false)

6.0 Configure logging

Once you have Sakai installed, configured and started, you can monitor Sakai by watching the logs. The log level for the standard Sakai source code and the demo is set to show info and warnings only. Watch for the WARN: messages. There are going to be some "normal" ones at startup, and some will likely slip by at runtime, but any warning is potentially something you might want to check out.

Logging levels can be specified in This augments and overrides the levels set in the default config file. Example:

log.config.1 =
log.config.2 =
log.config.3 =

This uses the established (if awkward) method of having a name.count followed by name.1, name.2 etc. to form an array of strings for the value "name". In this case, the name is "log.config". The values are of the form LEVEL.logger, and the possible levels are: OFF TRACE DEBUG INFO WARN ERROR FATAL ALL.

Sakai uses log4j for logging. See the official log4j documentation for more information about how to configure it if you have questions, but a few notes are collected here below.

To change the logging for Sakai in the source modify kernel/kernel-common/src/main/config/ the following property:

To turn on debug logging for all of Sakai, change the value from INFO to DEBUG. In order to enable debug logging for a single Sakai components, add a line such as in the following example, which will leave most of Sakai at INFO, but generate DEBUG level messages for the SQL service:

The logging controls are part of the LogConfigurationManager, implemented as a component in the Kernel. It can be disabled, if that's desired, with an entry in

enabled@org.sakaiproject.log.api.LogConfigurationManager = false

For Mac and *nix systems, the most important log is found in Tomcat's logs/catalina.out. It can be instructive to watch this log as Tomcat is starting up, by using a startup command like the following:

bin/; tail -f logs/catalina.out

Tomcat on Windows tends to be a little more puzzling about its logs, and it includes more of them, but its default behavior is to open catalina.out in a new window as soon as you start Tomcat. If you need more information about the logs in Windows, we'll refer you to the official Tomcat documentation.

(info) The SMTP server logs from Sakai will be written to the $CATALINA_HOME/sakai/logs directory.

7.0 Managing temporary files

Depending on usage, Sakai may create many large temporary files in the system temporary file storage location (e.g. /tmp). It is a good practice to routinely remove temporary files older than a day, especially if you have a lot of users or have heavy usage of mail sending with attachments. Note that you should not simply remove all temp files on a schedule as some of them may be in active use (also be careful about removing temp files which are used by other processes).

New properties, permissions

 Click here to expand...



New Feature

 Ability to host uploaded content on a separate domain

Ability to host uploaded content on a separate domain
Below are the properties you'd want to set to enable this functionality:
# turns on the functionality
# the FQDN of the Resources Domain in your environment.
# the full schema and domain name for constructing URLs in your environment
As an example, Indiana University has this setup:
8 "normal" app server nodes serving OLTP, under
3 "resource" app server nodes serving only file content, under
So, our settings are these:
The below settings are what IU runs in production (and are the defaults), but you are welcome to change as you feel necessary.
# These are the configured defaults, so no reason to override unless you intend to change them
#content.login.urlprefixes.count = 4
#content.login.urlprefixes.1 = /access/login
#content.login.urlprefixes.2 = /sakai-login-tool
#content.login.urlprefixes.3 = /access/require
#content.login.urlprefixes.4 = /access/accept
# These are the configured defaults, so no reason to override unless you intend to change them
#content.chs.urlprefixes.count = 2
#content.chs.urlprefixes.1 = /access/
#content.chs.urlprefixes.2 = /web/
# Exceptions to the content.chs.urlprefixes patterns
# These are the configured defaults, so no reason to override unless you intend to change them
#content.chsexception.urlprefixes.count = 3
#content.chsexception.urlprefixes.1 = /access/calendar/
#content.chsexception.urlprefixes.2 = /access/citation/export_ris_sel/
#content.chsexception.urlprefixes.3 = /access/citation/export_ris_all/

1.0 Property additions/changes

NOTE: The new Neoportal has a number of property additions which are listed at Sakai 2.9 portal changes







2.9.2Portalportal.showSubsitesAsFlyoutfalse SAK-22703 - Getting issue details... STATUS # The flyout subsites menu is off by default. Grouping the subsites into a flyout menu can be very 
# useful if you have a wide and shallow site hierarchy. To turn it on, set the following property to true. 
# portal.showSubsitesAsFlyout=false
2.9.2Kernelsession.max.per.user0 (representing unlimited sessions) KNL-1035 - Getting issue details... STATUS # Limits the maximum number of session on a per user basis 
# If a user exceeds this number of sessions then the oldest ones will be expired 
# when a new one is established until the total is at the max again 
# Default: 0 (unlimited number of sessions per user) 
2.9.2Lessons/Securitylessonbuilder.filterhtml (NOTE: this has not yet been updated in SAK-23523 - Getting issue details... STATUS # Should instructor content be filtered for dangerous html? false is filtering off. true is filtering on.
# If antisamy is enabled, filtering will be done with level low 
# If antisamy is enabled, explicit filtering levels can also be used: default, none, low, high 
# May be overridden for one instance of Lessons using an instance property of filterhtml
# Default=true; 
# THIS IS CHANGE FROM RELEASES *BEFORE* tag Sakai 2.9.2, which default to false
# lessonbuilder.filterhtml=false
2.9.2Securitycontent.cleaner.use.legacy.htmlfalse KNL-1015 - Getting issue details... STATUS

# Force the use of the legacy html content processor (used in versions before and including 2.9),
# if this is not overridden then the antisamy html cleaner will be used
# Default: false (use AntiSamy)


KNL-1015 - Getting issue details... STATUS

KNL-1029 - Getting issue details... STATUS

# Force the user of a lower security profile for content processing and scanning,
# if this is not overridden then high security settings are used.
# The standard high and low files are located in "kernel/sakai-kernel-impl/src/main/resources/antisamy/"
# Override the standard files by placing your own files in:
# ${sakai.home}/antisamy/high-security-policy.xml
# ${sakai.home}/antisamy/low-security-policy.xml
# NOTE: only works if AntiSamy is enabled (see content.cleaner.use.legacy.html)
# Default: false (use high security - no unsafe embeds or objects)




SAK-23166 - Getting issue details... STATUS

SRCH-96 - Getting issue details... STATUS

Controls access to the Admin page within search.
This should only be activated on the actual search server node and all other nodes should have this turned off to restrict access. PRFL-692 - Getting issue details... STATUS Email notification to a specific user whenever someone changes their profile. PRFL-692 - Getting issue details... STATUS  
2.9.0Announcementssakai.announcement.reordertrue SAK-8005 - Getting issue details... STATUS 994 Note that a tool property also needs to be set enableReorder=true (the default is false)
2.9.0AnnouncementsenableReorderfalse SAK-8005 - Getting issue details... STATUS see row above KNL-273 - Getting issue details... STATUS 995 KNL-273 - Getting issue details... STATUS KNL-273 - Getting issue details... STATUS KNL-273 - Getting issue details... STATUS  
2.9.0Assignmentsassignments.instructor.submit.for.studentfalse SAK-7475 - Getting issue details... STATUS

Allows an instructor or any user with assignments management permissions to submit the assignment on behalf of a student who has no submission yet (via the View Assignment list by student)






KNL-924 - Getting issue details... STATUS

# ######################################################################## 
# ######################################################################## 


# Control the dereferencing of configuration values on initial load 
# (values are always dereferenced but this affects whether they are done on config load or not) 
# Dereferencing values means that all values like "${}" are replaced 
# with the value from the config item of that name (unmatched ones are left as is) 
# Default: true (dereference all values loaded from the config properties files) 
# Default: false (do not dereference all values including those loaded from other sources - e.g. database) 

2.9.0Configurationconfig.dereference.on.load.allfalse KNL-924 - Getting issue details... STATUS Same as above
2.9.0Assignments/Turnitinturnitin.repository.setting.value1 SAK-21059 - Getting issue details... STATUS  Default value for "Submit papers to the following repository"
  SAK-21059 - Getting issue details... STATUS



2.9.0Assignments/Turnitinturnitin.report_gen_speed.setting.value  SAK-21059 - Getting issue details... STATUS
   Default value for "Generate Originality Reports"

true SAK-21059 - Getting issue details... STATUS  Option appears in GUI to check paper against Turnitin.
2.9.0Assignment/Turnitinturnitin.option.internet_checktrue SAK-21059 - Getting issue details... STATUS Option appears in GUI to check paper against Internet (web search).
2.9.0Assignment/Turnitinturnitin.option.journal_checktrue SAK-21059 - Getting issue details... STATUS

Option appears in GUI to check paper against Journals.

2.9.0Assignment/Turnitinturnitin.option.institution_checktrue SAK-21059 - Getting issue details... STATUS Option appears in GUI to check paper against Institutional repository.
2.9.0Assignment/Turnitinturnitin.option.s_paper_check.defaultfalse SAK-21059 - Getting issue details... STATUS The default checkmark in the Turnitin option in the GUI.
2.9.0Assignment/Turnitinturnitin.option.internet_check.defaultfalse SAK-21059 - Getting issue details... STATUS The default checkmark in the Internet (web search) option in the GUI.
2.9.0Assignment/Turnitinturnitin.option.journal_check.defaultfalse SAK-21059 - Getting issue details... STATUS The default checkmark in the Journal option in the GUI.
2.9.0Assignment/Turnitinturnitin.option.institution_check.defaultfalse SAK-21059 - Getting issue details... STATUS The default check mark in the Institutional repository option in the GUI.
2.9.0Entity Brokerentitybroker.batch.enablefalse SAK-22619 - Getting issue details... STATUS Property to disable direct batch servlet
2.9.0Portal2portal.use.profiletrue PRFL-757 - Getting issue details... STATUS Allows disabling of the Profile2 tool in Neo-portal
2.9.0Loginlogin.log-failedtrue SAK-22430 - Getting issue details... STATUS Log failed login attempts
2.9.0My Workspacemyworkspace.showtrue SAK-22386 - Getting issue details... STATUS Globally hide "My Workspace"
2.9.0Portalportal.portlet.tidy.warningsfalse SAK-22335 - Getting issue details... STATUS   Still false by default - when true - it runs Tidy in noisy mode. It does *not* take the output of Tidy - just checks the portlet output and then uses it unchanged. 
2.9.0Portalportal.portlet.tidyfalse This is now ignored. We cannot use the output of Tidy as the markup.
2.9.0Basic LTIbasiclti.provider.*n/a SAK-22229 - Getting issue details... STATUS blti.producer was the old prefix.
2.9.0 2.9.2Gradebookcourse_grade_details_export_course_grades_institution_control  SAK-22204 - Getting issue details... STATUS originally thought SAK-22204 was in 2.9.0, but was not completed until 2.9.2
2.9.2Gradebookcourse_grade_details_export_course_grades_institution  SAK-22204 - Getting issue details... STATUS  

userid=Student ID
usereid=Student unique ID
useremail= Student Email
username= Student Name
sortname= Student Name
coursegrades= Course Grade
gradeitem= Grade Item
siteid= Site ID
sitetitle= Site Title

  SAK-22204 - Getting issue details... STATUS KNL-920 - Getting issue details... STATUS # Email notifications reply from preference 
# Set this to true to send notifications from the triggering user email addresses for announcements 
# instead of from a general server email address (no-reply@...) 
# OLD (deprecated) config value:  emailFromReplyable@org.sakaiproject.event.api.NotificationService  
# Default: false (use the no-reply@... instead) = true 
2.9.0Account Validator   RES-42 - Getting issue details... STATUS #if you don't want to use ui.service as the Production name, use:

#sets the toke expiration date

#sets the max number of resends before it expires the token
2.9.0URLshortenedurl.implementation=org.sakaiproject.shortenedurl.api.RandomisedUrlServiceoff SAK-21859 - Getting issue details... STATUS

#Uncomment this to use the built in URL randomiser/shortener (recommended) #shortenedurl.implementation=org.sakaiproject.shortenedurl.api.RandomisedUrlService


SAK-22331 - Getting issue details... STATUS SAK-21848 - Getting issue details... STATUS

enable the UI in various tools for presenting shortenedurls




off SAK-21859 - Getting issue details... STATUS

# ########################################################################
# Shortened URLs
# ######################################################################## #
# Note: short URLs are disabled by default
# Uncomment this to use the built in URL randomiser/shortener (recommended) #shortenedurl.implementation=org.sakaiproject.shortenedurl.api.RandomisedUrlService

# Uncomment this to use the URL shortner
# You must also have a bitly account. So signup, navigate to,
# retrieve your details, uncomment and set the following:

# By default, external URLs (ie a URL for another site) cannot be shortened using the /direct/url entity provider
# You can change this by setting the following to true.

2.9.0URLshortenedurl.external.enabledfalse SAK-21859 - Getting issue details... STATUS see previous row for comments.
2.9.0Password ResetsiteManage.validateNewUsersfalse SAK-22014 - Getting issue details... STATUS  
2.9.0PDA Portal   SAK-22199 - Getting issue details... STATUS  
2.9.0Sakai Tutorial Toolportal.use.tutorialtrue SAK-22243 - Getting issue details... STATUS  
2.9.0Worksite setup   SAK-21707 - Getting issue details... STATUS


#For each worksitesetup.sort.key property that is specified, the associated worksitesetup.sort.order property must also be specified

#The following are all comma separated values. If these properties are not present, the drop-downs will be sorted as they were sorted before (on eid, then title).
#The key on which the sessions are sorted. Possible values are authority, description, eid, endDate, startDate, title

#The key on which the courseSets are sorted. Possible values are authority, category, description, eid, parent, title

#The key on which the courseOfferings are sorted. Possible values are academicSession, authority, canonicalCourseEid, courseSetEids, description, eid, endDate, startDate, status, title

#The key on which the sections are sorted. Possible values are authority, category, courseOfferingEid, description, eid, enrollmentSet, maxSize, meetings, parent, title

#The following are all comma separated lists of sorting orders that correspond to the above keys. They have values of 'asc' or 'desc' for ascending/descending
#The order on which the sessions are sorted

#The order on which the courseSets are sorted

#The order on which the courseOfferings are sorted

#The order on which the sections are sorted

2.9.0Forumsmsgcntr.editor.rows22 MSGCNTR-523 - Getting issue details... STATUS 22 rows is the default. Specify the size of the CK Editor in Forums.
2.9.0Calendarcalendar.default.viewweek SAK-20724 - Getting issue details... STATUS property can equal day, week, month or year
2.9.0Portalportal.neochatfalse SAK-20373 - Getting issue details... STATUS

# Controls the portal chat feature
# portal.neochat=false

# Controls whether or not an individual user's profile image will appear in the portal chat
# portal.neoavatar=true

  SAK-20373 - Getting issue details... STATUS #The tool ids for the tools that end up in the top bar and slide out drawer  
# set to 'none' to suppress the top bar linking behavior 
2.9.0Portalportal.neoavatartruesee abovesee above
2.8.0Session Timeout



defaults SAK-22878 - Getting issue details... STATUS  
2.9.0Entity SAK-21654 - Getting issue details... STATUS

Allows for finer control over the way user lookups occur in Entity Broker user endpoint. The current implementation is preserved by default but this property will adjust it to never attempt an ID lookup unless it was requested explicitly (using "id=" as the prefix for the id).


Set this to true to disable id/eid failover checks (this means lookups will only attempt to use id or eid as per the exact params which are passed or as per the endpoint API)

In other words, the user id must be prefixed with "id=", otherwise it will be treated like an eid.

2.9.0Worksitesportal.always.display.active_sitesfalse SAK-15769 - Getting issue details... STATUS Whether to always show the "My Active Sites" tab, even if there is not an "overflow" of worksites. KNL-826 - Getting issue details... STATUS

This contributed code improves performance by pre-caching Sakai users. So the full improvement of user caching does not require waiting for a second user interaction. This user pre-caching is done optionally on servlet container (Tomcat) restart and is also done optionally according to a configurable daily schedule.

2.9.0Separate Domain for Contentcontent.separateDomains=true

content.login.urlprefixes.count = 4
content.login.urlprefixes.1 = /access/login
content.login.urlprefixes.2 = /sakai-login-tool
content.login.urlprefixes.3 = /access/require
content.login.urlprefixes.4 = /access/accept

used the raw redirecting code in The end result is pretty simple, and you can

actually host it on just 1 app node if you have multiple domain names

pointing to it from Apache [1].





*also requires

false MSGCNTR-584 - Getting issue details... STATUS displays user profile images and info next to the user's posts


2.0 New/changed permissions





2.9.0Site Creationsite.add.portfolio KNL-703 - Getting issue details... STATUS
2.9.0Site Creationsite.add.project KNL-952 - Getting issue details... STATUS


Site Stats


Admin access to statistics across all sites. Change for this setting?

2.9.0Site Statssitestats.viewUse Site statistics tool. change for this setting?
2.9.0Sitessite.roleswapchange for this setting?
2.9.0Lessonslessonbuilder.readAccess and read lessons.
2.9.0Lessonslessonbuilder.updCreate and update lessons.

If msg.permissions.allowToField.allParticipants   is set to true , then "All Participants" is an option in the "To:" field when sending a message. if chosen then all site participants will recieve the message.

2.9.0Messagesmsg.permissions.allowToField.groupsIf msg.permissions.allowToField.groups   is set to true , then all groups which have been defined are available as options in the "To:" field when sending a message and for each group selected, all group members will be sent the message.
2.9.0Messagesmsg.allowToField.rolesIf msg.allowToField.roles   is set to true , then all roles which have been defined in the site (such as instructor, teaching assistant role, etc) are available in the "To:" field when sending a message and the message will be sent to all the site participants assigned that role.
If msg.permissions.viewHidden.groups is set to true ,   then users with this role will be able to view groups which have been marked as hidden in the settings


3.0 Stealthed Tools

The OSP community recommends stealthing  the OSP Wizards tool and the OSP Layouts  -  SAK-22857 - Getting issue details... STATUS

Update the property stealthTools@org.sakaiproject.tool.api.ActiveToolManager by adding osp.wizard,osp.presLayout


Database support

 Click here to expand...


The Sakai CLE supports the following production-grade databases:




MySQL 5.5.xMySQL Connector/J 5.1.13+(minus) Sakai requires transaction support. In the case of MySQL you must implement the InnoDB storage engine to ensure proper transaction handling.

MySQL 5.1.x

MySQL Connector/J 5.1.13+

(minus) Sakai requires transaction support. In the case of MySQL you must implement the InnoDB storage engine to ensure proper transaction handling.

Oracle 11g


(warning) Oracle recommends using the latest 11g driver if you are using Java 6 with either 10g or 11g; with Java 6 in combination with the 11g driver, it's recommended that you use kernel-1.2.1+ (2.8), kernel-1.1.11+ (2.7) or kernel-1.0.x (r87324+) in order to include the fix for KNL-637.

(green star) Recommend but not required - convert longs to clobs - SAK-7977 - Getting issue details... STATUS Only tested on Oracle - . By default it will scan your tables for LONG and LONG RAW fields but it won't change anything. Add "CONVERT" to the command line to actually perform the conversion and rebuild the indexes in the involved tables. Please be sure you understand what the script will be doing before you run it, and always always test thoroughly on a non-production environment before you attempt to run this on your production system.

Oracle 10g


(warning) Both Oracle 10g AND 9i users must use the 10g driver; the latest 10g "Release 2" (10.2.x) or higher is recommended.
(warning) Oracle recommends using the latest 11g driver if you are using Java 6 with either 10g or 11g; with Java 6 in combination with the 11g driver, it's recommended that you use kernel-1.2.1+ (2.8), kernel-1.1.11+ (2.7) or kernel-1.0.x (r87324+) in order to include the fix for KNL-637.




Choose the appropriate MySQL or Oracle JDBC driver (or connector) for your installation. For MySQL, download the *zip/*tar.gz archive, extract its contents and copy the mysql-connector-java-<version>-bin.jar to $CATALINA_HOME/common/lib. For Oracle download the ojdbc14.jar file and copy it to $CATALINA_HOME/common/lib.

(info) You will not need to create Sakai database objects (tables, indices, etc) when setting up your database. Sakai generates its own database schema automatically during the Tomcat setup process via the autoDDL setting in

In actuality, Sakai is not limited to these database choices and integration with other RDBMS systems is not difficult. In the past at least one installation used Microsoft SQL Server while requests for PostgreSQL integration are occasionally raised on the Sakai developers list. However, to date no one in the Sakai Community has stepped forward to support alternatives to either Oracle or MySQL, a prerequisite for adding additional database options to the release.


(minus) Irrespective of whether you utilize MySQL or Oracle, be sure you have configured your database to use the UTF-8 character set. Failure to do so will result in range of issues when attempting to use Unicode characters in Sakai. Consult your database documentation or a local DBA for instructions on how to set your database up properly.

If you are uncertain as to how your database is currently configured, you can check with a query. Here is a sample query for checking an Oracle instance:

SQL> select value from nls_database_parameters where parameter = 'NLS_CHARACTERSET';


For MySQL, the command to see what encoding your database is currently set to is "show create database sakai", assuming, of course, that your database is named "sakai". e.g.:

mysql> show create database sakai;
| Database | Create Database |
| sakai | CREATE DATABASE `sakai` /*!40100 DEFAULT CHARACTER SET utf8 */ |
1 row in set (0.00 sec)

Converting a database from one character set to another is a non-trivial operation, particularly if it is a large production database. We recommend strongly that you verify this aspect of the database creation and configuration process before deploying Sakai.

1.0 Configure the database


By default, all Sakai distributions are configured to use an in-memory version of HSQLDB. HSQLDB is provided for testing/demo purposes only and should not be run in production.

Whatever database you choose to use you will need to modify at a minimum the following connection settings in


2.0 Set the database username and password


Set your database username and password:

# DATABASE CONFIGURATION - make sure to modify details to match your particular setup

# The username and password. The defaults are for the out-of-the-box HSQLDB. Change to match your setup.

3.0 Set the database connection


MySQL Sample Configuration

Locate the MySQL configuration block, uncomment the settings and save your changes. Make sure you modify the data source, username and password settings to match your local environment. Do not forget to comment out the HSQLDB and Oracle settings.

# MySQL settings - make sure to alter as appropriate

Oracle Sample Configuration

Locate the Oracle configuration block, uncomment the settings and save your changes. Make sure you modify the data source, username and password settings to match your local environment. Do not forget to comment out the HSQLDB and MySQL settings.

# Oracle settings - make sure to alter as appropriate
validationQuery@javax.sql.BaseDataSource=select 1 from DUAL

(warning) Oracle users may experience performance issues with certain of the SQL settings that work for MySQL. Oracle users can reduce Db load by uncommenting the following settings:

# For improved Oracle performance (from the University of Michigan)

4.0 Set auto.ddl=true


(info) On startup, Sakai will generate all database objects (tables, keys, constraints, etc.) automatically, obviating the need to run DDL scripts manually per the setting auto.ddl.
# establish auto.ddl - on by default

(warning) Once the database schema is created you should set auto.ddl=false.

5.0 Install MySQL 5.5 / 5.1


Configuring the Sakai CLE to use MySQL is an excellent option both for local development and production purposes.

(minus) Sakai requires transaction support. In the case of MySQL you must implement the InnoDB storage engine to ensure proper transaction handling.

(warning) Users upgrading from MySQL 5.0 to MySQL 5.1 on a Mac have reported name comparison problems on startup (for more info see This issue is solved by specifying the following property in a local my.cnf configuration file:


(info) You will not need to create Sakai database objects (tables, indices, etc) when setting up your database. Sakai generates its own database schema automatically during the Tomcat setup process via the autoDDL setting in

(info) Case sensitivity. In most varieties of UNIX, MySQL is case sensitive since the underlying operating system determines the case sensitivity of database and table names. This is not the case for MySQL running in Windows which is case insensitive. Previous MySQL conversion scripts contained a mixture of upper case and lower case statements which occasionally caused problems for upgraders; for 2.8 we opted for lower case for the syntax while leaving the table and field names upper case. Testing on MySQL 5.1 did not reveal any issues with this choice.

Before installing MySQL, confirm whether or not it is already installed on your system by checking the version from the command line:

mysql --version
mysql  Ver 14.14 Distrib 5.1.52, for apple-darwin10.3.0 (i386) using readline 5.1

If MySQL is not installed download MySQL 5.1/5.5 binaries or source from Linux users should install MySQL using a package or binaries if possible. Choose the standard configuration. Windows users should consider installing MySQL as a service. Remember to include MySQL's /bin directory in your PATH statement.

MySQL 5.5:

MySQL 5.1:

Assign a password for the root account:

mysql -u root -pmysqlpassword

5.1 Set MySQL environment variables



Set the MYSQL_HOME environment variable to point to the base directory of your MySQL installation. In the example below, the path points to a symbolic link file rather than the actual MySQL installation directory. You can create a symbolic link ("sym link") in Unix using the ln -s command (e.g., ln -s mysql-5.1.46-osx10.6-x86_64 mysql).


export MYSQL_HOME=/usr/local/mysql


set MYSQL_HOME=C:\mysql

Add MySQL's /bin directory to your PATH variable.





5.2 Create a my.cnf/my.ini configuration file


You can configure MySQL to read a wide variety of startup options from a file named my.cnf. Settings are scoped and can be overridden by file location:








binary install: /usr/local/mysql/data/my.cnf; source install: /usr/local/var/my.cnf




global, server-specific

Below is a minimalist MySQL 5.1 configuration file for a development laptop /etc/my.cnf:


(warning) Restart MySQL in order for the new settings to take effect.

5.3 Create a "sakai" database and user account


Unable to render {include} The included page could not be found.


Indie Versions


 2.9.3 Indie versions
Detailed POM file from which the information below is derived
Kernel - 1.3.3
LTI (Learning Tools Interoperability) - 2.1.1
Entity Broker - 1.5.3
Lessons - 1.4.3
Mail Archive - 2.9.3
MailSender - 1.7.4
Message Center (Forums and Messages) - 3.0.3
Polls - 1.5.3
Profile2 - 1.5.3
Samigo - 2.9.3
Search - 1.4.3
Shortenedurl - 1.1.3
Sitestats - 2.3.6
 2.9.2 Indie versions. Click here to expand...
Detailed POM file from which the information below is derived
Kernel - 1.3.2
LTI (Learning Tools Interoperability) - 2.1.0
Entity Broker - 1.5.2
Lessons - 1.4.2
Mail Archive - 2.9.2
MailSender - 1.7.3
Message Center (Forums and Messages) - 3.0.2
Polls - 1.5.2
Profile2 - 1.5.2
Samigo - 2.9.2
Search - 1.4.2
Shortenedurl - 1.1.2
Sitestats - 2.3.5


 2.9.1 Indie Versions - click here to expand
Detailed POM file from which the information below is derived
Kernel - 1.3.1
LTI (Learning Tools Interoperability) - 2.0.1
Entity Broker - 1.5.1
Lessons - 1.4.1
Mail Archive - 2.9.1
MailSender - 1.7.2
Message Center (Forums and Messages) - 3.0.1
Polls - 1.5.1
Profile2 - 1.5.1
Samigo - 2.9.1
Search - 1.4.1
Shortenedurl - 1.1.1
Sitestats - 2.3.3

 2.9.0 Indie Versions - click here to expand
Detailed POM file from which the information below is derived
Kernel - 1.3.0
LTI (Learning Tools Interoperability) - 2.0.0
Entity Broker - 1.5.0
Lessons - 1.4.0
Mail Archive - 2.9.0
MailSender - 1.7.1
Message Center (Forums and Messages) - 3.0.0
Polls - 1.5.0
Profile2 - 1.5.0
Samigo - 2.9.0
Search - 1.4.0
Shortenedurl - 1.1.0
Sitestats - 2.3.0

Known issues


Lessons tool - special installation instructions

Lesson tool

Sakai 2.9.3
For large installations with a million Lessons items or more, Lessons may break since the id generated cannot go high enough. To fix you can use the following statements. Please see LSNBLDR-284 - Getting issue details... STATUS for more information.

alter table lesson_builder_items modify gradebookId varchar(100); 
alter table lesson_builder_items modify altGradebook varchar(100); 

alter table lesson_builder_items modify gradebookId varchar2(100 char); 
alter table lesson_builder_items modify altGradebook altGradebook varchar2(100 char);

Sakai 2.9.4 (and a note about Lessons with 2.8.x)


If you are running the Lessons that comes with Sakai 2.9.x, database upgrades are handled automatically. No special instructions are needed.


 If you install Lessons yourself, we recommend using the most recent tag. This is currently 1.4.2.  If you install it yourself, you need to be concerned about database schema updates.  We recommend starting once with auto.ddl on. That will handle most database updates for you. The exceptions are in the following files:

 If you are moving from a copy of lessons older than the 1.4.0 tag:

* simplepage.pre29-to29.sql

If you are moving to the 1.4.2 tag from any previous version, and are using mysql: 

* simplepage.for-2.9.2.sql [mysql only] 

If you are unable to use auto.ddl, see the README files in the Lessons source. It will explain how to generate a database update script to go between any two versions of the source.

For the convenience of sites running 2.8, we generate binaries for 2.8. See


Deprecations, Removals and Warnings





2.9.0Citations/Google Scholarretired
Google has discontinued Sakai support in Google Scholar with the new Google Scholar UI introduced earlier this year. This was confirmed directly with Google. For more information, see a sakai-dev post from May 2012:
For now, the problem can be fixed by adding a "sciui=2" parameter to the Google Scholar URL to force the old Google Scholar UI, but it's not clear how long Google will keep the old interface available.
2.9.0NeoChatdisabledNeoChat is a new feature in 2.9.0. We recommend leaving neochat disabled in a production environment until performance and usability tests are completed

Open 2.9-related issues worth noting





Issue documentation SAK-22891 - Getting issue details... STATUS Sakai's context sensitive help was not updated in 2.9.0 and therefore contains the 2.8 release help information. creation SAK-22994 - Getting issue details... STATUS Worksite Setup tool won't display extra site types from SiteTypeProvider during the new course site creation
2.9.0Conversion script issueSamigo (Test and Quizzes) SAM-787 - Getting issue details... STATUS Not all languages are included in the conversion at this time, only English, Spanish and Catalan.
2.9.0n/aFirefox browser with WebDav instructions SAK-22588 - Getting issue details... STATUS Links to OS specific instructions don't work on Firefox. Mozilla issue, not a Sakai issue. w/noteSwitching languages may require clearing browser cache SAK-22568 - Getting issue details... STATUS Some Sakai features require clearing your browser cache for the change to be reflected.
2.9.0no fix for Citations Helper plannedCKEditor - Some plugins not supported

SAK-17886 - Getting issue details... STATUS

SAK-21667 - Getting issue details... STATUS

Currently Citations Helper and Entity Picker plugins are not supported in CKEditor. It's expected that iSyllabus SAK-22283 - Getting issue details... STATUS will replace the functionality of

the Entity Picker, but no news on what will happen with Citations.

2.9.0 CKEditor - Configuration Changes SAK-22113 - Getting issue details... STATUS

Because we wanted to try to make it easier to configure CKEditor via an external file, the ckeditor.launch.js configuration for external plugins moved to the bottom of the file, and external plugins

have their own folder in "ckextraplugins". These include wordcount, an updated movie player and support for After The Deadline (if you set up the server) in Mysql Conversion Script SAK-22911 - Getting issue details... STATUS MFR_AREA_T is wrong case and can cause issue in conversion script, use conversion script in trunk or 2.9.x
2.9.3 Samigo SAM-2201 - Getting issue details... STATUS AssessmentGradeInfoProvider isAssignmentDefined results in many thousands database queries

Heads up for planned changes post 2.9.0 

2.10Events SAM-658 - Getting issue details... STATUS Major change to events.


Open 2.x tickets

For listings of all open 2x-related issues see:

Blocker Critical Major Minor, trivial

Security policy

Sakai Project Security Policy

version 3.1

NOTICE: If you uncover a security vulnerability in Sakai software please do not voice your concerns on any public listserv, blog or other open communication channel but instead notify the Sakai Security Working Group immediately at . Please provide a callback telephone number so that we can contact you by telephone if it is deemed necessary.


Sakai is an open-source software initiative that promotes knowledge sharing and information transparency. However, when dealing with security vulnerabilities the integrity of existing Sakai installations can be compromised by the premature public disclosure of security threats before the Sakai Community has had time to analyze, develop and distribute countermeasures through private channels to institutions and organizations that have implemented Sakai software. Recognizing this danger, the Sakai Security Working Group (WG) has developed a security policy that seeks to safeguard the security of existing Sakai installations as well as provide full public disclosure of Sakai security vulnerabilities in a timely manner.


Security vulnerabilities in Sakai should be reported immediately to the Sakai Security WG at . When contacting the WG, please provide a callback telephone number so that we can contact you by phone if it is deemed necessary. Sakai Security WG and community developers, working with the original reporter of the vulnerability, will investigate the issue, determine versions affected, and, if necessary, develop and distribute as quickly as is possible a security update for the Sakai Community and general public.


Issues identified as security-related are prioritized and addressed differently than functionality or other issues classified as bugs. Access to issues flagged as security vulnerabilities in Sakai's JIRA issue tracking system will be restricted to Sakai security contacts and members of the Sakai Security Work Group (see below). Discussion, analysis, code development and testing relevant to reported security vulnerabilities will be treated as confidential information.

The Sakai Security WG will work with Sakai Community members to develop fixes for both vulnerable released versions and vulnerable branches (up to a particular date or release number). Code commits for security-related fixes will seek to mask the nature of the vulnerability. This usually takes one of two forms: (1) the commit is held until a patch can be tested, distributed and implemented in known sites or (2) in the case of a fix to a less significant threat the commit may be checked in with limited commentary.

During our QA and release cycles security-related issues will receive priority. At a minimum, the Sakai Security WG will review outstanding security issues before the start of each QA cycle.

The Sakai Security WG will issue security advisories and security updates to the general public once existing Sakai installations have been notified and given time to patch their systems.


The Sakai Community has instituted a Security Work Group (WG) composed of senior members of the community to respond to reports of security vulnerabilities and who operate using private channels of communication. Besides working to resolve known security vulnerabilities the Security WG will also operate in a pro-active manner, reviewing existing tools and services from a security perspective; defining Sakai security requirements; devising QA/testing models that identify potential security weaknesses; producing security-related documentation; and helping educate developers on web-related security vulnerabilities.


Public information regarding security vulnerabilities will be documented in security advisories, Sakai software release notes and readme files included in demo, binary and source distributions as well as online at the following locations:

Sakai Issues Tracking:
Sakai Release page:

Release documentation for security updates will identify the Sakai version affected including code branches and provide information on how to close the vulnerability. Security vulnerabilities will be ranked by the threat level index listed below:

Critical Risk

Security vulnerabilities classified as a critical risk involve the possible exposure of data to unauthorized viewing, modification, deletion or acquisition as well as attacks that could result in data corruption.

Major Risk

Security vulnerabilities classified as a major risk involve logical attacks that could compromise the availability of Sakai or otherwise degrade system performance, disrupt or circumvent normal application flow control of Sakai tools and services or use Sakai as a platform for attacks on other systems.

Minor Risk

Security vulnerabilities classified as a minor risk involve threats that (1) can be eliminated by updating existing configuration files to reflect a default secure state (e.g.,, (2) are considered extremely difficult for attackers to exploit and/or (3), if exploited, are of minor consequence to the operation of Sakai installations.


Whenever Sakai security vulnerabilities surface, the Sakai Security WG will execute a three-step security advisory protocol in order to alert (1) Apereo Foundation partners and designated security contacts associated with known Sakai implementations, (2) the wider Sakai Community, and (3) the public at large regarding security issues.

The first step in our protocol involves providing alerts to our partner institutions and organizations as well as to our security contacts throughout the Sakai Community via the use of private communication channels. We delay deliberately the issuance of community-wide and public security advisories in order to allow time for security updates to be devised, tested, distributed and, if necessary, applied to Sakai installations that are known to the Foundation. Once these systems are patched the wider Sakai Community is alerted and time provided for Sakai implementers unknown to the Sakai Security WG to identify themselves, designate security contacts, and patch their systems before we proceed to the third and final step in our security advisory protocol, the general public announcement.


The Sakai Secuirty WG encourages institutions and organizations that download and install Sakai software to consider contacting the Sakai Security WG and providing the name(s) and contact details of one or more individuals to serve as security contacts. Security contact information should be emailed to

As noted above, Sakai security contacts receive security updates in advance of public release in order their institution or organization time to patch their Sakai installation before any Sakai security vulnerability becomes general knowledge. Designated security contacts are also provided access rights to view, comment and address issues flagged as security items in Sakai's JIRA issue tracking application. Security-related JIRA issues are hidden from public view. We do not grant access to these JIRA items lightly and we verify the identity and role of each person who is designated as a security contact.

Email traffic sent to should be treated confidentially and should not be forwarded to other Sakai or public email lists or discussed elsewhere in order to help protect institutions and organizations running Sakai from security-related exploits or attacks.

Older Releases

The Sakai 2.7 series is now unsupported. The release of Sakai 2.9.0 marks the end of official community support for the Sakai 2.7 series. Organizations running Sakai 2.7 (or earlier versions) are strongly encouraged to upgrade to the latest versions of Sakai 2.8 or 2.9 in order to take advantage of continued maintenance support.


The Sakai 2.9 series is licensed under the Educational Community License version 2.0.

  • No labels